Medicare Advantage, Part D, Medicaid

PBP dme (cleaned view)

medicare_semantic.vw_pbp_dme·live·semantic_view·quarterly
Rows
N/A
Columns
51
History
2001 (report_year 2001, Q1) to 2026 (report_year 2026, Q1 — next plan year, already published)
Card
yesgrain, traps, filters
Typed tools
1

What it is

  1. 1A longitudinal Medicare Advantage Plan Benefit Package (PBP) view of enrollee cost-sharing for Durable Medical Equipment and the two adjacent benefits CMS files alongside it — prosthetics and medical supplies (PBP Section B11A/B/C).
  2. 2For each MA plan and each CMS quarterly release, it states the in-network copay and coinsurance an enrollee pays for DME, whether prior authorization is required, and whether a preferred vendor applies.
  3. 3It is a benefit-design / cost-share reference (what the plan charges members), not a claims or paid-amount dataset.

Grain

KeyGrain
contract_idplan_idsegment_idreport_yearquarterdme_sub_benefit
  1. 1One row per Medicare Advantage plan segment, per CMS PBP release (report_year + quarter), per DME sub-benefit (dme / prosthetics / medical_supplies).
  2. 2Verified minimal unique key = (contract_id, plan_id, segment_id, report_year, quarter, dme_sub_benefit): all 604,464 rows are distinct on this key with zero duplicates, and it is exactly 201,488 plan-snapshots x 3 sub-benefits = 604,464.
  3. 3The profiler failed to find the grain because it never tested dme_sub_benefit (the column that triples each plan-snapshot).

How to read it

  1. 1Get the current in-network DME enrollee cost share for every MA plan: SELECT contract_id, plan_id, segment_id, dme_sub_benefit, cost_share_string, coinsurance_pct, coinsurance_pct_min, coinsurance_pct_max, copay_amount, auth_required FROM vw_pbp_dme WHERE report_year = 2026 AND quarter = 1 AND dme_sub_benefit = 'dme'.
  2. 2Answers 'what does each Medicare Advantage plan charge a member for durable medical equipment this year, and does it need prior auth?' For a time trend, drop the year filter and group by report_year (remembering quarter republications).
  3. 3Join to plan/enrollment dims on (contract_id, plan_id, segment_id) to weight by membership.

Traps

  1. 1NO is_current / as_of column and the table is CUMULATIVE across every CMS release 2001-2026 (a single plan appears in up to 21 years). To get 'today's' benefits you MUST filter to the latest (report_year, quarter) yourself — e.g. report_year=2026. Forgetting this multiplies every plan by ~25 snapshots.
  2. 2Time is report_year + quarter, NOT just quarter. The profiler's temporal block reports quarter (1-4) as the time column with 'earliest 1.0 / latest 4.0' — that is wrong/misleading; the real history axis is report_year (2001-2026) with quarter as a within-year republication. Early years are Q1-only; 2018+ have multiple quarters.
  3. 3A large block of columns is 100% NULL because they are template scaffolding from the shared PBP semantic-view shape that DME never fills: limit_text, max_oop_applies, referral_required, all limit_* (limit_quantity/unit/period_code/period_label/quantity_per_year), all benefit_amount_* (amount/kind/period_code/period_label/annualized/pmpm), normalization_status, normalization_basis, aggregation_policy. Do not treat these as usable fields here. limit_period_code and benefit_amount_period_code showed up as profiler 'candidate keys' ONLY because all-NULL columns collapse — they are not keys.
  4. 4Nine columns are single-value CONSTANTS across all 604,464 rows and carry no row-level signal: benefit_category='dme', network_type='in_network', offered_status='offered', numeric_amount_observability='offered_without_numeric_amounts', null_amount_reason='unknown_requires_crosswalk', annualization_policy='not_numeric', combined_limit_policy='none_detected', consumer_document_reconciliation_status='not_checked', confidence_tier='source_faithful'. (confidence_tier and offered_status also appeared in the profiler's candidate-key set despite being constants.)
  5. 5Cost share is coinsurance-dominated and expressed as a RANGE, not a single number. coinsurance_pct is always the floor (equals coinsurance_pct_min in 100% of non-null rows); coinsurance_pct_max can be higher (65,661 rows) because one row rolls up many DME line items with differing coinsurance. copay_amount is non-null on only 58K rows and is $0 ~96% of the time. cost_share_string is NULL on 109K rows but copay/coinsurance/has_* can still carry signal — NULL string != no benefit.
  6. 6The has_* boolean flags are derived INDEPENDENTLY of the headline cost_share_string and are nullable: has_coinsurance can be True even when the string says only '$0 copay' (it reflects sub-item coinsurance), and any has_* may be NULL = unknown, not False. auth_required is tri-state too: 367K true / 52K false / 185K NULL where NULL means not-specified, not 'no'.
  7. 7version is the PBP submission/amendment version (0-27) and is NOT part of the grain — the row is already deduped to one per snapshot. Do not add it to a join key expecting finer grain. Also segment_id has an EMPTY-STRING '' value (15,222 rows, only 2001-2005) that means the same as '0' (unsegmented); treat '' and '0' as equivalent or you will split/lose legacy plans. dme_sub_benefit is 100% redundant with source_pbp_section (B11A/B/C) — use either, not both, as a dimension.

Columns (51)

ColumnTypeMeaning
contract_idstringCMS Medicare Advantage / Part D contract ID (e.g. 'H0022','H0028'). 1,972 distinct. Part of grain. Join key to plan/contract dims.
plan_idstringPlan benefit package ID within the contract (e.g. '001','007','804'), zero-padded 3-char string. 656 distinct values but only unique WITHIN a contract. Part of grain.
segment_idstringPlan segment ID. Mostly '0' (unsegmented, 544K rows); 1-6 for geographically segmented plans; EMPTY STRING '' for legacy 2001-2005 rows (15,222) which also means unsegmented. Part of grain. Treat '' and '0' as equivalent.
versiondoubleCMS PBP submission/amendment version number for that plan-year filing (double, 0-27). NOT part of the grain (already deduped to one row per snapshot). Higher = more amended; mass concentrated at 0-5.
report_yeardoubleContract/benefit year of the CMS PBP release (double, 2001-2026). The primary time axis. Part of grain. 2026 is forward-looking (next plan year already published).
quarterdoubleCMS release quarter within report_year (double, 1-4). Most early years have only Q1; 2018+ have multiple quarterly republications. Part of grain. NOTE: profiler mislabeled this as the only time column — true history is report_year+quarter.
benefit_categorystringTop-level benefit family. CONSTANT = 'dme' for every row (this view is DME-only). Use dme_sub_benefit to distinguish the three DME sub-services.
cost_share_stringstringHuman-readable consumer-facing cost share, e.g. '20.0%','$0 copay','$0 copay + 10.0%','0.0%'. NULL for 109,317 rows (cost share not expressed as a simple string for that plan/vintage). Headline summary; copay_amount/coinsurance_pct are the parsed numerics.
copay_amountdoubleParsed flat-dollar copay (double). Non-null only 58,135 rows; of those ~96% are $0.0, tail up to $50. DME is rarely copay-based. NULL = no copay component parsed (not necessarily $0).
coinsurance_pctdoubleHeadline coinsurance percentage (double, 0-50). Non-null 452,116 rows. Modal value 20%. Equals coinsurance_pct_min in 100% of non-null cases (it is the floor of the band).
limit_textstring100% NULL across all 604,464 rows. Template scaffolding inherited from the shared PBP semantic-view shape; DME populates no benefit-limit text.
auth_requiredbooleanPrior authorization required for the DME service (boolean). 367,072 true / 52,115 false / 185,277 NULL. NULL is meaningful = not specified in that vintage, NOT 'false'.
referral_requiredboolean100% NULL. Template column; DME section does not capture referral requirements.
network_typevarchar(10)Network tier the cost share applies to. CONSTANT = 'in_network' for every row. (No out-of-network rows in this DME view.)
max_oop_appliesboolean100% NULL. Template column; whether benefit counts toward MOOP is not populated for DME.
limit_quantitydouble100% NULL. Template scaffolding; no DME quantity limit captured.
limit_unitstring100% NULL. Template scaffolding (would name the unit for limit_quantity).
limit_period_codestring100% NULL. Template scaffolding (period code for a quantity limit). Appeared as a 'candidate key' in the profiler purely because all-NULL collapses, NOT a real key.
limit_period_labelstring100% NULL. Human label counterpart of limit_period_code; unused for DME.
limit_quantity_per_yeardouble100% NULL. Template scaffolding for an annualized quantity limit; unused for DME.
benefit_amountdouble100% NULL. Template scaffolding (a benefit dollar allowance, e.g. for OTC/flex cards). DME has no allowance amount.
benefit_amount_kindstring100% NULL. Would classify benefit_amount (allowance/limit/etc); unused for DME.
benefit_amount_period_codestring100% NULL. Period code for benefit_amount; unused. Also a false 'candidate key' (all-NULL).
benefit_amount_period_labelstring100% NULL. Human label for benefit_amount period; unused for DME.
benefit_amount_annualizeddouble100% NULL. Annualized benefit_amount; unused for DME.
benefit_amount_pmpmdouble100% NULL. Per-member-per-month benefit_amount; unused for DME.
normalization_statusstring100% NULL in this view. Would describe numeric-amount normalization; not applied because DME carries no numeric amounts here.
normalization_basisstring100% NULL. Basis for normalization; unused for DME.
aggregation_policystring100% NULL. How multiple line items were aggregated; unused (superseded by combined_limit_policy/coinsurance band columns).
offered_statusvarchar(15)Whether the plan offers the benefit. CONSTANT = 'offered' for every row (this view only materializes offered DME benefits).
numeric_amount_observabilityvarchar(31)CONSTANT = 'offered_without_numeric_amounts'. Declares that DME is offered but the source PBP B11 expresses cost share (copay/coinsurance) without dollar benefit amounts — explains why the benefit_amount/limit families are all NULL.
null_amount_reasonvarchar(30)CONSTANT = 'unknown_requires_crosswalk'. The standardized reason the dollar amounts are absent (a HCPCS/fee-schedule crosswalk would be needed to dollarize).
annualization_policyvarchar(17)CONSTANT = 'not_numeric'. No annualization performed because there is no numeric amount to annualize.
combined_limit_policyvarchar(29)CONSTANT = 'none_detected'. No combined/shared benefit limit detected across the DME sub-benefits.
consumer_document_reconciliation_statusvarchar(11)CONSTANT = 'not_checked'. The cost share has not been reconciled against consumer documents (SB/EOC).
confidence_tiervarchar(23)CONSTANT = 'source_faithful'. Data is taken faithfully from the CMS source with no inference layer applied. (Listed as a candidate key by the profiler but it is a single constant.)
coinsurance_pct_maxdoubleUpper bound of the coinsurance range across the underlying DME line items (double). Non-null 468,428. When > min, the plan charges different coinsurance for different DME items rolled into this one row.
coinsurance_pct_mindoubleLower bound of the coinsurance range (double). Non-null 452,116. Always equals the headline coinsurance_pct. 386,455 rows have min=max (single rate); 65,661 have a real band.
copay_amount_maxdouble
copay_amount_mindouble
dme_sub_benefitstringWhich of the three DME sub-services this row is: 'dme' (durable medical equipment, B11A), 'prosthetics' (B11B), or 'medical_supplies' (B11C). Exactly 201,488 rows each. THE column that completes the grain — every plan-snapshot has all 3. Fully redundant with source_pbp_section.
has_coinsurancebooleanFlag: any coinsurance present across line items (boolean, nullable). 502,095 true. Can be True even when the headline string shows only '$0 copay' (reflects sub-item coinsurance), and can be NULL.
has_copaybooleanFlag: any copay component present across the DME line items (boolean, nullable). 84,074 true. Independently derived — can be True even when cost_share_string shows no copay, and can be NULL.
has_deductiblebooleanFlag: a benefit-specific deductible applies (boolean). Almost always false — only 222 true rows. Rare DME deductible cases.
has_max_enrollee_oopbooleanFlag: a max enrollee out-of-pocket on this benefit (boolean). Almost always false — only 1,463 true.
has_preferred_vendor_or_mfrbooleanFlag: plan steers to a preferred DME vendor/manufacturer (boolean, nullable). 120,500 true. Often NULL. Signals network/vendor restriction on DME.
source_pbp_sectionvarchar(4)CMS PBP source section: 'B11A' (DME), 'B11B' (prosthetics), 'B11C' (medical supplies). One-to-one with dme_sub_benefit.
source_silver_tablevarchar(51)Upstream silver table this view is built from. CONSTANT = 'medicare_silver.pbp_section_b11_dme_prosth_orth_sup' for all rows. Lineage pointer.
lmi_authoritiesstringURL to the LMI CMS MA Benefits Mailbox PBP Service Category Descriptions PDF (the official benefit-definition authority). CONSTANT across rows. Provenance/definition reference.
source_urlstringCMS PBP-benefits ZIP download URL for this snapshot, e.g. 'https://www.cms.gov/files/zip/pbp-benefits-2026.zip'. Exactly one URL per (report_year, quarter). Provenance.
sha256_content_hashstringSHA-256 of the source content for this snapshot. Exactly one hash per (report_year, quarter). Integrity/provenance fingerprint.

Query it

describe_data_source(source_fqn="medicare_semantic.vw_pbp_dme")     # the card, live
query_substrate(sql="SELECT * FROM medicare_semantic.vw_pbp_dme WHERE contract_id = '<value>' AND plan_id = '<value>' AND segment_id = '<value>' AND report_year = '<value>' AND quarter = '<value>' AND dme_sub_benefit = '<value>' LIMIT 100")
ItemValue
Typed tools that read itget_pbp_benefit
Identity keycontract_id,plan_id,segment_id
Joinhow_to_join(source_fqn="medicare_semantic.vw_pbp_dme")
Raw doorAthena (read-only via query_substrate): medicare_semantic.vw_pbp_dme
NoteCleaned PBP reasoning surface (categories/dme/contract.yaml); raw is pbp_section_*.

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