# December 2025 KPI Scorecard

Source: `data/kpis_fy2025.csv`. 4 of 8 KPIs are on target and 4 are off.

| KPI | Actual | Target | Variance | Status | Nov actual |
|---|---|---|---|---|---|
| Revenue | $826,751 | $823,600 | +$3,151 (+0.4%) | On target | $898,680 |
| Gross margin % | 26.06% | 26.00% | +0.06 pts | On target | 25.79% |
| DSO (days) | 51.2 | 45.0 | +6.2 days (worse) | **Miss** | 48.6 |
| On-time delivery % | 93.3% | 95.0% | −1.7 pts | **Miss** | 93.7% |
| Order fill rate % | 97.6% | 97.0% | +0.6 pts | On target | 97.4% |
| Active customers | 40 | 42 | −2 (−4.8%) | **Miss** | 41 |
| Inventory turns | 5.33 | 6.50 | −1.17 (−18.0%) | **Miss** | 6.67 |
| Opex % of revenue | 25.11% | 25.25% | −0.14 pts (better) | On target | 22.57% |

Status accounts for direction: lower is better for DSO and opex %.

**Points to watch**
- **Inventory turns** is the largest miss, at 18% below target. It fell from 6.67 in November, the biggest month-on-month drop on the scorecard.
- **DSO** worsened for a second month. It is 13.8% over target and up 2.6 days from November, so collections need attention.
- **Opex %** meets target, but it is up from 22.57% in November. Revenue was lower in December, which raises the ratio. The target itself is higher in December (25.25%) than in January (20.02%).
- **Revenue** is slightly above budget. It is down about 8% from November.
- **On-time delivery** and **active customers** each slipped slightly from November and are below target.

I computed variances as actual minus target, straight from the CSV. I haven't cross-checked the figures against `pnl_fy2025.csv`, which isn't in the folder.