From e729e73d78019afcb7a2f1101c3525af98e1efb1 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 3 Jan 2026 18:07:16 +0000 Subject: [PATCH] Consolidate itemized deduction limitation parameters and rename OBBB folder - Consolidate parameters from `reduction/` to `limitation/` folder - Rename OBBB parameters from `amended_structure/` to `obbb/` for clarity - Update federal and Hawaii variables to use consolidated path - Add 2009 values and TCJA period handling to applicable_amount.yaml - Fix YAML syntax errors (tabs to spaces, quoted URLs) - Add comprehensive tests for the itemized deduction limitation Fixes #6209 --- changelog_entry.yaml | 8 + .../limitation/applicable_amount.yaml | 18 +- .../{reduction => limitation}/applies.yaml | 6 +- .../obbb}/applies.yaml | 4 +- .../itemized/limitation/obbb/rate.yaml | 12 ++ .../itemized/reduction/agi_threshold.yaml | 165 ------------------ .../reduction/amended_structure/rate.yaml | 12 -- .../itemized/reduction/rate/base.yaml | 10 -- .../itemized/reduction/rate/excess_agi.yaml | 10 -- .../cash/monthly_payment/max_au_size.yaml | 5 +- .../ca/cdss/tanf/cash/region1_counties.yaml | 5 +- .../child_and_family/dependent_cap.yaml | 2 +- .../me/tax/income/main/head_of_household.yaml | 4 +- .../gov/states/me/tax/income/main/joint.yaml | 4 +- .../states/me/tax/income/main/separate.yaml | 4 +- .../gov/states/me/tax/income/main/single.yaml | 4 +- .../me/tax/income/main/surviving_spouse.yaml | 4 +- .../itemized_deduction_limitation.yaml | 90 ++++++++++ ...zed_taxable_income_deductions_reduction.py | 16 +- .../itemized/hi_itemized_deductions.py | 4 +- .../hi_reduced_itemized_deductions.py | 6 +- 21 files changed, 160 insertions(+), 233 deletions(-) rename policyengine_us/parameters/gov/irs/deductions/itemized/{reduction => limitation}/applies.yaml (66%) rename policyengine_us/parameters/gov/irs/deductions/itemized/{reduction/amended_structure => limitation/obbb}/applies.yaml (57%) create mode 100644 policyengine_us/parameters/gov/irs/deductions/itemized/limitation/obbb/rate.yaml delete mode 100644 policyengine_us/parameters/gov/irs/deductions/itemized/reduction/agi_threshold.yaml delete mode 100644 policyengine_us/parameters/gov/irs/deductions/itemized/reduction/amended_structure/rate.yaml delete mode 100644 policyengine_us/parameters/gov/irs/deductions/itemized/reduction/rate/base.yaml delete mode 100644 policyengine_us/parameters/gov/irs/deductions/itemized/reduction/rate/excess_agi.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/irs/deductions/itemized/limitation/itemized_deduction_limitation.yaml diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..5919d8539b7 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,8 @@ +- bump: minor + changes: + changed: + - Consolidated itemized deduction limitation parameters from `reduction/` to `limitation/` folder for cleaner organization. + - Renamed OBBB (One Big Beautiful Bill Act) itemized deduction parameters from `amended_structure/` to `obbb/` for clarity. + - Updated federal and Hawaii itemized deduction variables to use the consolidated parameter path. + fixed: + - Fixed YAML syntax errors in several parameter files (tabs replaced with spaces, URLs properly quoted). diff --git a/policyengine_us/parameters/gov/irs/deductions/itemized/limitation/applicable_amount.yaml b/policyengine_us/parameters/gov/irs/deductions/itemized/limitation/applicable_amount.yaml index 03981df7ddf..83c0881df7d 100644 --- a/policyengine_us/parameters/gov/irs/deductions/itemized/limitation/applicable_amount.yaml +++ b/policyengine_us/parameters/gov/irs/deductions/itemized/limitation/applicable_amount.yaml @@ -1,6 +1,8 @@ description: The US limits the itemized deductions to filers with adjusted gross income over this amount, based on filing status. JOINT: - values: + values: + 2009-01-01: 250_200 + 2010-01-01: .inf 2013-01-01: 300_000 2014-01-01: 305_050 2015-01-01: 309_900 @@ -26,6 +28,8 @@ JOINT: interval: 50 SINGLE: values: + 2009-01-01: 166_800 + 2010-01-01: .inf 2013-01-01: 250_000 2014-01-01: 254_200 2015-01-01: 258_250 @@ -51,6 +55,8 @@ SINGLE: interval: 50 SEPARATE: values: + 2009-01-01: 125_100 + 2010-01-01: .inf 2013-01-01: 150_000 2014-01-01: 152_525 2015-01-01: 154_950 @@ -76,6 +82,8 @@ SEPARATE: interval: 50 HEAD_OF_HOUSEHOLD: values: + 2009-01-01: 208_500 + 2010-01-01: .inf 2013-01-01: 275_000 2014-01-01: 279_650 2015-01-01: 284_050 @@ -99,8 +107,10 @@ HEAD_OF_HOUSEHOLD: rounding: type: downwards interval: 50 -SURVIVING_SPOUSE: # Same as joint +SURVIVING_SPOUSE: # Same as joint values: + 2009-01-01: 250_200 + 2010-01-01: .inf 2013-01-01: 300_000 2014-01-01: 305_050 2015-01-01: 309_900 @@ -131,9 +141,11 @@ metadata: breakdown: - filing_status reference: - # This section of the legal code was repealed between 2018 and 2026. + # This section of the legal code was repealed between 2010-2012 and 2018-2025. - title: 26 U.S. Code § 68 - Overall limitation on itemized deductions (b)(1) href: https://www.law.cornell.edu/uscode/text/26/68#b_1 + - title: 2009 Form 1040 - Limit on Itemized Deductions + href: https://www.irs.gov/pub/irs-prior/i1040gi--2009.pdf#page=6 - title: 2013 Instruction 1040 Schedule A href: https://www.irs.gov/pub/irs-prior/i1040sca--2013.pdf#page=13 - title: 2014 Instruction 1040 Schedule A diff --git a/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/applies.yaml b/policyengine_us/parameters/gov/irs/deductions/itemized/limitation/applies.yaml similarity index 66% rename from policyengine_us/parameters/gov/irs/deductions/itemized/reduction/applies.yaml rename to policyengine_us/parameters/gov/irs/deductions/itemized/limitation/applies.yaml index 3bef62a2ef4..ba891e8b9ab 100644 --- a/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/applies.yaml +++ b/policyengine_us/parameters/gov/irs/deductions/itemized/limitation/applies.yaml @@ -1,4 +1,4 @@ -description: The itemized deductions reduction applies if this is true. +description: The itemized deductions limitation applies if this is true. values: 2009-01-01: true @@ -10,7 +10,7 @@ values: metadata: unit: bool period: year - label: Itemized deductions reduction applies + label: Itemized deductions limitation applies reference: - - title: 26 U.S. Code § 68 - Overall limitation on itemized deductions, (a)(2) + - title: 26 U.S. Code § 68 - Overall limitation on itemized deductions, (a)(2) href: https://www.law.cornell.edu/uscode/text/26/68 diff --git a/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/amended_structure/applies.yaml b/policyengine_us/parameters/gov/irs/deductions/itemized/limitation/obbb/applies.yaml similarity index 57% rename from policyengine_us/parameters/gov/irs/deductions/itemized/reduction/amended_structure/applies.yaml rename to policyengine_us/parameters/gov/irs/deductions/itemized/limitation/obbb/applies.yaml index d121b55c272..3891f5d0351 100644 --- a/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/amended_structure/applies.yaml +++ b/policyengine_us/parameters/gov/irs/deductions/itemized/limitation/obbb/applies.yaml @@ -1,4 +1,4 @@ -description: The IRS reduces the itemized deductions at an amended structure, if this is true. +description: The One Big Beautiful Bill Act itemized deductions limitation structure applies, if this is true. values: 2009-01-01: false @@ -7,7 +7,7 @@ values: metadata: unit: bool period: year - label: Itemized deductions amended reduction structure applies + label: OBBB itemized deductions limitation applies reference: - title: H.R.1 - One Big Beautiful Bill Act href: https://www.congress.gov/bill/119th-congress/house-bill/1/text diff --git a/policyengine_us/parameters/gov/irs/deductions/itemized/limitation/obbb/rate.yaml b/policyengine_us/parameters/gov/irs/deductions/itemized/limitation/obbb/rate.yaml new file mode 100644 index 00000000000..26706052811 --- /dev/null +++ b/policyengine_us/parameters/gov/irs/deductions/itemized/limitation/obbb/rate.yaml @@ -0,0 +1,12 @@ +description: The One Big Beautiful Bill Act phases out itemized deductions at this rate of the lesser of the itemized deductions or taxable income above the highest income tax rate threshold. + +values: + 0000-01-01: 0.05405405 # 2/37 + +metadata: + unit: /1 + period: year + label: OBBB itemized deductions limitation rate + reference: + - title: H.R.1 - One Big Beautiful Bill Act + href: https://www.congress.gov/bill/119th-congress/house-bill/1/text diff --git a/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/agi_threshold.yaml b/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/agi_threshold.yaml deleted file mode 100644 index ea1e0681045..00000000000 --- a/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/agi_threshold.yaml +++ /dev/null @@ -1,165 +0,0 @@ -description: IRS deducts the total itemized deductions amount for filers with adjusted gross income below this amount, based on filing status. - -SINGLE: - values: - 2009-01-01: 166_800 - 2010-01-01: 0 - 2013-01-01: 250_000 - 2014-01-01: 254_200 - 2015-01-01: 258_250 - 2016-01-01: 259_400 - 2017-01-01: 261_500 - 2018-01-01: 0 - # CBO forecast. - 2026-01-01: 339_850 - 2027-01-01: 347_050 - 2028-01-01: 354_050 - 2029-01-01: 361_050 - 2030-01-01: 368_200 - 2031-01-01: 375_500 - 2032-01-01: 382_900 - 2033-01-01: 390_500 - 2034-01-01: 398_250 - 2035-01-01: 406_200 - metadata: - uprating: - parameter: gov.irs.uprating - rounding: - type: downwards - interval: 50 -JOINT: - values: - 2009-01-01: 250_200 - 2010-01-01: 0 - 2013-01-01: 300_000 - 2014-01-01: 305_050 - 2015-01-01: 309_900 - 2016-01-01: 311_300 - 2017-01-01: 313_800 - 2018-01-01: 0 - 2026-01-01: 407_850 - 2027-01-01: 416_450 - 2028-01-01: 424_900 - 2029-01-01: 433_300 - 2030-01-01: 441_850 - 2031-01-01: 450_600 - 2032-01-01: 459_500 - 2033-01-01: 468_600 - 2034-01-01: 477_900 - 2035-01-01: 487_400 - metadata: - uprating: - parameter: gov.irs.uprating - rounding: - type: downwards - interval: 50 - -SEPARATE: - values: - 2009-01-01: 125_100 - 2010-01-01: 0 - 2013-01-01: 150_000 - 2014-01-01: 152_525 - 2015-01-01: 154_950 - 2016-01-01: 155_650 - 2017-01-01: 156_900 - 2018-01-01: 0 - # CBO forecast. - 2026-01-01: 203_900 - 2027-01-01: 208_200 - 2028-01-01: 212_450 - 2029-01-01: 216_650 - 2030-01-01: 220_900 - 2031-01-01: 225_300 - 2032-01-01: 229_750 - 2033-01-01: 234_300 - 2034-01-01: 238_950 - 2035-01-01: 243_700 - metadata: - uprating: - parameter: gov.irs.uprating - rounding: - type: downwards - interval: 50 - -HEAD_OF_HOUSEHOLD: - values: - 2009-01-01: 208_500 - 2010-01-01: 0 - 2013-01-01: 275_000 - 2014-01-01: 279_650 - 2015-01-01: 284_050 - 2016-01-01: 285_350 - 2017-01-01: 287_650 - 2018-01-01: 0 - # CBO forecast. - 2026-01-01: 373_850 - 2027-01-01: 381_750 - 2028-01-01: 389_500 - 2029-01-01: 397_200 - 2030-01-01: 405_000 - 2031-01-01: 413_050 - 2032-01-01: 421_200 - 2033-01-01: 429_550 - 2034-01-01: 438_100 - 2035-01-01: 446_800 - metadata: - uprating: - parameter: gov.irs.uprating - rounding: - type: downwards - interval: 50 - -SURVIVING_SPOUSE: - values: - 2009-01-01: 250_200 - 2010-01-01: 0 - 2013-01-01: 300_000 - 2014-01-01: 305_050 - 2015-01-01: 309_900 - 2016-01-01: 311_300 - 2017-01-01: 313_800 - 2018-01-01: 0 - # CBO forecast. - 2026-01-01: 407_850 - 2027-01-01: 416_450 - 2028-01-01: 424_900 - 2029-01-01: 433_300 - 2030-01-01: 441_850 - 2031-01-01: 450_600 - 2032-01-01: 459_500 - 2033-01-01: 468_600 - 2034-01-01: 477_900 - 2035-01-01: 487_400 - metadata: - uprating: - parameter: gov.irs.uprating - rounding: - type: downwards - interval: 50 - -metadata: - breakdown: - - filing_status - unit: currency-USD - period: year - label: IRS itemized deductions reduction threshold - reference: - - title: 2009 Form 1040 - Limit on Itemized Deductions - href: https://www.irs.gov/pub/irs-prior/i1040gi--2009.pdf#page=6 - - title: 26 U.S. Code § 68 - Overall limitation on itemized deductions, (b) - href: https://www.law.cornell.edu/uscode/text/26/68#b - # The pease limitation was repealed from 2010 to 2012 as well as from 2017 to 2025 - - title: 2010 Form 1040 - Limit on Itemized Deductions - href: https://www.irs.gov/pub/irs-prior/i1040gi--2010.pdf#page=6 - - title: 2011 Form 1040 - Limit on Itemized Deductions - href: https://www.irs.gov/pub/irs-prior/i1040gi--2011.pdf#page=6 - - title: 2012 Form 1040 - Limit on Itemized Deductions - href: https://www.irs.gov/pub/irs-prior/i1040gi--2012.pdf#page=6 - - title: 2013 Form 1040 - Limit on Itemized Deductions - href: https://www.irs.gov/pub/irs-prior/i1040gi--2013.pdf#page=6 - - title: 2014 Form 1040 - Limit on Itemized Deductions - href: https://www.irs.gov/pub/irs-prior/i1040gi--2014.pdf#page=6 - - title: 2015 Form 1040 - Limit on Itemized Deductions - href: https://www.irs.gov/pub/irs-prior/i1040gi--2015.pdf#page=6 - diff --git a/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/amended_structure/rate.yaml b/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/amended_structure/rate.yaml deleted file mode 100644 index fcd15fe99ec..00000000000 --- a/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/amended_structure/rate.yaml +++ /dev/null @@ -1,12 +0,0 @@ -description: The IRS phases the itemized deductions out at the following rate of the lesser of the itemized deductions or taxable income above the highest income tax rate threshold. - -values: - 0000-01-01: 0.05405405 # 2/37 - -metadata: - unit: /1 - period: year - label: Itemized deductions amended reduction rate - reference: - - title: H.R.1 - One Big Beautiful Bill Act - href: https://www.congress.gov/bill/119th-congress/house-bill/1/text diff --git a/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/rate/base.yaml b/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/rate/base.yaml deleted file mode 100644 index 4d2e546c661..00000000000 --- a/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/rate/base.yaml +++ /dev/null @@ -1,10 +0,0 @@ -description: IRS multiplies the excess of the total and reduced itemized deductions by this rate. -values: - 2017-01-01: 0.8 -metadata: - unit: /1 - period: year - label: IRS reduced itemized deductions base rate - reference: - - title: 26 U.S. Code § 68 - Overall limitation on itemized deductions, (a)(2) - href: https://www.law.cornell.edu/uscode/text/26/68 diff --git a/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/rate/excess_agi.yaml b/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/rate/excess_agi.yaml deleted file mode 100644 index 3d1ff44cd76..00000000000 --- a/policyengine_us/parameters/gov/irs/deductions/itemized/reduction/rate/excess_agi.yaml +++ /dev/null @@ -1,10 +0,0 @@ -description: IRS multiplies the excess of adjusted gross income over the applicable amount by this rate. -values: - 2017-01-01: 0.03 -metadata: - unit: /1 - period: year - label: IRS itemized deductions reduced adjusted gross income rate - reference: - - title: 26 U.S. Code § 68 - Overall limitation on itemized deductions, (a)(1) - href: https://www.law.cornell.edu/uscode/text/26/68 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/monthly_payment/max_au_size.yaml b/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/monthly_payment/max_au_size.yaml index b1fb15766f4..25be858f1c5 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/monthly_payment/max_au_size.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/monthly_payment/max_au_size.yaml @@ -6,8 +6,9 @@ metadata: label: California CalWORKs maximum assistance unit size for payment standards reference: - title: County of San Diego CalWORKS Program Guide | CalWORKs Payment Standards Chart - href: [https://hhsaprogramguides.sandiegocounty.gov/CalWORKS/44-300/CalWORKs_Payment_Standards/G_CalWORKs_Payment_Standards.pdf, - https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=11450.] + href: "https://hhsaprogramguides.sandiegocounty.gov/CalWORKS/44-300/CalWORKs_Payment_Standards/G_CalWORKs_Payment_Standards.pdf" + - title: California Welfare and Institutions Code Section 11450 + href: "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=11450." values: 2023-01-01: 10 # Actual date: 2023-10-01 diff --git a/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/region1_counties.yaml b/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/region1_counties.yaml index 80eb9af4fec..44403eb9394 100644 --- a/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/region1_counties.yaml +++ b/policyengine_us/parameters/gov/states/ca/cdss/tanf/cash/region1_counties.yaml @@ -6,8 +6,9 @@ metadata: label: California CalWORKs region 1 counties reference: - title: Los Angeles Department of Public Social Services E-Policy | CalWORKs Region Definiton - href: [http://epolicy.dpss.lacounty.gov/epolicy/epolicy/server/general/projects_responsive/ePolicyMaster/index.htm?&area=general&type=responsivehelp&ctxid=&project=ePolicyMaster#t=mergedProjects%2FCalWORKs%2FCalWORKs%2F44-212_Minimum_Basic_Standard_of_Adequate_Care%2F44-212_Minimum_Basic_Standard_of_Adequate_Care.htm%23Definitionsbc-4&rhtocid=_3_1_7_20_3, - https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=11452.018.] + href: "http://epolicy.dpss.lacounty.gov/epolicy/epolicy/server/general/projects_responsive/ePolicyMaster/index.htm?&area=general&type=responsivehelp&ctxid=&project=ePolicyMaster#t=mergedProjects%2FCalWORKs%2FCalWORKs%2F44-212_Minimum_Basic_Standard_of_Adequate_Care%2F44-212_Minimum_Basic_Standard_of_Adequate_Care.htm%23Definitionsbc-4&rhtocid=_3_1_7_20_3" + - title: California Welfare and Institutions Code Section 11452.018 + href: "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=WIC§ionNum=11452.018." values: 2023-01-01: # Actual date: 2023-07-01 - ALAMEDA_COUNTY_CA diff --git a/policyengine_us/parameters/gov/states/ma/tax/income/credits/child_and_family/dependent_cap.yaml b/policyengine_us/parameters/gov/states/ma/tax/income/credits/child_and_family/dependent_cap.yaml index a482cfe1d3e..940ad323b1f 100644 --- a/policyengine_us/parameters/gov/states/ma/tax/income/credits/child_and_family/dependent_cap.yaml +++ b/policyengine_us/parameters/gov/states/ma/tax/income/credits/child_and_family/dependent_cap.yaml @@ -8,7 +8,7 @@ metadata: href: https://www.mass.gov/doc/2021-form-1-instructions/download#page=17 - title: Form 1 2022 Massachusetts Resident Income Tax (line 46) href: https://www.mass.gov/doc/2022-form-1-instructions/download#page=17 - - title: Law Result Summary Part I Title IX Chapter 62 Section 6 (y) (ii) (B) + - title: Law Result Summary Part I Title IX Chapter 62 Section 6 (y) (ii) (B) href: https://malegislature.gov/Laws/GeneralLaws/PartI/TitleIX/Chapter62/Section6 - title: Form 1 2023 Massachusetts Resident Income Tax (line 46) href: https://www.mass.gov/doc/2023-form-1-instructions/download#page=17 diff --git a/policyengine_us/parameters/gov/states/me/tax/income/main/head_of_household.yaml b/policyengine_us/parameters/gov/states/me/tax/income/main/head_of_household.yaml index 8060ebce5f9..787cc8f65cc 100644 --- a/policyengine_us/parameters/gov/states/me/tax/income/main/head_of_household.yaml +++ b/policyengine_us/parameters/gov/states/me/tax/income/main/head_of_household.yaml @@ -16,9 +16,9 @@ metadata: href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/22_1040me_dwnld_ff.pdf#page=2 - title: Maine 2022 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/22_1040me_tax_tables.pdf#page=5 - - title: Maine 2023 Individual Income Tax Rate Schedules + - title: Maine 2023 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/23_1040me_tax_tables.pdf#page=5 - - title: Maine 2024 Individual Income Tax Rate Schedules + - title: Maine 2024 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/ind_tax_rate_sched_2024.pdf brackets: diff --git a/policyengine_us/parameters/gov/states/me/tax/income/main/joint.yaml b/policyengine_us/parameters/gov/states/me/tax/income/main/joint.yaml index dfe5fda15ba..0cd9ad2c746 100644 --- a/policyengine_us/parameters/gov/states/me/tax/income/main/joint.yaml +++ b/policyengine_us/parameters/gov/states/me/tax/income/main/joint.yaml @@ -16,9 +16,9 @@ metadata: href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/22_1040me_dwnld_ff.pdf#page=2 - title: Maine 2022 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/22_1040me_tax_tables.pdf#page=5 - - title: Maine 2023 Individual Income Tax Rate Schedules + - title: Maine 2023 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/23_1040me_tax_tables.pdf#page=5 - - title: Maine 2024 Individual Income Tax Rate Schedules + - title: Maine 2024 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/ind_tax_rate_sched_2024.pdf brackets: - threshold: diff --git a/policyengine_us/parameters/gov/states/me/tax/income/main/separate.yaml b/policyengine_us/parameters/gov/states/me/tax/income/main/separate.yaml index ed75421a7b5..403b6619862 100644 --- a/policyengine_us/parameters/gov/states/me/tax/income/main/separate.yaml +++ b/policyengine_us/parameters/gov/states/me/tax/income/main/separate.yaml @@ -16,9 +16,9 @@ metadata: href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/22_1040me_dwnld_ff.pdf#page=2 - title: Maine 2022 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/22_1040me_tax_tables.pdf#page=5 - - title: Maine 2023 Individual Income Tax Rate Schedules + - title: Maine 2023 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/23_1040me_tax_tables.pdf#page=5 - - title: Maine 2024 Individual Income Tax Rate Schedules + - title: Maine 2024 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/ind_tax_rate_sched_2024.pdf brackets: - threshold: diff --git a/policyengine_us/parameters/gov/states/me/tax/income/main/single.yaml b/policyengine_us/parameters/gov/states/me/tax/income/main/single.yaml index a0b101c5aa0..1c0953f21bd 100644 --- a/policyengine_us/parameters/gov/states/me/tax/income/main/single.yaml +++ b/policyengine_us/parameters/gov/states/me/tax/income/main/single.yaml @@ -16,9 +16,9 @@ metadata: href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/22_1040me_dwnld_ff.pdf#page=2 - title: Maine 2022 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/22_1040me_tax_tables.pdf#page=5 - - title: Maine 2023 Individual Income Tax Rate Schedules + - title: Maine 2023 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/23_1040me_tax_tables.pdf#page=5 - - title: Maine 2024 Individual Income Tax Rate Schedules + - title: Maine 2024 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/ind_tax_rate_sched_2024.pdf brackets: - threshold: diff --git a/policyengine_us/parameters/gov/states/me/tax/income/main/surviving_spouse.yaml b/policyengine_us/parameters/gov/states/me/tax/income/main/surviving_spouse.yaml index e2f72baa1d2..8dc131c331f 100644 --- a/policyengine_us/parameters/gov/states/me/tax/income/main/surviving_spouse.yaml +++ b/policyengine_us/parameters/gov/states/me/tax/income/main/surviving_spouse.yaml @@ -16,9 +16,9 @@ metadata: href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/22_1040me_dwnld_ff.pdf#page=2 - title: Maine 2022 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/22_1040me_tax_tables.pdf#page=5 - - title: Maine 2023 Individual Income Tax Rate Schedules + - title: Maine 2023 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/23_1040me_tax_tables.pdf#page=5 - - title: Maine 2024 Individual Income Tax Rate Schedules + - title: Maine 2024 Individual Income Tax Rate Schedules href: https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/ind_tax_rate_sched_2024.pdf brackets: - threshold: diff --git a/policyengine_us/tests/policy/baseline/gov/irs/deductions/itemized/limitation/itemized_deduction_limitation.yaml b/policyengine_us/tests/policy/baseline/gov/irs/deductions/itemized/limitation/itemized_deduction_limitation.yaml new file mode 100644 index 00000000000..1e6fc27b4ee --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/irs/deductions/itemized/limitation/itemized_deduction_limitation.yaml @@ -0,0 +1,90 @@ +# Tests for the consolidated itemized deduction limitation +# These tests verify the Pease limitation (pre-TCJA), TCJA suspension, +# and OBBB limitation (2026+) + +# Pre-TCJA period (2017) - Pease limitation active +- name: Pease limitation active in 2017 - SINGLE filer over threshold + period: 2017 + absolute_error_margin: 1 + input: + adjusted_gross_income: 400_000 + filing_status: SINGLE + total_itemized_taxable_income_deductions: 50_000 + output: + # AGI threshold for SINGLE in 2017: 261_500 + # AGI excess: 400_000 - 261_500 = 138_500 + # AGI excess reduction (3%): 138_500 * 0.03 = 4_155 + # Max deductions reduction (80% of 50_000): 40_000 + # Reduction is min(4_155, 40_000) = 4_155 + itemized_taxable_income_deductions_reduction: 4_155 + +- name: Pease limitation active in 2017 - JOINT filer over threshold + period: 2017 + absolute_error_margin: 1 + input: + adjusted_gross_income: 500_000 + filing_status: JOINT + total_itemized_taxable_income_deductions: 30_000 + output: + # AGI threshold for JOINT in 2017: 313_800 + # AGI excess: 500_000 - 313_800 = 186_200 + # AGI excess reduction (3%): 186_200 * 0.03 = 5_586 + # Max deductions reduction (80% of 30_000): 24_000 + # Reduction is min(5_586, 24_000) = 5_586 + itemized_taxable_income_deductions_reduction: 5_586 + +- name: Pease limitation - filer below threshold in 2017 + period: 2017 + input: + adjusted_gross_income: 200_000 + filing_status: SINGLE + total_itemized_taxable_income_deductions: 30_000 + output: + # AGI threshold for SINGLE in 2017: 261_500 + # AGI below threshold, no reduction + itemized_taxable_income_deductions_reduction: 0 + +# TCJA period (2018-2025) - Pease limitation suspended +- name: No Pease limitation during TCJA (2024) + period: 2024 + input: + adjusted_gross_income: 1_000_000 + filing_status: SINGLE + total_itemized_taxable_income_deductions: 100_000 + output: + # Pease limitation suspended during TCJA + itemized_taxable_income_deductions_reduction: 0 + +- name: No Pease limitation during TCJA (2020) + period: 2020 + input: + adjusted_gross_income: 800_000 + filing_status: JOINT + total_itemized_taxable_income_deductions: 75_000 + output: + itemized_taxable_income_deductions_reduction: 0 + +# Post-TCJA (2026+) - OBBB limitation applies +- name: OBBB limitation in 2026 - high income SINGLE filer + period: 2026 + absolute_error_margin: 1 + input: + adjusted_gross_income: 900_000 + filing_status: SINGLE + total_itemized_taxable_income_deductions: 200_000 + output: + # OBBB uses different calculation based on taxable income excess + # over top bracket threshold (37% bracket) + # Rate is 2/37 = 0.05405405 + itemized_taxable_income_deductions_reduction: 10_811 + +- name: OBBB limitation in 2026 - income below top bracket + period: 2026 + absolute_error_margin: 1 + input: + adjusted_gross_income: 400_000 + filing_status: SINGLE + total_itemized_taxable_income_deductions: 50_000 + output: + # If taxable income is below top bracket threshold, no OBBB reduction + itemized_taxable_income_deductions_reduction: 0 diff --git a/policyengine_us/variables/gov/irs/income/taxable_income/deductions/itemizing/itemized_taxable_income_deductions_reduction.py b/policyengine_us/variables/gov/irs/income/taxable_income/deductions/itemizing/itemized_taxable_income_deductions_reduction.py index a3b0148ffcc..38c75cc88ea 100644 --- a/policyengine_us/variables/gov/irs/income/taxable_income/deductions/itemizing/itemized_taxable_income_deductions_reduction.py +++ b/policyengine_us/variables/gov/irs/income/taxable_income/deductions/itemizing/itemized_taxable_income_deductions_reduction.py @@ -9,19 +9,21 @@ class itemized_taxable_income_deductions_reduction(Variable): definition_period = YEAR def formula(tax_unit, period, parameters): - p = parameters(period).gov.irs.deductions.itemized.reduction + p = parameters(period).gov.irs.deductions.itemized.limitation if p.applies: agi = tax_unit("adjusted_gross_income", period) filing_status = tax_unit("filing_status", period) - agi_threshold = p.agi_threshold[filing_status] + agi_threshold = p.applicable_amount[filing_status] agi_excess = max_(0, agi - agi_threshold) - agi_excess_reduction = agi_excess * p.rate.excess_agi + agi_excess_reduction = agi_excess * p.agi_rate maximum_deductions = tax_unit( "total_itemized_taxable_income_deductions", period ) - maximum_deductions_reduction = maximum_deductions * p.rate.base - if p.amended_structure.applies: + maximum_deductions_reduction = ( + maximum_deductions * p.itemized_deduction_rate + ) + if p.obbb.applies: top_rate_threshold = parameters( period ).gov.irs.income.bracket.thresholds["6"][filing_status] @@ -36,8 +38,6 @@ def formula(tax_unit, period, parameters): lesser_of_deductions_or_excess = min_( total_itemized_deductions, taxable_income_excess ) - return ( - p.amended_structure.rate * lesser_of_deductions_or_excess - ) + return p.obbb.rate * lesser_of_deductions_or_excess return min_(agi_excess_reduction, maximum_deductions_reduction) return 0 diff --git a/policyengine_us/variables/gov/states/hi/tax/income/deductions/itemized/hi_itemized_deductions.py b/policyengine_us/variables/gov/states/hi/tax/income/deductions/itemized/hi_itemized_deductions.py index 3e82d4e75b1..a2f1ab3f111 100644 --- a/policyengine_us/variables/gov/states/hi/tax/income/deductions/itemized/hi_itemized_deductions.py +++ b/policyengine_us/variables/gov/states/hi/tax/income/deductions/itemized/hi_itemized_deductions.py @@ -15,7 +15,7 @@ class hi_itemized_deductions(Variable): def formula(tax_unit, period, parameters): # Hawaii applies an federal AGI limit which has been introduced in 2009 - p = parameters(f"2009-01-01").gov.irs.deductions.itemized.reduction + p = parameters(f"2009-01-01").gov.irs.deductions.itemized.limitation # Hawaii did not suspend the overall limitation on itemized deductions # You may not be able to deduct all of your itemized deductions if agi reach the cap @@ -23,7 +23,7 @@ def formula(tax_unit, period, parameters): hi_agi = tax_unit("hi_agi", period) filing_status = tax_unit("filing_status", period) total_itemized_deduction_eligibility = ( - hi_agi < p.agi_threshold[filing_status] + hi_agi < p.applicable_amount[filing_status] ) return where( total_itemized_deduction_eligibility, diff --git a/policyengine_us/variables/gov/states/hi/tax/income/deductions/itemized/hi_reduced_itemized_deductions.py b/policyengine_us/variables/gov/states/hi/tax/income/deductions/itemized/hi_reduced_itemized_deductions.py index 5e512a8eee4..54fe0723015 100644 --- a/policyengine_us/variables/gov/states/hi/tax/income/deductions/itemized/hi_reduced_itemized_deductions.py +++ b/policyengine_us/variables/gov/states/hi/tax/income/deductions/itemized/hi_reduced_itemized_deductions.py @@ -36,9 +36,9 @@ def formula(tax_unit, period, parameters): # Hawaii applies federal limits which have been revoked in 2018 p_2017 = parameters( f"2017-01-01" - ).gov.irs.deductions.itemized.reduction + ).gov.irs.deductions.itemized.limitation total_less_partial_ded_percentage = ( - total_less_partial_ded_amount * p_2017.rate.base + total_less_partial_ded_amount * p_2017.itemized_deduction_rate ) # eligible check 2: actual AGI need to be smaller than AGI cap hi_agi = tax_unit("hi_agi", period) @@ -52,7 +52,7 @@ def formula(tax_unit, period, parameters): # If the AGI is over a threshold, the AGI amount is reduced by the threshold and multiplied # by a rate reduced_agi = hi_agi - agi_threshold - reduced_agi_percentage = reduced_agi * p_2017.rate.excess_agi + reduced_agi_percentage = reduced_agi * p_2017.agi_rate smaller_reduced_ded = min_( total_less_partial_ded_percentage, reduced_agi_percentage