Skip to content

Commit

Permalink
Iowa Itemized and Standard Deduction Changes for 2023 (#4952)
Browse files Browse the repository at this point in the history
* Iowa Standard Deduction Changes for 2023
Fixes #4935

* variable and test

* remove extra

* format

* legal code and format

* typo

* format
  • Loading branch information
PavelMakarchuk authored Sep 17, 2024
1 parent 3c8832f commit a6fdb52
Show file tree
Hide file tree
Showing 13 changed files with 182 additions and 9 deletions.
4 changes: 4 additions & 0 deletions changelog_entry.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
- bump: minor
changes:
added:
- Apply the federal standard and itemized deductions in Iowa from 2023 on.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ description: Maximum amount of state and local income, sales and real estate tax
metadata:
unit: currency-USD
period: year
name: salt_cap
label: SALT cap
HEAD_OF_HOUSEHOLD:
values:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
description: Iowa applies the federal itemized deduction if this is true.
values:
0000-01-01: false
2023-01-01: true

metadata:
label: Iowa federal itemized deduction applies
period: year
unit: bool
reference:
- title: Iowa Department of Revenue - 2023 IA1040 Income Tax Return instructions - Iowa Taxable Income
href: https://revenue.iowa.gov/taxes/tax-guidance/individual-income-tax/1040-expanded-instructions/iowa-taxable-income
# The legal code does not represent the current policy according to the 2023 IA1040 instructions.
- title: Iowa Admin. Code Rule 701-303.4 - Optional standard deduction
href: https://www.legis.iowa.gov/docs/iac/agency/01-24-2024.701.pdf#page=1019
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
description: Iowa applies the federal standard deduction if this is true.
values:
0000-01-01: false
2023-01-01: true

metadata:
label: Iowa federal standard deduction applies
period: year
unit: bool
reference:
- title: Iowa Department of Revenue - 2023 IA1040 Income Tax Return instructions - Iowa Taxable Income
href: https://revenue.iowa.gov/taxes/tax-guidance/individual-income-tax/1040-expanded-instructions/iowa-taxable-income
# The legal code does not represent the current policy according to the 2023 IA1040 instructions.
- title: Iowa Individual Income, Corporate, and Franchise Taxes, §422.5 3(a)
href: https://www.legis.iowa.gov/docs/iac/agency/01-24-2024.701.pdf#page=1019
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,21 @@
state_code: IA
output:
ia_itemized_deductions_unit: 30_000

- name: Capped SALT deduction post 2023
period: 2023
input:
real_estate_taxes: 11_000
state_code: IA
filing_status: JOINT
output:
ia_itemized_deductions_unit: 10_000

- name: Uncapped SALT deduction pre 2023
period: 2022
input:
real_estate_taxes: 11_000
state_code: IA
filing_status: JOINT
output:
ia_itemized_deductions_unit: 11_000
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,73 @@
state_code: IA
output:
ia_standard_deduction_indiv: 2_210

- name: IA standard deduction indiv unit test 5 (Single 2023)
period: 2023
input:
people:
person1:
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
filing_status: SINGLE
households:
household:
members: [person1]
state_code: IA
output:
ia_standard_deduction_indiv: 13_850

- name: IA standard deduction indiv unit test 6 (Married Filing Jointly 2023)
period: 2023
input:
people:
person1:
is_tax_unit_head: true
person2:
is_tax_unit_spouse: true
tax_units:
tax_unit:
members: [person1, person2]
filing_status: JOINT
households:
household:
members: [person1, person2]
state_code: IA
output:
ia_standard_deduction_indiv: [13_850, 13_850]

- name: IA standard deduction indiv unit test 7 (Head of Household 2023)
period: 2023
input:
people:
person1:
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
filing_status: HEAD_OF_HOUSEHOLD
households:
household:
members: [person1]
state_code: IA
output:
ia_standard_deduction_indiv: 20_800

- name: IA standard deduction indiv unit test 8 (Married Filing Separately 2023)
period: 2023
input:
people:
person1:
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
filing_status: SEPARATE
households:
household:
members: [person1]
state_code: IA
output:
ia_standard_deduction_indiv: 13_850
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,20 @@
output:
ia_standard_deduction_joint: 5_450

- name: Federal standard deduction applies, hoh
absolute_error_margin: 0.01
period: 2023
input:
filing_status: HEAD_OF_HOUSEHOLD
state_code: IA
output:
ia_standard_deduction_joint: 20_800

- name: Federal standard deduction applies, joint
absolute_error_margin: 0.01
period: 2023
input:
filing_status: JOINT
state_code: IA
output:
ia_standard_deduction_joint: 27_700
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,13 @@
state_code: IA
output:
ia_withheld_income_tax: 0

- name: Federal deduction from 2023 on
period: 2023
absolute_error_margin: 0.01
input:
irs_employment_income: 10_000
filing_status: JOINT
state_code: IA
output:
ia_withheld_income_tax: 0
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ def formula(tax_unit, period, parameters):
federal dollar limitation.
"""
# compute tax unit's itemized deductions
itm_deds_less_salt = tax_unit("itemized_deductions_less_salt", period)
uncapped_property_taxes = add(tax_unit, period, ["real_estate_taxes"])
return itm_deds_less_salt + uncapped_property_taxes
p = parameters(period).gov.states.ia.tax.income.deductions.itemized
if p.applies_federal:
p_fed = parameters(period).gov.irs.deductions
return add(tax_unit, period, p_fed.itemized_deductions)
else:
return add(
tax_unit,
period,
["itemized_deductions_less_salt", "real_estate_taxes"],
)
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,12 @@ def formula(person, period, parameters):
)
is_head = person("is_tax_unit_head", period)
is_spouse = person("is_tax_unit_spouse", period)
p = parameters(period).gov.states.ia.tax.income
return (is_head | is_spouse) * p.deductions.standard[filing_status]
p = parameters(period).gov.states.ia.tax.income.deductions.standard

if p.applies_federal:
fed_p = parameters(period).gov.irs.deductions
deduction = fed_p.standard.amount[filing_status]
else:
deduction = p.amount[filing_status]

return person("is_tax_unit_head_or_spouse", period) * deduction
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,14 @@ class ia_standard_deduction_joint(Variable):
defined_for = StateCode.IA

def formula(person, period, parameters):
is_head = person("is_tax_unit_head", period)
filing_status = person.tax_unit("filing_status", period)
is_head = person("is_tax_unit_head", period)
p = parameters(period).gov.states.ia.tax.income
return is_head * p.deductions.standard[filing_status]

if p.deductions.standard.applies_federal:
fed_p = parameters(period).gov.irs.deductions
deduction = fed_p.standard.amount[filing_status]
else:
deduction = p.deductions.standard.amount[filing_status]

return is_head * deduction
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ def formula(person, period, parameters):
employment_income = person("irs_employment_income", period)
p = parameters(period).gov.states.ia.tax.income
# We apply the base standard deduction amount
standard_deduction = p.deductions.standard["SINGLE"]
if p.deductions.standard.applies_federal:
p_fed = parameters(period).gov.irs.deductions
standard_deduction = p_fed.standard.amount["SINGLE"]
else:
standard_deduction = p.deductions.standard.amount["SINGLE"]
reduced_employment_income = max_(
employment_income - standard_deduction, 0
)
Expand Down

0 comments on commit a6fdb52

Please sign in to comment.