Four of the eight KPIs missed target in December 2025. Two of them, days sales outstanding (DSO) and on-time delivery, have now missed for three months running. The figures come from the scorecard script, and its checks that revenue, gross margin percent and opex percent match the P&L all passed.

| 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. Percent variances are in points. Months off counts consecutive months off target, ending in December.

**Note:**
- **Days sales outstanding:** 51.2 days against a target of 45.0 days. It has been off target for three months. To find out why, we need to know which customers' receivables are past due and what is being done to collect them.
- **On-time delivery:** 93.3% against a target of 95.0%, (1.7) points short. It has been off target for three months. To find out why, we need to know which carriers, sites or product lines account for the late orders.
- **Active customers** has been off target for two months. **Inventory turns** missed only in December, so it isn't a trend yet.

The data doesn't show what caused any of these misses.

I saved the scorecard figures to `output/scorecard.json` and the note to `output/scorecard-note.md`.