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

  1. 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.
  2. 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

KeyGrain
contract_idplan_idsegment_idreport_yearquarter
  1. 1One row per Medicare Advantage plan-benefit-package per quarterly CMS PBP vintage: the minimal verified key is (contract_id, plan_id, segment_id, report_year, quarter), which yields exactly 201,488 distinct combinations = the full row count (0 duplicates).
  2. 2Each row is one plan's renal-dialysis cost-sharing design as filed in one quarterly PBP release of one contract year.

How to read it

  1. 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).
  2. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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).
  5. 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.
  6. 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)

ColumnTypeMeaning
contract_idstringCMS 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_idstringPlan 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_idstringPlan 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.
versiondoubleCMS 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_yeardoubleContract/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.
quarterdoubleCMS 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_idstringConcatenated 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.
orgtypestringCMS 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_covstringSection-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_typestringCMS 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_authstring5-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_ynstringDoes 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_mcstringCoinsurance-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_mcstringCoinsurance-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_iastringCoinsurance coverage descriptor, Medicare-covered / in-area split (string). Sparse. Companion descriptor to pbp_b12_coins_pct_mc_ia.
pbp_b12_coins_cov_mc_oastringCoinsurance coverage descriptor, Medicare-covered / out-of-area split (string). Sparse. Companion to pbp_b12_coins_pct_mc_oa.
pbp_b12_coins_cov_oa_mcstringCoinsurance coverage descriptor, out-of-area Medicare-covered (string). Nearly always NULL; rarely-used variant.
pbp_b12_coins_max_pct_mcdoubleMaximum 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_mcdoubleCoinsurance 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_mcdoublePRIMARY 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_iadoubleCoinsurance 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_oadoubleCoinsurance 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_mcdoubleCoinsurance 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_yesnostringLEGACY (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_ynstringCurrent 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_amtdoubleCopay dollar amount, in-area variant (double). Very sparse (423 non-null) — legacy/edge field.
pbp_b12_copay_mc_amtdoublePRIMARY 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_iadoubleCopay 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_oadoubleCopay dollar amount for the OUT-OF-AREA split (double). 4,791 non-null, pairs with *_amt_ia.
pbp_b12_copay_mc_max_amtdoubleMaximum 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_amtdoubleCopay amount, out-of-area variant (double). Very sparse (423 non-null) — legacy/edge field, distinct from the populated *_amt_oa field.
pbp_b12_copay_yesnostringLEGACY 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_ynstringCurrent 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_amtdoubleDeductible dollar amount specific to renal dialysis (double). Almost always NULL — only ~69 plans (ded_yn='1') charge a dialysis-specific deductible.
pbp_b12_ded_yesnostringLEGACY deductible Yes/No flag (string). Sparse; COALESCE with pbp_b12_ded_yn for old years.
pbp_b12_ded_ynstringDoes 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_amtdoubleMaximum enrollee out-of-pocket dollar amount for renal dialysis (double). Almost entirely NULL — only ~44 plans set a dialysis-specific max.
pbp_b12_maxenr_perstringPeriod 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_dstringFree-text/description of the max-enrollee period (string). Observed NULL even when maxenr_per='3'. Rarely populated.
pbp_b12_maxenr_yesnostringLEGACY max-enrollee-cost Yes/No flag (string). Sparse; COALESCE with maxenr_yn.
pbp_b12_maxenr_ynstringDoes 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_ynstringIs 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_ynstringDoes 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_perioddateVlada 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_atdateVlada 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_startdateVlada 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_enddateVlada provenance: benefit-year end date (date), Dec-31 of report_year. Redundant with report_year.
cms_vintage_sequenceintSnapshot 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_revisionintVlada 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_hashstringSHA-256 of the parser code/config artifact (string). Provenance/lineage for reproducibility; same hash shared across a load batch.
source_urlstringCMS 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_hashstringSHA-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")
ItemValue
Typed tools that read itget_pbp_benefit
Identity keycontract_id
Joinhow_to_join(source_fqn="medicare_silver.pbp_section_b12_renal_dialysis")
Raw doorAthena (read-only via query_substrate): medicare_silver.pbp_section_b12_renal_dialysis
NoteGrain-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