{
  "provenance": {
    "asset_id": "AST-Q003",
    "spec_id": "SPEC-AST-Q003-v1",
    "version": 1,
    "status": "published",
    "hash": "ce2e4cabc6933913b0dd887b845c744e82621cd855c7c646909bcb9132cf3522",
    "source": "fixture"
  },
  "spec": {
    "spec_id": "SPEC-AST-Q003-v1",
    "asset_id": "AST-Q003",
    "version": 1,
    "parent_version": null,
    "status": "published",
    "name": "Quality: Open Deviations",
    "purpose": "Open deviation count for the quality wall — grain is open cases (not CAPA aging).",
    "domain": "Quality",
    "surface": "wall",
    "owners": {
      "business_owner_id": "OWN-G02",
      "technical_owner_id": "OWN-G05"
    },
    "refresh_policy": {
      "mode": "hourly",
      "source_model_ids": [
        "SM-Q01"
      ]
    },
    "pages": [
      {
        "page_id": "page-main",
        "title": "Open deviations",
        "rotation_s": 20,
        "visuals": [
          {
            "visual_id": "V-Q003-open",
            "type": "kpi_tile",
            "title": "Open deviations",
            "kpi_id": "KPI-Q01",
            "dims": [],
            "filters": {},
            "grain": "open cases",
            "window": "all",
            "unit": "",
            "threshold": {
              "good": 2,
              "warn": 5,
              "direction": "down_good"
            }
          },
          {
            "visual_id": "V-Q003-by-plant",
            "type": "bar",
            "title": "Open deviations by plant",
            "kpi_id": "KPI-Q01",
            "dims": [
              "plant"
            ],
            "filters": {},
            "grain": "open cases",
            "window": "all",
            "unit": "",
            "threshold": {
              "good": 2,
              "warn": 5,
              "direction": "down_good"
            }
          },
          {
            "visual_id": "V-Q003-by-severity",
            "type": "status_grid",
            "title": "Open deviations by severity",
            "kpi_id": "KPI-Q01",
            "dims": [
              "severity"
            ],
            "filters": {},
            "grain": "open cases",
            "window": "all",
            "unit": "",
            "threshold": {
              "good": 2,
              "warn": 5,
              "direction": "down_good"
            }
          }
        ]
      }
    ],
    "review_cadence_days": 90,
    "lineage": {
      "upstream_model_ids": [
        "SM-Q01"
      ]
    },
    "exceptions": [],
    "rationale": [
      {
        "decision": "Pin SCR-02 to AST-Q003 / KPI-Q01 only",
        "because": "No asset binds KPI-Q02 CAPA Aging; GS-QUA-01 must stay BUILD_NEW. Fixture visuals use only this asset's mapped KPI.",
        "evidence_refs": [
          "AST-Q003",
          "KPI-Q01",
          "SCR-02"
        ]
      }
    ]
  },
  "ledger_summary": [],
  "kpi_definitions": [
    {
      "kpi_id": "KPI-Q01",
      "name": "Open Deviations (Quality)",
      "definition_status": "canonical",
      "formula": "COUNT(open quality deviations)",
      "unit": "count"
    }
  ]
}