{
  "resourceType": "Notebook",
  "id": "pas-metrics",
  "name": "PAS Metrics",
  "description": "The ten Da Vinci PAS IG suggested metrics, charted live over stored FHIR data.",
  "tags": [
    "pas",
    "metrics",
    "sql-on-fhir"
  ],
  "cells": [
    {
      "id": "c00-intro",
      "type": "markdown",
      "nb-title": "PAS Metrics",
      "value": "# PAS Metrics\n\nThe ten metrics suggested by the [Da Vinci PAS Implementation Guide](https://hl7.org/fhir/us/davinci-pas/metrics.html), computed with SQL-on-FHIR directly over the `Claim`, `ClaimResponse` and `CommunicationRequest` resources this Aidbox already stores. No ETL, no reporting database: every chart below reads live data.\n\nEach metric is a SQLQuery `Library` from the `io.healthsamurai.pas-metrics` package. The cells resolve them **by url** (ids are generated on install), run them, and render the result.\n\n**Two things to know when reading the numbers:**\n\n- **Request time is `Claim.created`** - a payload field set by the submitter, not the server receive time. Test bundles with a hardcoded `created` pile every submission onto that one date.\n- **Rows are per service item**, not per claim. A request with two service lines produces two rows: in PAS each item carries its own decision, so one item can be approved while another pends."
    },
    {
      "id": "c01-md",
      "type": "markdown",
      "nb-title": "Metric 1 - submission volume",
      "value": "## Metric 1 - Volume of PAS submissions\n\nHow many prior-auth requests arrive, by day. `submission_count` counts distinct exchanges (claims); `item_count` counts the service lines inside them."
    },
    {
      "id": "c01-chart",
      "type": "sql-query",
      "nb-title": "Metric 1 - submissions per day",
      "value": "{\"url\": \"https://example.org/Library/metric-01-submission-volume\", \"chart\": {\"type\": \"custom\", \"x\": \"day\", \"y\": [\"submission_count\"], \"color\": \"\", \"rawSpec\": \"{\\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v6.json\\\", \\\"width\\\": \\\"container\\\", \\\"height\\\": 280, \\\"config\\\": {\\\"view\\\": {\\\"stroke\\\": null}, \\\"axis\\\": {\\\"grid\\\": false}}, \\\"transform\\\": [{\\\"calculate\\\": \\\"slice(datum.day, 0, 10)\\\", \\\"as\\\": \\\"date\\\"}], \\\"mark\\\": {\\\"type\\\": \\\"bar\\\", \\\"tooltip\\\": true, \\\"color\\\": \\\"#1e71d9\\\"}, \\\"encoding\\\": {\\\"x\\\": {\\\"field\\\": \\\"date\\\", \\\"type\\\": \\\"nominal\\\", \\\"sort\\\": \\\"ascending\\\", \\\"axis\\\": {\\\"title\\\": \\\"day\\\", \\\"labelAngle\\\": -45, \\\"labelOverlap\\\": \\\"greedy\\\"}}, \\\"y\\\": {\\\"field\\\": \\\"submission_count\\\", \\\"type\\\": \\\"quantitative\\\", \\\"aggregate\\\": \\\"sum\\\", \\\"axis\\\": {\\\"title\\\": \\\"submissions\\\"}}}}\"}, \"view\": \"chart\"}"
    },
    {
      "id": "c02-md",
      "type": "markdown",
      "nb-title": "Metric 2 - updates, cancels, queries",
      "value": "## Metric 2 - Updates, cancels and queries\n\nThe non-initial traffic, split by exchange type and stacked per day.\n\nA conformant 2.1.0 cancel is a `profile-claim-update` claim carrying certification type **3**, so it lands in the **cancel** bucket via that signal rather than `Claim.status`. The **query** bucket fills when the deployment records `$inquire` exchanges (`PAS_PERSIST_INQUIRIES=true`) - `$inquire` stores nothing by default."
    },
    {
      "id": "c02-chart",
      "type": "sql-query",
      "nb-title": "Metric 2 - exchange types per day",
      "value": "{\"url\": \"https://example.org/Library/metric-02-updates-cancels-queries\", \"chart\": {\"type\": \"custom\", \"x\": \"day\", \"y\": [\"exchange_count\"], \"color\": \"exchange_type\", \"rawSpec\": \"{\\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v6.json\\\", \\\"width\\\": \\\"container\\\", \\\"height\\\": 280, \\\"config\\\": {\\\"view\\\": {\\\"stroke\\\": null}, \\\"axis\\\": {\\\"grid\\\": false}}, \\\"transform\\\": [{\\\"calculate\\\": \\\"slice(datum.day, 0, 10)\\\", \\\"as\\\": \\\"date\\\"}], \\\"mark\\\": {\\\"type\\\": \\\"bar\\\", \\\"tooltip\\\": true}, \\\"encoding\\\": {\\\"x\\\": {\\\"field\\\": \\\"date\\\", \\\"type\\\": \\\"nominal\\\", \\\"sort\\\": \\\"ascending\\\", \\\"axis\\\": {\\\"title\\\": \\\"day\\\", \\\"labelAngle\\\": -45, \\\"labelOverlap\\\": \\\"greedy\\\"}}, \\\"y\\\": {\\\"field\\\": \\\"exchange_count\\\", \\\"type\\\": \\\"quantitative\\\", \\\"axis\\\": {\\\"title\\\": \\\"exchanges\\\"}, \\\"stack\\\": \\\"zero\\\"}, \\\"color\\\": {\\\"field\\\": \\\"exchange_type\\\", \\\"type\\\": \\\"nominal\\\", \\\"legend\\\": {\\\"title\\\": \\\"exchange type\\\"}, \\\"scale\\\": {\\\"range\\\": [\\\"#8a8f98\\\", \\\"#e07a3f\\\", \\\"#2a9d8f\\\", \\\"#1e71d9\\\"]}}}}\"}, \"view\": \"chart\"}"
    },
    {
      "id": "c03-md",
      "type": "markdown",
      "nb-title": "Metric 3 - non-ordering provider queries",
      "value": "## Metric 3 - Queries by a non-ordering provider\n\nOf all query exchanges, how many came from a provider other than the one who ordered the service.\n\n**Empty unless inquiry recording is on** (`PAS_PERSIST_INQUIRIES=true`). A query counts as non-ordering when the inquiring provider's NPI differs from the NPI of the provider on the original claim."
    },
    {
      "id": "c03-chart",
      "type": "sql-query",
      "nb-title": "Metric 3 - query split",
      "value": "{\"url\": \"https://example.org/Library/metric-03-non-ordering-provider-queries\", \"chart\": {\"type\": \"custom\", \"x\": \"metric\", \"y\": [\"value\"], \"color\": \"\", \"rawSpec\": \"{\\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v6.json\\\", \\\"width\\\": \\\"container\\\", \\\"height\\\": 280, \\\"config\\\": {\\\"view\\\": {\\\"stroke\\\": null}, \\\"axis\\\": {\\\"grid\\\": false}}, \\\"transform\\\": [{\\\"fold\\\": [\\\"queries_total\\\", \\\"queries_by_non_ordering_provider\\\"], \\\"as\\\": [\\\"metric\\\", \\\"value\\\"]}], \\\"mark\\\": {\\\"type\\\": \\\"bar\\\", \\\"tooltip\\\": true, \\\"size\\\": 60}, \\\"encoding\\\": {\\\"x\\\": {\\\"field\\\": \\\"metric\\\", \\\"type\\\": \\\"nominal\\\", \\\"axis\\\": {\\\"labelAngle\\\": 0, \\\"title\\\": null}}, \\\"y\\\": {\\\"field\\\": \\\"value\\\", \\\"type\\\": \\\"quantitative\\\", \\\"axis\\\": {\\\"title\\\": \\\"queries\\\"}}, \\\"color\\\": {\\\"field\\\": \\\"metric\\\", \\\"type\\\": \\\"nominal\\\", \\\"legend\\\": null, \\\"scale\\\": {\\\"range\\\": [\\\"#1e71d9\\\", \\\"#2a9d8f\\\"]}}}}\"}, \"view\": \"chart\"}"
    },
    {
      "id": "c04-md",
      "type": "markdown",
      "nb-title": "Metric 4 - error percentage",
      "value": "## Metric 4 - Error percentage\n\nShare of exchanges that came back carrying a business error (`ClaimResponse.error`), per day.\n\nThis is the FHIR-level proxy: the IG-true transport-layer HTTP status is not part of the stored resources."
    },
    {
      "id": "c04-chart",
      "type": "sql-query",
      "nb-title": "Metric 4 - error % per day",
      "value": "{\"url\": \"https://example.org/Library/metric-04-error-percent\", \"chart\": {\"type\": \"custom\", \"x\": \"day\", \"y\": [\"error_pct\"], \"color\": \"\", \"rawSpec\": \"{\\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v6.json\\\", \\\"width\\\": \\\"container\\\", \\\"height\\\": 280, \\\"config\\\": {\\\"view\\\": {\\\"stroke\\\": null}, \\\"axis\\\": {\\\"grid\\\": false}}, \\\"transform\\\": [{\\\"calculate\\\": \\\"slice(datum.day, 0, 10)\\\", \\\"as\\\": \\\"date\\\"}], \\\"layer\\\": [{\\\"mark\\\": {\\\"type\\\": \\\"line\\\", \\\"color\\\": \\\"#d1495b\\\", \\\"point\\\": {\\\"color\\\": \\\"#d1495b\\\"}, \\\"tooltip\\\": true}}], \\\"encoding\\\": {\\\"x\\\": {\\\"field\\\": \\\"date\\\", \\\"type\\\": \\\"nominal\\\", \\\"sort\\\": \\\"ascending\\\", \\\"axis\\\": {\\\"title\\\": \\\"day\\\", \\\"labelAngle\\\": -45, \\\"labelOverlap\\\": \\\"greedy\\\"}}, \\\"y\\\": {\\\"field\\\": \\\"error_pct\\\", \\\"type\\\": \\\"quantitative\\\", \\\"aggregate\\\": \\\"mean\\\", \\\"axis\\\": {\\\"title\\\": \\\"error % (mean over payer / LOB)\\\"}, \\\"scale\\\": {\\\"domainMin\\\": 0}}}}\"}, \"view\": \"chart\"}"
    },
    {
      "id": "c05-md",
      "type": "markdown",
      "nb-title": "Metric 5 - final response on initial submission",
      "value": "## Metric 5 - Final response on the initial submission\n\nShare of requests that got their final answer on the first response, without a pend round. Two readings: **all items** final on the initial response, and **any item** final.\n\n**Cancelled exchanges are excluded by design.** A cancellation is a requester withdrawal, not a payer decision, so it belongs in neither the numerator nor the denominator. Cancelled volume shows up in metric 8 instead."
    },
    {
      "id": "c05-chart",
      "type": "sql-query",
      "nb-title": "Metric 5 - final-on-initial %",
      "value": "{\"url\": \"https://example.org/Library/metric-05-final-on-initial-percent\", \"chart\": {\"type\": \"custom\", \"x\": \"day\", \"y\": [\"pct_all_items_final_on_initial\", \"pct_any_item_final_on_initial\"], \"color\": \"\", \"rawSpec\": \"{\\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v6.json\\\", \\\"width\\\": \\\"container\\\", \\\"height\\\": 280, \\\"config\\\": {\\\"view\\\": {\\\"stroke\\\": null}, \\\"axis\\\": {\\\"grid\\\": false}}, \\\"transform\\\": [{\\\"calculate\\\": \\\"slice(datum.day, 0, 10)\\\", \\\"as\\\": \\\"date\\\"}, {\\\"fold\\\": [\\\"pct_all_items_final_on_initial\\\", \\\"pct_any_item_final_on_initial\\\"], \\\"as\\\": [\\\"measure\\\", \\\"pct\\\"]}], \\\"mark\\\": {\\\"type\\\": \\\"line\\\", \\\"point\\\": true, \\\"tooltip\\\": true}, \\\"encoding\\\": {\\\"x\\\": {\\\"field\\\": \\\"date\\\", \\\"type\\\": \\\"nominal\\\", \\\"sort\\\": \\\"ascending\\\", \\\"axis\\\": {\\\"title\\\": \\\"day\\\", \\\"labelAngle\\\": -45, \\\"labelOverlap\\\": \\\"greedy\\\"}}, \\\"y\\\": {\\\"field\\\": \\\"pct\\\", \\\"type\\\": \\\"quantitative\\\", \\\"aggregate\\\": \\\"mean\\\", \\\"axis\\\": {\\\"title\\\": \\\"% of exchanges (mean over payer / LOB)\\\"}, \\\"scale\\\": {\\\"domain\\\": [0, 100]}}, \\\"color\\\": {\\\"field\\\": \\\"measure\\\", \\\"type\\\": \\\"nominal\\\", \\\"legend\\\": {\\\"title\\\": null}, \\\"scale\\\": {\\\"range\\\": [\\\"#2e9e5b\\\", \\\"#1e71d9\\\"]}}, \\\"strokeDash\\\": {\\\"field\\\": \\\"measure\\\", \\\"type\\\": \\\"nominal\\\", \\\"legend\\\": null}}}\"}, \"view\": \"chart\"}"
    },
    {
      "id": "c06-md",
      "type": "markdown",
      "nb-title": "Metric 6 - pend volume and resolution",
      "value": "## Metric 6 - Pend volume and resolution\n\nPer payer: how many items sit pended right now versus how many are resolved, and how long resolution takes on average.\n\n`items_resolved` counts items that carry a real decision - the queued `ClaimResponse` a payer emits on receipt is not a resolution."
    },
    {
      "id": "c06-chart",
      "type": "sql-query",
      "nb-title": "Metric 6 - pended vs resolved per payer",
      "value": "{\"url\": \"https://example.org/Library/metric-06-pend-volume-and-resolution\", \"chart\": {\"type\": \"custom\", \"x\": \"payer_id\", \"y\": [\"items_currently_pended\", \"items_resolved\"], \"color\": \"\", \"rawSpec\": \"{\\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v6.json\\\", \\\"width\\\": \\\"container\\\", \\\"height\\\": 280, \\\"config\\\": {\\\"view\\\": {\\\"stroke\\\": null}, \\\"axis\\\": {\\\"grid\\\": false}}, \\\"transform\\\": [{\\\"calculate\\\": \\\"datum.payer_id == null ? 'unattributed' : datum.payer_id\\\", \\\"as\\\": \\\"payer\\\"}, {\\\"fold\\\": [\\\"items_currently_pended\\\", \\\"items_resolved\\\"], \\\"as\\\": [\\\"state\\\", \\\"items\\\"]}], \\\"mark\\\": {\\\"type\\\": \\\"bar\\\", \\\"tooltip\\\": true}, \\\"encoding\\\": {\\\"x\\\": {\\\"field\\\": \\\"payer\\\", \\\"type\\\": \\\"nominal\\\", \\\"axis\\\": {\\\"labelAngle\\\": 0, \\\"title\\\": \\\"payer\\\"}}, \\\"y\\\": {\\\"field\\\": \\\"items\\\", \\\"type\\\": \\\"quantitative\\\", \\\"aggregate\\\": \\\"sum\\\", \\\"axis\\\": {\\\"title\\\": \\\"items\\\"}}, \\\"xOffset\\\": {\\\"field\\\": \\\"state\\\"}, \\\"color\\\": {\\\"field\\\": \\\"state\\\", \\\"type\\\": \\\"nominal\\\", \\\"legend\\\": {\\\"title\\\": null}, \\\"scale\\\": {\\\"range\\\": [\\\"#e3b23c\\\", \\\"#2e9e5b\\\"]}}}}\"}, \"view\": \"chart\"}"
    },
    {
      "id": "c07-md",
      "type": "markdown",
      "nb-title": "Metric 7 - time to final result",
      "value": "## Metric 7 - Time to final result\n\nHow long each decided service item waited, in hours. The metric returns the **100 slowest items per payer**, so a busy payer never crowds another one out of the list.\n\nPended items are excluded - they have no final result yet (they are metric 10's subject). The chart bins the durations into a distribution; the tooltip shows how many items fall in each bucket."
    },
    {
      "id": "c07-chart",
      "type": "sql-query",
      "nb-title": "Metric 7 - time-to-final distribution",
      "value": "{\"url\": \"https://example.org/Library/metric-07-time-to-final-result\", \"chart\": {\"type\": \"custom\", \"x\": \"time_to_final_hours\", \"y\": [\"count\"], \"color\": \"\", \"rawSpec\": \"{\\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v6.json\\\", \\\"width\\\": \\\"container\\\", \\\"height\\\": 280, \\\"config\\\": {\\\"view\\\": {\\\"stroke\\\": null}, \\\"axis\\\": {\\\"grid\\\": false}}, \\\"mark\\\": {\\\"type\\\": \\\"bar\\\", \\\"tooltip\\\": true, \\\"color\\\": \\\"#2a9d8f\\\"}, \\\"encoding\\\": {\\\"x\\\": {\\\"field\\\": \\\"time_to_final_hours\\\", \\\"type\\\": \\\"quantitative\\\", \\\"bin\\\": {\\\"maxbins\\\": 30}, \\\"axis\\\": {\\\"title\\\": \\\"hours to final decision\\\"}}, \\\"y\\\": {\\\"aggregate\\\": \\\"count\\\", \\\"type\\\": \\\"quantitative\\\", \\\"axis\\\": {\\\"title\\\": \\\"items\\\"}}}}\"}, \"view\": \"chart\"}"
    },
    {
      "id": "c08-md",
      "type": "markdown",
      "nb-title": "Metric 8 - segmentation",
      "value": "## Metric 8 - Segmentation by result\n\nItem outcomes per day, stacked: approved, modified, denied, pended, cancelled. This is the one chart that shows every bucket at once, including the cancelled volume metric 5 deliberately leaves out."
    },
    {
      "id": "c08-chart",
      "type": "sql-query",
      "nb-title": "Metric 8 - item results per day",
      "value": "{\"url\": \"https://example.org/Library/metric-08-segmentation\", \"chart\": {\"type\": \"custom\", \"x\": \"day\", \"y\": [\"approved_items\", \"modified_items\", \"denied_items\", \"pended_items\", \"cancelled_items\"], \"color\": \"result\", \"rawSpec\": \"{\\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v6.json\\\", \\\"width\\\": \\\"container\\\", \\\"height\\\": 280, \\\"config\\\": {\\\"view\\\": {\\\"stroke\\\": null}, \\\"axis\\\": {\\\"grid\\\": false}}, \\\"transform\\\": [{\\\"calculate\\\": \\\"slice(datum.day, 0, 10)\\\", \\\"as\\\": \\\"date\\\"}, {\\\"fold\\\": [\\\"approved_items\\\", \\\"modified_items\\\", \\\"denied_items\\\", \\\"pended_items\\\", \\\"cancelled_items\\\"], \\\"as\\\": [\\\"result\\\", \\\"items\\\"]}, {\\\"calculate\\\": \\\"replace(datum.result, '_items', '')\\\", \\\"as\\\": \\\"result\\\"}], \\\"mark\\\": {\\\"type\\\": \\\"bar\\\", \\\"tooltip\\\": true}, \\\"encoding\\\": {\\\"x\\\": {\\\"field\\\": \\\"date\\\", \\\"type\\\": \\\"nominal\\\", \\\"sort\\\": \\\"ascending\\\", \\\"axis\\\": {\\\"title\\\": \\\"day\\\", \\\"labelAngle\\\": -45, \\\"labelOverlap\\\": \\\"greedy\\\"}}, \\\"y\\\": {\\\"field\\\": \\\"items\\\", \\\"type\\\": \\\"quantitative\\\", \\\"axis\\\": {\\\"title\\\": \\\"items\\\"}, \\\"stack\\\": \\\"zero\\\"}, \\\"color\\\": {\\\"field\\\": \\\"result\\\", \\\"type\\\": \\\"nominal\\\", \\\"legend\\\": {\\\"title\\\": \\\"result\\\"}, \\\"scale\\\": {\\\"domain\\\": [\\\"approved\\\", \\\"modified\\\", \\\"denied\\\", \\\"pended\\\", \\\"cancelled\\\"], \\\"range\\\": [\\\"#2e9e5b\\\", \\\"#e07a3f\\\", \\\"#d1495b\\\", \\\"#e3b23c\\\", \\\"#8a8f98\\\"]}}}}\"}, \"view\": \"chart\"}"
    },
    {
      "id": "c09-md",
      "type": "markdown",
      "nb-title": "Metric 9 - outstanding requests",
      "value": "## Metric 9 - Outstanding requests\n\nRequests still waiting for a final decision, per payer - the current queue depth."
    },
    {
      "id": "c09-chart",
      "type": "sql-query",
      "nb-title": "Metric 9 - outstanding per payer",
      "value": "{\"url\": \"https://example.org/Library/metric-09-outstanding-requests\", \"chart\": {\"type\": \"custom\", \"x\": \"payer_id\", \"y\": [\"outstanding_requests\"], \"color\": \"\", \"rawSpec\": \"{\\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v6.json\\\", \\\"width\\\": \\\"container\\\", \\\"height\\\": 280, \\\"config\\\": {\\\"view\\\": {\\\"stroke\\\": null}, \\\"axis\\\": {\\\"grid\\\": false}}, \\\"transform\\\": [{\\\"calculate\\\": \\\"datum.payer_id == null ? 'unattributed' : datum.payer_id\\\", \\\"as\\\": \\\"payer\\\"}], \\\"mark\\\": {\\\"type\\\": \\\"bar\\\", \\\"tooltip\\\": true, \\\"color\\\": \\\"#e3b23c\\\", \\\"size\\\": 60}, \\\"encoding\\\": {\\\"x\\\": {\\\"field\\\": \\\"payer\\\", \\\"type\\\": \\\"nominal\\\", \\\"sort\\\": \\\"-y\\\", \\\"axis\\\": {\\\"labelAngle\\\": 0, \\\"title\\\": \\\"payer\\\"}}, \\\"y\\\": {\\\"field\\\": \\\"outstanding_requests\\\", \\\"type\\\": \\\"quantitative\\\", \\\"aggregate\\\": \\\"sum\\\", \\\"axis\\\": {\\\"title\\\": \\\"outstanding requests\\\"}}}}\"}, \"view\": \"chart\"}"
    },
    {
      "id": "c10-md",
      "type": "markdown",
      "nb-title": "Metric 10 - pend aging",
      "value": "## Metric 10 - Pend aging\n\nHow long the currently pended items have been waiting, in days. Where metric 9 gives the queue depth, this shows whether the queue is fresh or stale - the long tail is what turns into escalations."
    },
    {
      "id": "c10-chart",
      "type": "sql-query",
      "nb-title": "Metric 10 - age of pended items",
      "value": "{\"url\": \"https://example.org/Library/metric-10-pend-aging\", \"chart\": {\"type\": \"custom\", \"x\": \"age_days\", \"y\": [\"count\"], \"color\": \"\", \"rawSpec\": \"{\\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v6.json\\\", \\\"width\\\": \\\"container\\\", \\\"height\\\": 280, \\\"config\\\": {\\\"view\\\": {\\\"stroke\\\": null}, \\\"axis\\\": {\\\"grid\\\": false}}, \\\"mark\\\": {\\\"type\\\": \\\"bar\\\", \\\"tooltip\\\": true, \\\"color\\\": \\\"#e07a3f\\\"}, \\\"encoding\\\": {\\\"x\\\": {\\\"field\\\": \\\"age_days\\\", \\\"type\\\": \\\"quantitative\\\", \\\"bin\\\": {\\\"maxbins\\\": 30}, \\\"axis\\\": {\\\"title\\\": \\\"age, days\\\"}}, \\\"y\\\": {\\\"aggregate\\\": \\\"count\\\", \\\"type\\\": \\\"quantitative\\\", \\\"axis\\\": {\\\"title\\\": \\\"pended items\\\"}}}}\"}, \"view\": \"chart\"}"
    },
    {
      "id": "c11-outro",
      "type": "markdown",
      "nb-title": "Where the numbers come from",
      "value": "## Where the numbers come from\n\nEvery chart above runs one SQLQuery `Library` from `io.healthsamurai.pas-metrics`. The layering underneath:\n\n- **10 `ViewDefinition`s** flatten `Claim`, `ClaimResponse` (+ items, errors), `Coverage`, `Practitioner`, `PractitionerRole`, `Organization` and `CommunicationRequest`;\n- **5 wrapper `Library`s** assemble the IG's `PASMetricData` model from those views;\n- **10 metric `Library`s** compute the metrics on top.\n\nAidbox compiles the whole dependency chain into a single statement, so nothing is materialized - the views read the current rows every time. To use these outside the notebook, resolve a metric `Library` by url and `POST /fhir/Library/$sqlquery-run`, or wrap its compiled SQL in a Postgres view for a BI tool."
    }
  ]
}
