← Files Public Equity InvestingARCHIVED FILE

skills/three-statement-model-builder/references/plan-schema.md

5.17 KB · Oct 2, 2026 · 00:03 UTC

↓ Download file

# Plan Schema: Three Statement Model Builder

## Purpose

`plan.json` is the single source of truth for the default banker formula workbook path and deterministic operating-model support pipeline. The user may provide it directly, or ChatGPT may create it from prompt context, files, connected apps, filings, and clearly labeled assumptions.

## Top-level structure

Required top-level keys:

```json
{
  "meta": {},
  "source_basis": [],
  "timeline": {},
  "historicals": {},
  "revenue": {},
  "costs": {},
  "working_capital": {},
  "ppe": {},
  "debt": {},
  "tax": {},
  "equity": {},
  "scenarios": {},
  "sensitivities": {}
}
```

Optional key:

```json
{"other_balance_sheet": {"other_assets": 0.0, "other_liabilities": 0.0}}
```

## Metadata

Required:
- `company_name`
- `industry`
- `currency`
- `units`
- `as_of_date`
- `accounting_basis`: `us_gaap`, `ifrs`, `management`, `cash_basis`, or `unspecified`

Recommended:
- `model_purpose`
- `prepared_for`

## Source basis

`source_basis` must be a non-empty list. Each source requires:
- `id`
- `label`
- `source_type`
- `as_of_date`
- `evidence_label`
- `covers`
- `confidence`
- `notes`

Supported evidence labels:
- `source_reported`
- `company_provided`
- `connector_sourced`
- `public_filing`
- `web_verified`
- `management_guidance`
- `analyst_estimate`
- `benchmark`
- `assumption`
- `placeholder`

`source_basis` must cover `historicals` and at least one material forecast driver such as `revenue`, `costs`, `working_capital`, `ppe`, `debt`, or `forecast`.

## Timeline

Required:
- `start_year`: integer
- `horizon_periods`: annual periods or quarterly periods depending on `periodicity`
- `periodicity`: `annual` or `quarterly`

Annual labels are emitted as `FY2026`. Quarterly labels are emitted as `Q1-FY2026`, `Q2-FY2026`, etc.

## Historical financials

Required historical objects:
- `income_statement`
- `balance_sheet`
- `cash_flow`
- `debt_schedule`
- `ppe`
- `working_capital`

Minimum income statement fields per period:
- `revenue`
- `cogs`
- `opex`
- `da`
- `interest`
- `taxes`
- `net_income`

Minimum balance sheet fields per period:
- `cash`
- `ar`
- `inventory`
- `other_current_assets`
- `ppe_net`
- `other_assets`
- `ap`
- `accrued_expenses`
- `deferred_revenue`
- `debt`
- `other_liabilities`
- `common_equity`
- `retained_earnings`

The latest historical balance sheet must balance. If the historical balance sheet does not balance, the model is not decision-ready until corrected or explicitly explained.

## Revenue

Supported revenue models:

### `segments`

```json
{
  "model": "segments",
  "source_id": "src_mgmt_plan",
  "segments": {
    "segment_a": {
      "base_revenue": 100.0,
      "growth_rates": {"FY2026": 0.08, "FY2027": 0.07},
      "evidence_label": "company_provided",
      "source_id": "src_mgmt_plan"
    }
  }
}
```

### `total_growth`

```json
{"model": "total_growth", "base_revenue": 100.0, "growth_rates": {"FY2026": 0.05}}
```

### `volume_price`

```json
{
  "model": "volume_price",
  "base_units": 1000.0,
  "base_price": 10.0,
  "unit_growth_rates": {"FY2026": 0.04},
  "price_growth_rates": {"FY2026": 0.03}
}
```

## Costs

Required:

```json
{
  "cogs": {"method": "gross_margin", "gross_margin": {"FY2026": 0.40}},
  "opex": {"method": "pct_revenue", "pct_revenue": {"FY2026": 0.20}}
}
```

COGS methods: `gross_margin`, `pct_revenue`.
Opex methods: `pct_revenue`, `amount`.

## Working capital

Current supported method: `days`.

Required assumptions:
- `ar_days`
- `inventory_days`
- `ap_days`
- `other_current_assets_pct_revenue`
- `accrued_expenses_pct_revenue`
- `deferred_revenue_pct_revenue`

## PP&E

Required:
- `capex_method`: `pct_revenue` or `amount`
- `capex_pct_revenue` or `capex_amount`
- `depreciation_method`: `pct_beginning_ppe`, `pct_revenue`, or `amount`
- matching depreciation assumption map

## Debt

Required:
- `beginning_debt`
- `beginning_revolver_drawn`
- `revolver_commitment`
- `mandatory_amortization`
- `optional_draws`
- `interest_rate`
- `cash_sweep`
- `covenants`

Cash sweep requires:
- `enabled`
- `min_cash`
- `sweep_pct`

Covenants may include:
- `min_liquidity`
- `max_net_leverage`
- `min_interest_coverage`

## Tax

Required:
- `book_tax_rate`
- `cash_tax_rate`
- `nol_balance`

The model distinguishes book taxes from cash taxes and tracks NOL usage at a high level.

## Equity

Required:
- `common_equity`
- `dividends`
- `buybacks`
- `issuance`

Dividends reduce retained earnings. Buybacks reduce common equity. Issuance increases common equity.

## Scenarios

Required scenarios:
- `base`
- `downside`
- `upside`

Each scenario requires:
- `description`
- `evidence_label`
- `overrides`

Scenarios use deep-merge overrides against the base plan. A scenario that changes labels but not outputs is a hard failure.

## Sensitivities

Supported lists:
- `revenue_growth_shocks`
- `gross_margin_shocks`
- `dso_day_shocks`
- `capex_pct_revenue_shocks`
- `interest_rate_shocks`

## Screen-grade vs. decision-grade

A plan is screen-grade when it uses placeholders, limited evidence, or illustrative assumptions but passes mechanical checks.

A plan can be decision-grade only when material historicals and drivers are sourced, reconciled, current for the purpose, and free of material hard failures or unresolved warnings.

SHA-256: 9d7cffbc2eee03b1de902e17a05809394c5f3eb69fbc41fe95b23938f5c6adad