Repository navigation
Use CMS Medicare spending per enrollee for the Medicare per capita cost - #10107
Merged
Merged
Conversation
Replace KFF's 2021 traditional-Medicare figure and an unsourced $14,500 2025 estimate (held flat for every later year) with CMS National Health Expenditure Table 17's Medicare spending per enrollee: historical 2013-2024, projected 2025-2034, extended to 2100 at the 2031-2032 rate so the end of sequestration in 2033 does not compound. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Transcription checks against NHE Table 17 (and its spending over enrollment), a cross-source level check against the Trustees Report's per beneficiary cost, Hypothesis properties for order, the 2035-2100 closed form and calendar-year steps, and identities for medicare_gross_cost, medicare_cost and qmb_cost_sharing. Existing expectations move from $14,500/$11,080 to the CMS values. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
marked this pull request as ready for review
October 11, 2026 17:27
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 11, 2026
- Merge the two NHEA methodology entries into one reference (#page 15,23,30,34) at the canonical URL the old one redirects to. - Cite the projections methodology's file pages 6-7 and the Trustees Report's all-Medicare sequestration statement (file page 209). - Check order and the 2035-2100 closed form for every year instead of sampling, and drop Hypothesis deadlines on the remaining lookups. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
|
The CI run on this pull request was cancelled at 23:27Z on 2026-10-11 to free the organization's shared GitHub runners for an urgent fix in another repository. The US + core hub will re-run it automatically (cancelled jobs only; jobs that had passed are kept). Nothing in this pull request changed. Please don't push or reopen just to restart CI. |
Contributor
Author
|
Hand-off to the US + core hub (session
🤖 Generated with Claude Code |
Contributor
Author
|
US + core hub merge audit, us#10107 at
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
calibration.gov.hhs.medicare.per_capita_costheld KFF's 2021 traditional Medicare figure ($11,080, which pe-us backdating also applied to 2015-2020) and an unsourced 2025 "estimate" of $14,500 with no uprating, so every year from 2025 to 2100 read $14,500. This PR sets it to CMS's published Medicare spending per enrollee from the National Health Expenditure (NHE) projections, Table 17: historical for 2013-2024, projected for 2025-2034, and extended to 2100 inuprating_extensions.py.Which definition, and why
The parameter feeds three variables:
medicare_gross_costreturns it for everymedicare_enrolledperson; it is in CBO household income (cbo_social_insurance_benefits).medicare_costsubtracts the person's Part A premium and gross Part B premium, floored at zero; it is a US program statistic in policyengine.py.qmb_cost_sharingpays QMB enrollees 20% of it a year, in monthly twelfths. It feedsmsp_cost, which feedshousehold_health_benefits, and its federal and state shares, which feedfederal_benefit_costandstate_benefit_cost.medicare_enrolledis "enrolled in Medicare (Part A and/or Part B)". No variable splits traditional Medicare from Medicare Advantage (no variable mentions Medicare Advantage). So the parameter has to be the average gross Medicare spending over all Part A and/or B enrollees. NHE Table 17 measures that:medicare_costsubtracting premiums andmedicare_gross_costnot subtracting them.Alternatives considered and rejected:
medicare_enrolledtoo.Two consequences are handled in separate PRs:
medicare_costsubtracts no Part D premium. Subtract the expected Part D premium from medicare_cost #10111, which is stacked on this PR, does that.qmb.cost_sharing_rate. Whichever PR merges second takes Value QMB cost sharing at Medicaid's CMS-64 spending per QMB #10123's versions of the four QMB test files (qmb_cost_sharing.yaml,msp_cost.yaml,msp_federal_and_state_cost.yaml,federal_and_state_benefit_cost.yaml). It also drops this PR'stest_qmb_cost_sharing_is_the_qmb_rate_of_monthly_spending, which reads the deleted rate, and the QMB clause of that module's docstring.Extension to 2100
extend_parameter_values(..., last_projected_year=2034, growth_years=(2031, 2032))grows each year from 2035 to 2100 at 26,552 / 25,185 (5.43%) and then holds the 2100 value. It does not use the 2033-2034 rate (6.55%). Sequestration cuts Medicare expenditures 2% through August 31, 2033 (Trustees Report, file page 209), and its end lifts 2033 and 2034 growth. In the Trustees' own Table V.D1, per beneficiary growth runs 6.5% in 2033 and 6.6% in 2034, then falls to 5.4% in 2035. The extension's 2035 value ($31,764) is within 0.05% of 2034 grown at the Trustees' 2034-2035 rate ($31,750). The Trustees' 2050-2100 assumption is slower, 3.7% a year excluding demographic effects (Table II.C1). #10119 adds a glide to the Trustees' long-range rates. It wires the out-of-pocket and employer premium series now, and defines the knots for this series but wires them in a follow-up once this PR merges.Household-level changes (YAML tests)
medicare_cost, 2025, premium-free Part A, standard Part B: $12,280 to $15,531 ($17,751 - $2,220).qmb_cost_sharing, January 2026: $241.67 to $316.38 ($18,983 / 12 x 20%). A QMB-only enrollee'smsp_costin 2026 goes from $5,334.80 to $6,231.40.medicare_gross_cost.Microsim impact
Real runs on the default dataset (
hf://datasets/policyengine/populace-us/populace_us_2024.h5@populace-us-2024-spm-20260909). The base is upstream/main23285ce622; the PR snapshot iscdfe759d6f. Its parameter values and every consumer match the current head. The head differs only in comment and reference edits to the two changed parameter files and intaxsim_v17.py, an unrelated output variable that the main merge brought in. Both ran under the hub heavy lock, one run per year and side: four runs, 15.7 to 17.6 minutes of simulation each (20.6 to 26.5 minutes of process time with imports). Totals are weighted sums.medicare_gross_costmedicare_costmsp_costmsp_federal_costmsp_state_costhealthcare_benefit_valuecbo_household_incomehousehold_net_incomeWhat moves and why:
household_health_benefitsstays zero. The defaultinclude_health_benefits_in_net_incomeis off.household_net_incomeand SPM poverty change for no record in either year: these values do not enter them.The modeled Medicare totals are 83% (2027) and 77% (2034) of NHE Medicare spending ($1,422.7B and $2,354.3B). Those ratios agree, within the published rounding, with the ratios of modeled to CMS enrollment: 58.8M against 70.8M, and 60.3M against 78.1M. So the per-enrollee value now matches CMS, and the remaining gap is the dataset's enrollee count, tracked in PolicyEngine/microcosm#231.
Driver, outputs, and the compare and poverty JSONs are in
~/reviews/medicare-per-capita-cost-2026-10/impact/on the session host.Invariants (tested)
policyengine_us/tests/core/test_medicare_per_capita_cost.py:medicare_gross_costequals the series.medicare_costequals max(series - Part A premium - Part B premium, 0) and never exceedsmedicare_gross_cost.qmb_cost_sharingequals the series / 12 x the QMB rate.Mutation check: dropping
growth_yearsfails all 66 closed-form cases and the Trustees-2035 test.The shared
test_all_uprating_factors_extend_to_2100now covers this series too.Sources
264f822618a5e1829138aea57cc6c8bf45bbaf072a72898fef5547f7ece6cd709c5755666847a78103016f04da937326744071a9a6736f4e77e91ce9e7af8629ce62fe2c236cc96ce287027784b141584ddf39e62c5fd8ddc3e771a014944817ffa56b9137006872300b0346149eae1613d09a172b6ba118aad48e66dfc48fa8Interactions
#10085 and #10103 (Medicare premium projections) do not touch this parameter.
git merge-treeis clean against main and against #10084, #10085, #10097, #10103 and #9621, which also edituprating_extensions.py. #10111, then #10118, then #10126 are stacked on this PR.Tests run
il_aabd_expense_exemption_personperson-adds ratchet, was failing on main and was fixed by Drop the fixed Illinois AABD entry from the person-adds ratchet #10092, which the merge brings in.policyengine_us/tests/core/test_medicare_per_capita_cost.pyandtests/policy/baseline/parameters/test_uprating_extensions.py, 250 passed.gov/hhs/medicareandhouseholdYAML directories plus the CO and MA integrations: 852 of 853 passed. The one failure,federal_and_state_benefit_cost.yamlcase 6, still expected the old QMB cost; it was updated in 33a94b4 and rerun (6 passed). The basic health program, WA cascade care, and Tlaib integration files, which also output affected variables, passed (35).axiom: n/a: calibration spending series (CMS NHE data), not a statutory provision
🤖 Generated with Claude Code