The full-year commentary is in `output/bva-note.md`, and the figures behind it are in `output/bva.json`. The script's checks passed, so revenue, costs and operating income reconcile for both December and the full year.

**Results for 2025:**
- **Revenue:** $11.2M against a budget of $11.6M, unfavourable by ($362K), or (3.1%).
- **Operating income:** $388K against $583K, unfavourable by ($195K), or (33.5%).
- **Gross margin:** 25.9% against 26.8%, a variance of (0.9) pts. Cost of goods sold came in $196K under budget, but not by enough to hold the margin.
- **Operating expenses:** almost exactly on budget at ($649). Marketing ($38K) and Technology ($25K) were under budget, offsetting overruns in Salaries and wages ($38K) and Rent and occupancy ($23K).

**What drove it:**
- **Revenue:** the miss came mostly from three months: March at ($123K), July at ($132K) and August at ($105K).
- **Professional fees:** the overrun was timing. It reached ($31K) in March and finished the year at ($1K).
- **December:** revenue was $3K above budget, but operating income was ($5K) below it.

The P&L doesn't show why revenue fell short in those three months. To explain it, Sales would need to provide customer or product detail, so the note asks them rather than guessing a cause.

The note covers four drivers and leaves out Marketing and Technology. If you'd rather feature those underspends, I can swap them in.