Skip to content
Merged
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
4 changes: 4 additions & 0 deletions changelog_entry.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
- bump: patch
changes:
fixed:
- Reduce the itemized deductions in Idaho by the SALT amount.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
- name: Itemizes
period: 2023
input:
itemized_deductions_less_salt: 1_000
id_itemized_deductions: 1_000
standard_deduction: 500
state_code: ID
output:
Expand All @@ -10,7 +10,7 @@
- name: Does not itemize
period: 2023
input:
itemized_deductions_less_salt: 500
id_itemized_deductions: 500
standard_deduction: 1_000
state_code: ID
output:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
- name: Itemized deductions over ID salt
period: 2023
input:
id_salt_deduction: 1_000
itemized_taxable_income_deductions: 1_600
state_code: ID
output:
id_itemized_deductions: 600

- name: Itemized deductions under ID salt
period: 2023
input:
id_salt_deduction: 2_000
itemized_taxable_income_deductions: 1_600
state_code: ID
output:
id_itemized_deductions: 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
- name: SALT and real estate tax under cap, joint
period: 2023
input:
state_and_local_sales_or_income_tax: 8_000
real_estate_taxes: 1_600
filing_status: JOINT
state_code: ID
output:
id_salt_deduction: 8_000

- name: SALT and real estate tax over cap, joint
period: 2023
input:
state_and_local_sales_or_income_tax: 8_000
real_estate_taxes: 2_600
filing_status: JOINT
state_code: ID
output:
id_salt_deduction: 7_400

- name: Capped at 0
period: 2023
input:
state_and_local_sales_or_income_tax: 8_000
real_estate_taxes: 10_100
filing_status: JOINT
state_code: ID
output:
id_salt_deduction: 0

- name: SALT and real estate tax over cap, separate
period: 2023
input:
state_and_local_sales_or_income_tax: 8_000
real_estate_taxes: 1_600
filing_status: SEPARATE
state_code: ID
output:
id_salt_deduction: 3_400
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,49 @@
state_fips: 16 # ID
output: # expected results from patched TAXSIM35 2024-02-19 version
id_income_tax: 23411.29

- name: Tax unit with taxsimid 58820 in k21.its.csv and k21.ots.csv
absolute_error_margin: 0.01
period: 2021
input:
people:
person1:
age: 56
employment_income: 110010
qualified_dividend_income: 1005
taxable_interest_income: 5505
short_term_capital_gains: 3505
long_term_capital_gains: 1505
rental_income: 1005
taxable_private_pension_income: 2500
real_estate_taxes: 4000
mortgage_interest: 36000
self_employment_income: 127010
business_is_qualified: true
business_is_sstb: false
w2_wages_from_qualified_business: 100e6
person2:
age: 56
employment_income: 141010
qualified_dividend_income: 1005
taxable_interest_income: 5505
short_term_capital_gains: 3505
long_term_capital_gains: 1505
rental_income: 1005
taxable_private_pension_income: 2500
tax_units:
tax_unit:
members: [person1, person2]
tax_unit_itemizes: True
state_income_tax: 21664.05
spm_units:
spm_unit:
members: [person1, person2]
snap: 0 # not in TAXSIM35
tanf: 0 # not in TAXSIM35
households:
household:
members: [person1, person2]
state_fips: 16 # ID
output: # expected results from patched TAXSIM35 2024-03-17 version
id_income_tax: 21404.06
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class id_deductions(Variable):
defined_for = StateCode.ID

def formula(tax_unit, period, parameters):
itm_ded = tax_unit("itemized_deductions_less_salt", period)
itm_ded = tax_unit("id_itemized_deductions", period)
std_ded = tax_unit("standard_deduction", period)
# We do not model qualified business income deduction for Idaho
return max_(itm_ded, std_ded)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from policyengine_us.model_api import *


class id_itemized_deductions(Variable):
value_type = float
entity = TaxUnit
label = "Idaho itemized deductions"
unit = USD
definition_period = YEAR
reference = (
"https://tax.idaho.gov/wp-content/uploads/forms/EIN00046/EIN00046_03-01-2023.pdf#page=8",
"https://tax.idaho.gov/wp-content/uploads/forms/EFO00089/EFO00089_09-23-2021.pdf",
)
defined_for = StateCode.ID

def formula(tax_unit, period, parameters):
# Idaho reduces the federal itemized deductions
# by the amount of the SALT deduction
id_salt_ded = tax_unit("id_salt_deduction", period)
itemized_ded = tax_unit("itemized_taxable_income_deductions", period)
return max_(itemized_ded - id_salt_ded, 0)
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from policyengine_us.model_api import *


class id_salt_deduction(Variable):
value_type = float
entity = TaxUnit
label = "Idaho SALT deduction"
unit = USD
definition_period = YEAR
reference = "https://tax.idaho.gov/wp-content/uploads/forms/EIN00046/EIN00046_03-01-2023.pdf#page=8"
defined_for = StateCode.ID

def formula(tax_unit, period, parameters):
state_and_local_tax = tax_unit(
"state_and_local_sales_or_income_tax", period
)
# If the salt amount is above the federal cap, Idaho applies separate limitations
filing_status = tax_unit("filing_status", period)
cap = parameters(
period
).gov.irs.deductions.itemized.salt_and_real_estate.cap[filing_status]
# Federal Schedule A line 5b - State and local real estate taxes
# Federal Schedule A line 5c - State and local personal property taxes
real_estate_taxes = add(tax_unit, period, ["real_estate_taxes"])
salt_and_real_estate_tax = state_and_local_tax + real_estate_taxes
salt_above_cap = salt_and_real_estate_tax > cap
reduced_cap = max_(cap - real_estate_taxes, 0)
return where(salt_above_cap, reduced_cap, state_and_local_tax)