Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/statute-first-state-income-tax.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Follow the statute where state forms differ: New Mexico's senior medical exemption needs expenses over $28,000; Vermont's 2021 low-income child care credit needs AGI under the threshold; the New York and New York City household credits count the federal exemptions of married, head-of-household and surviving-spouse filers instead of denying the credit when a filer can be claimed (Tax Law 606(b), 1310(d)), and the New York City credit for a married couple filing separately uses the couple's AGI and exemptions; and Puerto Rico's earned income credit uses Hacienda's 2024 and 2025 inflation-adjusted schedules.
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
description: NYC provides a household credit of this amount per dependent for separate filers.
description: IT-201 Table 6 lists this NYC household credit amount per dependent for separate filers.
# Not used by nyc_household_credit: Tax Law 1310(d) gives a separate filer
# "one-half the credit otherwise allowed his or her household", which the
# model computes from the married amounts (other_per_dependent). Table 6
# rounds the half amount per exemption, which can differ by a dollar or more.
metadata:
type: single_amount
threshold_unit: currency-USD
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
description: New Mexico provides the unreimbursed medical care expense exemption for filers with expenses at or above this amount.
description: New Mexico provides the unreimbursed medical care expense exemption for filers with expenses above this amount.
values:
2005-01-01: 28_000
metadata:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
description: Vermont limits the Child and Dependent Care Credit to filers with adjusted gross income at or below the low-income threshold when this is in effect.
description: Vermont limits the Child and Dependent Care Credit to filers with adjusted gross income below the low-income threshold when this is in effect.
values:
# Through 2021 the Vermont credit under 32 V.S.A. § 5828c was the low-income
# child and dependent care credit, limited to filers with AGI below the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,39 @@ brackets:
2023-01-01: 0
amount:
2023-01-01: 1_656
2024-01-01: 1_745
2025-01-01: 1_794
- threshold:
2023-01-01: 1
amount:
2023-01-01: 3_864
2024-01-01: 4_071
2025-01-01: 4_186
- threshold:
2023-01-01: 2
amount:
2023-01-01: 6_072
2024-01-01: 6_400
2025-01-01: 6_576
- threshold:
2023-01-01: 3
amount:
2023-01-01: 7_173
2024-01-01: 7_563
2025-01-01: 7_774
metadata:
amount_unit: currency-USD
threshold_unit: child
type: single_amount
label: Puerto Rico earned income credit max amount
period: year
reference:
# discrepancy: legal statute max amount doesn't correspond with tax form values
- title: "Hacienda Boletín Informativo de Rentas Internas 24-04, inflation adjustment to the earned income credit for 2024 #page 1-3"
href: https://hacienda.pr.gov/sites/default/files/publicaciones/2024/12/bi_ri_24-04_-_credito_por_trabajo_-_ajuste_por_inflacion_2024_firmada_23-dic-2024.pdf#page=1
- title: "Hacienda Boletín Informativo de Rentas Internas 26-01, inflation adjustment to the earned income credit for 2025 #page 1-3"
href: https://hacienda.pr.gov/sites/default/files/publicaciones/2026/02/bi_ri_26-01_ajuste_por_inflacion_al_credito_por_trabajo_para_el_ano_2025_signed.pdf#page=1
- title: P.R. Internal Revenue Code § 1052.01(i), 13 L.P.R.A. § 30211(i) (inflation adjustment as adjusted by the federal IRS)
href: https://docs.pr.gov/files/OCIF/LEYES-REGLAMENTOS-CARTAS-CIRCULARES/Leyes-delegan-Facultad-OCIF/Ley%20N%C3%BAm.%201-2011%20-%20C%C3%B3digo%20de%20Rentas%20Internas%20para%20un%20Nuevo%20Puerto%20Rico.pdf#page=300
- title: P.R. Laws tit. 13, § 30211 (1)-(6)
href: https://law.justia.com/codes/puerto-rico/title-thirteen/subtitle-17/part-ii/chapter-1007/subchapter-b/30211/
- title: Schedule CT Individual, Earned Income Credit, 2023
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,40 @@ brackets:
2023-01-01: 0
amount:
2023-01-01: 19_870
2024-01-01: 20_940
2025-01-01: 21_530
- threshold:
2023-01-01: 1
amount:
2023-01-01: 24_280
2024-01-01: 25_590
2025-01-01: 26_310
- threshold:
2023-01-01: 2
amount:
2023-01-01: 27_590
2024-01-01: 29_080
2025-01-01: 29_900
- threshold:
2023-01-01: 3
amount:
2023-01-01: 27_590
2024-01-01: 29_080
2025-01-01: 29_900
metadata:
amount_unit: currency-USD
threshold_unit: child
type: single_amount
label: Puerto Rico earned income credit phase out threshold
period: year
reference:
- title: "Hacienda Boletín Informativo de Rentas Internas 24-04, inflation adjustment to the earned income credit for 2024 #page 1-3"
href: https://hacienda.pr.gov/sites/default/files/publicaciones/2024/12/bi_ri_24-04_-_credito_por_trabajo_-_ajuste_por_inflacion_2024_firmada_23-dic-2024.pdf#page=1
- title: "Hacienda Boletín Informativo de Rentas Internas 26-01, inflation adjustment to the earned income credit for 2025 #page 1-3"
href: https://hacienda.pr.gov/sites/default/files/publicaciones/2026/02/bi_ri_26-01_ajuste_por_inflacion_al_credito_por_trabajo_para_el_ano_2025_signed.pdf#page=1
- title: P.R. Internal Revenue Code § 1052.01(i), 13 L.P.R.A. § 30211(i) (inflation adjustment as adjusted by the federal IRS)
href: https://docs.pr.gov/files/OCIF/LEYES-REGLAMENTOS-CARTAS-CIRCULARES/Leyes-delegan-Facultad-OCIF/Ley%20N%C3%BAm.%201-2011%20-%20C%C3%B3digo%20de%20Rentas%20Internas%20para%20un%20Nuevo%20Puerto%20Rico.pdf#page=300
- title: Schedule CT Individual, Earned Income Credit, 2023
href: https://hacienda.pr.gov/sites/default/files/schedule_ct_rev._jul_5_23_informative_-_instructions.pdf#page=2
# discrepancy: legal statute phase out thresholds do not correspond with tax form values
- title: P.R. Laws tit. 13, § 30211 (1) - (6)
href: https://law.justia.com/codes/puerto-rico/title-thirteen/subtitle-17/part-ii/chapter-1007/subchapter-b/30211/
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,40 @@ brackets:
2023-01-01: 0
amount:
2023-01-01: 17_660
2024-01-01: 18_610
2025-01-01: 19_130
- threshold:
2023-01-01: 1
amount:
2023-01-01: 19_870
2024-01-01: 20_940
2025-01-01: 21_530
- threshold:
2023-01-01: 2
amount:
2023-01-01: 23_180
2024-01-01: 24_430
2025-01-01: 25_110
- threshold:
2023-01-01: 3
amount:
2023-01-01: 23_180
2024-01-01: 24_430
2025-01-01: 25_110
metadata:
amount_unit: currency-USD
threshold_unit: child
type: single_amount
label: Puerto Rico earned income credit phase out threshold
period: year
reference:
- title: "Hacienda Boletín Informativo de Rentas Internas 24-04, inflation adjustment to the earned income credit for 2024 #page 1-3"
href: https://hacienda.pr.gov/sites/default/files/publicaciones/2024/12/bi_ri_24-04_-_credito_por_trabajo_-_ajuste_por_inflacion_2024_firmada_23-dic-2024.pdf#page=1
- title: "Hacienda Boletín Informativo de Rentas Internas 26-01, inflation adjustment to the earned income credit for 2025 #page 1-3"
href: https://hacienda.pr.gov/sites/default/files/publicaciones/2026/02/bi_ri_26-01_ajuste_por_inflacion_al_credito_por_trabajo_para_el_ano_2025_signed.pdf#page=1
- title: P.R. Internal Revenue Code § 1052.01(i), 13 L.P.R.A. § 30211(i) (inflation adjustment as adjusted by the federal IRS)
href: https://docs.pr.gov/files/OCIF/LEYES-REGLAMENTOS-CARTAS-CIRCULARES/Leyes-delegan-Facultad-OCIF/Ley%20N%C3%BAm.%201-2011%20-%20C%C3%B3digo%20de%20Rentas%20Internas%20para%20un%20Nuevo%20Puerto%20Rico.pdf#page=300
- title: Schedule CT Individual, Earned Income Credit, 2023
href: https://hacienda.pr.gov/sites/default/files/schedule_ct_rev._jul_5_23_informative_-_instructions.pdf#page=2
# discrepancy: legal statute phase out thresholds do not correspond with tax form values
- title: P.R. Laws tit. 13, § 30211 (1) - (6)
href: https://law.justia.com/codes/puerto-rico/title-thirteen/subtitle-17/part-ii/chapter-1007/subchapter-b/30211/
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ metadata:
label: Puerto Rico earned income credit unearned income limit
period: year
reference:
# discrepancy: legal statute lists unearned income as 2_200
# Section 1052.01(e) keeps older $2,200 wording but adds a proviso for
# taxable years after 2020 allowing other income, including exempt
# unearned income, equal to or below $10,000.
- title: P.R. Laws tit. 13, § 30211 (6)(e)
href: https://law.justia.com/codes/puerto-rico/title-thirteen/subtitle-17/part-ii/chapter-1007/subchapter-b/30211/
- title: Schedule CT Individual, Earned Income Credit, 2023
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,10 @@ def _state_simulation(cases, reference_system, with_se_deduction):
# deduction. The oracle preserves the supplied amount exactly as main
# does; only the computed path restores an applied federal exclusion.
main_base = case["subtotal"] if supplied else gross
# The credit (NMSA 7-2-18.13) takes expenses of $28,000 or more; the
# exemption (NMSA 7-2-5.9(A)) takes expenses that "exceed" $28,000.
senior_eligible = case["age"] >= 65 and main_base >= 28_000
senior_exemption_eligible = case["age"] >= 65 and main_base > 28_000
denominator = 2 if case["filing_status"] == "SEPARATE" else 1

for state in ("ND", "NM"):
Expand Down Expand Up @@ -464,7 +467,7 @@ def _state_simulation(cases, reference_system, with_se_deduction):
)
# NMSA 7-2-5.9 and PIT-ADJ line 18 allow the full exemption.
expectations["nm_medical_expense_exemption"].append(
3_000 if state == "NM" and senior_eligible else 0
3_000 if state == "NM" and senior_exemption_eligible else 0
)
simulation = Simulation(
tax_benefit_system=reference_system,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
by IRC 152(c), which has no taxpayer identification number requirement, so
`nm_ctc_qualifying_children` counts 152(c) children whatever their Social
Security number status. NMSA 7-2-5.9 gives $3,000 to a filer or spouse 65 or
older with at least $28,000 of medical care expenses (the PIT-ADJ reading of
the threshold), with no halving for married filing separately.
older with more than $28,000 of medical care expenses (NMSA 7-2-5.9(A); the
PIT-ADJ instructions' "$28,000 or more" is not followed), with no halving for
married filing separately.

For households drawn by Hypothesis and a seeded population, in 2023-2026:

Expand All @@ -25,8 +26,8 @@
5. Separate filing: a single adult filing separately gets half of `nm_ctc`
(7-2-18.34(G)) and the whole `nm_medical_expense_exemption`.
6. Reference exemption: `nm_medical_expense_exemption` is $3,000 exactly when
a filer (not a dependent) is 65 or older and medical expenses are at least
$28,000, and 0 otherwise.
a filer (not a dependent) is 65 or older and medical expenses are more than
$28,000 (NMSA 7-2-5.9(A)), and 0 otherwise.
"""

import numpy as np
Expand Down Expand Up @@ -182,7 +183,7 @@ def unit(adults, dependents, expenses=0.0):
unit([adult(25), adult(20)], [dependent(22, student=True)]),
# The only 65+ person is a dependent parent.
unit([adult(40)], [elderly_parent], expenses=30_000.0),
# A 65+ filer with exactly $28,000 of expenses.
# A 65+ filer with exactly $28,000 of expenses (not over $28,000).
unit([adult(70)], [], expenses=28_000.0),
]

Expand Down Expand Up @@ -268,7 +269,8 @@ def _reference_exemption(unit):
if unit["state"] != "NM":
return 0
filer_65 = any(a["age"] >= 65 for a in unit["adults"])
return EXEMPTION * (filer_65 and unit["medical_expenses"] >= MIN_EXPENSES)
# NMSA 7-2-5.9(A): expenses that "exceed" $28,000.
return EXEMPTION * (filer_65 and unit["medical_expenses"] > MIN_EXPENSES)


def _describe(unit):
Expand Down Expand Up @@ -336,7 +338,7 @@ def _assert_coverage(drawn_units, credit, exemption):
u["state"] == "NM"
and all(a["age"] < 65 for a in u["adults"])
and any(d["age"] >= 65 for d in u["dependents"])
and u["medical_expenses"] >= MIN_EXPENSES
and u["medical_expenses"] > MIN_EXPENSES
for u in drawn_units
]
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,14 @@ def test_nd_paid_cost_base_after_medical_subtotal_deletion(delete_subtotal):

@pytest.mark.parametrize("delete_subtotal", SUBTOTAL_DELETION_CASES)
def test_nm_senior_benefits_after_medical_subtotal_deletion(delete_subtotal):
simulation = _simulation("NM", other_expenses=22_000)
simulation = _simulation("NM", other_expenses=22_001)
if delete_subtotal:
simulation.delete_arrays("itemized_medical_expenses", PERIOD)

# The recomputed federal subtotal is 27,000, but restoring its 1,000
# exclusion meets NM's 28,000 paid-cost threshold. Calculate both before
# asserting to preserve evidence.
# The recomputed federal subtotal is 27,001, but restoring its 1,000
# exclusion gives 28,001 of paid costs, which meets the credit's $28,000
# threshold and exceeds the exemption's. Calculate both before asserting
# to preserve evidence.
benefits = tuple(
simulation.calculate(variable, PERIOD).item()
for variable in (
Expand Down
Loading
Loading