Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
1f0cd1b
Make head_is_dependent_elsewhere consumers independent of the head label
MaxGhenis Oct 8, 2026
3ecc675
Keep tax units without a filer eligible where only claimed filers are…
MaxGhenis Oct 9, 2026
8da8312
Address review: Hawaii worksheet earnings, NM same-filer age, childle…
MaxGhenis Oct 9, 2026
e838623
Allow a cent of rounding in the Hawaii self-employed joint pair
MaxGhenis Oct 9, 2026
41fb4a5
Address review round 2: worksheet earnings, minors' own status, input…
MaxGhenis Oct 9, 2026
527d47f
Merge remote-tracking branch 'upstream/main' into head-dependent-else…
MaxGhenis Oct 9, 2026
436805e
Merge the Hawaii deductions references after syncing main
MaxGhenis Oct 9, 2026
23c6229
Apply the federal rules for a filer who can be claimed as a dependent
MaxGhenis Oct 9, 2026
b007fb6
Apply Rhode Island's rules for a filer who can be claimed as a dependent
MaxGhenis Oct 10, 2026
cfb4eb0
Apply South Carolina's rules for a filer who can be claimed as a depe…
MaxGhenis Oct 10, 2026
932ce9e
Apply Utah's rules for a filer who can be claimed as a dependent
MaxGhenis Oct 10, 2026
e7fd1e7
Apply Vermont's rules for a filer who can be claimed as a dependent
MaxGhenis Oct 10, 2026
fb81f9d
Apply West Virginia's rules for a filer who can be claimed as a depen…
MaxGhenis Oct 10, 2026
21d37ba
Apply Wisconsin's rules for a filer who can be claimed as a dependent
MaxGhenis Oct 10, 2026
74a7b9e
Add claimable-filer invariants for RI, SC, UT, VT, WV and WI
MaxGhenis Oct 10, 2026
3c39849
Pay Utah's at-home parent credit once per qualifying child per return
MaxGhenis Oct 10, 2026
52fa346
Phase out Vermont's child tax credit per child
MaxGhenis Oct 10, 2026
d7bea36
Name the nobody-claimed YAML cases as controls
MaxGhenis Oct 10, 2026
52faacf
Quote YAML case names that contain a colon
MaxGhenis Oct 10, 2026
6e4ece4
Count no dependents on a claimable filer's return in the Utah depende…
MaxGhenis Oct 10, 2026
4597c55
Address the federal claimable-filer review
MaxGhenis Oct 10, 2026
e4b8f36
Separate dependency facts and fix Hawaii qualified-person counts
MaxGhenis Oct 10, 2026
c7f969f
Clarify claimability outside the current tax unit
MaxGhenis Oct 10, 2026
4c8ed81
Merge commit 'c7f969f872' into claimable-filer-federal
MaxGhenis Oct 10, 2026
3f88702
Read the split dependency inputs from #10024
MaxGhenis Oct 10, 2026
b2771d2
Follow the corrected exemption count in three Hawaii credits
MaxGhenis Oct 10, 2026
163fcd4
Address the second federal claimable-filer review
MaxGhenis Oct 10, 2026
3d0864f
Address the third federal claimable-filer review
MaxGhenis Oct 10, 2026
35a2cbc
Give the spouse without an SSN a card type in the recovery rebate test
MaxGhenis Oct 10, 2026
1ff76bd
Merge remote-tracking branch 'upstream/claimable-filer-federal' into …
MaxGhenis Oct 11, 2026
bb6c547
Align the six states' gates with the settled claimed/claimable inputs
MaxGhenis Oct 11, 2026
5709bd9
Move the four ungated fixes to #10104 and test the claimed/claimable …
MaxGhenis Oct 11, 2026
a35cdc6
Merge remote-tracking branch 'upstream/main' into claimable-filer-ri-…
MaxGhenis Oct 11, 2026
492c60e
Merge main after federal claimable-filer changes in #10087
MaxGhenis Oct 19, 2026
cabd885
Fix mixed-population claimable-filer calculations
MaxGhenis Oct 19, 2026
bc63f0c
Use filing-exception gate in Vermont exemption fixtures
MaxGhenis Oct 19, 2026
0891442
Repair Wisconsin claimable-filer test fixtures
MaxGhenis Oct 19, 2026
3471faf
Preserve claimability rules in contributed dependent exemptions
MaxGhenis Oct 19, 2026
5ac48d7
Use payroll-adjusted earnings for Wisconsin dependent deductions
MaxGhenis Oct 19, 2026
0d036d2
Add verified Vermont zero-bedroom fair market rents
MaxGhenis Oct 19, 2026
71b1238
Complete claimable-filer coverage and reference corrections
MaxGhenis Oct 19, 2026
2581ede
Preserve claimable filer exemptions in RI and WI reforms
MaxGhenis Oct 19, 2026
a925f5f
Cover joint claimable filers in West Virginia exemption reform
MaxGhenis Oct 19, 2026
d90971a
Disclose Vermont zero bedroom averaging alternatives
MaxGhenis Oct 19, 2026
15a7940
Keep claimable filer case comments attached to their tests
MaxGhenis Oct 19, 2026
5f89df3
Merge current upstream/main into claimable filer state rules
MaxGhenis Oct 20, 2026
a4b2cf4
Apply West Virginia per-filer statutory exemption in childless units
MaxGhenis Oct 20, 2026
fc6bd17
Align West Virginia credit witnesses with per-filer allowances
MaxGhenis Oct 20, 2026
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
7 changes: 7 additions & 0 deletions changelog.d/claimable-filer-ri-sc-ut-vt-wv-wi.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Apply the Rhode Island, South Carolina, Utah, Vermont, West Virginia and Wisconsin rules for a filer who can be claimed as a dependent: dependent exemptions, deductions and child credits on such a return, the Wisconsin dependent standard deduction and $250 exemption, the West Virginia exemptions and family credit, the Rhode Island and Vermont claimant tests for property tax relief and the renter credit, and Wisconsin's care subtraction and credit expenses.

Preserve claimable-filer counts and the dependent-claimant filing exception in the contributed Rhode Island, South Carolina, Utah, Vermont and West Virginia exemption reforms. Preserve the Rhode Island and Wisconsin filer counts under the state dependent exemption repeal. For West Virginia units without dependents, preserve the statutory $500 allowance per claimable filer in the baseline, contributed reform and repeal override; retain existing dependent allocation pending resolution.

Exclude pretax payroll deductions from Wisconsin dependent standard deduction earnings on both tax paths.

Use HUD zero-bedroom rents for zero-exemption Vermont renters in every stored fair market rent year (2021–2025).
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
description: Vermont sets these fair market rent amounts, based on the county and household size.
description: Vermont sets these fair market rent amounts, based on the county and the number of bedrooms allowed by personal exemptions.
metadata:
propagate_metadata_to_children: true
unit: currency-USD
period: month
breakdown:
- list(range(1,9))
- list(range(0,9))
breakdown_labels:
- Household size
- Bedrooms (personal exemptions)
label: Vermont fair market rent amount
reference:
# The values are derived from the renter credit computation tables which represent 10% of the
Expand Down Expand Up @@ -43,9 +43,19 @@ metadata:
href: https://www.huduser.gov/portal/datasets/fmr/fmr2022/FY22_FMRs.xlsx
- title: HUD FY2021 Fair Market Rents
href: https://www.huduser.gov/portal/datasets/fmr/fmr2021/FY21_4050_FMRs_rev.xlsx
- title: "HUD FY2021 Final Fair Market Rent Schedule #page 48-49"
href: https://www.huduser.gov/portal/datasets/fmr/fmr2021/FY2021-ScheduleB.pdf#page=48
- title: "HUD FY2022 Fair Market Rent Schedule #page 48-50"
href: https://www.huduser.gov/portal/datasets/fmr/fmr2022/FY2022_FMR_Schedule.pdf#page=48
- title: "HUD FY2023 Fair Market Rent Schedule #page 49-50"
href: https://www.huduser.gov/portal/datasets/fmr/fmr2023/FY2023_FMR_Schedule.pdf#page=49
- title: "HUD FY2024 Fair Market Rent Schedule #page 51-52"
href: https://www.huduser.gov/portal/datasets/fmr/fmr2024/FY2024_FMR_Schedule.pdf#page=51
- title: "HUD FY2025 Fair Market Rent Schedule #page 51-52"
href: https://www.huduser.gov/portal/datasets/fmr/fmr2025/FY2025_FMR_Schedule.pdf#page=51
# Each county's value is HUD's fair market rent for the fiscal year that includes
# June 30 of the taxable year (FY2025 for 2025), for the county's HUD area, with
# household size n using the min(n, 4)-bedroom rent. Chittenden's 2,083 is the
# exemption count n using the min(n, 4)-bedroom rent. Chittenden's 2,083 is the
# rent at which 10% x 12 reaches the $2,500 maximum the department applies to
# the credit amount (2,500 / 1.2 = 2,083.33).
#
Expand All @@ -64,6 +74,104 @@ metadata:
# - 2023 reconstruction: the average with the Burlington four-bedroom rent
# (2,170) held to 2,083.33 (all 12 unadjusted give 1,913, not the published 1,904).
# - 2025: the unrounded average (1,057.75 x 1.2 = 1,269.3, published 1,269).
# Zero-bedroom rents below are the published HUD 0 BR amounts. Franklin and
# Grand Isle use the unrounded arithmetic mean of all 12 Vermont HUD FMR areas,
# following the state-average rule in 6061(7)(C). This is the averaging convention
# that reproduces the department's unrounded 2025 rents. These zero-bedroom
# values are calculated from HUD schedules rather than department credit tables.
# The unrounded 12-area method is used in every year. It differs from the
# existing 1-4 bedroom reconstructions in 2021 and 2024 (whole-dollar rounding)
# and 2022 (Addison excluded). Applying those alternatives to zero bedrooms
# gives full-year credits of $883 either way in 2021, $919 versus $918 in 2022,
# and $1,172 versus $1,171 in 2024 (this method first); 2023 and 2025 agree.
# A 14-county average instead weights the Burlington area three times and
# gives a 2025 zero-bedroom credit of $1,273 versus this method's $1,209.
# Section 6061(7)(C) does not specify averaging weights or intermediate rounding.
0:
ADDISON_COUNTY_VT:
2021-01-01: 751
2022-01-01: 779
2023-01-01: 842
2024-01-01: 1_017
2025-01-01: 1_096
BENNINGTON_COUNTY_VT:
2021-01-01: 710
2022-01-01: 763
2023-01-01: 849
2024-01-01: 936
2025-01-01: 936
CALEDONIA_COUNTY_VT:
2021-01-01: 708
2022-01-01: 741
2023-01-01: 810
2024-01-01: 899
2025-01-01: 905
CHITTENDEN_COUNTY_VT:
2021-01-01: 1_091
2022-01-01: 1_033
2023-01-01: 1_139
2024-01-01: 1_341
2025-01-01: 1_380
ESSEX_COUNTY_VT:
2021-01-01: 560
2022-01-01: 585
2023-01-01: 730
2024-01-01: 812
2025-01-01: 823
FRANKLIN_COUNTY_VT:
2021-01-01: 736.0833333333334
2022-01-01: 766
2023-01-01: 849.0833333333334
2024-01-01: 976.3333333333334
2025-01-01: 1_007.6666666666666
GRAND_ISLE_COUNTY_VT:
2021-01-01: 736.0833333333334
2022-01-01: 766
2023-01-01: 849.0833333333334
2024-01-01: 976.3333333333334
2025-01-01: 1_007.6666666666666
LAMOILLE_COUNTY_VT:
2021-01-01: 788
2022-01-01: 801
2023-01-01: 874
2024-01-01: 913
2025-01-01: 883
ORANGE_COUNTY_VT:
2021-01-01: 740
2022-01-01: 787
2023-01-01: 852
2024-01-01: 976
2025-01-01: 1_013
ORLEANS_COUNTY_VT:
2021-01-01: 592
2022-01-01: 638
2023-01-01: 706
2024-01-01: 831
2025-01-01: 845
RUTLAND_COUNTY_VT:
2021-01-01: 764
2022-01-01: 814
2023-01-01: 904
2024-01-01: 991
2025-01-01: 992
WASHINGTON_COUNTY_VT:
2021-01-01: 717
2022-01-01: 760
2023-01-01: 839
2024-01-01: 985
2025-01-01: 1_075
WINDHAM_COUNTY_VT:
2021-01-01: 697
2022-01-01: 734
2023-01-01: 803
2024-01-01: 976
2025-01-01: 1_020
WINDSOR_COUNTY_VT:
2021-01-01: 715
2022-01-01: 757
2023-01-01: 841
2024-01-01: 1_039
2025-01-01: 1_124
1:
ADDISON_COUNTY_VT:
2021-01-01: 846
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
description: West Virginia provides an income tax exemption of this value for tax units with no exemptions claimed.
description: West Virginia provides this personal income tax exemption for each individual who is claimable as a dependent on another return.
values:
1987-01-01: 500

metadata:
period: year
unit: currency-USD
label: West Virginia personal exemption
label: West Virginia claimable filer personal exemption
reference:
- title: 1988 West Virginia H.B. 4472, enacted personal exemptions, pages 9-10
href: https://code.wvlegislature.gov/signed_bills/1988/1988-RS-HB4472-SUB%20ENR_signed.pdf#page=9
- title: West Virginia Personal Income Tax Forms And Instructions 2025
href: https://tax.wv.gov/Documents/PIT/2025/it140.PersonalIncomeTaxFormsAndInstructions.2025.pdf#page=26
- title: West Virginia Personal Income Tax Forms And Instructions 2024
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,10 @@ class ri_exemptions(Variable):
def formula(tax_unit, period, parameters):
p = parameters(period).gov.states.ri.tax.income.exemption

exemptions_count = tax_unit("head_spouse_count", period)
# Repeal removes dependents, preserving the baseline filer count.
exemptions_count = tax_unit(
"head_spouse_count_not_dependent_elsewhere", period
)

exemption_amount = exemptions_count * p.amount

Expand Down Expand Up @@ -215,10 +218,26 @@ class wv_personal_exemption(Variable):

def formula(tax_unit, period, parameters):
p = parameters(period).gov.states.wv.tax.income.exemptions
tax_unit_size = tax_unit("head_spouse_count", period)
return where(
tax_unit_size == 0, p.base_personal, p.personal * tax_unit_size
own_exemptions = tax_unit(
"head_spouse_count_not_dependent_elsewhere", period
)
# Repeal preserves each childless claimable filer's statutory $500.
# Leave dependent-present allocation unchanged pending resolution.
person = tax_unit.members
claimable_filers = tax_unit.sum(
person("is_tax_unit_head_or_spouse", period)
& person("claimable_as_dependent_on_another_return", period)
)
filer_allowances = (
p.personal * own_exemptions + p.base_personal * claimable_filers
)
childless_claimable = (tax_unit("tax_unit_dependents", period) == 0) & (
claimable_filers > 0
)
ordinary_amount = where(
own_exemptions == 0, p.base_personal, p.personal * own_exemptions
)
return where(childless_claimable, filer_allowances, ordinary_amount)

class ca_exemptions(Variable):
value_type = float
Expand Down Expand Up @@ -373,7 +392,6 @@ def formula(tax_unit, period, parameters):
)
return exempt_status.base[filing_status] + personal_exemptions_added

# Using head and spouse count instead of exemptions count
class wi_base_exemption(Variable):
value_type = float
entity = TaxUnit
Expand All @@ -392,7 +410,11 @@ class wi_base_exemption(Variable):
def formula(tax_unit, period, parameters):
# compute base exemption amount
p = parameters(period).gov.states.wi.tax.income
return tax_unit("head_spouse_count", period) * p.exemption.base
# Repeal removes dependents, preserving the baseline filer count.
own_exemptions = tax_unit(
"head_spouse_count_not_dependent_elsewhere", period
)
return own_exemptions * p.exemption.base

class de_personal_credit(Variable):
value_type = float
Expand Down
26 changes: 14 additions & 12 deletions policyengine_us/reforms/states/ri/exemption/ri_exemption_reform.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ def formula(tax_unit, period, parameters):

person = tax_unit.members
age = person("age", period)
is_dependent = person("is_tax_unit_dependent", period)
# Retain the baseline dependent taxpayer test and filing exception.
is_dependent = person("is_tax_unit_dependent", period) & ~person.tax_unit(
"head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
)

# Apply age limit if in effect
if p.age_limit.in_effect:
Expand Down Expand Up @@ -83,7 +86,10 @@ class ri_older_dependents_count(Variable):

def formula(tax_unit, period, parameters):
person = tax_unit.members
is_dependent = person("is_tax_unit_dependent", period)
# Retain the baseline dependent taxpayer test and filing exception.
is_dependent = person("is_tax_unit_dependent", period) & ~person.tax_unit(
"head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
)
total_dependents = tax_unit.sum(is_dependent)
eligible_dependent_exemptions = tax_unit(
"ri_eligible_dependents_count", period
Expand All @@ -101,17 +107,13 @@ class ri_exemptions(Variable):
def formula(tax_unit, period, parameters):
p_base = parameters(period).gov.states.ri.tax.income.exemption

# Calculate personal exemptions base amount
filing_status = tax_unit("filing_status", period)
older_dependents = tax_unit("ri_older_dependents_count", period)
personal_exemptions = (
where(
filing_status == filing_status.possible_values.JOINT,
2,
1,
)
+ older_dependents
# Preserve the baseline exclusion of claimable filers, even when
# the filing exception permits them to claim their dependents.
own_exemptions = tax_unit(
"head_spouse_count_not_dependent_elsewhere", period
)
older_dependents = tax_unit("ri_older_dependents_count", period)
personal_exemptions = own_exemptions + older_dependents
personal_exemption_base = personal_exemptions * p_base.amount

# Apply baseline phase-out to personal exemptions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@ def formula(tax_unit, period, parameters):
period
).gov.states.sc.tax.income.deductions.dependent_exemption.amount
person = tax_unit.members
is_dependent = person("is_tax_unit_dependent", period)
# Apply the dependent taxpayer test before either age path,
# preserving the claimant filing exception (IRC 152(b)(1)).
is_dependent = person("is_tax_unit_dependent", period) & ~person.tax_unit(
"head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
)
# Age gate: when in effect, only dependents under the chosen age
# are re-priced to the reform amount; older dependents keep the
# baseline exemption. Otherwise every dependent is re-priced,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,13 @@ def formula(tax_unit, period, parameters):
return p.personal_exemption * total_dependents
person = tax_unit.members
age = person("age", period)
dependent = person("is_tax_unit_dependent", period)
# A return on which the filer (or, if joint, either spouse) can be
# claimed as a dependent has no dependents (IRC 152(b)(1)) outside
# the claimant filing exception, as in the baseline
# ut_total_dependents.
dependent = person("is_tax_unit_dependent", period) & ~person.tax_unit(
"head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
)
# Dependents under the age threshold (all dependents when the
# age limit is off) take the contrib amount; older dependents
# keep the baseline (uprated) personal-exemption amount.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ def formula(tax_unit, period, parameters):

person = tax_unit.members
age = person("age", period)
is_dependent = person("is_tax_unit_dependent", period)
# Retain the baseline dependent taxpayer test and filing exception.
is_dependent = person("is_tax_unit_dependent", period) & ~person.tax_unit(
"head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
)

# Apply age limit if in effect
if p.age_limit.in_effect:
Expand Down Expand Up @@ -49,7 +52,11 @@ class vt_older_dependents_count(Variable):

def formula(tax_unit, period, parameters):
person = tax_unit.members
is_dependent = person("is_tax_unit_dependent", period)
# Mask the fallback too, so disallowed children cannot reappear
# as older dependents after the eligible count is reduced.
is_dependent = person("is_tax_unit_dependent", period) & ~person.tax_unit(
"head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
)
total_dependents = tax_unit.sum(is_dependent)
eligible_dependent_exemptions = tax_unit(
"vt_eligible_dependents_count", period
Expand Down
Loading