Medicare Advantage, Part D, Medicaid
MA pbp section b12 renal dialysis
medicare_silver.pbp_section_b12_renal_dialysis·partial·silver·annual·Medicare Advantage Plan Benefit Packages (PBP)Rows
N/A
Columns
52
History
2001 (report_year 2001 / effective_period_start 2001-01-01) to 2026 (report_year 2026 / effective_period_start 2026-01-01)
Card
yesgrain, traps, filters
Typed tools
1
What it is
- 1CMS Medicare Advantage Plan Benefit Package (PBP) Section B-12 — the member cost-sharing design for renal dialysis (coinsurance %, copay $, deductible, max-enrollee-cost, prior-auth and referral rules) for every MA/Part C plan, as filed in the quarterly PBP benefit files.
- 2It is benefit-design / cost-SHARE reference data (what the member pays), used to compare Medicare Advantage dialysis out-of-pocket structures across plans and years."
Grain
| Key | Grain |
|---|---|
contract_idplan_idsegment_idreport_yearquarter |
|
How to read it
- 1To get each MA plan's latest renal-dialysis coinsurance for the 2026 benefit year (deduping the quarterly snapshots to the newest vintage): SELECT contract_id, plan_id, segment_id, pbp_b12_coins_pct_mc, COALESCE(pbp_b12_coins_yn, pbp_b12_coins_yesno) AS charges_coins FROM pbp_section_b12_renal_dialysis WHERE report_year=2026 AND quarter=(SELECT MAX(quarter) FROM pbp_section_b12_renal_dialysis WHERE report_year=2026).
- 2Answers: 'what coinsurance % does each Medicare Advantage plan charge its members for renal dialysis in 2026?' (most plans = 20%, the standard Medicare cost share)."
Traps
- 1GRAIN IS NOT bid_id-based. The profiler reports an 8-column superset; the TRUE minimal key is just 5 columns: (contract_id, plan_id, segment_id, report_year, quarter) = 201,488 distinct = exact row count (verified 0 dups). bid_id, pbp_a_plan_type, effective_period_start, observed_period are all redundant. bid_id is additionally NULL for every row 2001-2006, so it cannot be a key.
- 2NO is_current / no snapshot dedup. This is a quarterly-vintage PANEL: the SAME plan-year is re-published each quarter and ALL quarters are kept (2023 alone has 4 copies = 31,005 rows for ~7,766 bids). quarter == cms_vintage_sequence. To get one row per plan-year you MUST pick a quarter yourself (e.g. MAX(quarter) per report_year, or filter quarter=1). Pre-2018 years only have Q1; 2018+ have 2-4 quarters.
- 3Legacy/current Yes-No column PAIRS. Cost-structure switches exist in two mutually-exclusive encodings: pbp_b12_coins_yn (modern) vs pbp_b12_coins_yesno (pre-~2005), and likewise for copay/ded/maxenr. They never co-populate — you MUST COALESCE(yn, yesno) to read the full 2001-2026 history. 1=Yes, 2=No throughout.
- 4NULL cost fields mean 'not applicable / not filed', not zero. ~10,199 rows have NULL across coins_yn/copay_yn/ded_yn/maxenr_yn (and pbp_b12_sep_cost_yn is NULL for 188K rows because it was added in later CMS schema years). Do not coerce these NULLs to 0% or $0 — treat as unknown/section-not-applicable. Headline cost = pbp_b12_coins_pct_mc (median 20.0 = standard Medicare 20% coinsurance); copay is rare (only 9,672 rows).
- 5In-area vs out-of-area suffix confusion. Two parallel families exist: the POPULATED area-split fields are the *_mc_ia / *_mc_oa forms (~5,442 / 4,791 rows). The similarly-named *_ia_mc / *_oa_mc forms are near-empty legacy variants (~63 rows). Use *_pct_mc as the default, and *_pct_mc_ia / *_pct_mc_oa only for the minority of plans that vary cost by service area. pbp_b12_auth is a positional 5-digit BITMASK string, not free text.
- 6Provenance dates are not benefit dates. asserted_at (2026-05-16..20) is the Vlada load date; filter by report_year / effective_period_start for the benefit year. orgtype and pbp_a_plan_type are coded CMS values (decode via the PBP data dictionary: plan_type '01'=HMO, '04'=local PPO, '02'=HMO-POS, '20'=PFFS, etc.); they are carried-down Section-A attributes, not part of the grain.
Columns (52)
| Column | Type | Meaning |
|---|---|---|
contract_id | string | CMS Medicare Advantage/Part C contract ID (e.g. 'H0028'). 1,972 distinct. Part of the grain. Joins to plan/enrollment/Stars tables. Letter prefix indicates org type (H=local MA, R=regional, etc.). |
plan_id | string | Plan benefit package ID within the contract, zero-padded 3-char string (e.g. '001','017'). 656 distinct values but only unique WITHIN a contract. Part of the grain. |
segment_id | string | Plan segment ID, string (e.g. '0'). 27 distinct. Most plans are segment '0'; segments split a PBP by service-area region. Part of the grain. |
version | double | CMS PBP-software bid version number that generated this record (double, 0-27). NOT a grain dimension and NOT a snapshot/revision selector — verified 0 grain-keys carry more than one version. A per-bid attribute; ignore for dedup. |
report_year | double | Contract/benefit year the bid applies to (double, 2001-2026). Part of the minimal grain. Equivalent 1:1 to effective_period_start year and observed_period year. |
quarter | double | CMS quarterly re-release of the PBP file (double, 1-4). Part of the grain. This is a SNAPSHOT axis: the same plan-year is re-published across quarters and ALL quarters are retained (e.g. 2023 has 4 quarterly copies of each bid). Older years (<=2017) only have Q1. Equals cms_vintage_sequence. |
bid_id | string | Concatenated key contract_plan_segment (e.g. 'H0028_007_0'). TRAP: NULL for all rows 2001-2006 (~7,316 rows) because CMS did not emit it pre-2007. Do NOT use as a primary key. Redundant with contract_id+plan_id+segment_id when present. |
orgtype | string | CMS organization-type code (string). '01'=local CCP/HMO-PPO (88% of rows, 177,737), '08'=PFFS, '04'=regional PPO, '11'=MSA/cost, '06','05','02' other. Describes the carrier's organizational form. |
pbp_a_ben_cov | string | Section-A benefit-coverage flag (string): '1'=plan offers this benefit category (196,773 rows), '2'=not offered (4,373), NULL (342). Carried from the PBP Section A header; loosely associated with whether the B12 cost fields are populated. |
pbp_a_plan_type | string | CMS plan-type code (string): '01'=HMO (101,510), '04'=local PPO (55,909), '02'=HMO-POS (20,097), '20'=PFFS, '09'=regional PPO, '31'=MSA, '18'=1876 cost, '48'=PDP-like/other. Carried from Section A; describes the product. |
pbp_b12_auth | string | 5-digit BITMASK string (e.g. '01000','00111') flagging which renal-dialysis sub-services require prior authorization; NOT free text. NULL where not applicable (61,759 rows). Decode positionally against the CMS PBP B12 data dictionary. |
pbp_b12_auth_yn | string | Does any renal-dialysis service require prior authorization? '1'=Yes (77,101), '2'=No (62,628), NULL (61,759). 1/2 = Yes/No throughout this table. |
pbp_b12_coins_cov_ia_mc | string | Coinsurance-coverage descriptor for in-area Medicare-covered dialysis (string). Almost entirely NULL in this table; a rarely-used variant field. Treat as edge-case detail, not a primary signal. |
pbp_b12_coins_cov_mc | string | Coinsurance-coverage descriptor for Medicare-covered renal dialysis (string). Mostly NULL; the populated cost signal lives in the *_pct_mc numeric fields, not this descriptor. |
pbp_b12_coins_cov_mc_ia | string | Coinsurance coverage descriptor, Medicare-covered / in-area split (string). Sparse. Companion descriptor to pbp_b12_coins_pct_mc_ia. |
pbp_b12_coins_cov_mc_oa | string | Coinsurance coverage descriptor, Medicare-covered / out-of-area split (string). Sparse. Companion to pbp_b12_coins_pct_mc_oa. |
pbp_b12_coins_cov_oa_mc | string | Coinsurance coverage descriptor, out-of-area Medicare-covered (string). Nearly always NULL; rarely-used variant. |
pbp_b12_coins_max_pct_mc | double | Maximum coinsurance PERCENT for Medicare-covered dialysis (double). 152,283 non-null. Tracks pbp_b12_coins_pct_mc closely; the ceiling when a plan expresses a range. Median ~20. |
pbp_b12_coins_pct_ia_mc | double | Coinsurance percent, in-area variant (double). Extremely sparse (63 non-null) — legacy/edge field. Use *_pct_mc or *_pct_mc_ia instead. |
pbp_b12_coins_pct_mc | double | PRIMARY cost field: coinsurance PERCENT the member pays for Medicare-covered renal dialysis (double). 155,043 non-null; median = 20.0 (the standard Medicare 20% cost share), range 0-100. This is the headline renal-dialysis cost-share number. |
pbp_b12_coins_pct_mc_ia | double | Coinsurance percent for the IN-AREA (in-network service-area) split of Medicare-covered dialysis (double). 5,442 non-null — used by a minority of plans that vary cost by area. Overrides pbp_b12_coins_pct_mc for those plans. |
pbp_b12_coins_pct_mc_oa | double | Coinsurance percent for the OUT-OF-AREA split of Medicare-covered dialysis (double). 5,442 non-null, pairs with *_mc_ia. The out-of-network-area cost share. |
pbp_b12_coins_pct_oa_mc | double | Coinsurance percent, out-of-area variant (double). Extremely sparse (63 non-null) — legacy/edge field, distinct from the *_mc_oa field which is the populated one. |
pbp_b12_coins_yesno | string | LEGACY (pre-~2005) coinsurance Yes/No flag (string '1'/'2'). Populated only for ~742 old rows where pbp_b12_coins_yn is NULL. GOTCHA: COALESCE with pbp_b12_coins_yn to read the full history — the two never co-populate. |
pbp_b12_coins_yn | string | Current coinsurance Yes/No switch (string): '1'=plan charges coinsurance for dialysis (160,485), '2'=No (30,804), NULL (10,199). The main 'does this plan use coinsurance' flag for modern years. |
pbp_b12_copay_ia_mc_amt | double | Copay dollar amount, in-area variant (double). Very sparse (423 non-null) — legacy/edge field. |
pbp_b12_copay_mc_amt | double | PRIMARY copay field: dollar copay the member pays per dialysis service, Medicare-covered (double). Only 9,672 non-null (most plans use coinsurance, not copay); median ~$2.68, max $600. Read alongside pbp_b12_copay_yn. |
pbp_b12_copay_mc_amt_ia | double | Copay dollar amount for the IN-AREA split (double). 4,791 non-null. Area-specific copay override paired with *_amt_oa. |
pbp_b12_copay_mc_amt_oa | double | Copay dollar amount for the OUT-OF-AREA split (double). 4,791 non-null, pairs with *_amt_ia. |
pbp_b12_copay_mc_max_amt | double | Maximum copay dollar amount for Medicare-covered dialysis (double). 8,795 non-null. Ceiling when a plan expresses a copay range. |
pbp_b12_copay_oa_mc_amt | double | Copay amount, out-of-area variant (double). Very sparse (423 non-null) — legacy/edge field, distinct from the populated *_amt_oa field. |
pbp_b12_copay_yesno | string | LEGACY copay Yes/No flag (string '1'/'2'); populated only for a small set of old rows where pbp_b12_copay_yn is NULL. COALESCE with pbp_b12_copay_yn for full history. |
pbp_b12_copay_yn | string | Current copay Yes/No switch (string): '2'=No copay (176,831, the majority — plans favor coinsurance), '1'=Yes (14,458), NULL (10,199). |
pbp_b12_ded_amt | double | Deductible dollar amount specific to renal dialysis (double). Almost always NULL — only ~69 plans (ded_yn='1') charge a dialysis-specific deductible. |
pbp_b12_ded_yesno | string | LEGACY deductible Yes/No flag (string). Sparse; COALESCE with pbp_b12_ded_yn for old years. |
pbp_b12_ded_yn | string | Does the plan charge a deductible for renal dialysis? '2'=No (191,220, essentially all plans), '1'=Yes (only 69), NULL (10,199). |
pbp_b12_maxenr_amt | double | Maximum enrollee out-of-pocket dollar amount for renal dialysis (double). Almost entirely NULL — only ~44 plans set a dialysis-specific max. |
pbp_b12_maxenr_per | string | Period code for the max-enrollee-cost cap (string). When set (maxenr_yn='1'), observed value '3'. Decode against CMS period codes (e.g. per-year). Almost always NULL. |
pbp_b12_maxenr_per_d | string | Free-text/description of the max-enrollee period (string). Observed NULL even when maxenr_per='3'. Rarely populated. |
pbp_b12_maxenr_yesno | string | LEGACY max-enrollee-cost Yes/No flag (string). Sparse; COALESCE with maxenr_yn. |
pbp_b12_maxenr_yn | string | Does the plan set a maximum enrollee out-of-pocket for renal dialysis? '2'=No (191,245, virtually all), '1'=Yes (only 44), NULL (10,199). |
pbp_b12_refer_yn | string | Is a referral required for renal dialysis? '2'=No (141,251), '1'=Yes (47,648), NULL (12,589). 1/2=Yes/No. |
pbp_b12_sep_cost_yn | string | Does dialysis have a SEPARATE cost-share structure (vs folded into general benefits)? Mostly NULL (188,366 — field added in later years), '2'=No (11,140), '1'=Yes (1,982). |
observed_period | date | Vlada provenance: the benefit period this snapshot describes (date), always Jan-1 of report_year. 1:1 with report_year — redundant as a grain column. |
asserted_at | date | Vlada provenance: ingestion/load date into the silver layer (date). All rows loaded 2026-05-16 to 2026-05-20. Not a CMS field; do not use for benefit-year filtering. |
effective_period_start | date | Vlada provenance: benefit-year start date (date), Jan-1 of report_year. Range 2001-01-01 to 2026-01-01. Redundant with report_year. |
effective_period_end | date | Vlada provenance: benefit-year end date (date), Dec-31 of report_year. Redundant with report_year. |
cms_vintage_sequence | int | Snapshot sequence number within a report_year (int 1-4) = the quarter. EQUALS the quarter column (1=Q1...4=Q4). Confirms multiple quarterly vintages per year are all retained; not an is_current selector. |
parse_revision | int | Vlada parser revision that produced the row (int, 1 or 2). 100,054 rows at rev 1, rest at rev 2. Pipeline-internal; not a grain dimension and not a row-supersession flag. |
parser_artifact_hash | string | SHA-256 of the parser code/config artifact (string). Provenance/lineage for reproducibility; same hash shared across a load batch. |
source_url | string | CMS source ZIP the row was extracted from (string), e.g. 'https://www.cms.gov/files/zip/pbp-benefits-2023-quarter-3.zip'. Encodes year+quarter; the raw-substrate provenance link. |
sha256_content_hash | string | SHA-256 of the source file content (string). Integrity/dedup hash of the downloaded CMS ZIP; shared by all rows from the same file. |
Query it
describe_data_source(source_fqn="medicare_silver.pbp_section_b12_renal_dialysis") # the card, live query_substrate(sql="SELECT * FROM medicare_silver.pbp_section_b12_renal_dialysis WHERE contract_id = '<value>' AND plan_id = '<value>' AND segment_id = '<value>' AND report_year = '<value>' AND quarter = '<value>' LIMIT 100")
| Item | Value |
|---|---|
| Typed tools that read it | get_pbp_benefit |
| Identity key | contract_id |
| Join | how_to_join(source_fqn="medicare_silver.pbp_section_b12_renal_dialysis") |
| Raw door | Athena (read-only via query_substrate): medicare_silver.pbp_section_b12_renal_dialysis |
| Note | Grain-governed; live in Glue / query_substrate. Source family pbp_benefits. |
This page as markdown: /docs-md/data/medicare_silver_pbp_section_b12_renal_dialysis.md · every page in one file: /llms-full.txt