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

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

KeyGrain
bid_idreport_yearquarter
  1. 1One row per MA plan-benefit-package per CMS quarterly snapshot.
  2. 2The minimal verified key is (bid_id, report_year, quarter) = 113,962 distinct = the full row_count. bid_id is exactly contract_id + '_' + plan_id + '_' + segment_id (0 mismatches), so contract/plan/segment are decomposed components of bid_id, and pbp_a_plan_type is a stable per-plan attribute (0 variance within bid_id-year), NOT part of the key — the profiler's 8-column key was a redundant superset.
  3. 3Deduplicated to one row per plan per plan-year (latest quarter per bid_id+report_year) yields 55,872 plan-years across 2019-2026.

How to read it

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

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

ColumnTypeMeaning
contract_idstringCMS MA contract ID (e.g. H0028). 1,231 distinct. First component of bid_id; identifies the contracting organization.
plan_idstring3-digit plan number within the contract (e.g. 001, 014). 656 distinct. Second component of bid_id.
segment_idstringGeographic/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.
versiondoubleCMS 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_yeardoubleContract/plan year the benefit applies to (double, 2019-2026). Equals the year of effective_period_start/observed_period. Part of the grain key.
quarterdoubleCMS 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_idstringConcatenation contract_id_plan_id_segment_id (e.g. H0028_014_0). The natural plan identifier; combined with report_year+quarter forms the unique grain.
orgtypestringCMS 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_covstringBenefit-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_typestringMA 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_ynstringPrior 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_crsstring
pbp_b3_bendesc_amo_icrsstring
pbp_b3_bendesc_amo_prsstring
pbp_b3_bendesc_amo_setpadstring
pbp_b3_bendesc_ehcstringEnhanced/extra-help-coverage bitmask string for the benefit description. Sparse fixed-width flag string.
pbp_b3_bendesc_lim_crsstring
pbp_b3_bendesc_lim_icrsstring
pbp_b3_bendesc_lim_prsstring
pbp_b3_bendesc_lim_setpadstring
pbp_b3_bendesc_numv_crsdouble
pbp_b3_bendesc_numv_icrsdouble
pbp_b3_bendesc_numv_prsdouble
pbp_b3_bendesc_numv_setpaddouble
pbp_b3_bendesc_per_crsstring
pbp_b3_bendesc_per_crs_dstring
pbp_b3_bendesc_per_icrsstring
pbp_b3_bendesc_per_icrs_dstring
pbp_b3_bendesc_per_prsstring
pbp_b3_bendesc_per_prs_dstring
pbp_b3_bendesc_per_setpadstring
pbp_b3_bendesc_per_setpad_dstring
pbp_b3_bendesc_ynstringWhether 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_ehcstringFixed-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_crsdouble
pbp_b3_coins_pct_max_icrsdouble
pbp_b3_coins_pct_max_prsdouble
pbp_b3_coins_pct_max_setpaddouble
pbp_b3_coins_pct_mc_max_crsdouble
pbp_b3_coins_pct_mc_max_icrsdouble
pbp_b3_coins_pct_mc_max_prsdouble
pbp_b3_coins_pct_mc_max_setpaddouble
pbp_b3_coins_pct_mc_min_crsdouble
pbp_b3_coins_pct_mc_min_icrsdouble
pbp_b3_coins_pct_mc_min_prsdouble
pbp_b3_coins_pct_mc_min_setpaddouble
pbp_b3_coins_pct_min_crsdouble
pbp_b3_coins_pct_min_icrsdouble
pbp_b3_coins_pct_min_prsdouble
pbp_b3_coins_pct_min_setpaddouble
pbp_b3_coins_ynstringWhether coinsurance applies to this benefit. '1'=Yes (37K), '2'=No. Pairs with the coins_pct_* columns.
pbp_b3_copay_amt_max_crsdouble
pbp_b3_copay_amt_max_icrsdouble
pbp_b3_copay_amt_max_prsdouble
pbp_b3_copay_amt_max_setpaddouble
pbp_b3_copay_amt_mc_max_crsdouble
pbp_b3_copay_amt_mc_max_icrsdouble
pbp_b3_copay_amt_mc_max_prsdouble
pbp_b3_copay_amt_mc_max_setpaddouble
pbp_b3_copay_amt_mc_min_crsdouble
pbp_b3_copay_amt_mc_min_icrsdouble
pbp_b3_copay_amt_mc_min_prsdouble
pbp_b3_copay_amt_mc_min_setpaddouble
pbp_b3_copay_amt_min_crsdouble
pbp_b3_copay_amt_min_icrsdouble
pbp_b3_copay_amt_min_prsdouble
pbp_b3_copay_amt_min_setpaddouble
pbp_b3_copay_ehcstringFixed-width bitmask string marking which sub-services a copay applies to (same scheme as coins_ehc). Null when no copay.
pbp_b3_copay_ynstringWhether 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_amtdoubleBenefit-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_ynstringWhether a benefit-specific deductible applies. Effectively always '2'=No for cardiac rehab. Vestigial here.
pbp_b3_maxenr_amtdoubleMaximum-per-enrollee dollar cap (double). ALWAYS NULL (0 populated) in this table.
pbp_b3_maxenr_perstring
pbp_b3_maxenr_per_dstring
pbp_b3_maxenr_ynstringWhether an annual enrollee maximum (cap on covered amount/visits) applies. Effectively always '2'=No. Vestigial here.
pbp_b3_refer_ynstringWhether a referral is required for the benefit. '1'=Yes, '2'=No (majority).
observed_perioddatePlan-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_atdateDate Vlada ingested/asserted this record (date, 2026-05-16 or 2026-05-20). Pipeline bookkeeping, not a plan attribute.
effective_period_startdateBenefit 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_enddateBenefit effective end (date, Dec 31 of report_year). With start, defines the one-year coverage window.
cms_vintage_sequenceintInteger 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_revisionintVlada parser revision that produced the row (int: 2 distinct). Provenance/versioning of the extraction logic.
parser_artifact_hashstringSHA-256 of the parser artifact/code that generated the row. 16 distinct (one per source file run). Provenance.
source_urlstringCMS 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_hashstringSHA-256 of the source file content. 16 distinct (1:1 with source_url). Immutability/provenance check.
pbp_b3_1_maxplan_amtdouble
pbp_b3_1_maxplan_perstring
pbp_b3_1_maxplan_per_dstring
pbp_b3_1_maxplan_ynstring
pbp_b3_2_maxplan_amtdouble
pbp_b3_2_maxplan_perstring
pbp_b3_2_maxplan_per_dstring
pbp_b3_2_maxplan_ynstring
pbp_b3_3_maxplan_amtdouble
pbp_b3_3_maxplan_perstring
pbp_b3_3_maxplan_per_dstring
pbp_b3_3_maxplan_ynstring
pbp_b3_4_maxplan_amtdouble
pbp_b3_4_maxplan_perstring
pbp_b3_4_maxplan_per_dstring
pbp_b3_4_maxplan_ynstring
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}_dHuman-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_dPeriod 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")
ItemValue
Typed tools that read itget_pbp_benefit
Identity keycontract_id
Joinhow_to_join(source_fqn="medicare_silver.pbp_section_b3_cardiac_rehab")
Raw doorAthena (read-only via query_substrate): medicare_silver.pbp_section_b3_cardiac_rehab
NoteGrain-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