# Part D plan drug pricing (CMS SPUF), per-unit price with the CY2019 cost-per-fill set apart and the era by contract year

`drug_silver.vw_fact_part_d_plan_drug_pricing_v2` · Drugs and formularies · status live · 1,647,406,675 rows

Quarterly SPUF Plan Finder retail point-of-sale price per unit (not net of rebates), by plan x NDC x days supply (days). 2019-Q1..Q3 published only a cost per fill: unit_cost is NULL there and fill_cost_cy2019 holds it. contract_year is the plan year the release describes (a Q4 release carries the next year); methodology_era is pre_ira through CY2024 and ira_oop_cap from CY2025; 'pre_ira' means before the CY2025 benefit redesign, not untouched by the IRA (CY2023 insulin cap, CY2024 catastrophic cost share removed): filter on contract_year for those. ira_phase splits CY2025 (redesign) from CY2026 (first negotiated prices). unit_cost_legacy and methodology_era_legacy keep the stored values.

**Grain.** One row per (contract_id, plan_id, segment_id, ndc11, days_supply, report_quarter, cms_vintage_sequence); row for row drug_silver.fact_part_d_plan_drug_pricing (1,647,406,675 = 1,647,406,675 rows over 30 of 30 quarters, 2019-Q1..2026-Q2; Athena 2d01f782).

| column | type | meaning |
|---|---|---|
| contract_id | string |  |
| plan_id | string |  |
| segment_id | string |  |
| ndc11 | string |  |
| days_supply | int |  |
| report_quarter | string |  |
| unit_cost | double |  |
| fill_cost_cy2019 | double |  |
| unit_cost_basis | varchar(22) |  |
| unit_cost_legacy | double |  |
| contract_year | int |  |
| methodology_era | varchar(11) |  |
| ira_phase | varchar(26) |  |
| methodology_era_legacy | string |  |
| observed_period | date |  |
| asserted_at | date |  |
| effective_period_start | date |  |
| effective_period_end | date |  |
| cms_vintage_sequence | int |  |
| parse_revision | int |  |
| parser_artifact_hash | string |  |
| source_url | string |  |
| sha256_content_hash | string |  |
| source_id | string |  |
| is_current | boolean |  |
| bronze_object_key | string |  |
| s3_version_id | string |  |
| vintage_tag | string |  |
| drug_source_version_id | string |  |

Query it: `query_substrate` with `SELECT ... FROM drug_silver.vw_fact_part_d_plan_drug_pricing_v2 WHERE ... LIMIT 100`; read `describe_data_source("drug_silver.vw_fact_part_d_plan_drug_pricing_v2")` first.
