---
name: "three_statement_modeling"
description: "Build a driver-driven integrated 3-statement financial model: linked income statement, balance sheet, and cash flow, assumption layer, balance checks, scenario switches, and a worked Excel template. Triggers on requests to build, audit, fix, or explain a 3-statement model, forecast financials, or link the three statements."
---

# Three-Statement Modeling

## Purpose
Build (or audit) an integrated financial model where one shared assumption layer drives the income statement, balance sheet, and cash flow statement, and every period self-checks: the balance sheet balances, cash ties out, and every schedule rolls forward. A model where a driver change cascades correctly through all three statements is the whole point; three disconnected spreadsheets are the failure mode.

## Workflow
1. **Historicals first.** Collect at least 2 years of historical IS + BS. Build the historical cash flow statement via the indirect method and confirm ending cash matches the balance sheet every period before forecasting anything. If historical CF does not tie, the plumbing is wrong, not the forecast.
2. **Assumption layer.** Put every driver in one place: revenue growth, gross margin, opex ratios, tax rate, DSO/DIO/DPO, CapEx %, depreciation rate, interest rate, dividend payout, debt/equity flows. Never hardcode a number inside a formula.
3. **Income statement.** Revenue build (price x volume or segment, not just a growth haircut if the detail exists) down to net income. Depreciation computed on beginning-of-period PP&E to avoid same-period circularity.
4. **Balance sheet.** Working capital from day ratios (AR = revenue x DSO/365, inventory = COGS x DIO/365, AP = COGS x DPO/365). PP&E rolls forward (beginning + CapEx - depreciation). Debt from the borrowing schedule. Retained earnings = prior + net income - dividends. Cash is NOT a plug: it comes from the cash flow statement's ending cash.
5. **Cash flow statement.** Indirect method: net income, add back non-cash items, subtract working-capital increases (an increase in AR/inventory is a use of cash; an increase in AP is a source), investing, financing. Ending cash = beginning + net change.
6. **Checks.** Six check rows on every period: BS balances, cash ties, RE rolls, debt schedule ties, PP&E ties, CF sums. A single ERROR means the model is silently wrong; trace the upstream chain, never patch the check.
7. **Scenarios.** One assumption set per scenario (base/upside/downside), switched by a single scenario cell. A scenario names the specific driver that breaks (churn, sales cycle, input cost), never a flat multiplier on the base case.
8. **Audit before delivery.** Run the structural audit (`bin/model3s.py audit`) plus the linkage checklist in `references/linkage-map.md`. The first build is almost never correct.

## Output Contract
A finished model ships with:
- One assumption layer (all drivers, documented sources, blue input cells).
- IS, BS, CF with live formulas, one formula per row copied across every period.
- The six check rows reading OK in every period, historical and forecast.
- A scenario switch that moves only the drivers that scenario is about.
- No plugs, no hardcoded numbers in formulas, no circular references that were not deliberate and documented.

## Operating Rules
1. **No plugs.** A cell whose only job is to force the balance sheet to tie is a defect, not a solution. If the BS does not balance, the upstream linkage is wrong.
2. **One formula per row.** Copy across periods; never retype. A row where one cell differs from the rest is almost always a forgotten manual override.
3. **Inputs are blue, formulas are black, assumptions never live in formulas.**
4. **Circularity is handled, not hidden.** Interest on average or beginning debt is fine; a deliberate circular reference needs iterative calculation enabled and documented. Breaking the link to kill the error message is not a fix.
5. **Sign discipline.** Increases in current assets are uses of cash (subtract), increases in current liabilities are sources (add). Consistent everywhere.
6. **Simple beats impressive.** Only add complexity that materially changes the output. A model nobody can audit is a liability.
7. **Accuracy rule.** Every factual claim in the model's documentation must be verified against a primary source. Never invent numbers, dates, or quotes. Unverifiable gets cut or framed as opinion.
