Medicare Advantage, Part D, Medicaid
MA pbp section b3 cardiac rehab
medicare_silver.pbp_section_b3_cardiac_rehab·partial·silver·annual·Medicare Advantage Plan Benefit Packages (PBP)Rows
N/A
Columns
111
History
2019-01-01 to 2026-01-01
Card
yesgrain, traps, filters
Typed tools
1
What it is
- 1A flattened CMS Medicare Advantage Plan Benefit Package (PBP) Section B-3 extract describing each MA plan's member cost-sharing and coverage rules for cardiac and pulmonary rehabilitation services (the four sub-services: cardiac rehab / intensive cardiac rehab / pulmonary rehab / supervised exercise therapy for PAD).
- 2It is the benefit-design side of healthcare cost data — what a plan charges its members (copay/coinsurance) and what utilization/authorization limits apply — not provider-negotiated rates.
Grain
| Key | Grain |
|---|---|
bid_idreport_yearquarter |
|
How to read it
- 1Latest-snapshot member cost share for cardiac rehab across MA plans: SELECT bid_id, contract_id, plan_id, pbp_a_plan_type, pbp_b3_auth_yn, pbp_b3_copay_amt_mc_max_crs, pbp_b3_coins_pct_mc_max_crs FROM (SELECT *, row_number() OVER (PARTITION BY bid_id, report_year ORDER BY quarter DESC) rn FROM medicare_silver.pbp_section_b3_cardiac_rehab WHERE report_year=2025) WHERE rn=1.
- 2Answers 'for plan year 2025, what copay/coinsurance and prior-auth does each MA plan impose on cardiac rehabilitation, using the freshest quarterly PBP snapshot' (~7,570 plan-years, deduped from the multi-quarter raw rows).
Traps
- 1NOT one row per plan. Multiple quarterly snapshots of the same plan-year coexist with NO is_current flag. A naive COUNT(*) (113,962) over-counts plans ~2x. For one-row-per-plan-year (55,872), take the latest snapshot: ROW_NUMBER/max(quarter) per (bid_id, report_year). bid_id alone, or (bid_id, observed_period), or (contract_id,plan_id,segment_id) are all NON-unique.
- 2bid_id is fully derived: it equals contract_id_plan_id_segment_id with zero exceptions, and pbp_a_plan_type/orgtype are stable per bid_id-year. The profiler's 8-column 'verified key' is a bloated superset; the true minimal grain is just (bid_id, report_year, quarter).
- 3Snapshots are NOT strictly nested across quarters: between Q1 and Q4 of the same year a few plans appear or disappear (2023: Q1=7752, Q4=7755, union=7766). 'Latest quarter' is the best single snapshot but does not perfectly superset earlier quarters; union across quarters if you need the full plan universe.
- 4Many cost columns are structurally null and meaningful: pbp_b3_ded_amt and pbp_b3_maxenr_amt/maxenr_per are ALWAYS null (cardiac rehab has no benefit-level deductible or enrollee max — vestigial template columns). The real cost share lives in the 'mc_' (Medicare-covered) copay/coinsurance columns, split across 4 sub-service suffixes crs/icrs/prs/setpad. The non-'mc_' copay/coins columns (supplemental portion) are largely null.
- 5YN flags use 1=Yes, 2=No (not boolean). bendesc_yn='2' means 'no EXTRA benefit description', NOT 'no benefit' — copay/coins/auth are still populated when bendesc_yn='2'. Also _d decode columns (e.g. bendesc_per_*_d) are mostly null even when the base code is set, so never use a non-null _d to detect a limit. The value 20.0 appears as both a coinsurance percent and a copay dollar amount — disambiguate by column family, and pair each *_ehc bitmask (position = sub-service) with its copay/coins columns.
- 6Sibling-table caveat: this is one of many pbp_section_* tables sharing the same key shape and provenance columns; it covers ONLY cardiac/pulmonary rehab (B-3). It is plan benefit DESIGN (what the member pays), not provider-negotiated commercial/Medicare fee-schedule rates — join to plan/enrollment or fee-schedule tables for rate-vs-benefit analysis. cms_vintage_sequence usually mirrors quarter but diverges for ~14K re-released 2020/2021 Q1 rows.
Columns (111)
| Column | Type | Meaning |
|---|---|---|
contract_id | string | CMS MA contract ID (e.g. H0028). 1,231 distinct. First component of bid_id; identifies the contracting organization. |
plan_id | string | 3-digit plan number within the contract (e.g. 001, 014). 656 distinct. Second component of bid_id. |
segment_id | string | Geographic/benefit segment of the plan. '0' = non-segmented (91% of rows); '1'-'5'+ = segments of segmented plans (up to 24 distinct). Third component of bid_id. |
version | double | CMS bid version/revision number for the plan submission (double, 1-26). The plan's internal bid revision sequence; distinct from the file vintage/quarter. Higher versions are progressively rarer. |
report_year | double | Contract/plan year the benefit applies to (double, 2019-2026). Equals the year of effective_period_start/observed_period. Part of the grain key. |
quarter | double | CMS PBP republish quarter within report_year (double: 1,2,3,4). CMS reissues the PBP file multiple times per year; each plan-year can appear under several quarters as near-duplicate snapshots. Part of the grain key. Take max(quarter) per bid_id+report_year for the latest snapshot. |
bid_id | string | Concatenation contract_id_plan_id_segment_id (e.g. H0028_014_0). The natural plan identifier; combined with report_year+quarter forms the unique grain. |
orgtype | string | CMS organization type code (string: '01' Local CCP/HMO-PPO is 92%, plus '02','04','05','06','08','11'). Categorizes the MA organization structure. |
pbp_a_ben_cov | string | Benefit-coverage indicator from Section A: '1' = standard (98%), '2' = enhanced/alternative (2.4K rows), null (185 older rows). Carried forward from PBP Section A. |
pbp_a_plan_type | string | MA plan type code (string): '01' HMO (54K), '04' Local PPO (37K), '02' HMOPOS (14K), '20' PFFS, '31' Regional PPO, '18','09','48','07'. Stable per bid_id-year — an attribute, not a grain key. |
pbp_b3_auth_yn | string | Prior authorization required for this benefit. '1'=Yes (69K), '2'=No (39K), null (5.7K, mostly 2019-2020 where not captured). YN code: 1=Yes, 2=No throughout this table. |
pbp_b3_bendesc_amo_crs | string | |
pbp_b3_bendesc_amo_icrs | string | |
pbp_b3_bendesc_amo_prs | string | |
pbp_b3_bendesc_amo_setpad | string | |
pbp_b3_bendesc_ehc | string | Enhanced/extra-help-coverage bitmask string for the benefit description. Sparse fixed-width flag string. |
pbp_b3_bendesc_lim_crs | string | |
pbp_b3_bendesc_lim_icrs | string | |
pbp_b3_bendesc_lim_prs | string | |
pbp_b3_bendesc_lim_setpad | string | |
pbp_b3_bendesc_numv_crs | double | |
pbp_b3_bendesc_numv_icrs | double | |
pbp_b3_bendesc_numv_prs | double | |
pbp_b3_bendesc_numv_setpad | double | |
pbp_b3_bendesc_per_crs | string | |
pbp_b3_bendesc_per_crs_d | string | |
pbp_b3_bendesc_per_icrs | string | |
pbp_b3_bendesc_per_icrs_d | string | |
pbp_b3_bendesc_per_prs | string | |
pbp_b3_bendesc_per_prs_d | string | |
pbp_b3_bendesc_per_setpad | string | |
pbp_b3_bendesc_per_setpad_d | string | |
pbp_b3_bendesc_yn | string | Whether a special benefit description/limit beyond Medicare is defined. '1'=Yes (only 614 rows), '2'=No (vast majority). When '2', cost-share columns (copay/coins) are still populated — '2' means no EXTRA benefit description, not no benefit. |
pbp_b3_coins_ehc | string | Fixed-width bitmask string (e.g. '01111000') marking WHICH sub-services coinsurance applies to (position = CRS/ICRS/PRS/SETPAD etc.); '1'=applies. Variable length (6 or 8 chars seen). Null when no coinsurance. |
pbp_b3_coins_pct_max_crs | double | |
pbp_b3_coins_pct_max_icrs | double | |
pbp_b3_coins_pct_max_prs | double | |
pbp_b3_coins_pct_max_setpad | double | |
pbp_b3_coins_pct_mc_max_crs | double | |
pbp_b3_coins_pct_mc_max_icrs | double | |
pbp_b3_coins_pct_mc_max_prs | double | |
pbp_b3_coins_pct_mc_max_setpad | double | |
pbp_b3_coins_pct_mc_min_crs | double | |
pbp_b3_coins_pct_mc_min_icrs | double | |
pbp_b3_coins_pct_mc_min_prs | double | |
pbp_b3_coins_pct_mc_min_setpad | double | |
pbp_b3_coins_pct_min_crs | double | |
pbp_b3_coins_pct_min_icrs | double | |
pbp_b3_coins_pct_min_prs | double | |
pbp_b3_coins_pct_min_setpad | double | |
pbp_b3_coins_yn | string | Whether coinsurance applies to this benefit. '1'=Yes (37K), '2'=No. Pairs with the coins_pct_* columns. |
pbp_b3_copay_amt_max_crs | double | |
pbp_b3_copay_amt_max_icrs | double | |
pbp_b3_copay_amt_max_prs | double | |
pbp_b3_copay_amt_max_setpad | double | |
pbp_b3_copay_amt_mc_max_crs | double | |
pbp_b3_copay_amt_mc_max_icrs | double | |
pbp_b3_copay_amt_mc_max_prs | double | |
pbp_b3_copay_amt_mc_max_setpad | double | |
pbp_b3_copay_amt_mc_min_crs | double | |
pbp_b3_copay_amt_mc_min_icrs | double | |
pbp_b3_copay_amt_mc_min_prs | double | |
pbp_b3_copay_amt_mc_min_setpad | double | |
pbp_b3_copay_amt_min_crs | double | |
pbp_b3_copay_amt_min_icrs | double | |
pbp_b3_copay_amt_min_prs | double | |
pbp_b3_copay_amt_min_setpad | double | |
pbp_b3_copay_ehc | string | Fixed-width bitmask string marking which sub-services a copay applies to (same scheme as coins_ehc). Null when no copay. |
pbp_b3_copay_yn | string | Whether a copay applies. '1'=Yes (63K), '2'=No. Pairs with copay_amt_* columns. Copay and coinsurance are mutually-structured alternatives per sub-service. |
pbp_b3_ded_amt | double | Benefit-specific deductible dollar amount (double). ALWAYS NULL in this table (0 populated) — cardiac rehab carries no benefit-level deductible. Column exists from the shared PBP template. |
pbp_b3_ded_yn | string | Whether a benefit-specific deductible applies. Effectively always '2'=No for cardiac rehab. Vestigial here. |
pbp_b3_maxenr_amt | double | Maximum-per-enrollee dollar cap (double). ALWAYS NULL (0 populated) in this table. |
pbp_b3_maxenr_per | string | |
pbp_b3_maxenr_per_d | string | |
pbp_b3_maxenr_yn | string | Whether an annual enrollee maximum (cap on covered amount/visits) applies. Effectively always '2'=No. Vestigial here. |
pbp_b3_refer_yn | string | Whether a referral is required for the benefit. '1'=Yes, '2'=No (majority). |
observed_period | date | Plan-year start date as a single point (date, = Jan 1 of report_year). COLLAPSES the quarters: (bid_id, observed_period) gives only 55,872 (one per plan-year), so it is NOT sufficient for the row grain — quarter is still needed to reach 113,962. |
asserted_at | date | Date Vlada ingested/asserted this record (date, 2026-05-16 or 2026-05-20). Pipeline bookkeeping, not a plan attribute. |
effective_period_start | date | Benefit effective start (date, Jan 1 of report_year). The temporal column; 2019-01-01 to 2026-01-01, annual cadence. Equals observed_period here. |
effective_period_end | date | Benefit effective end (date, Dec 31 of report_year). With start, defines the one-year coverage window. |
cms_vintage_sequence | int | Integer rank of the CMS file vintage (1-4) this row came from. Normally tracks quarter (Q1->1...Q4->4), BUT 14,022 rows mismatch: some 2020/2021 Q1 plan-years were captured from a later (vintage 2 or 4) republish. Use to identify the freshest source file. |
parse_revision | int | Vlada parser revision that produced the row (int: 2 distinct). Provenance/versioning of the extraction logic. |
parser_artifact_hash | string | SHA-256 of the parser artifact/code that generated the row. 16 distinct (one per source file run). Provenance. |
source_url | string | CMS source zip URL (e.g. https://www.cms.gov/files/zip/pbp-benefits-2023-quarter-3.zip). 16 distinct = 16 quarterly PBP releases ingested. The provenance anchor for every row. |
sha256_content_hash | string | SHA-256 of the source file content. 16 distinct (1:1 with source_url). Immutability/provenance check. |
pbp_b3_1_maxplan_amt | double | |
pbp_b3_1_maxplan_per | string | |
pbp_b3_1_maxplan_per_d | string | |
pbp_b3_1_maxplan_yn | string | |
pbp_b3_2_maxplan_amt | double | |
pbp_b3_2_maxplan_per | string | |
pbp_b3_2_maxplan_per_d | string | |
pbp_b3_2_maxplan_yn | string | |
pbp_b3_3_maxplan_amt | double | |
pbp_b3_3_maxplan_per | string | |
pbp_b3_3_maxplan_per_d | string | |
pbp_b3_3_maxplan_yn | string | |
pbp_b3_4_maxplan_amt | double | |
pbp_b3_4_maxplan_per | string | |
pbp_b3_4_maxplan_per_d | string | |
pbp_b3_4_maxplan_yn | string | |
pbp_b3_bendesc_amo_{crs,icrs,prs,setpad} | Benefit-description dollar/amount limit for each of the 4 sub-services (cardiac rehab / intensive CR / pulmonary rehab / supervised exercise therapy for PAD). String; almost entirely null (only populated for the ~614 special-description plans). | |
pbp_b3_bendesc_lim_{crs,icrs,prs,setpad} | Benefit-description limit type/flag per sub-service (string). Sparse — populated only when bendesc_yn='1'. | |
pbp_b3_bendesc_numv_{crs,icrs,prs,setpad} | Number-of-visits limit per sub-service (double). Extremely sparse (CRS populated only 35 times, range 12-36 visits). Meaning-bearing where present: caps covered rehab visits. | |
pbp_b3_bendesc_per_{crs,icrs,prs,setpad} | Period code for the visit/amount limit per sub-service (string code, e.g. '3','6'). The denominator period (per year, per 12-18 weeks, etc.). Sparse. | |
pbp_b3_bendesc_per_{crs,icrs,prs,setpad}_d | Human-decoded text of the matching period code (e.g. 'Over 12-18 weeks.'). MOSTLY NULL even when the base code is populated — the decode is incomplete; do not rely on _d to detect that a limit exists. | |
pbp_b3_coins_pct_mc_{min,max}_{crs,icrs,prs,setpad} | Medicare-COVERED coinsurance percentage the member pays, min and max bound, per sub-service. THE primary cost-share metric. Range 0-38%, typically 20%. ~36-37K rows populated per sub-service. 'mc_' = Medicare-covered services. | |
pbp_b3_coins_pct_{min,max}_{crs,icrs,prs,setpad} | Coinsurance percentage min/max for NON-Medicare-covered (extra/supplemental) portion of the benefit per sub-service. Largely null — most cardiac rehab cost-share sits under the mc_ (Medicare-covered) columns. | |
pbp_b3_copay_amt_mc_{min,max}_{crs,icrs,prs,setpad} | Medicare-COVERED per-visit copay DOLLAR amount, min and max bound, per sub-service. THE primary dollar cost-share. CRS range $0-$50, median ~$19. ~58-62K rows populated. Note value 20.0 commonly appears as both a coins % and a copay $ — disambiguate via which column family. | |
pbp_b3_copay_amt_{min,max}_{crs,icrs,prs,setpad} | Copay dollar min/max for the NON-Medicare-covered/supplemental portion per sub-service. Largely null. | |
pbp_b3_maxenr_per / pbp_b3_maxenr_per_d | Period code and decoded text for the enrollee maximum. ALWAYS NULL (0 populated) in this table. |
Query it
describe_data_source(source_fqn="medicare_silver.pbp_section_b3_cardiac_rehab") # the card, live query_substrate(sql="SELECT * FROM medicare_silver.pbp_section_b3_cardiac_rehab WHERE bid_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_b3_cardiac_rehab") |
| Raw door | Athena (read-only via query_substrate): medicare_silver.pbp_section_b3_cardiac_rehab |
| Note | Grain-governed; live in Glue / query_substrate. Source family pbp_benefits. |
This page as markdown: /docs-md/data/medicare_silver_pbp_section_b3_cardiac_rehab.md · every page in one file: /llms-full.txt