# December 2025 KPI Scorecard

Source: `data/kpis_fy2025.csv`, period 2025-12. Variance is actual minus target. Status accounts for whether higher or lower is better.

| KPI | Actual | Target | Variance | Status | Nov actual | MoM change |
|---|---|---|---|---|---|---|
| Revenue | $826,751 | $823,600 | +$3,151 (+0.4%) | Met | $898,680 | -$71,929 |
| Gross margin % | 26.06% | 26.00% | +0.06 pts | Met | 25.79% | +0.27 pts |
| DSO (lower is better) | 51.2 days | 45.0 | +6.2 days (+13.8%) | **Missed** | 48.6 | +2.6 days |
| On-time delivery % | 93.30% | 95.00% | -1.70 pts | **Missed** | 93.70% | -0.40 pts |
| Order fill rate % | 97.60% | 97.00% | +0.60 pts | Met | 97.40% | +0.20 pts |
| Active customers | 40 | 42 | -2 (-4.8%) | **Missed** | 41 | -1 |
| Inventory turns | 5.33 | 6.50 | -1.17 (-18.0%) | **Missed** | 6.67 | -1.34 |
| Opex % of revenue (lower is better) | 25.11% | 25.25% | -0.14 pts | Met | 22.57% | +2.54 pts |

**Result: 4 of 8 KPIs met target, 4 missed.**

**Main issues**
- **Inventory turns** has the largest miss, 18% below target. It fell from 6.67 to 5.33 in one month.
- **DSO** is 6.2 days over target and has worsened by 2.6 days since November. Collections are slowing.
- **On-time delivery** and **active customers** are both slightly below target. Each moved the wrong way from November.

**Met targets, with caveats**
- Revenue beat budget by only 0.4%. It was down $72K (8%) from November.
- Opex % of revenue is under target. It rose 2.5 pts from November, so the cushion is thin.
- Gross margin and order fill rate are on target and improving.

The file contains only these KPI definitions and values. I did not check the figures against `pnl_fy2025.csv`, which isn't in the folder. I also didn't add YTD or full-year totals, because you asked for the December scorecard.