diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..c307b2bc89a 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + added: + - Add multiple state exemptions to the repeal of state dependent exemptions reform. diff --git a/policyengine_us/parameters/gov/states/ut/tax/income/credits/taxpayer/personal_exemption.yaml b/policyengine_us/parameters/gov/states/ut/tax/income/credits/taxpayer/personal_exemption.yaml index eb83e1c4eb6..b4ba9255f7f 100644 --- a/policyengine_us/parameters/gov/states/ut/tax/income/credits/taxpayer/personal_exemption.yaml +++ b/policyengine_us/parameters/gov/states/ut/tax/income/credits/taxpayer/personal_exemption.yaml @@ -15,4 +15,3 @@ metadata: href: https://www.taxformfinder.org/forms/2021/2021-utah-tc-40-full-packet.pdf#page=9 - title: 2023 TC-40 Utah Individual Income Tax Form (Line 11) href: https://tax.utah.gov/forms/current/tc-40inst.pdf#page=10 - diff --git a/policyengine_us/reforms/state_dependent_exemptions/README.md b/policyengine_us/reforms/state_dependent_exemptions/README.md index 3f8da28f236..e7f75fecef4 100644 --- a/policyengine_us/reforms/state_dependent_exemptions/README.md +++ b/policyengine_us/reforms/state_dependent_exemptions/README.md @@ -1,25 +1,30 @@ 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` +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` +Minnesota: Neutralize dependent exemptions +Mississippi: Neutralize dependent exemptions +Montana: Neutralize the dependent exemptions person Nebraska: Change the `tax_unit_size` to `head_spouse_count` +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` +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` -California: Remove the dependent exemption structure from `ca_exemptions` -Georgia: Remove the dependent exemption structure from `ga_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 -Massachusetts: Remove the dependent exemption structure from `ma_income_tax_exemption_threshold` -Alabama: Neutralize dependent exemptions -Illinois: Neutralize dependent exemptions -Louisiana: Neutralize dependent exemptions -Minnesota: Neutralize dependent exemptions -Mississippi: Neutralize dependent exemptions -New Jersey: Neutralize dependent exemptions -New York: Neutralize dependent exemptions -South Carolina: Neutralize dependent exemptions \ No newline at end of file +Wisconsin: Change the `tax_unit_size` to `head_spouse_count` diff --git a/policyengine_us/reforms/state_dependent_exemptions/repeal_state_dependent_exemptions.py b/policyengine_us/reforms/state_dependent_exemptions/repeal_state_dependent_exemptions.py index 812b39fc3f6..32930ae4f6c 100644 --- a/policyengine_us/reforms/state_dependent_exemptions/repeal_state_dependent_exemptions.py +++ b/policyengine_us/reforms/state_dependent_exemptions/repeal_state_dependent_exemptions.py @@ -371,6 +371,27 @@ def formula(tax_unit, period, parameters): 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 + label = "Wisconsin base exemption" + unit = USD + definition_period = YEAR + reference = ( + "https://www.revenue.wi.gov/TaxForms2021/2021-Form1f.pdf" + "https://www.revenue.wi.gov/TaxForms2021/2021-Form1-Inst.pdf" + "https://www.revenue.wi.gov/TaxForms2022/2022-Form1f.pdf" + "https://www.revenue.wi.gov/TaxForms2022/2022-Form1-Inst.pdf" + "https://docs.legis.wisconsin.gov/misc/lfb/informational_papers/january_2023/0002_individual_income_tax_informational_paper_2.pdf" + ) + defined_for = StateCode.WI + + 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 + class reform(Reform): def apply(self): self.neutralize_variable("al_dependent_exemption") @@ -381,6 +402,10 @@ def apply(self): self.neutralize_variable("nj_dependents_exemption") self.neutralize_variable("ny_exemptions") self.neutralize_variable("sc_dependent_exemption") + self.neutralize_variable("ut_personal_exemption") + self.neutralize_variable("nc_child_deduction") + self.neutralize_variable("nm_deduction_for_certain_dependents") + self.neutralize_variable("mt_dependent_exemptions_person") self.update_variable(hi_regular_exemptions) self.update_variable(md_total_personal_exemptions) self.update_variable(mi_personal_exemptions) @@ -397,6 +422,7 @@ def apply(self): self.update_variable(ia_exemption_credit) self.update_variable(ks_count_exemptions) self.update_variable(ma_income_tax_exemption_threshold) + self.update_variable(wi_base_exemption) return reform diff --git a/policyengine_us/tests/policy/baseline/gov/states/wi/tax/income/wi_additional_exemption.yaml b/policyengine_us/tests/policy/baseline/gov/states/wi/tax/income/wi_additional_exemption.yaml new file mode 100644 index 00000000000..c97d3f5d799 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wi/tax/income/wi_additional_exemption.yaml @@ -0,0 +1,25 @@ +- name: Aged head + period: 2022 + input: + age_head: 65 + state_code: WI + output: + wi_additional_exemption: 250 + +- name: Aged head and aged spouse + period: 2022 + input: + age_head: 65 + age_spouse: 65 + state_code: WI + output: + wi_additional_exemption: 500 + +- name: No aged head or aged spouse + period: 2022 + input: + age_head: 64 + age_spouse: 64 + state_code: WI + output: + wi_additional_exemption: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/wi/tax/income/wi_base_exemption.yaml b/policyengine_us/tests/policy/baseline/gov/states/wi/tax/income/wi_base_exemption.yaml new file mode 100644 index 00000000000..9e54d8bd87f --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/wi/tax/income/wi_base_exemption.yaml @@ -0,0 +1,7 @@ +- name: WI exemption unit test 1 + period: 2021 + input: + exemptions_count: 5 + state_code: WI + output: + wi_base_exemption: 5 * 700 diff --git a/policyengine_us/variables/gov/states/wi/tax/income/wi_exemption.py b/policyengine_us/variables/gov/states/wi/tax/income/exemptions/wi_additional_exemption.py similarity index 74% rename from policyengine_us/variables/gov/states/wi/tax/income/wi_exemption.py rename to policyengine_us/variables/gov/states/wi/tax/income/exemptions/wi_additional_exemption.py index 5a970e46f67..7e8a816efbc 100644 --- a/policyengine_us/variables/gov/states/wi/tax/income/wi_exemption.py +++ b/policyengine_us/variables/gov/states/wi/tax/income/exemptions/wi_additional_exemption.py @@ -1,10 +1,10 @@ from policyengine_us.model_api import * -class wi_exemption(Variable): +class wi_additional_exemption(Variable): value_type = float entity = TaxUnit - label = "Wisconsin exemption" + label = "Wisconsin additional exemption" unit = USD definition_period = YEAR reference = ( @@ -17,16 +17,12 @@ class wi_exemption(Variable): defined_for = StateCode.WI def formula(tax_unit, period, parameters): - # compute base exemption amount - p = parameters(period).gov.states.wi.tax.income - base_amount = tax_unit("exemptions_count", period) * p.exemption.base # compute extra exemption amount + p = parameters(period).gov.states.wi.tax.income elderly_head = ( tax_unit("age_head", period) >= p.exemption.old_age ).astype(int) elderly_spouse = ( tax_unit("age_spouse", period) >= p.exemption.old_age ).astype(int) - extra_amount = (elderly_head + elderly_spouse) * p.exemption.extra - # return total exemption amount - return base_amount + extra_amount + return (elderly_head + elderly_spouse) * p.exemption.extra diff --git a/policyengine_us/variables/gov/states/wi/tax/income/exemptions/wi_base_exemption.py b/policyengine_us/variables/gov/states/wi/tax/income/exemptions/wi_base_exemption.py new file mode 100644 index 00000000000..87f3b253eb6 --- /dev/null +++ b/policyengine_us/variables/gov/states/wi/tax/income/exemptions/wi_base_exemption.py @@ -0,0 +1,22 @@ +from policyengine_us.model_api import * + + +class wi_base_exemption(Variable): + value_type = float + entity = TaxUnit + label = "Wisconsin base exemption" + unit = USD + definition_period = YEAR + reference = ( + "https://www.revenue.wi.gov/TaxForms2021/2021-Form1f.pdf" + "https://www.revenue.wi.gov/TaxForms2021/2021-Form1-Inst.pdf" + "https://www.revenue.wi.gov/TaxForms2022/2022-Form1f.pdf" + "https://www.revenue.wi.gov/TaxForms2022/2022-Form1-Inst.pdf" + "https://docs.legis.wisconsin.gov/misc/lfb/informational_papers/january_2023/0002_individual_income_tax_informational_paper_2.pdf" + ) + defined_for = StateCode.WI + + def formula(tax_unit, period, parameters): + # compute base exemption amount + p = parameters(period).gov.states.wi.tax.income + return tax_unit("exemptions_count", period) * p.exemption.base diff --git a/policyengine_us/variables/gov/states/wi/tax/income/exemptions/wi_exemption.py b/policyengine_us/variables/gov/states/wi/tax/income/exemptions/wi_exemption.py new file mode 100644 index 00000000000..f207e917134 --- /dev/null +++ b/policyengine_us/variables/gov/states/wi/tax/income/exemptions/wi_exemption.py @@ -0,0 +1,19 @@ +from policyengine_us.model_api import * + + +class wi_exemption(Variable): + value_type = float + entity = TaxUnit + label = "Wisconsin exemption" + unit = USD + definition_period = YEAR + reference = ( + "https://www.revenue.wi.gov/TaxForms2021/2021-Form1f.pdf" + "https://www.revenue.wi.gov/TaxForms2021/2021-Form1-Inst.pdf" + "https://www.revenue.wi.gov/TaxForms2022/2022-Form1f.pdf" + "https://www.revenue.wi.gov/TaxForms2022/2022-Form1-Inst.pdf" + "https://docs.legis.wisconsin.gov/misc/lfb/informational_papers/january_2023/0002_individual_income_tax_informational_paper_2.pdf" + ) + defined_for = StateCode.WI + + adds = ["wi_base_exemption", "wi_additional_exemption"]