Skip to content

Round AGI to whole dollars before the Arkansas low income table lookup #9648

Open

Description

@MaxGhenis

Problem

The Arkansas instructions say "Round all amounts to the nearest dollar" (2024 AR1000F/AR1000NR instructions, PDF page 12: "$10,897.50, round to $10,898 … $10,897.49, round to $10,897"). The same text is in the 2025 booklet.

ar_low_income_tax_joint passes unrounded AGI to each low income table's calc(..., right=True), where each threshold is the upper bound of the previous published row. So any fractional AGI just past a row edge gets the next row's tax. Example on main (3144e5a): head of household with 0–1 dependents in 2024, $20,282.25 gets $65, where the rounded $20,282 falls in the $0 row. This affects every row edge of every table and year.

Fix: round the lookup AGI half-up to whole dollars (not banker's rounding), then add YAML cases on both sides of an edge, for example $20,282.49 → $0 and $20,282.50 → $65 for 2024 HoH 0–1 dependents.

Related cleanup (from the #9599 reviews; verify each before changing)

  • Stale booklet anchors. These use printed pages instead of PDF pages. The tables are on PDF pages 29/30 in 2023 and 28/29 in 2024.
  • ar_low_income_tax_joint's label says "when married couples are filing separately". It actually computes the combined-return table tax (separate filers get np.inf). Its reference cites only the 2022 booklet.
  • Invalid reference URLs. ar_income_tax_before_non_refundable_credits_{indiv,joint,unit}.py concatenate two reference URLs with no comma, which makes one invalid URL.
  • Test gaps in ar_low_income_tax_joint.yaml:
    • no case with exactly 1 dependent (the <= 1 / > 1 boundary);
    • no surviving spouse 0–1 case;
    • no 2024 joint 2+ first-edge case (28,953 → 0; 28,954 → 108);
    • Cases 1 and 5 are named "1 dependent" but set tax_unit_dependents: 2.

Axiom parity for the tables themselves is tracked in TheAxiomFoundation/rulespec-us#1425.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions