From 268169420c776b896ca095f9379c2dafc1cb3474 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Fri, 6 Nov 2026 14:05:17 -0500 Subject: [PATCH 1/4] Update federal tax parameters to the 2027 amounts in Rev. Proc. 2026-35 Adds the IRS's tax year 2027 inflation-adjusted amounts: income tax brackets, capital gains thresholds, standard deductions (basic, dependent, aged or blind), the EITC table and investment income limit, the CTC refundable amount, AMT exemptions, phase-outs and the 28% threshold, QBI thresholds and minimum deduction, long-term care premium limits, student loan interest phase-out, educator expenses, the 152(d) gross income limit, the excess business loss threshold and the estate tax basic exclusion. Arizona's standard deduction and Maine's aged or blind addition follow the federal amounts. 2027 CBO forecast rows give way to the IRS values; stale internal-forecast rows for three bracket thresholds are removed so they uprate from 2027 like the others. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01LqCGPgxDukji8Bhs57c5rH --- changelog.d/irs-2027-indexing.changed.md | 1 + .../gov/irs/ald/educator_expense/cap.yaml | 3 + .../parameters/gov/irs/ald/loss/max.yaml | 7 +++ .../reduction/start.yaml | 6 ++ .../gov/irs/capital_gains/thresholds.yaml | 12 ++++ .../gov/irs/credits/ctc/amount/base.yaml | 2 + .../ctc/refundable/individual_max.yaml | 4 +- .../parameters/gov/irs/credits/eitc/max.yaml | 6 ++ .../credits/eitc/phase_out/joint_bonus.yaml | 6 +- .../eitc/phase_out/max_investment_income.yaml | 3 + .../gov/irs/credits/eitc/phase_out/start.yaml | 10 +-- .../gov/irs/credits/estate/base.yaml | 3 + .../medical/long_term_care_premium_limit.yaml | 7 +++ .../qbi/deduction_floor/amount.yaml | 4 ++ .../irs/deductions/qbi/phase_out/start.yaml | 7 +++ .../standard/aged_or_blind/amount.yaml | 7 +++ .../gov/irs/deductions/standard/amount.yaml | 7 +++ .../dependent/additional_earned_income.yaml | 3 + .../deductions/standard/dependent/amount.yaml | 4 +- .../gov/irs/income/amt/brackets.yaml | 4 +- .../gov/irs/income/amt/exemption/amount.yaml | 7 +++ .../income/amt/exemption/child/amount.yaml | 3 + .../income/amt/exemption/phase_out/start.yaml | 7 +++ .../income/amt/exemption/separate_limit.yaml | 4 +- .../parameters/gov/irs/income/bracket.yaml | 62 ++++++++++--------- .../gov/irs/income/exemption/amount.yaml | 6 ++ .../income/deductions/standard/amount.yaml | 14 +++-- .../deductions/standard/aged_or_blind.yaml | 7 +++ .../credits/earned_income/eitc_maximum.yaml | 30 +++++++++ .../additional_standard_deduction.yaml | 18 ++++++ .../standard/basic_standard_deduction.yaml | 36 ++++++----- .../exemption/amt_exemption.yaml | 23 +++++++ .../before_credits/income_tax_main_rates.yaml | 48 ++++++++++++++ 33 files changed, 313 insertions(+), 58 deletions(-) create mode 100644 changelog.d/irs-2027-indexing.changed.md diff --git a/changelog.d/irs-2027-indexing.changed.md b/changelog.d/irs-2027-indexing.changed.md new file mode 100644 index 00000000000..a669ba364b5 --- /dev/null +++ b/changelog.d/irs-2027-indexing.changed.md @@ -0,0 +1 @@ +Update federal tax parameters to the IRS's 2027 inflation-adjusted amounts in Rev. Proc. 2026-35: income tax brackets, capital gains thresholds, standard deductions, the EITC, the child tax credit's refundable amount, the AMT, the QBI deduction, and other indexed amounts, plus Arizona's standard deduction and Maine's aged or blind addition, which follow the federal amounts. diff --git a/policyengine_us/parameters/gov/irs/ald/educator_expense/cap.yaml b/policyengine_us/parameters/gov/irs/ald/educator_expense/cap.yaml index e3023b207cf..df1939db6c6 100644 --- a/policyengine_us/parameters/gov/irs/ald/educator_expense/cap.yaml +++ b/policyengine_us/parameters/gov/irs/ald/educator_expense/cap.yaml @@ -15,6 +15,7 @@ values: 2024-01-01: 300 2025-01-01: 300 2026-01-01: 350 + 2027-01-01: 350 metadata: unit: currency-USD period: year @@ -57,5 +58,7 @@ metadata: href: https://www.irs.gov/pub/irs-drop/rp-23-34.pdf#page=11 - title: Rev. Proc. 2024-40, section 2.13 (2025) href: https://www.irs.gov/pub/irs-drop/rp-24-40.pdf#page=11 + - title: Rev. Proc. 2026-35, section 3.13 (2027) + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=12 - title: Rev. Proc. 2025-32, section 4.12 (2026) href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=17 diff --git a/policyengine_us/parameters/gov/irs/ald/loss/max.yaml b/policyengine_us/parameters/gov/irs/ald/loss/max.yaml index 564e09fd40a..32e17d02080 100644 --- a/policyengine_us/parameters/gov/irs/ald/loss/max.yaml +++ b/policyengine_us/parameters/gov/irs/ald/loss/max.yaml @@ -15,6 +15,8 @@ metadata: href: https://www.congress.gov/bill/119th-congress/house-bill/1/text - title: 2025 Form 461, line 15 href: https://www.irs.gov/pub/irs-prior/f461--2025.pdf + - title: Revenue Procedure 2026-35, section 3.33 (2027 threshold) + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=19 - title: Revenue Procedure 2025-32, section 4.31 (2026 threshold) href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=23 - title: 2024 IRS data release @@ -44,6 +46,7 @@ HEAD_OF_HOUSEHOLD: 2024-01-01: 305_000 2025-01-01: 313_000 2026-01-01: 256_000 + 2027-01-01: 264_000 JOINT: metadata: uprating: @@ -61,6 +64,7 @@ JOINT: 2024-01-01: 610_000 2025-01-01: 626_000 2026-01-01: 512_000 + 2027-01-01: 528_000 SEPARATE: metadata: uprating: @@ -78,6 +82,7 @@ SEPARATE: 2024-01-01: 305_000 2025-01-01: 313_000 2026-01-01: 256_000 + 2027-01-01: 264_000 SINGLE: metadata: uprating: @@ -95,6 +100,7 @@ SINGLE: 2024-01-01: 305_000 2025-01-01: 313_000 2026-01-01: 256_000 + 2027-01-01: 264_000 SURVIVING_SPOUSE: metadata: uprating: @@ -113,3 +119,4 @@ SURVIVING_SPOUSE: 2024-01-01: 305_000 2025-01-01: 313_000 2026-01-01: 256_000 + 2027-01-01: 264_000 diff --git a/policyengine_us/parameters/gov/irs/ald/student_loan_interest/reduction/start.yaml b/policyengine_us/parameters/gov/irs/ald/student_loan_interest/reduction/start.yaml index f054c492427..944b5662394 100644 --- a/policyengine_us/parameters/gov/irs/ald/student_loan_interest/reduction/start.yaml +++ b/policyengine_us/parameters/gov/irs/ald/student_loan_interest/reduction/start.yaml @@ -10,6 +10,8 @@ metadata: reference: - title: 26 U.S. Code § 221 - Interest on education loans (b)(1) href: https://www.law.cornell.edu/uscode/text/26/221 + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=18 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=23 - title: 2023 IRS data release @@ -34,6 +36,7 @@ JOINT: 2024-01-01: 165_000 2025-01-01: 170_000 2026-01-01: 175_000 + 2027-01-01: 180_000 metadata: uprating: parameter: gov.irs.uprating @@ -48,6 +51,7 @@ SINGLE: 2024-01-01: 80_000 2025-01-01: 85_000 2026-01-01: 85_000 + 2027-01-01: 90_000 metadata: uprating: parameter: gov.irs.uprating @@ -65,6 +69,7 @@ HEAD_OF_HOUSEHOLD: 2024-01-01: 80_000 2025-01-01: 85_000 2026-01-01: 85_000 + 2027-01-01: 90_000 metadata: uprating: parameter: gov.irs.uprating @@ -79,6 +84,7 @@ SURVIVING_SPOUSE: 2024-01-01: 80_000 2025-01-01: 85_000 2026-01-01: 85_000 + 2027-01-01: 90_000 metadata: uprating: parameter: gov.irs.uprating diff --git a/policyengine_us/parameters/gov/irs/capital_gains/thresholds.yaml b/policyengine_us/parameters/gov/irs/capital_gains/thresholds.yaml index 10404e10bb5..87e895dcadb 100644 --- a/policyengine_us/parameters/gov/irs/capital_gains/thresholds.yaml +++ b/policyengine_us/parameters/gov/irs/capital_gains/thresholds.yaml @@ -15,6 +15,8 @@ metadata: reference: - title: 26 U.S. Code § 1(j)(5)(B) - Capital gains rate thresholds href: https://www.law.cornell.edu/uscode/text/26/1#j_5_B + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=7 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=13 - title: 2025 IRS data release @@ -47,6 +49,7 @@ metadata: 2024-01-01: 63_000 2025-01-01: 64_750 2026-01-01: 66_200 + 2027-01-01: 68_350 JOINT: 2013-01-01: 72_500 2014-01-01: 73_800 @@ -62,6 +65,7 @@ metadata: 2024-01-01: 94_050 2025-01-01: 96_700 2026-01-01: 98_900 + 2027-01-01: 102_100 SEPARATE: 2013-01-01: 36_250 2014-01-01: 36_900 @@ -77,6 +81,7 @@ metadata: 2024-01-01: 47_025 2025-01-01: 48_350 2026-01-01: 49_450 + 2027-01-01: 51_050 SINGLE: 2013-01-01: 36_250 2014-01-01: 36_900 @@ -92,6 +97,7 @@ metadata: 2024-01-01: 47_025 2025-01-01: 48_350 2026-01-01: 49_450 + 2027-01-01: 51_050 SURVIVING_SPOUSE: 2013-01-01: 72_500 2014-01-01: 73_800 @@ -107,6 +113,7 @@ metadata: 2024-01-01: 94_050 2025-01-01: 96_700 2026-01-01: 98_900 + 2027-01-01: 102_100 2: HEAD_OF_HOUSEHOLD: 2013-01-01: 425_000 @@ -123,6 +130,7 @@ metadata: 2024-01-01: 551_350 2025-01-01: 566_700 2026-01-01: 579_600 + 2027-01-01: 598_400 JOINT: 2013-01-01: 450_000 2014-01-01: 457_600 @@ -138,6 +146,7 @@ metadata: 2024-01-01: 583_750 2025-01-01: 600_050 2026-01-01: 613_700 + 2027-01-01: 633_600 SEPARATE: 2013-01-01: 225_000 2014-01-01: 228_800 @@ -153,6 +162,7 @@ metadata: 2024-01-01: 291_850 2025-01-01: 300_000 2026-01-01: 306_850 + 2027-01-01: 316_800 SINGLE: 2013-01-01: 400_000 2014-01-01: 406_750 @@ -168,6 +178,7 @@ metadata: 2024-01-01: 518_900 2025-01-01: 533_400 2026-01-01: 545_500 + 2027-01-01: 563_200 SURVIVING_SPOUSE: 2013-01-01: 450_000 2014-01-01: 457_600 @@ -183,3 +194,4 @@ metadata: 2024-01-01: 583_750 2025-01-01: 600_050 2026-01-01: 613_700 + 2027-01-01: 633_600 diff --git a/policyengine_us/parameters/gov/irs/credits/ctc/amount/base.yaml b/policyengine_us/parameters/gov/irs/credits/ctc/amount/base.yaml index 69de4bd838f..b30e3c8d95c 100644 --- a/policyengine_us/parameters/gov/irs/credits/ctc/amount/base.yaml +++ b/policyengine_us/parameters/gov/irs/credits/ctc/amount/base.yaml @@ -26,6 +26,8 @@ brackets: href: https://www.law.cornell.edu/uscode/text/26/24#h_2 - title: 26 U.S. Code § 24(i)(2) - Inflation adjustment for credit amount href: https://www.law.cornell.edu/uscode/text/26/24#i_2 + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=8 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=14 # IRC §24(i)(2) adjusts the $2,200 statutory base using 2024 as reference year. diff --git a/policyengine_us/parameters/gov/irs/credits/ctc/refundable/individual_max.yaml b/policyengine_us/parameters/gov/irs/credits/ctc/refundable/individual_max.yaml index 5d118287b6d..8ad692ca1ec 100644 --- a/policyengine_us/parameters/gov/irs/credits/ctc/refundable/individual_max.yaml +++ b/policyengine_us/parameters/gov/irs/credits/ctc/refundable/individual_max.yaml @@ -11,8 +11,8 @@ values: # law (the statutory cap has not been indexed high enough to round up). 2025-01-01: 1_700 2026-01-01: 1_700 - # CBO forecast. 2027-01-01: 1_800 + # CBO forecast. 2029-01-01: 1_900 2032-01-01: 2_000 2034-01-01: 2_100 @@ -30,6 +30,8 @@ metadata: href: https://www.law.cornell.edu/uscode/text/26/24#h_5_A - title: 26 U.S. Code § 24(i)(1) - Inflation adjustment for refundable amount href: https://www.law.cornell.edu/uscode/text/26/24#i_1 + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=8 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=14 - title: 2025 IRS data release diff --git a/policyengine_us/parameters/gov/irs/credits/eitc/max.yaml b/policyengine_us/parameters/gov/irs/credits/eitc/max.yaml index f03fcb6ddca..be6e50b0d36 100644 --- a/policyengine_us/parameters/gov/irs/credits/eitc/max.yaml +++ b/policyengine_us/parameters/gov/irs/credits/eitc/max.yaml @@ -15,6 +15,7 @@ brackets: 2024-01-01: 632 2025-01-01: 649 2026-01-01: 664 + 2027-01-01: 685 metadata: uprating: parameter: gov.irs.uprating @@ -35,6 +36,7 @@ brackets: 2024-01-01: 4_213 2025-01-01: 4_328 2026-01-01: 4_427 + 2027-01-01: 4_573 metadata: uprating: parameter: gov.irs.uprating @@ -55,6 +57,7 @@ brackets: 2024-01-01: 6_960 2025-01-01: 7_152 2026-01-01: 7_316 + 2027-01-01: 7_552 metadata: uprating: parameter: gov.irs.uprating @@ -75,6 +78,7 @@ brackets: 2024-01-01: 7_830 2025-01-01: 8_046 2026-01-01: 8_231 + 2027-01-01: 8_496 metadata: uprating: parameter: gov.irs.uprating @@ -90,6 +94,8 @@ metadata: - title: 26 U.S.C. § 32(b) - Earned Income Credit href: https://www.law.cornell.edu/uscode/text/26/32#b # Defines EITC percentages and maximum amounts by number of children + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=10 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=14 - title: 2025 IRS data release diff --git a/policyengine_us/parameters/gov/irs/credits/eitc/phase_out/joint_bonus.yaml b/policyengine_us/parameters/gov/irs/credits/eitc/phase_out/joint_bonus.yaml index 8df2543e503..17a232971a7 100644 --- a/policyengine_us/parameters/gov/irs/credits/eitc/phase_out/joint_bonus.yaml +++ b/policyengine_us/parameters/gov/irs/credits/eitc/phase_out/joint_bonus.yaml @@ -10,6 +10,8 @@ metadata: # Row 3: Threshold Phaseout Amount (Single, Surviving Spouse, or Head of # Household), and # Row 5: Threshold Phaseout Amount (Married Filing Jointly) + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=10 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=15 - title: 2025 IRS data release @@ -59,8 +61,8 @@ brackets: 2024-01-01: 6_920 # 17_250 - 10_330 2025-01-01: 7_110 # 17_730 - 10_620 2026-01-01: 7_280 # 18_140 - 10_860 + 2027-01-01: 7_520 # 18_730 - 11_210 # CBO forecast. - 2027-01-01: 7_410 2028-01-01: 7_570 2029-01-01: 7_710 2030-01-01: 7_870 @@ -98,8 +100,8 @@ brackets: 2024-01-01: 6_920 # 29_640 - 22_720 2025-01-01: 7_120 # 30_470 - 23_350 2026-01-01: 7_270 # 31_160 - 23_890 + 2027-01-01: 7_510 # 32_170 - 24_660 # CBO forecast. - 2027-01-01: 7_420 2028-01-01: 7_570 2029-01-01: 7_720 2030-01-01: 7_870 diff --git a/policyengine_us/parameters/gov/irs/credits/eitc/phase_out/max_investment_income.yaml b/policyengine_us/parameters/gov/irs/credits/eitc/phase_out/max_investment_income.yaml index 53e39e5ff6c..f71a050f516 100644 --- a/policyengine_us/parameters/gov/irs/credits/eitc/phase_out/max_investment_income.yaml +++ b/policyengine_us/parameters/gov/irs/credits/eitc/phase_out/max_investment_income.yaml @@ -5,6 +5,8 @@ metadata: label: EITC maximum investment income uprating: gov.irs.uprating reference: + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=10 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=15 - title: 2025 IRS data release @@ -36,3 +38,4 @@ values: 2024-01-01: 11_600 2025-01-01: 11_950 2026-01-01: 12_200 + 2027-01-01: 12_600 diff --git a/policyengine_us/parameters/gov/irs/credits/eitc/phase_out/start.yaml b/policyengine_us/parameters/gov/irs/credits/eitc/phase_out/start.yaml index 42bbf18d8da..0baa372c372 100644 --- a/policyengine_us/parameters/gov/irs/credits/eitc/phase_out/start.yaml +++ b/policyengine_us/parameters/gov/irs/credits/eitc/phase_out/start.yaml @@ -5,6 +5,8 @@ metadata: amount_unit: currency-USD label: EITC phase-out start by number of children reference: + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=10 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=15 - title: 2025 IRS data release @@ -57,8 +59,8 @@ brackets: 2024-01-01: 10_330 2025-01-01: 10_620 2026-01-01: 10_860 + 2027-01-01: 11_210 # CBO forecast. - 2027-01-01: 11_070 2028-01-01: 11_290 2029-01-01: 11_520 2030-01-01: 11_740 @@ -86,8 +88,8 @@ brackets: 2024-01-01: 22_720 2025-01-01: 23_350 2026-01-01: 23_890 + 2027-01-01: 24_660 # CBO forecast. - 2027-01-01: 24_340 2028-01-01: 24_830 2029-01-01: 25_320 2030-01-01: 25_820 @@ -115,8 +117,8 @@ brackets: 2024-01-01: 22_720 2025-01-01: 23_350 2026-01-01: 23_890 + 2027-01-01: 24_660 # CBO forecast. - 2027-01-01: 24_340 2028-01-01: 24_830 2029-01-01: 25_320 2030-01-01: 25_820 @@ -144,8 +146,8 @@ brackets: 2024-01-01: 22_720 2025-01-01: 23_350 2026-01-01: 23_890 + 2027-01-01: 24_660 # CBO forecast. - 2027-01-01: 24_340 2028-01-01: 24_830 2029-01-01: 25_320 2030-01-01: 25_820 diff --git a/policyengine_us/parameters/gov/irs/credits/estate/base.yaml b/policyengine_us/parameters/gov/irs/credits/estate/base.yaml index dd6cb3e1dc5..e375206790d 100644 --- a/policyengine_us/parameters/gov/irs/credits/estate/base.yaml +++ b/policyengine_us/parameters/gov/irs/credits/estate/base.yaml @@ -6,6 +6,8 @@ metadata: reference: - title: H.R.1 - One Big Beautiful Bill Act href: https://www.congress.gov/bill/119th-congress/house-bill/1/text + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=21 - title: 2025 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-24-40.pdf#page=18 - title: 26 U.S. Code § 2010 - Unified credit against estate tax - (c)(3)(A) @@ -61,3 +63,4 @@ values: 2025-01-01: 13_990_000 # OBBBA sets the basic exclusion amount to $15M. 2026-01-01: 15_000_000 + 2027-01-01: 15_480_000 diff --git a/policyengine_us/parameters/gov/irs/deductions/itemized/medical/long_term_care_premium_limit.yaml b/policyengine_us/parameters/gov/irs/deductions/itemized/medical/long_term_care_premium_limit.yaml index a27131ff084..ad2e19ce6fc 100644 --- a/policyengine_us/parameters/gov/irs/deductions/itemized/medical/long_term_care_premium_limit.yaml +++ b/policyengine_us/parameters/gov/irs/deductions/itemized/medical/long_term_care_premium_limit.yaml @@ -22,6 +22,7 @@ brackets: 2024-01-01: 470 2025-01-01: 480 2026-01-01: 500 + 2027-01-01: 500 metadata: uprating: parameter: gov.bls.cpi.cpi_u_medical_care @@ -47,6 +48,7 @@ brackets: 2024-01-01: 880 2025-01-01: 900 2026-01-01: 930 + 2027-01-01: 945 metadata: uprating: parameter: gov.bls.cpi.cpi_u_medical_care @@ -72,6 +74,7 @@ brackets: 2024-01-01: 1_760 2025-01-01: 1_800 2026-01-01: 1_860 + 2027-01-01: 1_890 metadata: uprating: parameter: gov.bls.cpi.cpi_u_medical_care @@ -97,6 +100,7 @@ brackets: 2024-01-01: 4_710 2025-01-01: 4_810 2026-01-01: 4_960 + 2027-01-01: 5_030 metadata: uprating: parameter: gov.bls.cpi.cpi_u_medical_care @@ -122,6 +126,7 @@ brackets: 2024-01-01: 5_880 2025-01-01: 6_020 2026-01-01: 6_200 + 2027-01-01: 6_290 metadata: uprating: parameter: gov.bls.cpi.cpi_u_medical_care @@ -171,6 +176,8 @@ metadata: href: https://www.irs.gov/pub/irs-drop/rp-23-34.pdf#page=16 - title: Rev. Proc. 2024-40, section 3.28 (2025) href: https://www.irs.gov/pub/irs-drop/rp-24-40.pdf#page=15 + - title: Rev. Proc. 2026-35, section 3.29 (2027) + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=17 - title: Rev. Proc. 2025-32, section 3.27 (2026) href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=22 - title: 2022 Instructions for Schedule A (Form 1040), line 1 (age at the end of the year) diff --git a/policyengine_us/parameters/gov/irs/deductions/qbi/deduction_floor/amount.yaml b/policyengine_us/parameters/gov/irs/deductions/qbi/deduction_floor/amount.yaml index 9fa87ac5fd8..bb8f5a69186 100644 --- a/policyengine_us/parameters/gov/irs/deductions/qbi/deduction_floor/amount.yaml +++ b/policyengine_us/parameters/gov/irs/deductions/qbi/deduction_floor/amount.yaml @@ -7,8 +7,10 @@ brackets: 2026-01-01: 0 - threshold: 2026-01-01: 1_000 + 2027-01-01: 1_030 amount: 2026-01-01: 400 + 2027-01-01: 415 metadata: type: single_amount @@ -19,3 +21,5 @@ metadata: reference: - title: H.R.1 - One Big Beautiful Bill Act href: https://www.congress.gov/bill/119th-congress/house-bill/1/text + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=17 diff --git a/policyengine_us/parameters/gov/irs/deductions/qbi/phase_out/start.yaml b/policyengine_us/parameters/gov/irs/deductions/qbi/phase_out/start.yaml index a08b154e5f6..15f5d7089dd 100644 --- a/policyengine_us/parameters/gov/irs/deductions/qbi/phase_out/start.yaml +++ b/policyengine_us/parameters/gov/irs/deductions/qbi/phase_out/start.yaml @@ -14,6 +14,8 @@ metadata: # Rounding rules: $50 for general filers, $25 for married filing separately - title: 26 CFR § 1.199A-1(b)(12) href: https://www.ecfr.gov/current/title-26/part-1/section-1.199A-1#p-1.199A-1(b)(12) + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=17 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=22 - title: 2025 IRS data release @@ -56,6 +58,7 @@ HEAD_OF_HOUSEHOLD: 2024-01-01: 191_950 2025-01-01: 197_300 2026-01-01: 201_750 + 2027-01-01: 208_300 JOINT: metadata: uprating: @@ -75,6 +78,7 @@ JOINT: 2024-01-01: 383_900 2025-01-01: 394_600 2026-01-01: 403_500 + 2027-01-01: 416_600 SEPARATE: metadata: uprating: @@ -93,6 +97,7 @@ SEPARATE: 2024-01-01: 191_950 2025-01-01: 197_300 2026-01-01: 201_775 + 2027-01-01: 208_325 SINGLE: metadata: uprating: @@ -111,6 +116,7 @@ SINGLE: 2024-01-01: 191_950 2025-01-01: 197_300 2026-01-01: 201_750 + 2027-01-01: 208_300 SURVIVING_SPOUSE: metadata: uprating: @@ -131,3 +137,4 @@ SURVIVING_SPOUSE: 2024-01-01: 191_950 2025-01-01: 197_300 2026-01-01: 201_750 + 2027-01-01: 208_300 diff --git a/policyengine_us/parameters/gov/irs/deductions/standard/aged_or_blind/amount.yaml b/policyengine_us/parameters/gov/irs/deductions/standard/aged_or_blind/amount.yaml index c73dc7f2759..78b644af4fb 100644 --- a/policyengine_us/parameters/gov/irs/deductions/standard/aged_or_blind/amount.yaml +++ b/policyengine_us/parameters/gov/irs/deductions/standard/aged_or_blind/amount.yaml @@ -11,6 +11,7 @@ SINGLE: 2024-01-01: 1_950 2025-01-01: 2_000 2026-01-01: 2_050 + 2027-01-01: 2_100 JOINT: 2015-01-01: 1_250 2016-01-01: 1_250 @@ -23,6 +24,7 @@ JOINT: 2024-01-01: 1_550 2025-01-01: 1_600 2026-01-01: 1_650 + 2027-01-01: 1_700 SEPARATE: 2015-01-01: 1_250 2016-01-01: 1_250 @@ -35,6 +37,7 @@ SEPARATE: 2024-01-01: 1_550 2025-01-01: 1_600 2026-01-01: 1_650 + 2027-01-01: 1_700 HEAD_OF_HOUSEHOLD: 2015-01-01: 1_550 2016-01-01: 1_550 @@ -47,6 +50,7 @@ HEAD_OF_HOUSEHOLD: 2024-01-01: 1_950 2025-01-01: 2_000 2026-01-01: 2_050 + 2027-01-01: 2_100 SURVIVING_SPOUSE: 2015-01-01: 1_250 2016-01-01: 1_250 @@ -59,6 +63,7 @@ SURVIVING_SPOUSE: 2024-01-01: 1_550 2025-01-01: 1_600 2026-01-01: 1_650 + 2027-01-01: 1_700 metadata: unit: currency-USD breakdown: @@ -73,6 +78,8 @@ metadata: href: https://www.irs.gov/pub/irs-drop/rp-15-53.pdf#page=14 - title: 2015 IRS data release (Rev. Proc. 2014-61) href: https://www.irs.gov/pub/irs-drop/rp-14-61.pdf#page=13 + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=13 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=18 - title: 2025 IRS data release diff --git a/policyengine_us/parameters/gov/irs/deductions/standard/amount.yaml b/policyengine_us/parameters/gov/irs/deductions/standard/amount.yaml index 75562208a5a..c711aea843e 100644 --- a/policyengine_us/parameters/gov/irs/deductions/standard/amount.yaml +++ b/policyengine_us/parameters/gov/irs/deductions/standard/amount.yaml @@ -13,6 +13,7 @@ SINGLE: 2024-01-01: 14_600 2025-01-01: 15_750 2026-01-01: 16_100 + 2027-01-01: 16_600 JOINT: 2015-01-01: 12_600 2016-01-01: 12_600 @@ -26,6 +27,7 @@ JOINT: 2024-01-01: 29_200 2025-01-01: 31_500 2026-01-01: 32_200 + 2027-01-01: 33_200 SEPARATE: 2015-01-01: 6_300 2016-01-01: 6_300 @@ -39,6 +41,7 @@ SEPARATE: 2024-01-01: 14_600 2025-01-01: 15_750 2026-01-01: 16_100 + 2027-01-01: 16_600 HEAD_OF_HOUSEHOLD: 2015-01-01: 9_250 2016-01-01: 9_300 @@ -52,6 +55,7 @@ HEAD_OF_HOUSEHOLD: 2024-01-01: 21_900 2025-01-01: 23_625 2026-01-01: 24_150 + 2027-01-01: 24_925 SURVIVING_SPOUSE: 2015-01-01: 12_600 2016-01-01: 12_600 @@ -65,6 +69,7 @@ SURVIVING_SPOUSE: 2024-01-01: 29_200 2025-01-01: 31_500 2026-01-01: 32_200 + 2027-01-01: 33_200 metadata: unit: currency-USD label: Standard deduction @@ -75,6 +80,8 @@ metadata: reference: - title: 26 U.S. Code § 63(c) - Standard deduction href: https://www.law.cornell.edu/uscode/text/26/63#c + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=13 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=18 - title: 2025 IRS data release diff --git a/policyengine_us/parameters/gov/irs/deductions/standard/dependent/additional_earned_income.yaml b/policyengine_us/parameters/gov/irs/deductions/standard/dependent/additional_earned_income.yaml index 152f2000ae9..cfa5adf3ed8 100644 --- a/policyengine_us/parameters/gov/irs/deductions/standard/dependent/additional_earned_income.yaml +++ b/policyengine_us/parameters/gov/irs/deductions/standard/dependent/additional_earned_income.yaml @@ -5,6 +5,7 @@ values: 2024-01-01: 450 2025-01-01: 450 2026-01-01: 450 + 2027-01-01: 500 metadata: unit: currency-USD period: year @@ -28,6 +29,8 @@ metadata: href: https://www.law.cornell.edu/uscode/text/26/63#c_4 - title: 26 U.S. Code § 1(f)(3)-(7) href: https://www.law.cornell.edu/uscode/text/26/1#f_3 + - title: Rev. Proc. 2026-35, sec. 3.15(2) (tax year 2027) + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=13 - title: Rev. Proc. 2025-32, sec. 4.14(2) (tax year 2026) href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=18 - title: Rev. Proc. 2024-40, sec. 2.15(2) (tax year 2025) diff --git a/policyengine_us/parameters/gov/irs/deductions/standard/dependent/amount.yaml b/policyengine_us/parameters/gov/irs/deductions/standard/dependent/amount.yaml index 8e71e18153f..0fc8773576b 100644 --- a/policyengine_us/parameters/gov/irs/deductions/standard/dependent/amount.yaml +++ b/policyengine_us/parameters/gov/irs/deductions/standard/dependent/amount.yaml @@ -7,8 +7,8 @@ values: 2024-01-01: 1_300 2025-01-01: 1_350 2026-01-01: 1_350 - # CBO forecast. 2027-01-01: 1_400 + # CBO forecast. 2028-01-01: 1_450 2029-01-01: 1_450 2030-01-01: 1_500 @@ -38,6 +38,8 @@ metadata: href: https://www.law.cornell.edu/uscode/text/26/63#c_4 - title: 26 U.S. Code § 1(f)(3)-(7) href: https://www.law.cornell.edu/uscode/text/26/1#f_3 + - title: Rev. Proc. 2026-35, sec. 3.15(2) (tax year 2027) + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=13 - title: Rev. Proc. 2025-32, sec. 4.14(2) (tax year 2026) href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=18 - title: Rev. Proc. 2024-40, sec. 2.15(2) (tax year 2025) diff --git a/policyengine_us/parameters/gov/irs/income/amt/brackets.yaml b/policyengine_us/parameters/gov/irs/income/amt/brackets.yaml index fe8b02fd51d..5114837e308 100644 --- a/policyengine_us/parameters/gov/irs/income/amt/brackets.yaml +++ b/policyengine_us/parameters/gov/irs/income/amt/brackets.yaml @@ -7,6 +7,8 @@ metadata: reference: - title: 26 U.S. Code § 55 - Alternative minimum tax imposed (b)(1)(A) href: https://www.law.cornell.edu/uscode/text/26/55#b_1_A + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=11 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=16 - title: 2025 IRS data release @@ -49,8 +51,8 @@ brackets: 2024-01-01: 232_600 2025-01-01: 239_100 2026-01-01: 244_500 + 2027-01-01: 252_500 # CBO forecast. - 2027-01-01: 249_200 2028-01-01: 254_200 2029-01-01: 259_300 2030-01-01: 264_400 diff --git a/policyengine_us/parameters/gov/irs/income/amt/exemption/amount.yaml b/policyengine_us/parameters/gov/irs/income/amt/exemption/amount.yaml index 1e93c4e4ab9..f2fde9d97b4 100644 --- a/policyengine_us/parameters/gov/irs/income/amt/exemption/amount.yaml +++ b/policyengine_us/parameters/gov/irs/income/amt/exemption/amount.yaml @@ -14,6 +14,8 @@ metadata: reference: - title: 26 U.S. Code § 55(d) - Alternative minimum tax exemption href: https://www.law.cornell.edu/uscode/text/26/55#d + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=11 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=16 - title: 2025 IRS data release @@ -53,6 +55,7 @@ HEAD_OF_HOUSEHOLD: 2024-01-01: 85_700 2025-01-01: 88_100 2026-01-01: 90_100 + 2027-01-01: 93_000 JOINT: values: 2013-01-01: 80_800 @@ -69,6 +72,7 @@ JOINT: 2024-01-01: 133_300 2025-01-01: 137_000 2026-01-01: 140_200 + 2027-01-01: 144_700 SEPARATE: values: 2013-01-01: 40_400 @@ -85,6 +89,7 @@ SEPARATE: 2024-01-01: 66_650 2025-01-01: 68_500 2026-01-01: 70_100 + 2027-01-01: 72_350 SINGLE: values: 2013-01-01: 51_900 @@ -101,6 +106,7 @@ SINGLE: 2024-01-01: 85_700 2025-01-01: 88_100 2026-01-01: 90_100 + 2027-01-01: 93_000 SURVIVING_SPOUSE: values: 2013-01-01: 80_800 @@ -117,3 +123,4 @@ SURVIVING_SPOUSE: 2024-01-01: 133_300 2025-01-01: 137_000 2026-01-01: 140_200 + 2027-01-01: 144_700 diff --git a/policyengine_us/parameters/gov/irs/income/amt/exemption/child/amount.yaml b/policyengine_us/parameters/gov/irs/income/amt/exemption/child/amount.yaml index a2763e931e9..198056f09d6 100644 --- a/policyengine_us/parameters/gov/irs/income/amt/exemption/child/amount.yaml +++ b/policyengine_us/parameters/gov/irs/income/amt/exemption/child/amount.yaml @@ -3,6 +3,8 @@ metadata: unit: currency-USD period: year reference: + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=12 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=17 - title: 2025 IRS data release @@ -41,3 +43,4 @@ values: 2024-01-01: 9_250 2025-01-01: 9_550 2026-01-01: 9_750 + 2027-01-01: 10_050 diff --git a/policyengine_us/parameters/gov/irs/income/amt/exemption/phase_out/start.yaml b/policyengine_us/parameters/gov/irs/income/amt/exemption/phase_out/start.yaml index a03980cbf65..4ca3abd4667 100644 --- a/policyengine_us/parameters/gov/irs/income/amt/exemption/phase_out/start.yaml +++ b/policyengine_us/parameters/gov/irs/income/amt/exemption/phase_out/start.yaml @@ -14,6 +14,8 @@ metadata: reference: - title: 26 U.S. Code § 55(d) - Alternative minimum tax exemption phase-out href: https://www.law.cornell.edu/uscode/text/26/55#d + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=12 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=16 - title: 2025 IRS data release @@ -50,6 +52,7 @@ HEAD_OF_HOUSEHOLD: 2024-01-01: 609_350 2025-01-01: 626_350 2026-01-01: 500_000 + 2027-01-01: 515_950 JOINT: values: 2013-01-01: 153_900 @@ -66,6 +69,7 @@ JOINT: 2024-01-01: 1_218_700 2025-01-01: 1_252_700 2026-01-01: 1_000_000 + 2027-01-01: 1_031_900 SEPARATE: values: 2013-01-01: 76_950 @@ -82,6 +86,7 @@ SEPARATE: 2024-01-01: 609_350 2025-01-01: 626_350 2026-01-01: 500_000 + 2027-01-01: 515_950 SINGLE: values: 2013-01-01: 115_400 @@ -98,6 +103,7 @@ SINGLE: 2024-01-01: 609_350 2025-01-01: 626_350 2026-01-01: 500_000 + 2027-01-01: 515_950 SURVIVING_SPOUSE: values: 2013-01-01: 153_900 @@ -114,3 +120,4 @@ SURVIVING_SPOUSE: 2024-01-01: 1_218_700 2025-01-01: 1_252_700 2026-01-01: 1_000_000 + 2027-01-01: 1_031_900 diff --git a/policyengine_us/parameters/gov/irs/income/amt/exemption/separate_limit.yaml b/policyengine_us/parameters/gov/irs/income/amt/exemption/separate_limit.yaml index 861bcb838a5..ba4eae42cb4 100644 --- a/policyengine_us/parameters/gov/irs/income/amt/exemption/separate_limit.yaml +++ b/policyengine_us/parameters/gov/irs/income/amt/exemption/separate_limit.yaml @@ -6,6 +6,8 @@ metadata: # OBBB alters separate limit via changes to the exemption amount and phase out start. - title: H.R.1 - One Big Beautiful Bill Act href: https://www.congress.gov/bill/119th-congress/house-bill/1/text + - title: 2027 IRS data release + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=12 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=17 - title: 2025 IRS data release @@ -37,8 +39,8 @@ values: 2024-01-01: 875_950 2025-01-01: 900_350 2026-01-01: 640_200 + 2027-01-01: 660_650 # CBO forecast. - 2027-01-01: 662_750 2028-01-01: 676_350 2029-01-01: 689_950 2030-01-01: 703_750 diff --git a/policyengine_us/parameters/gov/irs/income/bracket.yaml b/policyengine_us/parameters/gov/irs/income/bracket.yaml index cdf5a97aa8e..dccc9a69734 100644 --- a/policyengine_us/parameters/gov/irs/income/bracket.yaml +++ b/policyengine_us/parameters/gov/irs/income/bracket.yaml @@ -54,6 +54,8 @@ thresholds: reference: - title: 26 U.S. Code § 1(j) - Tax rate tables href: https://www.law.cornell.edu/uscode/text/26/1#j + - title: "2027 IRS data release #page 4-6" + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=4 - title: 2026 IRS data release href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=10 - title: 2025 IRS data release @@ -97,6 +99,7 @@ thresholds: 2024-01-01: 11_600 2025-01-01: 11_925 2026-01-01: 12_400 + 2027-01-01: 12_800 metadata: uprating: parameter: gov.irs.uprating @@ -117,6 +120,7 @@ thresholds: 2024-01-01: 23_200 2025-01-01: 23_850 2026-01-01: 24_800 + 2027-01-01: 25_600 metadata: uprating: parameter: gov.irs.uprating @@ -137,6 +141,7 @@ thresholds: 2024-01-01: 11_600 2025-01-01: 11_925 2026-01-01: 12_400 + 2027-01-01: 12_800 metadata: uprating: parameter: gov.irs.uprating @@ -157,6 +162,7 @@ thresholds: 2024-01-01: 16_550 2025-01-01: 17_000 2026-01-01: 17_700 + 2027-01-01: 18_250 metadata: uprating: parameter: gov.irs.uprating @@ -177,6 +183,7 @@ thresholds: 2024-01-01: 23_200 2025-01-01: 23_850 2026-01-01: 24_800 + 2027-01-01: 25_600 metadata: uprating: parameter: gov.irs.uprating @@ -198,6 +205,7 @@ thresholds: 2024-01-01: 47_150 2025-01-01: 48_475 2026-01-01: 50_400 + 2027-01-01: 52_025 metadata: uprating: parameter: gov.irs.uprating @@ -218,6 +226,7 @@ thresholds: 2024-01-01: 94_300 2025-01-01: 96_950 2026-01-01: 100_800 + 2027-01-01: 104_050 metadata: uprating: parameter: gov.irs.uprating @@ -238,6 +247,7 @@ thresholds: 2024-01-01: 47_150 2025-01-01: 48_475 2026-01-01: 50_400 + 2027-01-01: 52_025 metadata: uprating: parameter: gov.irs.uprating @@ -258,6 +268,7 @@ thresholds: 2024-01-01: 63_100 2025-01-01: 64_850 2026-01-01: 67_450 + 2027-01-01: 69_650 metadata: uprating: parameter: gov.irs.uprating @@ -278,6 +289,7 @@ thresholds: 2024-01-01: 94_300 2025-01-01: 96_950 2026-01-01: 100_800 + 2027-01-01: 104_050 metadata: uprating: parameter: gov.irs.uprating @@ -299,6 +311,7 @@ thresholds: 2024-01-01: 100_525 2025-01-01: 103_350 2026-01-01: 105_700 + 2027-01-01: 109_125 metadata: uprating: parameter: gov.irs.uprating @@ -319,6 +332,7 @@ thresholds: 2024-01-01: 201_050 2025-01-01: 206_700 2026-01-01: 211_400 + 2027-01-01: 218_250 metadata: uprating: parameter: gov.irs.uprating @@ -339,6 +353,7 @@ thresholds: 2024-01-01: 100_525 2025-01-01: 103_350 2026-01-01: 105_700 + 2027-01-01: 109_125 metadata: uprating: parameter: gov.irs.uprating @@ -359,6 +374,7 @@ thresholds: 2024-01-01: 100_500 2025-01-01: 103_350 2026-01-01: 105_700 + 2027-01-01: 109_100 metadata: uprating: parameter: gov.irs.uprating @@ -379,6 +395,7 @@ thresholds: 2024-01-01: 201_050 2025-01-01: 206_700 2026-01-01: 211_400 + 2027-01-01: 218_250 metadata: uprating: parameter: gov.irs.uprating @@ -400,6 +417,7 @@ thresholds: 2024-01-01: 191_950 2025-01-01: 197_300 2026-01-01: 201_775 + 2027-01-01: 208_325 metadata: uprating: parameter: gov.irs.uprating @@ -420,6 +438,7 @@ thresholds: 2024-01-01: 383_900 2025-01-01: 394_600 2026-01-01: 403_550 + 2027-01-01: 416_650 metadata: uprating: parameter: gov.irs.uprating @@ -440,16 +459,7 @@ thresholds: 2024-01-01: 191_950 2025-01-01: 197_300 2026-01-01: 201_775 - # Internal forecast, will update when CBO forecast is released. - 2027-01-01: 203_700 - 2028-01-01: 207_950 - 2029-01-01: 212_100 - 2030-01-01: 216_350 - 2031-01-01: 220_600 - 2032-01-01: 224_950 - 2033-01-01: 229_400 - 2034-01-01: 233_950 - 2035-01-01: 238_550 + 2027-01-01: 208_325 metadata: uprating: parameter: gov.irs.uprating @@ -470,6 +480,7 @@ thresholds: 2024-01-01: 191_950 2025-01-01: 197_300 2026-01-01: 201_750 + 2027-01-01: 208_300 metadata: uprating: parameter: gov.irs.uprating @@ -490,6 +501,7 @@ thresholds: 2024-01-01: 383_900 2025-01-01: 394_600 2026-01-01: 403_550 + 2027-01-01: 416_650 metadata: uprating: parameter: gov.irs.uprating @@ -511,6 +523,7 @@ thresholds: 2024-01-01: 243_725 2025-01-01: 250_525 2026-01-01: 256_225 + 2027-01-01: 264_550 metadata: uprating: parameter: gov.irs.uprating @@ -531,6 +544,7 @@ thresholds: 2024-01-01: 487_450 2025-01-01: 501_050 2026-01-01: 512_450 + 2027-01-01: 529_100 metadata: uprating: parameter: gov.irs.uprating @@ -551,16 +565,7 @@ thresholds: 2024-01-01: 243_725 2025-01-01: 250_525 2026-01-01: 256_225 - # Internal forecast, will update when CBO forecast is released. - 2027-01-01: 262_800 - 2028-01-01: 268_250 - 2029-01-01: 273_600 - 2030-01-01: 279_050 - 2031-01-01: 284_550 - 2032-01-01: 290_150 - 2033-01-01: 295_900 - 2034-01-01: 301_750 - 2035-01-01: 307_750 + 2027-01-01: 264_550 metadata: uprating: parameter: gov.irs.uprating @@ -581,16 +586,7 @@ thresholds: 2024-01-01: 243_700 2025-01-01: 250_500 2026-01-01: 256_200 - # Internal forecast, will update when CBO forecast is released. - 2027-01-01: 262_800 - 2028-01-01: 268_250 - 2029-01-01: 273_600 - 2030-01-01: 279_050 - 2031-01-01: 284_550 - 2032-01-01: 290_150 - 2033-01-01: 295_900 - 2034-01-01: 301_750 - 2035-01-01: 307_750 + 2027-01-01: 264_550 metadata: uprating: parameter: gov.irs.uprating @@ -611,6 +607,7 @@ thresholds: 2024-01-01: 487_450 2025-01-01: 501_050 2026-01-01: 512_450 + 2027-01-01: 529_100 metadata: uprating: parameter: gov.irs.uprating @@ -632,6 +629,7 @@ thresholds: 2024-01-01: 609_350 2025-01-01: 626_350 2026-01-01: 640_600 + 2027-01-01: 661_375 metadata: uprating: parameter: gov.irs.uprating @@ -652,6 +650,7 @@ thresholds: 2024-01-01: 731_200 2025-01-01: 751_600 2026-01-01: 768_700 + 2027-01-01: 793_650 metadata: uprating: parameter: gov.irs.uprating @@ -672,6 +671,7 @@ thresholds: 2024-01-01: 365_600 2025-01-01: 375_800 2026-01-01: 384_350 + 2027-01-01: 396_825 metadata: uprating: parameter: gov.irs.uprating @@ -692,6 +692,7 @@ thresholds: 2024-01-01: 609_350 2025-01-01: 626_350 2026-01-01: 640_600 + 2027-01-01: 661_350 metadata: uprating: parameter: gov.irs.uprating @@ -712,6 +713,7 @@ thresholds: 2024-01-01: 731_200 2025-01-01: 751_600 2026-01-01: 768_700 + 2027-01-01: 793_650 metadata: uprating: parameter: gov.irs.uprating diff --git a/policyengine_us/parameters/gov/irs/income/exemption/amount.yaml b/policyengine_us/parameters/gov/irs/income/exemption/amount.yaml index 6e889331291..a26cf4069ee 100644 --- a/policyengine_us/parameters/gov/irs/income/exemption/amount.yaml +++ b/policyengine_us/parameters/gov/irs/income/exemption/amount.yaml @@ -99,3 +99,9 @@ values: reference: - title: Rev. Proc. 2025-32 href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf + 2027-01-01: + value: 5_500 + metadata: + reference: + - title: Rev. Proc. 2026-35 + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=16 diff --git a/policyengine_us/parameters/gov/states/az/tax/income/deductions/standard/amount.yaml b/policyengine_us/parameters/gov/states/az/tax/income/deductions/standard/amount.yaml index 5b764a8fc7a..450bc8f7c69 100644 --- a/policyengine_us/parameters/gov/states/az/tax/income/deductions/standard/amount.yaml +++ b/policyengine_us/parameters/gov/states/az/tax/income/deductions/standard/amount.yaml @@ -20,12 +20,14 @@ metadata: href: https://www.azleg.gov/ars/43/01041.htm - title: Laws 2026, ch. 140 (HB 4168), secs. 16 and 35(A) href: https://www.azleg.gov/legtext/57leg/2R/laws/0140.htm - # 2026: 43-1041(H) indexes the subsection A amounts "in the same manner in - # which the federal basic standard deduction is adjusted for inflation - # pursuant to section 63". The Arizona and federal 2025 bases are equal, so - # the 2026 amounts equal the federal ones. + # 2026 and 2027: 43-1041(H) indexes the subsection A amounts "in the same + # manner in which the federal basic standard deduction is adjusted for + # inflation pursuant to section 63". The Arizona and federal 2025 bases are + # equal, so the 2026 and 2027 amounts equal the federal ones. - title: Rev. Proc. 2025-32, sec. 4.14(1) (2026 federal standard deduction) href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=18 + - title: Rev. Proc. 2026-35, sec. 3.15(1) (2027 federal standard deduction) + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=13 # Each filing-status amount below carries its own uprating, because # policyengine-core uprates only parameters whose own metadata names one. @@ -37,6 +39,7 @@ JOINT: 2024-01-01: 29_200 2025-01-01: 31_500 2026-01-01: 32_200 + 2027-01-01: 33_200 metadata: unit: currency-USD period: year @@ -57,6 +60,7 @@ HEAD_OF_HOUSEHOLD: 2024-01-01: 21_900 2025-01-01: 23_625 2026-01-01: 24_150 + 2027-01-01: 24_925 metadata: unit: currency-USD period: year @@ -73,6 +77,7 @@ SINGLE: 2024-01-01: 14_600 2025-01-01: 15_750 2026-01-01: 16_100 + 2027-01-01: 16_600 metadata: unit: currency-USD period: year @@ -89,6 +94,7 @@ SEPARATE: 2024-01-01: 14_600 2025-01-01: 15_750 2026-01-01: 16_100 + 2027-01-01: 16_600 metadata: unit: currency-USD period: year diff --git a/policyengine_us/parameters/gov/states/me/tax/income/deductions/standard/aged_or_blind.yaml b/policyengine_us/parameters/gov/states/me/tax/income/deductions/standard/aged_or_blind.yaml index 7ba3defe3b5..8f9abc70a46 100644 --- a/policyengine_us/parameters/gov/states/me/tax/income/deductions/standard/aged_or_blind.yaml +++ b/policyengine_us/parameters/gov/states/me/tax/income/deductions/standard/aged_or_blind.yaml @@ -20,6 +20,8 @@ metadata: href: https://legislature.maine.gov/statutes/36/title36sec5124-C.html - title: IRS Rev. Proc. 2025-32, Section 4.14(3) (2026 federal additional standard deduction for the aged or the blind) href: https://www.irs.gov/pub/irs-drop/rp-25-32.pdf#page=18 + - title: IRS Rev. Proc. 2026-35, Section 3.15(3) (2027 federal additional standard deduction for the aged or the blind) + href: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=13 SINGLE: 2018-01-01: 1_600 2019-01-01: 1_650 @@ -29,6 +31,7 @@ SINGLE: 2024-01-01: 1_950 2025-01-01: 2_000 2026-01-01: 2_050 + 2027-01-01: 2_100 JOINT: 2018-01-01: 1_300 2019-01-01: 1_300 @@ -38,6 +41,7 @@ JOINT: 2024-01-01: 1_550 2025-01-01: 1_600 2026-01-01: 1_650 + 2027-01-01: 1_700 SEPARATE: 2018-01-01: 1_300 2019-01-01: 1_300 @@ -47,6 +51,7 @@ SEPARATE: 2024-01-01: 1_550 2025-01-01: 1_600 2026-01-01: 1_650 + 2027-01-01: 1_700 HEAD_OF_HOUSEHOLD: 2018-01-01: 1_600 2019-01-01: 1_650 @@ -56,6 +61,7 @@ HEAD_OF_HOUSEHOLD: 2024-01-01: 1_950 2025-01-01: 2_000 2026-01-01: 2_050 + 2027-01-01: 2_100 SURVIVING_SPOUSE: 2018-01-01: 1_300 2019-01-01: 1_300 @@ -65,3 +71,4 @@ SURVIVING_SPOUSE: 2024-01-01: 1_550 2025-01-01: 1_600 2026-01-01: 1_650 + 2027-01-01: 1_700 diff --git a/policyengine_us/tests/policy/baseline/gov/irs/credits/earned_income/eitc_maximum.yaml b/policyengine_us/tests/policy/baseline/gov/irs/credits/earned_income/eitc_maximum.yaml index 208721f3275..0adfa41bd4e 100644 --- a/policyengine_us/tests/policy/baseline/gov/irs/credits/earned_income/eitc_maximum.yaml +++ b/policyengine_us/tests/policy/baseline/gov/irs/credits/earned_income/eitc_maximum.yaml @@ -22,3 +22,33 @@ members: [child_1, child_2, parent] output: eitc_maximum: 6_164 + +- name: 2027 childless EITC maximum is $685 + # Rev. Proc. 2026-35 sec. 3.06(1). + period: 2027 + absolute_error_margin: 0 + input: + employment_income: 10_000 + output: + eitc_maximum: 685 + +- name: 2027 EITC maximum with three children is $8,496 + # Rev. Proc. 2026-35 sec. 3.06(1). + period: 2027 + absolute_error_margin: 0 + input: + people: + child_1: + age: 7 + child_2: + age: 7 + child_3: + age: 7 + parent: + employment_income: 20_000 + age: 25 + tax_units: + tax_unit: + members: [child_1, child_2, child_3, parent] + output: + eitc_maximum: 8_496 diff --git a/policyengine_us/tests/policy/baseline/gov/irs/deductions/standard/additional_standard_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/irs/deductions/standard/additional_standard_deduction.yaml index a5dd34ab9e8..ef994d741eb 100644 --- a/policyengine_us/tests/policy/baseline/gov/irs/deductions/standard/additional_standard_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/irs/deductions/standard/additional_standard_deduction.yaml @@ -71,3 +71,21 @@ aged_blind_count: 1 output: additional_standard_deduction: 1_600 + +- name: 2027 aged single filer adds $2,100 + # Rev. Proc. 2026-35 sec. 3.15(3): $2,100 for an unmarried filer. + period: 2027 + input: + filing_status: SINGLE + aged_blind_count: 1 + output: + additional_standard_deduction: 2_100 + +- name: 2027 joint filers who are both aged add $1,700 each + # Rev. Proc. 2026-35 sec. 3.15(3): $1,700 per box; 2 x $1,700 = $3,400. + period: 2027 + input: + filing_status: JOINT + aged_blind_count: 2 + output: + additional_standard_deduction: 3_400 diff --git a/policyengine_us/tests/policy/baseline/gov/irs/deductions/standard/basic_standard_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/irs/deductions/standard/basic_standard_deduction.yaml index 5e63d8f9df0..5bc9f4a9d6f 100644 --- a/policyengine_us/tests/policy/baseline/gov/irs/deductions/standard/basic_standard_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/irs/deductions/standard/basic_standard_deduction.yaml @@ -33,12 +33,13 @@ output: basic_standard_deduction: 12_400 -- name: 2027 single filer standard deduction uprates from observed chained CPI through June 2026 +- name: 2027 single filer standard deduction is $16,600 + # Rev. Proc. 2026-35 sec. 3.15(1). period: 2027 input: filing_status: SINGLE output: - basic_standard_deduction: 16_550 + basic_standard_deduction: 16_600 - name: 2023 dependent filer with $3,000 of wages gets $400 plus earned income # Rev. Proc. 2022-38 sec. 3.15(2): greater of $1,250 or $400 plus earned @@ -105,18 +106,9 @@ basic_standard_deduction: 3_450 - name: 2027 dependent filer with $3,000 of wages gets $500 plus earned income - # 26 U.S.C. 63(c)(4)(B)(ii) increases the 63(c)(5)(B) $250 by the 1(f)(3) - # cost-of-living adjustment with calendar year 1997 as the base year, and - # 1(f)(7)(A) rounds the increase down to the next lowest multiple of $50. - # C-CPI-U for the 12 months ending August 2026 (c_cpi_u.yaml; unpublished - # October 2025 carries September's 180.196, and July-August 2026 carry - # June's 184.992): 2,189.091 / 12 = 182.424. - # 1(f)(3)(A)(ii) and (B): CPI-U Sep 1996-Aug 1997 average 159.492 x - # C-CPI-U Sep 2015-Aug 2016 average 135.993 / CPI-U Sep 2015-Aug 2016 - # average 238.649 = 90.886. - # Increase = $250 x (182.424 / 90.886 - 1) = $251.80, rounded down to - # $250, so $500. Floor: CBO's $1,400. - # max($1,400, $500 + $3,000) = $3,500, below the $16,550 cap. + # Rev. Proc. 2026-35 sec. 3.15(2): greater of $1,400 or $500 plus earned + # income; max($1,400, $500 + $3,000) = $3,500, below the $16,600 basic + # standard deduction in sec. 3.15(1). period: 2027 input: people: @@ -644,3 +636,19 @@ filing_status: JOINT output: basic_standard_deduction: 12_600 + +- name: 2027 head of household standard deduction is $24,925 + # Rev. Proc. 2026-35 sec. 3.15(1). + period: 2027 + input: + filing_status: HEAD_OF_HOUSEHOLD + output: + basic_standard_deduction: 24_925 + +- name: 2027 joint standard deduction is $33,200 + # Rev. Proc. 2026-35 sec. 3.15(1). + period: 2027 + input: + filing_status: JOINT + output: + basic_standard_deduction: 33_200 diff --git a/policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/alternative_minimum_tax/exemption/amt_exemption.yaml b/policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/alternative_minimum_tax/exemption/amt_exemption.yaml index 31b9f9478ac..4a2bbb8c002 100644 --- a/policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/alternative_minimum_tax/exemption/amt_exemption.yaml +++ b/policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/alternative_minimum_tax/exemption/amt_exemption.yaml @@ -341,3 +341,26 @@ amt_kiddie_tax_applies: true amt_exemption: 17_500 amt_income_less_exemptions: 42_500 + +- name: 2027 single filer below the phase-out keeps the full exemption + period: 2027 + input: + amt_income: 200_000 + amt_kiddie_tax_applies: false + employment_income: 400_000 + filing_status: SINGLE + output: + # Rev. Proc. 2026-35 sec. 3.11: $93,000, phase-out from $515,950. + amt_exemption: 93_000 + +- name: 2027 joint filers $100,000 into the phase-out + period: 2027 + input: + amt_income: 1_131_900 + amt_kiddie_tax_applies: false + employment_income: 1_200_000 + filing_status: JOINT + output: + # Rev. Proc. 2026-35 sec. 3.11: $144,700, phase-out from $1,031,900 at + # 50%: 144,700 - 0.5 x (1,131,900 - 1,031,900) = 94,700. + amt_exemption: 94_700 diff --git a/policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/before_credits/income_tax_main_rates.yaml b/policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/before_credits/income_tax_main_rates.yaml index 3b225ad5a12..c38975005da 100644 --- a/policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/before_credits/income_tax_main_rates.yaml +++ b/policyengine_us/tests/policy/baseline/gov/irs/tax/federal_income/before_credits/income_tax_main_rates.yaml @@ -436,3 +436,51 @@ # 39.6% x 35,150 = 13,919.4. income_tax_main_rates: 143_915.90 + +- name: 2027 single filer with 60,000 of taxable income (Rev. Proc. 2026-35) + absolute_error_margin: 0.01 + period: 2027 + input: + filing_status: SINGLE + taxable_income: 60_000 + foreign_earned_income_exclusion: 0 + capital_gains_excluded_from_taxable_income: 0 + output: + # Table 3: 5,987 + 22% x (60,000 - 52,025) = 5,987 + 1,754.50. + income_tax_main_rates: 7_741.50 + +- name: 2027 head of household with 300,000 of taxable income (Rev. Proc. 2026-35) + absolute_error_margin: 0.01 + period: 2027 + input: + filing_status: HEAD_OF_HOUSEHOLD + taxable_income: 300_000 + foreign_earned_income_exclusion: 0 + capital_gains_excluded_from_taxable_income: 0 + output: + # Table 2: 58,480 + 35% x (300,000 - 264,550) = 58,480 + 12,407.50. + income_tax_main_rates: 70_887.50 + +- name: 2027 joint filers with 900,000 of taxable income (Rev. Proc. 2026-35) + absolute_error_margin: 0.01 + period: 2027 + input: + filing_status: JOINT + taxable_income: 900_000 + foreign_earned_income_exclusion: 0 + capital_gains_excluded_from_taxable_income: 0 + output: + # Table 1: 213,290.50 + 37% x (900,000 - 793,650) = 213,290.50 + 39,349.50. + income_tax_main_rates: 252_640 + +- name: 2027 separate filer with 400,000 of taxable income (Rev. Proc. 2026-35) + absolute_error_margin: 0.01 + period: 2027 + input: + filing_status: SEPARATE + taxable_income: 400_000 + foreign_earned_income_exclusion: 0 + capital_gains_excluded_from_taxable_income: 0 + output: + # Table 4: 106,645.25 + 37% x (400,000 - 396,825) = 106,645.25 + 1,174.75. + income_tax_main_rates: 107_820 From f2ab864554824cf87965041d814b4076911df67f Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Fri, 6 Nov 2026 19:02:32 -0500 Subject: [PATCH 2/4] Fix tests that pinned 2027 forecast values; round the 41-50 LTC limit - Long-term care premium limit, ages 41-50: Rev. Proc. 2026-35 prints $945, but 213(d)(10)(B)(ii) rounds to the nearest $10, and the factor the other four 2027 amounts imply gives $942.75-$944.06, so $940. Recorded as candidate us:long-term-care-premium-limit-2027-rounding; the property test gets the 2027 row. - Arizona standard deduction test: 2027 is now the published federal amount, so the projection check starts from 2027. - Washington WFTC: the federal childless joint EITC limit for 2027 is 18,730 + 685 / 0.0765 = 27,684.25. - Social Security means-test unit test: main's 2027 income tax literal falls by $7 under the published amounts (2,708; net income 49,449.60). - Social Security differential: 2027 income tax may differ from the pinned pre-feature main; household net income must differ by exactly the same amount, so every other component still matches main. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01LqCGPgxDukji8Bhs57c5rH --- .../medical/long_term_care_premium_limit.yaml | 7 ++++- .../test_long_term_care_premium_properties.py | 3 ++ .../core/test_state_uprating_rounding.py | 15 ++++----- .../test_social_security_current_law.py | 24 ++++++++++++++ .../wa_working_families_tax_credit.yaml | 7 +++-- .../tests/unit/test_ss_cola_means_test.py | 9 ++++-- source_conflicts/candidates.yaml | 31 +++++++++++++++++++ 7 files changed, 82 insertions(+), 14 deletions(-) diff --git a/policyengine_us/parameters/gov/irs/deductions/itemized/medical/long_term_care_premium_limit.yaml b/policyengine_us/parameters/gov/irs/deductions/itemized/medical/long_term_care_premium_limit.yaml index ad2e19ce6fc..902e1f08d67 100644 --- a/policyengine_us/parameters/gov/irs/deductions/itemized/medical/long_term_care_premium_limit.yaml +++ b/policyengine_us/parameters/gov/irs/deductions/itemized/medical/long_term_care_premium_limit.yaml @@ -48,7 +48,12 @@ brackets: 2024-01-01: 880 2025-01-01: 900 2026-01-01: 930 - 2027-01-01: 945 + # Rev. Proc. 2026-35 prints $945. 26 U.S.C. 213(d)(10)(B)(ii) rounds + # each amount to the nearest multiple of $10. The other four 2027 + # amounts each imply a factor of 2.514 to 2.5175 on the 213(d)(10)(A) + # bases, which puts this band's $375 at $942.75 to $944.06, so $940. + # Candidate us:long-term-care-premium-limit-2027-rounding. + 2027-01-01: 940 metadata: uprating: parameter: gov.bls.cpi.cpi_u_medical_care diff --git a/policyengine_us/tests/core/test_long_term_care_premium_properties.py b/policyengine_us/tests/core/test_long_term_care_premium_properties.py index 59577442142..ca4ae3fffa3 100644 --- a/policyengine_us/tests/core/test_long_term_care_premium_properties.py +++ b/policyengine_us/tests/core/test_long_term_care_premium_properties.py @@ -74,6 +74,9 @@ 2024: (470, 880, 1_760, 4_710, 5_880), # Rev. Proc. 2023-34 2025: (480, 900, 1_800, 4_810, 6_020), # Rev. Proc. 2024-40 2026: (500, 930, 1_860, 4_960, 6_200), # Rev. Proc. 2025-32 + # Rev. Proc. 2026-35 prints $945 for 41-50; 213(d)(10)(B)(ii) rounding + # gives $940 (candidate us:long-term-care-premium-limit-2027-rounding). + 2027: (500, 940, 1_890, 5_030, 6_290), } BAND_TOPS = (40, 50, 60, 70) LAST_PUBLISHED = max(PUBLISHED_LIMITS) diff --git a/policyengine_us/tests/core/test_state_uprating_rounding.py b/policyengine_us/tests/core/test_state_uprating_rounding.py index dd11c2cbfdf..b2060f4ad75 100644 --- a/policyengine_us/tests/core/test_state_uprating_rounding.py +++ b/policyengine_us/tests/core/test_state_uprating_rounding.py @@ -277,14 +277,15 @@ def test_az_standard_deduction_is_indexed_like_the_federal_basic_amount(status): # inflation pursuant to section 63". Laws 2026, ch. 140 set those amounts # to the federal 2025 amounts, so under current law the Arizona amounts # equal the federal ones in every later year. A parent-level uprating key - # used to leave Arizona at its 2025 amounts from 2026 on. After 2026 this - # checks the model's projection, which uprates the rounded 2026 amount. + # used to leave Arizona at its 2025 amounts from 2026 on. 2027 is the + # federal amount in Rev. Proc. 2026-35 sec. 3.15(1). After 2027 this checks + # the model's projection, which uprates the rounded 2027 amount. arizona = getattr( SYSTEM.parameters.gov.states.az.tax.income.deductions.standard.amount, status ) federal = getattr(SYSTEM.parameters.gov.irs.deductions.standard.amount, status) uprating = SYSTEM.parameters.gov.irs.uprating - base_2026 = arizona("2026-01-01") + base_2027 = arizona("2027-01-01") previous = arizona("2025-01-01") for year in range(2025, 2036): period = f"{year}-01-01" @@ -292,12 +293,12 @@ def test_az_standard_deduction_is_indexed_like_the_federal_basic_amount(status): assert amount == federal(period), (status, year) assert amount >= previous, (status, year) previous = amount - if year > 2026: + if year > 2027: # 26 U.S.C. 63(c)(7)(B)(ii): round increases down to a multiple # of $50. - factor = uprating(period) / uprating("2026-01-01") - assert amount == base_2026 * factor // 50 * 50, (status, year) - assert arizona("2035-01-01") > base_2026 + factor = uprating(period) / uprating("2027-01-01") + assert amount == base_2027 * factor // 50 * 50, (status, year) + assert arizona("2035-01-01") > base_2027 def test_az_joint_standard_deduction_is_twice_the_single_amount(): diff --git a/policyengine_us/tests/microsimulation/test_social_security_current_law.py b/policyengine_us/tests/microsimulation/test_social_security_current_law.py index 6bca1a7bdd7..03d5aff6d4f 100644 --- a/policyengine_us/tests/microsimulation/test_social_security_current_law.py +++ b/policyengine_us/tests/microsimulation/test_social_security_current_law.py @@ -62,6 +62,11 @@ ) AMOUNTS = ((12_000, 0, 1_800, 600), (0, 6_000, 1_200, 300)) REVIEWED_MAIN_SHA = "8986e05cab65d56435a23df1910e2d35f2c5f5bf" +# Rev. Proc. 2026-35 replaced the 2027 federal forecasts that the reviewed +# main used (brackets, standard deduction and other indexed amounts), so 2027 +# income tax differs from main by design. Household net income must differ by +# exactly the same amount, which keeps every other component equal to main. +TAX_LAW_CHANGED_AFTER_REVIEWED_MAIN = ("income_tax@2027",) # Hand-computed per-person growth from calibration.gov.cbo.social_security # divided by calibration.gov.census.populations.total in each year. The IRS # SOI series follows this CBO growth; Core multiplies float32 benefit arrays. @@ -1094,6 +1099,25 @@ def test_legacy_public_ingress_matches_unmodified_main(differential, route): ) assert current[route].keys() == main[route].keys() for request in main[route]: + if request in TAX_LAW_CHANGED_AFTER_REVIEWED_MAIN: + continue + variable, _, period = request.partition("@") + tax = f"income_tax@{period}" + if ( + variable == "household_net_income" + and tax in TAX_LAW_CHANGED_AFTER_REVIEWED_MAIN + and tax in main[route] + ): + tax_change = np.asarray(current[route][tax]) - np.asarray(main[route][tax]) + np.testing.assert_allclose( + current[route][request], + np.asarray(main[route][request]) - tax_change, + rtol=0, + atol=0.01, + err_msg=f"Legacy public ingress differs on {route}: {request} " + "beyond the 2027 income tax change", + ) + continue np.testing.assert_array_equal( current[route][request], main[route][request], diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/tax/income/credits/wa_working_families_tax_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/tax/income/credits/wa_working_families_tax_credit.yaml index 8276a5ee687..c61e211ff15 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/wa/tax/income/credits/wa_working_families_tax_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/tax/income/credits/wa_working_families_tax_credit.yaml @@ -1424,11 +1424,12 @@ # The maximum-qualifying-income expansion is not in effect in 2027, so the # ceiling is the frozen-structure federal childless EITC AGI limit (indexed # to 2027). For a married-filing-jointly childless couple this is the - # joint-return limit $27,421.18 (the single-filer childless limit is the - # lower ~$20,011). Either way it is far below the 2028 need-standard ceiling + # joint-return limit: 18,730 + 685 / 0.0765 = $27,684.25 (Rev. Proc. 2026-35 + # sec. 3.06 prints $27,684; the single-filer childless limit is the lower + # $20,164.25). Either way it is far below the 2028 need-standard ceiling # of $72,528: this is the pre-flip side of the 2028 in_effect boundary # (paired with Case 30). - wa_working_families_tax_credit_maximum_qualifying_income: 27_421.18 + wa_working_families_tax_credit_maximum_qualifying_income: 27_684.25 # --------------------------------------------------------------------------- # S5: expansion-path amount, negative/AGI earnings guards, integration diff --git a/policyengine_us/tests/unit/test_ss_cola_means_test.py b/policyengine_us/tests/unit/test_ss_cola_means_test.py index e43f3dafbbf..c4000ef9f2b 100644 --- a/policyengine_us/tests/unit/test_ss_cola_means_test.py +++ b/policyengine_us/tests/unit/test_ss_cola_means_test.py @@ -1132,7 +1132,10 @@ def _assert_cached_outputs_equal(reference, actual): def test_means_test_off_preserves_downstream_dependency_closure( disabled_means_test_system, calculated ): - # Main 37dd5099ed7fad694419fb652eb3ba7bd14122ba supplies these literals. + # Main 37dd5099ed7fad694419fb652eb3ba7bd14122ba supplies these literals, + # except income tax and household net income: Rev. Proc. 2026-35 replaced + # the 2027 federal forecasts that main used, lowering this household's 2027 + # income tax by $7 (main: 2,715 and 49,442.6015625). # Main cannot select the calculator as its public source, so the calculated # case checks its direct calculator channel against main below and retains # public downstream equality as supplemental disabled-policy coverage. @@ -1140,10 +1143,10 @@ def test_means_test_off_preserves_downstream_dependency_closure( "social_security": 24_000, "taxable_social_security": 11_300, "adjusted_gross_income": 41_300, - "income_tax": 2_715, + "income_tax": 2_708, "net_investment_income_tax": 0, "medicare_part_b_premium": 0, - "household_net_income": 49_442.6015625, + "household_net_income": 49_449.6015625, } record = _calculator_record("worker") if calculated else _record() if not calculated: diff --git a/source_conflicts/candidates.yaml b/source_conflicts/candidates.yaml index 6025a2b3e21..b3ddb788183 100644 --- a/source_conflicts/candidates.yaml +++ b/source_conflicts/candidates.yaml @@ -12438,6 +12438,37 @@ candidates: payment covers only their own Direct and FFEL loans; (e)(2)(i) brings the spouse's loans in only for (g). A couple whose income-based amount exceeds both standard payments pays each standard payment times the balance share, so at equal balances and rates half their combined standard amount. +- id: us:long-term-care-premium-limit-2027-rounding + program: income-tax + years: + from: 2027 + to: 2027 + type: tax + question: Is the 2027 eligible long-term care premium limit for ages 41 to 50 the $945 that Rev. Proc. 2026-35 + prints, or the nearest multiple of $10 that section 213(d)(10)(B)(ii) requires? + sources: + - kind: statute + citation: 26 U.S.C. 213(d)(10)(A) and (B)(ii) + url: https://www.law.cornell.edu/uscode/text/26/213#d_10 + - kind: guidance + citation: Rev. Proc. 2026-35, section 3.29 + url: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=17 + readings: + statute: Section 213(d)(10)(B)(ii) rounds each adjusted amount to the nearest multiple of $10. The 2027 amounts for + the other bands ($500, $1,890, $5,030 and $6,290 on bases of $200, $750, $2,000 and $2,500) each imply an + adjustment factor between 2.514 and 2.5175, which puts the $375 base at $942.75 to $944.06, or $940. + other: Rev. Proc. 2026-35 section 3.29 prints $945 for attained age more than 40 but not more than 50. Every + earlier year's published amount for the band is a multiple of $10. + example: A filer aged 45 in 2027 who pays $1,200 of qualified long-term care premiums counts $940 as medical care + under the statute's rounding and $945 under the printed table. + pe_us: + follows: statute + code: + - policyengine_us/parameters/gov/irs/deductions/itemized/medical/long_term_care_premium_limit.yaml + prs: + - https://github.com/PolicyEngine/policyengine-us/pull/10683 + state: unreviewed + note: The published PDF still reads "[Release Date, 2026]" in section 1, so a dated version may change the figure. - id: us:mortgage-interest-limit-ratio-rounding program: income-tax years: From aabc21f8a551653d959d5b7c069612cbee257fc0 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Fri, 6 Nov 2026 20:18:56 -0500 Subject: [PATCH 3/4] Update two contrib reform tests for the 2027 federal amounts - Colorado progressive income tax, Case 11: 2027 Colorado taxable income is 30,000 - 16,600 = 13,400 under the published standard deduction, so tax 495.80 and 452.80 after the sales tax refund. - Montana newborn credit, Cases 1 and 2: 2027 Montana income tax moves with the published federal amounts (-324.53 and 2,139.60). Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01LqCGPgxDukji8Bhs57c5rH --- .../co_progressive_income_tax.yaml | 11 ++++++----- .../states/mt/newborn_credit/mt_newborn_credit.yaml | 10 ++++++---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/policyengine_us/tests/policy/contrib/states/co/progressive_income_tax/co_progressive_income_tax.yaml b/policyengine_us/tests/policy/contrib/states/co/progressive_income_tax/co_progressive_income_tax.yaml index 1b77094662f..799345a08d0 100644 --- a/policyengine_us/tests/policy/contrib/states/co/progressive_income_tax/co_progressive_income_tax.yaml +++ b/policyengine_us/tests/policy/contrib/states/co/progressive_income_tax/co_progressive_income_tax.yaml @@ -122,12 +122,13 @@ members: [person] state_code: CO output: - co_taxable_income: 13_450 - # 13,450 * 0.037 = 497.65 before non-refundable credits. - co_income_tax_before_non_refundable_credits: 497.65 + # 30,000 - 16,600 (2027 federal standard deduction, Rev. Proc. 2026-35). + co_taxable_income: 13_400 + # 13,400 * 0.037 = 495.80 before non-refundable credits. + co_income_tax_before_non_refundable_credits: 495.80 # Less the $43 tax year 2027 sales tax refund projected for the first - # tier (modified AGI $30,000): 497.65 - 43 = 454.65. - co_income_tax: 454.65 + # tier (modified AGI $30,000): 495.80 - 43 = 452.80. + co_income_tax: 452.80 - name: Case 12, end-to-end single filer with $600,000 of employment income. period: 2027 diff --git a/policyengine_us/tests/policy/contrib/states/mt/newborn_credit/mt_newborn_credit.yaml b/policyengine_us/tests/policy/contrib/states/mt/newborn_credit/mt_newborn_credit.yaml index 35487fce403..765fd6fa793 100644 --- a/policyengine_us/tests/policy/contrib/states/mt/newborn_credit/mt_newborn_credit.yaml +++ b/policyengine_us/tests/policy/contrib/states/mt/newborn_credit/mt_newborn_credit.yaml @@ -28,8 +28,9 @@ state_code: MT output: mt_newborn_credit: [1_000, 0] - # Refundable credit reduces tax liability (baseline ~$691, minus $1,000 credit) - mt_income_tax: -309 + # Refundable credit reduces tax liability (baseline ~$675.47 with the 2027 + # federal amounts in Rev. Proc. 2026-35, minus $1,000 credit) + mt_income_tax: -324.53 - name: Case 2, MFJ with newborn under income threshold. period: 2027 @@ -63,8 +64,9 @@ output: # AGI $100k < $120k threshold for MFJ mt_newborn_credit: [1_000, 0, 0] - # Baseline mt_income_tax ~$3,142 minus $1,000 refundable credit - mt_income_tax: 2_142 + # Baseline mt_income_tax ~$3,139.60 (2027 federal amounts in Rev. Proc. + # 2026-35) minus $1,000 refundable credit + mt_income_tax: 2_139.60 - name: Case 3, two newborns double credit. period: 2027 From 58e9fc0160cb3eb9616baa95f3afd889a50fef9e Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Mon, 9 Nov 2026 13:09:25 -0500 Subject: [PATCH 4/4] Use Rev. Proc. 2026-35's $945 long-term care limit for ages 41 to 50 in 2027 Section 213(d)(10)(B)(i) rounds each increase to the nearest $10, not the adjusted amount. The other four 2027 amounts put the increase over the $375 base at $567.75 to $569.06, which rounds to $570, so the statute gives $945, the amount section 3.29 prints. The statute and the Rev. Proc. agree, so this drops the candidate us:long-term-care-premium-limit-2027-rounding, and the property test's 2027 row uses $945. Co-Authored-By: Claude Opus 5.5 --- .../medical/long_term_care_premium_limit.yaml | 9 ++---- .../test_long_term_care_premium_properties.py | 4 +-- source_conflicts/candidates.yaml | 31 ------------------- 3 files changed, 4 insertions(+), 40 deletions(-) diff --git a/policyengine_us/parameters/gov/irs/deductions/itemized/medical/long_term_care_premium_limit.yaml b/policyengine_us/parameters/gov/irs/deductions/itemized/medical/long_term_care_premium_limit.yaml index 902e1f08d67..3c5896ffbfc 100644 --- a/policyengine_us/parameters/gov/irs/deductions/itemized/medical/long_term_care_premium_limit.yaml +++ b/policyengine_us/parameters/gov/irs/deductions/itemized/medical/long_term_care_premium_limit.yaml @@ -48,12 +48,9 @@ brackets: 2024-01-01: 880 2025-01-01: 900 2026-01-01: 930 - # Rev. Proc. 2026-35 prints $945. 26 U.S.C. 213(d)(10)(B)(ii) rounds - # each amount to the nearest multiple of $10. The other four 2027 - # amounts each imply a factor of 2.514 to 2.5175 on the 213(d)(10)(A) - # bases, which puts this band's $375 at $942.75 to $944.06, so $940. - # Candidate us:long-term-care-premium-limit-2027-rounding. - 2027-01-01: 940 + # 213(d)(10)(B)(i) rounds the increase over the $375 base to the + # nearest $10, so Rev. Proc. 2026-35 prints an amount ending in 5. + 2027-01-01: 945 metadata: uprating: parameter: gov.bls.cpi.cpi_u_medical_care diff --git a/policyengine_us/tests/core/test_long_term_care_premium_properties.py b/policyengine_us/tests/core/test_long_term_care_premium_properties.py index ca4ae3fffa3..e93f308ed5f 100644 --- a/policyengine_us/tests/core/test_long_term_care_premium_properties.py +++ b/policyengine_us/tests/core/test_long_term_care_premium_properties.py @@ -74,9 +74,7 @@ 2024: (470, 880, 1_760, 4_710, 5_880), # Rev. Proc. 2023-34 2025: (480, 900, 1_800, 4_810, 6_020), # Rev. Proc. 2024-40 2026: (500, 930, 1_860, 4_960, 6_200), # Rev. Proc. 2025-32 - # Rev. Proc. 2026-35 prints $945 for 41-50; 213(d)(10)(B)(ii) rounding - # gives $940 (candidate us:long-term-care-premium-limit-2027-rounding). - 2027: (500, 940, 1_890, 5_030, 6_290), + 2027: (500, 945, 1_890, 5_030, 6_290), # Rev. Proc. 2026-35 } BAND_TOPS = (40, 50, 60, 70) LAST_PUBLISHED = max(PUBLISHED_LIMITS) diff --git a/source_conflicts/candidates.yaml b/source_conflicts/candidates.yaml index b3ddb788183..6025a2b3e21 100644 --- a/source_conflicts/candidates.yaml +++ b/source_conflicts/candidates.yaml @@ -12438,37 +12438,6 @@ candidates: payment covers only their own Direct and FFEL loans; (e)(2)(i) brings the spouse's loans in only for (g). A couple whose income-based amount exceeds both standard payments pays each standard payment times the balance share, so at equal balances and rates half their combined standard amount. -- id: us:long-term-care-premium-limit-2027-rounding - program: income-tax - years: - from: 2027 - to: 2027 - type: tax - question: Is the 2027 eligible long-term care premium limit for ages 41 to 50 the $945 that Rev. Proc. 2026-35 - prints, or the nearest multiple of $10 that section 213(d)(10)(B)(ii) requires? - sources: - - kind: statute - citation: 26 U.S.C. 213(d)(10)(A) and (B)(ii) - url: https://www.law.cornell.edu/uscode/text/26/213#d_10 - - kind: guidance - citation: Rev. Proc. 2026-35, section 3.29 - url: https://www.irs.gov/pub/irs-drop/rp-26-35.pdf#page=17 - readings: - statute: Section 213(d)(10)(B)(ii) rounds each adjusted amount to the nearest multiple of $10. The 2027 amounts for - the other bands ($500, $1,890, $5,030 and $6,290 on bases of $200, $750, $2,000 and $2,500) each imply an - adjustment factor between 2.514 and 2.5175, which puts the $375 base at $942.75 to $944.06, or $940. - other: Rev. Proc. 2026-35 section 3.29 prints $945 for attained age more than 40 but not more than 50. Every - earlier year's published amount for the band is a multiple of $10. - example: A filer aged 45 in 2027 who pays $1,200 of qualified long-term care premiums counts $940 as medical care - under the statute's rounding and $945 under the printed table. - pe_us: - follows: statute - code: - - policyengine_us/parameters/gov/irs/deductions/itemized/medical/long_term_care_premium_limit.yaml - prs: - - https://github.com/PolicyEngine/policyengine-us/pull/10683 - state: unreviewed - note: The published PDF still reads "[Release Date, 2026]" in section 1, so a dated version may change the figure. - id: us:mortgage-interest-limit-ratio-rounding program: income-tax years: