I've written the one-page FY2025 summary for the CFO in `output/exec-summary.md`, about 300 words. All the figures come from the summary script, and its checks passed: the quarters add up to the full-year revenue, operating income matches when rebuilt from the P&L lines, and the revenue KPI matches P&L revenue.

**Headline:** FY2025 revenue was $11.2M against a budget of $11.6M, and operating income was $388K against $583K.

**Main points:**
- **Revenue** was ($362K) under budget. Most of the miss was in Q1, ($121K), and Q3, ($229K); Q2 and Q4 came in close to budget.
- **Cost of goods sold** was $196K under budget, which made up part of the revenue shortfall. Gross margin was still 25.9% against a budget of 26.8%.
- **Operating expenses** finished in line with budget at $2.5M, a variance of ($649).
- **Watch list:**
  - Days sales outstanding was 51.2 days against a target of 45.0.
  - On-time delivery was 93.3% against a target of 95.0%.
  - Active customers were 40 against a target of 42.

  The first two have been off target for 3 months, and active customers for 2.

I left inventory turns off the watch list. It was also off target, at 5.33 against 6.50, but only for one month. Tell me if you want it back on.

The data doesn't show why revenue missed in Q1 and Q3, so the summary doesn't give a cause. Instead it ends with the question leadership should put to the business.

Files are in `output/`:
- exec-summary.md
- summary.json