Medicare Advantage, Part D, Medicaid
MA pbp section b2 snf
medicare_silver.pbp_section_b2_snf·partial·silver·annual·Medicare Advantage Plan Benefit Packages (PBP)Rows
N/A
Columns
386
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-2: the Skilled Nursing Facility (SNF) inpatient benefit design for every MA / MA-PD plan-segment.
- 2It records, per plan per benefit year, what an SNF stay costs the enrollee (per-day copays by day-band, coinsurance %, deductibles, prior-auth, day limits, OOP caps) -- the cost-sharing terms a Medicare Advantage member faces for a skilled nursing facility stay.
Grain
| Key | Grain |
|---|---|
contract_idplan_idsegment_idreport_yearquarter |
|
How to read it
- 1Get the current (latest-quarter) 2026 in-network SNF per-day copay for days 21-100 per MA plan: SELECT contract_id, plan_id, segment_id, pbp_b2_copay_mcs_bgnd_int2_t1 AS day_from, pbp_b2_copay_mcs_endd_int2_t1 AS day_to, pbp_b2_copay_mcs_amt_int2_t1 AS copay_per_day FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY contract_id,plan_id,segment_id,report_year ORDER BY quarter DESC) rn FROM pbp_section_b2_snf WHERE report_year=2026 AND pbp_a_ben_cov='1') WHERE rn=1 AND pbp_b2_copay_mcs_amt_int2_t1 IS NOT NULL.
- 2This answers 'what does each Medicare Advantage plan charge per day for a skilled nursing stay after the first 20 days', e.g.
- 3H0028 plan 007 = $218/day for days 21-100 ($0 for days 1-20).
Traps
- 1COST-SHARING COLUMN FAMILIES SHIFT BY ERA (the #1 trap). Legacy flat columns (pbp_b2_copay_120_amts, pbp_b2_copay_21100_amts, pbp_b2_coins_pct_120/21100, pbp_b_2_ded_amt) are populated ONLY in 2001. Aggregate Medicare-covered-stay columns (pbp_b2_copay_mcs_amt, pbp_b2_coins_mcs_pct, pbp_b2_copay_nmcs_amt) cover 2002-2015. Per-interval/per-tier columns (pbp_b2_copay_mcs_amt_int{1,2,3}_t{1,2,3}, pbp_b2_coins_mcs_pct_int*_t*) cover 2016-2026. Querying SNF copay for a recent year using the flat _120/_21100/_mcs_amt columns returns ALL NULL -- you must use the int*_t* interval columns for 2016+.
- 2NO is_current column. The same plan-year can have up to 4 retained quarterly snapshots (17,470 plan-years have all 4 quarters). To get one current row per plan, dedup with ROW_NUMBER() OVER (PARTITION BY contract_id,plan_id,segment_id,report_year ORDER BY quarter DESC) -- or by cms_vintage_sequence DESC. quarter and cms_vintage_sequence track release recency but are NOT identical (e.g. 2021 Q1=vintage 4).
- 3bid_id LOOKS like a key but is NOT: it is NULL in 8,316 rows and is otherwise just the concat contract_id_plan_id_segment_id. Use the five component grain columns, not bid_id. The profiler's reported 16-column grain (incl pbp_b2_maxplan_* and version) is a SUPERSET -- those benefit/version columns are mostly NULL and not needed; the true minimal key is contract_id x plan_id x segment_id x report_year x quarter.
- 4'version' is a per-plan BID version number (0-27), not a table/snapshot version -- many version values coexist inside one (report_year, quarter) release. Similarly pbp_b2_hosp_ben_period is a benefit-period CODE ('1'-'4'), NOT a date despite 'period' in its name, and observed_period/effective_period_start are just Jan-1-of-report_year (annual, redundant with report_year).
- 5Two parse runs live in asserted_at (2026-05-16 parse_revision=1 = all years; 2026-05-20 parse_revision=2 = re-parse of 2018-2024). The re-parse REPLACED rows so the grain stays unique, but filtering on parse_revision/asserted_at would silently drop years. Coverage is also irregular: not every year has 4 quarters (2020 no Q3, 2021 Q1-only, 2024 no Q2). Filter pbp_a_ben_cov='1' to keep only plans that actually offer SNF (4,373 rows are '2'=not offered).
Columns (386)
| Column | Type | Meaning |
|---|---|---|
contract_id | string | CMS Medicare Advantage/Part D contract ID (e.g. 'H0028'). 1,972 distinct. Part of the grain. Joins to plan-level CMS tables on contract. |
plan_id | string | Plan ID within the contract (e.g. '001','008'), zero-padded 3-char string. 656 distinct values (reused across contracts). Part of the grain. |
segment_id | string | Plan segment ID (e.g. '0','1','2') for plans that vary benefits by service-area segment. 27 distinct; '0' for non-segmented plans. Part of the grain. |
version | double | Per-row plan bid version counter, 0-27. This is the plan's PBP submission/bid version, NOT a snapshot version of the table; many different version values coexist within one (report_year, quarter) release. Exactly 1 value per grain row, so not needed in the key. |
report_year | double | Benefit/contract year the SNF design applies to (double 2001.0-2026.0, 26 distinct). Part of the grain. Equals year of effective_period_start. |
quarter | double | CMS quarterly PBP release within the contract year (1-4). Part of the grain - the same plan-year appears as separate rows for each quarterly re-release CMS published. Only quarter=1 exists for 2001-2017; 2018+ has multiple quarters but coverage is irregular (2020 missing Q3, 2021 Q1-only, 2024 missing Q2). |
bid_id | string | Composite 'contract_id_plan_id_segment_id' (e.g. 'H0028_008_1'). NULL in 8,316 rows (mostly older years) so it is NOT a safe key; redundant with the three component columns when present. |
orgtype | string | CMS organization-type code (string). '01'=dominant (177,737, local CCP/HMO-PPO), then '08','04','11','06','05','02'. Identifies the MA organization structure. |
pbp_a_ben_cov | string | Benefit-offered flag carried from PBP section A: '1'=SNF benefit offered (196,773), '2'=not offered (4,373), NULL=342. Filter to '1' for plans that actually cover SNF. |
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, etc. From section A. |
pbp_b2_ad_cost_vary_low_tier | string | |
pbp_b2_ad_cost_vary_tier_num | string | |
pbp_b2_ad_cost_vary_tiers_yn | string | |
pbp_b2_auth | string | |
pbp_b2_auth_bonly | string | |
pbp_b2_auth_pos | string | |
pbp_b2_auth_pos_bonly | string | |
pbp_b2_auth_yn | string | |
pbp_b2_auth_yn_bonly | string | |
pbp_b2_bende_al_ad_prior_bonly | double | |
pbp_b2_bende_nmday_prior_bonly | string | |
pbp_b2_bendec_pr_al_ad_cs | string | |
pbp_b2_bendec_yesno | string | |
pbp_b2_bendec_yesno_bonly | string | |
pbp_b2_bendes_snf_per_bonly | string | |
pbp_b2_bendesc_ad | double | |
pbp_b2_bendesc_ad_nmcs | string | |
pbp_b2_bendesc_al_ad | double | |
pbp_b2_bendesc_al_ad_prior | double | |
pbp_b2_bendesc_al_ad_prior_b | double | |
pbp_b2_bendesc_amo_ad | string | |
pbp_b2_bendesc_amo_al | string | |
pbp_b2_bendesc_amo_bonly | string | |
pbp_b2_bendesc_amo_nmcs | string | |
pbp_b2_bendesc_amo_pr | string | |
pbp_b2_bendesc_hostay_bonly_yn | string | |
pbp_b2_bendesc_pr_hosp_num | string | |
pbp_b2_bendesc_pr_hosp_yn | string | |
pbp_b2_bendesc_snf_per_bonly | string | |
pbp_b2_bendesc_snf_per_bonly_d | string | |
pbp_b2_bendesc_snf_unlm_bonly | string | |
pbp_b2_bendesc_snfcare_amo_b | string | |
pbp_b2_bendesc_yn | string | |
pbp_b2_bendesc_yn_bonly | string | |
pbp_b2_benedesc_lim_ad | string | |
pbp_b2_coins_ad_bgnd_int1_t1 | double | |
pbp_b2_coins_ad_bgnd_int1_t2 | double | |
pbp_b2_coins_ad_bgnd_int1_t3 | double | |
pbp_b2_coins_ad_bgnd_int2_t1 | double | |
pbp_b2_coins_ad_bgnd_int2_t2 | double | |
pbp_b2_coins_ad_bgnd_int2_t3 | double | |
pbp_b2_coins_ad_bgnd_int3_t1 | double | |
pbp_b2_coins_ad_bgnd_int3_t2 | double | |
pbp_b2_coins_ad_bgnd_int3_t3 | double | |
pbp_b2_coins_ad_bgnd_intrvl1 | double | |
pbp_b2_coins_ad_bgnd_intrvl2 | double | |
pbp_b2_coins_ad_bgnd_intrvl3 | double | |
pbp_b2_coins_ad_endd_int1_t1 | double | |
pbp_b2_coins_ad_endd_int1_t2 | double | |
pbp_b2_coins_ad_endd_int1_t3 | double | |
pbp_b2_coins_ad_endd_int2_t1 | double | |
pbp_b2_coins_ad_endd_int2_t2 | double | |
pbp_b2_coins_ad_endd_int2_t3 | double | |
pbp_b2_coins_ad_endd_int3_t1 | double | |
pbp_b2_coins_ad_endd_int3_t2 | double | |
pbp_b2_coins_ad_endd_int3_t3 | double | |
pbp_b2_coins_ad_endd_intrvl1 | double | |
pbp_b2_coins_ad_endd_intrvl2 | double | |
pbp_b2_coins_ad_endd_intrvl3 | double | |
pbp_b2_coins_ad_intrvl_num | string | |
pbp_b2_coins_ad_intrvl_num_t1 | string | |
pbp_b2_coins_ad_intrvl_num_t2 | string | |
pbp_b2_coins_ad_intrvl_num_t3 | string | |
pbp_b2_coins_ad_pct_int1_t1 | double | |
pbp_b2_coins_ad_pct_int1_t2 | double | |
pbp_b2_coins_ad_pct_int1_t3 | double | |
pbp_b2_coins_ad_pct_int2_t1 | double | |
pbp_b2_coins_ad_pct_int2_t2 | double | |
pbp_b2_coins_ad_pct_int2_t3 | double | |
pbp_b2_coins_ad_pct_int3_t1 | double | |
pbp_b2_coins_ad_pct_int3_t2 | double | |
pbp_b2_coins_ad_pct_int3_t3 | double | |
pbp_b2_coins_ad_pct_intrvl1 | double | |
pbp_b2_coins_ad_pct_intrvl2 | double | |
pbp_b2_coins_ad_pct_intrvl3 | double | |
pbp_b2_coins_cov_120 | string | |
pbp_b2_coins_cov_21100 | string | |
pbp_b2_coins_cov_ad | string | |
pbp_b2_coins_cov_bonly | string | |
pbp_b2_coins_cov_cs | string | |
pbp_b2_coins_cov_pos | string | |
pbp_b2_coins_cov_pos_bonly | string | |
pbp_b2_coins_cov_ps | string | |
pbp_b2_coins_mcs_bgnd_int1_t1 | double | |
pbp_b2_coins_mcs_bgnd_int1_t2 | double | |
pbp_b2_coins_mcs_bgnd_int1_t3 | double | |
pbp_b2_coins_mcs_bgnd_int2_t1 | double | |
pbp_b2_coins_mcs_bgnd_int2_t2 | double | |
pbp_b2_coins_mcs_bgnd_int2_t3 | double | |
pbp_b2_coins_mcs_bgnd_int3_t1 | double | |
pbp_b2_coins_mcs_bgnd_int3_t2 | double | |
pbp_b2_coins_mcs_bgnd_int3_t3 | double | |
pbp_b2_coins_mcs_bgnd_intrvl1 | double | |
pbp_b2_coins_mcs_bgnd_intrvl2 | double | |
pbp_b2_coins_mcs_bgnd_intrvl3 | double | |
pbp_b2_coins_mcs_endd_int1_t1 | double | |
pbp_b2_coins_mcs_endd_int1_t2 | double | |
pbp_b2_coins_mcs_endd_int1_t3 | double | |
pbp_b2_coins_mcs_endd_int2_t1 | double | |
pbp_b2_coins_mcs_endd_int2_t2 | double | |
pbp_b2_coins_mcs_endd_int2_t3 | double | |
pbp_b2_coins_mcs_endd_int3_t1 | double | |
pbp_b2_coins_mcs_endd_int3_t2 | double | |
pbp_b2_coins_mcs_endd_int3_t3 | double | |
pbp_b2_coins_mcs_endd_intrvl1 | double | |
pbp_b2_coins_mcs_endd_intrvl2 | double | |
pbp_b2_coins_mcs_endd_intrvl3 | double | |
pbp_b2_coins_mcs_int_num_t1 | string | |
pbp_b2_coins_mcs_int_num_t2 | string | |
pbp_b2_coins_mcs_int_num_t3 | string | |
pbp_b2_coins_mcs_intrvl_num | string | |
pbp_b2_coins_mcs_pct | double | |
pbp_b2_coins_mcs_pct_int1_t1 | double | |
pbp_b2_coins_mcs_pct_int1_t2 | double | |
pbp_b2_coins_mcs_pct_int1_t3 | double | |
pbp_b2_coins_mcs_pct_int2_t1 | double | |
pbp_b2_coins_mcs_pct_int2_t2 | double | |
pbp_b2_coins_mcs_pct_int2_t3 | double | |
pbp_b2_coins_mcs_pct_int3_t1 | double | |
pbp_b2_coins_mcs_pct_int3_t2 | double | |
pbp_b2_coins_mcs_pct_int3_t3 | double | |
pbp_b2_coins_mcs_pct_intrvl1 | double | |
pbp_b2_coins_mcs_pct_intrvl2 | double | |
pbp_b2_coins_mcs_pct_intrvl3 | double | |
pbp_b2_coins_mcs_pct_t1 | double | |
pbp_b2_coins_mcs_pct_t2 | double | |
pbp_b2_coins_mcs_pct_t3 | double | |
pbp_b2_coins_nmcs_bgnd_intrvl1 | double | |
pbp_b2_coins_nmcs_bgnd_intrvl2 | double | |
pbp_b2_coins_nmcs_bgnd_intrvl3 | double | |
pbp_b2_coins_nmcs_cov | string | |
pbp_b2_coins_nmcs_endd_intrvl1 | double | |
pbp_b2_coins_nmcs_endd_intrvl2 | double | |
pbp_b2_coins_nmcs_endd_intrvl3 | double | |
pbp_b2_coins_nmcs_intrvl_num | string | |
pbp_b2_coins_nmcs_pct | double | |
pbp_b2_coins_nmcs_pct_intrvl1 | double | |
pbp_b2_coins_nmcs_pct_intrvl2 | double | |
pbp_b2_coins_nmcs_pct_intrvl3 | double | |
pbp_b2_coins_nmcs_struc_yn | string | |
pbp_b2_coins_pct_120 | double | |
pbp_b2_coins_pct_21100 | double | |
pbp_b2_coins_pct_ad | double | |
pbp_b2_coins_pct_bonly | double | |
pbp_b2_coins_pct_cs | double | |
pbp_b2_coins_pct_pos | double | |
pbp_b2_coins_pct_pos_bonly | double | |
pbp_b2_coins_pct_ps | double | |
pbp_b2_coins_ps_bgnd1_bonly | double | |
pbp_b2_coins_ps_bgnd2_bonly | double | |
pbp_b2_coins_ps_bgnd3_bonly | double | |
pbp_b2_coins_ps_endd1_bonly | double | |
pbp_b2_coins_ps_endd2_bonly | double | |
pbp_b2_coins_ps_endd3_bonly | double | |
pbp_b2_coins_ps_num_bonly | string | |
pbp_b2_coins_ps_pct1_bonly | double | |
pbp_b2_coins_ps_pct2_bonly | double | |
pbp_b2_coins_ps_pct3_bonly | double | |
pbp_b2_coins_yesno | string | |
pbp_b2_coins_yesno_bonly | string | |
pbp_b2_coins_yesno_pos | string | |
pbp_b2_coins_yesno_pos_bonly | string | |
pbp_b2_coins_yn | string | |
pbp_b2_coins_yn_bonly | string | |
pbp_b2_copay_120_amts | double | |
pbp_b2_copay_21100_amts | double | |
pbp_b2_copay_ad_amt_int1_t1 | double | |
pbp_b2_copay_ad_amt_int1_t2 | double | |
pbp_b2_copay_ad_amt_int1_t3 | double | |
pbp_b2_copay_ad_amt_int2_t1 | double | |
pbp_b2_copay_ad_amt_int2_t2 | double | |
pbp_b2_copay_ad_amt_int2_t3 | double | |
pbp_b2_copay_ad_amt_int3_t1 | double | |
pbp_b2_copay_ad_amt_int3_t2 | double | |
pbp_b2_copay_ad_amt_int3_t3 | double | |
pbp_b2_copay_ad_amt_intrvl1 | double | |
pbp_b2_copay_ad_amt_intrvl2 | double | |
pbp_b2_copay_ad_amt_intrvl3 | double | |
pbp_b2_copay_ad_amts | double | |
pbp_b2_copay_ad_bgnd_int1_t1 | double | |
pbp_b2_copay_ad_bgnd_int1_t2 | double | |
pbp_b2_copay_ad_bgnd_int1_t3 | double | |
pbp_b2_copay_ad_bgnd_int2_t1 | double | |
pbp_b2_copay_ad_bgnd_int2_t2 | double | |
pbp_b2_copay_ad_bgnd_int2_t3 | double | |
pbp_b2_copay_ad_bgnd_int3_t1 | double | |
pbp_b2_copay_ad_bgnd_int3_t2 | double | |
pbp_b2_copay_ad_bgnd_int3_t3 | double | |
pbp_b2_copay_ad_bgnd_intrvl1 | double | |
pbp_b2_copay_ad_bgnd_intrvl2 | double | |
pbp_b2_copay_ad_bgnd_intrvl3 | double | |
pbp_b2_copay_ad_endd_int1_t1 | double | |
pbp_b2_copay_ad_endd_int1_t2 | double | |
pbp_b2_copay_ad_endd_int1_t3 | double | |
pbp_b2_copay_ad_endd_int2_t1 | double | |
pbp_b2_copay_ad_endd_int2_t2 | double | |
pbp_b2_copay_ad_endd_int2_t3 | double | |
pbp_b2_copay_ad_endd_int3_t1 | double | |
pbp_b2_copay_ad_endd_int3_t2 | double | |
pbp_b2_copay_ad_endd_int3_t3 | double | |
pbp_b2_copay_ad_endd_intrvl1 | double | |
pbp_b2_copay_ad_endd_intrvl2 | double | |
pbp_b2_copay_ad_endd_intrvl3 | double | |
pbp_b2_copay_ad_intrvl_num | string | |
pbp_b2_copay_ad_intrvl_num_t1 | string | |
pbp_b2_copay_ad_intrvl_num_t2 | string | |
pbp_b2_copay_ad_intrvl_num_t3 | string | |
pbp_b2_copay_amtd_pos | double | |
pbp_b2_copay_amtd_pos_bonly | double | |
pbp_b2_copay_amts_pos | double | |
pbp_b2_copay_amts_pos_bonly | double | |
pbp_b2_copay_mcs_amt | double | |
pbp_b2_copay_mcs_amt_int1_t1 | double | |
pbp_b2_copay_mcs_amt_int1_t2 | double | |
pbp_b2_copay_mcs_amt_int1_t3 | double | |
pbp_b2_copay_mcs_amt_int2_t1 | double | |
pbp_b2_copay_mcs_amt_int2_t2 | double | |
pbp_b2_copay_mcs_amt_int2_t3 | double | |
pbp_b2_copay_mcs_amt_int3_t1 | double | |
pbp_b2_copay_mcs_amt_int3_t2 | double | |
pbp_b2_copay_mcs_amt_int3_t3 | double | |
pbp_b2_copay_mcs_amt_intrvl1 | double | |
pbp_b2_copay_mcs_amt_intrvl2 | double | |
pbp_b2_copay_mcs_amt_intrvl3 | double | |
pbp_b2_copay_mcs_amt_t1 | double | |
pbp_b2_copay_mcs_amt_t2 | double | |
pbp_b2_copay_mcs_amt_t3 | double | |
pbp_b2_copay_mcs_bgnd_int1_t1 | double | |
pbp_b2_copay_mcs_bgnd_int1_t2 | double | |
pbp_b2_copay_mcs_bgnd_int1_t3 | double | |
pbp_b2_copay_mcs_bgnd_int2_t1 | double | |
pbp_b2_copay_mcs_bgnd_int2_t2 | double | |
pbp_b2_copay_mcs_bgnd_int2_t3 | double | |
pbp_b2_copay_mcs_bgnd_int3_t1 | double | |
pbp_b2_copay_mcs_bgnd_int3_t2 | double | |
pbp_b2_copay_mcs_bgnd_int3_t3 | double | |
pbp_b2_copay_mcs_bgnd_intrvl1 | double | |
pbp_b2_copay_mcs_bgnd_intrvl2 | double | |
pbp_b2_copay_mcs_bgnd_intrvl3 | double | |
pbp_b2_copay_mcs_endd_int1_t1 | double | |
pbp_b2_copay_mcs_endd_int1_t2 | double | |
pbp_b2_copay_mcs_endd_int1_t3 | double | |
pbp_b2_copay_mcs_endd_int2_t1 | double | |
pbp_b2_copay_mcs_endd_int2_t2 | double | |
pbp_b2_copay_mcs_endd_int2_t3 | double | |
pbp_b2_copay_mcs_endd_int3_t1 | double | |
pbp_b2_copay_mcs_endd_int3_t2 | double | |
pbp_b2_copay_mcs_endd_int3_t3 | double | |
pbp_b2_copay_mcs_endd_intrvl1 | double | |
pbp_b2_copay_mcs_endd_intrvl2 | double | |
pbp_b2_copay_mcs_endd_intrvl3 | double | |
pbp_b2_copay_mcs_int_num_t1 | string | |
pbp_b2_copay_mcs_int_num_t2 | string | |
pbp_b2_copay_mcs_int_num_t3 | string | |
pbp_b2_copay_mcs_intrvl_num | string | |
pbp_b2_copay_nmcs_amt | double | |
pbp_b2_copay_nmcs_amt_intrvl1 | double | |
pbp_b2_copay_nmcs_amt_intrvl2 | double | |
pbp_b2_copay_nmcs_amt_intrvl3 | double | |
pbp_b2_copay_nmcs_bgnd_intrvl1 | double | |
pbp_b2_copay_nmcs_bgnd_intrvl2 | double | |
pbp_b2_copay_nmcs_bgnd_intrvl3 | double | |
pbp_b2_copay_nmcs_endd_intrvl1 | double | |
pbp_b2_copay_nmcs_endd_intrvl2 | double | |
pbp_b2_copay_nmcs_endd_intrvl3 | double | |
pbp_b2_copay_nmcs_intrvl_num | string | |
pbp_b2_copay_nmcs_struc_yn | string | |
pbp_b2_copay_nmed_amts | double | |
pbp_b2_copay_pd_amts_bonly | double | |
pbp_b2_copay_ps_amt1_bonly | double | |
pbp_b2_copay_ps_amt2_bonly | double | |
pbp_b2_copay_ps_amt3_bonly | double | |
pbp_b2_copay_ps_amt_bonly | double | |
pbp_b2_copay_ps_amts | double | |
pbp_b2_copay_ps_amts_bonly | double | |
pbp_b2_copay_ps_bgnd1_bonly | double | |
pbp_b2_copay_ps_bgnd2_bonly | double | |
pbp_b2_copay_ps_bgnd3_bonly | double | |
pbp_b2_copay_ps_endd1_bonly | double | |
pbp_b2_copay_ps_endd2_bonly | double | |
pbp_b2_copay_ps_endd3_bonly | double | |
pbp_b2_copay_ps_num_bonly | string | |
pbp_b2_copay_yesno | string | |
pbp_b2_copay_yesno_bonly | string | |
pbp_b2_copay_yesno_pos | string | |
pbp_b2_copay_yesno_pos_bonly | string | |
pbp_b2_copay_yn | string | |
pbp_b2_copay_yn_bonly | string | |
pbp_b2_cost_discharge_yn | string | |
pbp_b2_cost_vary_low_tier | string | |
pbp_b2_cost_vary_tier_num | string | |
pbp_b2_cost_vary_tiers_yn | string | |
pbp_b2_ded_amt | double | |
pbp_b2_ded_amt_bonly | double | |
pbp_b2_ded_amt_pos | double | |
pbp_b2_ded_amt_pos_bonly | double | |
pbp_b2_ded_amt_t1 | double | |
pbp_b2_ded_amt_t2 | double | |
pbp_b2_ded_amt_t3 | double | |
pbp_b2_ded_yesno_pos | string | |
pbp_b2_ded_yesno_pos_bonly | string | |
pbp_b2_ded_yn | string | |
pbp_b2_ded_yn_bonly | string | |
pbp_b2_esrd_copay_amt | double | |
pbp_b2_esrd_maxenr_amt | double | |
pbp_b2_hosp_ben_period | string | |
pbp_b2_hosp_ben_period_oth | string | |
pbp_b2_maxenr_amt | double | |
pbp_b2_maxenr_amt_bonly | double | |
pbp_b2_maxenr_amt_pos | double | |
pbp_b2_maxenr_amt_pos_bonly | double | |
pbp_b2_maxenr_per | string | |
pbp_b2_maxenr_per_bonly | string | |
pbp_b2_maxenr_per_bonly_d | string | |
pbp_b2_maxenr_per_d | string | |
pbp_b2_maxenr_yesno | string | |
pbp_b2_maxenr_yesno_bonly | string | |
pbp_b2_maxenr_yn | string | |
pbp_b2_maxenr_yn_bonly | string | |
pbp_b2_maxenr_yn_pos | string | |
pbp_b2_maxenr_yn_pos_bonly | string | |
pbp_b2_maxplan_amt_bonly | double | |
pbp_b2_maxplan_cov_bonly | string | |
pbp_b2_maxplan_per_bonly | string | |
pbp_b2_maxplan_per_bonly_d | string | |
pbp_b2_maxplan_yesno_bonly | string | |
pbp_b2_maxplan_yesno_pos | string | |
pbp_b2_maxplan_yesno_pos_bonly | string | |
pbp_b2_maxplan_yn_bonly | string | |
pbp_b2_maxpln_amt_pos | double | |
pbp_b2_maxpln_amt_pos_bonly | double | |
pbp_b2_maxpln_cov_pos | string | |
pbp_b2_maxpln_cov_pos_bonly | string | |
pbp_b2_maxpln_per_pos | string | |
pbp_b2_maxpln_per_pos_bonly | string | |
pbp_b2_mc_coins_cstshr_yn_t1 | string | |
pbp_b2_mc_coins_cstshr_yn_t2 | string | |
pbp_b2_mc_coins_cstshr_yn_t3 | string | |
pbp_b2_mc_copay_cstshr_yn_t1 | string | |
pbp_b2_mc_copay_cstshr_yn_t2 | string | |
pbp_b2_mc_copay_cstshr_yn_t3 | string | |
pbp_b2_mdcr_coins_cstshrs_yn | string | |
pbp_b2_mdcr_copay_cstshrs_yn | string | |
pbp_b2_notes | string | |
pbp_b2_pffs_copay_amt | double | |
pbp_b2_pffs_maxenr_amt | double | |
pbp_b2_refer_yn | string | |
pbp_b2_refer_yn_bonly | string | |
pbp_b_2_ded_amt | double | |
pbp_b_2_ded_amt_bonly | double | |
pbp_b_2_ded_yesno | string | |
pbp_b_2_ded_yesno_bonly | string | |
observed_period | date | Snapshot/observation period = Jan 1 of report_year (annual, 26 distinct). Equals effective_period_start in this table; redundant with report_year. |
asserted_at | date | |
effective_period_start | date | |
effective_period_end | date | |
cms_vintage_sequence | int | Monotonic CMS release-ordering integer (1-4) within a year. Correlates with quarter (Q1->1...Q4->4) but NOT identical (2021 Q1=4, 2022 Q1=2). Useful as a 'latest snapshot' tiebreaker per plan-year alongside quarter. |
parse_revision | int | |
parser_artifact_hash | string | |
source_url | string | |
sha256_content_hash | string | |
pbp_b_2_ded_amt / pbp_b_2_ded_yesno (and _bonly) | LEGACY flat SNF deductible amount / yes-no flag. Populated essentially only in 2001 (2 rows); all-NULL for modern years. Note the underscore: pbp_b_2_ (extra underscore) is the legacy field; pbp_b2_ded_* is the newer tiered field. | |
pbp_b2_copay_120_amts / pbp_b2_copay_21100_amts | LEGACY flat per-day copay for SNF days 1-20 ('120') and days 21-100 ('21100'). Populated only in 2001 (508 rows). All-NULL 2002+. The original Medicare SNF day-band structure. | |
pbp_b2_coins_pct_120 / pbp_b2_coins_pct_21100 | LEGACY flat SNF coinsurance percent for days 1-20 / 21-100. Populated only ~2001. All-NULL for modern years. | |
pbp_b2_copay_mcs_amt / pbp_b2_coins_mcs_pct (and _nmcs_) | MID-ERA (2002-2015) aggregate Medicare-Covered-Stay copay amount / coinsurance percent; _nmcs_ = Non-Medicare-Covered-Stay. All-NULL in 2016+ (superseded by interval columns). mcs = Medicare-covered SNF stay, nmcs = extra non-Medicare-covered days the plan offers. | |
pbp_b2_copay_mcs_amt_int{1,2,3}_t{1,2,3} / pbp_b2_coins_mcs_pct_int*_t* | CURRENT-ERA (2016-2026) per-day SNF cost-sharing. int = day-range interval (int1=days 1-20 typically $0; int2=days 21-100 e.g. $218/day), t = network/cost tier (t1=primary in-network; t2/t3 for tiered-SNF plans). A plan uses copay OR coins, not both. bgnd/endd_int*_t* give begin/end day of each interval; *_int_num_t* gives number of intervals. Main cost-data payload for recent years. | |
pbp_b2_coins_cov_* / pbp_b2_copay_*_amts / pbp_b2_*_yesno / pbp_b2_*_yn | Cost-share applicability flags and aggregate amounts. *_yesno / *_yn = whether copay or coinsurance applies ('1'=yes,'2'=no, often NULL in modern years where interval columns carry detail). Suffixes scope variants: bonly=benefit-only, pos=point-of-service/out-of-network, ps=per-stay, cs=cost-share, ad=additional-days. | |
pbp_b2_auth / pbp_b2_auth_yn (and _pos, _bonly) | Prior-authorization required for SNF: pbp_b2_auth_yn '1'=yes (6,611 in 2026), '2'=no (240), NULL=569. _pos variants = for out-of-network/POS. | |
pbp_b2_maxenr_amt / _yn / _per (and _bonly, _pos, _esrd, _pffs) | SNF-section maximum-enrollee out-of-pocket cap: _yn '2'=No cap applied (the norm, 21,534 in 2024), '1'=Yes (rare, carries _amt e.g. $4,144 and _per period code). Mostly NULL/'No'. esrd/pffs/maxplan variants are sub-population caps. | |
pbp_b2_maxplan_amt_bonly / _cov_bonly / _per_bonly / _yn_bonly / _yesno_pos* | Plan-level SNF benefit maximum (benefit-only). Sparse. NOTE: the profiler wrongly listed these 9 maxplan_* columns as part of the grain key - they are benefit attributes, not keys (mostly NULL), and are NOT needed for uniqueness. | |
pbp_b2_bendesc_* / pbp_b2_bende_* / pbp_b2_benedesc_* | Benefit-description fields: number of extra/additional SNF days, prior-hospital-stay requirement (pbp_b2_bendesc_pr_hosp_yn / _num), unlimited-days flag (pbp_b2_bendesc_snf_unlm_bonly), SNF-period definitions. Mostly coded strings or day counts; many sparse. | |
pbp_b2_hosp_ben_period / _oth | SNF benefit-period definition CODE (string '1'/'2'/'3'/'4'), NOT a date despite 'period' in the name. '1' dominant (108,271). Defines how the SNF benefit period is structured (per-stay vs per-benefit-period etc.). | |
pbp_b2_ad_cost_vary_* / pbp_b2_coins_mcs_struc_yn / *_intrvl_num | Structural descriptors: whether additional-day cost varies by tier (ad_cost_vary_tiers_yn, _tier_num, _low_tier), whether a multi-interval coinsurance structure is used (_struc_yn), and interval-count fields (_intrvl_num, _int_num_t*). | |
effective_period_start / effective_period_end | Benefit year window derived from report_year: start = Jan 1 of report_year, end = Dec 31 (e.g. 2026-01-01 / 2026-12-31). Annual. 26 distinct starts. Profiler's primary time column. | |
asserted_at / parse_revision | Vlada ingestion provenance: two parse runs exist - asserted_at='2026-05-16'/parse_revision=1 covers all 24 years (2001-2026); '2026-05-20'/parse_revision=2 is a re-parse of 2018-2024. The re-parse REPLACED rows (grain has 0 dupes), it did not duplicate. Not a business-version of the benefit. | |
parser_artifact_hash / source_url / sha256_content_hash | Vlada provenance/lineage: hash of the parser artifact, the source PBP file URL it was parsed from, and the SHA-256 of the source file content. For audit/provenance, not analytics. |
Query it
describe_data_source(source_fqn="medicare_silver.pbp_section_b2_snf") # the card, live query_substrate(sql="SELECT * FROM medicare_silver.pbp_section_b2_snf 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_b2_snf") |
| Raw door | Athena (read-only via query_substrate): medicare_silver.pbp_section_b2_snf |
| Note | Grain-governed; live in Glue / query_substrate. Source family pbp_benefits. |
This page as markdown: /docs-md/data/medicare_silver_pbp_section_b2_snf.md · every page in one file: /llms-full.txt