The FY2025 one-pager is ready at `output/exec-summary.md`. It's 311 words, under the 350-word limit for one page. The figures behind it are in `output/summary.json`. Before writing, the script confirmed that the four quarters add up to full-year revenue, that operating income built from the line items matches the subtotal, and that the revenue KPI matches the P&L.

**Main points for the CFO:**
- **Revenue:** $11.2M against a budget of $11.6M, a shortfall of ($362K). Revenue was below budget in every quarter, and most of the gap was in Q1 ($121K short) and Q3 ($229K short).
- **Operating income:** $388K against a budget of $583K, a shortfall of ($195K). Gross margin was 25.9% against 26.8% budgeted.
- **Costs:** Cost of goods sold came in $196K under budget, which made up part of the revenue shortfall. Operating expenses were almost exactly on budget, only ($649) over.
- **Watch list:**
  - Days sales outstanding: 51.2 days against a 45.0-day target, missed for 3 months running.
  - On-time delivery: 93.3% against a 95.0% target, missed for 3 months running.
  - Active customers: 40 against a target of 42, missed for 2 months running.

**Choices I made:**
- **Inventory turns left off the watch list.** It is 5.33 against a 6.50 target, but it has only been off target for one month.
- **Closing question.** The summary asks whether the revenue shortfall, slower collections and late deliveries involve the same customers. That is a question for leadership to put to the business. The data doesn't show a cause.
- **No prior-year comparisons or forecasts.** Neither is in the input files.