aboutsummaryrefslogtreecommitdiff
path: root/services/valuation_service.py
diff options
context:
space:
mode:
Diffstat (limited to 'services/valuation_service.py')
-rw-r--r--services/valuation_service.py49
1 files changed, 48 insertions, 1 deletions
diff --git a/services/valuation_service.py b/services/valuation_service.py
index 8559842..357c679 100644
--- a/services/valuation_service.py
+++ b/services/valuation_service.py
@@ -1,4 +1,4 @@
-"""Valuation engines for DCF and EV/EBITDA."""
+"""Valuation engines for DCF, EV/EBITDA, EV/Revenue, and simple multiple-based models."""
import numpy as np
import pandas as pd
@@ -158,3 +158,50 @@ def run_ev_ebitda(
"implied_price_per_share": equity_value / shares_outstanding,
"target_multiple_used": target_multiple,
}
+
+
+def run_ev_revenue(
+ revenue: float,
+ total_debt: float,
+ total_cash: float,
+ shares_outstanding: float,
+ target_multiple: float,
+) -> dict:
+ """Derive implied equity value per share from an EV/Revenue multiple."""
+ if not revenue or revenue <= 0:
+ return {}
+ if not shares_outstanding or shares_outstanding <= 0:
+ return {}
+ if not target_multiple or target_multiple <= 0:
+ return {}
+
+ implied_ev = revenue * target_multiple
+ net_debt = (total_debt or 0.0) - (total_cash or 0.0)
+ equity_value = implied_ev - net_debt
+
+ return {
+ "implied_ev": implied_ev,
+ "net_debt": net_debt,
+ "equity_value": equity_value,
+ "implied_price_per_share": equity_value / shares_outstanding,
+ "target_multiple_used": target_multiple,
+ "revenue_used": revenue,
+ }
+
+
+def run_price_to_book(
+ book_value_per_share: float,
+ target_multiple: float,
+) -> dict:
+ """Derive implied equity value per share from a P/B multiple."""
+ if not book_value_per_share or book_value_per_share <= 0:
+ return {}
+ if not target_multiple or target_multiple <= 0:
+ return {}
+
+ implied_price = float(book_value_per_share) * float(target_multiple)
+ return {
+ "implied_price_per_share": implied_price,
+ "target_multiple_used": float(target_multiple),
+ "book_value_per_share": float(book_value_per_share),
+ }