Skip to content

AR low-income tax table (MFJ, 2+ dependents): 2024/2025 rows leak into TY2021-2023, creating spurious eligibility windows above the published cutoffs #9024

Description

@PavelMakarchuk

Found by a systematic sweep for the parameter backward-leak bug class (same mechanism as #9008 and #9022: policyengine-core backfills each bracket's first value to the start of the timeline).

In parameters/gov/states/ar/tax/income/rates/low_income_tax_tables/joint/two_or_more_dependents.yaml, four brackets are first defined at 2024-01-01/2025-01-01 over a table whose other rows exist from 2021. Two of them carry finite amounts, which backfill to earlier instants:

  • threshold {2024: 35_000, 2025: 35_801}, amount {2024: 765, 2025: 769} → resolves to (35,000 → $765) at 2021–2023 instants
  • threshold {2025: 36_001}, amount {2025: 790} → resolves to (36,001 → $790) at 2021–2024 instants

The published Arkansas low-income tax tables end far lower in those years (verbatim from the DFA tables):

2021 (last row): "$32,101 $32,200 — $945", then "Above $32,200 use Standard or Itemized Deductions and Regular Income Tax Table"
2022 (last row): "$33,001 $33,100 — $769", then "Above $33,100 …"
2023: "Above $34,100 …"
2024 (last row): "$35,001 $35,100 — $765", then "Above $35,100 …"

So PE grants spurious low-income-table eligibility windows at AGI $35,001–$35,100 and $36,002–$36,101 in TY2021–2023 (and $36,002–$36,101 in TY2024), using the TY2024/TY2025 amounts.

Worked example (verified end-to-end in Simulation): TY2021, MFJ, 2 dependents, wages $35,050 → PE ar_income_tax $649 via a leaked table amount of $765, where the correct computation uses the regular table (taxable $30,650; DFA 2021 bracket card row, verbatim: "$23,600 $39,699 — 5.0% minus $439.96" → 0.05 × 30,650 − 439.96 = $1,092.54 before credits). The leak is also non-monotonic: wages $34,900 → PE $969.04, so a $150 raise cuts AR tax by $320.

Fix: add explicit 2021-01-01: .inf to the threshold and amount of all four late brackets, so pre-2024 (and, for the 2025-only rows, 2024) incomes above the published cutoff fall through to the regular table.

Integration test:

- name: AR 2021 MFJ with two dependents above the low-income table cutoff uses the regular table (pe-us backward-leak sweep)
  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 low-income table ends at $32,200 ("Above $32,200 use ... Regular Income Tax Table");
    # regular table: 0.05 x 30,650 - 439.96 = 1,092.54
    ar_income_tax_before_non_refundable_credits_joint: [1_092.54, 0, 0, 0]

(plus a monotonicity companion at wages $34,900.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions