Repository navigation
Conversation
The Part B and Part D income-related monthly adjustment schedules started in 2024, so the backdating floor applied 2024 thresholds and amounts to benefit years 2015-2023, and the standard Part B premium applied its 2021 value to 2015-2020. Encode each year's schedule from the Federal Register Part B premium notices and CMS's Part D income-related adjustment releases: thresholds frozen through 2017, the MACRA brackets for 2018, the 85% tier from 2019 and CPI-U indexing from 2020, with the shorter married-filing-separately schedule (a single tier in 2018). Add YAML tests for every tier boundary in 2015-2023 and property tests for the statutory structure (ordering, joint and separate schedules, Part B adjustments relative to the standard premium, Part D tier proportions). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
marked this pull request as ready for review
October 11, 2026 19:03
This was referenced Oct 11, 2026
This branch has not been deployed
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.
Problem
The Medicare IRMAA schedules (
gov.hhs.medicare.part_b.irmaa.*andgov.hhs.medicare.part_d.irmaa.*) had values only for 2024–2026.CountryTaxBenefitSystembackdates every parameter's earliest value to 2015 (FIRST_MODELED_YEAR), so benefit years 2015–2023 used the 2024 schedule. The standard Part B premium (part_b.base_premium) started in 2021, so 2015–2020 used $148.50. As a result:Change
Adds each year's schedule for 2015–2023 to all ten IRMAA files (Part B and Part D × single, joint, head of household, surviving spouse, separate), and the 2015–2020 standard Part B premium. 2024–2026 values are unchanged. Every year has a source:
Schedule history the values follow (42 U.S.C. 1395r(i)):
Encoding.
X + 1for "more than $X", andXfor the 85% tier's "at least $X"..inf, following the Frederick County scales. Its amount repeats the 80% tier's, so the schedule stays non-decreasing. This covers the 85% bracket before 2019 and the separate schedule's second bracket in 2018.Verification
Every value was transcribed once into a canonical table,
~/reviews/irmaa-history-2015-2023/scripts/canonical.py, and then checked four ways (scripts in the same folder):verify_sources.pychecks each value against:All pass.
verify_cms_part_d.pychecks every Part D amount and threshold on the cited pages of the CMS memos. All pass.An independent compilation by a separate agent, working only from CMS press releases, fact sheets, job aids and the Part D memos (no Federal Register, POMS or Trustees data), differs in 0 values across 9 years × 3 schedules × Parts B and D.
verify_loaded.pyloads the parameter tree and compares every year's scale with the canonical table. It matches.The 2024 and 2025 Federal Register PDFs also confirm the existing 2024–2026 values. One source disagreement: Trustees Table V.E3 shows 2025's 50% and 65% tiers as $184.90 and $295.80. The governing 2025 notice (89 FR 90002) and CMS's totals give $185.00 and $295.90, which the model already uses.
Tests
gross_medicare_part_b_premium.yamlis new; the Part D and base-premium files are extended):medicare_irmaa_magi_two_years_priordirectly.main.test_irmaa_schedule_properties.py, 560 cases, Hypothesis): the invariants below. 85 of them fail onmain.Invariants
For every year 2015–2035, both parts and every filing status:
+infbrackets, which come last;For the published years (2015–2026):
Impact
Only simulations of 2015–2023 change. The diff adds dates before 2024 and touches no 2024+ value, and the default microdata year is 2024. Examples (annual amounts, from this branch versus
main):The Part B premium feeds medical-expense deductions, SPM medical out-of-pocket spending, MSP benefit values and several state LIHEAP income tests. Those move for 2015–2023 households with Medicare enrollees.
Unchanged and not modeled here: the hold-harmless provision. Under it, most enrollees paid less than the standard premium in 2016 and 2017. In 2016 the majority could pay no increase over 2015 (80 FR 70811). In 2017 about 70% were held harmless and about 30% paid $134.00 (81 FR 80063). The model charges every enrollee the standard premium, as before. Enrollees who owe IRMAA are never held harmless, so their amounts are exact.
Related
test_irmaa_lookback_and_switch.pycomment "earlier years are backdated from 2024" becomes stale once both land. Whichever merges second should update it.values:plusmetadata:, and this PR adds earlier dates.axiom: TheAxiomFoundation/rulespec-us#1677 queued. The blockers are that rulespec-us pins
us-rulespec-2026-08-08-obbb-alien-snap, which predates the corpus's Medicare statute rows, and that the 2015–2025 annual CMS notices are not ingested. Signed encoder runs also need approval.🤖 Generated with Claude Code