The FY2025 budget vs actual commentary is written and saved at `output/bva-note.md`. The figures are in `output/bva.json`. The script reconciled, and every number in the note is copied from its output.

**Headline:** Revenue was $11.2M against a $11.6M budget, unfavourable by ($362K), or (3.1%). Operating income was $388K against $583K, unfavourable by ($195K), or (33.5%).

**Drivers in the note:**
- **Revenue:** The miss was concentrated in July ($132K under), March ($123K under) and August ($105K under). Other months were close to budget.
- **Cost of goods sold:** It was favourable by $196K, or 2.4%. The data doesn't show whether that came from lower volume or better unit cost.
- **Marketing:** It was favourable by $38K, or 28.5%. The note asks the owner to confirm whether the spend was cut or deferred.
- **Salaries and wages, and Freight out:** Both were unfavourable, by ($38K), or (2.5%), and by ($29K), or (8.3%).

**Checks before it goes to the review:**
- The Results table shows Operating expenses as ($649) unfavourable, as the script prints it. That looks small next to the other lines, so check it against the source.
- The note doesn't explain why the three revenue-miss months fell short. Customer and product sales by month would answer that.
- The note's Data notes line records `pnl_fy2025.csv`, 120 rows, sha256 `eaa52ac89e97`.