Medicare Advantage, Part D, Medicaid

MA pbp section b15 partb rx drugs

medicare_silver.pbp_section_b15_partb_rx_drugs·partial·silver·annual·Medicare Advantage Plan Benefit Packages (PBP)
Rows
N/A
Columns
232
History
2008 to 2026
Card
yesgrain, traps, filters
Typed tools
1

What it is

  1. 1CMS Plan Benefit Package (PBP) Section B-15: the Medicare Advantage / MA-PD plan benefit design for PART B Rx DRUGS (physician-administered drugs covered under Part B — chemotherapy, home-infusion, IRA-capped insulin, etc.), i.e. the cost-share RULES (prior-auth, coinsurance %, copays, deductible, step therapy, max-OOP) each plan files with CMS each year.
  2. 2It is plan-design cost data (what the plan WILL charge), not claims or paid amounts.
  3. 3Sourced from the CMS PBP Public Use Files, 2008-2026.

Grain

KeyGrain
contract_idplan_idsegment_idreport_yearquarter
  1. 1One row per Medicare plan offering per benefit year per quarterly CMS PUF snapshot.
  2. 2Minimal verified key = contract_id × plan_id × segment_id × report_year × quarter (0 duplicate groups;
  3. 3189,385 rows = the full count). bid_id is just contract_id||plan_id||segment_id concatenated, so it is interchangeable with those three.
  4. 4For a single 'one row per plan per year' view you must additionally collapse to the latest snapshot, e.g.
  5. 5MAX(quarter) per (contract_id,plan_id,segment_id,report_year) — that yields 102,072 plan-years.

How to read it

  1. 1Latest-snapshot Part B drug cost-share for current MA plans: SELECT contract_id, plan_id, mrx_b_auth_yn, mrx_b_coins_yn, mrx_b_step_tpy_yn, mrx_b_hi_yn, mrx_b_ira_coins_yn FROM medicare_silver.pbp_section_b15_partb_rx_drugs WHERE report_year=2026 AND quarter=1.
  2. 2Answers 'for each 2026 MA/MA-PD plan, does the Part B drug benefit require prior authorization / step therapy / coinsurance, and does it cover home-infusion and IRA-capped drugs?' To trend coinsurance %, restrict to report_year<=2017 (where mrx_b_coins_pct is populated) and always pick MAX(quarter) per plan-year to avoid snapshot double-counting.

Traps

  1. 1DEAD COLUMNS: all 149 pbp_b15_* columns (grp1-5 tiers, coins/copay/ded/maxplan/bendesc/maxenr) are 100% NULL/empty across every one of the 189,385 rows — they are schema placeholders from a newer PBP layout that was never populated here. The only columns carrying data are the 53 mrx_b_* fields plus the id/plan-context/provenance columns. Do NOT build any analysis on a pbp_b15_* column.
  2. 2SNAPSHOT DOUBLE-COUNTING: there is NO is_current column. A plan can appear up to 4 times in one report_year (once per quarterly CMS re-release: quarter 1-4, 1:1 with cms_vintage_sequence). Years 2018,2019,2020,2022,2023,2024 are multi-snapshot; the rest are single (quarter=1). Counting plans, averaging cost-share, or joining without first picking MAX(quarter)/MAX(cms_vintage_sequence) per (contract,plan,segment,report_year) inflates results ~1.85x overall.
  3. 3SCHEMA-ERA SHIFT in populated fields: the detailed legacy cost-share numbers (mrx_b_coins_pct, mrx_b_chemo_*, min/max pct & dispensing fees) are populated ONLY 2008-2017 and go NULL from 2018 on. Conversely the IRA fields (mrx_b_ira_*) appear ONLY 2024+. mrx_b_auth_yn (prior-auth) is the one field present the whole 2008-2026 span. Trend queries on coinsurance % will silently break at 2018.
  4. 4YN CONVENTION IS 1/2, NOT 1/0: every *_yn flag uses CMS coding '1'=Yes, '2'=No (stored as strings). Treating '2' as falsy-zero or summing them is wrong. Likewise coins_covbasis (1-10), coins_ehc (01/10/11), orgtype, and pbp_a_plan_type are CMS LOOKUP CODES needing the PBP data dictionary, not literal values.
  5. 5NULL MOSTLY MEANS 'NOT APPLICABLE / NOT THIS MECHANISM', not zero: mrx_b_ded_amt is non-null on just 7 rows (all $131) and mrx_b_max_oop_amt on ~773 — a NULL deductible/OOP does not imply $0. mrx_b_coins_pct is NULL where the plan uses copay instead of coinsurance.
  6. 6IDENTITY TRAPS: bid_id looks like a primary key but is a redundant concatenation of the three id columns; version looks temporal but is the per-bid revision number (scalar per row, not a snapshot). asserted_at has only 2 values (2026-05-16/20) — this is a one-time historical backfill, not a live feed, so 'latest asserted_at' is meaningless for currency; use report_year + quarter/vintage instead.

Columns (232)

ColumnTypeMeaning
contract_idstringCMS MA/MA-PD contract number, e.g. 'H0028' (string). Part of the plan identity. First char encodes org type (H=local CCP, R=regional PPO, etc.).
plan_idstringPlan number within the contract, e.g. '001','034' (zero-padded string). contract_id + plan_id + segment_id identifies one Medicare plan offering.
segment_idstringService-area segment, almost always '0' (string). Part of the plan identity; non-zero only for segmented plans.
versiondoubleCMS PBP per-plan bid VERSION NUMBER (double, 1-27), one scalar value per row. This is the plan's bid-submission revision, NOT a temporal/snapshot version — every report_year contains a scattered range of values. Does NOT disambiguate the grain.
report_yeardoubleBenefit/contract year the PBP describes (double, 2008.0-2026.0). The primary time dimension. Equals year of effective_period_start/observed_period.
quarterdoubleWhich quarterly CMS PUF re-release the row came from (double, 1.0-4.0). 1:1 with cms_vintage_sequence. Most years have only quarter=1 (single annual release); 2018,2019,2020,2022,2023,2024 have multiple quarterly republications. This is the within-year snapshot disambiguator — part of the grain.
bid_idstringDerived convenience key = contract_id||'_'||plan_id||'_'||segment_id, e.g. 'H0028_001_0'. REDUNDANT with the three id columns (22,455 distinct = same as contract||plan||segment); not an independent dimension.
mrx_b_auth_ynstringPrior authorization required for Part B Rx drugs? CMS code '1'=Yes, '2'=No. The ONE substantive field populated across the full 2008-2026 history (~152K of 189K rows non-null).
mrx_b_chemo_coins_amt_maacqcosdouble
mrx_b_chemo_coins_awp_discdouble
mrx_b_chemo_coins_covstring
mrx_b_chemo_coins_max_dispfeedouble
mrx_b_chemo_coins_max_pctdouble
mrx_b_chemo_coins_min_dispfeedouble
mrx_b_chemo_coins_min_pctdouble
mrx_b_chemo_coins_pctdouble
mrx_b_chemo_coins_prp_discdouble
mrx_b_chemo_copay_amtdouble
mrx_b_chemo_copay_amt_maxdouble
mrx_b_chemo_copay_amt_mindouble
mrx_b_coins_amt_maacqcostdouble
mrx_b_coins_awp_discdouble
mrx_b_coins_covbasisstring
mrx_b_coins_ehcstring
mrx_b_coins_max_dispfeedouble
mrx_b_coins_max_pctdouble
mrx_b_coins_min_dispfeedouble
mrx_b_coins_min_pctdouble
mrx_b_coins_pctdouble
mrx_b_coins_prp_discdouble
mrx_b_coins_ynstring
mrx_b_copay_ehcstring
mrx_b_copay_max_amtdouble
mrx_b_copay_min_amtdouble
mrx_b_copay_ynstring
mrx_b_cost_share_atteststringPlan attestation about Part B drug cost-sharing structure (newer field, ~36K rows, 2018+ era).
mrx_b_ded_amtdoublePart B Rx deductible dollar amount. Extremely sparse — only 7 non-null rows, all $131 (a single year's Part B deductible). Effectively NULL across the table; do not treat absence as $0.
mrx_b_ded_ynstring
mrx_b_hi_coins_pct_maxdouble
mrx_b_hi_coins_pct_mindouble
mrx_b_hi_coins_ynstring
mrx_b_hi_copay_amt_maxdouble
mrx_b_hi_copay_amt_mindouble
mrx_b_hi_copay_ynstring
mrx_b_hi_mcaid_ynstring
mrx_b_hi_ynstring
mrx_b_ira_coins_max_pctdouble
mrx_b_ira_coins_min_pctdouble
mrx_b_ira_coins_ynstring
mrx_b_ira_copay_amt_maxdouble
mrx_b_ira_copay_amt_mindouble
mrx_b_ira_copay_month_amtdouble
mrx_b_ira_copay_ynstring
mrx_b_ira_deduct_ynstring
mrx_b_max_oop_amtdouble
mrx_b_max_oop_perstring
mrx_b_max_oop_per_dstring
mrx_b_max_oop_ynstring
mrx_b_step_tpy_ynstring
mrx_b_stp_tpy_chkstring
orgtypestringCMS organization type code (string: '01' local CCP, '02','04','06','08','11'...). Correlates with pbp_a_plan_type and the contract_id prefix.
pbp_a_ben_covstringPlan A-level benefit-coverage indicator (string, e.g. '1'). High-level plan context carried into this section.
pbp_a_plan_typestringCMS plan-type code (string): '01'=HMO (dominant, 94K), '04'=Local PPO (54K), '02'=HMO-POS (20K), '20'=PDP/employer, '09','31','18',... Most codes span all 19 years.
observed_perioddateDate the benefit is observed for = Jan 1 of report_year (2008-01-01 ... 2026-01-01). Aligns with effective_period_start. Provenance/bookkeeping, not a separate grain dimension.
asserted_atdateDate this row was loaded/asserted into the silver table. Only two values (2026-05-16, 2026-05-20) — confirms a one-time historical backfill in May 2026, NOT a live/incremental feed.
effective_period_startdate
effective_period_enddate
cms_vintage_sequenceintInteger rank of the CMS source vintage within a report_year (1=first/Q1 release ... 4). 1:1 with quarter. Use MAX(cms_vintage_sequence) (= MAX(quarter)) per plan-year to get the latest restatement.
parse_revisionint
parser_artifact_hashstring
source_urlstringCMS source ZIP the row was parsed from, e.g. .../pbp-pufs/pbp-benefits-2013.zip. One distinct file per report_year×quarter snapshot.
sha256_content_hashstringSHA-256 of the source file content. Varies per snapshot file, so (bid_id, report_year, sha256) is also unique — but it's a provenance fingerprint, not a semantic key.
pbp_b15_addl_coststring
pbp_b15_authstring
pbp_b15_auth_nonformstring
pbp_b15_bendec_ehc_ynstring
pbp_b15_bendec_forstring
pbp_b15_bendec_nforstring
pbp_b15_bendesc_amostring
pbp_b15_bendesc_ehc_ynstring
pbp_b15_bendesc_forstring
pbp_b15_bendesc_nforstring
pbp_b15_bendesc_nfor_med_ynstring
pbp_b15_bendesc_nfor_ynstring
pbp_b15_bendesc_yesnostring
pbp_b15_bendesc_ynstring
pbp_b15_bendesc_yn_nforstring
pbp_b15_coins_cov_bstring
pbp_b15_coins_cov_fbstring
pbp_b15_coins_cov_fgstring
pbp_b15_coins_cov_fpbstring
pbp_b15_coins_cov_genstring
pbp_b15_coins_cov_mcstring
pbp_b15_coins_cov_nfbstring
pbp_b15_coins_cov_nfgstring
pbp_b15_coins_cov_pbstring
pbp_b15_coins_fb_ynstring
pbp_b15_coins_fg_ynstring
pbp_b15_coins_fpb_ynstring
pbp_b15_coins_mc_covstring
pbp_b15_coins_mc_ynstring
pbp_b15_coins_yesnostring
pbp_b15_coins_ynstring
pbp_b15_coins_yn_nfbstring
pbp_b15_coins_yn_nfgstring
pbp_b15_copay_add_fb_ynstring
pbp_b15_copay_add_nfb_ynstring
pbp_b15_copay_fb_ynstring
pbp_b15_copay_fg_ynstring
pbp_b15_copay_fpb_ynstring
pbp_b15_copay_mc_ynstring
pbp_b15_copay_nfb_ynstring
pbp_b15_copay_nfg_ynstring
pbp_b15_ded_cdtstring
pbp_b15_ded_yesnostring
pbp_b15_ded_ynstring
pbp_b15_deduct_cdtstring
pbp_b15_fb_placestring
pbp_b15_fg_placestring
pbp_b15_fpb_placestring
pbp_b15_grp1_coins_covstring
pbp_b15_grp1_coins_ynstring
pbp_b15_grp1_copay_ynstring
pbp_b15_grp1_drug_typesstring
pbp_b15_grp1_labelstring
pbp_b15_grp1_maxplan_covstring
pbp_b15_grp1_maxplan_perstring
pbp_b15_grp1_maxplan_ynstring
pbp_b15_grp1_placestring
pbp_b15_grp2_coins_covstring
pbp_b15_grp2_coins_ynstring
pbp_b15_grp2_copay_ynstring
pbp_b15_grp2_drug_typesstring
pbp_b15_grp2_labelstring
pbp_b15_grp2_maxplan_covstring
pbp_b15_grp2_maxplan_perstring
pbp_b15_grp2_maxplan_ynstring
pbp_b15_grp2_placestring
pbp_b15_grp3_coins_covstring
pbp_b15_grp3_coins_ynstring
pbp_b15_grp3_copay_ynstring
pbp_b15_grp3_drug_typesstring
pbp_b15_grp3_labelstring
pbp_b15_grp3_maxplan_covstring
pbp_b15_grp3_maxplan_perstring
pbp_b15_grp3_maxplan_ynstring
pbp_b15_grp3_placestring
pbp_b15_grp4_coins_covstring
pbp_b15_grp4_coins_ynstring
pbp_b15_grp4_copay_ynstring
pbp_b15_grp4_drug_typesstring
pbp_b15_grp4_labelstring
pbp_b15_grp4_maxplan_covstring
pbp_b15_grp4_maxplan_perstring
pbp_b15_grp4_maxplan_ynstring
pbp_b15_grp4_placestring
pbp_b15_grp5_coins_covstring
pbp_b15_grp5_coins_ynstring
pbp_b15_grp5_copay_ynstring
pbp_b15_grp5_drug_typesstring
pbp_b15_grp5_labelstring
pbp_b15_grp5_maxplan_covstring
pbp_b15_grp5_maxplan_perstring
pbp_b15_grp5_maxplan_ynstring
pbp_b15_grp5_placestring
pbp_b15_maxenr_cdtstring
pbp_b15_maxenr_perstring
pbp_b15_maxenr_yesnostring
pbp_b15_maxenr_ynstring
pbp_b15_maxplan1_yesnostring
pbp_b15_maxplan_cdtstring
pbp_b15_maxplan_cov_cdtstring
pbp_b15_maxplan_cov_fbstring
pbp_b15_maxplan_cov_fgstring
pbp_b15_maxplan_cov_fpbstring
pbp_b15_maxplan_cov_genstring
pbp_b15_maxplan_cov_nfbstring
pbp_b15_maxplan_cov_nfgstring
pbp_b15_maxplan_cov_pbstring
pbp_b15_maxplan_fb_less_copaystring
pbp_b15_maxplan_fb_ynstring
pbp_b15_maxplan_fg_less_copaystring
pbp_b15_maxplan_fg_unlmstring
pbp_b15_maxplan_fg_yesnostring
pbp_b15_maxplan_fg_ynstring
pbp_b15_maxplan_fpb_less_copaystring
pbp_b15_maxplan_fpb_yesnostring
pbp_b15_maxplan_fpb_ynstring
pbp_b15_maxplan_gen_unlmstring
pbp_b15_maxplan_grp_unlm_ynstring
pbp_b15_maxplan_grp_waivedstring
pbp_b15_maxplan_less_copaystring
pbp_b15_maxplan_net_copay_ynstring
pbp_b15_maxplan_nfb_less_copaystring
pbp_b15_maxplan_nfb_ynstring
pbp_b15_maxplan_nfg_less_copaystring
pbp_b15_maxplan_nfg_ynstring
pbp_b15_maxplan_perstring
pbp_b15_maxplan_per_cdtstring
pbp_b15_maxplan_per_cdt1string
pbp_b15_maxplan_per_fbstring
pbp_b15_maxplan_per_fbynstring
pbp_b15_maxplan_per_fgstring
pbp_b15_maxplan_per_fgenstring
pbp_b15_maxplan_per_nfbstring
pbp_b15_maxplan_per_nfgstring
pbp_b15_maxplan_per_pbstring
pbp_b15_maxplan_typesstring
pbp_b15_maxplan_unused_ynstring
pbp_b15_maxplan_us_yesnostring
pbp_b15_maxplan_yesnostring
pbp_b15_maxplan_ynstring
pbp_b15_maxplan_yn_nfbstring
pbp_b15_maxplan_yn_nfgstring
pbp_b15_nfb_placestring
pbp_b15_nfg_placestring
pbp_b15copay_fb_ynstring
pbp_b15copay_fgen_ynstring
pbp_b15copay_fpb_ynstring
pbp_b15copay_nfb_ynstring
pbp_b15copay_nfgen_ynstring
mrx_b_coins_yn / mrx_b_copay_yn / mrx_b_ded_yn / mrx_b_max_oop_ynYes/No flags ('1'=Yes,'2'=No) for whether the Part B drug benefit applies coinsurance / copay / a deductible / a max-OOP. CMS 1/2 boolean convention (NOT 1/0).
mrx_b_coins_pct (and *_max_pct/*_min_pct)Part B drug COINSURANCE percentage. Median 20.0 (standard Medicare Part B coinsurance), range 0-100. POPULATED ONLY 2008-2017 (~34K rows); NULL from 2018 onward when CMS dropped these detailed legacy fields.
mrx_b_chemo_* (coins/copay)Cost-share specifically for Part B chemotherapy/anti-cancer drugs (coins pct, copay amt, dispensing-fee min/max). Same 2008-2017-only population pattern as the general coins fields (~34K).
mrx_b_max_oop_amt / mrx_b_max_oop_perMax out-of-pocket dollar cap (0-6700) and its period. Only ~773 rows populated; mostly NULL.
mrx_b_hi_yn / mrx_b_hi_coins_* / mrx_b_hi_copay_* / mrx_b_hi_mcaid_ynHome-Infusion (HI) drug cost-share block: whether covered ('1'/'2'), coinsurance pct min/max, copay min/max, and a Medicaid-coverage flag. mrx_b_hi_yn populated ~152K rows.
mrx_b_ira_* (coins/copay/deduct, copay_month_amt)Inflation Reduction Act Part B drug provisions (e.g. capped insulin cost-share). NEW columns — populated ONLY 2024 onward (~23K rows). ira_*_yn use '1'/'2'. mrx_b_ira_copay_month_amt is the monthly capped copay.
mrx_b_step_tpy_yn / mrx_b_stp_tpy_chkStep-therapy required for Part B drugs? '1'/'2'. step_tpy_yn populated ~86K rows.
mrx_b_coins_covbasis / mrx_b_coins_ehc / mrx_b_copay_ehcCMS lookup codes describing the coinsurance coverage basis (values 1-10) and 'enhanced/EHC' coverage indicator (01/10/11). Coded values, not free text; require the CMS PBP data dictionary to interpret.
pbp_b15_* (149 columns: grp1-5_*, coins_*, copay_*, ded_*, maxplan_*, maxenr_*, bendesc_*, auth_*, place_*, etc.)The MODERN PBP B-15 layout (drug-group tiers grp1-grp5 with labels/drug_types/copay/coins/max-plan-coverage, formulary/non-formulary brand/generic cost-share, plan-coverage maxima). ENTIRELY NULL/EMPTY in this dataset — every one of the 149 pbp_b15_* columns has 0 non-null values across all 189,385 rows. Schema placeholders only; carry no information here.
effective_period_start / effective_period_endBenefit-year validity window: Jan 1 to Dec 31 of report_year. effective_period_start is the profiler's designated time_column (annual).
parse_revision / parser_artifact_hashInternal ETL provenance: parser revision number and a hash of the parser artifact used to extract the row.

Query it

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

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