Company Research and Valuation
Build a stock DCF from financial inputs you have verified
A stock DCF should expose the path from verified operating inputs to annual cash flows, enterprise value and per-share equity value. Start by deciding which cash flow is being valued and which discount rate belongs with it. Then retain the source of each observed input and mark every forward assumption. A calculator can execute the formulas without establishing that the assumptions are credible.
This guide builds a fictional FCFF model with three explicit forecast years and a continuing-value assumption. It uses externally supplied inputs rather than pretending to collect complete financial statements automatically. The synthetic Python calculation is independently executable; it is not a verified CoTrading valuation page, a Vibe integration test or a promised market price.
Choose the cash-flow and discount-rate pair
We use free cash flow to the firm, available before distributions to financing claimholders, and discount it at an assumed weighted average cost of capital. Damodaran’s firm-valuation chapter provides the primary methodological reference for that pairing. If using cash flow to equity instead, the discount rate and financing treatment must change. Do not subtract net debt again from an equity value already derived from FCFE.
For this simplified operating model, FCFF = EBIT × (1 − tax_rate) + depreciation − capital_expenditure − increase_in_working_capital. All amounts are in millions of CNY. Share count is in millions of ordinary shares, so dividing equity value by that share count produces CNY per share. The 25% tax rate below is a modeling assumption, not a statement of any issuer’s current statutory or effective tax burden.
Damodaran’s cash-flow chapter discusses moving from earnings through tax and reinvestment to cash flow. Its historical tax examples are not used as current tax guidance here. For actual companies, inspect operating leases, acquisitions, research capitalization and other adjustments before treating this short formula as a complete economic model.
Build an input table with evidence and assumptions
Collect the latest suitable financial statements, cash-flow details, debt and cash balances, and share-count information from the issuer’s disclosures or another verified source. Record periods, units, currency, publication date and source locations. Historical inputs should be labeled observed; future margins, growth, reinvestment and discount rates should be labeled assumed. A forecast number cannot become verified merely because it appears in a spreadsheet.
The worked inputs are deliberately compact. They isolate how EBIT, tax and reinvestment become cash flow, while allowing the enterprise-to-equity bridge to be checked separately.
| Forecast year | EBIT | Depreciation | Capital expenditure | Increase in working capital | FCFF |
|---|---|---|---|---|---|
| 1 | 100 | 5 | 8 | 2 | 70.00 |
| 2 | 110 | 5 | 9 | 3 | 75.50 |
| 3 | 120 | 6 | 10 | 3 | 83.00 |
The discount rate is 10%, continuing growth is 2%, debt is 150, excess cash is 30 and diluted-equivalent model shares are 100 million. For simplicity, no other nonoperating assets or claims are included. An actual company with minority interests, preferred claims or nonoperating investments needs an expanded bridge. Debt and cash must not be added a second time if the chosen cash-flow definition already included them.
Calculate annual present values and terminal value
This fixture assumes each annual cash flow arrives at year-end. Discount year t by (1 + wacc) ** t. The continuing cash flow starts in year 4, so terminal value at the end of year 3 is FCFF3 × (1 + g) / (wacc − g). Discount that value back three years, not four, because the formula already capitalizes the year-4 cash flow at the year-3 boundary.
flows = [D(ebit) * (1-D("0.25")) + D(da) - D(capex) - D(wc)
for ebit, da, capex, wc in drivers]
pv = [flow / (1+wacc)**t for t, flow in enumerate(flows, 1)]
terminal = flows[-1] * (1+growth) / (wacc-growth)
terminal_pv = terminal / (1+wacc)**len(flows)
enterprise = sum(pv) + terminal_pv
equity = enterprise - D("150") + D("30")
per_share = equity / D("100")
The full standard-library model is docs/growth/research/round-5/examples/R545.py. Actual output is FCFF 70.00, 75.50 and 83.00; enterprise value 983.47; equity value 863.47; and per-share value 8.63. Calculations retain precision internally and round displayed amounts only. Python’s decimal documentation supports the chosen decimal representation, not the financial validity of the inputs.
Download the complete example. Use Python 3.12+ with the standard library only; all inputs are synthetic. After downloading, run python R545.py.
Reconcile the enterprise-to-equity bridge
Check that the enterprise value equals the sum of discounted explicit cash flows plus discounted terminal value. Then subtract debt 150 and add excess cash 30, giving a net deduction of 120. The result 863.47 is the model’s equity value. Dividing millions of currency by 100 million shares produces 8.63 per share after display rounding.
Use a bridge table rather than embedding the adjustment in an unexplained formula. Separate excess cash from cash needed for operations, and record the date of the balance sheet. If debt or shares have changed materially since that date, either update the inputs with evidence or describe the resulting mismatch. More decimal places cannot repair an obsolete capital structure.
Examine sensitivity before interpreting the price
The present value of terminal value is 80.84% of enterprise value in this model. That concentration means the continuing assumptions dominate the result. It does not automatically invalidate the calculation, but it makes a single displayed estimate a poor substitute for reviewing the assumptions that generate it.
Holding growth at 2% and all operating inputs fixed, the executed sensitivity values are 10.06 per share at a 9% discount rate, 8.63 at 10%, and 7.53 at 11%. The fixture asserts this ordering and these rounded outputs. A one-percentage-point change moves the estimate materially; printing 8.6347 as if it were precise would obscure that uncertainty.
The continuing-growth formula also assumes a sustainable relationship between growth and reinvestment. This simplified example does not independently model the long-run return on invested capital needed to support growth. For real use, normalize the final-year cash flow and reconcile terminal reinvestment rather than extrapolating a temporarily high cash conversion rate forever.
Stop on incompatible or missing inputs
The different-mechanism counterexample uses USD debt with CNY operating cash flows. The fixture rejects mixed_currency. Even a correct FCFF formula cannot subtract an unconverted foreign-currency claim. A separate FX assumption and dated conversion would be needed; this model does not provide that layer.
Other assertions reject a continuing growth rate equal to the discount rate and a zero share denominator. Missing key inputs should likewise stop the relevant calculation rather than be filled with guessed values. A nonpositive or economically implausible terminal spread needs review, not a fallback value chosen to make the model print.
Deliver the input evidence table, annual calculations, terminal assumptions, value bridge, sensitivity results and unresolved adjustments. Recalculate after new operating disclosures, financing changes or deliberate assumption revisions, retaining the old version for comparison. The result is a transparent conditional valuation that can be challenged and rebuilt, rather than a target-price commitment.
Package the model for another researcher
Give every input an identifier and connect it to the formulas that consume it. A corrected capital-expenditure figure should identify the affected annual FCFF, present value, terminal assumption if relevant, enterprise value and per-share output. Do not update only the final displayed price while leaving the annual table unchanged.
Keep observed inputs and scenario assumptions in different sections of the handoff. Another researcher should be able to replace the discount rate without changing the financial-source table, or correct a disclosed debt value without silently changing growth. Preserve the old model output and label the reason for the new version.
As a final check, reproduce one annual cash flow and the equity bridge independently from the retained table. Agreement validates those operations on the chosen inputs; disagreements should return to the first differing reference or formula before any investment interpretation is revised.
Record how the forecast starts relative to the valuation date. This example uses abstract full years and year-end discounting; it does not implement a partial-year stub. A real valuation performed during the year needs a consistent treatment of remaining cash flows and discount periods. Switching to a midyear convention requires corresponding changes throughout the explicit forecast and terminal timing, rather than changing one row to produce a preferred price. Treat those timing choices as model assumptions with their own version history.
FAQ
Can cash from operations simply replace FCFF?
Not without checking interest, reinvestment and the accounting definition. Match the cash flow to the valuation framework.
Does a value above market price establish an investment opportunity?
No. Review assumptions, missing claims and risk. This example validates arithmetic on synthetic inputs only.