I've built the December 2025 KPI scorecard and the note to go with it, and the scorecard ties to the P&L. Revenue ($827K), gross margin percent (26.1%) and opex percent of revenue (25.1%) all match `pnl_fy2025.csv`.

**Headline:** 4 of 8 KPIs were on target in December 2025, 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 |

Variance is positive when the result is better than target. Percent variances are in points.

**Exceptions (off target three months running):**
- **Days sales outstanding:** 51.2 against a target of 45.0. The note asks the owner which customers have balances past terms, and when they have agreed to pay.
- **On-time delivery percent:** 93.3% against a target of 95.0%. The note asks which carriers, warehouses or product lines account for the late orders.

Active customers (2 months off) and inventory turns (1 month off) are also below target, but neither has missed for three months yet.

On opex percent, the actual and target round to 25.1% and 25.3%, but the variance shows as 0.1 points. That's correct: the unrounded gap is 0.14 points. A reader may still ask about it.

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