Medicare Advantage, Part D, Medicaid

MA hedis national rates

medicare_silver.hedis_national_rates·live·silver·annual·Medicare Advantage HEDIS Quality
Rows
N/A
Columns
16
History
2019 to 2025
Card
yesgrain, traps, filters
Typed tools
0

What it is

  1. 1National-rollup quality scores for Medicare Advantage (MA) health plans, parsed from CMS's annual HEDIS MA Public Use Files (PUFs).
  2. 2Each row is one HEDIS quality indicator (e.g. breast cancer screening, controlling high blood pressure, controlling diabetes HbA1c) for one report year, giving the enrollment-weighted national average performance rate across all reporting MA contracts.
  3. 3It is a quality/outcomes benchmark layer that sits alongside the cost data (a quality denominator for value/cost-effectiveness analysis of MA plans), not a price/rate table despite the column name "weighted_rate".

Grain

KeyGrain
indicator_keyreport_year
  1. 1One row per HEDIS indicator per CMS report year.
  2. 2The minimal verified key is (indicator_key, report_year): 471 distinct = 471 total rows. measure_code does NOT extend or shrink the key (it is a label that drifts year-to-year), and contracts_count / effective_period_start / observed_period that the profiler bundled in are not needed — they are a value and report_year-derived dates respectively.
  3. 3There is no plan/contract/state/county dimension: this is the national aggregate only (one number summarizing all MA contracts).

How to read it

  1. 1Trend a quality measure nationally over time, joining on the stable indicator_key (not measure_code).
  2. 2Example: SELECT report_year, weighted_rate, contracts_count, eligible_population FROM hedis_national_rates WHERE indicator_key='200700_20' ORDER BY report_year; -> returns the enrollment-weighted national Controlling-High-Blood-Pressure rate for MA each available year (2019 ~74.5%, ... through 2025), answering 'how has MA plan performance on blood-pressure control changed nationally?'.
  3. 3To list one year's full scorecard: SELECT measure_code, measure_name, weighted_rate FROM hedis_national_rates WHERE report_year=2024 ORDER BY weighted_rate DESC (remembering some measures are lower-is-better).

Traps

  1. 1NOT a cost/price table despite 'national_rates' and 'weighted_rate' — these are HEDIS clinical QUALITY rates (percent of eligible members meeting a quality measure), at the NATIONAL level only. There is no contract/plan/state/county/NPI dimension; you cannot get a per-plan or per-region rate from this table.
  2. 2measure_code and measure_name are point-in-time LABELS that drift across years, not stable keys. The same clinical indicator is recoded by CMS/NCQA over time (e.g. HbA1c Control <8% = indicator_key 200707_20 shows as measure_code CDC in 2019-2022, HBD in 2023-2024, GSD in 2025; some indicators carry up to 4 different measure_names). ALWAYS join/trend on indicator_key, never on measure_code, or you will break time series and double-count.
  3. 3weighted_rate polarity is mixed: for most measures higher=better, but for overuse/avoidance measures (UOP multiple prescribers, HDO/UOD high-dose opioids, PSA non-recommended screening) LOWER is better. Ranking measures by raw weighted_rate or averaging across measures without normalizing polarity gives nonsense.
  4. 4Year 2020 is MISSING entirely (no 2020 MA HEDIS PUF due to COVID reporting relief) — the 6 periods are 2019, 2021, 2022, 2023, 2024, 2025, so any year-over-year delta logic must skip the 2019->2021 gap.
  5. 5Unbalanced panel: only 57 of 95 indicators appear in all 6 years; 4 appear in just 1 year (e.g. ABA / 200005_20 only in 2019, then retired). Do not assume every indicator exists every year — a missing (indicator_key, year) means the measure wasn't reported that year, not a value of 0.
  6. 6The grain is exactly (indicator_key, report_year) — 471 rows. The profiler reported a 5-column superset that included contracts_count (a measured value) and the report_year-derived dates; those are NOT part of the key. is_current does not exist and is unnecessary: one immutable sha256 per year, single asserted_at (2026-05-15), no duplicate snapshots.
  7. 7contracts_count and eligible_population are NATIONAL denominators rolled across all reporting contracts (eligible_population reaches ~32.5M; counts grow year over year with MA enrollment). They are not per-contract figures, and low contracts_count (down to 47) flags thinly-reported indicators whose national rate is less robust.

Columns (16)

ColumnTypeMeaning
measure_codestringShort HEDIS measure abbreviation, e.g. ABA (Adult BMI Assessment), CBP (Controlling High Blood Pressure), BCS/BCS-E (Breast Cancer Screening), CDC/HBD/GSD (diabetes care). 35 distinct values. CAUTION: this is a point-in-time label, not a stable id — for the SAME indicator_key the code drifts across years as NCQA recodes measures (e.g. indicator 200707_20 = HbA1c Control <8% appears as CDC in 2019-2022, HBD in 2023-2024, GSD in 2025). Do not use it as the cross-year join key; use indicator_key.
measure_namestringHuman-readable label for the specific indicator/sub-stratum, e.g. 'Controlling High Blood Pressure', or a bare sub-label like '(Total)', '(51-75)', '30 days (Total)', 'HbA1c Control (<8%)'. Also point-in-time and drifts: one indicator_key can carry up to 4 different names across the 6 years (CMS rewords labels). Often it is just the stratum qualifier, not the full measure title.
indicator_keystringThe stable CMS PUF indicator identifier, formatted '<numeric_id>_<suffix>' where suffix is '10' or '20'. THE durable cross-year join key (95 distinct ids; one indicator_key tracks the same clinical indicator over time even when measure_code/measure_name change). The numeric prefix is the CMS indicator number; the _10/_20 suffix is a fixed PUF coding qualifier (248 rows _10, 223 rows _20). NOT unique on its own (recurs every year) — must be paired with report_year.
weighted_ratedoubleEnrollment-weighted national average performance rate for the indicator, as a percent 0-100 (observed min 0.58, max 98.38; all 471 rows in [0,100], zero nulls). It is the contract-level rates weighted by each MA contract's eligible population, rolled to one national number. POLARITY VARIES: for most measures higher is better (e.g. TRC ~90%, statin therapy ~88%), but for 'overuse'/avoidance measures lower is better (e.g. UOP opioid multiple-prescribers 0.79%, HDO/UOD high-dose opioids, PSA non-recommended screening). Do not assume higher = better.
contracts_countintNumber of MA contracts that reported this indicator and were rolled into the national rate (observed 47-630, no nulls). A measured denominator/coverage figure that grows over the years as MA enrollment expands — NOT a key column (the profiler mistakenly included it). Low counts (e.g. 47) flag thinly-reported indicators where the national rate is less robust.
eligible_populationintTotal national eligible-member count (the measure denominator) summed across reporting contracts (observed ~3.2M to ~32.5M, no nulls). This is the national denominator, not per-contract; it climbs year over year with MA growth. Used as the weight behind weighted_rate.
report_yearintCMS HEDIS PUF report year (int): 2019, 2021, 2022, 2023, 2024, 2025. NOTE 2020 is absent — no 2020 MA HEDIS PUF (COVID reporting suspension). Half of the (indicator_key, report_year) grain. Rows per year: 2019=68, 2021=64, 2022=85, 2023=82, 2024=88, 2025=84.
observed_perioddateDate = January 1 of report_year (derived, redundant with report_year; aligned 471/471). Represents the measurement/reporting period anchor, not a sub-annual period.
asserted_atdateDate this record was asserted/loaded into the silver layer. Constant 2026-05-15 for every row (single ingestion event). Effectively a load-batch stamp, not a business date.
effective_period_startdateDate = January 1 of report_year (derived; aligned 471/471). Start of the year the rate is effective for. Functionally equal to report_year — the profiler used it as the time column.
effective_period_enddateDate = December 31 of report_year (derived; aligned 471/471). End of the effective year. Together with effective_period_start it just bounds the report_year calendar window.
cms_vintage_sequenceintInteger revision-sequence of the CMS source vintage. Constant = 1 across all rows (only the first/original vintage of each year's PUF has been loaded; no restatements ingested yet). A versioning hook for future CMS file re-releases.
parse_revisionintInternal parser revision number for the extraction. Constant = 1 (single parser version used for the whole load). Provenance/reproducibility field.
parser_artifact_hashstringSHA256 of the parser artifact that produced the row (provenance). 6 distinct values — one per source file/year — so it co-varies with the year's source ZIP, identifying which parser run emitted each year's rows.
source_urlstringCMS download URL of the origin HEDIS MA PUF ZIP, e.g. https://www.cms.gov/files/zip/ma-hedis-pufs-2024.zip. Exactly 6 distinct values, one per report_year (1:1 file-to-year). Note URL naming differs by year (hedis-ma-puf-2019.zip vs ma-hedis-pufs-2021.zip).
sha256_content_hashstringSHA256 of the source file's content (provenance/integrity). 6 distinct values, one per year. Confirms a single immutable snapshot per year — total rows 471 = distinct (sha256_content_hash, indicator_key), so there is no duplicate-snapshot fan-out and no dedup is required.

Query it

describe_data_source(source_fqn="medicare_silver.hedis_national_rates")     # the card, live
query_substrate(sql="SELECT * FROM medicare_silver.hedis_national_rates WHERE indicator_key = '<value>' AND report_year = '<value>' LIMIT 100")
ItemValue
Typed tools that read itnone; raw SQL
Identity keymeasure_code
Joinhow_to_join(source_fqn="medicare_silver.hedis_national_rates")
Raw doorAthena (read-only via query_substrate): medicare_silver.hedis_national_rates
NoteGrain-governed; live in Glue / query_substrate. Source family ma_hedis_annual. get_hedis and get_hedis_national_benchmark read the documented names of medicare_semantic.vw_hedis_national_rates_v2 since 2026-09-30; this table is unchanged and stays the physical storage.

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