Skip to content
Draft
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
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Keep each state's rule for a filer who can be claimed as a dependent on another return in the repeal of state dependent exemptions: Delaware, Hawaii, Nebraska, Rhode Island, Virginia, West Virginia and Wisconsin no longer give such a filer a personal exemption, Vermont's count no longer depends on which spouse is labelled head, and Michigan no longer keeps that return's dependent exemptions when the would-be claimant meets the filing exception.
22 changes: 12 additions & 10 deletions policyengine_us/reforms/state_dependent_exemptions/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,40 @@ The following adjustments have been made in this reform:
Alabama: Neutralize dependent exemptions
California: Remove the dependent exemption structure from `ca_exemptions`
Georgia: Remove the dependent exemption structure from `ga_exemptions`
Hawaii: Change the `exemptions_count` to `head_spouse_count`
Hawaii: Change the `exemptions_count` to `head_spouse_count_not_dependent_elsewhere`
Illinois: Neutralize dependent exemptions
Indiana: Change the `tax_unit_size` to `head_spouse_count`
Iowa: Remove the dependent exemption structure from `ia_exemption_credit`
Kansas: Remove the dependents from the exemption count
Louisiana: Neutralize dependent exemptions
Maryland: Change the `tax_unit_size` to `head_spouse_count`
Massachusetts: Remove the dependent exemption structure from `ma_income_tax_exemption_threshold`
Michigan: Change the `tax_unit_size` to `head_spouse_count`
Michigan: Change the `tax_unit_size` to `head_spouse_count`, and remove the dependents from `mi_exemptions` on a return with a filer who can be claimed as a dependent
Minnesota: Neutralize dependent exemptions
Mississippi: Neutralize dependent exemptions
Montana: Neutralize the dependent exemptions person
Nebraska: Change the `tax_unit_size` to `head_spouse_count`
Nebraska: Change the `exemptions_count` to `head_spouse_count_not_dependent_elsewhere`
New Jersey: Neutralize dependent exemptions
New Mexico: Neutralize the deduction for certain dependents
New York: Neutralize dependent exemptions
North Carolina: Neutralize the child deduction
Ohio: Remove `is_tax_unit_dependent` from the exemption eligibility criteria
Oklahoma: Remove the dependents from the total exemptions
Rhode Island: Change the `exemptions_count` to `head_spouse_count`
Rhode Island: Change the `exemptions_count` to `head_spouse_count_not_dependent_elsewhere`
South Carolina: Neutralize dependent exemptions
Utah: Neutralize the personal exemption amount
Vermont: Remove the dependents from the personal exemptions
Virginia: Only apply the personal exemptions to the head and spouse
West Virginia: Change the `tax_unit_size` to `head_spouse_count`
Wisconsin: Change the `tax_unit_size` to `head_spouse_count`
Vermont: Remove the dependents from the personal exemptions, counting `head_spouse_count_not_dependent_elsewhere`
Virginia: Only apply the personal exemptions to a head or spouse who cannot be claimed as a dependent
West Virginia: Change the `exemptions_count` to `head_spouse_count_not_dependent_elsewhere`
Wisconsin: Change the `exemptions_count` to `head_spouse_count_not_dependent_elsewhere`
Arizona: Neutralize dependent exemptions
Arkansas: Neutralize dependent exemptions
Delaware: Change the `tax_unit_size` to `head_spouse_count`
Delaware: Change the `exemptions_count` to `head_spouse_count_not_dependent_elsewhere`
Idaho: Neutralize dependent exemptions CTC
Iowa: Change the `tax_unit_size` to `head_spouse_count`
Kentucky: Change the `tax_unit_size` in family_size to `head_spouse_count`
Maine: Neutralize dependent exemptions
Nebraska: Change the `tax_unit_size` to `head_spouse_count`
Nebraska: Change the `exemptions_count` to `head_spouse_count_not_dependent_elsewhere`
Oklahoma: Remove CTC portion and update return

Where a state's baseline gives no personal exemption (in Oklahoma, no regular exemption) to a filer who can be claimed as a dependent on another return, the reform keeps that rule: California, Delaware, Hawaii, Kansas before 2024, Maryland, Michigan, Nebraska, Ohio, Oklahoma, Rhode Island, Vermont, Virginia, West Virginia and Wisconsin. Where the baseline lets such a filer keep it, so does the reform: Georgia, Indiana, Iowa, Kansas from 2024, Kentucky's family size and Massachusetts.
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,19 @@ class hi_regular_exemptions(Variable):
defined_for = StateCode.HI

def formula(tax_unit, period, parameters):
exemptions_count = tax_unit("head_spouse_count", period)
# The filers' own exemptions: none for a filer who can be claimed
# as a dependent, as in the baseline (HRS 235-54(a)).
exemptions_count = tax_unit(
"head_spouse_count_not_dependent_elsewhere", period
)
p = parameters(period).gov.states.hi.tax.income.exemptions
# Aged heads and spouses get an extra base exemption.
# Aged heads and spouses who cannot be claimed get an extra base
# exemption.
person = tax_unit.members
head_or_spouse = person("is_tax_unit_head_or_spouse", period)
claimable = person("claimable_as_dependent_on_another_return", period)
aged = person("age", period) >= p.aged_threshold
aged_head_spouse_count = tax_unit.sum(aged & head_or_spouse)
aged_head_spouse_count = tax_unit.sum(aged & head_or_spouse & ~claimable)
total_exemption_count_including_aged = (
exemptions_count + aged_head_spouse_count
)
Expand Down Expand Up @@ -62,6 +68,62 @@ def formula(tax_unit, period, parameters):
)
return exemptions * p.personal

class mi_exemptions(Variable):
value_type = float
entity = TaxUnit
label = "Michigan exemptions"
defined_for = StateCode.MI
unit = USD
definition_period = YEAR
reference = (
"https://www.legislature.mi.gov/Laws/MCL?objectName=mcl-206-30",
"https://www.legislature.mi.gov/Publications/TaxpayerGuide.pdf",
)

def formula(tax_unit, period, parameters):
p = parameters(period).gov.states.mi.tax.income.exemptions

# Personal Exemptions & Stillborn Exemptions
personal_exemption = tax_unit("mi_personal_exemptions", period)

# Disabled exemptions
disabled_people = add(
tax_unit, period, ["mi_disabled_exemption_eligible_person"]
)
disabled_exemption = disabled_people * p.disabled.amount.base

# Disabled veteran exemptions
disabled_veterans = add(
tax_unit, period, ["is_fully_disabled_service_connected_veteran"]
)
disabled_veteran_exemption = disabled_veterans * p.disabled.amount.veteran

# MCL 206.30(4), as in the baseline: a filer who can be claimed as
# a dependent gets no personal exemption but subtracts $1,500, and
# the other spouse keeps their own. The baseline also allows that
# return's dependents when the would-be claimant meets the filing
# exception; the reform repeals those too.
filers = add(tax_unit, period, ["is_tax_unit_head_or_spouse"])
independent_filers = tax_unit(
"head_spouse_count_not_dependent_elsewhere", period
)
dependent_filers = filers - independent_filers
stillborn = tax_unit("tax_unit_stillborn_children", period)
independent_filer_exemptions = (
independent_filers + where(independent_filers > 0, stillborn, 0)
) * p.personal
dependent_filer_exemptions = dependent_filers * p.dependent_on_other_return

return (
where(
dependent_filers > 0,
independent_filer_exemptions + dependent_filer_exemptions,
personal_exemption,
)
+ disabled_exemption
+ disabled_veteran_exemption
)

class ne_exemptions(Variable):
value_type = float
entity = TaxUnit
Expand All @@ -76,7 +138,13 @@ class ne_exemptions(Variable):

def formula(tax_unit, period, parameters):
p = parameters(period).gov.states.ne.tax.income.exemptions
return tax_unit("head_spouse_count", period) * p.amount
# The filers' own credits: none for a filer who can be claimed as
# a dependent (Neb. Rev. Stat. 77-2716.01), as in the baseline's
# federal count.
own_exemptions = tax_unit(
"head_spouse_count_not_dependent_elsewhere", period
)
return own_exemptions * p.amount

class oh_personal_exemptions_eligible_person(Variable):
value_type = bool
Expand Down Expand Up @@ -152,7 +220,11 @@ 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)
# The filers' own exemptions: none for a filer who can be claimed
# as a dependent, as in the baseline's federal count.
exemptions_count = tax_unit(
"head_spouse_count_not_dependent_elsewhere", period
)

exemption_amount = exemptions_count * p.amount

Expand All @@ -178,15 +250,12 @@ class vt_personal_exemptions(Variable):

def formula(tax_unit, period, parameters):
p = parameters(period).gov.states.vt.tax.income.exemption
is_joint = tax_unit("tax_unit_is_joint", period)
elsewhere_head = tax_unit("head_is_dependent_elsewhere", period)
elsewhere_spouse = tax_unit("spouse_is_dependent_elsewhere", period)
eligible_head = (~elsewhere_head).astype(int)
eligible_spouse = (~elsewhere_spouse).astype(int)
eligible_count = eligible_head + (eligible_spouse * is_joint)
# add number of other dependents claimed on federal Form 1040 (line 5c)
total_exemption_count = eligible_count
return total_exemption_count * p.personal
# The filers' own exemptions: one for each head or spouse who
# cannot be claimed as a dependent, whichever spouse is head.
eligible_count = tax_unit(
"head_spouse_count_not_dependent_elsewhere", period
)
return eligible_count * p.personal

class va_personal_exemption_person(Variable):
value_type = float
Expand All @@ -200,9 +269,12 @@ class va_personal_exemption_person(Variable):
)

def formula(person, period, parameters):
# The filers' own exemptions: none for a filer who can be claimed
# as a dependent, as in the baseline (IRC 151(d)(2)).
head_or_spouse = person("is_tax_unit_head_or_spouse", period)
claimable = person("claimable_as_dependent_on_another_return", period)
amount = parameters(period).gov.states.va.tax.income.exemptions.personal
return amount * head_or_spouse
return amount * (head_or_spouse & ~claimable)

class wv_personal_exemption(Variable):
value_type = float
Expand All @@ -211,13 +283,20 @@ class wv_personal_exemption(Variable):
defined_for = StateCode.WV
unit = USD
definition_period = YEAR
reference = "https://code.wvlegislature.gov/11-21/"
reference = "https://code.wvlegislature.gov/11-21-16/"

def formula(tax_unit, period, parameters):
p = parameters(period).gov.states.wv.tax.income.exemptions
tax_unit_size = tax_unit("head_spouse_count", period)
# The filers' own exemptions: none for a filer who can be claimed
# as a dependent, and $500 once per return when no filer has one
# (11-21-16(d)), as in the baseline.
own_exemptions = tax_unit(
"head_spouse_count_not_dependent_elsewhere", period
)
return where(
tax_unit_size == 0, p.base_personal, p.personal * tax_unit_size
own_exemptions == 0,
p.base_personal,
p.personal * own_exemptions,
)

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

# Using head and spouse count instead of exemptions count
# Counting the filers' own exemptions instead of all exemptions
class wi_base_exemption(Variable):
value_type = float
entity = TaxUnit
Expand All @@ -390,9 +469,13 @@ class wi_base_exemption(Variable):
defined_for = StateCode.WI

def formula(tax_unit, period, parameters):
# compute base exemption amount
# compute base exemption amount: none for a filer who can be
# claimed as a dependent, as in the baseline's federal count
p = parameters(period).gov.states.wi.tax.income
return tax_unit("head_spouse_count", period) * p.exemption.base
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 All @@ -405,8 +488,12 @@ class de_personal_credit(Variable):

def formula(tax_unit, period, parameters):
p = parameters(period).gov.states.de.tax.income.credits
head_spouse_count = tax_unit("head_spouse_count", period)
return p.personal_credits.personal * head_spouse_count
# The filers' own credits: none for a filer who can be claimed as
# a dependent, as in the baseline's federal count.
own_exemptions = tax_unit(
"head_spouse_count_not_dependent_elsewhere", period
)
return p.personal_credits.personal * own_exemptions

class ky_family_size_tax_credit_threshold(Variable):
value_type = float
Expand Down Expand Up @@ -480,6 +567,7 @@ def apply(self):
self.update_variable(hi_regular_exemptions)
self.update_variable(md_total_personal_exemptions)
self.update_variable(mi_personal_exemptions)
self.update_variable(mi_exemptions)
self.update_variable(ne_exemptions)
self.update_variable(oh_personal_exemptions_eligible_person)
self.update_variable(ok_count_exemptions)
Expand Down
Loading