# MA pbp section b11 dme prosth orth sup

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

Section B11: Durable medical equipment, prosthetics, orthotics, supplies. Per-plan benefit detail (plaintiff use case).

**Grain.** One row per Medicare Advantage / Part C plan benefit package, per PBP report_year, per within-year CMS re-release quarter. The MINIMAL verified-unique key is (contract_id, plan_id, segment_id, report_year, quarter) = exactly 201,488 distinct = the full row count. report_year alone is NOT enough (only 114,175 distinct) because CMS republished the PBP PUF up to 4 times within some years (2018-2020, 2022-2024 have quarters 1-4); segment_id is load-bearing (dropping it gives 191,793, since 5,295 plan-years are split into multiple geographic segments). This is plan-level Part C cost-share DESIGN for the Durable Medical Equipment / Prosthetics / Orthotics / Medical Supplies benefit (PBP Section B-11), not a claims or rate table.

**How to use it.** "What in-network coinsurance % do Medicare Advantage plans charge for DME in 2026?" -> SELECT pbp_b11a_coins_pct_mc, count(*) FROM medicare_silver.pbp_section_b11_dme_prosth_orth_sup WHERE report_year=2026 AND quarter=1 AND pbp_b11a_coins_yn='1' GROUP BY 1 ORDER BY 2 DESC. This returns the distribution of DME coinsurance rates across plans; the dominant value is 20.0% (the Medicare standard), with a long tail of 0% (zero-cost-share plans), 10/15/30%, etc. Always pin report_year AND quarter to a single snapshot.

**Traps.**
- NOT a rate/price table. This is plan benefit DESIGN - what the MA plan charges the ENROLLEE for DME (coinsurance %, copays, deductibles), sourced from CMS PBP PUFs. It contains no provider rates, no claims, no allowed amounts. To get the commercial-to-Medicare cost story you join plan design here to actual DME fee schedules elsewhere.
- GRAIN TRAP: the profiler reports an 18-column superset key (adds maxplan/maxenr benefit-value columns). The TRUE minimal grain is just (contract_id, plan_id, segment_id, report_year, quarter) = 201,488 = row count. report_year alone is NOT unique (114,175) and (contract,plan,seg,effective_period_start) is NOT unique - you MUST include quarter because CMS republished the PBP PUF up to 4x within 2018-2020 & 2022-2024.
- DEPRECATED COLUMN FAMILY: pbp_b11_* (no a/b/c letter) is populated ONLY in report_year 2001 (742 rows) and is 100% NULL for 2002+. Querying it for modern DME cost-share returns nothing. Use pbp_b11a_* (DME), pbp_b11b_* (prosthetics/orthotics), pbp_b11c_* (medical supplies), which are populated 2002-2026.
- NO is_current column and NO snapshot-dedup needed: the natural key already yields one row each, so do NOT add a row_number()/latest filter. But quarter is a RE-RELEASE axis, not coverage-quarter - if you want the canonical annual benefit pin quarter=1 (and the latest cms_vintage_sequence if a year was republished), otherwise a single plan-year can be counted 2-4 times.
- NULLS CARRY MEANING and yn convention is CMS-style: '1'=Yes, '2'=No (strings), NULL=not applicable / not separately captured for that vintage (e.g. pbp_b11a_auth_yn is NULL for 62K older rows even though the plan had an auth rule encoded in the 5-char pbp_b11a_auth string). Treat '2' as an explicit No, not as missing; treat NULL as unknown/legacy.
- segment_id is part of the grain and must not be dropped: 5,295 plan-years are split into multiple geographic segments with different DME benefits. Most rows are segment '0' (single segment) but multi-segment plans ('1'..'N') and empty '' (2001-era) both occur.

| column | type | meaning |
|---|---|---|
| contract_id | string | CMS MA/Part-C contract id (e.g. H0104). 1,972 distinct. Part of grain. Pairs with plan_id. |
| plan_id | string | 3-char plan id within the contract (e.g. '001','005'). 656 distinct. Part of grain. |
| segment_id | string | Plan benefit segment, for plans whose benefits vary by geographic segment. Values '0' (single segment, 181K rows, the norm), '' empty (mostly 2001-era), '1'..'N' for multi-segment plans. LOAD-BEARING in grain: 5,295 plan-years carry >1 segment. Do not drop it. |
| version | double | CMS PBP/bid version number (0-27, double). A snapshot revision indicator, fully determined by the grain (NOT an extra key axis). High versions are rare (version>=10 < 1% of rows). |
| report_year | double | PBP contract/benefit year (2001-2026). The primary time axis. Equals year(effective_period_start). NOT unique per plan by itself - see quarter. |
| quarter | double | Within-year CMS RE-RELEASE quarter (1-4), NOT a calendar quarter of coverage. Most years are quarter=1 only; 2018-2020 & 2022-2024 were republished mid-year so carry quarters 2/3/4. A plan-year can appear up to 4 times, once per released quarter. Part of grain - required for uniqueness. |
| bid_id | string | CMS bid identifier. NULL for older years (2001-era samples show null); present in recent files. Not required for grain uniqueness (grain holds without it). |
| orgtype | string | MA organization type code. '01' dominates (177K, local CCP/HMO-PPO); '08','04','11','06','05' are other org types (PFFS, MSA, cost, regional, etc.). String code, CMS PBP codebook. |
| pbp_a_ben_cov | string | Plan benefit-coverage indicator from Section A. '1'=standard (196K), '2'=alternative (4K), NULL (342, the 2001/no-URL rows). Carries meaning when null (legacy rows). |
| pbp_a_plan_type | string | Plan type code (string): '01' local HMO (101K), '04' local PPO (56K), '02' (20K), '20' MSA, '09','31','18','48' etc. CMS PBP plan-type codebook. Describes plan structure. |
| pbp_b11_auth | string |  |
| pbp_b11_auth_pos | string |  |
| pbp_b11_coins_cov__pos | string |  |
| pbp_b11_coins_cov_mc | string |  |
| pbp_b11_coins_pct_disc | double |  |
| pbp_b11_coins_pct_mc | double |  |
| pbp_b11_coins_pct_mcmax | double |  |
| pbp_b11_coins_pct_pos | double |  |
| pbp_b11_coins_pct_prpdisc_pos | double |  |
| pbp_b11_coins_pctmax_pos | double |  |
| pbp_b11_coins_yesno | string |  |
| pbp_b11_coins_yesno_pos | string |  |
| pbp_b11_copay_amt_pos | double |  |
| pbp_b11_copay_amtmax_pos | double |  |
| pbp_b11_copay_mc_amt | double |  |
| pbp_b11_copay_mcmax_amt | double |  |
| pbp_b11_copay_yesno | string |  |
| pbp_b11_copay_yesno_pos | string |  |
| pbp_b11_ded_amt | double |  |
| pbp_b11_ded_amt_pos | double |  |
| pbp_b11_ded_yesno | string |  |
| pbp_b11_ded_yesno_pos | string |  |
| pbp_b11_maxenr_amt | double |  |
| pbp_b11_maxenr_amt_pos | double |  |
| pbp_b11_maxenr_per | string |  |
| pbp_b11_maxenr_yesno | string |  |
| pbp_b11_maxenr_yn_pos | string |  |
| pbp_b11_maxplan_yesno_pos | string |  |
| pbp_b11_maxpln_amt_pos | double |  |
| pbp_b11_maxpln_cov_pos | string |  |
| pbp_b11_maxpln_pct_prpdisc_pos | double |  |
| pbp_b11_maxpln_per_pos | string |  |
| pbp_b11a_auth | string |  |
| pbp_b11a_auth_yn | string |  |
| pbp_b11a_coins_cov_mc | string |  |
| pbp_b11a_coins_pct_disc | double |  |
| pbp_b11a_coins_pct_mc | double |  |
| pbp_b11a_coins_pct_mcmax | double |  |
| pbp_b11a_coins_yn | string |  |
| pbp_b11a_copay_mc_amt | double |  |
| pbp_b11a_copay_mcmax_amt | double |  |
| pbp_b11a_copay_yn | string |  |
| pbp_b11a_ded_amt | double |  |
| pbp_b11a_ded_yn | string |  |
| pbp_b11a_dme_pref_vend_man_yn | string |  |
| pbp_b11a_esrd_coins | double |  |
| pbp_b11a_esrd_maxamt | double |  |
| pbp_b11a_maxenr_amt | double |  |
| pbp_b11a_maxenr_per | string |  |
| pbp_b11a_maxenr_per_d | string |  |
| pbp_b11a_maxenr_yn | string |  |
| pbp_b11a_mm_add_service_other1 | string |  |
| pbp_b11a_mm_add_service_other2 | string |  |
| pbp_b11a_mm_auth | string |  |
| pbp_b11a_mm_auth_yn | string |  |
| pbp_b11a_mm_coins_dme_max | double |  |
| pbp_b11a_mm_coins_dme_min | double |  |
| pbp_b11a_mm_coins_other1_max | double |  |
| pbp_b11a_mm_coins_other1_min | double |  |
| pbp_b11a_mm_coins_other2_max | double |  |
| pbp_b11a_mm_coins_other2_min | double |  |
| pbp_b11a_mm_coins_services | string |  |
| pbp_b11a_mm_coins_yn | string |  |
| pbp_b11a_mm_copay_dme_max | double |  |
| pbp_b11a_mm_copay_dme_min | double |  |
| pbp_b11a_mm_copay_other1_max | double |  |
| pbp_b11a_mm_copay_other1_min | double |  |
| pbp_b11a_mm_copay_other2_max | double |  |
| pbp_b11a_mm_copay_other2_min | double |  |
| pbp_b11a_mm_copay_services | string |  |
| pbp_b11a_mm_copay_yn | string |  |
| pbp_b11a_mm_maxplan_amt | double |  |
| pbp_b11a_mm_maxplan_per | string |  |
| pbp_b11a_mm_maxplan_per_d | string |  |
| pbp_b11a_mm_maxplan_yn | string |  |
| pbp_b11a_mm_nmc_yn | string |  |
| pbp_b11a_mm_refer_yn | string |  |
| pbp_b11a_mm_services | string |  |
| pbp_b11a_pffs_coins | double |  |
| pbp_b11a_pffs_maxamt | double |  |
| pbp_b11b_auth | string |  |
| pbp_b11b_auth_pos | string |  |
| pbp_b11b_auth_yn | string |  |
| pbp_b11b_coins_cov__pos | string |  |
| pbp_b11b_coins_cov_mc | string |  |
| pbp_b11b_coins_cov_mcms | string |  |
| pbp_b11b_coins_ehc | string |  |
| pbp_b11b_coins_pct_disc | double |  |
| pbp_b11b_coins_pct_disc_ms | double |  |
| pbp_b11b_coins_pct_mc | double |  |
| pbp_b11b_coins_pct_mcmax | double |  |
| pbp_b11b_coins_pct_mcms_max | double |  |
| pbp_b11b_coins_pct_mcms_min | double |  |
| pbp_b11b_coins_pct_pos | double |  |
| pbp_b11b_coins_pct_prpdisc_pos | double |  |
| pbp_b11b_coins_pctmax_pos | double |  |
| pbp_b11b_coins_yesno | string |  |
| pbp_b11b_coins_yesno_pos | string |  |
| pbp_b11b_coins_yn | string |  |
| pbp_b11b_copay_amt_pos | double |  |
| pbp_b11b_copay_amtmax_pos | double |  |
| pbp_b11b_copay_ehc | string |  |
| pbp_b11b_copay_mcmax_amt | double |  |
| pbp_b11b_copay_mcmin_amt | double |  |
| pbp_b11b_copay_mcms_max_amt | double |  |
| pbp_b11b_copay_mcms_min_amt | double |  |
| pbp_b11b_copay_yesno | string |  |
| pbp_b11b_copay_yesno_pos | string |  |
| pbp_b11b_copay_yn | string |  |
| pbp_b11b_ded_amt | double |  |
| pbp_b11b_ded_amt_pos | double |  |
| pbp_b11b_ded_yesno | string |  |
| pbp_b11b_ded_yesno_pos | string |  |
| pbp_b11b_ded_yn | string |  |
| pbp_b11b_esrd_coins | double |  |
| pbp_b11b_esrd_maxamtb | double |  |
| pbp_b11b_maxenr_amt | double |  |
| pbp_b11b_maxenr_amt_pos | double |  |
| pbp_b11b_maxenr_cost_type | string |  |
| pbp_b11b_maxenr_per | string |  |
| pbp_b11b_maxenr_per_d | string |  |
| pbp_b11b_maxenr_yesno | string |  |
| pbp_b11b_maxenr_yn | string |  |
| pbp_b11b_maxenr_yn_pos | string |  |
| pbp_b11b_maxplan_yesno_pos | string |  |
| pbp_b11b_maxpln_amt_pos | double |  |
| pbp_b11b_maxpln_cov_pos | string |  |
| pbp_b11b_maxpln_pct_prpdis_pos | double |  |
| pbp_b11b_maxpln_per_pos | string |  |
| pbp_b11b_mm_add_service_other1 | string |  |
| pbp_b11b_mm_auth | string |  |
| pbp_b11b_mm_auth_yn | string |  |
| pbp_b11b_mm_coins_pct | double |  |
| pbp_b11b_mm_coins_yn | string |  |
| pbp_b11b_mm_copay_amt | double |  |
| pbp_b11b_mm_copay_yn | string |  |
| pbp_b11b_mm_maxplan_amt | double |  |
| pbp_b11b_mm_maxplan_per | string |  |
| pbp_b11b_mm_maxplan_per_d | string |  |
| pbp_b11b_mm_maxplan_yn | string |  |
| pbp_b11b_mm_nmc_yn | string |  |
| pbp_b11b_mm_refer_yn | string |  |
| pbp_b11b_pffs_coins | double |  |
| pbp_b11b_pffs_maxamtb | double |  |
| pbp_b11c_auth | string |  |
| pbp_b11c_auth_yn | string |  |
| pbp_b11c_coins_cov_mc | string |  |
| pbp_b11c_coins_dtsi_mcmax_pct | double |  |
| pbp_b11c_coins_dtsi_mcmin_pct | double |  |
| pbp_b11c_coins_ehc | string |  |
| pbp_b11c_coins_pct_disc | double |  |
| pbp_b11c_coins_pct_mc | double |  |
| pbp_b11c_coins_pct_mcmax | double |  |
| pbp_b11c_coins_pct_mcmin | double |  |
| pbp_b11c_coins_yn | string |  |
| pbp_b11c_copay_dtsi_mcmax_amt | double |  |
| pbp_b11c_copay_dtsi_mcmin_amt | double |  |
| pbp_b11c_copay_ehc | string |  |
| pbp_b11c_copay_mcmax_amt | double |  |
| pbp_b11c_copay_mcmin_amt | double |  |
| pbp_b11c_copay_yn | string |  |
| pbp_b11c_ded_amt | double |  |
| pbp_b11c_ded_yn | string |  |
| pbp_b11c_dme_limit_manufact_yn | string |  |
| pbp_b11c_maxenr_amt | double |  |
| pbp_b11c_maxenr_cost_type | string |  |
| pbp_b11c_maxenr_per | string |  |
| pbp_b11c_maxenr_per_d | string |  |
| pbp_b11c_maxenr_yn | string |  |
| observed_period | date | Date the benefit period was observed (= effective_period_start, 2001-01-01 .. 2026-01-01). Provenance date axis. |
| asserted_at | date | Pipeline assertion/load date. Exactly TWO values: 2026-05-16 (100,054 rows, parse_revision=1) and 2026-05-20 (101,434 rows, parse_revision=2). These two parse batches partition the table with NO overlap (they loaded different plan-year-quarter snapshots), so this is NOT within-grain re-assertion. |
| effective_period_start | date |  |
| effective_period_end | date |  |
| cms_vintage_sequence | int | Integer 1-4 that tracks the within-year release ordinal (maps to quarter: 1=Q1...4=Q4 release). NOT a correction/restatement counter. |
| parse_revision | int | Parser batch number (1 or 2). 1 -> asserted_at 2026-05-16; 2 -> asserted_at 2026-05-20. Provenance only; not a grain axis. |
| parser_artifact_hash | string |  |
| source_url | string |  |
| sha256_content_hash | string |  |
| pbp_b11c3_coins_max_pct | double |  |
| pbp_b11c3_coins_min_pct | double |  |
| pbp_b11c3_copay_max_amt | double |  |
| pbp_b11c3_copay_min_amt | double |  |
| pbp_b11_* (no letter suffix) |  | DEPRECATED 2001-only combined DME layout (pbp_b11_auth, pbp_b11_coins_*, pbp_b11_copay_*, pbp_b11_ded_*, pbp_b11_maxenr_*, pbp_b11_maxpln_*). Populated ONLY in report_year 2001 (742 rows); 100% NULL for 2002+. Do NOT use for modern DME cost-share - use b11a/b/c. |
| pbp_b11a_* (DME sub-benefit) |  | Durable Medical Equipment cost-share design, populated 2002-2026. Key fields: pbp_b11a_coins_yn (1=Yes/2=No, coinsurance applies), pbp_b11a_coins_pct_mc (in-network DME coinsurance %, dominant 20.0, range 0-50, avg ~17.7 - this is real cost data), pbp_b11a_copay_yn / pbp_b11a_copay_mc_amt (copay $, 0-200), pbp_b11a_ded_yn / pbp_b11a_ded_amt (deductible $, 0-500), pbp_b11a_auth_yn (prior auth: 1=Yes 130K, 2=No 9K, NULL 62K), pbp_b11a_maxenr_amt/_per (max-enrollee OOP cap & period), pbp_b11a_esrd_coins, pbp_b11a_pffs_coins. The b11a_mm_* family = optional supplemental (Medicare-uncovered, non-Medicare-covered) DME/other-item cost-share with min/max coins & copay tiers (mostly NULL). |
| pbp_b11b_* (Prosthetics/Orthotics sub-benefit) |  | Prosthetics & medical supplies / orthotics cost-share, populated 2002-2026 in lockstep with b11a. Same shape as b11a: coins_yn, coins_pct_mc, copay_*, ded_*, auth_yn, maxenr_*, esrd, plus _ms / _mcms variants (medical-supply split) and b11b_mm_* supplemental tier. |
| pbp_b11c_* (Medical Supplies sub-benefit) |  | Diabetes/medical supplies cost-share, populated 2002-2026 in lockstep with b11a/b. Fields: coins_yn, coins_pct_mc(/min/max), copay_mc*_amt, ded_yn/amt, auth_yn, dme_limit_manufact_yn (network/manufacturer limit), maxenr_*, plus dtsi (diabetes testing supplies/insulin) min/max coins & copay fields. |
| *_pos columns |  | Point-Of-Service / out-of-network counterparts of the in-network cost-share fields (e.g. pbp_b11a... none; mostly on parent pbp_b11_*_pos and b11b_*_pos). Largely NULL except for plans with an OON benefit. Mirror the in-network fields for the OON side. |
| *_yn / *_yesno |  | CMS boolean convention: '1'=Yes, '2'=No (string), NULL=not captured/not applicable for that vintage. Applies to all coins_yn, copay_yn, ded_yn, auth_yn, maxenr_yn, refer_yn flags. |
| effective_period_start / effective_period_end |  | Benefit-year coverage window, always Jan 1 - Dec 31 of report_year (e.g. 2005-01-01 .. 2005-12-31). Annual. effective_period_start is the canonical time column (26 distinct years). |
| parser_artifact_hash / sha256_content_hash / source_url |  | Provenance: source_url is the CMS PBP zip (one per report_year, or per year-quarter for republished years, e.g. pbp-benefits-2024-quarter-4.zip; 40 distinct URLs = 40 snapshots). Hashes pin the extractor build and source-file content. |

Tools that read it: get_pbp_benefit

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