# MA pbp section b20

`medicare_silver.pbp_section_b20` · Medicare Advantage, Part D, Medicaid · status partial

Section B20: Supplemental benefits — other / unclassified. Coverage: All years.

**Grain.** One row per Medicare Advantage plan segment per quarterly PBP PUF snapshot. The minimal verified unique key is (contract_id, plan_id, segment_id, report_year, quarter) = exactly 463 distinct = 463 rows. bid_id is just contract_id_plan_id_segment_id concatenated, so (bid_id, report_year, quarter) is an equivalent key. The same plan-year benefit is republished across multiple quarterly PUF releases, so the 463 rows collapse to only 215 distinct plan-years (contract×plan×segment×report_year) spread over 19 quarterly snapshots — there is NO is_current flag and NO dedup, so you must pick a snapshot yourself.

**How to use it.** Get the latest-snapshot Part B outpatient-drug cost sharing for each plan in 2024: pick one row per plan from the most recent quarterly PUF, then read the coinsurance. e.g. SELECT contract_id, plan_id, pbp_b20_coins_mc_yn, pbp_b20_coins_mc_pct, pbp_b20_auth_yn FROM pbp_section_b20 WHERE report_year=2024 AND quarter=(SELECT max(quarter) FROM pbp_section_b20 WHERE report_year=2024) — answers 'what do these MA plans charge enrollees (coinsurance %) for Medicare Part B drugs, and do they require prior authorization?' To trend across years, GROUP BY contract_id,plan_id,report_year and take the latest quarter per year to avoid double-counting the republished snapshots.

**Traps.**
- NO is_current / no dedup, and NO single-version flag. The 463 rows are only 215 distinct plan-years (contract×plan×segment×report_year) republished across 19 quarterly PUF snapshots. Summing or counting rows double-counts plans. To get one row per plan-year, filter to a chosen snapshot (e.g. the max cms_vintage_sequence / latest quarter per report_year) or GROUP to the (contract,plan,segment,report_year) grain.
- 'version' is a TRAP for picking 'latest'. It is the plan's bid Version Number (a per-contract attribute that differs across contracts within the very same snapshot, e.g. v1/v5/v8 all in 2020-Q4), NOT a global data vintage. Use cms_vintage_sequence + quarter for snapshot recency; use asserted_at for nothing data-related (it's just the load date).
- bid_id, observed_period, and effective_period_start are all redundant restatements of the grain (bid_id = contract_plan_segment; observed_period/effective_period_start = Jan-1 of report_year). pbp_b20_bendesc_grp_num LOOKS like a sub-grain but is NOT — there is exactly one row per plan per snapshot.
- This table is Medicare Part B / OUTPATIENT DRUGS (chemo, insulin, other Part B drugs administered in a clinical setting) under MA plans — it is NOT Part D pharmacy benefits. For Part D drug tiers/formulary use the pbp_mrx* tables; sibling pbp_section_b15_partb_rx_drugs also covers Part B Rx, so confirm which section the use-case needs. B20 ('Outpatient Drugs') carries the prior-auth, coinsurance (mostly the standard 20%), and supplemental-bundling design.
- Most fields are NULL by design: deductible amount, copay amounts, MOOP, addl_cost, all grp1-5 supplemental blocks, and the maxplan_* caps are almost entirely empty — the sampled plans price Part B drugs via simple Medicare-covered coinsurance (commonly 20%). A NULL _yn means the question wasn't answered/parsed (10 all-null placeholder rows = plan_type '02'/orgtype '01'); a '2' explicitly means 'No'. coins_mc_ehc is a concatenated bitmask code string ('11','101'), not a numeric value.
- This is a small SAMPLE (7 contracts / 50 plans), not the national MA universe. Do not treat counts here as population statistics.

| column | type | meaning |
|---|---|---|
| contract_id | string | CMS MA contract ID (the 'H number', e.g. H0602). 7 distinct in this sample. Part of grain. |
| plan_id | string | 3-char plan identifier within the contract (e.g. '001'). 30 distinct values. Part of grain. |
| segment_id | string | Plan segment ID; always '0' in this sample (1 distinct). A real PBP grain dimension (plans can have service-area segments) so kept in the canonical key even though it adds no cardinality here. |
| pbp_b20_bendesc_grp_num | string | Benefit-description group number for the supplemental (Part C) outpatient-drug benefit. Mostly empty string ''; value '2' on 31 rows. NOT part of the grain — there is always exactly 1 row per plan×snapshot (max rows per cps×year×quarter = 1). |
| version | double | CMS dict 'Version Number' — the plan's BID submission version. A per-plan/per-contract attribute that varies across contracts within a single snapshot (in 2020-Q4: H0602=v1, H4140=v8, H5256=v5). NOT a global data vintage; do not use it to pick 'latest'. |
| report_year | double | Contract/benefit year the PBP describes (2018-2026, 9 distinct). Part of grain. Equals YEAR(observed_period)=YEAR(effective_period_start). |
| quarter | double | Which quarterly PUF release (1-4) the row came from. Part of grain. The SAME report_year appears under several quarters (e.g. 2018 has Q2,Q3,Q4), which is what makes 463 rows but only 215 distinct plan-years. |
| bid_id | string | Concatenation contract_id_plan_id_segment_id (e.g. 'H0602_001_0'). Redundant with the three ID columns; (bid_id, report_year, quarter) is an equivalent grain key. |
| orgtype | string | CMS organization-type code: '06' (443+10 rows) and '01' (10 rows). '01' co-occurs with the all-null cost-share placeholder rows. |
| pbp_a_ben_cov | string | Part A/plan benefit-coverage indicator ('1' on 453 rows, '2' on 10). From the shared PBP Section-A plan header. |
| pbp_a_plan_type | string | CMS plan-type code: '18' (453 rows) vs '02' (10 rows). The '02'/orgtype-'01' rows are the all-null B20 placeholder records. |
| pbp_b20_addl_cost | string | Does the enrollee pay EXTRA (above coins/copay) for choosing a higher-priced drug when a cheaper one exists? service_category '20(NMC)'=non-Medicare-covered. 1=Yes,2=No. Entirely NULL in data. |
| pbp_b20_auth | string | Free-text authorization detail. Entirely NULL in this data. |
| pbp_b20_auth_yn | string | Is prior authorization required for Medicare-covered outpatient (Part B) drugs? 1=Yes, 2=No (CMS YN convention). 77 plans=Yes, 288=No, 10 null. |
| pbp_b20_b_coins_max_pct | double |  |
| pbp_b20_b_coins_min_pct | double |  |
| pbp_b20_b_copay_max | double |  |
| pbp_b20_b_min_copay | double |  |
| pbp_b20_bendesc_amo | string |  |
| pbp_b20_bendesc_yn | string |  |
| pbp_b20_chemo_coins_max_pct | double | Max coinsurance % for Part B Chemotherapy/Radiation drugs. Always 20.0 where present. |
| pbp_b20_coins_awpd_mc_pct | double |  |
| pbp_b20_coins_awpf_mc_amt | double |  |
| pbp_b20_coins_awpf_mc_amt_max | double |  |
| pbp_b20_coins_mc_cov | string |  |
| pbp_b20_coins_mc_ehc | string | Multi-select code for WHICH Medicare-covered drug categories carry the coinsurance. Raw concatenated yes/no bitmask string (observed '11' with 20%, '101' with 0%). CMS code legend: position1=Other Part B Drugs, position2=Part B Insulin Drugs, position3=Chemotherapy/Radiation Drugs. Treat as a code string, NOT a number. |
| pbp_b20_coins_mc_pct | double | Coinsurance % for Medicare-covered Part B drugs (dict title: min coins for chemo/radiation). Only 2 distinct non-null values: 20.0 (standard Part B, 77 rows) and 0.0 (2 rows). 79 non-null total; NULL when coins_mc_yn=2. |
| pbp_b20_coins_mc_yn | string | Is there enrollee COINSURANCE for Medicare-COVERED Part B drugs? 1=Yes,2=No. Drives whether the coins_mc_* fields are populated. |
| pbp_b20_coins_mcoacp_mc_amt | double |  |
| pbp_b20_coins_prp_mc_pct | double |  |
| pbp_b20_copay_max_mc_amt | double |  |
| pbp_b20_copay_mc_ehc | string |  |
| pbp_b20_copay_mc_yn | string |  |
| pbp_b20_copay_min_mc_amt | double |  |
| pbp_b20_cost_share_attest | string | Cost-share attestation flag. Entirely NULL in this data. |
| pbp_b20_ded_amt | double |  |
| pbp_b20_ded_cdt | string |  |
| pbp_b20_ded_yn | string |  |
| pbp_b20_grp1_coins_awp_amt_max | double |  |
| pbp_b20_grp1_coins_awpd_pct | double |  |
| pbp_b20_grp1_coins_awpf_amt | double |  |
| pbp_b20_grp1_coins_cov | string |  |
| pbp_b20_grp1_coins_mcoacp_amt | double |  |
| pbp_b20_grp1_coins_pct_drp | double |  |
| pbp_b20_grp1_coins_pct_hmo | double |  |
| pbp_b20_grp1_coins_pct_mo | double |  |
| pbp_b20_grp1_coins_pct_oth | double |  |
| pbp_b20_grp1_coins_prp_pct | double |  |
| pbp_b20_grp1_coins_yn | string |  |
| pbp_b20_grp1_copay_drp_amt | double |  |
| pbp_b20_grp1_copay_hmo_amt | double |  |
| pbp_b20_grp1_copay_mo_amt | double |  |
| pbp_b20_grp1_copay_oth_amt | double |  |
| pbp_b20_grp1_copay_yn | string |  |
| pbp_b20_grp1_drp_days | double |  |
| pbp_b20_grp1_drug_types | string |  |
| pbp_b20_grp1_hmo_days | double |  |
| pbp_b20_grp1_label | string |  |
| pbp_b20_grp1_maxplan_amt_1mth | double |  |
| pbp_b20_grp1_maxplan_amt_1yr | double |  |
| pbp_b20_grp1_maxplan_amt_3mth | double |  |
| pbp_b20_grp1_maxplan_amt_6mth | double |  |
| pbp_b20_grp1_maxplan_amt_oth | double |  |
| pbp_b20_grp1_maxplan_amt_pres | double |  |
| pbp_b20_grp1_maxplan_awpd_pct | double |  |
| pbp_b20_grp1_maxplan_awpf_amt | double |  |
| pbp_b20_grp1_maxplan_cov | string |  |
| pbp_b20_grp1_maxplan_mcoac_amt | double |  |
| pbp_b20_grp1_maxplan_per | string |  |
| pbp_b20_grp1_maxplan_per_d | string |  |
| pbp_b20_grp1_maxplan_prp_pct | double |  |
| pbp_b20_grp1_maxplan_yn | string |  |
| pbp_b20_grp1_maxpln_awp_amt_mx | double |  |
| pbp_b20_grp1_mo_days | double |  |
| pbp_b20_grp1_name | string |  |
| pbp_b20_grp1_oth_days | double |  |
| pbp_b20_grp1_place | string |  |
| pbp_b20_grp1_place_d | string |  |
| pbp_b20_grp2_coins_awp_amt_max | double |  |
| pbp_b20_grp2_coins_awpd_pct | double |  |
| pbp_b20_grp2_coins_awpf_amt | double |  |
| pbp_b20_grp2_coins_cov | string |  |
| pbp_b20_grp2_coins_mcoacp_amt | double |  |
| pbp_b20_grp2_coins_pct_drp | double |  |
| pbp_b20_grp2_coins_pct_hmo | double |  |
| pbp_b20_grp2_coins_pct_mo | double |  |
| pbp_b20_grp2_coins_pct_oth | double |  |
| pbp_b20_grp2_coins_prp_pct | double |  |
| pbp_b20_grp2_coins_yn | string |  |
| pbp_b20_grp2_copay_drp_amt | double |  |
| pbp_b20_grp2_copay_hmo_amt | double |  |
| pbp_b20_grp2_copay_mo_amt | double |  |
| pbp_b20_grp2_copay_oth_amt | double |  |
| pbp_b20_grp2_copay_yn | string |  |
| pbp_b20_grp2_drp_days | double |  |
| pbp_b20_grp2_drug_types | string |  |
| pbp_b20_grp2_hmo_days | double |  |
| pbp_b20_grp2_label | string |  |
| pbp_b20_grp2_maxplan_amt_1mth | double |  |
| pbp_b20_grp2_maxplan_amt_1yr | double |  |
| pbp_b20_grp2_maxplan_amt_3mth | double |  |
| pbp_b20_grp2_maxplan_amt_6mth | double |  |
| pbp_b20_grp2_maxplan_amt_oth | double |  |
| pbp_b20_grp2_maxplan_amt_pres | double |  |
| pbp_b20_grp2_maxplan_awpd_pct | double |  |
| pbp_b20_grp2_maxplan_awpf_amt | double |  |
| pbp_b20_grp2_maxplan_cov | string |  |
| pbp_b20_grp2_maxplan_mcoac_amt | double |  |
| pbp_b20_grp2_maxplan_per | string |  |
| pbp_b20_grp2_maxplan_per_d | string |  |
| pbp_b20_grp2_maxplan_prp_pct | double |  |
| pbp_b20_grp2_maxplan_yn | string |  |
| pbp_b20_grp2_maxpln_awp_amt_mx | double |  |
| pbp_b20_grp2_mo_days | double |  |
| pbp_b20_grp2_name | string |  |
| pbp_b20_grp2_oth_days | double |  |
| pbp_b20_grp2_place | string |  |
| pbp_b20_grp2_place_d | string |  |
| pbp_b20_grp3_coins_awp_amt_max | double |  |
| pbp_b20_grp3_coins_awpd_pct | double |  |
| pbp_b20_grp3_coins_awpf_amt | double |  |
| pbp_b20_grp3_coins_cov | string |  |
| pbp_b20_grp3_coins_mcoacp_amt | double |  |
| pbp_b20_grp3_coins_pct_drp | double |  |
| pbp_b20_grp3_coins_pct_hmo | double |  |
| pbp_b20_grp3_coins_pct_mo | double |  |
| pbp_b20_grp3_coins_pct_oth | double |  |
| pbp_b20_grp3_coins_prp_pct | double |  |
| pbp_b20_grp3_coins_yn | string |  |
| pbp_b20_grp3_copay_drp_amt | double |  |
| pbp_b20_grp3_copay_hmo_amt | double |  |
| pbp_b20_grp3_copay_mo_amt | double |  |
| pbp_b20_grp3_copay_oth_amt | double |  |
| pbp_b20_grp3_copay_yn | string |  |
| pbp_b20_grp3_drp_days | double |  |
| pbp_b20_grp3_drug_types | string |  |
| pbp_b20_grp3_hmo_days | double |  |
| pbp_b20_grp3_label | string |  |
| pbp_b20_grp3_maxplan_amt_1mth | double |  |
| pbp_b20_grp3_maxplan_amt_1yr | double |  |
| pbp_b20_grp3_maxplan_amt_3mth | double |  |
| pbp_b20_grp3_maxplan_amt_6mth | double |  |
| pbp_b20_grp3_maxplan_amt_oth | double |  |
| pbp_b20_grp3_maxplan_amt_pres | double |  |
| pbp_b20_grp3_maxplan_awpd_pct | double |  |
| pbp_b20_grp3_maxplan_awpf_amt | double |  |
| pbp_b20_grp3_maxplan_cov | string |  |
| pbp_b20_grp3_maxplan_mcoac_amt | double |  |
| pbp_b20_grp3_maxplan_per | string |  |
| pbp_b20_grp3_maxplan_per_d | string |  |
| pbp_b20_grp3_maxplan_prp_pct | double |  |
| pbp_b20_grp3_maxplan_yn | string |  |
| pbp_b20_grp3_maxpln_awp_amt_mx | double |  |
| pbp_b20_grp3_mo_days | double |  |
| pbp_b20_grp3_name | string |  |
| pbp_b20_grp3_oth_days | double |  |
| pbp_b20_grp3_place | string |  |
| pbp_b20_grp3_place_d | string |  |
| pbp_b20_grp4_coins_awp_amt_max | double |  |
| pbp_b20_grp4_coins_awpd_pct | double |  |
| pbp_b20_grp4_coins_awpf_amt | double |  |
| pbp_b20_grp4_coins_cov | string |  |
| pbp_b20_grp4_coins_mcoacp_amt | double |  |
| pbp_b20_grp4_coins_pct_drp | double |  |
| pbp_b20_grp4_coins_pct_hmo | double |  |
| pbp_b20_grp4_coins_pct_mo | double |  |
| pbp_b20_grp4_coins_pct_oth | double |  |
| pbp_b20_grp4_coins_prp_pct | double |  |
| pbp_b20_grp4_coins_yn | string |  |
| pbp_b20_grp4_copay_drp_amt | double |  |
| pbp_b20_grp4_copay_hmo_amt | double |  |
| pbp_b20_grp4_copay_mo_amt | double |  |
| pbp_b20_grp4_copay_oth_amt | double |  |
| pbp_b20_grp4_copay_yn | string |  |
| pbp_b20_grp4_drp_days | double |  |
| pbp_b20_grp4_drug_types | string |  |
| pbp_b20_grp4_hmo_days | double |  |
| pbp_b20_grp4_label | string |  |
| pbp_b20_grp4_maxplan_amt_1mth | double |  |
| pbp_b20_grp4_maxplan_amt_1yr | double |  |
| pbp_b20_grp4_maxplan_amt_3mth | double |  |
| pbp_b20_grp4_maxplan_amt_6mth | double |  |
| pbp_b20_grp4_maxplan_amt_oth | double |  |
| pbp_b20_grp4_maxplan_amt_pres | double |  |
| pbp_b20_grp4_maxplan_awpd_pct | double |  |
| pbp_b20_grp4_maxplan_awpf_amt | double |  |
| pbp_b20_grp4_maxplan_cov | string |  |
| pbp_b20_grp4_maxplan_mcoac_amt | double |  |
| pbp_b20_grp4_maxplan_per | string |  |
| pbp_b20_grp4_maxplan_per_d | string |  |
| pbp_b20_grp4_maxplan_prp_pct | double |  |
| pbp_b20_grp4_maxplan_yn | string |  |
| pbp_b20_grp4_maxpln_awp_amt_mx | double |  |
| pbp_b20_grp4_mo_days | double |  |
| pbp_b20_grp4_name | string |  |
| pbp_b20_grp4_oth_days | double |  |
| pbp_b20_grp4_place | string |  |
| pbp_b20_grp4_place_d | string |  |
| pbp_b20_grp5_coins_awp_amt_max | double |  |
| pbp_b20_grp5_coins_awpd_pct | double |  |
| pbp_b20_grp5_coins_awpf_amt | double |  |
| pbp_b20_grp5_coins_cov | string |  |
| pbp_b20_grp5_coins_mcoacp_amt | double |  |
| pbp_b20_grp5_coins_pct_drp | double |  |
| pbp_b20_grp5_coins_pct_hmo | double |  |
| pbp_b20_grp5_coins_pct_mo | double |  |
| pbp_b20_grp5_coins_pct_oth | double |  |
| pbp_b20_grp5_coins_prp_pct | double |  |
| pbp_b20_grp5_coins_yn | string |  |
| pbp_b20_grp5_copay_drp_amt | double |  |
| pbp_b20_grp5_copay_hmo_amt | double |  |
| pbp_b20_grp5_copay_mo_amt | double |  |
| pbp_b20_grp5_copay_oth_amt | double |  |
| pbp_b20_grp5_copay_yn | string |  |
| pbp_b20_grp5_drp_days | double |  |
| pbp_b20_grp5_drug_types | string |  |
| pbp_b20_grp5_hmo_days | double |  |
| pbp_b20_grp5_label | string |  |
| pbp_b20_grp5_maxplan_amt_1mth | double |  |
| pbp_b20_grp5_maxplan_amt_1yr | double |  |
| pbp_b20_grp5_maxplan_amt_3mth | double |  |
| pbp_b20_grp5_maxplan_amt_6mth | double |  |
| pbp_b20_grp5_maxplan_amt_oth | double |  |
| pbp_b20_grp5_maxplan_amt_pres | double |  |
| pbp_b20_grp5_maxplan_awpd_pct | double |  |
| pbp_b20_grp5_maxplan_awpf_amt | double |  |
| pbp_b20_grp5_maxplan_cov | string |  |
| pbp_b20_grp5_maxplan_mcoac_amt | double |  |
| pbp_b20_grp5_maxplan_per | string |  |
| pbp_b20_grp5_maxplan_per_d | string |  |
| pbp_b20_grp5_maxplan_prp_pct | double |  |
| pbp_b20_grp5_maxplan_yn | string |  |
| pbp_b20_grp5_maxpln_awp_amt_mx | double |  |
| pbp_b20_grp5_mo_days | double |  |
| pbp_b20_grp5_name | string |  |
| pbp_b20_grp5_oth_days | double |  |
| pbp_b20_grp5_place | string |  |
| pbp_b20_grp5_place_d | string |  |
| pbp_b20_hi_coins_pct_max | double |  |
| pbp_b20_hi_coins_pct_min | double |  |
| pbp_b20_hi_coins_yn | string |  |
| pbp_b20_hi_copay_amt_max | double |  |
| pbp_b20_hi_copay_amt_min | double |  |
| pbp_b20_hi_copay_yn | string |  |
| pbp_b20_hi_yn | string |  |
| pbp_b20_insulin_coins_max_pct | double |  |
| pbp_b20_insulin_coins_min_pct | double |  |
| pbp_b20_insulin_copay_max | double |  |
| pbp_b20_insulin_copay_min | double |  |
| pbp_b20_maxenr_amt | double |  |
| pbp_b20_maxenr_cdt | string |  |
| pbp_b20_maxenr_per | string |  |
| pbp_b20_maxenr_yn | string |  |
| pbp_b20_maxplan_amt_1mth | double |  |
| pbp_b20_maxplan_amt_1yr | double |  |
| pbp_b20_maxplan_amt_3mth | double |  |
| pbp_b20_maxplan_amt_6mth | double |  |
| pbp_b20_maxplan_amt_cdt_1mth | double |  |
| pbp_b20_maxplan_amt_cdt_1yr | double |  |
| pbp_b20_maxplan_amt_cdt_3mth | double |  |
| pbp_b20_maxplan_amt_cdt_6mth | double |  |
| pbp_b20_maxplan_amt_cdt_oth | double |  |
| pbp_b20_maxplan_amt_oth | double |  |
| pbp_b20_maxplan_awpd_cdt_pct | double |  |
| pbp_b20_maxplan_awpf_cdt_amt | double |  |
| pbp_b20_maxplan_cdt | string |  |
| pbp_b20_maxplan_cov_cdt | string |  |
| pbp_b20_maxplan_grp_unlm_yn | string |  |
| pbp_b20_maxplan_grp_waived | string |  |
| pbp_b20_maxplan_mcoacp_cdt_amt | double |  |
| pbp_b20_maxplan_net_copay_yn | string |  |
| pbp_b20_maxplan_per | string |  |
| pbp_b20_maxplan_per_cdt | string |  |
| pbp_b20_maxplan_per_cdt_d | string |  |
| pbp_b20_maxplan_per_d | string |  |
| pbp_b20_maxplan_prp_cdt_pct | double |  |
| pbp_b20_maxplan_types | string |  |
| pbp_b20_maxplan_unused_yn | string |  |
| pbp_b20_maxplan_yn | string |  |
| pbp_b20_maxpln_awpf_cdt_amt_mx | double |  |
| observed_period | date | Provenance: Jan-1 of report_year (the benefit-year start). Redundant with report_year as the year-grain; equals effective_period_start here. |
| asserted_at | date | Provenance: pipeline load/assert date (2026-05-16 or 2026-05-20). Bookkeeping only, NOT data-meaningful; do not use for recency. |
| effective_period_start | date |  |
| effective_period_end | date |  |
| cms_vintage_sequence | int | Provenance: the Nth PUF release within the report_year (1..4, roughly tracking the quarter). The real 'which snapshot' lineage marker — pair with (report_year,quarter) to choose one snapshot per plan-year. |
| parse_revision | int | Provenance: internal parser revision (1 or 2 here). |
| parser_artifact_hash | string | Provenance: hash of the parser artifact that produced the row. |
| source_url | string | Provenance: the exact CMS PBP zip the row was extracted from (e.g. .../pbp-benefits-2019-q4.zip). Lets you trace each snapshot to its CMS release. |
| sha256_content_hash | string | Provenance: SHA-256 of the source file content for integrity/dedup. |
| pbp_b20_b_coins_min_pct / pbp_b20_b_coins_max_pct |  | Min/max coinsurance % for 'other' Medicare Part B drugs. Range 0-20%. |
| pbp_b20_insulin_coins_min_pct / _max_pct / pbp_b20_insulin_copay_min / _max |  | Cost-sharing for Medicare Part B INSULIN drugs (max coinsurance % / copay $). Largely null in this slice. |
| pbp_b20_copay_mc_yn / pbp_b20_copay_min_mc_amt / pbp_b20_copay_max_mc_amt / pbp_b20_b_min_copay / pbp_b20_b_copay_max |  | COPAY (flat-dollar) alternative to coinsurance for Medicare-covered / other Part B drugs. copay_mc_yn 1=Yes/2=No; copay amounts are 0 non-null in this slice (this data is coinsurance-based, not copay-based). |
| pbp_b20_ded_yn / pbp_b20_ded_amt / pbp_b20_ded_cdt |  | Enrollee deductible for outpatient drugs: flag (1=Yes,2=No, mostly No), dollar amount (entirely NULL here), and combined-deductible-type code. |
| pbp_b20_maxenr_yn / pbp_b20_maxenr_amt / pbp_b20_maxenr_per / pbp_b20_maxenr_cdt |  | Maximum enrollee out-of-pocket for Part B drugs: flag (1=Yes,2=No), amount (only 1 non-null = 0.0), period, and CDT code. Almost always 'No' in this slice. |
| pbp_b20_bendesc_yn / pbp_b20_bendesc_amo |  | Does the plan provide outpatient drugs as a SUPPLEMENTAL (non-Medicare-covered) benefit under Part C? 1=Yes,2=No. bendesc_amo (amount) entirely NULL. |
| pbp_b20_hi_yn / pbp_b20_hi_coins_* / pbp_b20_hi_copay_* |  | HOME INFUSION: does the plan bundle Part D home-infusion drugs as a supplemental benefit (1=Yes,2=No), and its coinsurance %/copay $ min-max. Mostly 'No'/null. |
| pbp_b20_grp1..grp5_* (coins/copay/maxplan/drug_types/days/label/name/place) |  | Up to 5 supplemental-benefit GROUPS, each a wide repeated block describing a Part-C drug benefit group's cost sharing: coinsurance % (by HMO/MO/DRP/OTH delivery channel), copay $ by channel, day limits, drug types covered, plan-maximum benefit caps (1mth/3mth/6mth/1yr/pres/oth), labels and place-of-service. Almost entirely NULL in this sample (the sampled plans use only Medicare-covered cost sharing, no supplemental drug groups). |
| pbp_b20_maxplan_* and pbp_b20_maxplan_*_cdt (amt_1mth/3mth/6mth/1yr/oth, per, types, cov, grp_unlm_yn, grp_waived, net_copay_yn, unused_yn, prp_pct, awpd/awpf) |  | Plan-level maximum-benefit (benefit cap) parameters for the supplemental outpatient-drug benefit, including combined-deductible-type ('_cdt') variants and AWP-discount/MCOAC pricing fields. Almost all NULL in this slice. |
| effective_period_start / effective_period_end |  | Provenance: benefit-year window, Jan-1 to Dec-31 of report_year. effective_period_start is the profiler's temporal column (annual). |

Tools that read it: get_pbp_benefit

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