I've built all three: the KPI scorecard, the December 2025 business review write-up and the six-slide deck. Every check passed: the scorecard ties to the P&L, the write-up's P&L figures reconcile to the cent, and every one of the deck's 59 figures traces to one of the two sources. I didn't calculate any number myself; they all come from the pack's scripts.

**December 2025**
- **P&L:** revenue was $827K against a $824K budget. Operating income was $8K against $13K, a ($5K) shortfall. Cost of goods sold ran ($6K) over budget, so gross margin came in (0.7) points below budget. Operating expenses were on budget: Other operating ran ($6K) over and Technology was $4K under.
- **Year to date:** revenue is ($362K) behind budget and operating income is ($195K) behind. December's small revenue beat doesn't change that picture.
- **KPIs:** 4 of 8 were on target. Days sales outstanding (51.2 against 45.0) and on-time delivery (93.3% against 95.0%) have each been off target for three months. Active customers have been off for two months and inventory turns for one.

**One thing to know before you present:** the gross margin KPI shows "on target" (26.1% against a 26.0% target), but the P&L table shows gross margin (0.7) points below budget (26.1% against 26.8%). Unlike the revenue and opex KPIs, the gross margin KPI's target is not the budget figure. That's how the data is set up, not an error, but the two slides will look inconsistent unless someone explains it.

In the write-up, I've marked one point as inferred rather than shown by the data: that lower revenue is behind the $196K year-to-date cost of goods sold underspend. Volume and unit cost data would confirm it.

Files are in `output/`:
- `IS_MBR_2025-12.pptx` – the deck
- `scorecard-note.md` – the KPI scorecard
- `mbr-narrative.md` – the business review write-up
- `slide-map.json` – what goes on each slide
- `scorecard.json`, `mbr.json`, `deck.json` – the script outputs behind them