I've built the December 2025 scorecard. **4 of the 8 KPIs met target.** A script, `scorecard.py`, computes every figure from `data/kpis_fy2025.csv`, so you can rerun it for any month with `python3 scorecard.py 2025-11`. The data is complete: all 8 KPIs have a value for all 12 months.

| KPI | Actual | Target | Variance | Status | Trend vs Nov |
|---|---:|---:|---:|:---:|---|
| Revenue | $826,751 | $823,600 | +$3,151 (+0.4%) | ✅ | Down $71.9k |
| Gross margin % | 26.1% | 26.0% | +6 bps | ✅ | Better |
| Days sales outstanding (DSO) | 51.2 days | 45.0 days | +6.2 days | ❌ | Worse (3rd miss in a row) |
| On-time delivery % | 93.3% | 95.0% | −170 bps | ❌ | Worse (3rd miss in a row) |
| Order fill rate % | 97.6% | 97.0% | +60 bps | ✅ | Better |
| Active customers | 40 | 42 | −2 | ❌ | Worse (2nd miss in a row) |
| Inventory turns | 5.33 | 6.50 | −1.17 (−18%) | ❌ | Worse (fell from 6.67) |
| Opex % of revenue | 25.1% | 25.2% | −14 bps | ✅ | Up 254 bps |

**Things to point out in the pack:**
- **DSO is the biggest problem.** It has risen every month for three months (47.3 → 48.6 → 51.2 days) and is now 6 days over target.
- **On-time delivery and active customers are slowly getting worse.** Both have missed for several months running. Order fill rate, by contrast, is improving.
- **Inventory turns dropped sharply in December, from 6.67 to 5.33.** This was the first miss after a run of hits. Either inventory built up at year end or cost of goods sold fell with revenue. It's worth checking the inventory balance (account 1200).
- **Opex % only met target because its target also rose.** It went from 20.8% in October to 25.1% in December, mainly because revenue fell while costs stayed flat.
- **Revenue for the full year was $11.24M against a $11.60M budget**, $361.6k short (−3.1%). December only beat its budget because the December budget itself was low.

**Limitations:**
- Status is a strict met/missed against target. The data defines no tolerance band, so I didn't use amber or "close to target" ratings.
- Revenue, gross margin and opex % are defined from `pnl_fy2025.csv`, but that file isn't in this directory. I used the KPI file as given and couldn't check those values against the P&L.

Files are in `output/`:
- `kpi_scorecard_2025-12.md`: the scorecard, plus a table of the last three months and the KPI definitions
- `kpi_scorecard_2025-12.csv`: the same figures as data, for downstream use