Three Statement Model
Fills income statement, balance sheet, and cash flow templates and links them together.
Install
npx skills add anthropics/financial-services --skill 3-statement-model -g -a claude-code -y- Repository
- anthropics/financial-services41k
- Category
- Business
- Updated
- 7d ago
- License
- Apache-2.0
- Context cost
- Mediumabout 3,000 tokens
- Runs scripts
- No, instructions only
What it does
Complete, populate and fill out 3-statement financial model templates (Income Statement, Balance Sheet, Cash Flow Statement) . Use when asked to fill out model templates, complete existing model frameworks, populate financial models with data, complete a partially filled IS/BS/CF framework, or link integrated financial statements within an existing template structure. Triggers include requests to fill in, complete, or populate a 3-statement model template
3-Statement Financial Model Template Completion
Complete and populate integrated financial model templates with proper linkages between Income Statement, Balance Sheet, and Cash Flow Statement.
⚠️ CRITICAL PRINCIPLES, Read Before Populating Any Template
Environment, Office JS vs Python:
- If running inside Excel (Office Add-in / Office JS): Use Office JS directly. Write formulas via
range.formulas = [["=D14*(1+Assumptions!$B$5)"]], neverrange.valuesfor derived cells. No separate recalc; Excel computes natively. Usecontext.workbook.worksheets.getItem(...)to navigate tabs. - If generating a standalone .xlsx file: Use Python/openpyxl. Write
ws["D15"] = "=D14*(1+Assumptions!$B$5)", then runrecalc.pybefore delivery. - Office JS merged cell pitfall: Do NOT call
.merge()then set.valueson the merged range, throwsInvalidArgumentbecause the range still reports its pre-merge dimensions. Instead write value to top-left cell alone, then merge + format the full range:ws.getRange("A1").values = [["INCOME STATEMENT"]]; const h = ws.getRange("A1:G1"); h.merge(); h.format.fill.color = "#1F4E79"; - All principles below apply identically in either environment.
Formulas over hardcodes (non-negotiable):
- Every projection cell, roll-forward, linkage, and subtotal MUST be an Excel formula, never a pre-computed value
- When using Python/openpyxl: write formula strings (
ws["D15"] = "=D14*(1+Assumptions!$B$5)"), NOT computed results (ws["D15"] = 12500) - The ONLY cells that should contain hardcoded numbers are: (1) historical actuals, (2) assumption drivers in the Assumptions tab
- If you find yourself computing a value in Python and writing the result to a cell, STOP. Write the formula instead.
- Why: the model must flex when scenarios toggle or assumptions change. Hardcodes break every downstream integrity check silently.


