{
  "decision_record": "D-009",
  "limitations": [
    "All three rungs are populated. The restricted-export (CONCERN) list is a current-listing snapshot: a medicine that has been de-listed is not yet detected as removed — delisting inference is deferred to S7 — so a stale CONCERN can persist until then. See /api/v1/designations.json for the designations as ingested.",
    "A severe shortage on which the state has not yet acted scores WATCH. The leading indicators are in signals, which are explicitly Pharmasync inference.",
    "Most shortages have an MSN, so most sit at WATCH. Differentiation lives in the signals, where the judgement is labelled.",
    "Coverage is England-first for the supply-event sources; the restricted-export designation is UK-wide by law. See /api/v1/coverage for what is ingested per source per nation.",
    "Per-medicine tier assignments are published at /api/v1/tiers.json — the highest rung in force for each dm+d code, each carrying the source_url and date of the act that justifies it (S7). It computes all three rungs: WATCH (MSN) and CRITICAL (SSP) join to dm+d codes directly, and CONCERN (restricted-export) — which is name-level — is joined via the dm+d VTM (molecule): designation name to VTM to the VMP codes under it. Two gaps follow, both under-statements (the safe direction): a medicine whose VMP carries no dm+d VTM cannot receive CONCERN this way, and a designation whose name does not match a VTM exactly (a brand name, or an ester named differently from its moiety) is not joined — those are surfaced in the build, never silently dropped. See /api/v1/designations.json for every designation as ingested. An SSP (CRITICAL) always outranks CONCERN, so no medicine is mis-ranked by a gap.",
    "A WATCH or CONCERN row in /api/v1/tiers.json carries no in_force_until, because resolution is not published: CPE publishes an MSN's initial notification only, never its resolution, and restricted-export delisting is not yet detected. A CRITICAL carries in_force_until — an SSP's published expiry — and drops off the ladder the day it passes.",
    "The slippage signal (/api/v1/slippage.json) tracks SSP expiry revisions only. The design also imagined MSN resupply-date slippage, but the public MSN notification states at most a fuzzy initial date and its revisions are published only on the login-gated Medicines Supply Tool, which Pharmasync does not scrape (§2). A medicine at WATCH (MSN) therefore carries no slippage signal; only SSP-driven shortages do."
  ],
  "model": "observed_state_actions",
  "rules": [
    "The tier is the HIGHEST rung in force. Rungs are not sequential — an SSP without a prior MSN is still CRITICAL.",
    "Every tier assignment carries the source_url and date of the justifying act.",
    "Signals never move a tier. They are published alongside it and labelled as Pharmasync analysis.",
    "A rung whose source is not ingested is reported as not populated, never silently omitted.",
    "Tiers record administrative acts. They are not an assessment of clinical or patient impact."
  ],
  "signals": [
    {
      "affects_tier": false,
      "basis": "computed",
      "description": "SSP expiry revisions — a Serious Shortage Protocol re-dated to a later expiry, the earliest honest sign a shortage is lasting longer than first stated. One row per revision (prior_date → revised_date, signed slip_days), published at /api/v1/slippage.json. Computed from the append-only ledger, which keeps every expiry as its own immutable observation.",
      "id": "slippage"
    },
    {
      "affects_tier": false,
      "basis": "computed",
      "description": "Price-concession presence and month-on-month movement. Concession churn often runs ahead of formal notices.",
      "id": "market_stress"
    },
    {
      "affects_tier": false,
      "basis": "computed",
      "description": "Historical resolution times for comparable shortages. Computed from accumulated history, never predicted.",
      "id": "duration_percentiles"
    },
    {
      "affects_tier": false,
      "basis": "observed",
      "description": "Presence on the WHO Model List of Essential Medicines.",
      "id": "criticality_who_eml"
    },
    {
      "affects_tier": false,
      "basis": "observed",
      "description": "Presence on the EU Union list of critical medicines. Published independently of WHO EML — where the two disagree, the disagreement is displayed rather than resolved.",
      "id": "criticality_eu_critical"
    },
    {
      "affects_tier": false,
      "basis": "observed",
      "description": "Count of other regulators reporting a shortage of the same MOLECULE. Reported at molecule level via ATC/INN — never implying product equivalence across jurisdictions.",
      "id": "cross_jurisdiction_stress"
    }
  ],
  "summary": "Tiers are the highest rung of escalating government action currently in force for a medicine. They are not computed from a Pharmasync scoring function, and every assignment carries the source_url and date of the act that justifies it.",
  "tiers": [
    {
      "evidences": "Supply problem officially acknowledged",
      "populated": true,
      "publisher": "DHSC",
      "rank": 1,
      "tier": "WATCH",
      "triggering_act": "Medicine Supply Notification in force"
    },
    {
      "evidences": "Supply tight enough that export is legally prohibited",
      "populated": true,
      "publisher": "DHSC / MHRA",
      "rank": 2,
      "tier": "CONCERN",
      "triggering_act": "Listed on the restricted medicines (parallel-export / hoarding) list"
    },
    {
      "evidences": "Shortage serious enough to alter dispensing law",
      "populated": true,
      "publisher": "NHSBSA",
      "rank": 3,
      "tier": "CRITICAL",
      "triggering_act": "Serious Shortage Protocol in force"
    }
  ],
  "version": "1.0.0"
}
