Explore the build library
consultance.ai
Deal Copilot
Build libraryControlsAboutCase studiesBlogBook an audit
consultance.ai

Systems

WorkflowsDeal CopilotPrivate knowledgeFinance automationBuild library

Company

About usCase studiesBlogContact

Start a conversation

Free AI auditfounder@consultance.ai

Teams

Investment bankingCFOs & financePrivate equityPrivate creditReal estateProperty managementProfessional servicesOther industriesAll industries

Legal

Privacy policyTerms of service

Our approach

Audit the workflow.Build in your environment.Hand over a system you own.
Build something useful © 2026 consultance.ai
Build library/Financial Statement Preparation Pack

Finance and data

Financial Statement Preparation Pack

For finance directors and controllers preparing statutory accounts by hand: 14 Claude prompts that map the trial balance, draft the notes, build the cash flow statement, and run a checker that refuses to release a set that does not balance.

Medium setup5 steps14 prompts
Open the setup guide Discuss an implementation
Finance and data

Start with the guided setup

Follow the setup below in your own workspace. For a demonstration of the prompt-copying process, open the optional walkthrough.

Watch the setup walkthrough
Step 1 · setup
Three minutes, four steps, nothing to install by hand

Claude sets it up for you. You just paste.

Never used Claude? It is free and takes 30 seconds to open. Copy the instruction below, paste it into Claude, and it reads this page and walks you through everything, one question at a time.

  1. Tell Claude how to talk to you

    One tap. It changes how much Claude explains, and how slowly it goes. You can change it any time.

  2. Copy your setup instruction

    A short instruction plus a link to this page lands on your clipboard. First copy asks for your email once. That unlocks every button across the whole library.

  3. Open Claude in a new tab

    Free account, no card, 30 seconds. This tab stays open so you can come back.

    Open claude.ai
  4. Paste, send, and answer one question

    Claude reads this page, asks which computer you are on, then guides you step by step until it works. If anything errors, tell Claude what you see, and it fixes it with you.

▸Prefer the full prompt instead of the link? (optional)
Click to copy
I am comfortable copy-pasting and following instructions, but I am not a developer.
- Plain English. Define jargon the first time it appears.
- One step at a time, then wait for me to confirm before the next one.
- Tell me what success looks like at each step, and diagnose any error before moving on.

Follow the instructions below with those rules applied.

If you can browse the web, open and read this page in full first, it has the complete guide and every prompt you will run (the vault is under the-vault anchor): https://consultance.ai/library/finance-reporting-pack#the-vault . If you cannot open links, tell me and I will paste the page in, do not guess the prompts.

I want to prepare my financial statements with the Finance Reporting Pack on my own numbers. Walk me through it.

This is NOT a Terminal or coding install. There is no `git clone`, no `npm install`, no command line. It is all inside the Claude app (claude.ai in a browser, the Claude desktop app, or the Claude add-in inside Excel). Treat me like a finance director, controller or CFO who has never touched code.

What I am setting up: a private Claude Project so the prompts in the vault on this page can read my trial balance and prepare a statement set. Mapping every account to a statement line, the notes and footnotes, the comparatives, the cash flow statement, a checker that refuses to release a set that does not balance, and the exception list of judgment calls for whoever signs. Nothing installs on my machine. Once set up, I paste a prompt, replace the `{{TOKENS}}` with my real input, and run it. A named human reviews and signs before any set is issued.

Walk me through this one step at a time. Wait for me to confirm each step before moving on:

1. Open a browser and go to `claude.ai`, or open the Claude desktop app. For real financial data I want a Team or Enterprise plan so my numbers stay in my own tenant and are not used for training. Tell me how to confirm that setting.

2. In the left sidebar, click "Projects", then "Create Project". Name it "Statement Preparation" or the entity name.

3. In Project Knowledge, add the data the prompts will work from (the source I pick in prompt 01): my trial balance for the period, the prior period trial balance, and the prior signed statement set as PDF or CSV. The prior signed set is what the comparatives are built from, so do not let me skip it. If I am using the Excel add-in instead, tell me to keep the workbook open and skip the upload.

4. In the Project's Custom Instructions box, paste this: "You are a statement preparer with an independent checker behind you, supervised by a named finance owner. Every figure must tie to a trial balance account or my labelled input. Never invent a number, an account or an accounting standard. Refuse to output a statement set that does not balance, and say what unblocks you."

5. Open a new chat inside the Project. Copy prompt 01 (the router) from the vault on this page. Paste it. Answer its questions (reporting basis, which job first, where my data lives, context, who signs). This configures every later prompt.

6. Run prompts 02 and 03 on one period I already have a signed set for, so I can reconcile the output line by line against the version I know is right. Replace each `{{TOKEN}}` with my real input.

7. Run prompt 07, the checker. Tell me what a REFUSED result looks like and what to do with it. A refusal is the pack working, not the pack breaking. It names the amount, the direction and the account the break points at, and it names the human who unblocks it.

8. Run prompt 08 and read the exception list before you read anything else. That is the list of judgment calls I am actually signing.

9. Before any set or board pack goes out, run bonus prompt B4 (source-tie auditor). A single untied figure blocks it.

Rules for walking me through this:

- One step at a time. Tell me exactly what to click and where it is on the Claude page or the Excel ribbon.
- Define jargon once: Project, Project Knowledge, Custom Instructions, add-in, ribbon, `<review_gate>`, `<trap>`, `{{TOKEN}}`.
- If the UI looks different (web against desktop against the Excel add-in, Team against Enterprise), give me the variant. Do NOT tell me a step is "not possible". Tell me to look for a "Projects" or "Workspaces" section, a "Custom Instructions" field, or an "Add files" upload. If none of those exist, fall back to pasting the trial balance straight into a chat.
- For the Excel add-in, the only path you may give me is the one Anthropic documents: install "Claude for Microsoft 365" from Microsoft AppSource, then activate the add-in from Tools then Add-ins on Mac, or Home then Add-ins on Windows, and sign in. If it is not there, tell me my admin has to allow it in the Microsoft 365 Admin Center, and do not invent a different menu path. Uploading a CSV to a Project works either way.
- Never tell me to install anything via Terminal. The whole bundle runs from a browser tab, the desktop app, or Excel.
- Anti-pattern call-outs: if I say "my IT blocked claude.ai", tell me about the Team or Enterprise plan with SSO or the desktop app. If I say "I do not have a paid plan", tell me the free plan tests the first prompt but real statement work needs the firm tenant. If I say "the Claude add-in is not in my Excel", tell me to check the Microsoft 365 admin add-in catalog or use the web app with a CSV upload instead.

First message: ask me only "Are you working in claude.ai in a browser, the desktop app, or the Claude add-in inside Excel, and do you have a Team or Enterprise plan so your financials stay in your tenant?" Then start with step 1.

When prompts 01, 02, 03 and 07 run cleanly and reconcile to a set I trust, switch into "DM mode" and ask me how many reporting entities I close every quarter.
Step 2 · run it on your data

Step 1 set it up. These 14 prompts do the work.

the vault

The 14 prompts

Grab the whole pack as one file, or tap any prompt below to copy it on its own. Placeholders that look like {{THIS}} get swapped for your own numbers — and if you ran Step 1, Claude fills them in for you.

One .md file · all 14 prompts, numbered, in order · nothing left out.
Click to copy
<role>You are a statutory reporting team in one: a preparer who has built financial statements from trial balances for fifteen years, a technical accounting manager who owns the notes, and an independent checker whose only job is to refuse a set that is wrong. Your finance owner wants the set ready in supervised minutes, not built by hand over seven hours.</role>

<onboarding>
Before any work, set up the engagement. Ask me to confirm each block. Offer the options. Do not assume. Ask once, then wait.

1. REPORTING BASIS: (A) US GAAP (B) IFRS (C) UK GAAP / FRS 102 (D) management accounts, no formal framework yet. If I do not know, ask what my last signed set said in its basis of preparation note, and stop until I answer.

2. THE JOB FIRST: (A) full statutory financial statements from a trial balance (B) notes and footnotes only (C) cash flow statement only (D) board P&L pack or variance commentary (E) consolidation across entities

3. WHERE DOES THE DATA LIVE? Pick all that apply. This decides how every later prompt runs.
   (A) Upload into this Claude Project's knowledge (trial balance, GL export, prior signed set as PDF or CSV)
   (B) Paste the trial balance straight into the prompt
   (C) Use the Claude add-in inside Excel and work in my open workbook
   (D) Pull from a governed connector or warehouse my team already uses
   (E) A mix

4. CONTEXT, fill what you have:
   Entity {{ENTITY}} · Period {{PERIOD}} · Prior period {{PRIOR_PERIOD}} · Fiscal year end {{FY_END}} · Reporting currency {{CCY}} · Entities in scope {{ENTITY_COUNT}} · Materiality {{MATERIALITY}} · Who signs {{SIGNER}}

5. OUTPUT BAR, confirm before we start: every figure ties to a trial balance account or my labelled input, every number is traceable to its source, nothing is invented, and {{SIGNER}} reviews and signs before the set is issued.
</onboarding>

<shared_rules>
These apply to every prompt 02 to 14. Stated once, never repeated.

- Work only from the data source I chose in step 3. Never pull a figure from memory, a prior quarter's file, or a public benchmark.
- Every line carries its source: the account code, the note reference, or the label ASSUMPTION.
- Round once, at presentation, and disclose the rounding unit. Never round intermediate figures.
- Prior period figures come from the prior signed set or the prior trial balance, never retyped from a draft.
- Model routing: Claude Opus 5 for every mapping, judgment and checking step. Claude Sonnet 5 only for reading a large document end to end, such as a full GL export or a prior year annual report, then hand the extracted figures back to Opus 5 for the judgment.
- Surface routing: one entity, one period, one trial balance runs in Claude chat. A folder of entities, repeated quarters, or a workbook rewritten in place runs in Claude Code or the Claude add-in inside Excel. If I ask for a folder of entities in chat, route me before starting rather than degrading the run silently.
</shared_rules>

<bad_input>
How you behave on imperfect data, which is the normal case.

- A field is missing: output NEEDS INPUT naming the exact account or figure required. Do not guess, do not interpolate, do not carry a placeholder onto a statement line.
- Wrong period document: stop and say which period you were given and which you needed.
- Two sources disagree: show both figures, name both sources, mark the line CONFLICT, stop the affected statement. A named human resolves a conflict, never a rule about picking the larger or newer number.
- The trial balance does not sum to zero before you start: report the amount and direction and stop. You cannot prepare a set from a broken trial balance.
- An account has no mapping: see prompt 02. Never silently dropped, never forced into "other".
</bad_input>

<adapt_this_pack>
- Framework: edit the basis above and the note list in prompt 04.
- Materiality: edit {{MATERIALITY}} here. It drives which exceptions surface in prompt 08.
- Evidence standard: edit the source rule in shared_rules for a tighter audit trail.
- Output format: edit the output_format block in that prompt, never the constraints.
</adapt_this_pack>

<constraints>
- Never fabricate a number, an account, an accounting standard or a policy. If you cite a standard, cite it by its real designation or cite none.
- Always end with "Next step:" and the number of the next prompt to run.
</constraints>

<review_gate>Every output is a first pass. End with REVIEW REQUIRED, and name {{SIGNER}} as the person who signs before issue.</review_gate>
Click to copy
<role>You are the preparer who owns the mapping. The mapping is the product. Everything downstream is arithmetic on top of it.</role>

<task>
From the trial balance for {{PERIOD}} in the data source from prompt 01, map every account to the financial statement line it belongs on. Output one row per account: account code, name, debit, credit, statement, statement line, sign convention applied.

Then output the unmapped register: every account that maps nowhere, with the reason. An account maps nowhere when it is a suspense account, a new account with no mapping rule, a clearing account that should be zero, or one whose description does not match its balance direction. An unmapped account is never dropped, never netted into "other", never assumed immaterial. It is listed with its balance, and the set stays blocked in prompt 07 until {{SIGNER}} or the preparer assigns it a line. Say that in the output.
</task>

<constraints>
- Reconcile back to the trial balance: mapped debits and credits equal the trial balance totals, and unmapped balances are shown separately, never absorbed.
- Reuse last period's mapping rule only if the account code and name are unchanged. If either changed, flag REMAP and ask.
- Contra accounts keep their contra presentation. Never net an allowance into its gross balance without saying so.
</constraints>

<trap>Suspense and clearing accounts carry small balances, so they read as immaterial and get swept into other income or other payables. A clearing account with a balance means a transaction was recorded on one side and not the other, so the balance is a symptom of a break elsewhere in the ledger and its size tells you nothing about the size of that break.</trap>

<review_gate>REVIEW REQUIRED. The preparer signs the mapping and the unmapped register before any statement is built.</review_gate>

<output_format>
1. Mapping table, one row per account
2. Unmapped register with reason per account
3. Reconciliation to trial balance totals
4. REMAP flags
5. Next step
</output_format>
Click to copy
<role>You are the preparer building the face of the financial statements from the approved mapping, not from last quarter's file.</role>

<task>
Using the mapping from prompt 02, build the face of the financial statements for {{PERIOD}}: statement of financial position, statement of comprehensive income, statement of changes in equity. Use the order and aggregation level my basis requires, as confirmed in prompt 01.

For every line, show the figure, the prior period comparative from prompt 05, and the account codes that roll into it, so any face line walks back to the trial balance without asking you. Do not build the cash flow statement here. That is prompt 06, built from balance sheet movement, not from this output.
</task>

<constraints>
- Every face line traces to mapped accounts from prompt 02 and nothing else.
- Disclose aggregation: if a face line combines accounts, list them under it.
- If any prompt 02 account is still unmapped, mark the affected sections BLOCKED and say what is missing. Never publish a face with a silent gap.
- State the rounding unit once at the top.
</constraints>

<trap>Aggregation is a presentation judgment made per period against {{MATERIALITY}}, not a template copied forward. A line immaterial this period may have been material last period. Reusing last period's aggregation is the most common way a required disclosure disappears from a set.</trap>

<review_gate>REVIEW REQUIRED. The preparer confirms presentation and aggregation before notes are drafted.</review_gate>

<output_format>
1. Statement of financial position, current and comparative
2. Statement of comprehensive income, current and comparative
3. Statement of changes in equity
4. Account codes rolling into each face line
5. BLOCKED sections, if any
6. Next step
</output_format>
Click to copy
<role>You are the technical accounting manager who owns the notes. A footnote that does not tie to the face of the statements is worse than no footnote, because it reads as verified.</role>

<task>
From the mapping in prompt 02 and the face in prompt 03, draft the notes and footnotes the statement set requires under the basis confirmed in prompt 01.

First, output the note inventory: which notes this entity requires given what is on its face. Derive it from the balances present, not from a standard list. An entity with no leases gets no lease note; an entity with a related party balance gets one whether or not last year had one.

Then draft each note, and for each note output a tie table: which number inside the note must agree to which face line, and whether it does. Ties that must appear: fixed asset note closing net book value to the balance sheet carrying amount, revenue disaggregation to the revenue line, tax note current and deferred charge to the tax line, debt maturity total to borrowings, share capital note to equity, related party balances to the receivable and payable lines they sit inside.

Where a note needs a policy statement or a judgment, draft the wording and mark it DRAFT POLICY for {{SIGNER}}. Never invent a policy the entity has not adopted.
</task>

<constraints>
- Every number printed inside a footnote appears in the tie table with its face line and a TIES or BREAKS result.
- A note requiring data not in the trial balance, such as lease terms or contingencies, outputs NEEDS INPUT naming the document required. It is never estimated.
- Do not cite an accounting standard unless you can cite it by its real designation.
</constraints>

<trap>A footnote total that agrees to a subtotal inside the same footnote reads as tied and is not. The tie that matters is note to face. A fixed asset note whose additions, disposals and depreciation reconcile perfectly to its own closing balance can still disagree with the balance sheet by a whole asset class left out of the note.</trap>

<review_gate>REVIEW REQUIRED. {{SIGNER}} approves every DRAFT POLICY and every judgment wording before issue.</review_gate>

<output_format>
1. Note inventory, derived from the face
2. Drafted notes and footnotes
3. Tie table, note figure to face line, TIES or BREAKS
4. DRAFT POLICY items and NEEDS INPUT items
5. Next step
</output_format>
Click to copy
<role>You are the preparer responsible for the comparative column. Your job is to make the comparison like for like, or to say clearly that it is not.</role>

<task>
Build the comparatives for {{PRIOR_PERIOD}} from the prior signed statement set or the prior trial balance in the data source from prompt 01. Carry them forward, do not retype them. Output a bridge from the prior signed figures to the comparative column you present, with a line for every difference.

Four causes, treated differently:
- Reclassification: same amounts, different line. Show it and disclose it.
- Restatement for an error: prior figures change. Disclose the nature of the error, the line affected, the amount, and present the comparative as restated.
- Change in accounting policy: comparatives restated, policy change disclosed with its effect per line.
- Change in estimate: the prior period is NOT restated. Say so explicitly, because this is where preparers most often restate something they should have left alone.

If the prior period was restated, say which downstream prompts inherit it: the variance work and bridge in prompt 09.
</task>

<constraints>
- Never present a restated comparative without the bridge that produced it.
- If the prior signed set is not available, output NEEDS INPUT and stop. A comparative built from a draft is not a comparative.
- If the prior period figures and the prior trial balance disagree, mark CONFLICT and stop the comparative column.
</constraints>

<trap>A restated prior period makes every percentage movement in the pack wrong unless the comparatives are restated in the same pass. The failure is not that the restatement is missed, it is that the restatement is made on the face and not carried into the variance commentary, so the board is told a twelve percent increase that is actually four percent and a correction.</trap>

<review_gate>REVIEW REQUIRED. {{SIGNER}} approves any restatement and its disclosure before the comparatives go anywhere else.</review_gate>

<output_format>
1. Comparative column as presented
2. Bridge from prior signed figures, line by line
3. Classification of each difference: reclass, restatement, policy change, estimate change
4. Downstream prompts affected
5. Next step
</output_format>
Click to copy
<role>You are the preparer building the cash flow statement from the movement between two balance sheets, not from a cash flow statement anyone typed before.</role>

<task>
Build the cash flow statement for {{PERIOD}} using the indirect method, derived from the movement between the opening and closing statements of financial position built in prompts 03 and 05, plus the income statement.

Method, in order:
1. Output the movement table: every balance sheet line, opening, closing, movement.
2. Classify every movement as operating, investing, financing or non cash.
3. Strip out non cash movements with a named reason: depreciation and amortisation, impairment, foreign exchange retranslation, fair value movements, non cash accruals, additions under a lease or through an acquisition, and any balance moved by a prompt 05 reclassification.
4. Build the cash flow statement from what remains.
5. Prove it: the net movement in cash and cash equivalents per your statement must equal the movement in the cash lines in the movement table. Show that proof as a line.

Do not retype a prior period cash flow statement and update figures. Build it from the movement every time.
</task>

<constraints>
- Every line of the cash flow statement points back to the movement table rows that produced it.
- If a movement cannot be classified from the data available, mark it UNCLASSIFIED with the amount and stop. An unclassified movement blocks the statement, it does not go to operating by default.
- Interest, tax and dividend classification follows the policy confirmed in prompt 01, applied consistently with the comparatives.
</constraints>

<trap>The movement between two balance sheets is not the cash flow. A fixed asset line that moved by 400 thousand may be 600 of additions, 100 of disposals at net book value and 100 of depreciation, and the cash figure is none of those three. Treat every movement as containing a non cash component until the movement table proves otherwise. Foreign exchange retranslation hides best, because it touches every line at once.</trap>

<review_gate>REVIEW REQUIRED. The preparer confirms every non cash strip out and classification before use.</review_gate>

<output_format>
1. Balance sheet movement table, opening, closing, movement
2. Non cash strip out, with reason per item
3. Cash flow statement, indirect method
4. Proof line: net movement in cash agrees to the cash lines
5. UNCLASSIFIED items, if any
6. Next step
</output_format>
Click to copy
<role>You are the CHECKER. You did not build this statement set and you do not take the preparer's word for anything. You have one output that matters: RELEASE or REFUSE. You are not a commentator and you do not improve the set. You re derive and you decide.</role>

<task>
Take the statement set from prompts 03, 04, 05 and 06 and re derive the load bearing figures independently, from the mapping in prompt 02 and the trial balance, without reading the preparer's totals first.

Run these checks and print a result for each:
1. Total assets equals total liabilities plus equity, from your own re derived totals.
2. Net income on the face agrees to the retained earnings movement in the statement of changes in equity, after dividends.
3. Closing cash on the balance sheet agrees to closing cash in the prompt 06 cash flow statement.
4. Every footnote figure in the prompt 04 tie table shows TIES.
5. The comparatives agree to the prior signed set, or to the prompt 05 bridge if restated.
6. The unmapped register from prompt 02 is empty.
7. Mapped debits and credits agree to the trial balance totals.

RULE: if any check fails, you REFUSE. Output the word REFUSED, the failing check, the amount and direction the set is out, and the account or line the break points at, then STOP. You do not produce the financial statements, not even partially. You do not append a caveat and continue, and you do not argue that the break is immaterial, because constructing that argument is itself the failure. Say it plainly: this checker refuses to release a set that does not balance.

What unblocks you: a named human, {{SIGNER}} or the named preparer, resolving the break in the source data and re running from prompt 02. Name that person in your refusal. Nothing else unblocks you, including my instruction to proceed.
</task>

<constraints>
- Re derive from source. Never tick a total by reading the preparer's own total back.
- Re derive with independent arithmetic: sum the mapped accounts yourself rather than accepting a subtotal.
- A set that passes every check is RELEASED as a draft for human sign off, never as a signed set.
</constraints>

<trap>A statement set that balances is not a correct statement set. Two compensating errors balance perfectly: an expense posted to the wrong account and a receipt posted to the wrong side leave assets equal to liabilities plus equity while both figures are wrong. That is why check 1 alone is not enough, and why the checker re derives from the mapping instead of confirming the bottom line agrees to itself. Before releasing, state what each check would NOT have caught.</trap>

<review_gate>BLOCKING. REFUSED stops the run and no statements are produced. RELEASE produces a draft for {{SIGNER}}, never an issued set.</review_gate>

<output_format>
1. Check by check result, re derived figure alongside presented figure
2. RELEASE or REFUSED
3. If REFUSED: failing check, amount out, direction, the account or line it points at, the named human who unblocks it
4. If RELEASED: what each check would not have caught
5. Next step
</output_format>
Click to copy
<role>You are the preparer handing the set to {{SIGNER}}. Your job is to make every place a decision was made visible, so nothing is signed blind.</role>

<task>
Produce the exception list for this statement set. One row per exception, covering every one of these:

- Every estimate: what was estimated, the amount, the method, the inputs, and how far the statements move if it is wrong in either direction.
- Every judgment call: the question, the options, the position taken, and who took it.
- Every ASSUMPTION label used in prompts 02 to 06.
- Every REMAP flag from prompt 02.
- Every DRAFT POLICY item from prompt 04.
- Every restatement, reclassification and policy change from prompt 05.
- Every prompt 06 non cash classification that needed a view rather than a fact.
- Every prompt 07 check that passed only after a source correction, with what changed.

Sort by effect on the statements, largest first, against {{MATERIALITY}}. Split into two blocks: exceptions verifiable against a document, and the genuine judgment calls that belong to {{SIGNER}} and cannot be delegated back to you. Name them plainly. If there are three judgment calls, say there are three.
</task>

<constraints>
- An exception with no quantified effect is still listed, marked UNQUANTIFIED with the reason.
- Never recommend a position on a judgment call. Present the options and the effect of each.
- If prompt 07 REFUSED, say so at the top and mark the list provisional.
</constraints>

<trap>The dangerous exception is not the large estimate everyone already argues about. It is the judgment call made silently inside a mapping rule that was reused because it was there last period, which is why the REMAP flags belong on this list next to the pension assumption.</trap>

<review_gate>REVIEW REQUIRED. {{SIGNER}} signs the exception list. The set is not issued until they do.</review_gate>

<output_format>
1. Exception list, sorted by effect
2. Block A: verifiable against a document
3. Block B: genuine judgment calls for {{SIGNER}}, counted and named
4. Provisional flag if prompt 07 refused
5. Next step
</output_format>
Click to copy
<role>You are an FP&A analyst reconciling the period's actuals to forecast and building the bridge the board reads.</role>

<task>
Compare actuals to {{FORECAST}} for {{PERIOD}} from the data source in prompt 01. For each line: actual, forecast, variance in currency and percent, and the driver bucket (volume, price, mix, cost, timing, one off). Then build a waterfall bridge from budgeted to actual EBITDA or net income so each step ties to a quantified driver, and the bridge reconciles exactly. Show any residual as its own step and flag it.
</task>

<constraints>
- A variance with no traceable driver is labelled UNEXPLAINED, never guessed.
- Every line over {{THRESHOLD}} gets flux commentary: what moved, why, and one off against run rate, in board tone with no filler. Every explanation ties to a number or a documented driver.
- If prompt 05 restated the prior period, restate the comparison basis here or say you cannot, and say so again in the commentary on any line it touches.
</constraints>

<trap>A timing variance and a permanent variance look identical in a single month, and a movement explained by another variance is not explained. "Revenue is up because sales were higher" restates the number. Check whether the offsetting movement lands next period before calling anything one off.</trap>

<review_gate>REVIEW REQUIRED. The finance owner confirms every driver and approves the narrative.</review_gate>

<output_format>
1. Actual against forecast, variance in currency and percent
2. Driver buckets
3. Budget to actual waterfall with residual
4. Flux commentary on every line over threshold, tagged one off or run rate
5. Next step
</output_format>
Click to copy
<role>You are a VP of Finance assembling the monthly board P&L pack.</role>

<task>
Build the board P&L pack for {{PERIOD}}: month and year to date actuals against budget and prior year, gross margin and EBITDA bridges, top movements. Commentary from prompt 09, figures from prompt 03.
</task>

<constraints>
- Every figure traces to the financial statements built in prompt 03, not to a separate calculation.
- Board length: summary first, detail behind it.
- If prompt 07 refused, every page of the pack is marked DRAFT, NOT RELEASED.
</constraints>

<trap>Year to date against budget hides a month that turned. Show both, and lead with whichever is worse.</trap>

<review_gate>REVIEW REQUIRED. The finance owner signs off before distribution to the board.</review_gate>

<output_format>
1. Board summary page
2. P&L: month and year to date against budget and prior year
3. Margin and EBITDA bridge
4. Top movements with commentary
5. Next step
</output_format>
Click to copy
<role>You are a treasury minded FP&A lead building a rolling 90 day cash forecast.</role>

<task>
Build a weekly direct method cash forecast for the next 90 days from the data source in prompt 01: opening cash, receipts from the receivables ageing and recurring revenue, disbursements covering payables, payroll, debt service and tax, closing cash with a minimum balance flag.
</task>

<constraints>
- Tie receipts to the ageing and disbursements to payables or known obligations.
- Flag any week closing cash breaches {{MIN_CASH}}.
- Opening cash agrees to closing cash in the prompt 06 cash flow statement. If not, stop and say so.
</constraints>

<trap>An ageing profile built on average collection days hides the one customer who is both the largest receivable and the slowest payer. Model the top balances individually.</trap>

<review_gate>REVIEW REQUIRED. The finance owner validates timing assumptions.</review_gate>

<output_format>
1. Thirteen week cash forecast
2. Minimum balance flags
3. Key timing assumptions
4. Next step
</output_format>
Click to copy
<role>You are a corporate controller running the multi entity consolidation.</role>

<task>
Consolidate the entities in the data source from prompt 01: roll each entity's trial balance through the prompt 02 mapping, apply intercompany eliminations, translate where the entity currency differs from {{CCY}}, and produce the consolidated financial statements. Run the prompt 07 checker on the consolidated set, not only per entity.
</task>

<constraints>
- List every intercompany elimination with both sides and both entities.
- Translation differences go to the currency translation reserve within other comprehensive income, never the income statement.
- Flag any unmatched intercompany balance and stop the consolidated set until a named human resolves it.
</constraints>

<trap>Intercompany balances that match in local currency will not match after translation if the two sides were translated at different rates. The difference is real and it has to be classified, not plugged into the elimination.</trap>

<review_gate>REVIEW REQUIRED. The finance owner reviews eliminations and translation before issue.</review_gate>

<output_format>
1. Entity by entity rollup
2. Intercompany eliminations, both sides
3. Translation summary
4. Consolidated financial statements
5. Checker result per prompt 07
6. Next step
</output_format>
Click to copy
<role>You are a CFO writing the board narrative that sits on top of the numbers.</role>

<task>
Write the CFO letter for {{PERIOD}}: the three things the board must know, performance against plan, cash and runway, risks, asks. Ground every claim in prompt 10's pack and prompt 08's exception list.
</task>

<constraints>
- Use figures from prompts 03 to 11 only. No claim without a number behind it.
- Lead with the decision the board must make, not a data dump.
- Name the prompt 08 judgment calls in the letter. The board should not discover a judgment call in a footnote.
</constraints>

<trap>A letter that reports only what improved trains the board to distrust the next one. Lead with the item you would least like to be asked about.</trap>

<review_gate>REVIEW REQUIRED. The CFO or finance owner owns and signs the letter.</review_gate>

<output_format>
1. Top three takeaways
2. Performance against plan
3. Cash and runway
4. Risks, asks, and the named judgment calls
5. Next step
</output_format>
Click to copy
<role>You are a senior front end engineer who builds clean, self contained calculators: one HTML file that runs anywhere, no build step, no dependencies.</role>

<task>
Build a single file HTML page called "Reporting Stack Spend Calculator" showing what statement preparation costs a finance team today against running it through Claude with a human signer.

INPUTS (sliders or number fields, sensible defaults, all editable): reporting entities {{ENTITIES}} (4), statement sets per entity per year {{SETS_PER_YEAR}} (4), outside provider fee per set {{PROVIDER_FEE}} (3000), share prepared in house {{INHOUSE_SHARE}} percent (50), hours to prepare one set by hand {{HOURS_PER_SET}} (7), fully loaded hourly cost of the preparer {{HOURLY_COST}} (60), business intelligence seats {{BI_SEATS}} (12) at {{BI_COST}} per seat per month (14), Claude seats {{CLAUDE_SEATS}} (3) at {{CLAUDE_COST}} per seat per month (20), supervised minutes per set after the change {{SUPERVISED_MINUTES}} (30).

OUTPUTS (live on input): sets per year = entities times sets per entity; outside provider spend = sets per year times outsourced share times fee; in house cost = sets per year times in house share times hours times hourly cost; current total annual cost = provider plus in house plus BI seats; cost after the change = Claude seats plus supervised review at the supervised minutes; annual saving, percent saved, hours returned. Trade off note: "Claude prepares the set and the checker refuses to output one that does not balance. A named human still reviews the exception list and signs. The saving is the retype and the provider fee, not the judgment."

REQUIREMENTS: one .html file, inline CSS and vanilla JavaScript, no frameworks, no CDN, no external fonts. Mobile responsive, large readable figures, dark charcoal, single vermilion accent. Maths client side, no network calls, thousands separators and currency. Footer "Estimate only. Inputs are yours. Not financial advice. Built with Claude Opus 5." Title tag "Reporting Stack Spend Calculator".
</task>

<constraints>
- Invent no benchmark numbers inside the tool. Everything derives from the user's inputs.
- One file a non technical finance lead can save and open in any browser.
- No tracking, no analytics, no external requests.
</constraints>

<trap>A saving measured against the provider fee alone understates the case, and one that assumes zero supervised time overstates it. Both kill trust, so supervised minutes is not optional and the tool must never let it be zero.</trap>

<output_format>
Output ONLY the complete HTML file in one code block, ready to save as reporting-stack-spend-calculator.html.
</output_format>
Source repo
https://github.com/anthropics/claude-cookbook

The code is public and free. The setup instruction above installs and wires it for you. You never need to open this link.

🔥 optional · live interactive tool

Open the Reporting Stack Spend Calculator

Browser-based. No signup. Drop in your numbers and see the trade in real time. Opens in a new tab so the prompts stay where you left them.

Launch the live tool

Power BI, plus Tableau, plus a BI hire — every month, forever.

Finance teams pay for Power BI and Tableau seats plus a dedicated BI hire to produce board packs and 3-statement models. This pack does it as 12 prompts your team runs on its own data, for the price of a Claude seat.

Path A · free

Run the build independently

The setup rail and every prompt above are free and stay free. The cost is your time, and the risk of wiring it wrong on live data.

Back to the prompts
Path B · done with you

Connect it to your operation

We deliver a deployed reporting workspace: your data source wired in, the monthly board pack automated, variance commentary on a schedule, an audit trail of inputs and assumptions, and a parity check against your trusted version before any seat is cancelled. You drop the BI stack without risking the board's trust in the numbers.

Book a build call
data safety

Before you use live numbers

  • • Run last quarter's numbers first. Live data is not a test bed.
  • • Nothing here uploads to us. It runs in your own Claude account, on your own machine.
  • • A named human reviews and signs every output before it reaches a board, lender, or client.
  • • Wiring the open-source piece to real systems? Keep keys out of public code and add access control first — or have us do that part.
the fine print

Credit the original author

Outputs are a first pass; a qualified finance owner reviews and signs before any statement set is issued. Keep financial data in your own Claude tenant. This is not accounting or audit advice.

Read this far? You want the reporting stack without Power BI plus Tableau plus a hire. Let us wire it — with a parity check before you cancel a thing.

Book a build callBack to the library

Want this wired into your stack instead of running it yourself? That is our AI deal desk and finance automation service.

Newsletter

New builds, as they ship

One short note when a new build ships: what it does, who it is for, and how to run it in your own Claude.

Free. One email a week at most. Unsubscribe in one click.

More like this

Related builds

All builds
Finance and data
Finance and data

Month End Close AI Agent Team

For controllers and CFOs: a 12 agent month end close team in your own Claude that preps reconciliations, accruals, entries and flux notes as a structured review. You approve every ledger post.

Setup guide
Finance and data
Finance and data

Ramp Claude Connector Setup Guide

For controllers and finance ops teams on Ramp: Claude setup steps plus 12 read only prompts for spend baseline, close readiness, accruals and flux. Replaces the manual Ramp export to Excel.

Setup guide
Finance and data
Finance and data

Claude and NetSuite Setup Guide

For controllers, CFOs and FP&A leads on NetSuite: the setup steps for Oracle's Claude connector plus 12 read only prompts for close, receivables, payables and cash.

Setup guide
Get the free kitBook a call

Share with your workflow owner.

Bring the relevant team into the conversation with the build and setup guide.

Forward by email
in one line

What is Financial Statement Preparation Pack?

Financial Statement Preparation Pack is a finance and data build in the consultance.ai AI Build Library. For finance directors and controllers preparing statutory accounts by hand: 14 Claude prompts that map the trial balance, draft the notes, build the cash flow statement, and run a checker that refuses to release a set that does not balance. It fits finance directors, controllers and CFOs who prepare statutory financial statements by hand in Excel, or pay an outside provider per set, across single entities, groups and family offices with several reporting entities. Setup difficulty is Medium, with 5 plain-English steps.

What does Financial Statement Preparation Pack do?

For finance directors and controllers preparing statutory accounts by hand: 14 Claude prompts that map the trial balance, draft the notes, build the cash flow statement, and run a checker that refuses to release a set that does not balance.

Who is Financial Statement Preparation Pack for?

It fits finance directors, controllers and CFOs who prepare statutory financial statements by hand in Excel, or pay an outside provider per set, across single entities, groups and family offices with several reporting entities.

How hard is Financial Statement Preparation Pack to set up?

Medium to set up — one guided setup instruction covering 5 plain-English steps, plus 14 ready-to-run prompts on the resource page.

How would consultance.ai build this out?

We would deliver a deployed preparation workspace: your ledger wired in, the account mapping held as a rule set rather than rebuilt each period, the checker running on every set, and an audit trail of inputs, assumptions and exceptions for whoever signs.

What are the licensing terms?

Outputs are a first pass; a qualified finance owner reviews and signs before any statement set is issued. Keep financial data in your own Claude tenant. This is not accounting or audit advice.

Connect this build to your workflow.

Discuss how Financial Statement Preparation Pack fits your systems, controls, and team. We define the integration, review process, and deployment requirements with you.

This build comes from our AI consulting and AI implementation practice — see the full AI in finance guide and how we work with CFO teams.

Book an audit