Problem
policyengine-us currently models Medicare Part A premiums, Part B base premiums, and Part B IRMAA, but it does not expose a Medicare Part D income-related monthly adjustment amount (IRMAA) variable.
That leaves a gap for retirement and household tax/benefit modeling: high-income Medicare beneficiaries can face additional federally set Part D charges even when the underlying Part D plan premium is plan-specific.
Why this matters
Part D base premiums vary by plan, so a fully modeled total Part D premium may require an input variable or plan-specific assumption. But the IRMAA surcharge itself is federally set, depends on filing status and MAGI from two years prior, and can be modeled cleanly today.
Proposed scope
Add a variable for the federally defined Part D IRMAA surcharge, for example:
income_adjusted_part_d_premium_surcharge
part_d_irmaa_surcharge
Design notes:
- use MAGI from two years prior, matching existing Part B IRMAA logic
- use the same filing-status buckets already modeled for Part B (
SINGLE, JOINT, HEAD_OF_HOUSEHOLD, SURVIVING_SPOUSE, SEPARATE)
- return the annual surcharge amount (monthly surcharge × 12)
- do not imply a total Part D premium unless a separate plan premium input exists
Legal basis
The controlling source is the Social Security Act and implementing regulations.
- Statute: 42 U.S.C. § 1395w-113(a)(7)
- This provides that the Part D beneficiary premium is increased for higher-income individuals and ties the threshold / MAGI framework to section 1839(i), codified at 42 U.S.C. § 1395r(i).
- Regulation: 42 CFR § 423.286(d)(4)
- This says Medicare Part D enrollees must pay an income-related monthly adjustment amount in addition to the Part D premium.
- SSA administration / collection rules: 20 CFR Part 418, Subpart C
- Especially §§ 418.2101, 418.2112, 418.2120, and 418.2125.
Annual values source
The annual 2024 / 2025 bracket thresholds and surcharge amounts themselves come from CMS fact sheets:
Current repo context
Relevant existing code:
policyengine_us/variables/gov/hhs/medicare/eligibility/part_b/income_adjusted_part_b_premium.py
policyengine_us/parameters/gov/hhs/medicare/part_b/irmaa/*
I plan to open a PR for the surcharge-only variable unless there is a different preferred naming or scope.
Problem
policyengine-uscurrently models Medicare Part A premiums, Part B base premiums, and Part B IRMAA, but it does not expose a Medicare Part D income-related monthly adjustment amount (IRMAA) variable.That leaves a gap for retirement and household tax/benefit modeling: high-income Medicare beneficiaries can face additional federally set Part D charges even when the underlying Part D plan premium is plan-specific.
Why this matters
Part D base premiums vary by plan, so a fully modeled total Part D premium may require an input variable or plan-specific assumption. But the IRMAA surcharge itself is federally set, depends on filing status and MAGI from two years prior, and can be modeled cleanly today.
Proposed scope
Add a variable for the federally defined Part D IRMAA surcharge, for example:
income_adjusted_part_d_premium_surchargepart_d_irmaa_surchargeDesign notes:
SINGLE,JOINT,HEAD_OF_HOUSEHOLD,SURVIVING_SPOUSE,SEPARATE)Legal basis
The controlling source is the Social Security Act and implementing regulations.
Annual values source
The annual 2024 / 2025 bracket thresholds and surcharge amounts themselves come from CMS fact sheets:
Current repo context
Relevant existing code:
policyengine_us/variables/gov/hhs/medicare/eligibility/part_b/income_adjusted_part_b_premium.pypolicyengine_us/parameters/gov/hhs/medicare/part_b/irmaa/*I plan to open a PR for the surcharge-only variable unless there is a different preferred naming or scope.