The December 2025 scorecard is ready, and it ties to the P&L. Four of the 8 KPIs were on target. Two have been off target for three months or more: days sales outstanding and on-time delivery.

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

- **P&L tie:** I checked three KPIs against `pnl_fy2025.csv` for December, and all three match: revenue at $827K, gross margin at 26.1% and opex at 25.1% of revenue.
- **The note:** it gives the headline and the table above. It lists the two three-month misses, each with a question for whoever owns that KPI, and names the two input files with their row counts.
- **Rounding:** each figure is rounded separately, so the opex variance shown isn't exactly the gap between the actual and target shown. The note says this.
- **Unit wording:** in the note I added the word "days" after the DSO figures and wrote "DSO" for days sales outstanding. The figures themselves are unchanged.

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