three-statement-model
Three-Statement Model
When to use
Use whenever a projection needs to link the income statement, balance sheet, and cash flow statement together rather than treating them as three separate, disconnected spreadsheets — especially before presenting a model to a senior audience, where an unchecked balance sheet that doesn't actually balance is one of the fastest ways to lose credibility in the room.
What it does
Builds a driver-based P&L, rolls the balance sheet forward year by year, and derives the cash flow statement from the changes between periods via a bundled calculator, then runs two integrity checks every year: does total assets equal total liabilities plus equity, and does the balance sheet's cash balance match the cash flow statement's closing cash exactly. A model that fails either check is not yet a usable model, regardless of how reasonable the underlying assumptions look.
Method
- Set revenue and margin drivers explicitly: starting revenue, growth rate, gross margin, and opex as a percentage of revenue — the same driver-based discipline as driver-based-budget-builder, extended across multiple years.
- Set working capital drivers: DSO and DPO, which determine how accounts receivable and accounts payable roll forward each year and directly drive the operating cash flow.
- Set capex and depreciation assumptions, tied to revenue or a stated capital plan, which drive the investing cash flow and the balance sheet's PP&E roll-forward.
- Run the bundled calculator (
scripts/three_statement.py) to get the full year-by-year P&L, cash flow statement, and balance sheet, along with the two integrity checks for every year. - Treat a failed balance check as a hard stop, not a rounding issue to note and move past. If assets don't equal liabilities plus equity, there's a real error in the model's linkage, and every number downstream of that year is unreliable until it's fixed.
- Treat a failed cash-tie check the same way — if the balance sheet's cash doesn't match the cash flow statement's ending cash, the two statements aren't actually linked, they're two separate calculations that happen to look similar.
- Extend the simplified structure deliberately when a real model needs more — this build keeps debt static and doesn't model interest expense, which is intentional for a clean base case; pair with debt-schedule-model when the capital structure and interest expense need to flow through the model explicitly.