I've written the December 2025 KPI scorecard. It ties to the P&L: revenue, gross margin percent and opex percent of revenue all match `pnl_fy2025.csv`, and the script's tie checks passed.

4 of 8 KPIs were on target, and 2 have been off target for three months or more.

| KPI | Actual | Target | Variance | Status | Months off |
| :-- | --: | --: | --: | :-- | --: |
| Revenue | $827K | $824K | $3K | on target | 0 |
| Gross margin percent | 26.1% | 26.0% | 0.1 | on target | 0 |
| Days sales outstanding | 51.2 | 45.0 | (6.2) | off target | 3 |
| On-time delivery percent | 93.3% | 95.0% | (1.7) | off target | 3 |
| Order fill rate percent | 97.6% | 97.0% | 0.6 | on target | 0 |
| Active customers | 40 | 42 | (2) | off target | 2 |
| Inventory turns | 5.33 | 6.50 | (1.17) | off target | 1 |
| Opex percent of revenue | 25.1% | 25.3% | 0.1 | on target | 0 |

The two exceptions are days sales outstanding and on-time delivery percent. The note puts a question to each KPI's owner: which customers are past due, and which lanes or products are running late.

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