A scheduled monthly drafter for board-pack commentary.
The Forecast Variance co-worker runs on the morning of day-6 each close cycle, after the GL is posted and the FP&A model is locked. It scans every P&L line, identifies material variances against forecast, decomposes the drivers (price/volume/mix, rate/efficiency, FX), and drafts a structured paragraph per material line. The controller opens the queue, clicks any sourced number to verify, edits tone where needed, and approves.
The approved commentary exports as the variance section of the board pack. Every number is hyperlinked back to its GL row or FP&A snapshot — defensible from the CFO's chair down to the journal entry.
What connects, what gets configured.
| Connection | Object | Refresh |
|---|---|---|
| ERP / GL | Posted journal entries, account hierarchy | Daily, after close |
| FP&A model | Locked forecast snapshot | Per-cycle |
| Driver tables | Headcount, FX, volume metrics | Period-end |
| Prior decks | Last 6 months commentary (style reference only) | Manual upload |
Configuration (one-time, in YAML)
- Materiality threshold — absolute $ and/or % deviation that triggers commentary. Usually two of: $25k, 5%, larger of.
- Account hierarchy mapping — which GL accounts roll into which board-pack categories. Typically maps to the existing FP&A model rollup.
- Driver assignment — for each board-pack line, which driver decomposition applies (revenue lines → price/volume/mix; opex lines → headcount/rate; balance lines → flow).
- Approver role — named role (usually Controller) plus an optional second reviewer for highest-impact lines.
Day-6 morning, before the controller opens their inbox.
- 06:00 — Co-worker reads the locked forecast snapshot and the posted GL.
- 06:05 — Variance pivot computed at the account level. Materiality filter applied.
- 06:10 — For each material line, driver decomposition runs (price/volume/mix, FX, headcount waterfall as relevant).
- 06:15 — LLM drafts one sentence per material line, citing the driver decomposition result.
- 06:20 — Draft commentary lands in the approval queue, sorted by absolute $ impact. Controller gets one email with a deep link.
- 06:30 — Done. Controller's queue is ready when they sit down.
One structured sentence per material line.
[Account / line] closed at [$ posted], [over/under] forecast by [$Δ / %Δ], driven primarily by [driver, with magnitude] — see [citation: driver decomp + GL rows].
The "driven primarily by" clause is the most carefully engineered part. The co-worker only names a driver if that driver explains >= 60% of the variance per the decomposition. Below that, the sentence ends with "— driver inconclusive, multi-factor; see detail". The deck reader knows when they're getting a clean explanation and when they're getting "we need to talk about it."
Every number expands to its math.
Click any dollar figure in the draft → opens the source query result (GL aggregate, with the SQL displayed, posting period, JE IDs). Click a "driven by FX" claim → opens the FX impact table (per-currency rate movement × transactional volume = $ impact). Click a forecast number → opens the locked FP&A model cell with timestamp and version.
For audit, every citation is preserved through to the approved commentary's audit log. If the board asks in month four "show me how we computed the EMEA opex variance last March," it's one query, no archeology.
"Defensibility moves from 'I trust the analyst' to 'I can show the board the exact row backing every claim, in four seconds.'"
Five steps, batch-friendly.
- Open the queue (deep link in the morning email).
- Skim sentences in $-impact order. Click-through where any claim looks off.
- Edit in place for tone — the model is accurate but flat. Soften "driven primarily by" to "largely reflects" for board context, etc.
- Batch-approve all routine lines (typically > 70% of the draft) with one click.
- For the two or three lines that need a manual story, open the citation, write the explanation directly, approve.
Total controller time for a typical monthly close: 25–45 minutes, vs 4–8 hours pre-rollout. The difference is mostly in not chasing line owners for explanations — the decomposition does it.
Output formats.
- Board pack export — PDF or Google Slides, drop-in section. Source citations preserved as hyperlinks (visible or hidden, your choice).
- Internal review note — longer Markdown version with the full driver decompositions inline. Used by FP&A for the post-close review.
- Audit log — full history of draft, edits, approval, citation IDs. Exportable as Parquet.
What we measure.
- Close-week hours saved across the FP&A team. Baseline + measure month 2.
- % of draft sentences approved without edit. Higher = better-tuned. Target > 60% by month 3.
- Time-to-defensible-answer when board asks a question post-meeting. Pre: 1–2 days. Post: instant.
Ready for next month's close?
Most FP&A teams can have a working pilot by close period two. We look at your model, your GL, and your current commentary process in the assessment call.