
Principles
Both engines are deterministic arithmetic. AI is used only to propose starting assumptions and to draft narrative — it never computes, adjusts or overrides a number. Every figure on screen can be reproduced by hand from the formulas on this page.
Nothing is estimated to fill a gap. If a required input is not in the filed data, the dependent metric is reported as Data unavailable, its weight is removed from the composite denominator, and the header reports what percentage of the framework was scorable.
Every input carries a provenance tag — Verified (filed statement or live feed), Consensus, Guidance or Assumption (analyst entry) — and that tag travels through to the report.
Forecast engine · projection build
The model starts from the most recent verified historical year and rolls forward one year at a time, independently for each scenario (bear, base, bull). Each scenario owns its own complete assumption set, so the three paths never share intermediate values.
| Line item | Formula | Notes |
|---|---|---|
| Revenue | prior year revenue × (1 + growth% for that year) | Per-year growth array; the final entry repeats if the horizon runs longer |
| Gross profit | revenue × gross margin% | Scenario assumption, held flat unless stepped by the analyst |
| Operating income (EBIT) | revenue × operating margin% | Scenario assumption |
| D&A | revenue × D&A% of revenue | Scenario assumption |
| EBITDA | operating income + D&A | Derived |
| Interest expense | opening debt × interest rate% | Debt held at the last filed balance |
| Pre-tax income | EBIT − interest expense | Derived |
| Taxes | max(0, pre-tax income × tax rate%) | Never negative — no tax-asset credit is modelled |
| Net income | pre-tax income − taxes | Derived |
| Share count | prior shares × (1 + share change%) | Compounds every year; negative for buybacks |
| EPS | net income ÷ share count | Derived |
| Capex | revenue × capex% of revenue | Scenario assumption |
| SBC | revenue × SBC% of revenue | Added back in cash flow, not removed from EBIT |
| Δ Net working capital | (revenue − prior revenue) × NWC% of revenue | Growth-linked, so it releases cash in a decline |
| Operating cash flow | net income + D&A + SBC − ΔNWC | Derived |
| Free cash flow | operating cash flow − capex | Levered FCF, reported to the analyst |
| Unlevered FCF | EBIT × (1 − tax%) + D&A − capex − ΔNWC | The cash flow actually discounted in the DCF |
| Discount factor | 1 ÷ (1 + WACC)^n | n = 1 for the first projected year |
| PV of year n | unlevered FCF × discount factor | Summed to give the explicit-period value |
- Last filed revenue = 4,000.0
- Base-case growth, year 1 = 12.0%
- Revenue = 4,000.0 × 1.12 = 4,480.0
- EBIT = 4,480.0 × 18.0% = 806.4
- D&A = 4,480.0 × 5.0% = 224.0
- EBITDA = 806.4 + 224.0 = 1,030.4
- Capex = 4,480.0 × 6.0% = 268.8
- ΔNWC = (4,480.0 − 4,000.0) × 3% = 14.4
- NOPAT = 806.4 × (1 − 21%) = 637.1
- uFCF = 637.1 + 224.0 − 268.8 − 14.4 = 577.9
- DF (WACC 9%) = 1 ÷ 1.09^1 = 0.9174
- PV of year 1 = 577.9 × 0.9174 = 530.2
Forecast engine · DCF and fair value
Terminal value is deliberately the average of two independent methods, so a single aggressive input cannot dominate the answer.
If terminal growth is greater than or equal to WACC the perpetuity term is set to zero rather than returning a negative or infinite value, and the exit multiple carries the terminal value alone.
- Σ PV of years 1-5 = 2,640.0
- Final-year uFCF 720.0, terminal g 2.5%, WACC 9%
- TV perpetuity = 720.0 × 1.025 ÷ (0.09 − 0.025) = 11,353.8
- Final-year EBITDA 1,320.0 × exit 9.0x = 11,880.0
- Terminal value = (11,353.8 + 11,880.0) ÷ 2 = 11,616.9
- DF year 5 = 1 ÷ 1.09^5 = 0.6499
- PV of TV = 11,616.9 × 0.6499 = 7,550.0
- EV = 2,640.0 + 7,550.0 = 10,190.0
- Equity = 10,190.0 − net debt 900.0 = 9,290.0
- Fair value= 9,290.0 ÷ 520.0 shares = 17.87
- Upside = 17.87 ÷ 14.50 − 1 = 23.2%
Forecast engine · scenarios and sensitivity
The headline price target is the probability-weighted average of the three scenario fair values. Weights are normalised by the probability actually assigned, so the target stays valid even if the three probabilities do not sum to exactly 100%.
- Bear 11.20 × 0.25 = 2.800
- Base 17.87 × 0.55 = 9.829
- Bull 26.40 × 0.20 = 5.280
- Σ weighted = 17.909, Σ probability = 1.00
- Blended target = 17.909 ÷ 1.00 = 17.91
The sensitivity grid re-runs the entire DCF — not a shortcut approximation — across five WACC steps (−0.5, −0.25, 0, +0.25, +0.5 percentage points) crossed with five terminal-growth steps, producing 25 fully rebuilt valuations per scenario.
Scoring engine · the band map
Every metric, whatever its unit, is converted to points by one shared linear mapping. There is no curve, no judgement and no peer-relative ranking inside the score itself.
- Revenue growth 12.0% + FCF margin 14.5% = 26.5
- Band: worst = 0, best = 60
- points = (26.5 − 0) ÷ (60 − 0) × 100 = 44 pts
Inverted metrics (where lower is better, such as net-debt/EBITDA) simply set worst above best; the same formula then runs downward. Each metric card in the app shows the band used, the arithmetic actually performed, and the source of every input.
Scoring engine · metrics computed
| Family | Metrics | Data source |
|---|---|---|
| Revenue growth | 3-year and 5-year revenue CAGR, plus latest-year growth | Filed income statements |
| Cash generation | FCF growth, FCF yield = FCF ÷ market cap, operating cash conversion | Filed cash-flow statements + live price |
| Profitability | Gross margin level, gross-margin trend (Improving / Stable / Declining), EBITDA margin | Filed income statements |
| Compounding | Rule of 40 — revenue growth% + FCF margin% (and an EBITDA-margin variant) | Derived |
| Capital returns | ROIC = NOPAT ÷ invested capital | Filed statements; invested capital is an analyst input when not supplied |
| Valuation | EV/Revenue, PEG, valuation gap vs. the model's fair value | Live price, net debt, projections |
| Balance sheet | Cash runway in months, net-debt/EBITDA, interest coverage | Filed balance sheet |
| Execution | Revenue beat rate, share dilution, revenue per employee | Filed data; beat rate needs a quarterly feed |
Scoring engine · composite weights
| Category | Weight |
|---|---|
| Business Quality | 20% |
| Revenue Growth | 15% |
| Profitability | 15% |
| Cash Generation | 15% |
| Balance Sheet | 10% |
| Valuation | 15% |
| Industry Position | 5% |
| Management Execution | 5% |
| Flow & Sentiment | 5% |
- Industry Position has no peer data → excluded (5% weight removed)
- Σ weight of scorable categories = 95
- Σ (score × weight) across the seven scored categories = 6,555
- MCM score = 6,555 ÷ 95 = 69.0
- Header reports: 95% of framework scorable
An analyst may override any single metric, but the override requires a written justification, is stored with the report, and is displayed beside the calculated value so a reviewer can always see what was changed and why. Reverting restores the computed figure instantly.
Scoring engine · execution and thesis break
Management Execution Score is the mean of six graded categories. Five are analyst grades against a published definition; share dilution is scored automatically from filed share counts so the most gameable input cannot be graded by opinion.
Thesis Break Score starts at 100 and only ever moves down. Every deduction must carry a date, a category and a written explanation, and the card shows the current score, the previous score and the direction of travel.
- Start 100
- 2026-02-14 Guidance cut, competitive loss −15
- 2026-04-02 CFO departure −10
- Current score 75 (was 90, ↓)
What the engines will not do
- · Estimate, interpolate or infer a missing financial input in order to complete a metric.
- · Let AI write, adjust or round any calculated number.
- · Score a category whose underlying data the feed could not supply — the weight is removed instead.
- · Accept a metric override without a stored written justification and an audit trail.
- · Report a price target that is not reproducible from the projection table printed in the same report.