Four of the eight KPIs missed target in December 2025. Days sales outstanding and on-time delivery have each missed for three months running. The scorecard ties to the P&L on revenue, gross margin and opex.

| KPI | Actual | Target | Variance | Status | Months off |
| :-- | --: | --: | --: | :-- | --: |
| Revenue | $827K | $824K | $3K | on target | 0 |
| Gross margin percent | 26.1% | 26.0% | 0.1 pts | 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) pts | off target | 3 |
| Order fill rate percent | 97.6% | 97.0% | 0.6 pts | 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 pts | on target | 0 |

Source: kpis_fy2025.csv, pnl_fy2025.csv

**Note**
- **Misses of three months or more:**
  - Days sales outstanding is 51.2 against a target of 45.0.
  - On-time delivery is 93.3% against a target of 95.0%.
- **Shorter misses:**
  - Active customers is off target for 2 months, at 40 against 42.
  - Inventory turns missed for the first time, at 5.33 against 6.50.
- **Open questions:** the data doesn't show why receivables and delivery are slipping. I put those questions to the KPI owners in the note.
- **Rounding:** each figure is rounded on its own, so the opex variance isn't exactly the gap between the printed actual and target.

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