Skip to content

Leave dependents' casualty losses off Arkansas returns and limit Puerto Rico's casualty deduction to its two statutory items - #9944

Open
MaxGhenis wants to merge 2 commits into
mainfrom
fix-ar-pr-casualty-loss
Open

MaxGhenis wants to merge 2 commits into
mainfrom
fix-ar-pr-casualty-loss

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

This PR checks the two casualty-loss copies that #9912 left unchanged, Arkansas and Puerto Rico, against their own forms and statutes. Arkansas gets one fix: dependents' losses no longer count. Its status-4 pooling was checked and stays. Puerto Rico gets an input-semantics fix: the deduction stops reading the generic casualty_loss input and models the two items the Code allows.

It does not overlap #9912, which touches no Arkansas or Puerto Rico file and not casualty_loss.py. It uses tax_unit_non_dep_add, which is already on main.

Arkansas

Fix: a dependent's loss belongs on the dependent's own return

ar_casualty_loss_deduction_joint and ar_casualty_loss_deduction_indiv summed casualty_loss over every tax-unit member, dependents included. Both now use tax_unit_non_dep_add. The legal basis:

No Arkansas source lets a parent report a dependent's income or deductions. Researchers checked the 2017–2025 AR1000F/AR1000NR instructions, the 2025 AR1000F (income columns only for the primary and the spouse) and 26 CAR Part 100 Subpart 1. They found nothing like Form 8814.

ar_agi_joint and ar_agi_indiv still move a dependent's net income onto the head, which no Arkansas source supports either. Fixing that is a separate methodology question, raised as a follow-up below. The new tests feed ar_agi_* directly, so they don't depend on it.

Checked, no change: status 4 (married filing separately on the same return)

A reviewer argued from Pub. 547 (2017, PDF p. 10) that spouses filing separate returns each subtract their own $100, and only the owning spouse claims the loss. That would make the test "2025, losses of both spouses …" 14,800, assigned to the owners. Arkansas's own forms compute it differently, the same way in every year checked (2017, 2018, 2020, 2022–2025):

  • A status-4 couple files one return with one Form AR3. The Form AR4684 attaches to its line 18. It has only primary-filer name and SSN fields, and you use "a separate Form AR4684 (through line 12) for each casualty or theft event".
  • Line 11 enters $100 once per event. Lines 13–18 apply one 10% floor for the return.
  • AR3 lines 31–35 then split the whole itemized total, line 18 included, by AGI share rounded to a whole percent, not by owner (instructions PDF p. 22). Even status-5 couples, filing on different returns, "must still prorate your deductions based on both spouse's incomes" (PDF p. 14).

PolicyEngine already does this, so the formula stays. One gap remains. AR4684 line 17 cites "line 25" without naming a column. We read it as columns A plus B, because AR3 lines 2 and 23 use "line 25A and 25B" for the other AGI floors.

There is a competing statutory reading. § 165(h)(5)(B) merges only joint-return spouses, and Treas. Reg. § 1.165-7(b)(4)(iii) applies the $100 "separately to each individual taxpayer" otherwise. Read that way, status-4 spouses would each get their own $100 and their own 10% floor: (12,000 − 100 − 3,000) + (8,000 − 100 − 2,000) = 14,800. That total would still be split by AGI share, not assigned to owners. No Arkansas form or instruction computes the loss per spouse, so the code follows the forms. The variable's comment now says so, and the choice is queued for Max as decision d1040.

The code comment and references now record all of this. A new ar_itemized_deductions_indiv case shows a spouse-only loss split 60/40 by AGI.

Puerto Rico

What the law allows

P.R. Internal Revenue Code of 2011, Section 1033.15(a)(10) (13 L.P.R.A. § 30135): OGP English compilation, Rev. June 18, 2026, PDF p. 167; Spanish, PDF p. 182. The text is unchanged from Act 1-2011 as enacted (PDF pp. 188–189). It allows only two items:

  • (A) Principal residence: losses "not compensated by insurance or otherwise, sustained during the taxable year from fire, hurricane or other acts of God, to the real property that, at the time of the event constitutes the principal residence of the taxpayer". There is no cap and no floor. Spouses living together who file separately each claim 50%.
  • (B) Household personal property: losses on "automobiles, furniture, household goods and other chattels, excluding the value of jewelry or cash", from earthquakes, hurricanes, storms, tropical depressions and floods. The area must be designated a disaster area by the Governor, and the taxpayer must have claimed the disaster-assistance benefits. It is "limited to five thousand dollars ($5,000)", or $2,500 for spouses living together who file separately. Unused amounts carry over to the next two years under the same annual limits.
  • Theft and other property. § 1033.05(a) (PDF pp. 137–138) allows an individual's other losses only in a trade or business or a transaction entered into for profit. So a personal theft loss, or a casualty to other personal property, is not deductible.
  • Forms. Schedule A Individual, Part I, carries the two items on separate lines: line 2 for the residence and line 5 for personal property. See the 2023, 2024 and 2025 instructions, line 2 on PDF p. 24 and line 5 on PDF p. 26 in each.
  • Halving (B) for separate filers. For a separate filer, § 1061.01(b)(2)(B) (PDF p. 321) determines deductions under § 1021.03(a)(1)–(6) "as if the spouses were filing a joint return". § 1021.03(a)(4) (PDF p. 40) then attributes (a)(10) deductions 50% to each spouse. So (B) is halved before the $2,500 cap.

What PolicyEngine did

pr_casualty_loss_deduction deducted every member's generic casualty_loss ("Casualty/theft loss"), with no cap. That is the federal Form 4684 input, which Microcosm imputes from PUF E20500. On main, a Puerto Rico single filer with a $20,000 theft loss gets a $20,000 deduction.

The fix

  • New Person inputs. pr_principal_residence_casualty_loss and pr_personal_property_casualty_loss, summed over the head and spouse. Each input's documentation states the statutory conditions.
  • New TaxUnit input. pr_personal_property_casualty_loss_carryover. Hacienda describes it as the part of the $5,000 ($2,500) allowance not claimed in the loss year.
  • pr_casualty_loss_deduction. This is line 2, and the name is kept for API users: residence loss × (50% if SEPARATE, otherwise 100%).
  • New pr_personal_property_casualty_loss_deduction. This is line 5: min(share × loss + carryover, cap). It is added to deductions/sources.yaml.
  • Parameters.
    • New casualty_loss/personal_property_cap: 5,000 for every filing status except SEPARATE, which gets 2,500.
    • separate_percentage stays 0.5, with full statutory references.
    • Both are dated 2011-01-01, under Act 1-2011 § 6100.04(a)(1) (PDF p. 1313).
  • casualty_loss documentation. It now says Puerto Rico uses its own inputs.
  • Impact. Microcosm's US artifact leaves Puerto Rico out of its state spine (block_ladder_sources.py), so this changes household and API results only, not any aggregate.

Tests

YAML tests that fail on main (run against a clean upstream/main checkout at 9eab717e56):

Test main This PR
AR joint: only a dependent has a $20,000 loss, head AGI $50,000 14,900 0
AR joint: head $12,000 + dependent $3,000 9,900 6,900
AR indiv: only a dependent has a loss 14,900 0
AR indiv: spouses $12,000 + $8,000, dependent $5,000 19,900 14,900
PR: single filer, generic casualty_loss $20,000 20,000 0
PR: pr_deductions with generic casualty_loss $8,000 8,000 0

The rest of the new Puerto Rico cases also fail on main, because their inputs don't exist there. They cover:

  • every filing status;
  • the cap at, below and above $5,000;
  • separate filers at $1,500 and $2,500;
  • carryover below and at the cap;
  • dependents' losses;
  • each item not counting toward the other;
  • a pr_deductions integration case.

Invariants, with property tests

These are grid property tests in tests/unit/, each run as one vectorized simulation.

  • Arkansas (test_ar_misc_casualty_deduction_properties.py, new test_casualty_loss_deduction_ignores_dependents_losses). For every head loss × AGI × dependent loss in the grid (280 units, TY2010 and TY2025), both variants equal the head-only closed form. A dependent's loss never moves the filer's deduction.
  • Puerto Rico (new test_pr_casualty_loss_deduction_properties.py, 1,050 units, TY2025):
    • Both deductions match the § 1033.15(a)(10) closed form.
    • 0 ≤ line 2 ≤ the residence loss, and 0 ≤ line 5 ≤ the cap (5,000; 2,500 if SEPARATE). The cap binds somewhere in the grid.
    • Line 5 never falls as the loss or the carryover rises.
    • The generic casualty_loss changes neither deduction nor pr_deductions (a differential check, 0 vs 50,000).
    • pr_deductions equals line 2 plus line 5 when nothing else is entered.

Cost. Both files run in the Rest job's "remaining" group, which takes about 239 s. Local measurements on macOS at load about 224, not Linux CI:

  • the new PR file takes 0.88 s in pytest (0.46 s setup), and its process peaks at 0.87 GB RSS, mostly the model import the group already pays;
  • each of the two new AR cases takes under 0.1 s, and the AR file's process peaked at 1.19 GB.

Run locally, one file at a time under the hub's test-run rule, all passing:

  • ar_casualty_loss_deduction_joint (10), _indiv (9) and ar_itemized_deductions_indiv (5);
  • pr_casualty_loss_deduction (7), pr_personal_property_casualty_loss_deduction (14), pr_deductions (1) and pr_net_taxable_income (2);
  • both property files (20 + 5);
  • test_parameter_files, the code-health reference-URL checks, and ruff format --check ..

Follow-ups (not in this PR)

  • AR AGI. ar_agi_joint and ar_agi_indiv attribute dependents' net income to the head with no Arkansas source. The same pattern appears in MS, DE and MT. Whether to zero it, as irs_gross_income does federally, is a methodology choice.
  • PR SEPARATE. In Puerto Rico, married filing separately means spouses living together. PE's computed SEPARATE comes from is_separated, which corresponds to PR's "married not living with spouse", who files as an individual taxpayer. That affects every PR variable that halves amounts for SEPARATE.
  • AR rounding. ar_itemized_deductions_indiv rounds the AGI share with np.round, which rounds halves to even. AR3 line 33 says "round to the nearest whole percent" and makes line 35 the remainder. The two differ only at exact half-percent shares.

Axiom parity

axiom: Ark. Code § 26-51-424(b) TheAxiomFoundation/rulespec-us#1411 queued
axiom: P.R. Internal Revenue Code of 2011 § 1033.15(a)(10) TheAxiomFoundation/rulespec-us#1526 queued

Review

Independent review (Subfleet job 20261006-180638-pe9944-review, Opus standard tier) is running; its verdict will be added here.

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 6, 2026 17:44
…orms

Arkansas: leave dependents' casualty losses off the filer's return in
ar_casualty_loss_deduction_joint and _indiv. 26 U.S.C. 165(h), as adopted by
Ark. Code 26-51-424(b), allows the loss of the individual who sustained it.
Status-4 pooling stays: the AR3 and AR4684 apply one $100 per casualty event
and one 10% floor per return, then split the total by AGI share.

Puerto Rico: P.R. Code 1033.15(a)(10) allows only (A) losses on the principal
residence and (B) losses on automobiles and household goods in a declared
disaster area, capped at $5,000 ($2,500 for spouses filing separately). The
generic casualty_loss input no longer feeds either deduction. New inputs:
pr_principal_residence_casualty_loss, pr_personal_property_casualty_loss and
pr_personal_property_casualty_loss_carryover. New deduction:
pr_personal_property_casualty_loss_deduction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Arkansas: over a grid of head losses, AGIs and dependent losses, both
variants equal the head-only closed form, so a dependent's loss never moves
the filer's deduction. Puerto Rico: over losses, carryovers, filing statuses
and generic casualty_loss values, the deductions match Section
1033.15(a)(10), stay within the loss and the cap, rise with the loss and
carryover, ignore casualty_loss and flow into pr_deductions.

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

This branch has not been deployed

No deployments
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