Medicare Advantage, Part D, Medicaid

MA plan payment — Part C (contract x plan x year)

medicare_silver.ma_plan_payment_part_c·live·silver·annual·Medicare Advantage Plan Payments
Rows
40,014
Columns
13
History
2015 to 2024
Card
yesgrain, traps, filters
Typed tools
0

What it is

  1. 1CMS Medicare Advantage (Part C) plan payment summary: for each MA contract+plan, the year's average risk-adjusted Part A/B payment per member per month, the average enrollee risk score, and the average rebate PMPM.
  2. 2It quantifies what Medicare pays MA plans (the government's cost of MA), sourced from CMS's annual public 'plan payment data' ZIP files.

Grain

KeyGrain
contract_idplan_idpayment_year
  1. 1One row per Medicare Advantage contract x plan x payment year.
  2. 2Verified: contract_id x plan_id x payment_year = 40,014 distinct = 40,014 total rows.
  3. 3(Within any single payment_year, contract_id+plan_id alone is unique — 2,742 rows in 2015 rising to 5,539 in 2024.)

How to read it

  1. 1Benchmark what Medicare pays a given MA plan and how rich its rebate-funded extra benefits are, risk-adjusted.
  2. 2Example: SELECT payment_year, avg_ab_pmpm_payment, avg_part_c_risk_score, avg_rebate_pmpm_payment FROM medicare_silver.ma_plan_payment_part_c WHERE contract_id='H0028' AND plan_id='007' ORDER BY payment_year; -> the year-by-year per-member-per-month CMS payment, population risk score, and rebate for that specific plan.
  3. 3Aggregate by contract_id (not contract_name) for an insurer view, or by payment_year + plan_type for market trends; weight carefully since values are plan-level averages, not enrollment-weighted totals.

Traps

  1. 1GRAIN IS contract_id x plan_id x payment_year (40,014 = total). The profiler's 5-column key (adding contract_name + plan_type + bronze_publication_id) is a redundant SUPERSET: within any single year (contract_id, plan_id) is already unique, and bronze_publication_id is 1:1 with payment_year. Do NOT key on or GROUP BY contract_name/plan_type to dedup — they are attributes.
  2. 2contract_name is NOT stable across years: the same contract_id can carry up to 4 different names over 2015-2024 (organizations rebrand/merge). Join and aggregate on contract_id, not on the name; treating (contract_id, contract_name) as a fixed pair will double-count.
  3. 3avg_rebate_pmpm_payment = 0.0 is a MEANINGFUL zero (plan receives no rebate), present in 3,844 rows — NOT a null and NOT missing data. All MSA plans are $0 by design, and EGWP plans (plan_id >= '800', 3,509 rows) average near-zero rebate (~$11.6 vs ~$132 for individual-market plans). Filtering out zeros will bias rebate stats upward and drop legitimate plans.
  4. 4No is_current / no snapshot dedup needed: there is exactly ONE publication per payment_year (10 bronze_publication_ids, 10 source_urls, 10 sha256 hashes), all asserted_at on 2026-05-18. asserted_at is the pipeline LOAD time, not a content date — never use it as the time axis; use payment_year.
  5. 5Unbalanced panel + plan-ID semantics: only 1,004 of ~9,783 plans appear in all 10 years (2,100 appear in just one) — plans enter/exit, so cross-year trends need care. Also numeric precision differs by vintage: 2015-2023 payment/rebate values are rounded to 2 decimals, but 2024 carries full-precision decimals (a source/parser artifact) — round before exact-equality comparisons across years.
  6. 6Scope: this is PLAN-level (PBP), aggregate, average-PMPM data — it is the only contract-x-plan-x-year payment table; it is NOT beneficiary-level, NOT monthly, and contains no benchmark/bid or county-rate columns. The three measures (avg AB PMPM payment, avg Part C risk score, avg rebate PMPM) are the entire payment fact set.

Columns (13)

ColumnTypeMeaning
payment_yearintCMS Medicare Advantage payment year (calendar year), int 2015-2024. The temporal dimension and part of the grain key. Maps 1:1 to bronze_publication_id and source_url (one CMS annual ZIP per year). NOT a snapshot/load date — it is the substantive year the payment data describes.
contract_idstringCMS MA contract identifier, 5-char string. Always 'H'+4 digits (39,232 rows, all plan types) or 'R'+4 digits (782 rows, exclusively Regional PPO). 1,047 distinct contracts. Part of the grain key. Join key to other MA contract-level tables (e.g. Star Ratings, enrollment).
plan_idstringCMS Plan Benefit Package (PBP) ID within a contract, zero-padded 3-char string (always length 3, e.g. '007', '438', '815'). 518 distinct values. Part of the grain key. plan_id >= '800' (3,509 rows) are employer/union group plans (EGWP) — they have near-zero rebates (avg $11.6 PMPM vs $132 for individual-market plans). The full plan = contract_id + plan_id (a.k.a. H#####-### / CCN-style ID).
contract_namestringLegal/marketing name of the contracting organization (e.g. 'AETNA LIFE INSURANCE COMPANY', 'KAISER FOUNDATION HP OF CO'). 890 distinct. ATTRIBUTE of contract_id, NOT part of the minimal key. WARNING: it is NOT stable — the same contract_id can carry up to 4 different names across years (e.g. H5928 rebrands), so do not treat (contract_id, contract_name) as a fixed pair; key on contract_id.
plan_typestringMA plan-type category. 6 observed values: HMO (27,183), Local PPO (11,576), Regional PPO (782, always R-prefix contracts), PFFS (416), MSA (54), 'Medicare-Medicaid Plan HMOPOS' (3). Attribute of the plan, not part of the minimal key. MSA plans structurally always have $0 rebate.
avg_ab_pmpm_paymentdoubleAverage Part A & B benefit payment per member per month (USD), the core risk-adjusted CMS payment to the plan for covering standard Medicare benefits. double, 0% null, never zero. Range 238.6 to 1,360.02, mean ~813. Rises over time (2015 avg $694 -> 2024 avg $880). This is the headline MA Part C cost-to-Medicare figure in this table.
avg_part_c_risk_scoredoubleAverage Part C (CMS-HCC) risk score for the plan's enrollees. double, 0% null, never zero. Range 0.398 to 4.11, mean ~1.135 (1.0 = average-risk beneficiary). Drives the AB payment: higher = sicker/costlier population. Highest scores (>3.7) concentrate in 2024 and special-needs-type plans.
avg_rebate_pmpm_paymentdoubleAverage MA rebate payment per member per month (USD) — the portion of the plan's bid-below-benchmark savings CMS returns to fund extra benefits/reduced premiums. double, 0% null. Range 0 to 958.0, mean ~122. 3,844 rows are exactly 0.0 — a MEANINGFUL zero (no rebate), not a null: all 54 MSA rows are $0 by design, PFFS/Regional PPO over-represented, and EGWP (plan_id>=800) plans average near-zero.
source_urlstringCMS download URL for the originating annual 'plan payment data' ZIP. 10 distinct (one per payment_year). Provenance only; URL pattern changes year to year (e.g. .../downloads/2015-payment-data.zip vs /files/zip/2024-plan-payment-zip-file.zip).
sha256_content_hashstringSHA-256 of the ingested source file content. 10 distinct (one per year). Provenance/immutability fingerprint of the raw CMS file; identical for all rows from the same year.
bronze_publication_idstringInternal bronze-layer publication identifier, format 'ma_plan_payment_<year>_<hash8>' (e.g. ma_plan_payment_2024_53379284). 10 distinct, maps 1:1 to payment_year. This is the snapshot/ingestion unit — because there is exactly one publication per year, there is no is_current flag and no multi-snapshot dedup to worry about.
asserted_attimestampTimestamp the row was asserted into silver. 10 distinct values, ALL on 2026-05-18 (within ~2 minutes of each other, one per year-file loaded sequentially). This is pipeline load time, NOT a data-content date — do not use it for time-series analysis; use payment_year.
parser_artifact_hashstringHash of the parser code/artifact that produced these rows. Exactly 1 distinct value across the entire table — all 40,014 rows parsed by the same parser version. Lineage/reproducibility field.

Query it

describe_data_source(source_fqn="medicare_silver.ma_plan_payment_part_c")     # the card, live
query_substrate(sql="SELECT * FROM medicare_silver.ma_plan_payment_part_c WHERE contract_id = '<value>' AND plan_id = '<value>' AND payment_year = '<value>' LIMIT 100")
ItemValue
Typed tools that read itnone; raw SQL
Identity keycontract_id
Joinhow_to_join(source_fqn="medicare_silver.ma_plan_payment_part_c")
Raw doorAthena (read-only via query_substrate): medicare_silver.ma_plan_payment_part_c

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