Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
e5da8ea
Fix AR, MT and NM income tax gaps found in TAXSIM comparison sweep
DTrim99 Sep 23, 2026
2ce9b1c
Address review: MT dependent income test and NM net capital gain defi…
DTrim99 Sep 24, 2026
57a635e
Address review: Montana-specific dependent gross income
DTrim99 Sep 29, 2026
78624a8
Merge PolicyEngine/main into taxsim-sweep-ar-mt-nm-fixes
DTrim99 Sep 29, 2026
b584e8b
Floor the joint Arkansas AGI total in the itemized deduction floors
DTrim99 Sep 29, 2026
0f4406f
Require Arkansas joint filing with a negative spouse income and use t…
DTrim99 Sep 30, 2026
f76b110
Address review: 2024 card page anchor, documented threshold choice, c…
DTrim99 Oct 2, 2026
f1ca04c
Merge PolicyEngine/main into ar-joint-negative-income-tax-table
DTrim99 Oct 5, 2026
3bf249f
Merge PolicyEngine/main into taxsim-sweep-ar-mt-nm-fixes
DTrim99 Oct 12, 2026
216b329
Keep a dependent's Montana additions and subtractions off the filer's…
DTrim99 Oct 12, 2026
1ade8ef
Merge PolicyEngine/main into ar-joint-negative-income-tax-table
DTrim99 Oct 12, 2026
d987707
Merge #9585 (taxsim-sweep-ar-mt-nm-fixes) into ar-joint-negative-inco…
DTrim99 Oct 12, 2026
6e18183
Merge PolicyEngine/main into taxsim-sweep-ar-mt-nm-fixes
DTrim99 Oct 12, 2026
6136c70
Merge #9585 (taxsim-sweep-ar-mt-nm-fixes) into ar-joint-negative-inco…
DTrim99 Oct 12, 2026
a434b88
List partnership and S-corporation income in the AR line-comment check
DTrim99 Oct 13, 2026
fc91104
Merge #9585 (taxsim-sweep-ar-mt-nm-fixes) into ar-joint-negative-inco…
DTrim99 Oct 13, 2026
6fea3d2
Build Montana dependent gross income on the federal dependent gross i…
DTrim99 Oct 13, 2026
828a0eb
Merge #9585 (taxsim-sweep-ar-mt-nm-fixes) into ar-joint-negative-inco…
DTrim99 Oct 13, 2026
1134bc9
Merge PolicyEngine/main into ar-joint-negative-income-tax-table
DTrim99 Oct 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/ar-joint-negative-income-tax-table.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Require Arkansas married couples to file jointly when either spouse has a negative total income, and compute Arkansas regular income tax from the published tax table bands below the table threshold.
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
description: Arkansas sets the start of each regular income tax table income band this amount above a multiple of the band width.
# From $75,000 the table's rows run "As Much As $75,001 But Less Than $75,101",
# so each band starts $1 above a multiple of $100. The row below them spans
# $74,900 to $75,001, so the $1 offset starts at $75,000. The 2014 and 2015
# tables end at $50,000, below this row. Negative net taxable income takes the
# zero offset; the callers floor the resulting tax at zero.
metadata:
type: single_amount
threshold_unit: currency-USD
amount_unit: currency-USD
period: year
label: Arkansas regular income tax table band offset
reference:
- title: 2016 AR1000F and AR1000NR Instructions, 2016 Regular Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/LongBookwTaxTables_2016.pdf#page=50
- title: 2017 AR1000F and AR1000NR Instructions, 2017 Regular Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/AR1000FandAR1000NRInstructions.pdf#page=50
- title: 2018 Arkansas Tax Tables, 2018 Regular Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2018_Final_TaxTable_with_Cover_Sheet.pdf#page=8
- title: 2019 AR1000F and AR1000NR Instructions, 2019 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2019_AR1000F_and_AR1000NR_Instructions.pdf#page=31
- title: 2020 AR1000F and AR1000NR Instructions, 2020 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2020_AR1000F_and_AR1000NR_Instructions.pdf#page=31
- title: 2021 AR1000F and AR1000NR Instructions, 2021 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2021_AR1000F_and_AR1000NR_Instructions.pdf#page=31
- title: 2022 AR1000F and AR1000NR Instructions, 2022 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2022_AR1000F_and_AR1000NR_Instructions.pdf#page=34
- title: 2023 AR1000F and AR1000NR Instructions, 2023 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2023_AR1000F_and_AR1000NR_Instructions.pdf#page=34
- title: 2024 AR1000F and AR1000NR Instructions, 2024 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2024_AR1000F_and_AR1000NR_Instructions.pdf#page=33
- title: 2025 AR1000F and AR1000NR Instructions, 2025 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2025_AR1000F_and_AR1000NR_Instructions.pdf#page=33
brackets:
- threshold:
2014-01-01: -.inf
amount:
2014-01-01: 0
- threshold:
2014-01-01: 75_000
amount:
2014-01-01: 1
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
description: Arkansas sets each income band of the regular income tax table to this width.
values:
2014-01-01: 100
metadata:
unit: currency-USD
period: year
label: Arkansas regular income tax table band width
reference:
- title: 2014 AR1000F and AR1000NR Instructions, 2014 Regular Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/LongBookwTaxTables_2014.pdf#page=28
- title: 2015 Arkansas Tax Tables, 2015 Regular Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/TaxTables_2015.pdf#page=4
- title: 2016 AR1000F and AR1000NR Instructions, 2016 Regular Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/LongBookwTaxTables_2016.pdf#page=46
- title: 2017 AR1000F and AR1000NR Instructions, 2017 Regular Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/AR1000FandAR1000NRInstructions.pdf#page=46
- title: 2018 Arkansas Tax Tables, 2018 Regular Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2018_Final_TaxTable_with_Cover_Sheet.pdf#page=4
- title: 2019 AR1000F and AR1000NR Instructions, 2019 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2019_AR1000F_and_AR1000NR_Instructions.pdf#page=28
- title: 2020 AR1000F and AR1000NR Instructions, 2020 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2020_AR1000F_and_AR1000NR_Instructions.pdf#page=28
- title: 2021 AR1000F and AR1000NR Instructions, 2021 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2021_AR1000F_and_AR1000NR_Instructions.pdf#page=28
- title: 2022 AR1000F and AR1000NR Instructions, 2022 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2022_AR1000F_and_AR1000NR_Instructions.pdf#page=31
- title: 2023 AR1000F and AR1000NR Instructions, 2023 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2023_AR1000F_and_AR1000NR_Instructions.pdf#page=31
- title: 2024 AR1000F and AR1000NR Instructions, 2024 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2024_AR1000F_and_AR1000NR_Instructions.pdf#page=30
- title: 2025 AR1000F and AR1000NR Instructions, 2025 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2025_AR1000F_and_AR1000NR_Instructions.pdf#page=30
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
description: Arkansas uses the regular income tax table for net taxable income below this amount.
# Each value is the "But Less Than" bound of the table's last row, where the
# table's note starts ("For $100,001 and over, your tax is ...").
# At and above it, two DFA instructions conflict, and the model follows the
# first:
# - The Indexed Tax Brackets card gives the bracket formula (rate x income
# minus the adjustment) and says a formula "must match the table exactly"
# (2021 card, file p.1; 2024 card, file p.2). The model applies this
# formula to the exact income.
# - The note under each table's last row adds the top rate to the last row's
# tax: "For $100,001 and over, your tax is $3,811 + 3.9% of the excess over
# $100,000" (2024 table, file p.34); "$3,809 + 3.9%" (2025 table, file p.34).
# The note gives less tax than the formula, by the same amount for every
# income at or above the threshold: $3.19 (2014), $3.69 (2015), $3.36 (2016),
# $3.46 (2017), $3.26 (2018), $3.36 (2019), $3.30 (2020), $2.50 (2021),
# $2.80 (2022), $2.30 (2023), $1.60 (2024) and $1.70 (2025). Neither source
# settles which applies above the table, where there are no rows for the
# card's formula to match, so keep the formula unless a DFA source does.
values:
2014-01-01: 50_000
2016-01-01: 86_001
2019-01-01: 87_001
2020-01-01: 88_001
2021-01-01: 91_001
2022-01-01: 94_001
2023-01-01: 100_001
# No Regular Income Tax Table has been published for 2026 or later, so the
# model carries this value forward and applies the table method to the
# 2026+ statutory schedules below it.
metadata:
unit: currency-USD
period: year
label: Arkansas regular income tax table threshold
reference:
- title: 2014 AR1000F and AR1000NR Instructions, 2014 Regular Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/LongBookwTaxTables_2014.pdf#page=30
- title: 2015 Arkansas Tax Tables, 2015 Regular Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/TaxTables_2015.pdf#page=6
- title: 2016 AR1000F and AR1000NR Instructions, 2016 Regular Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/LongBookwTaxTables_2016.pdf#page=50
- title: 2017 AR1000F and AR1000NR Instructions, 2017 Regular Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/AR1000FandAR1000NRInstructions.pdf#page=50
- title: 2018 Arkansas Tax Tables, 2018 Regular Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2018_Final_TaxTable_with_Cover_Sheet.pdf#page=8
- title: 2019 AR1000F and AR1000NR Instructions, 2019 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2019_AR1000F_and_AR1000NR_Instructions.pdf#page=32
- title: 2020 AR1000F and AR1000NR Instructions, 2020 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2020_AR1000F_and_AR1000NR_Instructions.pdf#page=32
- title: 2021 AR1000F and AR1000NR Instructions, 2021 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2021_AR1000F_and_AR1000NR_Instructions.pdf#page=32
- title: 2022 AR1000F and AR1000NR Instructions, 2022 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2022_AR1000F_and_AR1000NR_Instructions.pdf#page=35
- title: 2023 AR1000F and AR1000NR Instructions, 2023 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2023_AR1000F_and_AR1000NR_Instructions.pdf#page=35
- title: 2024 AR1000F and AR1000NR Instructions, 2024 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2024_AR1000F_and_AR1000NR_Instructions.pdf#page=34
- title: 2025 AR1000F and AR1000NR Instructions, 2025 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2025_AR1000F_and_AR1000NR_Instructions.pdf#page=34
- title: 2021 Indexed Tax Brackets (a formula must match the table exactly)
href: https://www.dfa.arkansas.gov/wp-content/uploads/TaxBrackets_2021.pdf#page=1
- title: 2024 Indexed Tax Brackets (a formula must match the table exactly)
href: https://www.dfa.arkansas.gov/wp-content/uploads/2024_TaxBrackets.pdf#page=2
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
description: Arkansas uses the midpoint of the whole-dollar incomes in each regular income tax table band if this is true, and the midpoint of the band's bounds otherwise.
# DFA computes each row at the band midpoint and rounds to whole dollars. At
# the midpoint of the bounds ($14,850 for the $14,800-$14,900 row), some rows
# land exactly on 50 cents. Through 2021 the table rounds these up (2021:
# $40,250 x 5.9% - $797.25 = $1,577.50, printed as $1,578). From 2022 it
# rounds them down (2022: $24,750 x 4.9% - $628.25 = $584.50, printed as $584).
# That matches evaluating at the midpoint of the whole-dollar incomes the row
# covers ($24,700 to $24,799: $24,749.50 x 4.9% - $628.25 = $584.48, or $584).
# With these settings every 2014-2025 row matches the published table.
values:
2014-01-01: false
2022-01-01: true
# No Regular Income Tax Table has been published for 2026 or later, so the
# model carries this value forward.
metadata:
unit: bool
period: year
label: Arkansas regular income tax table whole-dollar midpoint
reference:
- title: 2021 Indexed Tax Brackets (the calculations in the table are made at the midpoint of each income level)
href: https://www.dfa.arkansas.gov/wp-content/uploads/TaxBrackets_2021.pdf#page=1
- title: 2021 AR1000F and AR1000NR Instructions, 2021 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2021_AR1000F_and_AR1000NR_Instructions.pdf#page=30
- title: 2022 AR1000F and AR1000NR Instructions, 2022 Regular Income Tax Table
href: https://www.dfa.arkansas.gov/wp-content/uploads/2022_AR1000F_and_AR1000NR_Instructions.pdf#page=32
- title: 2024 Indexed Tax Brackets (the calculations in the table are made at the midpoint of each income level)
href: https://www.dfa.arkansas.gov/wp-content/uploads/2024_TaxBrackets.pdf#page=2
Original file line number Diff line number Diff line change
Expand Up @@ -231,3 +231,219 @@
state_code: AR
output:
ar_files_separately: false

# A married couple must file jointly if either spouse had a total negative
# income: "IF ONE SPOUSE HAD A TOTAL NEGATIVE INCOME, YOU MUST FILE MARRIED
# FILING JOINTLY." (2024 AR1000F/AR1000NR instructions, Filing Status 4, p.12:
# https://www.dfa.arkansas.gov/wp-content/uploads/2024_AR1000F_and_AR1000NR_Instructions.pdf#page=12;
# same wording in 2025, p.12).
- name: Separate tax lower, but the spouse's total income is negative, files jointly
period: 2024
input:
people:
person1:
ar_income_tax_before_non_refundable_credits_indiv: 0
ar_income_tax_before_non_refundable_credits_joint: 100
ar_taxable_income_indiv: 50_000
ar_net_taxable_income_joint: 50_000
ar_gross_income_indiv: 50_000
person2:
ar_income_tax_before_non_refundable_credits_indiv: 100
ar_income_tax_before_non_refundable_credits_joint: 500
ar_taxable_income_indiv: 0
ar_net_taxable_income_joint: 0
ar_gross_income_indiv: -1
tax_units:
tax_unit:
members: [person1, person2]
filing_status: JOINT
households:
household:
members: [person1, person2]
state_code: AR
output:
# Separate tax 100 < joint tax 600, but person2's total income is -1 < 0.
ar_files_separately: false

- name: Spouse partnership loss of $10 forces a joint return that costs more (issue 9680)
period: 2024
input:
people:
person1:
age: 40
employment_income: 27_850
person2:
age: 38
partnership_s_corp_income: -10
tax_units:
tax_unit:
members: [person1, person2]
filing_status: JOINT
households:
household:
members: [person1, person2]
state_code: AR
output:
ar_gross_income_indiv: [27_850, -10]
# Separate path: person1 27,850 - 2,410 = 25,440, 2024 Regular Income Tax
# Table row $25,400-$25,500: $584 (p.31); person2 has no taxable income.
ar_income_tax_before_non_refundable_credits_indiv: [584, 0]
# Separate additional credit: 60 each (25,440 and 0 are below 25,800) = 120,
# so the separate path nets 584 - 120 = 464.
# Joint path: AGI 27,850 - 10 = 27,840, joint low income table (0-1
# dependents) row $27,801-$27,900: $470 (p.29); the joint additional credit
# 120 - ceil((27,840 - 25,800) / 100) x 10 phases out to 0, so it nets 470.
ar_low_income_tax_joint: [470, 0]
# Separate (464) < joint (470), but person2's total income is negative.
ar_files_separately: false
ar_income_tax_before_non_refundable_credits_unit: 470
# 470 - 2 x 29 personal credits = 412
ar_non_refundable_credits: 58
ar_income_tax: 412

- name: Head partnership loss of $10 also forces a joint return
period: 2024
input:
people:
person1:
age: 40
partnership_s_corp_income: -10
person2:
age: 38
employment_income: 27_850
tax_units:
tax_unit:
members: [person1, person2]
filing_status: JOINT
households:
household:
members: [person1, person2]
state_code: AR
output:
ar_gross_income_indiv: [-10, 27_850]
ar_income_tax_before_non_refundable_credits_indiv: [0, 584]
# Same as above with the spouses swapped: joint 470 - 58 = 412.
ar_files_separately: false
ar_income_tax: 412

- name: Spouse with zero total income can still file separately (regression)
period: 2024
input:
people:
person1:
age: 40
employment_income: 27_850
person2:
age: 38
tax_units:
tax_unit:
members: [person1, person2]
filing_status: JOINT
households:
household:
members: [person1, person2]
state_code: AR
output:
# Zero is not negative. Separate 584 - 120 = 464 < joint 470 (AGI 27,850,
# row $27,801-$27,900), so the couple files separately.
ar_files_separately: true
ar_income_tax_before_non_refundable_credits_unit: 584
# 584 - 58 personal credits - 120 additional credits = 406
ar_income_tax: 406

- name: Both spouses with positive income keep the cheaper separate election (regression)
period: 2024
input:
people:
person1:
age: 40
employment_income: 40_000
person2:
age: 38
employment_income: 40_000
tax_units:
tax_unit:
members: [person1, person2]
filing_status: JOINT
households:
household:
members: [person1, person2]
state_code: AR
output:
# Separate: each 40,000 - 2,410 = 37,590, row $37,500-$37,600: $1,055 (p.31).
ar_income_tax_before_non_refundable_credits_indiv: [1_055, 1_055]
# Joint: 80,000 - 4,820 = 75,180, row $75,101-$75,201: $2,521 (p.33).
ar_income_tax_before_non_refundable_credits_joint: [2_521, 0]
# Separate 2,110 < joint 2,521; neither total income is negative.
ar_files_separately: true
ar_income_tax_before_non_refundable_credits_unit: 2_110
# 2,110 - 58 = 2,052
ar_income_tax: 2_052

- name: Spouse partnership loss of $300 files jointly, where the joint and separate paths tie (issue 9680)
# The tie already keeps this couple on the joint path (strict <), so this case
# passes without the negative-income rule. The $10 loss cases above isolate
# the rule.
period: 2024
input:
people:
person1:
age: 40
employment_income: 28_450
person2:
age: 38
partnership_s_corp_income: -300
tax_units:
tax_unit:
members: [person1, person2]
filing_status: JOINT
households:
household:
members: [person1, person2]
state_code: AR
output:
# Joint AGI 28,450 - 300 = 28,150, joint low income table row
# $28,101-$28,200: $501 (p.29). Separately, person1's 26,040 falls in the
# regular row $26,000-$26,100: $606 (p.31), less 45 + 60 of additional
# credits = 501, a tie, which keeps the joint return; the negative total
# income also requires it.
ar_low_income_tax_joint: [501, 0]
ar_income_tax_before_non_refundable_credits_indiv: [606, 0]
ar_files_separately: false
# 501 - 58 = 443
ar_income_tax: 443

- name: Spouse capital loss of $500 files jointly, where the joint path is already cheaper
# The joint path costs less even without the negative-income rule, so this
# case does not isolate the rule. The $10 loss cases above do.
period: 2024
input:
people:
person1:
age: 40
employment_income: 27_850
person2:
age: 38
short_term_capital_gains: -500
tax_units:
tax_unit:
members: [person1, person2]
filing_status: JOINT
households:
household:
members: [person1, person2]
state_code: AR
output:
# person2's total income is the -500 capital loss.
ar_gross_income_indiv: [27_850, -500]
# Separate path: person1 27,850 - 2,410 = 25,440, row $25,400-$25,500:
# $584 (p.31), less 60 + 60 of additional credits = 464.
ar_income_tax_before_non_refundable_credits_indiv: [584, 0]
# Joint path: AGI 27,850 - 500 = 27,350, joint low income table row
# $27,301-$27,400: $418 (p.29); the joint additional credit
# 120 - ceil((27,350 - 25,800) / 100) x 10 phases out to 0, so it nets 418.
ar_low_income_tax_joint: [418, 0]
# Joint (418) < separate (464), so the couple files jointly either way.
ar_files_separately: false
# 418 - 58 = 360
ar_income_tax: 360
Loading
Loading