# Spec bundle — AST-0001 v2

> Provenance: asset `AST-0001` · spec `SPEC-AST-0001-v2` · version 2 · status `published` · hash `8d859dcde450f1151d028d38d38c865b9ae52990baab1192d7c1974ea167b792` · source db

## Ledger summary

| Version | Status | Path | Author | At | Hash |
| --- | --- | --- | --- | --- | --- |
| 1 | superseded | baseline | requester | 2024-04-16T09:00:00.000Z | `d8315a4d3160…` |
| 2 | published | patch | platform_owner | 2026-08-03T11:30:00.000Z | `8d859dcde450…` |

## KPI definitions

- **KPI-004** — Net Sales Growth (`canonical`) · %
  - Formula: `(sales_t - sales_t-1) / sales_t-1`

## DashboardSpec (JSON)

```json
{
  "spec_id": "SPEC-AST-0001-v2",
  "asset_id": "AST-0001",
  "version": 2,
  "parent_version": 1,
  "status": "published",
  "name": "Xarelto Budget New",
  "purpose": "Canada Xarelto budget check — growth plus a market breakdown. Still refuses the conflicting forecast KPI.",
  "domain": "Supply Chain",
  "surface": "desktop",
  "owners": {
    "business_owner_id": "OWN-019",
    "technical_owner_id": "OWN-019"
  },
  "refresh_policy": {
    "mode": "daily",
    "source_model_ids": [
      "SM-057"
    ]
  },
  "pages": [
    {
      "page_id": "page-budget",
      "title": "Xarelto budget",
      "rotation_s": 20,
      "visuals": [
        {
          "visual_id": "V-0001-growth",
          "type": "kpi_tile",
          "title": "Net Sales Growth",
          "kpi_id": "KPI-004",
          "dims": [],
          "filters": {
            "product": "Xarelto",
            "market": "CA"
          },
          "grain": "month",
          "window": "ytd",
          "unit": "%",
          "threshold": {
            "good": 5,
            "warn": 0,
            "direction": "up_good"
          }
        },
        {
          "visual_id": "V-0001-market",
          "type": "bar",
          "title": "Growth by market",
          "kpi_id": "KPI-004",
          "dims": [
            "market"
          ],
          "filters": {
            "product": "Xarelto"
          },
          "grain": "month",
          "window": "ytd",
          "unit": "%",
          "threshold": {
            "good": 5,
            "warn": 0,
            "direction": "up_good"
          }
        }
      ]
    }
  ],
  "review_cadence_days": 90,
  "lineage": {
    "upstream_model_ids": [
      "SM-057"
    ]
  },
  "exceptions": [
    "KPI-009 left unbound: definition_conflict on Demand Forecast Accuracy Legacy."
  ],
  "rationale": [
    {
      "decision": "v2 adds a market breakdown on the same canonical KPI",
      "because": "The Canada budget ask needed a market split. KPI-004 already covered it, so no new metric was introduced.",
      "evidence_refs": [
        "AST-0001",
        "KPI-004",
        "SPEC-AST-0001-v1"
      ]
    }
  ]
}
```
