The full-year commentary is in `output/bva-note.md`. The figures are in `output/bva.json`, and the script reported that the variances reconcile.

Full-year 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%). Gross margin was 25.9% against 26.8%, a variance of (0.9) pts.

The Drivers section covers four points:
- **Revenue miss:** It came from three months: July at ($132K), March at ($123K) and August at ($105K). Every other month was within $7K of budget. The data doesn't show why, so the note asks the sales owner to confirm whether these were volume shortfalls or budget phasing.
- **Cost of goods sold:** It was favourable by $196K, or 2.4%, against revenue below budget. Freight out was unfavourable by ($29K), or (8.3%), and its variance was still widening in December.
- **Professional fees:** They were unfavourable by ($31K) at the March peak but finished the year at ($1K), so the overrun reversed.
- **Other cost lines:** Salaries and wages were unfavourable by ($38K). Marketing was favourable by $38K and Technology by $25K.

December on its own was close to budget. Revenue was favourable by $3K and operating income unfavourable by ($5K).

The data notes record the source as `pnl_fy2025.csv`, 120 rows, sha256 `eaa52ac89e97`.