Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -132,32 +132,33 @@ class FinancialAnalyzer:
|
|
132 |
metrics = {}
|
133 |
|
134 |
# 1. Gross Profit Margin Ratio
|
|
|
135 |
revenue = self.get_nested_value(income_data, "Revenue", "Total Net Revenue", "2025")
|
136 |
-
cogs = self.get_nested_value(income_data, "
|
137 |
gross_profit = revenue - cogs
|
138 |
metrics['gross_profit_margin'] = (gross_profit / revenue) * 100 if revenue != 0 else 0
|
139 |
|
140 |
# 2. Current Ratio
|
141 |
-
current_assets = self.get_nested_value(balance_data, "
|
142 |
-
current_liabilities = self.get_nested_value(balance_data, "
|
143 |
metrics['current_ratio'] = current_assets / current_liabilities if current_liabilities != 0 else 0
|
144 |
|
145 |
# 3. Debt Ratio
|
146 |
-
total_liabilities = self.get_nested_value(balance_data, "
|
147 |
-
total_assets = self.get_nested_value(balance_data, "
|
148 |
metrics['debt_ratio'] = (total_liabilities / total_assets) * 100 if total_assets != 0 else 0
|
149 |
|
150 |
# 4. Sustainable Growth Rate (SGR)
|
151 |
-
net_income = self.get_nested_value(income_data, "
|
152 |
-
equity = self.get_nested_value(balance_data, "
|
153 |
-
dividends = self.get_nested_value(income_data, "
|
154 |
-
|
155 |
roe = (net_income / equity) * 100 if equity != 0 else 0
|
156 |
retention_ratio = (net_income - dividends) / net_income if net_income != 0 else 0
|
157 |
metrics['sgr'] = roe * retention_ratio / 100 if roe != 0 else 0
|
158 |
|
159 |
# 5. Accounts Receivable Turnover
|
160 |
-
accounts_receivable = self.get_nested_value(balance_data, "
|
161 |
metrics['ar_turnover'] = revenue / accounts_receivable if accounts_receivable != 0 else 0
|
162 |
|
163 |
# 6. Return on Equity (ROE)
|
@@ -167,16 +168,20 @@ class FinancialAnalyzer:
|
|
167 |
metrics['net_profit_margin'] = (net_income / revenue) * 100 if revenue != 0 else 0
|
168 |
|
169 |
# 8. Retained Earnings Ratio
|
170 |
-
retained_earnings = self.get_nested_value(balance_data, "
|
171 |
metrics['retained_earnings_ratio'] = (retained_earnings / total_assets) * 100 if total_assets != 0 else 0
|
172 |
|
173 |
-
#
|
174 |
revenue_2024 = self.get_nested_value(income_data, "Revenue", "Total Net Revenue", "2024")
|
175 |
metrics['revenue_growth'] = ((revenue / revenue_2024) - 1) * 100 if revenue_2024 != 0 else 0
|
176 |
|
|
|
|
|
|
|
|
|
177 |
return metrics
|
178 |
except Exception as e:
|
179 |
-
print(f"Error calculating metrics: {
|
180 |
return {}
|
181 |
|
182 |
|
|
|
132 |
metrics = {}
|
133 |
|
134 |
# 1. Gross Profit Margin Ratio
|
135 |
+
# 1. Gross Profit Margin
|
136 |
revenue = self.get_nested_value(income_data, "Revenue", "Total Net Revenue", "2025")
|
137 |
+
cogs = self.get_nested_value(income_data, "Cost and Gross Profit", "Cost of Goods Sold", "2025")
|
138 |
gross_profit = revenue - cogs
|
139 |
metrics['gross_profit_margin'] = (gross_profit / revenue) * 100 if revenue != 0 else 0
|
140 |
|
141 |
# 2. Current Ratio
|
142 |
+
current_assets = self.get_nested_value(balance_data, "Key Totals", "Total_Current_Assets", "2025")
|
143 |
+
current_liabilities = self.get_nested_value(balance_data, "Key Totals", "Total_Current_Liabilities", "2025")
|
144 |
metrics['current_ratio'] = current_assets / current_liabilities if current_liabilities != 0 else 0
|
145 |
|
146 |
# 3. Debt Ratio
|
147 |
+
total_liabilities = self.get_nested_value(balance_data, "Key Totals", "Total_Liabilities", "2025")
|
148 |
+
total_assets = self.get_nested_value(balance_data, "Key Totals", "Total_Assets", "2025")
|
149 |
metrics['debt_ratio'] = (total_liabilities / total_assets) * 100 if total_assets != 0 else 0
|
150 |
|
151 |
# 4. Sustainable Growth Rate (SGR)
|
152 |
+
net_income = self.get_nested_value(income_data, "Profit Summary", "Net Earnings", "2025")
|
153 |
+
equity = self.get_nested_value(balance_data, "Key Totals", "Total_Shareholders_Equity", "2025")
|
154 |
+
dividends = self.get_nested_value(income_data, "Profit Summary", "Dividends Paid", "2025")
|
155 |
+
|
156 |
roe = (net_income / equity) * 100 if equity != 0 else 0
|
157 |
retention_ratio = (net_income - dividends) / net_income if net_income != 0 else 0
|
158 |
metrics['sgr'] = roe * retention_ratio / 100 if roe != 0 else 0
|
159 |
|
160 |
# 5. Accounts Receivable Turnover
|
161 |
+
accounts_receivable = self.get_nested_value(balance_data, "Balance Sheet Data 2021-2025", "Accounts_Receivable", "2025")
|
162 |
metrics['ar_turnover'] = revenue / accounts_receivable if accounts_receivable != 0 else 0
|
163 |
|
164 |
# 6. Return on Equity (ROE)
|
|
|
168 |
metrics['net_profit_margin'] = (net_income / revenue) * 100 if revenue != 0 else 0
|
169 |
|
170 |
# 8. Retained Earnings Ratio
|
171 |
+
retained_earnings = self.get_nested_value(balance_data, "Balance Sheet Data 2021-2025", "Retained_Earnings", "2025")
|
172 |
metrics['retained_earnings_ratio'] = (retained_earnings / total_assets) * 100 if total_assets != 0 else 0
|
173 |
|
174 |
+
# 9. Revenue Growth (YoY)
|
175 |
revenue_2024 = self.get_nested_value(income_data, "Revenue", "Total Net Revenue", "2024")
|
176 |
metrics['revenue_growth'] = ((revenue / revenue_2024) - 1) * 100 if revenue_2024 != 0 else 0
|
177 |
|
178 |
+
# 10. Revenue CAGR (2021-2025)
|
179 |
+
revenue_2021 = self.get_nested_value(income_data, "Revenue", "Total Net Revenue", "2021")
|
180 |
+
metrics['revenue_cagr'] = ((revenue / revenue_2021) ** (1 / 4) - 1) * 100 if revenue_2021 != 0 else 0
|
181 |
+
|
182 |
return metrics
|
183 |
except Exception as e:
|
184 |
+
print(f"Error calculating metrics: {e}")
|
185 |
return {}
|
186 |
|
187 |
|