I've built the December 2025 KPI scorecard, and it ties to the P&L. **4 of 8 KPIs were on target, and 2 have been off target for three months or more.**

**It ties to the P&L:** revenue ($827K), gross margin percent (26.1%) and opex percent of revenue (25.1%) all match `pnl_fy2025.csv`.

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

Variances are positive when the KPI is better than target; percent KPIs show the variance in percentage points.

**Off target three months or more:**
- **Days sales outstanding:** 51.2 against a target of 45.0. Owner question: which customers' overdue balances are holding collections back, and when will they be paid?
- **On-time delivery percent:** 93.3% against a target of 95.0%. Owner question: which carriers, sites or product lines account for the late orders, and when will it recover?

Active customers (2 months off) and inventory turns (1 month off) also missed target. They aren't on the exceptions list yet, and one month off is not a trend.

The data notes give each input's row count and file hash: 96 KPI rows, 120 P&L rows.

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