Repository navigation
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>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CMS Medicare spending per enrollee (calibration.gov.hhs.medicare.per_capita_cost, #10107) includes Part D, which enrollee premiums partly finance, but medicare_cost subtracted only Part A and Part B premiums. It now also subtracts the Part D enrollment share times (Part D premiums per Part D enrollee + the person's Part D IRMAA), both new calibration series from the 2026 Medicare Trustees Report (Tables III.D3, V.E4 and V.B3). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Transcription from the Trustees' cells, conservation back to Table III.D3 premium income, bounds, the 2036-2100 extension's closed form, and a Hypothesis differential test of medicare_cost against a reference implementation (0 <= net <= gross, non-increasing in Part D IRMAA). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Heads-up from #10115, which charges This PR subtracts Options, after both merge:
With the default input the two PRs give the same numbers today: |
YAML: the 2025, 2015 and 2035 values, and five people with different premiums (Part A premium, income-related premiums, under 65, not enrolled) who all get the same average. Python, parameters only: transcription and conservation against the Trustees cells, the Part D series against #10111's share x premium plus income-related premiums, Part B premium income including income-related premiums, bounds through 2200, the post-2035 extension keeping each series' share of spending, and January reads. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Draft: waiting on the microsim and independent review. Stacked on #10107. That PR sets
calibration.gov.hhs.medicare.per_capita_costto CMS NHE Medicare spending per enrollee, which covers Parts A through D, gross of the premiums that finance it.medicare_cost, the net value of Medicare (a program statistic in policyengine.py'sUS_PROGRAMS), subtracted only the Part A and gross Part B premiums. So for every Medicare enrollee it overstated Medicare's net value by the Part D premiums that pay for part of that spending.Change
medicare_costalso subtracts an expected Part D premium:No variable records Part D enrollment, so the premium is weighted by the Part D enrollment share. Both series are new, under
calibration.gov.hhs.medicare.part_d, and come from the 2026 Medicare Trustees Report (cites are file pages):premiums_per_enrolleeenrollment_share2025 dips because of the voluntary Part D premium demonstration (page 109). 2030 jumps with the Inflation Reduction Act's reset of the base beneficiary premium percentage (page 152).
medicare_gross_costis unchanged.Why this premium, and not the base beneficiary premium
The brief suggested base beneficiary premium × enrollment share + IRMAA. The Trustees Report shows that would overstate what enrollees pay:
What the series measures, from the sources:
medicare_costsubtracts the person's ownincome_adjusted_part_d_premium_surcharge, times the share, as it already subtracts the person's own Part B IRMAA.per_capita_cost's 5.4%. The Trustees project Part D cost per beneficiary growing 3.1% in 2035 against 5.4% for all of Medicare (Table V.D1, page 210), and Part D near 0.76% of GDP through 2045 (Table III.D6).Alternatives rejected:
medicare_costalready applies for Part B.medicare_gross_coststays grossmedicare_gross_costfeedscbo_household_social_insurance_benefitsand is a gross concept by name and docstring, so it stays unchanged. CBO's standard household-income measure, however, counts Medicare "net of premiums paid by enrollees", for Parts A, B and D. "Gross Medicare spending" appears only in CBO's expanded sensitivity measure (CBO, January 2026). Aligning pe-us's default CBO household income with that is a separate change, proposed as its own follow-up session.Household-level changes (YAML tests)
New cases cover a 2025 middle IRMAA tier, 2027, the 2030 reset with IRMAA, and the zero floor. Projected-year cases take the Part B premium and Part D IRMAA as inputs, so they hold when #10103's premium projections land.
Microsim impact
Pending: heavy-lock pair (base #10107 head 33a94b4, PR 712abd3), 2026 and 2034, queued 14:57 EDT.
Invariants (tested)
policyengine_us/tests/core/test_medicare_cost_part_d_premium.py:medicare_costequals a reference implementation.medicare_cost≤medicare_gross_cost.medicare_gross_costdoes not depend on the Part D premium.medicare_costdoes not rise with the person's IRMAA.Mutation checks each failed at least one test:
#10107's consumer invariant (
test_medicare_per_capita_cost.py) now includes the Part D term.Sources
ffa56b9137006872300b0346149eae1613d09a172b6ba118aad48e66dfc48fa89c5755666847a78103016f04da937326744071a9a6736f4e77e91ce9e7af8629Interactions
uprating_extensions.pyhunk sits next to Use CMS Medicare spending per enrollee for the Medicare per capita cost #10107's.medicare_costor the new parameters.Tests run
Locally:
test_medicare_cost_part_d_premium.py(85 passed),test_medicare_per_capita_cost.py+test_part_b_msp_offset.py+test_uprating_extensions.py(113 passed), Medicare YAML directory (212 passed). CI runs once the base ismain(after #10107 merges).axiom: n/a: valuation of Medicare benefits from Trustees aggregates, not a statutory provision
🤖 Generated with Claude Code