Medicare Advantage, Part D, Medicaid

MA pbp mrx

medicare_silver.pbp_mrx·partial·silver·annual·Part D Plans & Formularies
Rows
N/A
Columns
380
History
2010 (report_year 2010; NOTE: 2020 is missing due to the CY2020 CMS filename quirk) to 2026
Card
yesgrain, traps, filters
Typed tools
1

What it is

  1. 1The plan-level Part D (Medicare prescription-drug) benefit record from CMS's Plan Benefit Package (PBP) filings — Section MRx — describing each Medicare Advantage / PDP plan's drug coverage design: whether it offers Part D, basic vs enhanced-alternative benefit type, deductible, formulary/tier model, coverage-gap and IRA-era cost-share structures, utilization-management flags, and rewards/incentive programs.
  2. 2It is the canonical 'what is this plan's drug benefit shape' table for Medicare-Advantage cost analysis, and the parent of the per-tier pbp_mrx_tier table.

Grain

KeyGrain
bid_idreport_yearquartercms_vintage_sequence
  1. 1One row per Medicare plan-segment (a CMS 'bid': contract_id + plan_id + segment_id, captured as bid_id) per quarterly CMS PBP release (report_year + quarter + cms_vintage_sequence).
  2. 2The minimal verified unique key is (bid_id, report_year, quarter, cms_vintage_sequence) — equivalently (contract_id, plan_id, segment_id, report_year, quarter, cms_vintage_sequence) — which yields exactly 208,537 distinct combinations against 208,537 rows.
  3. 3Within a single release, bid_id alone is unique (e.g.
  4. 48,326 plans in the 2026 Q1 vintage-1 snapshot).
  5. 5This is the plan-level Section MRx (Part D Rx benefit) record, NOT one row per formulary tier.

How to read it

  1. 1Pick ONE snapshot, then read plan-level Part D design.
  2. 2Example: SELECT bid_id, mrx_drug_ben_yn, mrx_benefit_type, mrx_alt_ded_amount FROM medicare_silver.pbp_mrx WHERE report_year=2026 AND quarter=1 AND cms_vintage_sequence=1 AND mrx_drug_ben_yn='1' — returns, for every 2026 Medicare plan that offers Part D, its benefit type (4=Enhanced Alternative) and Part D deductible (e.g.
  3. 3615.0 = the CY2026 standard).
  4. 4To analyze actual generic/brand copays per formulary tier and pharmacy channel, join bid_id+snapshot to the sibling table medicare_silver.pbp_mrx_tier (this table does NOT carry usable tier copays).
  5. 5To trend a plan over years, group by report_year keeping one release per year (e.g.
  6. 6MIN(quarter)/MIN(cms_vintage_sequence)).

Traps

  1. 1NOT a tier/copay table. This is the PLAN-LEVEL Part D record (~8K plans/year). The per-tier × per-pharmacy generic/brand copay & coinsurance amounts live in the SIBLING table pbp_mrx_tier (~27-33K rows = one per plan×tier). The mrx_gen_* copay matrix here is ~empty (mrx_gen_in_1m: 632 non-null of 208,537). NEVER read 'the plan's drug copay' from this table, and never sum tier copays here.
  2. 2Grain needs FOUR columns, not the obvious ones. Minimal verified key = (bid_id, report_year, quarter, cms_vintage_sequence) [= contract_id+plan_id+segment_id+report_year+quarter+cms_vintage_sequence], 208,537 distinct = 208,537 rows. Dropping cms_vintage_sequence creates 16,307 dup rows (2021 Q1 & 2022 Q1 were each loaded at two vintages from two CMS ZIPs); dropping quarter creates 8,336 dups. bid_id is unique only WITHIN one snapshot (8,326 in 2025 Q1).
  3. 3The profiler's reported grain is WRONG/superset — it leaned on mrx_grp_id, mrx_grp_type_id, mrx_v_bid_attestation, etc. mrx_grp_id and mrx_grp_type_id are 100% NULL across all 208,537 rows (this table is never exploded to benefit-group rows), so those columns spuriously appeared to 'add uniqueness.' Ignore them as keys.
  4. 4No is_current column and NO dedup applied — every quarterly CMS release is STACKED. There are 30 snapshots (report_year × quarter × cms_vintage_sequence). To get 'the current plan benefits' you MUST filter, e.g. report_year=2026 AND quarter=1 AND cms_vintage_sequence=1 (or pick MAX vintage per year). Querying without a snapshot filter double/triple-counts plans and mixes 16 years.
  5. 5Massive year-dependent column sparsity driven by documented PBP layout churn. Of 356 columns most are NULL for any given year: CY2022-Q2 moved 42 cols OUT of pbp_mrx into siblings (pbp_vbid, pbp_mrx_dmodel, pbp_mrx_ssm); CY2024 'New PBP' redesign reshaped Section D; CY2026 discontinued VBID and removed the coverage-gap (IRA). Examples observed: mrx_formulary_yn/mrx_basic_plan_yn/mrx_alt_drug_type 100% NULL in 2026; mrx_quantity_limits only 2010-2021; mrx_form_tier_model_5 only 2013-2016. Always check non-null coverage for your target year before trusting a column.
  6. 6Report year 2020 is entirely MISSING (data jumps 2019→2021). This is the documented CY2020 CMS filename quirk (the file shipped as 'pbp_mrx 2.txt' with the canonical 'pbp_mrx.txt' absent), so 2020 was not ingested. Don't treat the gap as data loss for other years.
  7. 7mrx_drug_ben_yn='2' (~12% of plans) means the plan offers NO Part D benefit — those rows are shells with all cost/deductible fields NULL (verified: 0 such rows have mrx_alt_ded_amount set). Filter to mrx_drug_ben_yn='1' before analyzing drug cost-share.
  8. 8Identifier columns are zero-padded strings, not numbers: plan_id='001', segment_id='0', pbp_a_plan_type='01', orgtype='08'. Join/compare as strings. version, report_year, quarter, mrx_*_amt are doubles. Missing values are true SQL NULL (no '.' or '' sentinel leakage — verified).

Columns (380)

ColumnTypeMeaning
contract_idstringCMS Medicare Advantage/Part D contract ID (e.g. H0016, H0022). String, 1,806 distinct. First component of bid_id. A contract holds many plans.
plan_idstring3-digit plan number within the contract (e.g. 001, 003, 007). String, 656 distinct values (reused across contracts). Second component of bid_id.
segment_idstringPlan segment number, string '0'-'25'. '0' for unsegmented plans (the vast majority); >0 identifies geographic/benefit segments of a segmented plan. Third component of bid_id. Part of the grain.
versiondoubleCMS bid submission/refile version for that plan-year (double 1..12+). Plan metadata, NOT a snapshot/dedup key; most plans are v1-4, higher versions progressively rarer. Do not use to dedup.
report_yeardoubleBenefit/contract year the PBP describes (double, 2010-2026; 2020 is ABSENT). Part of the snapshot grain. Equals YEAR(effective_period_start).
quarterdoubleCMS release quarter for that plan-year (double 1-4). PBP is re-released quarterly; quarter labels which release. Part of the grain. NOTE: 2010-2017 only have Q1; later years have multiple quarters.
bid_idstringConcatenated plan identity contract_id_plan_id_segment_id (e.g. 'H0028_007_0'). The natural per-snapshot primary key; exactly = (contract_id||plan_id||segment_id). Unique within one CMS release.
max_rai_ann_partd_rew_amt_1rxdouble
max_rai_ann_partd_rew_amt_2rxdouble
max_rai_ann_partd_rew_amt_3rxdouble
max_rai_frq_rew_incent_1rxstring
max_rai_frq_rew_incent_2rxstring
max_rai_frq_rew_incent_3rxstring
max_rai_partd_rew_inc_amt_1rxdouble
max_rai_partd_rew_inc_amt_2rxdouble
max_rai_partd_rew_inc_amt_3rxdouble
mrx_ae_copay_lesser_ynstring
mrx_ae_cstshr_applystring
mrx_ae_cstshr_grpsdouble
mrx_ae_oon_cstshr_structstring
mrx_ae_ooptcs_applystring
mrx_ae_ot_grpsdouble
mrx_alt_copay_lesser_ynstring
mrx_alt_cov_lmt_amtdouble
mrx_alt_cov_lmt_ynstring
mrx_alt_cstshr_post_ooptstring
mrx_alt_cstshr_post_oopt_mmpstring
mrx_alt_ded_amountdoublePart D deductible dollar amount for the plan's (enhanced-alternative) design (double). Real & current: CY2026 standard = 615.0. Populated for ~half of drug-offering plans (others use $0 or tier-differential deductibles). One of the few cost fields reliably populated in this parent table.
mrx_alt_ded_chargestring
mrx_alt_ded_tier_cstshr_ynstring
mrx_alt_ded_type_ynstring
mrx_alt_drug_typestring
mrx_alt_excl_drugs_maxplan_ynstring
mrx_alt_excl_drugs_ynstring
mrx_alt_excl_max_plan_amtdouble
mrx_alt_fulfill_descstring
mrx_alt_gap_covg_brandstring
mrx_alt_gap_covg_genstring
mrx_alt_gap_covg_tierstring
mrx_alt_gap_covg_ynstring
mrx_alt_gap_drug_typestring
mrx_alt_gen_coins_pctdouble
mrx_alt_gen_copay_amtdouble
mrx_alt_gen_cstshr_structstring
mrx_alt_ira_covg_tierstring
mrx_alt_lim_amtdouble
mrx_alt_max_enroll_mmp_amtdouble
mrx_alt_max_enroll_mmp_ynstring
mrx_alt_no_ded_tierstring
mrx_alt_oon_cstshr_structstring
mrx_alt_post_icl_ynstring
mrx_alt_pre_icl_cost_sharestring
mrx_alt_pre_icl_cost_share_mmpstring
mrx_alt_pre_icl_exclud_only_ynstring
mrx_alt_pre_icl_lis_mmp_tiersstring
mrx_alt_pre_icl_lis_mmp_ynstring
mrx_alt_red_cost_sharingstring
mrx_alt_red_cost_sharing_itemsstring
mrx_auth_ynbastring
mrx_avg_exp_cost_share_atteststring
mrx_b_auth_ynstring
mrx_b_coins_amt_maacqcostdouble
mrx_b_coins_awp_discdouble
mrx_b_coins_covbasisstring
mrx_b_coins_max_dispfeedouble
mrx_b_coins_min_dispfeedouble
mrx_b_coins_pctdouble
mrx_b_coins_prp_discdouble
mrx_b_coins_ynstring
mrx_b_copay_max_amtdouble
mrx_b_copay_min_amtdouble
mrx_b_copay_ynstring
mrx_b_ded_amtdouble
mrx_b_ded_ynstring
mrx_b_max_oop_amtdouble
mrx_b_max_oop_perstring
mrx_b_max_oop_ynstring
mrx_ba_cov_lmt_amtdouble
mrx_ba_cov_lmt_ynstring
mrx_ba_cstshr_applystring
mrx_ba_cstshr_grpsdouble
mrx_ba_ded_amountdouble
mrx_ba_ded_chargestring
mrx_ba_ooptcs_applystring
mrx_ba_ot_grpsdouble
mrx_basic_plan_ynstring
mrx_basic_plan_zero_prem_ynstring
mrx_benefit_typestringPart D benefit design type, string '1'-'4' (4=Enhanced Alternative dominant; 1=Defined Standard, 2=Actuarially Equivalent, 3=Basic Alternative) plus NULL (~2,500/yr, mostly the no-drug plans). Distinguishes basic vs enhanced coverage.
mrx_ceiling_price_ynstring
mrx_d_adher_goalstring
mrx_d_adher_goal_descstring
mrx_d_elig_freq_otherstring
mrx_d_eligcrit_chkstring
mrx_d_eligcrit_otherstring
mrx_d_pmm_flex_chkstring
mrx_d_red_cs_lisb_detailstring
mrx_d_ri_amtdouble
mrx_d_ri_elig_rdostring
mrx_d_ri_max_amtdouble
mrx_d_ri_type_chkstring
mrx_d_ri_type_otherstring
mrx_demo_typestring
mrx_demo_ynstring
mrx_drug_ben_ynstringKEY GATE: does the plan offer a Part D drug benefit? String '1'=yes (offers Rx, ~88%), '2'=no (~12%). drug_ben_yn='2' rows are shells with all cost fields NULL.
mrx_ea_cov_lmt_amtdouble
mrx_ea_cov_lmt_ynstring
mrx_ea_cstshr_applystring
mrx_ea_cstshr_groupdouble
mrx_ea_cstshr_group_secdouble
mrx_ea_cstshr_grpsdouble
mrx_ea_cstshr_post_ooptstring
mrx_ea_cstshr_post_oopt_secstring
mrx_ea_ded_amountdouble
mrx_ea_ded_chargestring
mrx_ea_oop_th_amtdouble
mrx_ea_oop_th_amt_secdouble
mrx_ea_oop_th_ynstring
mrx_ea_oop_th_yn_secstring
mrx_ea_sec_covlmt_icl_amtdouble
mrx_ea_sec_covlmt_icl_ynstring
mrx_excluded_tiers_ynstring
mrx_first_fillstring
mrx_floor_price_ynstring
mrx_form_model_descstring
mrx_form_model_typestring
mrx_form_tier_model_2string
mrx_form_tier_model_2_mmpstring
mrx_form_tier_model_3string
mrx_form_tier_model_3_mmpstring
mrx_form_tier_model_4string
mrx_form_tier_model_4_mmpstring
mrx_form_tier_model_5string
mrx_form_tier_model_5_mmpstring
mrx_form_tier_model_5_opt1string
mrx_form_tier_model_5_opt2string
mrx_form_tier_model_5_opt3string
mrx_form_tier_model_5_opt4string
mrx_form_tier_model_5_opt5string
mrx_form_tier_model_5_opt6string
mrx_form_tier_model_6string
mrx_form_tier_model_6_mmpstring
mrx_form_tier_model_6_opt1string
mrx_form_tier_model_6_opt2string
mrx_form_tier_model_6_opt3string
mrx_form_tier_model_6_opt4string
mrx_form_tier_model_6_opt5string
mrx_formulary_tiers_numstring
mrx_formulary_ynstring
mrx_free_gnrc_max_amtdouble
mrx_free_gnrc_ynstring
mrx_gen_extd_first_fillstring
mrx_gen_in_1mdouble
mrx_gen_in_2mdouble
mrx_gen_in_3mdouble
mrx_gen_innpp_1mdouble
mrx_gen_innpp_2mdouble
mrx_gen_innpp_3mdouble
mrx_gen_innpp_osdouble
mrx_gen_inp_1mdouble
mrx_gen_inp_2mdouble
mrx_gen_inp_3mdouble
mrx_gen_inp_osdouble
mrx_gen_inpp_1mdouble
mrx_gen_inpp_2mdouble
mrx_gen_inpp_3mdouble
mrx_gen_inpp_osdouble
mrx_gen_ira_ltcp_coins_1mdouble
mrx_gen_ira_ltcp_copay_1mdouble
mrx_gen_ira_mostd_coins_1mdouble
mrx_gen_ira_mostd_coins_2mdouble
mrx_gen_ira_mostd_coins_3mdouble
mrx_gen_ira_mostd_copay_1mdouble
mrx_gen_ira_mostd_copay_2mdouble
mrx_gen_ira_mostd_copay_3mdouble
mrx_gen_ira_oonp_coins_1mdouble
mrx_gen_ira_oonp_coins_othnumdouble
mrx_gen_ira_oonp_copay_1mdouble
mrx_gen_ira_oonp_copay_othnumdouble
mrx_gen_ira_rstd_coins_1mdouble
mrx_gen_ira_rstd_coins_2mdouble
mrx_gen_ira_rstd_coins_3mdouble
mrx_gen_ira_rstd_copay_1mdouble
mrx_gen_ira_rstd_copay_2mdouble
mrx_gen_ira_rstd_copay_3mdouble
mrx_gen_locstring
mrx_gen_loc_instring
mrx_gen_loc_inpstring
mrx_gen_loc_ltcstring
mrx_gen_loc_mostring
mrx_gen_loc_mopstring
mrx_gen_loc_mostdstring
mrx_gen_loc_oonstring
mrx_gen_loc_rstdstring
mrx_gen_ltc_1mdouble
mrx_gen_ltcp_1mdouble
mrx_gen_ltcp_b_1mdouble
mrx_gen_ltcp_b_osdouble
mrx_gen_ltcp_g_1mdouble
mrx_gen_ltcp_g_osdouble
mrx_gen_mo_1mdouble
mrx_gen_mo_2mdouble
mrx_gen_mo_3mdouble
mrx_gen_mo_osdouble
mrx_gen_monpp_1mdouble
mrx_gen_monpp_2mdouble
mrx_gen_monpp_3mdouble
mrx_gen_monpp_osdouble
mrx_gen_mop_1mdouble
mrx_gen_mop_2mdouble
mrx_gen_mop_3mdouble
mrx_gen_mopp_1mdouble
mrx_gen_mopp_2mdouble
mrx_gen_mopp_3mdouble
mrx_gen_mopp_osdouble
mrx_gen_mostd_1mdouble
mrx_gen_mostd_2mdouble
mrx_gen_mostd_3mdouble
mrx_gen_oon_1mdouble
mrx_gen_oon_osdouble
mrx_gen_oonp_1mdouble
mrx_gen_oonp_3mdouble
mrx_gen_oonp_osdouble
mrx_gen_rstd_1mdouble
mrx_gen_rstd_2mdouble
mrx_gen_rstd_3mdouble
mrx_grp_coins_ynstring
mrx_grp_copay_ynstring
mrx_grp_idstring
mrx_grp_innpp_1m_numdouble
mrx_grp_innpp_3m_numdouble
mrx_grp_innpp_coins_1mdouble
mrx_grp_innpp_coins_3mdouble
mrx_grp_innpp_coins_osdouble
mrx_grp_innpp_copay_1mdouble
mrx_grp_innpp_copay_3mdouble
mrx_grp_innpp_copay_osdouble
mrx_grp_innpp_othnumdouble
mrx_grp_innpp_presupstring
mrx_grp_inpp_1m_numdouble
mrx_grp_inpp_3m_numdouble
mrx_grp_inpp_co_numdouble
mrx_grp_inpp_coins_1mdouble
mrx_grp_inpp_coins_3mdouble
mrx_grp_inpp_coins_osdouble
mrx_grp_inpp_copay_1mdouble
mrx_grp_inpp_copay_3mdouble
mrx_grp_inpp_copay_osdouble
mrx_grp_inpp_psstring
mrx_grp_lblstring
mrx_grp_lbl1string
mrx_grp_lbl2string
mrx_grp_locatstring
mrx_grp_mo_1m_numdouble
mrx_grp_mo_3m_numdouble
mrx_grp_mo_coins_1mdouble
mrx_grp_mo_coins_3mdouble
mrx_grp_mo_coins_osdouble
mrx_grp_mo_copay_1mdouble
mrx_grp_mo_copay_3mdouble
mrx_grp_mo_copay_osdouble
mrx_grp_mo_othnumdouble
mrx_grp_mo_presupstring
mrx_grp_oonp_1m_numdouble
mrx_grp_oonp_3m_numdouble
mrx_grp_oonp_coins_1mdouble
mrx_grp_oonp_coins_3mdouble
mrx_grp_oonp_coins_osdouble
mrx_grp_oonp_copay_1mdouble
mrx_grp_oonp_copay_3mdouble
mrx_grp_oonp_copay_osdouble
mrx_grp_oonp_othnumndouble
mrx_grp_oonp_presupstring
mrx_grp_tier_lbl1string
mrx_grp_tier_lbl2string
mrx_grp_tierlblstring
mrx_grp_typestring
mrx_grp_type_idstring
mrx_innpp_1m_numdouble
mrx_innpp_3m_numdouble
mrx_innpp_othnumdouble
mrx_innpp_presupstring
mrx_inpp_1m_numdouble
mrx_inpp_3m_numdouble
mrx_inpp_co_numdouble
mrx_inpp_psstring
mrx_insulin_atteststring
mrx_limit_ofc_ynstring
mrx_locatstring
mrx_ltc_attest_flagstring
mrx_mo_1m_numdouble
mrx_mo_3m_numdouble
mrx_mo_othnumdouble
mrx_mo_presupstring
mrx_nat_rx_cov_ynstring
mrx_oonp_1m_numdouble
mrx_oonp_3m_numdouble
mrx_oonp_othnumndouble
mrx_oonp_presupstring
mrx_otc_meds_attest_flagstring
mrx_otc_meds_pay_ump_ynstring
mrx_otc_step_therapy_ynstring
mrx_partd_network_locstring
mrx_pen_lessexpen_ynstring
mrx_pen_oonpharm_ynstring
mrx_post_exclud_only_ynstring
mrx_pro_part_fillstring
mrx_ptd_nat_avgdouble
mrx_quantity_limitsstring
mrx_rai_adh_goal_notes_1rxstring
mrx_rai_adh_goal_notes_2rxstring
mrx_rai_adh_goal_notes_3rxstring
mrx_rai_elig_crit_1rxstring
mrx_rai_elig_crit_2rxstring
mrx_rai_elig_crit_3rxstring
mrx_rai_elig_crit_notes_1rxstring
mrx_rai_elig_crit_notes_2rxstring
mrx_rai_elig_crit_notes_3rxstring
mrx_rai_frq_ri_desc_1rxstring
mrx_rai_frq_ri_desc_2rxstring
mrx_rai_frq_ri_desc_3rxstring
mrx_rai_meet_adh_goal_yn_1rxstring
mrx_rai_meet_adh_goal_yn_2rxstring
mrx_rai_meet_adh_goal_yn_3rxstring
mrx_rai_num_partd_offrdstring
mrx_rai_off_rew_incent_ynstring
mrx_rai_rew_inc_notes_1rxstring
mrx_rai_rew_inc_notes_2rxstring
mrx_rai_rew_inc_notes_3rxstring
mrx_rai_type_partd_rew_1rxstring
mrx_rai_type_partd_rew_2rxstring
mrx_rai_type_partd_rew_3rxstring
mrx_reduct_cost_ynstring
mrx_snp_zerocost_atteststring
mrx_sp_access_ynstring
mrx_step_ther_drugs_ynstring
mrx_tier_extd_days_gen_ynstring
mrx_tier_form_exstring
mrx_tier_form_ex_2double
mrx_tier_form_ex_2_ynstring
mrx_tier_group_numdouble
mrx_v_bid_attestationstring
mrx_vaccine_atteststring
orgtypestringCMS organization type code, string (01=Local CCP/HMO-PPO dominant, 08, 10, 11, 06, 04, 02...). Plan-sponsor org category. Largely co-varies with pbp_a_plan_type.
part_d_enhncd_cvrg_demostring
part_d_model_demostring
pbp_a_ben_covstringSection-A benefit-coverage scope code (string; '1' dominant, '2', plus nulls). Indicates the plan's overall benefit coverage class.
pbp_a_plan_typestringPBP plan-type code, string ('01'=HMO, '02'=HMO-POS, '04'=Local PPO, '29'=PDP-style, '20', '31'=Regional PPO, etc.). Carried from Section A; identifies the MA/PDP product type.
observed_perioddateVlada-normalized observation period (date) = Jan 1 of report_year. Always equals effective_period_start in this table; does NOT distinguish quarterly releases (so it cannot stand in for quarter/vintage in the grain).
asserted_atdateVlada ingestion/assert date (date; 3 values: 2026-05-16, 2026-05-20, 2026-05-25). The 16,307 rows asserted 2026-05-25 are exactly the 2021/2022 dual-vintage backfill rows. Pipeline provenance, not benefit data.
effective_period_startdate
effective_period_enddate
cms_vintage_sequenceintInteger ordinal of the CMS release within the plan-year, normally tracking quarter (Q1=1...Q4=4). REQUIRED in the grain: in 2021/2022 the same (year,quarter) was loaded at two different vintage sequences from two different CMS source ZIPs (mid-year 'updated-MMDDYYYY' re-releases).
parse_revisionint
parser_artifact_hashstring
source_urlstring
sha256_content_hashstring
source_row_ordinaldouble
mrx_bal_model_atteststring
mrx_bal_opt_flexstring
mrx_bal_opt_flex_other_descstring
mrx_balance_covg_tierstring
mrx_balance_cstshr_struc_typestring
mrx_balance_deductible_amtdouble
mrx_balance_deductible_optstring
mrx_balance_extended_tierstring
mrx_balance_mo_tierstring
mrx_dsnp_buydown_atteststring
mrx_alt_* (family)~35 cols describing the Enhanced Alternative coverage design: deductible (ded_amount/charge/type), coverage limits (cov_lmt_amt/yn), gap coverage (gap_covg_brand/gen/tier/yn — pre-2026; IRA removed the gap in 2026), generic cost-share (gen_coins_pct/gen_copay_amt/gen_cstshr_struct), excluded/reduced drugs, pre/post-ICL cost share, and MMP (Medicare-Medicaid plan) variants. Sparse; which sub-fields are valid depends on report_year (PBP layout churn).
mrx_b_* (family)~22 cols for the Part D supplemental/'B' cost-share block (coinsurance pct, copay min/max, AWP discount, dispensing-fee min/max, deductible, max-OOP). Mostly NULL in recent years (mrx_b_ded_amt=0 non-null across all 208K rows in sample) — legacy/rarely-used design fields.
mrx_gen_* tier-copay matrix (mrx_gen_in/inp/innpp/mo/mop/oon/rstd/mostd/ltc _1m/_2m/_3m)~120 double cols intended for generic-drug copay/coins by pharmacy location (in-network, preferred, mail-order, OON, retail/mail standard, LTC) and days-supply (1/2/3-month). TRAP: essentially EMPTY in this parent table (mrx_gen_in_1m = 632 non-null of 208,537, only legacy years). Tier×pharmacy cost detail lives in the child table pbp_mrx_tier, not here.
mrx_gen_loc_* / mrx_locat / mrx_partd_network_locPart D pharmacy-location indicators (rstd=retail-standard, mostd=mail-order-standard, oon=out-of-network-preferred, ltc=long-term-care-preferred, in/inp/mo/mop). String flags describing which pharmacy channels the plan structures cost-share for.
mrx_gen_ira_* (family)~30 cols added for IRA (Inflation Reduction Act) standardized Part D cost-share — generic coins/copay by standard-retail (rstd), mail-standard (mostd), LTC-preferred (ltcp), OON-preferred (oonp) at 1/2/3-month supply. Populated only in IRA-era years (CY2024+).
mrx_grp_* (family)~50 cols for cost-share 'group' constructs (group id/type/labels, per-group copay/coins by pharmacy×supply). TRAP: mrx_grp_id and mrx_grp_type_id are 100% NULL across all 208K rows — this table is NEVER exploded to group rows. The profiler wrongly used these as a 'key'.
mrx_rai_* / max_rai_* (family)~30 cols for Part D Rewards & Incentives programs (offered y/n, type, eligibility criteria, adherence-goal notes, max annual reward amounts _1rx/_2rx/_3rx). Free-text + amounts; mostly NULL.
mrx_ae_/mrx_ba_/mrx_ea_* (family)Cost-share-group apply flags and out-of-pocket-threshold structures for Alternative-Enhanced (ae), Basic-Alternative (ba), Enhanced-Alternative (ea) tiers — cstshr_apply, cstshr_grps, ded_amount, oop_th_amt, post_oopt. Sparse design-detail fields.
mrx_form_* / mrx_formulary_yn / mrx_formulary_tiers_num / mrx_form_tier_model_2..6Formulary model descriptors: formulary y/n, number of tiers, tier-model codes (2-6 tiers, with _mmp and _opt variants). mrx_form_tier_model_5 populated only CY2013-2016; mrx_formulary_yn 100% NULL in 2026 — strongly year-dependent (these moved/changed in the CY2022-Q2 and CY2024 PBP redesigns).
mrx_quantity_limits / mrx_step_ther_drugs_yn / mrx_otc_step_therapy_yn / mrx_auth_ynba / mrx_first_fill / mrx_excluded_tiers_ynUtilization-management flags: quantity limits (string, populated 2010-2021 then NULL), step therapy, prior auth, first-fill/extended-first-fill, excluded tiers. String y/n-style indicators; coverage varies by year.
mrx_demo_yn / mrx_demo_type / part_d_model_demo / part_d_enhncd_cvrg_demoPart D demonstration/model-test participation flags and type (e.g. VBID, Enhanced Med Therapy demos). VBID-related fields blanked in CY2026 (VBID discontinued).
effective_period_start / effective_period_endPlan-year coverage window: always Jan 1 .. Dec 31 of report_year (dates). Derived from report_year; identical for all quarterly releases of the same year.
cms_vintage_sequence / parse_revision / parser_artifact_hash / source_url / sha256_content_hashLineage: source_url = the exact CMS PBP ZIP (29 distinct, e.g. pbp-benefits-2025.zip, pbp-benefits-2021-updated-08022021.zip); sha256_content_hash = content hash of that file; parse_revision (1 or 2) = Vlada parser version; parser_artifact_hash = parser build. source_url is the truest snapshot discriminator.

Query it

describe_data_source(source_fqn="medicare_silver.pbp_mrx")     # the card, live
query_substrate(sql="SELECT * FROM medicare_silver.pbp_mrx WHERE bid_id = '<value>' AND report_year = '<value>' AND quarter = '<value>' AND cms_vintage_sequence = '<value>' LIMIT 100")
ItemValue
Typed tools that read itget_pbp_benefit
Identity keycontract_id,plan_id,segment_id,version,mrx_grp_type_id,mrx_grp_id,report_year,quarter
Joinhow_to_join(source_fqn="medicare_silver.pbp_mrx")
Raw doorAthena (read-only via query_substrate): medicare_silver.pbp_mrx
NoteGrain-governed; live in Glue / query_substrate. Source family pbp_benefits.

This page as markdown: /docs-md/data/medicare_silver_pbp_mrx.md · every page in one file: /llms-full.txt