Medicare Advantage, Part D, Medicaid

MA pbp section d opt

medicare_silver.pbp_section_d_opt·partial·silver·annual·Medicare Advantage Plan Benefit Packages (PBP)
Rows
N/A
Columns
36
History
2018 (effective_period_start 2018-01-01) to 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 D "Optional Supplemental Benefits" data: one row per optional buy-up benefit package (e.g. a Dental/Vision rider the member can elect for an extra monthly premium) that an MA plan offers, parsed from the annual CMS PBP benefits ZIP files.
  2. 2It captures each option's extra premium, its deductible, its plan-coverage maximum (cap), and which benefit categories it bundles.
  3. 3Use it to see what supplemental cost-sharing buy-ups MA plans sell and at what member price.

Grain

KeyGrain
contract_idplan_idsegment_idpbp_d_opt_identifierreport_yearquarter
  1. 1One row per optional supplemental benefit OPTION, per plan-segment, per CMS quarterly snapshot.
  2. 2Minimal verified key = contract_id + plan_id + segment_id + pbp_d_opt_identifier + report_year + quarter (40,968 distinct = 40,968 rows).
  3. 3Within one snapshot the four-part natural key contract_id+plan_id+segment_id+pbp_d_opt_identifier is already unique; report_year+quarter are snapshot dimensions whose quarters carry identical content (dedup to one quarter/year -> 17,983 annual records).

How to read it

  1. 1"What's the typical extra monthly premium for an optional dental/vision rider in 2025, and how many MA options offer one?" -> SELECT APPROX_PERCENTILE(pbp_d_amt_opt_premium,0.5) AS median_monthly_premium, COUNT(*) AS options FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY contract_id,plan_id,segment_id,pbp_d_opt_identifier,report_year ORDER BY quarter DESC) rn FROM medicare_silver.pbp_section_d_opt WHERE report_year=2025) t WHERE rn=1 AND pbp_d_opt_other_benefits LIKE '%16a%'.
  2. 2The dedup (rn=1) is essential so the duplicated quarterly snapshots don't inflate counts; the LIKE '%16a%' filters to options that bundle dental.

Traps

  1. 1QUARTERLY SNAPSHOTS DUPLICATE THE YEAR, AND THERE IS NO is_current FLAG. The same plan year is republished under up to 4 quarters with byte-identical content (2023 Q1 vs Q4: 0 premium diffs, 0 row churn). Total 40,968 rows but only 17,983 distinct annual records. ALWAYS dedup to one quarter per report_year (e.g. ROW_NUMBER() PARTITION BY contract_id,plan_id,segment_id,pbp_d_opt_identifier,report_year ORDER BY quarter DESC) before counting plans/options or you will multi-count by ~2.3x.
  2. 2MINIMAL GRAIN IS 6 COLUMNS, NOT THE PROFILER'S 14. The profiler reported a bloated superset including pbp_a_plan_type and five pbp_d_opt_maxplan_* columns. pbp_a_plan_type is constant per plan (functionally dependent, not needed), and pbp_d_opt_maxplan_cov is 100% NULL so it cannot contribute to a key. The true minimal key is contract_id+plan_id+segment_id+pbp_d_opt_identifier+report_year+quarter (and just the first four within any single snapshot).
  3. 3THREE DEAD COLUMNS ARE 100% NULL: pbp_d_opt_maxplan_cov, pbp_d_pick_benefits, pbp_d_pick_benefits_other. Do not build logic on them. (One of them, pbp_d_opt_maxplan_cov, even appears in the profiler's candidate key -- ignore it.)
  4. 4NULLS THAT CARRY MEANING, gated by Y/N flags: pbp_d_opt_deduct_amt/deduct_cats are null unless pbp_d_opt_deduct_yn='1' (only 5,088 rows have a deductible); pbp_d_opt_maxplan_ben_cov_amt and pbp_d_opt_maxplan_per are null unless pbp_d_opt_maxplan_ben_cov_yn='1' (null period = 'no cap'). A null here means 'feature absent', not 'unknown'. Also CMS Y/N codes are 1=Yes / 2=No (2 is NOT 'unknown').
  5. 5bid_id IS NOT AN INDEPENDENT KEY: it is exactly contract_id||'_'||plan_id||'_'||segment_id (verified 0 mismatches). Use pbp_d_opt_description (100% filled) for the option label, NOT pbp_d_opt_name (96.6% null). And in pbp_d_opt_secb_cats a lone ';' is a placeholder for empty -- treat it as null when parsing the category list.

Columns (36)

ColumnTypeMeaning
contract_idstringCMS MA contract ID (e.g. H0028). 359 distinct. Part of natural key. Letter+4 digits (H/R/S prefixes seen).
plan_idstringPlan ID within the contract (e.g. '016'). 3-char zero-padded string. 355 distinct values. Part of natural key. NOT unique on its own.
segment_idstringPlan segment ('0' for non-segmented plans = 34,266 rows; '1'..'7'+ for geographically segmented plans). Part of natural key.
pbp_d_opt_identifierstringSequence number of the optional supplemental benefit package within the plan (e.g. '001','002','003'). The discriminator that makes the row unique within a plan-snapshot. A plan can offer up to 5 options (median 1).
versiondoubleCMS PBP software/template version number for that filing year (double, 2.0..14.0+). Metadata, not a record key. Varies by report_year, NOT a dedup key.
report_yeardoublePlan/benefit year the option applies to (double: 2018..2026). Part of the snapshot grain. Equals year of effective_period_start/observed_period.
quarterdoubleCMS quarterly publication snapshot (1,2,3,4). Part of grain because the same plan year appears under multiple quarters, but content is IDENTICAL across quarters of a year. Pick one quarter (e.g. latest) per report_year to dedup to annual truth.
bid_idstringRedundant derived key = contract_id || '_' || plan_id || '_' || segment_id (verified 0 mismatches). Convenience identifier; carries NO information beyond its three components. Do not treat as an independent key.
orgtypestringCMS organization-type code (string). '01'=38,493 (local CCP/HMO-PPO, dominant), '11', '04', '06', '02'. Correlates with pbp_a_plan_type. Identifies the org structure of the contract.
pbp_a_ben_covstringPBP Section A benefit-coverage indicator (string). Almost always '1' (40,860); '2'=67; 41 null. Effectively constant; low analytic value.
pbp_a_plan_typestringMA plan-type code (string) carried from PBP Section A. '01'=HMO (21,419), '04'=Local PPO (12,491), '02'=HMO-POS (4,583), '31'=Regional PPO (1,194), '09'=PFFS (922), '18', '07'. Note: profiler listed this in the candidate key but it is functionally determined by the plan (constant per bid), so it is NOT needed for the minimal grain.
pbp_d_amt_opt_premiumdoubleExtra MONTHLY premium (USD) the member pays to elect this optional package. The headline COST field. Range $2.50-$157.00, median ~$29.65. 50 rows null.
pbp_d_opt_apply_moop_ynstringWhether this option's cost-sharing applies toward the plan MOOP (maximum out-of-pocket). CMS Y/N convention: '1'=Yes (86), '2'=No (40,841, almost always), 41 null. Nearly constant 'No'.
pbp_d_opt_deduct_amtdoubleDeductible USD for the option, populated only when pbp_d_opt_deduct_yn='1'. Range $10-$6,250. Null = no separate deductible (the common case).
pbp_d_opt_deduct_catsstringSemicolon-delimited list of PBP benefit-category codes the deductible applies to (e.g. '16b;', '16a;16b;', '16c1;16c2;...'). Populated for exactly the 5,088 rows where pbp_d_opt_deduct_yn='1'; null otherwise (null = no deductible).
pbp_d_opt_deduct_ynstringWhether the option carries a separate deductible. '1'=Yes (5,088), '2'=No (35,880). Drives whether deduct_amt/deduct_cats are populated.
pbp_d_opt_descriptionstringHuman-readable label of the option, 100% populated. The de-facto display name. Mix of marketing names ('Dental Platinum Rider', 'Enhanced Dental and Vision Package') and CMS codes ('MyOption DEN478', 'MyOption Vision'). Use THIS, not pbp_d_opt_name.
pbp_d_opt_maxplan_ben_cov_amtdoublePlan-coverage maximum / annual benefit cap (USD) the option pays before the member is fully responsible. Populated only when pbp_d_opt_maxplan_ben_cov_yn='1'. Range $0-$30,000. Null = no plan max (uncapped).
pbp_d_opt_maxplan_ben_cov_ynstringWhether the option has a maximum plan-coverage cap. '1'=Yes (19,661), '2'=No (21,307). Gates maxplan_ben_cov_amt and maxplan_per.
pbp_d_opt_maxplan_perstringPeriodicity code for the coverage max ('3'=per year is dominant at 18,103; '6', '2', '4' rare). NULL exactly when maxplan_ben_cov_yn='2' (21,307 nulls) -> null carries meaning: 'no cap, so no period'.
pbp_d_opt_maxplan_per_dstringFree-text description of a non-standard coverage-max periodicity. 99.5% null (only 187 populated); used for combined INN/OON dental+vision max notes. Niche.
pbp_d_opt_namestringOptional explicit name of the package, but 96.6% NULL (39,567 null). Largely unused legacy field -- prefer pbp_d_opt_description for the label.
pbp_d_opt_other_benefitsstringSemicolon-delimited list of PBP section codes for the benefit categories bundled in this option (16a/16b=Dental, 17a/17b=Vision, plus sub-codes like 16a1..16b7). E.g. '16a;16b;' (11,717), '16a;16b;17b;'. ~18% null. Tells you WHAT the option covers.
pbp_d_opt_secb_catsstringSemicolon-delimited supplemental-benefit category codes (e.g. '16a;16b;', '17a;17b;', '14c;'). ~25% populated (10,064). Caveat: a lone ';' appears as a placeholder/empty value (589 rows) -- treat ';' as effectively null.
pbp_d_pick_benefitsstringDEAD COLUMN: 100% NULL (0 of 40,968 populated). Reserved 'pick-your-benefit' field unused in this dataset.
observed_perioddateProvenance: date the benefit year is observed for (= Jan 1 of report_year). Redundant with effective_period_start; one of the snapshot/period columns.
asserted_atdateProvenance: date Vlada parsed/asserted the record (2026-05-16 or 2026-05-20). Pipeline metadata, not a business field.
effective_period_startdateStart of the plan year the option is in force (Jan 1 of report_year). The table's primary time column; spans 2018-01-01 .. 2026-01-01.
effective_period_enddateEnd of the plan year (Dec 31 of report_year). Always the calendar year-end paired with effective_period_start.
cms_vintage_sequenceintInteger vintage rank of the CMS quarterly republish (1..4), broadly tracking quarter (Q2->2, Q3->3, Q4->4) but not perfectly 1:1 (early years mix). Useful for picking the latest vintage within a year.
parse_revisionintVlada parser revision (1 or 2). 7,062 rows at rev 1 (the as-of-2026-05-16 load), 33,906 at rev 2. Pipeline metadata.
parser_artifact_hashstringSHA-256 of the parser artifact used (provenance lineage). Metadata for reproducibility.
source_urlstringCMS source ZIP the row came from (e.g. https://www.cms.gov/files/zip/pbp-benefits-2023-quarter-1.zip). One source_url per (report_year, quarter). Provenance.
sha256_content_hashstringSHA-256 of the source content (provenance/integrity). Metadata.
pbp_d_opt_maxplan_covstringDEAD COLUMN: 100% NULL (0 of 40,968). Note: the profiler wrongly listed this in the candidate grain key -- it is entirely null and contributes nothing to uniqueness.
pbp_d_pick_benefits_otherstringDEAD COLUMN: 100% NULL (0 of 40,968). Companion to pbp_d_pick_benefits, unused.

Query it

describe_data_source(source_fqn="medicare_silver.pbp_section_d_opt")     # the card, live
query_substrate(sql="SELECT * FROM medicare_silver.pbp_section_d_opt WHERE contract_id = '<value>' AND plan_id = '<value>' AND segment_id = '<value>' AND pbp_d_opt_identifier = '<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_d_opt")
Raw doorAthena (read-only via query_substrate): medicare_silver.pbp_section_d_opt
NoteGrain-governed; live in Glue / query_substrate. Source family pbp_benefits.

This page as markdown: /docs-md/data/medicare_silver_pbp_section_d_opt.md · every page in one file: /llms-full.txt