| from datetime import date | |
| from TerraFin.analytics.analysis.fundamental.dcf.engine import ( | |
| build_linear_growth_rates, | |
| discount_explicit_cash_flows, | |
| ) | |
| def test_build_linear_growth_rates_interpolates_horizon() -> None: | |
| growth_rates = build_linear_growth_rates(12.0, 4.0, 5) | |
| assert [round(value, 2) for value in growth_rates] == [12.0, 10.0, 8.0, 6.0, 4.0] | |
| def test_discount_explicit_cash_flows_clamps_terminal_growth_and_anchors_dates() -> None: | |
| result = discount_explicit_cash_flows( | |
| [10.0, 11.0, 12.0], | |
| [10.0, 8.0, 6.0], | |
| [9.0, 9.5, 10.0], | |
| terminal_growth_pct=10.0, | |
| terminal_discount_rate_pct=10.5, | |
| as_of=date(2026, 4, 5), | |
| ) | |
| assert result.projected_cash_flows[0].forecast_date == "2027-04-05" | |
| assert result.projected_cash_flows[-1].forecast_date == "2029-04-05" | |
| assert result.terminal_growth_pct == 9.5 | |
| assert result.intrinsic_value > sum(row.present_value for row in result.projected_cash_flows) | |