| name | valuation |
| description | Value a public company's equity end-to-end (FCFE at CAPM cost of equity) with an IB deal team — multi-year EDGAR data, scenario forecasting, Monte-Carlo DCF, dual-source comps, a verification gate, and an investment-committee sign-off. Run `/valuation <cik|ticker>`. |
/valuation — orchestrate an IB-style equity valuation (v2)
Argument: a ticker (e.g. MSFT) or CIK. Pick a SEED (default 0) and reuse it. Pick DATE = today's date YYYY-MM-DD (you supply it; tools never call the clock).
Announce: "Using the valuation skill to value ."
Start each run from a fresh trace: empty data/trace.jsonl.
Step 0 — Identity (deal-captain)
Resolve the ticker→CIK by running python tools/edgar_fetch.py --ticker <ARG> (or --cik). Capture the resolved CIK, TICKER, entity. Write data/<CIK>/request.json = {"cik": <CIK>, "ticker": <TICKER>, "company_name": <entity>}. Every downstream artifact will be checked against this. If the resolved entity is not the company requested, STOP.
Step 1 — Data (parallel)
Dispatch concurrently:
- edgar-analyst (TICKER/CIK) →
financials.json (multi-year).
- market-data-analyst (CIK, TICKER) →
market_data.json (β, cost of equity).
- Run
python tools/market_price.py --ticker <TICKER> --cik <CIK> → data/<CIK>/market.json (the live market price, written only because --cik is passed). This is a benchmark only — it is read by build_report.py for the headline comparison and must never be fed into any valuation lane (DCF, comps, or reconciliation).
Step 2 — Forecast
Dispatch forecast-analyst (CIK) → forecast.json (bull/base/bear) + backtest.json (grade).
Step 3 — Valuation lanes (parallel)
Dispatch concurrently (blind to each other):
- dcf-analyst (CIK, SEED) →
dcf_result.json, sensitivity.json, scenario point values.
- comps-analyst (CIK, TICKER, SEED) →
comps_llm.json, comps_embedding.json.
- qualitative-analyst (CIK) → risk notes, normalization,
lane_weights.
Step 4 — Verification gate (fail-closed)
Dispatch verification-analyst (CIK) → verification.json. If status == FAIL, the failing lanes will render UNAVAILABLE and the run is review_required. Never fabricate a missing lane.
Step 5 — Reconcile
Run python tools/reconcile.py --fcfe data/<CIK>/dcf_result.json --comps data/<CIK>/comps_llm.json --comps data/<CIK>/comps_embedding.json --scenarios '<bull/base/bear JSON>' --weights '<lane_weights>' --cik <CIK> --ticker <TICKER> --seed <SEED> → final.json. Omit a --comps whose lane failed verification.
Step 6 — Investment committee
Dispatch investment-committee (CIK) → APPROVE / FLAG.
Step 7 — Report
Run python tools/build_report.py --cik <CIK> --ticker <TICKER> --date <DATE> → reports/<TICKER>-<DATE>.{md,html}.
Step 8 — Headline
Print: <TICKER> equity fair value ≈ $<median>/share (P10–P90 $<p10>–$<p90>); market $<price> (Δ <±k%>) plus VERIFICATION: <PASS|FAIL> and the IC decision, followed by both report paths.
Rules
- All numbers come from the Python tools; never compute or guess a figure.
- Thread the same SEED through every stochastic tool call.
- Never feed the market price back into any valuation lane.
- On any identity mismatch or missing required lane, the run is
review_required and the report shows UNAVAILABLE — never an invented number.