Skip to content

Count gambling winnings in Arkansas gross income and add the Arkansas gambling loss deduction - #9636

Merged
MaxGhenis merged 8 commits into
mainfrom
fix-ar-gambling-loss-deduction
Oct 7, 2026
Merged

MaxGhenis merged 8 commits into
mainfrom
fix-ar-gambling-loss-deduction

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Arkansas taxes gambling winnings and lets itemizers deduct gambling losses up to those winnings, outside the 2% floor on miscellaneous deductions. policyengine-us did neither.

  • gambling_winnings was not in the Arkansas gross income sources, so winnings were untaxed in Arkansas.
  • The Arkansas itemized sources had no gambling loss deduction.

This PR adds both. It was found while fixing Arkansas itemized deductions (#9614, #9625).

The law

Winnings are gross income. Ark. Code § 26-51-404(a)(1)(E) includes "Gains or profits and income derived from any source whatever", and none of the § 26-51-404(b) exclusions covers gambling. DFA reports winnings as an addition to income on Form AR-OI, carried to AR1000F "Other income": Line 20 for TY2015-2017 and Line 22 from TY2018.

  • The only exception is winnings from Arkansas electronic games of skill. Under Ark. Code § 26-51-1310(f), from Act 732 of 2007, § 8 (2007R/732.pdf#page=5), they are not income and their losses are not deductible. DFA Subject 208 applies this to winnings before July 1, 2019, when the two racetracks became casinos. The booklets print the exception through TY2018. PE has one gambling_winnings input and cannot separate these winnings; see Limitations.

Losses: Ark. Code § 26-51-424(a)(2)(B). Act 155 of 2017, § 21 (2017R/155.pdf#page=9) added "including without limitation gambling losses, which are: (i) Deductible to the extent of gambling winnings; and (ii) Not subject to the two percent (2%) limitation on miscellaneous itemized deductions."

  • § 25 (#page=10) makes it effective for tax years beginning on and after 2015-01-01.
  • No later Act has amended § 26-51-424(a). The 2024 code text matches Act 155 word for word.
  • It is Arkansas's own rule and does not adopt 26 U.S.C. § 165(d), so the federal 90% limit that starts in 2026 does not apply.
  • Ruled by Max (d1018): as built, including pre-2015 years. DFA Subject 208 stated the same cap and exemption from the 2% floor in its 2009 version (Wayback capture, PDF created 2009-01-08), and DFA's impact statement says Act 155 "clarifies" existing law with no revenue impact. This ruling retains the deduction before Act 155 § 25's 2015 statutory start; the existing 2014 regression case pins that behavior.

DFA forms by year. All anchors are PDF page indices; the original PR work reported checking them with pdftotext -f N -l N. The base URL is https://www.dfa.arkansas.gov/wp-content/uploads/.

TY Winnings Losses on AR3 Booklet
2015-2016 AR-OI line 3 → Line 20 (#page=15 / #page=13); electronic games of skill excluded Line 27, "other miscellaneous deductions not subject to the 2% AGI limit" (#page=43 / #page=39); gambling not named LongBookwTaxTables_2015.pdf, LongBookwTaxTables_2016.pdf
2017 AR-OI line 4 → Line 20 (#page=13); #page=5 says Act 155 "clarified" gambling losses Line 27, as above (#page=39) AR1000FandAR1000NRInstructions.pdf
2018 AR-OI line 4 → Line 22 (#page=13); electronic games of skill excluded Line 27, as above (#page=39) AR1000FandAR1000NRInstructions_2018.pdf
2019 AR-OI line 4 → Line 22 (#page=13) Line 27, as above (#page=21) 2019_AR1000F_and_AR1000NR_Instructions.pdf
2020-2021 same (#page=13) Line 27 "Gambling Losses ... cannot exceed gambling winnings" (#page=21); the form puts it under "not subject to the 2% AGI limitation" <YYYY>_AR1000F_and_AR1000NR_Instructions.pdf
2022-2025 same (#page=14) same (#page=22) same pattern

Standalone forms: 2025_AR3_ItemizedDeduction.pdf (line 27 "Gambling Losses") and 2025_AR-OI_OtherIncomeLoss_and_DepreciationDifferences.pdf (line 4 "Gambling winnings").

Changes

  • gov.states.ar.tax.income.gross_income.sources.{joint,individual}:
    • Add gambling_winnings to every period.
    • Add references.
    • Add a comment on the electronic games of skill exclusion.
  • New ar_gambling_loss_deduction (TaxUnit) = min(Σ gambling_losses, Σ gambling_winnings) over the tax unit. On a married-filing-separately-on-the-same-return (status 4) return, AR3 is completed for the couple and the total is prorated by AGI (AR3 lines 31-35), which is what ar_itemized_deductions_indiv already does.
  • gov.states.ar.tax.income.deductions.itemized.sources.{joint,individual}: add ar_gambling_loss_deduction next to, and outside, ar_misc_deduction_*, and add references.
  • Changelog fragment.

Invariants

These hold for every input and are executed in policyengine_us/tests/unit/test_ar_gambling_properties.py. That file evaluates an 8 × 8 winnings × losses grid, including 0, 1, 999, 1,000, 2,200 and 250,000, in one vectorized simulation per year, for TY2015, 2017, 2018, 2019, 2020, 2022 and 2025.

  1. ar_gambling_loss_deduction = min(losses, winnings).
  2. 0 ≤ deduction ≤ winnings, and deduction ≤ losses.
  3. Non-decreasing in both winnings and losses.
  4. Independent of the year.
  5. Independent of Arkansas AGI (0, 50,000, 1,000,000), i.e. no 2% floor. The itemized total equals the deduction when there are no other itemized inputs.
  6. Differential: equals the federal wagering_losses_deduction, which applies the same § 165(d) cap through 2025.
  7. Gambling never lowers Arkansas taxable income and raises it by at most the winnings. For a filer who itemizes either way, it raises it by exactly max(0, winnings − losses).

Original PR mutation checks, reported before this fix round:

Mutation Property tests failing
Drop the cap 31 of 32
Apply a 2% floor 23
Leave winnings out of gross income 14

Review fix round (2026-10-07)

  • Merged current main (e3a38da446) cleanly. Preserved main's itemized-deduction sources and corrected reference anchors; no conflicted files.
  • Addressed the P3 at test_ar_gross_income_source_line_comments.py:128: every period must have a nonempty source list, while the existing equality check continues to require the text parser and YAML parser to agree.
  • Recorded Max's d1018 ruling above and the hub's completed impact evidence below.

Tests in this round

Check Result
Old guard at 304757c2fa, scratch copy with all four source lists emptied in both YAML files 2 passed, reproducing the vacuous pass
Strengthened guard against the same emptied scratch lists 2 failed as expected, at the new nonempty assertion
Strengthened guard against the real source files 2 passed
test_ar_gambling_properties.py 32 passed
ar_gambling_loss_deduction.yaml, including 2014 9 passed
ar_gambling_winnings_and_losses.yaml 10 passed
ar_itemized_deductions_indiv.yaml 5 passed
ar_itemized_deductions_joint.yaml 6 passed

make format passed before both commits; git diff --check passed. The scratch copies and evidence logs were not committed.

Total on the real files: 64 passed (34 Python and 30 YAML cases). The two deliberately broken scratch cases fail as expected and are excluded from this total.

Tests ran in the foreground, one process and one targeted test file at a time. Each single-file invocation is exempt from the host's heavy-lock requirement. No folder or full-suite run, partner contract test edit, or microsimulation run was performed in this round.

Impact

The hub already completed real microsimulations on the default dataset, comparing main against this PR for both 2025 and 2026. These are hub-provided results; they were not rerun in this fix round.

  • gambling_winnings and gambling_losses are $0 in every record in both years.
  • Zero records change in any Arkansas output.
Year Arkansas gross income, main Arkansas gross income, PR Change
2025 $105.85bn $105.85bn $0
2026 $111.46bn $111.46bn $0

The gambling fix changes results only for filers who report gambling amounts. The P3 fix beyond the main merge strengthens a test and updates documentation; it changes no formulas or parameter values, so it introduces no additional model output change.

Limitations

  • Arkansas electronic games of skill winnings, 2015 to June 2019. These are not income, and their losses are not deductible. PE has no separate input for them, so any it receives through gambling_winnings are taxed.
  • Lottery and contest winnings. These are a separate AR-OI line (line 5). Both are taxable, so gross income is right. PE has one input and does not model any lottery-specific cap question.
  • Not modeled: professional gamblers, whose losses fall under (a)(2)(A) as trade or business losses; nonresident sourcing; the Mississippi gambling tax deduction on AR3 line 6.

Interactions

Federal

Federal gross income leaves out gambling_winnings while wagering_losses_deduction is still deducted for itemizers, and the OBBBA 90% limit for 2026+ is not modeled. That change reaches every state that starts from federal AGI, MAGI, and PA's net-winnings rule, and is tracked separately in #9637.

axiom: TheAxiomFoundation/rulespec-us#1417 queued

Axiom encoding remains queued in that existing pe-parity issue, which documents corpus/pin and signing blockers.

🤖 Generated with Claude Code

… gambling loss deduction

Arkansas taxes gambling winnings as other income (Ark. Code § 26-51-404(a)(1)(E);
DFA Form AR-OI line 4, carried to AR1000F Line 20 through 2017 and Line 22 from
2018). Ark. Code § 26-51-424(a)(2)(B), as amended by Act 155 of 2017, § 21, makes
gambling losses deductible to the extent of gambling winnings and not subject to
the 2% floor on miscellaneous itemized deductions, for tax years from 2015 (§ 25);
DFA Subject 208 has stated the same rule since at least 2009.

policyengine-us had neither: gambling_winnings was missing from the Arkansas gross
income sources, and the Arkansas itemized sources had no gambling loss deduction.

- Add gambling_winnings to ar gross income sources (joint and individual).
- Add ar_gambling_loss_deduction = min(losses, winnings) over the tax unit and
  add it to both itemized source lists, outside ar_misc_deduction_*.
- YAML tests for 2014, 2015, 2019, 2020 and 2025, and grid property tests for the
  cap, bounds, monotonicity, year and AGI independence, agreement with the
  federal pre-2026 wagering rule, and the effect on Arkansas taxable income.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@codecov

codecov Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (909176a) to head (c316f1d).
⚠️ Report is 281 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #9636   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            4         1    -3     
  Lines           76        14   -62     
  Branches         2         0    -2     
=========================================
- Hits            76        14   -62     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

MaxGhenis and others added 7 commits October 6, 2026 02:19
Conflicts:
- AR gross_income/sources/{individual,joint}.yaml: kept main's new 2015
  period, estate/farm income entries, Line 19/20 comments and references;
  re-added gambling_winnings to every period, including main's new 2015
  period (the PR's 2015 YAML test and 2015/2017 property tests require it).
- ar_itemized_deductions_joint.yaml: kept main's #9614 cases, then the PR's
  two gambling cases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 2015 block (TY2015-2017) said gambling winnings were on Line 22, but
the 2015-2017 AR1000F reports other income on Line 20 (2015 booklet,
#page=15 and the form on #page=17). The block's other comments copied the
2018 numbering too: on the 2015-2017 form, pensions are Lines 17A/17B,
Schedule E is Line 18 and Schedule F is Line 19. Every block also had
Schedule C income on Line 8 (it is Line 13), capital gains on Line 13
(Line 14) and disability benefits on "Line 18b" (pensions and disability
retirement go on Lines 17A/17B or 18A/18B).

Comments and references only; no parameter value changes. A code-health
test pins each source's line comment to the form for its period block.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… line test

AR1000FandAR1000NRInstructions_2018.pdf#page=19 is the AR1000NR; the
full-year resident AR1000F income lines are on #page=15. Also note that
qualified IRA distributions (after age 59 1/2) go on the pension lines and
that TY2018 splits military retirement into Lines 17A/17B.

The line-comment test now checks the full label (17A/17B, not just 17A) and
asserts that its text parse sees exactly the lists yaml.safe_load sees, so a
re-indented or quoted file cannot pass with nothing checked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis merged commit a48dc9a into main Oct 7, 2026
37 checks passed
@MaxGhenis
MaxGhenis deleted the fix-ar-gambling-loss-deduction branch October 7, 2026 20:35
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

US + core hub sweep audit (2026-10-07): squash-merged #9636 as a48dc9ac45f9bd1067ef5a60615bed4033fb35b1.

Reviewed head: c316f1d831c2a9f4013dbf0b920ff1172b6a23a3.
Independent approval: GPT-6.1 Sol, /Users/maxghenis/reviews/us-hub/reviews-gen/us-9636/review-r3.md.
Latest exact-head Pull request CI: https://github.com/PolicyEngine/policyengine-us/actions/runs/37666293142 (success).
Live gates: gh pr checks exited 0; MERGEABLE; ready; no CHANGES_REQUESTED; no unresolved Max hold; no semantic area overlap since CI base.
Merge used --match-head-commit to pin the approved head.
Approval-only --admin bypass under ~/.claude/CLAUDE.md; one required approving review was the sole branch-protection block.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant