diff --git a/changelog.d/az-standard-deduction-2026-indexing.fixed.md b/changelog.d/az-standard-deduction-2026-indexing.fixed.md new file mode 100644 index 00000000000..4dfadb90f22 --- /dev/null +++ b/changelog.d/az-standard-deduction-2026-indexing.fixed.md @@ -0,0 +1 @@ +Index the Arizona standard deduction for 2026 and later under A.R.S. 43-1041(H): set the 2026 amounts to $16,100 single and separate, $24,150 head of household and $32,200 joint, and move the inert parent-level uprating onto each filing-status amount. 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 3a31c89ec34..5b764a8fc7a 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 @@ -16,9 +16,18 @@ metadata: href: https://azdor.gov/forms/individual/form-140-arizona-resident-personal-income-tax-booklet - title: 2021 Arizona Form 140 Resident Personal Income Tax Booklet href: https://azdor.gov/sites/default/files/2023-03/FORMS_INDIVIDUAL_2021_140BOOKLET.pdf#page=43 - # Arizona standard deduction is uprated mirroring federal standard deduction - # This parent uprating remains inactive pending selective propagation in PolicyEngine/policyengine-core#537. - uprating: gov.irs.uprating + - title: A.R.S. 43-1041(A) and (H) + 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. + - 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 + # Each filing-status amount below carries its own uprating, because + # policyengine-core uprates only parameters whose own metadata names one. JOINT: values: @@ -27,9 +36,19 @@ JOINT: 2023-01-01: 27_700 2024-01-01: 29_200 2025-01-01: 31_500 + 2026-01-01: 32_200 metadata: unit: currency-USD period: year + # The federal method makes the joint amount twice the single amount + # (26 U.S.C. 63(c)(2)(A)). With a 2026 joint amount of twice the single + # amount, a $100 round-down equals twice the single amount's $50 + # round-down. + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 100 HEAD_OF_HOUSEHOLD: values: 2021-01-01: 18_800 @@ -37,9 +56,15 @@ HEAD_OF_HOUSEHOLD: 2023-01-01: 20_800 2024-01-01: 21_900 2025-01-01: 23_625 + 2026-01-01: 24_150 metadata: unit: currency-USD period: year + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 SINGLE: values: 2021-01-01: 12_550 @@ -47,9 +72,15 @@ SINGLE: 2023-01-01: 13_850 2024-01-01: 14_600 2025-01-01: 15_750 + 2026-01-01: 16_100 metadata: unit: currency-USD period: year + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 SEPARATE: values: 2021-01-01: 12_550 @@ -57,6 +88,12 @@ SEPARATE: 2023-01-01: 13_850 2024-01-01: 14_600 2025-01-01: 15_750 + 2026-01-01: 16_100 metadata: unit: currency-USD period: year + uprating: + parameter: gov.irs.uprating + rounding: + type: downwards + interval: 50 diff --git a/policyengine_us/tests/core/test_state_uprating_rounding.py b/policyengine_us/tests/core/test_state_uprating_rounding.py index 4fb2ed19fbe..dd11c2cbfdf 100644 --- a/policyengine_us/tests/core/test_state_uprating_rounding.py +++ b/policyengine_us/tests/core/test_state_uprating_rounding.py @@ -265,3 +265,46 @@ def test_mt_old_age_subtraction_uses_published_2025(): assert amount.brackets[0].amount("2025-01-01") == 0 assert amount.brackets[1].amount("2024-01-01") == 5_500 assert amount.brackets[1].amount("2025-01-01") == 5_660 + + +AZ_STANDARD_DEDUCTION_STATUSES = ("SINGLE", "SEPARATE", "HEAD_OF_HOUSEHOLD") + + +@pytest.mark.parametrize("status", AZ_STANDARD_DEDUCTION_STATUSES) +def test_az_standard_deduction_is_indexed_like_the_federal_basic_amount(status): + # A.R.S. 43-1041(H): the subsection A amounts are adjusted "in the same + # manner in which the federal basic standard deduction is adjusted for + # 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. + 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") + previous = arizona("2025-01-01") + for year in range(2025, 2036): + period = f"{year}-01-01" + amount = arizona(period) + assert amount == federal(period), (status, year) + assert amount >= previous, (status, year) + previous = amount + if year > 2026: + # 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 + + +def test_az_joint_standard_deduction_is_twice_the_single_amount(): + # 26 U.S.C. 63(c)(2)(A): the federal basic standard deduction for a joint + # return is 200% of the single amount, so the Arizona joint amount, + # indexed in the same manner, is twice the Arizona single amount. + amount = SYSTEM.parameters.gov.states.az.tax.income.deductions.standard.amount + for year in range(2025, 2036): + period = f"{year}-01-01" + assert amount.JOINT(period) == 2 * amount.SINGLE(period), year diff --git a/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/deductions/standard/az_base_standard_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/deductions/standard/az_base_standard_deduction.yaml index 7d124f6bb30..d51d7a7f209 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/deductions/standard/az_base_standard_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/deductions/standard/az_base_standard_deduction.yaml @@ -83,3 +83,45 @@ output: # Per 2025 Form 140 Instructions: HOH standard deduction is $23,625 az_base_standard_deduction: 23_625 + +# 2026 tax year tests +# A.R.S. 43-1041(A), as amended by Laws 2026, ch. 140 (HB 4168), sec. 16 and +# made retroactive to tax year 2025 by sec. 35(A), sets $15,750 / $23,625 / +# $31,500 "subject to subsection H". 43-1041(H) indexes those amounts "in the +# same manner in which the federal basic standard deduction is adjusted for +# inflation pursuant to section 63". 26 U.S.C. 63(c)(7)(B)(ii) indexes the same +# $15,750 and $23,625 bases from 2024, and Rev. Proc. 2025-32 sec. 4.14(1) gives +# the 2026 results: $16,100 single and separate, $24,150 head of household and +# $32,200 joint. PolicyBench reference audit 2026-10-05, scenario_018. + +- name: Single filer 2026 indexed under A.R.S. 43-1041(H) + period: 2026 + input: + state_code: AZ + az_filing_status: SINGLE + output: + az_base_standard_deduction: 16_100 + +- name: Joint filer 2026 indexed under A.R.S. 43-1041(H) + period: 2026 + input: + state_code: AZ + az_filing_status: JOINT + output: + az_base_standard_deduction: 32_200 + +- name: Separate filer 2026 indexed under A.R.S. 43-1041(H) + period: 2026 + input: + state_code: AZ + az_filing_status: SEPARATE + output: + az_base_standard_deduction: 16_100 + +- name: Head of household filer 2026 indexed under A.R.S. 43-1041(H) + period: 2026 + input: + state_code: AZ + az_filing_status: HEAD_OF_HOUSEHOLD + output: + az_base_standard_deduction: 24_150 diff --git a/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/integration.yaml index 4e7fa91efe2..98e0b89b7ea 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/az/tax/income/integration.yaml @@ -62,8 +62,9 @@ az_dependent_tax_credit: 125 # Charitable add-on: min($1,500, $1,000 HOH cap) = $1,000 az_increased_standard_deduction_for_charitable_contributions: 1_000 - # Standard deduction: $23,625 base + $1,000 add-on = $24,625 - az_standard_deduction: 24_625 + # Standard deduction: $24,150 base (2026 head of household amount under + # A.R.S. 43-1041(H)) + $1,000 add-on = $25,150 + az_standard_deduction: 25_150 # Dependent care: cdcc_relevant_expenses = min($5,000, $3,000 ยง21 cap for # 1 QI, $80,000 earnings) = $3,000; subtraction = max($3,000 - $1,200, 0) # = $1,800 @@ -74,12 +75,12 @@ az_subtractions: 2_800 # AZ AGI = $80,000 - $2,800 = $77,200 az_agi: 77_200 - # Taxable income = $77,200 - $24,625 = $52,575 - az_taxable_income: 52_575 - # Tax before credits = $52,575 * 2.5% = $1,314.375 - az_income_tax_before_non_refundable_credits: 1_314.375 - # AZ income tax = $1,314.375 - $125 dependent credit = $1,189.375 - az_income_tax: 1_189.375 + # Taxable income = $77,200 - $25,150 = $52,050 + az_taxable_income: 52_050 + # Tax before credits = $52,050 * 2.5% = $1,301.25 + az_income_tax_before_non_refundable_credits: 1_301.25 + # AZ income tax = $1,301.25 - $125 dependent credit = $1,176.25 + az_income_tax: 1_176.25 # Confirms the pre-2026 regime is UNCHANGED for the identical household. # In 2025: dependent credit is $100, charitable add-on uses the 0.34 rate @@ -124,3 +125,32 @@ az_income_tax_before_non_refundable_credits: 1_396.625 # AZ income tax = $1,396.625 - $100 dependent credit = $1,296.625 az_income_tax: 1_296.625 + +# PolicyBench reference audit 2026-10-05, scenario_018: a single wage earner +# in tax year 2026. AZ AGI equals federal AGI (no Arizona additions or +# subtractions apply). The standard deduction is $16,100 under A.R.S. +# 43-1041(A)(1) and (H) (Rev. Proc. 2025-32 sec. 4.14(1)), not the +# unindexed 2025 amount of $15,750. +- name: AZ 2026 single filer uses the inflation-indexed standard deduction + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 53 + employment_income: 61_592 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: AZ + output: + az_filing_status: SINGLE + az_agi: 61_592 + az_standard_deduction: 16_100 + # Taxable income = $61,592 - $16,100 = $45,492 + az_taxable_income: 45_492 + # Tax = $45,492 * 2.5% = $1,137.30 + az_income_tax_before_non_refundable_credits: 1_137.30