# Spec bundle — AST-0286 v1

> Provenance: asset `AST-0286` · spec `SPEC-AST-0286-v1` · version 1 · status `published` · hash `d1c4ba7fe9b1b58c663ea5c10ff1527d81c93faa390366fb07d9622f9a78fc90` · source fixture

## Ledger summary

_No ledger versions recorded._

## KPI definitions

- **KPI-016** — Inventory Coverage (`canonical`) · weeks
  - Formula: `inventory_weeks_syn`
- **KPI-020** — On-Time In-Full (`canonical`) · %
  - Formula: `otif_pct_syn`

## DashboardSpec (JSON)

```json
{
  "spec_id": "SPEC-AST-0286-v1",
  "asset_id": "AST-0286",
  "version": 1,
  "parent_version": null,
  "status": "published",
  "name": "Supply Coverage & OTIF",
  "purpose": "Monthly inventory coverage and on-time in-full for the supply wall — values from pack monthly facts.",
  "domain": "Supply Chain",
  "surface": "wall",
  "owners": {
    "business_owner_id": "OWN-001",
    "technical_owner_id": "OWN-001"
  },
  "refresh_policy": {
    "mode": "daily",
    "source_model_ids": [
      "SM-030"
    ]
  },
  "pages": [
    {
      "page_id": "page-main",
      "title": "Supply risk",
      "rotation_s": 20,
      "visuals": [
        {
          "visual_id": "V-0286-inv",
          "type": "kpi_tile",
          "title": "Inventory coverage",
          "kpi_id": "KPI-016",
          "dims": [],
          "filters": {},
          "grain": "monthly",
          "window": "last_3m",
          "unit": "wks",
          "threshold": {
            "good": 8,
            "warn": 5,
            "direction": "up_good"
          }
        },
        {
          "visual_id": "V-0286-otif",
          "type": "kpi_tile",
          "title": "OTIF",
          "kpi_id": "KPI-020",
          "dims": [],
          "filters": {},
          "grain": "monthly",
          "window": "last_3m",
          "unit": "%",
          "threshold": {
            "good": 95,
            "warn": 90,
            "direction": "up_good"
          }
        },
        {
          "visual_id": "V-0286-otif-market",
          "type": "bar",
          "title": "OTIF by market",
          "kpi_id": "KPI-020",
          "dims": [
            "market"
          ],
          "filters": {},
          "grain": "monthly",
          "window": "last_3m",
          "unit": "%",
          "threshold": {
            "good": 95,
            "warn": 90,
            "direction": "up_good"
          }
        },
        {
          "visual_id": "V-0286-inv-market",
          "type": "bar",
          "title": "Inventory coverage by market",
          "kpi_id": "KPI-016",
          "dims": [
            "market"
          ],
          "filters": {},
          "grain": "monthly",
          "window": "last_3m",
          "unit": "wks",
          "threshold": {
            "good": 8,
            "warn": 5,
            "direction": "up_good"
          }
        }
      ]
    }
  ],
  "review_cadence_days": 90,
  "lineage": {
    "upstream_model_ids": [
      "SM-030"
    ]
  },
  "exceptions": [],
  "rationale": [
    {
      "decision": "Pin SCR-03 to AST-0286 (canonical KPI-016 + KPI-020)",
      "because": "Certified active Supply Chain asset with active owner; Asset_KPI_Map carries Inventory Coverage and OTIF mapped in lib/query/mapping.ts. AST-0052 only has variants KPI-018/KPI-013.",
      "evidence_refs": [
        "AST-0286",
        "KPI-016",
        "KPI-020",
        "SCR-03"
      ]
    }
  ]
}
```
