From ccfbce79a66b2d8aa136fddbed7c61c7436f2733 Mon Sep 17 00:00:00 2001 From: Tyler Date: Thu, 2 Apr 2026 18:54:01 -0700 Subject: Improve DCF model accuracy --- services/data_service.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'services/data_service.py') diff --git a/services/data_service.py b/services/data_service.py index 67f2e7b..bfd1290 100644 --- a/services/data_service.py +++ b/services/data_service.py @@ -684,3 +684,27 @@ def get_free_cash_flow_series(ticker: str) -> pd.Series: return (op + capex).dropna() except KeyError: return pd.Series(dtype=float) + + +@st.cache_data(ttl=3600) +def get_free_cash_flow_ttm(ticker: str) -> float | None: + """Return trailing-twelve-month free cash flow from quarterly cash flow statements.""" + t = yf.Ticker(ticker.upper()) + cf_q = t.quarterly_cashflow + if cf_q is None or cf_q.empty: + return None + + if "Free Cash Flow" in cf_q.index: + vals = cf_q.loc["Free Cash Flow"].iloc[:4].dropna() + if len(vals) == 4: + return float(vals.sum()) + + try: + op = cf_q.loc["Operating Cash Flow"].iloc[:4].dropna() + capex = cf_q.loc["Capital Expenditure"].iloc[:4].dropna() + if len(op) == 4 and len(capex) == 4: + return float((op + capex).sum()) + except KeyError: + return None + + return None -- cgit v1.3-2-g0d8e