I've written the full-year budget versus actual commentary to `output/bva-note.md`, with the figures behind it in `output/bva.json`. The analysis script's built-in checks passed: the line items add up to operating income, and the monthly variances add up to the full-year total. Every figure in the note is copied from the script's output.

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

- **Revenue:** almost all of the miss came in three months: March ($123K), July ($132K) and August ($105K). Every other month was within a few thousand dollars of budget.
- **Gross margin:** 25.9% against a budgeted 26.8%, down (0.9) pts. Cost of goods sold came in $196K under budget, which offset part of the revenue shortfall.
- **Operating expenses:** on budget overall, unfavourable by ($649). Overspends on salaries and wages ($38K) and rent and occupancy ($23K) were offset by underspends on marketing ($38K) and technology ($25K). Freight out, a cost of goods sold line, was also over by ($29K).
- **December:** revenue was favourable by $3K. Operating income was unfavourable by ($5K) because gross profit came in under budget.

**Questions for the review:**
- The file doesn't show why revenue fell short in March, July and August. Revenue by customer or product for those months would answer it.
- It also doesn't show why cost of goods sold was under budget: lower volume or cheaper units. Volume data would settle this.
- Professional fees were ($31K) over budget in March but finished the year only ($1K) over. That looks like timing, not a lasting overspend.