Skip to content
Merged
1 change: 1 addition & 0 deletions changelog.d/fix-student-loan-magi-931-911.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add back income excluded under 26 U.S.C. 911, 931 and 933 where a modified AGI requires it: the student loan interest deduction (which now also counts all unemployment compensation, because section 221(b)(2)(C) disregards only the section 85(c) exclusion), the child tax credit, the education credits, the saver's credit, the clean vehicle credits, the SALT cap phase-down, and the tip, overtime and car loan interest deductions. Taxable Social Security adds back the section 911 exclusion, and Medicare IRMAA adds back sections 135, 911, 931 and 933, summing person-level amounts over the members adjusted gross income counts: a dependent's own tax-exempt interest no longer counts, while a section 135 exclusion recorded on a dependent, which adjusted gross income deducts, is added back. Modified AGIs, including the Medicaid and ACA modified AGI, add back the full section 911 amount (Form 2555 lines 45 and 50, new input `section_911_excluded_income`), not the smaller amount the section 911(f) rate stacking uses. The clean vehicle credits accept the preceding year's modified AGI and filing status (`clean_vehicle_credit_prior_year_magi`, `clean_vehicle_credit_prior_year_filing_status`) and are allowed when either year's modified AGI is within the limit.
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
description: Income sources not included in AGI but included in Medicaid/CHIP/ACA-related MAGI.
values:
2010-01-01:
- foreign_earned_income_exclusion
# Form 2555 lines 45 and 50 (Form 8962 Worksheet 1-1 line 3).
- section_911_excluded_income
- tax_exempt_interest_income
- tax_exempt_social_security
metadata:
Expand All @@ -12,3 +13,5 @@ metadata:
href: https://www.law.cornell.edu/uscode/text/26/36B#d_2
- title: Modified Adjusted Gross Income (MAGI)
href: https://www.healthcare.gov/glossary/modified-adjusted-gross-income-magi
- title: 2024 Instructions for Form 8962, Worksheet 1-1, line 3
href: https://www.irs.gov/pub/irs-prior/i8962--2024.pdf#page=8
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,37 @@ metadata:
period: year
label: Student loan interest deduction excluded above the line deductions
reference:
- title: 26 U.S. Code § 221 - Interest on education loans (b)(2)(C)
href: https://www.law.cornell.edu/uscode/text/26/221
# (i) "without regard to this section and sections 85(c), 911, 931, and
# 933". Sections 931 (specified_possession_income) and 933
# (puerto_rico_income) are above-the-line deductions in this model;
# section 911 is added back in the formula. Section 222 was struck for
# taxable years beginning after 2020 (Pub. L. 116-260, div. EE,
# § 104(b)(2)(G)); section 199 was inserted for taxable years beginning
# after 2004 (Pub. L. 108-357, § 102) and struck for taxable years
# beginning after 2017 (Pub. L. 115-97, § 13305(b)(1)).
- title: 26 U.S. Code § 221(b)(2)(C) - Interest on education loans, modified adjusted gross income
href: https://www.law.cornell.edu/uscode/text/26/221#b_2_C
- title: IRS Publication 970 (2024), Worksheet 4-1, lines 3, 7 and 8
href: https://www.irs.gov/pub/irs-prior/p970--2024.pdf#page=36

values:
2002-01-01:
- student_loan_interest_ald
- capped_qualified_tuition_expenses_ald
- specified_possession_income
- puerto_rico_income
2005-01-01:
- student_loan_interest_ald
- capped_qualified_tuition_expenses_ald
- domestic_production_ald
- specified_possession_income
- puerto_rico_income
2018-01-01:
- student_loan_interest_ald
- capped_qualified_tuition_expenses_ald
- specified_possession_income
- puerto_rico_income
2021-01-01:
- student_loan_interest_ald
- specified_possession_income
- puerto_rico_income

This file was deleted.

1 change: 0 additions & 1 deletion policyengine_us/tests/core/test_ald_determinism.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ def test_tax_unit_deductions_are_ordered_unique_and_exclude_person_alds(
magi = SimpleNamespace(
person_alds=PERSON_ALDS,
excluded_alds=["student_loan_interest_ald", "puerto_rico_income"],
excluded_gross_income_sources=[],
)
parameters = SimpleNamespace(
gov=SimpleNamespace(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,15 @@
is_aca_ptc_eligible: [false, true, true]
tax_unit_medicaid_income_level: 3.37
aca_magi_fraction: 3.48

- name: Section 911 adds back Form 2555 lines 45 and 50, before disallowed deductions
period: 2025
input:
adjusted_gross_income: 40_000
section_911_excluded_income: 25_000
# The rate stacking amount after 10,000 of disallowed deductions.
foreign_earned_income_exclusion: 15_000
output:
# Form 8962 Worksheet 1-1 line 3 takes Form 2555 lines 45 and 50.
medicaid_magi: 65_000
aca_magi: 65_000
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,212 @@
medicare_enrolled: true
output:
income_adjusted_part_d_premium_surcharge: 0

- name: Amounts excluded under IRC sections 135, 911, 931 and 933 are added back.
period: 2026
input:
age: 66
adjusted_gross_income:
2024: 100_000
tax_exempt_interest_income:
2024: 2_000
us_bonds_for_higher_ed:
2024: 1_000
foreign_earned_income_exclusion:
2024: 10_000
specified_possession_income:
2024: 3_000
puerto_rico_income:
2024: 4_000
output:
# 42 U.S.C. 1395r(i)(4)(A): 100,000 + 2,000 + 1,000 + 10,000 + 3,000 + 4,000.
medicare_irmaa_magi_two_years_prior: 120_000

- name: Excluded amounts provided for an unmodeled lag year are added back too.
period: 2016
input:
age: 66
adjusted_gross_income:
2014: 100_000
us_bonds_for_higher_ed:
2014: 1_000
2016: 0
foreign_earned_income_exclusion:
2014: 10_000
puerto_rico_income:
2014: 4_000
output:
medicare_irmaa_magi_two_years_prior: 115_000

- name: Section 911 adds back Form 2555 lines 45 and 50, before disallowed deductions.
period: 2026
input:
age: 66
adjusted_gross_income:
2024: 100_000
section_911_excluded_income:
2024: 25_000
# The rate stacking amount after 10,000 of disallowed deductions.
foreign_earned_income_exclusion:
2024: 15_000
output:
medicare_irmaa_magi_two_years_prior: 125_000

- name: Form 2555 amounts provided for an unmodeled lag year are added back in full.
period: 2016
input:
age: 66
adjusted_gross_income:
2014: 100_000
section_911_excluded_income:
2014: 25_000
foreign_earned_income_exclusion:
2014: 15_000
output:
medicare_irmaa_magi_two_years_prior: 125_000

- name: A section 135 exclusion recorded on a dependent is added back, as AGI deducts it.
period: 2026
input:
people:
parent:
age:
2024: 64
2026: 66
employment_income:
2024: 100_000
2026: 0
child:
age:
2024: 13
2026: 15
# The parent's bond, cashed for the child's tuition: a bond issued
# in the name of a child under 24 does not qualify (Form 8815).
us_bonds_for_higher_ed:
2024: 1_000
2026: 0
tax_units:
tax_unit:
members: [parent, child]
households:
household:
members: [parent, child]
output:
# 2024 AGI 99,000 deducts the 1,000; IRMAA MAGI is AGI without it.
medicare_irmaa_magi_two_years_prior: 100_000

- name: Every member's section 135 exclusion is added back to a provided AGI.
period: 2026
input:
people:
head:
age: 66
us_bonds_for_higher_ed:
2024: 1_000
spouse:
age: 64
us_bonds_for_higher_ed:
2024: 2_000
child:
age: 15
us_bonds_for_higher_ed:
2024: 4_000
tax_units:
tax_unit:
members: [head, spouse, child]
adjusted_gross_income:
2024: 100_000
marital_units:
marital_unit:
members: [head, spouse]
child_marital_unit:
members: [child]
households:
household:
members: [head, spouse, child]
output:
# The 4,000 recorded on the child is the couple's exclusion too
# (gov.irs.ald.filer_amounts_recorded_on_dependents).
medicare_irmaa_magi_two_years_prior: 107_000

- name: A dependent's tax-exempt interest is on the dependent's own return.
period: 2026
input:
people:
parent:
age:
2024: 64
2026: 66
employment_income:
2024: 100_000
2026: 0
tax_exempt_interest_income:
2024: 3_000
2026: 0
child:
age:
2024: 13
2026: 15
tax_exempt_interest_income:
2024: 2_000
2026: 0
tax_units:
tax_unit:
members: [parent, child]
households:
household:
members: [parent, child]
output:
# 2024 AGI 100,000 leaves out the child's income; only the parent's
# 3,000 of tax-exempt interest is added.
medicare_irmaa_magi_two_years_prior: 103_000

- name: A dependent's tax-exempt interest provided for an unmodeled lag year is not added.
period: 2016
input:
people:
parent:
age: 66
tax_exempt_interest_income:
2014: 3_000
2016: 0
child:
age: 15
tax_exempt_interest_income:
2014: 2_000
2016: 0
tax_units:
tax_unit:
members: [parent, child]
adjusted_gross_income:
2014: 100_000
households:
household:
members: [parent, child]
output:
medicare_irmaa_magi_two_years_prior: 103_000

- name: Every member's section 135 exclusion for an unmodeled lag year is added back.
period: 2016
input:
people:
parent:
age: 66
us_bonds_for_higher_ed:
2014: 1_000
2016: 0
child:
age: 15
us_bonds_for_higher_ed:
2014: 4_000
2016: 0
tax_units:
tax_unit:
members: [parent, child]
adjusted_gross_income:
2014: 100_000
households:
household:
members: [parent, child]
output:
medicare_irmaa_magi_two_years_prior: 105_000
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
- name: Defaults to this year's filing status.
period: 2024
input:
filing_status: HEAD_OF_HOUSEHOLD
output:
clean_vehicle_credit_prior_year_filing_status: HEAD_OF_HOUSEHOLD

- name: A provided filing status overrides the default.
period: 2024
input:
filing_status: SINGLE
clean_vehicle_credit_prior_year_filing_status: JOINT
output:
clean_vehicle_credit_prior_year_filing_status: JOINT
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
- name: Defaults to this year's modified AGI.
period: 2024
input:
adjusted_gross_income: 140_000
foreign_earned_income_exclusion: 20_000
output:
clean_vehicle_credit_prior_year_magi: 160_000

- name: A provided amount overrides the default.
period: 2024
input:
adjusted_gross_income: 140_000
clean_vehicle_credit_prior_year_magi: 130_000
output:
clean_vehicle_credit_prior_year_magi: 130_000
Loading
Loading