Skip to main content

What it does

The core DCF engine. Takes all prior outputs — including the four 10-year forecast schedules from growth-and-profitability — and runs the full FCFF valuation, producing an estimated value per share.

The three stages

Stage 1: 10-year FCFF projection

The engine consumes four pre-computed schedules (each a list of 10 values, one per year) generated by the curve shapes library:
ScheduleControlsSource
growth_scheduleRevenue growth rate per yearStart → end via selected curve type
margin_scheduleOperating margin per yearStart → end via selected curve type
s2c_scheduleSales-to-capital ratio per yearStart → end via selected curve type
coc_scheduleCost of capital per yearInitial WACC → terminal CoC via selected curve type
For each year 1–10, the engine computes:
Line itemComputation
RevenuePrior year × (1 + growth_schedule[t])
Operating marginmargin_schedule[t]
EBITRevenue × operating margin
Tax rateEffective tax rate, converging to terminal tax by year 10
After-tax EBITEBIT × (1 − tax rate), with NOL shielding if applicable
ReinvestmentΔ Revenue / s2c_schedule[t]
FCFFAfter-tax EBIT − reinvestment
PV(FCFF)FCFF / cumulative discount factor at coc_schedule[t]
Because the schedules are curve-shaped rather than linearly interpolated, the projection captures realistic convergence patterns — e.g., exponential growth deceleration or S-curve margin expansion.

Stage 2: Terminal value

TV = FCFF(11) / (WACC(stable) − g(stable))
Where:
  • FCFF(11) = year 11 free cash flow (at stable growth)
  • WACC(stable) = cost of capital at maturity (risk-free rate + base ERP, or user override)
  • g(stable) = stable growth rate (typically ≤ risk-free rate)

Stage 3: Equity bridge

  PV of year 1–10 FCFFs
+ PV of terminal value
= Operating value of the firm
− Debt
− Minority interests
+ Cash
+ Non-operating assets
− Employee stock options value
× (1 − probability of failure)
÷ Shares outstanding
= Estimated value per share

Default assumption overrides

Beyond the four forecast schedules, the model accepts 9 toggles for structural assumptions (terminal cost of capital, terminal ROIC, failure probability, reinvestment lag, tax convergence, NOL carryforward, risk-free rate override, growth rate override, trapped cash). In Expert mode, all 9 are presented for user override. In Novice and Lucky modes, Damodaran’s standard defaults are used.

Python engine

The math is implemented in lib/dcf_engine.py — a pure Python module with no AI dependencies. It accepts both pre-computed schedules (from the curve library) and legacy scalar inputs (for backward compatibility). Every intermediate value is logged to the run transcript for auditability.