I've built the December 2025 scorecard. 4 of the 8 KPIs were on target, and 2 have been off target for three months or more. The script's checks tie revenue, gross margin percent and opex percent of revenue to `pnl_fy2025.csv`.

**Off target**

| KPI | December | Target | Months off |
| :-- | --: | --: | --: |
| Days sales outstanding | 51.2 | 45.0 | 3 |
| On-time delivery percent | 93.3% | 95.0% | 3 |
| Active customers | 40 | 42 | 2 |
| Inventory turns | 5.33 | 6.50 | 1 |

**On target**
- Revenue: $827K against $824K.
- Gross margin percent: 26.1% against 26.0%.
- Order fill rate percent: 97.6% against 97.0%.
- Opex percent of revenue: 25.1% against 25.3%.

The note's Exceptions section covers the two KPIs off target for three months or more, days sales outstanding and on-time delivery. Each carries a question for its owner.

Opex percent of revenue has a rounding note. Each figure is rounded on its own, so its variance as shown is not exactly the gap between actual and target as shown.

Files are in `output/`:
- `scorecard-note.md`
- `scorecard.json`