4 of 8 operating KPIs missed target in December 2025. Two of them have missed for three months running. The scorecard ties to the P&L for revenue, gross margin and opex percent.

| 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 |

Source: kpis_fy2025.csv, pnl_fy2025.csv

**Note**
- **Three months running:** Days sales outstanding is 6.2 days over target. On-time delivery percent is 1.7 points under target.
- **Active customers:** It has missed for 2 months, at 40 against 42.
- **Inventory turns:** It missed for the first time in December, at 5.33 against 6.50. One month is not a trend.
- **Causes:** The data doesn't show why any of these missed. Receivables aging by customer would explain days sales outstanding. Late-order detail would explain on-time delivery.

The note, with the owner questions for the two three-month misses, is in `output/scorecard-note.md`. The script's figures are in `output/scorecard.json`.