Medicare Advantage, Part D, Medicaid
MA pbp section b6 home health
medicare_silver.pbp_section_b6_home_health·partial·silver·quarterly·Medicare Advantage Plan Benefit Packages (PBP)Rows
N/A
Columns
165
History
2001 to 2026
Card
yesgrain, traps, filters
Typed tools
1
What it is
- 1CMS Medicare Advantage Plan Benefit Package (PBP) Section B-6: the home-health cost-sharing and access rules each MA / MA-PD plan files with CMS.
- 2One row states, for a given plan-year snapshot, whether home-health visits carry a copay/coinsurance/deductible (and the dollar/percent amounts), whether prior auth or referral is required, any benefit caps, and any added non-Medicare-covered in-home services.
- 3It is the authoritative cost-sharing benchmark for Medicare Advantage home-health benefits.
Grain
| Key | Grain |
|---|---|
contract_idplan_idsegment_idreport_yearquarter |
|
How to read it
- 1To benchmark Medicare Advantage home-health cost-sharing for the latest plan year, pin to one snapshot per plan and read the master flags + mc amounts.
- 2Example: SELECT contract_id, plan_id, segment_id, pbp_a_plan_type, pbp_b6_auth_yn, pbp_b6_copay_yn, pbp_b6_copay_mc_amt_min, pbp_b6_copay_mc_amt_max, pbp_b6_coins_yn, pbp_b6_coins_pct_mc FROM medicare_silver.pbp_section_b6_home_health WHERE report_year = 2026 AND quarter = 1 — answers 'which MA plans require prior auth for home health, and what copay/coinsurance do they charge?' To trend over time, GROUP BY report_year using a single quarter per year (e.g. quarter = 1, or MAX(quarter)) to avoid quarterly double-counting.
Traps
- 1NOT one-row-per-plan-per-year. quarter is part of the grain: 2001-2017 publish Q1 only, but 2018+ publish up to 4 quarterly snapshots of the SAME plan-year (e.g. 2023 has Q1-Q4). Naively counting rows or joining without pinning quarter double/quadruple-counts recent plan-years. For a per-plan-year view, filter to one quarter (e.g. MAX(quarter) per report_year) or to quarter=1.
- 2There is NO is_current column and no within-grain dedup is needed — each (contract,plan,segment,report_year,quarter) has exactly one row / one cms_vintage_sequence (verified 0 multi-vintage groups). cms_vintage_sequence (1-4) and parse_revision are provenance/ingest-batch markers, NOT version flags to filter on; asserted_at (only 2026-05-16 / 2026-05-20) is the lake LOAD date, not a benefit date.
- 3bid_id LOOKS like a primary key but is not: it is the derived concat contract_id_plan_id_segment_id and is NULL for 8,316 early-year rows, so DISTINCT bid_id (23,191) under-counts the real plan population (26,631 contract+plan+segment combos). Use the three ID columns, not bid_id.
- 4_yn flags follow CMS convention '1'=Yes, '2'=No, and NULL = not collected in that year's PBP version (PBP schema changed over 25 years) — NULL does not mean 'No'. The flag gates its amount columns: copay/coins/deductible dollar+percent fields are only populated when the matching *_yn='1'. Deductible is essentially always '2'/No (Original-Medicare home health has no deductible; only 3 rows carry an amount).
- 5Most measure columns are extremely sparse and benefit-specific. The entire pbp_b6_mm_* sub-block (additional / Non-Medicare-Covered in-home support services) is NULL in ~200,350 of 201,488 rows (mm_nmc_yn set in just 1,138). Many _pos (point-of-service/out-of-network) columns are vestigial (e.g. pbp_b6_copay_amtv_pos is 100% NULL). Suffixes encode home-health sub-categories: mc=Medicare-covered (the main one), hs/rc/cc=other sub-services; pull the mc and the *_yn columns for the core cost-sharing story.
- 6Sibling-table caveat: this is ONLY PBP Section B-6 (home health). Other pbp_section_b* tables hold other benefit categories (B-1 inpatient, B-7 professional, etc.) at the SAME plan grain — do not assume a plan's home-health cost-share generalizes. report_year/observed_period/effective_period_start are all the same year (redundant); effective_period_end is always Dec 31 of that year.
Columns (165)
| Column | Type | Meaning |
|---|---|---|
contract_id | string | CMS Medicare Advantage/Part C contract ID (e.g. H0028). Prefix encodes program: H=local MA/MA-PD (1,933 contracts), R=regional PPO (37), E=employer/EGWP (2). All rows are MA contracts. Part of the grain key. |
plan_id | string | 3-char plan benefit package ID within the contract (e.g. '001','007'). 656 distinct values. A contract sells many plans. Part of the grain key. |
segment_id | string | Plan segment (service-area sub-division). '0' = non-segmented plan (181,424 rows, the norm); '1'-'27' = segmented plans; empty-string '' for 5,074 early-year rows (never NULL). Part of the grain key — needed because the same contract+plan can have multiple segments. |
version | double | CMS bid/PBP submission version number for that plan-year (double, 0-27). Resets each report_year (e.g. 2023 plans show v3, 2024 v6). Identifies which iteration of the plan's bid the snapshot reflects; NOT a lake-side dedup version and NOT part of the minimal grain. |
report_year | double | Plan/benefit year the row describes (double, 2001-2026). Equals year(observed_period)=year(effective_period_start)=year(effective_period_end) exactly. Part of the grain key (stands in for observed_period). This is the year the benefits are IN EFFECT, not when filed. |
quarter | double | CMS PBP quarterly release the snapshot came from (double, 1-4). Part of the grain key. CRITICAL: 2001-2017 have Q1 only; 2018+ have up to 4 quarterly re-publications of the SAME plan year. A given plan-year appears once per published quarter. |
bid_id | string | Derived plan key = contract_id||'_'||plan_id||'_'||segment_id (verified: equals that concat in 100% of non-null rows). NULL for 8,316 early-year rows. Redundant with the three ID columns; do NOT use as a standalone key (its nulls make it non-unique). |
orgtype | string | CMS organization type code (string): '01'=Local CCP/HMO-PPO (177,737, plurality), '08'=Regional PPO, '04'=PFFS, '11'=MSA, '06'=1876 Cost, '05'=PDP-ish, etc. Describes the MA organization structure. |
pbp_a_ben_cov | string | Section A benefit-coverage indicator (string): '1'=plan covers Original Medicare benefits (196,773), '2'=does not (4,373), NULL (342). Carried from PBP Section A. |
pbp_a_plan_type | string | CMS plan-type code (string): '01'=HMO (101,510), '04'=Local PPO (55,909), '02'=HMOPOS (20,097), '20'=Regional PPO, '09'=PFFS, '31'=MSA, '18'=Cost, '48'=Special. Carried from PBP Section A; classifies the plan product. |
pbp_b6_auth | string | |
pbp_b6_auth_pos | string | |
pbp_b6_auth_yn | string | |
pbp_b6_bendec_hh | string | |
pbp_b6_bendec_yesno | string | |
pbp_b6_bendesc_amo | string | |
pbp_b6_bendesc_amo_hs | string | |
pbp_b6_bendesc_amo_rc | string | |
pbp_b6_bendesc_amohs | string | |
pbp_b6_bendesc_amorc | string | |
pbp_b6_bendesc_hh | string | |
pbp_b6_bendesc_yn | string | |
pbp_b6_coins_cov_cc | string | |
pbp_b6_coins_cov_hs | string | |
pbp_b6_coins_cov_mc | string | |
pbp_b6_coins_cov_pos | string | |
pbp_b6_coins_cov_rc | string | |
pbp_b6_coins_pct_cc | double | |
pbp_b6_coins_pct_cc_max | double | |
pbp_b6_coins_pct_cc_min | double | |
pbp_b6_coins_pct_ccmax | double | |
pbp_b6_coins_pct_hs | double | |
pbp_b6_coins_pct_hs_max | double | |
pbp_b6_coins_pct_hs_min | double | |
pbp_b6_coins_pct_hsmax | double | |
pbp_b6_coins_pct_max_pos | double | |
pbp_b6_coins_pct_mc | double | |
pbp_b6_coins_pct_mc_max | double | |
pbp_b6_coins_pct_mc_min | double | |
pbp_b6_coins_pct_mcmax | double | |
pbp_b6_coins_pct_pos | double | |
pbp_b6_coins_pct_rc | double | |
pbp_b6_coins_pct_rc_max | double | |
pbp_b6_coins_pct_rc_min | double | |
pbp_b6_coins_pct_rcmax | double | |
pbp_b6_coins_yesno | string | |
pbp_b6_coins_yesno_pos | string | |
pbp_b6_coins_yn | string | |
pbp_b6_copay_amtv_pos | double | |
pbp_b6_copay_cc_amt | double | |
pbp_b6_copay_cc_amt_max | double | |
pbp_b6_copay_cc_amt_min | double | |
pbp_b6_copay_cc_amtmax | double | |
pbp_b6_copay_hs_amt | double | |
pbp_b6_copay_hs_amt_max | double | |
pbp_b6_copay_hs_amt_min | double | |
pbp_b6_copay_hs_amtmax | double | |
pbp_b6_copay_max_amtv_pos | double | |
pbp_b6_copay_mc_amt_max | double | |
pbp_b6_copay_mc_amt_min | double | |
pbp_b6_copay_mcamt | double | |
pbp_b6_copay_mcamtmax | double | |
pbp_b6_copay_rc_amt | double | |
pbp_b6_copay_rc_amt_max | double | |
pbp_b6_copay_rc_amt_min | double | |
pbp_b6_copay_rc_amtmax | double | |
pbp_b6_copay_yesno | string | |
pbp_b6_copay_yesno_pos | string | |
pbp_b6_copay_yn | string | |
pbp_b6_ded_amt | double | |
pbp_b6_ded_amt_pos | double | |
pbp_b6_ded_yesno_pos | string | |
pbp_b6_ded_yn | string | |
pbp_b6_maxenr_amt | double | |
pbp_b6_maxenr_amt_pos | double | |
pbp_b6_maxenr_per | string | |
pbp_b6_maxenr_per_d | string | |
pbp_b6_maxenr_yesno | string | |
pbp_b6_maxenr_yn | string | |
pbp_b6_maxenr_yn_pos | string | |
pbp_b6_maxplan_yesno_pos | string | |
pbp_b6_maxpln_amt_pos | double | |
pbp_b6_maxpln_cov_pos | string | |
pbp_b6_maxpln_per_pos | string | |
pbp_b6_mm_addl_service_other1 | string | |
pbp_b6_mm_addl_service_other2 | string | |
pbp_b6_mm_auth | string | |
pbp_b6_mm_auth_yn | string | |
pbp_b6_mm_coins_addl_max | double | |
pbp_b6_mm_coins_addl_min | double | |
pbp_b6_mm_coins_other1_max | double | |
pbp_b6_mm_coins_other1_min | double | |
pbp_b6_mm_coins_other2_max | double | |
pbp_b6_mm_coins_other2_min | double | |
pbp_b6_mm_coins_pcs_max | double | |
pbp_b6_mm_coins_pcs_min | double | |
pbp_b6_mm_coins_services | string | |
pbp_b6_mm_coins_yn | string | |
pbp_b6_mm_copay_addl_max | double | |
pbp_b6_mm_copay_addl_min | double | |
pbp_b6_mm_copay_other1_max | double | |
pbp_b6_mm_copay_other1_min | double | |
pbp_b6_mm_copay_other2_max | double | |
pbp_b6_mm_copay_other2_min | double | |
pbp_b6_mm_copay_pcs_max | double | |
pbp_b6_mm_copay_pcs_min | double | |
pbp_b6_mm_copay_services | string | |
pbp_b6_mm_copay_yn | string | |
pbp_b6_mm_lim_unit_type_ahc_d | string | |
pbp_b6_mm_lim_unit_type_oth1_d | string | |
pbp_b6_mm_lim_unit_type_oth2_d | string | |
pbp_b6_mm_limit_services | string | |
pbp_b6_mm_limit_unit_num_ahc | double | |
pbp_b6_mm_limit_unit_num_oth1 | double | |
pbp_b6_mm_limit_unit_num_oth2 | double | |
pbp_b6_mm_limit_unit_num_pc | double | |
pbp_b6_mm_limit_unit_per_ahc | string | |
pbp_b6_mm_limit_unit_per_ahc_d | string | |
pbp_b6_mm_limit_unit_per_oth1 | string | |
pbp_b6_mm_limit_unit_per_oth2 | string | |
pbp_b6_mm_limit_unit_per_pc | string | |
pbp_b6_mm_limit_unit_per_pc_d | string | |
pbp_b6_mm_limit_unit_type_ahc | string | |
pbp_b6_mm_limit_unit_type_oth1 | string | |
pbp_b6_mm_limit_unit_type_oth2 | string | |
pbp_b6_mm_limit_unit_type_pc | string | |
pbp_b6_mm_limit_unit_type_pc_d | string | |
pbp_b6_mm_limit_yn | string | |
pbp_b6_mm_limt_unit_per_oth1_d | string | |
pbp_b6_mm_limt_unit_per_oth2_d | string | |
pbp_b6_mm_maxplan_amt | double | |
pbp_b6_mm_maxplan_per | string | |
pbp_b6_mm_maxplan_per_d | string | |
pbp_b6_mm_maxplan_yn | string | |
pbp_b6_mm_nmc_yn | string | |
pbp_b6_mm_refer_yn | string | |
pbp_b6_mm_services | string | |
pbp_b6_mmp_waiver_srvc | string | |
pbp_b6_mmp_waiver_yn | string | |
pbp_b6_refer_yn | string | |
pbp_b_6_ded_amt | double | |
pbp_b_6_ded_yesno | string | |
observed_period | date | |
asserted_at | date | |
effective_period_start | date | |
effective_period_end | date | |
cms_vintage_sequence | int | |
parse_revision | int | |
parser_artifact_hash | string | |
source_url | string | |
sha256_content_hash | string | |
pbp_b6_auth_yn / pbp_b6_refer_yn | Whether prior authorization (auth) / referral (refer) is required for home health. CMS yes/no convention: '1'=Yes, '2'=No, NULL=not asked that PBP version. Auth: 120,706 Yes; Refer: 53,884 Yes. pbp_b6_auth/pbp_b6_auth_pos hold free-text/POS auth detail (mostly NULL). | |
pbp_b6_copay_yn / pbp_b6_coins_yn / pbp_b6_ded_yn | Master flags for whether the plan charges a copay / coinsurance / deductible on Medicare-covered home health. '1'=Yes, '2'=No, NULL=n/a. Copay Yes=79,803; Coins Yes=39,227; Deductible almost always '2'=No (only 3 rows Yes — Original-Medicare home health has no deductible). These gate the corresponding amount columns. | |
pbp_b6_copay_{mc,hs,rc,cc}_amt[_min/_max] / pbp_b6_copay_mcamt[max] | Home-health copay DOLLAR amounts by sub-category: mc=Medicare-covered home health (primary), hs/rc/cc=other home-health sub-services. _min/_max give the range; the bare/_mcamt is a point value. Observed range $0-$65 (mostly $0 — MA home health rarely charges). Populated only when copay_yn='1'. | |
pbp_b6_coins_pct_{mc,hs,rc,cc}[_min/_max] + pbp_b6_coins_cov_* | Home-health coinsurance PERCENT by sub-category (double, 0-35, median 0). coins_cov_* are coverage-descriptor codes (1-6) for what the coinsurance applies to. Populated only when coins_yn='1' (very sparse for mc: ~12 non-null). | |
pbp_b6_ded_amt / pbp_b_6_ded_amt / pbp_b6_ded_amt_pos | Home-health deductible dollar amount. Essentially always NULL (deductible_yn is overwhelmingly No); only 3 rows carry a value ($124). pbp_b_6_ded_amt / pbp_b_6_ded_yesno are legacy duplicate spellings (underscore-6) of the same concept, nearly all NULL. | |
pbp_b6_maxenr_* (amt, per, per_d, yn) / pbp_b6_maxpln_* / pbp_b6_maxplan_yesno_pos | Maximum enrollee out-of-pocket / maximum plan benefit caps on home health: yn flag ('2'=No in 191,273 rows — caps rare), amt=dollar cap, per/per_d=period the cap applies over (coded + decoded). _pos variants are for the POS/out-of-network side. Almost entirely No/NULL for this benefit. | |
pbp_b6_mm_* (services, nmc_yn, auth_yn, refer_yn, coins_*, copay_*, limit_*, maxplan_*) | The 'MM' sub-block = additional / Non-Medicare-Covered (NMC) in-home support & supplemental home-health services a plan may add. VERY sparse: ~200,350 of 201,488 rows NULL. mm_nmc_yn='1' in only 1,138 rows. mm_services is a 4-bit service-category bitmask ('0100','0111',...). mm_limit_* encode visit/unit limits (num + period + unit-type, with _d decoded text). Use only for the small set of plans offering expanded home health. | |
pbp_b6_*_pos suffix columns | Point-of-service / out-of-network cost-share variants (copay_amtv_pos, coins_*_pos, maxpln_*_pos, ded_*_pos, etc.). Largely vestigial here — e.g. pbp_b6_copay_amtv_pos is 100% NULL. Present for schema symmetry with POS-capable plan types. | |
observed_period (date) | The plan year as a date — always Jan 1 of report_year. Constant within a (report_year, quarter). Bitemporal 'valid-time' anchor; redundant with report_year. | |
effective_period_start / effective_period_end (date) | Benefit validity window: Jan 1 -> Dec 31 of report_year (effective_period_end is ALWAYS Dec 31, verified). Defines the plan year the cost-sharing is in force. | |
asserted_at (date) | Bitemporal 'transaction-time' — the date this row was loaded/asserted into the lake. Only 2 values (2026-05-16: 100,054 rows; 2026-05-20: 101,434). It is an INGEST date, NOT a benefit date; do not confuse with effective_period. | |
cms_vintage_sequence (int) | Sequence (1-4) of the CMS quarterly release within ingestion. Maps 1:1 to the quarterly source file batch (v1=Q1 load of 100,054, etc.). Each grain row has exactly ONE vintage (verified 0 multi-vintage groups) — so it is NOT a within-grain dedup/is_current marker. | |
parse_revision (int) | Version of the parser/pipeline that produced the row (1 or 2 observed). Provenance for reproducibility; not a business key. | |
parser_artifact_hash / source_url / sha256_content_hash | Provenance trio: parser_artifact_hash = code-artifact fingerprint; source_url = the exact CMS PBP zip (e.g. .../pbp-benefits-2022-quarter-2.zip, 40 distinct = 40 year-quarter files); sha256_content_hash = content hash of the source file. Enables full lineage back to the CMS download. |
Query it
describe_data_source(source_fqn="medicare_silver.pbp_section_b6_home_health") # the card, live query_substrate(sql="SELECT * FROM medicare_silver.pbp_section_b6_home_health 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_b6_home_health") |
| Raw door | Athena (read-only via query_substrate): medicare_silver.pbp_section_b6_home_health |
| Note | Grain-governed; live in Glue / query_substrate. Source family pbp_benefits. |
This page as markdown: /docs-md/data/medicare_silver_pbp_section_b6_home_health.md · every page in one file: /llms-full.txt