From 0b73e16b5175e0cc544ca06a9688b06593ac5402 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Mon, 13 Jul 2026 13:20:07 -0400 Subject: [PATCH 1/2] Scope AR MFJ-2dep low-income table rows added in 2024-2025 to those years Core backfills a bracket's first value to the timeline start, so the rows added for TY2024 (35,000 -> 765) and TY2025 (36,001 -> 790) resolved at 2021-2023 instants, creating spurious low-income-table eligibility windows above the published cutoffs ('Above $32,200 use Standard or Itemized Deductions and Regular Income Tax Table', 2021) and non-monotonic tax. Adds explicit 2021-01-01: .inf values and table-verified tests. Fixes #9024 Co-Authored-By: Claude Fable 5 --- changelog.d/fixed/9024.md | 1 + .../joint/two_or_more_dependents.yaml | 11 +++ ...x_before_non_refundable_credits_joint.yaml | 78 +++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 changelog.d/fixed/9024.md diff --git a/changelog.d/fixed/9024.md b/changelog.d/fixed/9024.md new file mode 100644 index 00000000000..f0417107d80 --- /dev/null +++ b/changelog.d/fixed/9024.md @@ -0,0 +1 @@ +- Kept the Arkansas MFJ two-or-more-dependents low-income tax table rows added for 2024-2025 out of earlier years; the published tables end at $32,200 (2021) through $34,100 (2023), so incomes above the cutoff use the regular tax table. diff --git a/policyengine_us/parameters/gov/states/ar/tax/income/rates/low_income_tax_tables/joint/two_or_more_dependents.yaml b/policyengine_us/parameters/gov/states/ar/tax/income/rates/low_income_tax_tables/joint/two_or_more_dependents.yaml index cdac96c83dd..6280a906e80 100644 --- a/policyengine_us/parameters/gov/states/ar/tax/income/rates/low_income_tax_tables/joint/two_or_more_dependents.yaml +++ b/policyengine_us/parameters/gov/states/ar/tax/income/rates/low_income_tax_tables/joint/two_or_more_dependents.yaml @@ -750,22 +750,33 @@ brackets: 2024-01-01: 754 2025-01-01: 758 - threshold: + # Rows beyond each year's published cutoff must stay .inf so incomes + # above the table fall through to the regular tax table (core + # backfills a bracket's first value to the timeline start). + 2021-01-01: .inf 2024-01-01: 35_000 2025-01-01: 35_801 amount: + 2021-01-01: .inf 2024-01-01: 765 2025-01-01: 769 - threshold: + 2021-01-01: .inf 2024-01-01: 35_100 2025-01-01: 35_901 amount: + 2021-01-01: .inf 2024-01-01: .inf 2025-01-01: 779 - threshold: + 2021-01-01: .inf 2025-01-01: 36_001 amount: + 2021-01-01: .inf 2025-01-01: 790 - threshold: + 2021-01-01: .inf 2025-01-01: 36_101 amount: + 2021-01-01: .inf 2025-01-01: .inf diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/tax/income/ar_income_tax_before_non_refundable_credits_joint.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/tax/income/ar_income_tax_before_non_refundable_credits_joint.yaml index 79cf9bbf77b..5dc32d59210 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/tax/income/ar_income_tax_before_non_refundable_credits_joint.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/tax/income/ar_income_tax_before_non_refundable_credits_joint.yaml @@ -121,3 +121,81 @@ # Low income cap: 5_000 # min(1_530, 5_000) = 1_530 ar_income_tax_before_non_refundable_credits_joint: 1_530 + +- name: AR 2021 MFJ with two dependents just above the low-income table cutoff uses the regular table (pe-us 9024) + period: 2021 + absolute_error_margin: 1 + input: + people: + head: + age: 40 + employment_income: 35_050 + spouse: + age: 40 + child1: + age: 10 + child2: + age: 8 + tax_units: + tax_unit: + members: [head, spouse, child1, child2] + households: + household: + members: [head, spouse, child1, child2] + state_code: AR + output: + # 2021 MFJ 2+ dependents low-income table ends at $32,200 + # ("Above $32,200 use Standard or Itemized Deductions and Regular + # Income Tax Table"); regular table: 0.05 x 30,650 - 439.96 = 1,092.54. + # Before the fix a leaked 2024 row returned $765. + ar_income_tax_before_non_refundable_credits_joint: [1_092.54, 0, 0, 0] + +- name: AR 2021 MFJ with two dependents inside the low-income table keeps its table amount (monotonicity companion, pe-us 9024) + period: 2021 + absolute_error_margin: 1 + input: + people: + head: + age: 40 + employment_income: 31_950 + spouse: + age: 40 + child1: + age: 10 + child2: + age: 8 + tax_units: + tax_unit: + members: [head, spouse, child1, child2] + households: + household: + members: [head, spouse, child1, child2] + state_code: AR + output: + # 2021 published row $31,901-$32,000 -> $921 (TaxTables_2021.pdf) + ar_income_tax_before_non_refundable_credits_joint: [921, 0, 0, 0] + +- name: AR 2024 MFJ with two dependents at the published last table row still gets 765 (pe-us 9024) + period: 2024 + absolute_error_margin: 1 + input: + people: + head: + age: 40 + employment_income: 35_050 + spouse: + age: 40 + child1: + age: 10 + child2: + age: 8 + tax_units: + tax_unit: + members: [head, spouse, child1, child2] + households: + household: + members: [head, spouse, child1, child2] + state_code: AR + output: + # 2024 published last row $35,001-$35,100 -> $765 + ar_income_tax_before_non_refundable_credits_joint: [765, 0, 0, 0] From 08da92cda6843f6d683b7fc75fcc1c402af7849b Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Wed, 15 Jul 2026 12:20:25 -0400 Subject: [PATCH 2/2] Move changelog fragment to top-level changelog.d/ naming convention Co-Authored-By: Claude Fable 5 --- .../{fixed/9024.md => ar-low-income-table-backfill.fixed.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename changelog.d/{fixed/9024.md => ar-low-income-table-backfill.fixed.md} (100%) diff --git a/changelog.d/fixed/9024.md b/changelog.d/ar-low-income-table-backfill.fixed.md similarity index 100% rename from changelog.d/fixed/9024.md rename to changelog.d/ar-low-income-table-backfill.fixed.md