From cfda5a9fdd663a245916bb5b1acddc49998528a1 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Fri, 4 Aug 2023 20:55:43 +0200 Subject: [PATCH 01/35] Idaho Deduction for dependents 65 or older with development disabilities Fixes #2775 --- .../development_disabilities/age_eligibility.yaml | 10 ++++++++++ .../deductions/development_disabilities/amount.yaml | 10 ++++++++++ .../development_disabilities/max_deduction.yaml | 10 ++++++++++ 3 files changed, 30 insertions(+) create mode 100644 policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/age_eligibility.yaml create mode 100644 policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/amount.yaml create mode 100644 policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/max_deduction.yaml diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/age_eligibility.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/age_eligibility.yaml new file mode 100644 index 00000000000..cae26c7aef4 --- /dev/null +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/age_eligibility.yaml @@ -0,0 +1,10 @@ +description: Idaho provides the development disabilities deduction for members of the taxpayers at or above this age threshold. +values: + 2021-01-01: 65 +metadata: + reference: + - title: Idaho Title 63, Chapter 30, 63-3022E., (1) + href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ + unit: year + label: Idaho development disabilities deduction age eligibility + period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/amount.yaml new file mode 100644 index 00000000000..c385b41950e --- /dev/null +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/amount.yaml @@ -0,0 +1,10 @@ +description: Idaho provides the following development disabilities deduction amount for members of the taxpayers household. +values: + 2021-01-01: 1_000 +metadata: + reference: + - title: Idaho Title 63, Chapter 30, 63-3022E., (1) + href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ + unit: currency-USD + label: Idaho development disabilities deduction amount + period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/max_deduction.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/max_deduction.yaml new file mode 100644 index 00000000000..15e62da9cc2 --- /dev/null +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/max_deduction.yaml @@ -0,0 +1,10 @@ +description: Idaho provides the following development disabilities maximum deductions. +values: + 2021-01-01: 3 +metadata: + reference: + - title: Idaho Title 63, Chapter 30, 63-3022E., (1) + href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ + unit: deduction + label: Idaho development disabilities deduction max amount + period: year From 248d9b77eb07d3caf37585ce1624c0da0883a32d Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Fri, 4 Aug 2023 20:58:23 +0200 Subject: [PATCH 02/35] rename file --- .../{max_deduction.yaml => max_amount.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/{max_deduction.yaml => max_amount.yaml} (100%) diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/max_deduction.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/max_amount.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/max_deduction.yaml rename to policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/max_amount.yaml From dc9b52b45f59da685967ef55c14e44e42db5d585 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Fri, 18 Aug 2023 22:00:22 +0300 Subject: [PATCH 03/35] eligibility criteria Co-authored-by: jialyu0411 --- .../id_aged_or_disabled_deduction.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py diff --git a/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py b/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py new file mode 100644 index 00000000000..3268ca9b597 --- /dev/null +++ b/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py @@ -0,0 +1,19 @@ +from policyengine_us.model_api import * + + +class id_aged_or_disabled_deduction(Variable): + value_type = float + entity = TaxUnit + label = "Idaho aged or disabled deduction" + unit = USD + definition_period = YEAR + defined_for = StateCode.ID + + def formula(tax_unit, period, parameters): + person = tax_unit.members + age = person("age", period) + disabled = person("is_disabled", period) + p = parameters(period).gov.states.id.tax.income.deductions.developmental_disability + age_eligible = age >= p.age_eligibility + eligible = age_eligible | disabled + total_eligible = tax_unit.sum(eligible) \ No newline at end of file From eb48719d2d8e4554b19f7ae912be9c7717c355f8 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Wed, 23 Aug 2023 20:52:53 +0300 Subject: [PATCH 04/35] test and final variable --- changelog_entry.yaml | 4 ++ .../id_aged_or_disabled_deduction.yaml | 56 +++++++++++++++++++ .../id_aged_or_disabled_deduction.py | 8 ++- 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..b99990577cb 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + added: + - Idaho aged and disbaled deduction. diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml new file mode 100644 index 00000000000..e01133ac6c5 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml @@ -0,0 +1,56 @@ +- name: One eligible person + period: 2023 + input: + people: + person1: + is_disabled: false + age: 64 + person2: + is_disabled: false + age: 65 + households: + household: + members: [person1, person2] + state_code: ID + output: + id_aged_or_disabled_deduction: 1_000 + +- name: Four eligible people - capped at 3 + period: 2023 + input: + people: + person1: + is_disabled: true + age: 64 + person2: + is_disabled: false + age: 65 + person3: + is_disabled: true + age: 64 + person4: + is_disabled: false + age: 65 + households: + household: + members: [person1, person2, person3, person4] + state_code: ID + output: + id_aged_or_disabled_deduction: 3_000 + +- name: No eligible people + period: 2023 + input: + people: + person1: + is_disabled: false + age: 64 + person2: + is_disabled: false + age: 64 + households: + household: + members: [person1, person2] + state_code: ID + output: + id_aged_or_disabled_deduction: 0 diff --git a/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py b/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py index 3268ca9b597..0f6b9dafb42 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py +++ b/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py @@ -13,7 +13,11 @@ def formula(tax_unit, period, parameters): person = tax_unit.members age = person("age", period) disabled = person("is_disabled", period) - p = parameters(period).gov.states.id.tax.income.deductions.developmental_disability + p = parameters( + period + ).gov.states.id.tax.income.deductions.development_disabilities age_eligible = age >= p.age_eligibility eligible = age_eligible | disabled - total_eligible = tax_unit.sum(eligible) \ No newline at end of file + total_eligible = tax_unit.sum(eligible) + capped_eligible = min_(total_eligible, p.max_amount) + return capped_eligible * p.amount From 9e5840d29df612d92ccd0a0703944e46aeca1333 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Wed, 23 Aug 2023 23:34:13 +0300 Subject: [PATCH 05/35] variable adj. --- .../age_eligibility.yaml | 2 + .../amount.yaml | 4 +- .../max_deductions.yaml} | 2 + .../id_aged_or_disabled_deduction.yaml | 77 +++++++++++++++++++ .../id_aged_or_disabled_deduction.py | 8 +- 5 files changed, 89 insertions(+), 4 deletions(-) rename policyengine_us/parameters/gov/states/id/tax/income/deductions/{development_disabilities => aged_or_disabled}/age_eligibility.yaml (69%) rename policyengine_us/parameters/gov/states/id/tax/income/deductions/{development_disabilities => aged_or_disabled}/amount.yaml (66%) rename policyengine_us/parameters/gov/states/id/tax/income/deductions/{development_disabilities/max_amount.yaml => aged_or_disabled/max_deductions.yaml} (67%) diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/age_eligibility.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml similarity index 69% rename from policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/age_eligibility.yaml rename to policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml index cae26c7aef4..404e86b4091 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/age_eligibility.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml @@ -5,6 +5,8 @@ metadata: reference: - title: Idaho Title 63, Chapter 30, 63-3022E., (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ + - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 unit: year label: Idaho development disabilities deduction age eligibility period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml similarity index 66% rename from policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/amount.yaml rename to policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml index c385b41950e..50e1de66417 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml @@ -1,10 +1,12 @@ description: Idaho provides the following development disabilities deduction amount for members of the taxpayers household. values: - 2021-01-01: 1_000 + 1999-01-01: 1_000 metadata: reference: - title: Idaho Title 63, Chapter 30, 63-3022E., (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ + - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 unit: currency-USD label: Idaho development disabilities deduction amount period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/max_amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml similarity index 67% rename from policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/max_amount.yaml rename to policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml index 15e62da9cc2..a204d0dd6ce 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/development_disabilities/max_amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml @@ -5,6 +5,8 @@ metadata: reference: - title: Idaho Title 63, Chapter 30, 63-3022E., (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ + - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 unit: deduction label: Idaho development disabilities deduction max amount period: year diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml index e01133ac6c5..131d49930bb 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml @@ -4,9 +4,12 @@ people: person1: is_disabled: false + is_tax_unit_head: false age: 64 person2: is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false age: 65 households: household: @@ -21,15 +24,23 @@ people: person1: is_disabled: true + is_tax_unit_spouse: false + is_tax_unit_head: false age: 64 person2: is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false age: 65 person3: is_disabled: true + is_tax_unit_spouse: false + is_tax_unit_head: false age: 64 person4: is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false age: 65 households: household: @@ -44,9 +55,13 @@ people: person1: is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false age: 64 person2: is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false age: 64 households: household: @@ -54,3 +69,65 @@ state_code: ID output: id_aged_or_disabled_deduction: 0 + +- name: Head and Spouse are not eligible if aged + period: 2023 + input: + people: + person1: + is_disabled: true + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 64 + person2: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: true + age: 65 + person3: + is_disabled: true + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 64 + person4: + is_disabled: false + is_tax_unit_spouse: true + is_tax_unit_head: false + age: 65 + households: + household: + members: [person1, person2, person3, person4] + state_code: ID + output: + id_aged_or_disabled_deduction: 2_000 + +- name: Head and Spouse are not eligible if aged but are eligible if disabled + period: 2023 + input: + people: + person1: + is_disabled: true + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 64 + person2: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: true + age: 65 + person3: + is_disabled: true + is_tax_unit_spouse: true + is_tax_unit_head: false + age: 64 + person4: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 65 + households: + household: + members: [person1, person2, person3, person4] + state_code: ID + output: + id_aged_or_disabled_deduction: 3_000 \ No newline at end of file diff --git a/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py b/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py index 0f6b9dafb42..eb65e562f94 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py +++ b/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py @@ -12,12 +12,14 @@ class id_aged_or_disabled_deduction(Variable): def formula(tax_unit, period, parameters): person = tax_unit.members age = person("age", period) + head = person("is_tax_unit_head", period) + spouse = person("is_tax_unit_spouse", period) disabled = person("is_disabled", period) p = parameters( period - ).gov.states.id.tax.income.deductions.development_disabilities - age_eligible = age >= p.age_eligibility + ).gov.states.id.tax.income.deductions.aged_or_disabled + age_eligible = (age >= p.age_eligibility) & ~(head | spouse) eligible = age_eligible | disabled total_eligible = tax_unit.sum(eligible) - capped_eligible = min_(total_eligible, p.max_amount) + capped_eligible = min_(total_eligible, p.max_deductions) return capped_eligible * p.amount From d2598302adb21b13c6b9d38ad0da497f05d20a2b Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Thu, 19 Oct 2023 22:21:22 +0000 Subject: [PATCH 06/35] check before 2021 reference; add to subtraction --- .../income/deductions/aged_or_disabled/age_eligibility.yaml | 6 +++++- .../id/tax/income/deductions/aged_or_disabled/amount.yaml | 4 ++++ .../income/deductions/aged_or_disabled/max_deductions.yaml | 4 ++++ .../gov/states/id/tax/income/subtractions/subtractions.yaml | 1 + .../income/deductions/id_aged_or_disabled_deduction.yaml | 2 +- 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml index 404e86b4091..cf4c899c51f 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml @@ -1,12 +1,16 @@ description: Idaho provides the development disabilities deduction for members of the taxpayers at or above this age threshold. values: - 2021-01-01: 65 + 2021-01-01: 65 metadata: reference: - title: Idaho Title 63, Chapter 30, 63-3022E., (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 + - title: 2021 Idaho Code, Title 63 - REVENUE AND TAXATION, Chapter 30 - INCOME TAX, Section 63-3022E - HOUSEHOLD DEDUCTION FOR DEPENDENTS SIXTY-FIVE YEARS OF AGE OR OLDER OR PERSONS WITH DEVELOPMENTAL DISABILITIES. + href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3022e/ + - title: Form 39R, Resident Supplemental Schedule 2021 approved + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 unit: year label: Idaho development disabilities deduction age eligibility period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml index 50e1de66417..090e77c62a9 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml @@ -7,6 +7,10 @@ metadata: href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 + - title: 2021 Idaho Code, Title 63 - REVENUE AND TAXATION, Chapter 30 - INCOME TAX, Section 63-3022E - HOUSEHOLD DEDUCTION FOR DEPENDENTS SIXTY-FIVE YEARS OF AGE OR OLDER OR PERSONS WITH DEVELOPMENTAL DISABILITIES. + href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3022e/ + - title: Form 39R, Resident Supplemental Schedule 2021 approved + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 unit: currency-USD label: Idaho development disabilities deduction amount period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml index a204d0dd6ce..016c1bb7d40 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml @@ -7,6 +7,10 @@ metadata: href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 + - title: 2021 Idaho Code, Title 63 - REVENUE AND TAXATION, Chapter 30 - INCOME TAX, Section 63-3022E - HOUSEHOLD DEDUCTION FOR DEPENDENTS SIXTY-FIVE YEARS OF AGE OR OLDER OR PERSONS WITH DEVELOPMENTAL DISABILITIES. + href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3022e/ + - title: Form 39R, Resident Supplemental Schedule 2021 approved + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 unit: deduction label: Idaho development disabilities deduction max amount period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/subtractions/subtractions.yaml b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/subtractions.yaml index fb13d13abc0..208c0e52a76 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/subtractions/subtractions.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/subtractions.yaml @@ -6,6 +6,7 @@ values: - taxable_social_security # (5) - military_service_income # (4) - workers_compensation # (13) + - id_aged_or_disabled_deduction #(8) metadata: unit: list diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml index 131d49930bb..57224dd75b2 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml @@ -130,4 +130,4 @@ members: [person1, person2, person3, person4] state_code: ID output: - id_aged_or_disabled_deduction: 3_000 \ No newline at end of file + id_aged_or_disabled_deduction: 3_000 From 68e13f49bbcd7c402d2f37f4f30b17b189368bf6 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Wed, 1 Nov 2023 23:40:34 +0000 Subject: [PATCH 07/35] add credit for aged or disabled --- .../aged_or_disabled/age_eligibility.yaml | 16 ++ .../credits/aged_or_disabled/amount.yaml | 16 ++ .../credits/aged_or_disabled/max_amount.yaml | 16 ++ .../aged_or_disabled/age_eligibility.yaml | 2 +- .../aged_or_disabled/max_deductions.yaml | 2 +- .../credits/id_aged_or_disabled_credit.yaml | 179 ++++++++++++++++++ .../id_aged_or_disabled_deduction.yaml | 1 + .../credits/id_aged_or_disabled_credit.py | 29 +++ 8 files changed, 259 insertions(+), 2 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml create mode 100644 policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml create mode 100644 policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml create mode 100644 policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml new file mode 100644 index 00000000000..c8cb9b43547 --- /dev/null +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml @@ -0,0 +1,16 @@ +description: Idaho provides the development disabilities credit for members of the taxpayers at or above this age threshold. +values: + 2002-01-01: 65 +metadata: + reference: + - title: Idaho TITLE 63, CHAPTER 30, 63-3025D., (1) + href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ + - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022, Part E + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=15 + - title: 2021 Idaho Code, Title 63 - REVENUE AND TAXATION, Chapter 30 - INCOME TAX, Section 63-3025D - PAYMENT FOR DEPENDENTS SIXTY-FIVE YEARS OF AGE OR OLDER OR PERSONS WITH DEVELOPMENTAL DISABILITIES. + href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3025d/ + - title: Form 39R, Resident Supplemental Schedule 2021 approved + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=2 + unit: year + label: Idaho development disabilities credit age eligibility + period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml new file mode 100644 index 00000000000..70741d9df95 --- /dev/null +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml @@ -0,0 +1,16 @@ +description: Idaho provides the following development disabilities credit amount for members of the taxpayers household. +values: + 2002-01-01: 100 +metadata: + reference: + - title: Idaho TITLE 63, CHAPTER 30, 63-3025D., (1) + href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ + - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022, Part E + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=15 + - title: 2021 Idaho Code, Title 63 - REVENUE AND TAXATION, Chapter 30 - INCOME TAX, Section 63-3025D - PAYMENT FOR DEPENDENTS SIXTY-FIVE YEARS OF AGE OR OLDER OR PERSONS WITH DEVELOPMENTAL DISABILITIES. + href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3025d/ + - title: Form 39R, Resident Supplemental Schedule 2021 approved + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=2 + unit: currency-USD + label: Idaho development disabilities credit amount + period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml new file mode 100644 index 00000000000..ca33f05f8fa --- /dev/null +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml @@ -0,0 +1,16 @@ +description: Idaho provides the following development disabilities maximum credits. +values: + 2002-01-01: 3 +metadata: + reference: + - title: Idaho TITLE 63, CHAPTER 30, 63-3025D., (1) + href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ + - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022, Part E + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=15 + - title: 2021 Idaho Code, Title 63 - REVENUE AND TAXATION, Chapter 30 - INCOME TAX, Section 63-3025D - PAYMENT FOR DEPENDENTS SIXTY-FIVE YEARS OF AGE OR OLDER OR PERSONS WITH DEVELOPMENTAL DISABILITIES. + href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3025d/ + - title: Form 39R, Resident Supplemental Schedule 2021 approved + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=2 + unit: /1 + label: Idaho development disabilities credit max amount + period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml index cf4c899c51f..7b9e758ade6 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml @@ -1,6 +1,6 @@ description: Idaho provides the development disabilities deduction for members of the taxpayers at or above this age threshold. values: - 2021-01-01: 65 + 1999-01-01: 65 metadata: reference: - title: Idaho Title 63, Chapter 30, 63-3022E., (1) diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml index 016c1bb7d40..87fd26f0cf8 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml @@ -1,6 +1,6 @@ description: Idaho provides the following development disabilities maximum deductions. values: - 2021-01-01: 3 + 1999-01-01: 3 metadata: reference: - title: Idaho Title 63, Chapter 30, 63-3022E., (1) diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml new file mode 100644 index 00000000000..4700e100ec9 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml @@ -0,0 +1,179 @@ +# - name: One eligible person +# period: 2023 +# input: +# people: +# person1: +# is_disabled: false +# is_tax_unit_spouse: false +# is_tax_unit_head: false +# age: 64 +# person2: +# is_disabled: false +# is_tax_unit_spouse: false +# is_tax_unit_head: false +# age: 65 +# households: +# household: +# members: [person1, person2] +# state_code: ID +# tax_units: +# tax_unit: +# members: [person1, person2] +# id_aged_or_disabled_deduction: 0 +# output: +# id_aged_or_disabled_credit: 100 + +# - name: One eligible person - claim deduction +# period: 2023 +# input: +# people: +# person1: +# is_disabled: false +# is_tax_unit_spouse: false +# is_tax_unit_head: false +# age: 64 +# person2: +# is_disabled: false +# is_tax_unit_spouse: false +# is_tax_unit_head: false +# age: 65 +# households: +# household: +# members: [person1, person2] +# state_code: ID +# tax_units: +# tax_unit: +# members: [person1, person2] +# id_aged_or_disabled_deduction: 1000 +# output: +# id_aged_or_disabled_credit: 0 + +# - name: Four eligible people - capped at 3 +# period: 2023 +# input: +# people: +# person1: +# is_disabled: true +# is_tax_unit_spouse: false +# is_tax_unit_head: false +# age: 64 +# person2: +# is_disabled: false +# is_tax_unit_spouse: false +# is_tax_unit_head: false +# age: 65 +# person3: +# is_disabled: true +# is_tax_unit_spouse: false +# is_tax_unit_head: false +# age: 64 +# person4: +# is_disabled: false +# is_tax_unit_spouse: false +# is_tax_unit_head: false +# age: 65 +# households: +# household: +# members: [person1, person2, person3, person4] +# state_code: ID +# tax_units: +# tax_unit: +# members: [person1, person2] +# id_aged_or_disabled_deduction: 0 +# output: +# id_aged_or_disabled_credit: 300 + +# - name: No eligible people +# period: 2023 +# input: +# people: +# person1: +# is_disabled: false +# is_tax_unit_spouse: false +# is_tax_unit_head: false +# age: 64 +# person2: +# is_disabled: false +# is_tax_unit_spouse: false +# is_tax_unit_head: false +# age: 64 +# households: +# household: +# members: [person1, person2] +# state_code: ID +# tax_units: +# tax_unit: +# members: [person1, person2] +# id_aged_or_disabled_deduction: 0 +# output: +# id_aged_or_disabled_credit: 0 + +# - name: Head and Spouse are not eligible if aged +# period: 2023 +# input: +# people: +# person1: +# is_disabled: true +# is_tax_unit_spouse: false +# is_tax_unit_head: false +# age: 64 +# person2: +# is_disabled: false +# is_tax_unit_spouse: false +# is_tax_unit_head: true +# age: 65 +# person3: +# is_disabled: true +# is_tax_unit_spouse: false +# is_tax_unit_head: false +# age: 64 +# person4: +# is_disabled: false +# is_tax_unit_spouse: true +# is_tax_unit_head: false +# age: 65 +# households: +# household: +# members: [person1, person2, person3, person4] +# state_code: ID +# tax_units: +# tax_unit: +# members: [person1, person2] +# id_aged_or_disabled_deduction: 0 +# output: +# id_aged_or_disabled_credit: 200 + +- name: Head and Spouse are not eligible if aged but are eligible if disabled + period: 2023 + input: + people: + person1: + is_disabled: true + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 64 + person2: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: true + age: 65 + person3: + is_disabled: true + is_tax_unit_spouse: true + is_tax_unit_head: false + age: 64 + person4: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 65 + households: + household: + members: [person1, person2, person3, person4] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + id_aged_or_disabled_deduction: 0 + output: + id_aged_or_disabled_credit: 300 diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml index 57224dd75b2..8fc3965975f 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml @@ -4,6 +4,7 @@ people: person1: is_disabled: false + is_tax_unit_spouse: false is_tax_unit_head: false age: 64 person2: diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py new file mode 100644 index 00000000000..3a70bc3b6f5 --- /dev/null +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py @@ -0,0 +1,29 @@ +from policyengine_us.model_api import * + + +class id_aged_or_disabled_credit(Variable): + value_type = float + entity = TaxUnit + label = "Idaho aged or disabled credit" + unit = USD + definition_period = YEAR + defined_for = StateCode.ID + + def formula(tax_unit, period, parameters): + person = tax_unit.members + age = person("age", period) + head = person("is_tax_unit_head", period) + spouse = person("is_tax_unit_spouse", period) + disabled = person("is_disabled", period) + p = parameters( + period + ).gov.states.id.tax.income.credits.aged_or_disabled + age_eligible = (age >= p.age_eligibility) & ~(head | spouse) + eligible = age_eligible | disabled + total_eligible = sum(eligible) + capped_eligible = min_(total_eligible, p.max_amount) + # The aged or disabled credit can only be claimed if the aged + # or disabled deduction is not claimed + aged_deduction = tax_unit("id_aged_or_disabled_deduction", period) + credit_amount = capped_eligible * p.amount + return where(aged_deduction == 0, credit_amount, 0) From 96d72f8d94eb9264549354d24410ffcc00aa102c Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Thu, 2 Nov 2023 00:00:00 +0000 Subject: [PATCH 08/35] reformat --- .../re_determination/co_ccap_re_determination_eligible.yaml | 2 +- .../states/id/tax/income/credits/id_aged_or_disabled_credit.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/policyengine_us/tests/policy/baseline/gov/states/co/ccap/re_determination/co_ccap_re_determination_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/co/ccap/re_determination/co_ccap_re_determination_eligible.yaml index 5e035835be5..46752176260 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/co/ccap/re_determination/co_ccap_re_determination_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/co/ccap/re_determination/co_ccap_re_determination_eligible.yaml @@ -20,4 +20,4 @@ co_ccap_re_determination_income_eligible: false co_ccap_eligible_children: 1 output: - co_ccap_re_determination_eligible: false \ No newline at end of file + co_ccap_re_determination_eligible: false diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py index 3a70bc3b6f5..d003ed2ab4a 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py @@ -22,7 +22,7 @@ def formula(tax_unit, period, parameters): eligible = age_eligible | disabled total_eligible = sum(eligible) capped_eligible = min_(total_eligible, p.max_amount) - # The aged or disabled credit can only be claimed if the aged + # The aged or disabled credit can only be claimed if the aged # or disabled deduction is not claimed aged_deduction = tax_unit("id_aged_or_disabled_deduction", period) credit_amount = capped_eligible * p.amount From 76785ab690a366bc4652c218d4ad2a9a568830c5 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Thu, 2 Nov 2023 03:19:56 +0000 Subject: [PATCH 09/35] revise refs, add 3 deduction tests, add comments --- .../aged_or_disabled/age_eligibility.yaml | 4 +- .../credits/aged_or_disabled/amount.yaml | 4 +- .../credits/aged_or_disabled/max_amount.yaml | 4 +- .../aged_or_disabled/age_eligibility.yaml | 4 +- .../deductions/aged_or_disabled/amount.yaml | 4 +- .../aged_or_disabled/max_deductions.yaml | 8 +- .../credits/id_aged_or_disabled_credit.yaml | 280 +++++++++--------- .../id_aged_or_disabled_deduction.yaml | 84 ++++++ .../credits/id_aged_or_disabled_credit.py | 2 + .../id_aged_or_disabled_deduction.py | 2 + 10 files changed, 242 insertions(+), 154 deletions(-) diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml index c8cb9b43547..b0652fe5768 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml @@ -3,11 +3,11 @@ values: 2002-01-01: 65 metadata: reference: - - title: Idaho TITLE 63, CHAPTER 30, 63-3025D., (1) + - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D. href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022, Part E href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=15 - - title: 2021 Idaho Code, Title 63 - REVENUE AND TAXATION, Chapter 30 - INCOME TAX, Section 63-3025D - PAYMENT FOR DEPENDENTS SIXTY-FIVE YEARS OF AGE OR OLDER OR PERSONS WITH DEVELOPMENTAL DISABILITIES. + - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3025D href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3025d/ - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml index 70741d9df95..e1da7ad8146 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml @@ -3,11 +3,11 @@ values: 2002-01-01: 100 metadata: reference: - - title: Idaho TITLE 63, CHAPTER 30, 63-3025D., (1) + - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D., (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022, Part E href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=15 - - title: 2021 Idaho Code, Title 63 - REVENUE AND TAXATION, Chapter 30 - INCOME TAX, Section 63-3025D - PAYMENT FOR DEPENDENTS SIXTY-FIVE YEARS OF AGE OR OLDER OR PERSONS WITH DEVELOPMENTAL DISABILITIES. + - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3025D href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3025d/ - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml index ca33f05f8fa..ef952087928 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml @@ -3,11 +3,11 @@ values: 2002-01-01: 3 metadata: reference: - - title: Idaho TITLE 63, CHAPTER 30, 63-3025D., (1) + - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D., (2) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022, Part E href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=15 - - title: 2021 Idaho Code, Title 63 - REVENUE AND TAXATION, Chapter 30 - INCOME TAX, Section 63-3025D - PAYMENT FOR DEPENDENTS SIXTY-FIVE YEARS OF AGE OR OLDER OR PERSONS WITH DEVELOPMENTAL DISABILITIES. + - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3025D href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3025d/ - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml index 7b9e758ade6..d264125273b 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml @@ -3,11 +3,11 @@ values: 1999-01-01: 65 metadata: reference: - - title: Idaho Title 63, Chapter 30, 63-3022E., (1) + - title: Idaho Title 63, Chapter 30, Section 63-3022E. href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 - - title: 2021 Idaho Code, Title 63 - REVENUE AND TAXATION, Chapter 30 - INCOME TAX, Section 63-3022E - HOUSEHOLD DEDUCTION FOR DEPENDENTS SIXTY-FIVE YEARS OF AGE OR OLDER OR PERSONS WITH DEVELOPMENTAL DISABILITIES. + - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3022E href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3022e/ - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml index 090e77c62a9..bedd081dc28 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml @@ -3,11 +3,11 @@ values: 1999-01-01: 1_000 metadata: reference: - - title: Idaho Title 63, Chapter 30, 63-3022E., (1) + - title: Idaho Title 63, Chapter 30, Section 63-3022E. (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 - - title: 2021 Idaho Code, Title 63 - REVENUE AND TAXATION, Chapter 30 - INCOME TAX, Section 63-3022E - HOUSEHOLD DEDUCTION FOR DEPENDENTS SIXTY-FIVE YEARS OF AGE OR OLDER OR PERSONS WITH DEVELOPMENTAL DISABILITIES. + - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3022E href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3022e/ - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml index 87fd26f0cf8..994188192ed 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml @@ -1,16 +1,16 @@ -description: Idaho provides the following development disabilities maximum deductions. +description: Idaho provides the development disabilities for this maximum number of family members. values: 1999-01-01: 3 metadata: reference: - - title: Idaho Title 63, Chapter 30, 63-3022E., (1) + - title: Idaho Title 63, Chapter 30, Section 63-3022E., (2) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 - - title: 2021 Idaho Code, Title 63 - REVENUE AND TAXATION, Chapter 30 - INCOME TAX, Section 63-3022E - HOUSEHOLD DEDUCTION FOR DEPENDENTS SIXTY-FIVE YEARS OF AGE OR OLDER OR PERSONS WITH DEVELOPMENTAL DISABILITIES. + - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3022E href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3022e/ - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 unit: deduction - label: Idaho development disabilities deduction max amount + label: Idaho development disabilities deduction max deductions period: year diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml index 4700e100ec9..e55b0e36903 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml @@ -1,147 +1,147 @@ -# - name: One eligible person -# period: 2023 -# input: -# people: -# person1: -# is_disabled: false -# is_tax_unit_spouse: false -# is_tax_unit_head: false -# age: 64 -# person2: -# is_disabled: false -# is_tax_unit_spouse: false -# is_tax_unit_head: false -# age: 65 -# households: -# household: -# members: [person1, person2] -# state_code: ID -# tax_units: -# tax_unit: -# members: [person1, person2] -# id_aged_or_disabled_deduction: 0 -# output: -# id_aged_or_disabled_credit: 100 +- name: One eligible person + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 64 + person2: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 65 + households: + household: + members: [person1, person2] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + id_aged_or_disabled_deduction: 0 + output: + id_aged_or_disabled_credit: 100 -# - name: One eligible person - claim deduction -# period: 2023 -# input: -# people: -# person1: -# is_disabled: false -# is_tax_unit_spouse: false -# is_tax_unit_head: false -# age: 64 -# person2: -# is_disabled: false -# is_tax_unit_spouse: false -# is_tax_unit_head: false -# age: 65 -# households: -# household: -# members: [person1, person2] -# state_code: ID -# tax_units: -# tax_unit: -# members: [person1, person2] -# id_aged_or_disabled_deduction: 1000 -# output: -# id_aged_or_disabled_credit: 0 +- name: One eligible person - claim deduction + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 64 + person2: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 65 + households: + household: + members: [person1, person2] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + id_aged_or_disabled_deduction: 1000 + output: + id_aged_or_disabled_credit: 0 -# - name: Four eligible people - capped at 3 -# period: 2023 -# input: -# people: -# person1: -# is_disabled: true -# is_tax_unit_spouse: false -# is_tax_unit_head: false -# age: 64 -# person2: -# is_disabled: false -# is_tax_unit_spouse: false -# is_tax_unit_head: false -# age: 65 -# person3: -# is_disabled: true -# is_tax_unit_spouse: false -# is_tax_unit_head: false -# age: 64 -# person4: -# is_disabled: false -# is_tax_unit_spouse: false -# is_tax_unit_head: false -# age: 65 -# households: -# household: -# members: [person1, person2, person3, person4] -# state_code: ID -# tax_units: -# tax_unit: -# members: [person1, person2] -# id_aged_or_disabled_deduction: 0 -# output: -# id_aged_or_disabled_credit: 300 +- name: Four eligible people - capped at 3 + period: 2023 + input: + people: + person1: + is_disabled: true + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 64 + person2: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 65 + person3: + is_disabled: true + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 64 + person4: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 65 + households: + household: + members: [person1, person2, person3, person4] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + id_aged_or_disabled_deduction: 0 + output: + id_aged_or_disabled_credit: 300 -# - name: No eligible people -# period: 2023 -# input: -# people: -# person1: -# is_disabled: false -# is_tax_unit_spouse: false -# is_tax_unit_head: false -# age: 64 -# person2: -# is_disabled: false -# is_tax_unit_spouse: false -# is_tax_unit_head: false -# age: 64 -# households: -# household: -# members: [person1, person2] -# state_code: ID -# tax_units: -# tax_unit: -# members: [person1, person2] -# id_aged_or_disabled_deduction: 0 -# output: -# id_aged_or_disabled_credit: 0 +- name: No eligible people + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 64 + person2: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 64 + households: + household: + members: [person1, person2] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + id_aged_or_disabled_deduction: 0 + output: + id_aged_or_disabled_credit: 0 -# - name: Head and Spouse are not eligible if aged -# period: 2023 -# input: -# people: -# person1: -# is_disabled: true -# is_tax_unit_spouse: false -# is_tax_unit_head: false -# age: 64 -# person2: -# is_disabled: false -# is_tax_unit_spouse: false -# is_tax_unit_head: true -# age: 65 -# person3: -# is_disabled: true -# is_tax_unit_spouse: false -# is_tax_unit_head: false -# age: 64 -# person4: -# is_disabled: false -# is_tax_unit_spouse: true -# is_tax_unit_head: false -# age: 65 -# households: -# household: -# members: [person1, person2, person3, person4] -# state_code: ID -# tax_units: -# tax_unit: -# members: [person1, person2] -# id_aged_or_disabled_deduction: 0 -# output: -# id_aged_or_disabled_credit: 200 +- name: Head and Spouse are not eligible if aged + period: 2023 + input: + people: + person1: + is_disabled: true + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 64 + person2: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: true + age: 65 + person3: + is_disabled: true + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 64 + person4: + is_disabled: false + is_tax_unit_spouse: true + is_tax_unit_head: false + age: 65 + households: + household: + members: [person1, person2, person3, person4] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + id_aged_or_disabled_deduction: 0 + output: + id_aged_or_disabled_credit: 200 - name: Head and Spouse are not eligible if aged but are eligible if disabled period: 2023 diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml index 8fc3965975f..eb15cbeb337 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml @@ -1,3 +1,87 @@ +- name: Househould with only head and spouse + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: true + age: 64 + person2: + is_disabled: false + is_tax_unit_spouse: true + is_tax_unit_head: false + age: 65 + households: + household: + members: [person1, person2] + state_code: ID + output: + id_aged_or_disabled_deduction: 0 + +- name: Househould with only disabled head + period: 2023 + input: + people: + person1: + is_disabled: true + is_tax_unit_spouse: false + is_tax_unit_head: true + age: 65 + households: + household: + members: [person1] + state_code: ID + output: + id_aged_or_disabled_deduction: 1_000 + +- name: Househould with only spouse + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_spouse: true + is_tax_unit_head: false + age: 65 + households: + household: + members: [person1] + state_code: ID + output: + id_aged_or_disabled_deduction: 0 + +- name: Four eligible people - capped at 3 + period: 2023 + input: + people: + person1: + is_disabled: true + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 64 + person2: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 65 + person3: + is_disabled: true + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 64 + person4: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 65 + households: + household: + members: [person1, person2, person3, person4] + state_code: ID + output: + id_aged_or_disabled_deduction: 3_000 + - name: One eligible person period: 2023 input: diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py index d003ed2ab4a..5092c075f8a 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py @@ -26,4 +26,6 @@ def formula(tax_unit, period, parameters): # or disabled deduction is not claimed aged_deduction = tax_unit("id_aged_or_disabled_deduction", period) credit_amount = capped_eligible * p.amount + # To claim aged or disabled credit, filers also have to maintain a household for family members + # and provide more than one-half of the family member’s support for the year return where(aged_deduction == 0, credit_amount, 0) diff --git a/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py b/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py index eb65e562f94..5f06a6438bb 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py +++ b/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py @@ -22,4 +22,6 @@ def formula(tax_unit, period, parameters): eligible = age_eligible | disabled total_eligible = tax_unit.sum(eligible) capped_eligible = min_(total_eligible, p.max_deductions) + # To claim aged or disabled deduction, filers also have to maintain a household for family members + # and provide more than one-half of the family member’s support for the year return capped_eligible * p.amount From fc969d863a4b49fdcef09392ee64fa95182c1e78 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Thu, 2 Nov 2023 23:45:55 +0000 Subject: [PATCH 10/35] add section num, add refundable.yaml for credit --- .../credits/aged_or_disabled/age_eligibility.yaml | 6 +++--- .../id/tax/income/credits/aged_or_disabled/amount.yaml | 6 +++--- .../income/credits/aged_or_disabled/max_amount.yaml | 6 +++--- .../gov/states/id/tax/income/credits/refundable.yaml | 10 ++++++++++ .../deductions/aged_or_disabled/age_eligibility.yaml | 6 +++--- .../tax/income/deductions/aged_or_disabled/amount.yaml | 6 +++--- .../deductions/aged_or_disabled/max_deductions.yaml | 6 +++--- 7 files changed, 28 insertions(+), 18 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml index b0652fe5768..d2e1383de21 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml @@ -1,13 +1,13 @@ -description: Idaho provides the development disabilities credit for members of the taxpayers at or above this age threshold. +description: Idaho qualifies filers for the aged or disabled credit at or above this age threshold. values: 2002-01-01: 65 metadata: reference: - - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D. + - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022, Part E href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=15 - - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3025D + - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3025D (1) href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3025d/ - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml index e1da7ad8146..14145c33656 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml @@ -1,13 +1,13 @@ -description: Idaho provides the following development disabilities credit amount for members of the taxpayers household. +description: Idaho provides the following aged or disabled credit amount for each member of the taxpayers household. values: 2002-01-01: 100 metadata: reference: - - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D., (1) + - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022, Part E href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=15 - - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3025D + - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3025D (1) href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3025d/ - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml index ef952087928..22d48840ec1 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml @@ -1,13 +1,13 @@ -description: Idaho provides the following development disabilities maximum credits. +description: Idaho limits the number of family members who qualify for the aged or disabled credit to this amount. values: 2002-01-01: 3 metadata: reference: - - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D., (2) + - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D (2) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022, Part E href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=15 - - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3025D + - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3025D (2) href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3025d/ - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml new file mode 100644 index 00000000000..1b429262846 --- /dev/null +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml @@ -0,0 +1,10 @@ +description: Idaho refundable tax credits. +metadata: + unit: list + label: VeIdaho refundable tax credits + reference: + - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D (1) + href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ +values: + 2021-01-01: + - id_aged_or_disabled_credit diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml index d264125273b..ccce7a6117d 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml @@ -1,13 +1,13 @@ -description: Idaho provides the development disabilities deduction for members of the taxpayers at or above this age threshold. +description: Idaho provides the aged or disabled deduction for members of the taxpayers at or above this age threshold. values: 1999-01-01: 65 metadata: reference: - - title: Idaho Title 63, Chapter 30, Section 63-3022E. + - title: Idaho Title 63, Chapter 30, Section 63-3022E (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 - - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3022E + - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3022E (1) href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3022e/ - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml index bedd081dc28..aa4076a0292 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml @@ -1,13 +1,13 @@ -description: Idaho provides the following development disabilities deduction amount for members of the taxpayers household. +description: Idaho provides the following aged or disabled deduction amount for members of the taxpayers household. values: 1999-01-01: 1_000 metadata: reference: - - title: Idaho Title 63, Chapter 30, Section 63-3022E. (1) + - title: Idaho Title 63, Chapter 30, Section 63-3022E (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 - - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3022E + - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3022E (1) href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3022e/ - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml index 994188192ed..7fd701517b5 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml @@ -3,14 +3,14 @@ values: 1999-01-01: 3 metadata: reference: - - title: Idaho Title 63, Chapter 30, Section 63-3022E., (2) + - title: Idaho Title 63, Chapter 30, Section 63-3022E (2) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 - - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3022E + - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3022E (2) href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3022e/ - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 - unit: deduction + unit: /1 label: Idaho development disabilities deduction max deductions period: year From 892446dceacbe1b71b798960f00898ea2d19e100 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Thu, 9 Nov 2023 22:56:36 +0000 Subject: [PATCH 11/35] add payment/cost>0.5 for both credit and deduction --- .../credits/aged_or_disabled/cost_rate.yaml | 16 +++ .../id/tax/income/credits/refundable.yaml | 2 +- .../aged_or_disabled/cost_rate.yaml | 16 +++ .../credits/id_aged_or_disabled_credit.yaml | 80 ++++++++++---- .../id_aged_or_disabled_deduction.yaml | 102 ++++++++++++------ .../credits/id_aged_or_disabled_credit.py | 19 ++-- .../id_aged_or_disabled_deduction.py | 17 ++- .../person/care_and_support_costs.py | 9 ++ .../person/care_and_support_payment.py | 9 ++ 9 files changed, 203 insertions(+), 67 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/cost_rate.yaml create mode 100644 policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/cost_rate.yaml create mode 100644 policyengine_us/variables/household/demographic/person/care_and_support_costs.py create mode 100644 policyengine_us/variables/household/demographic/person/care_and_support_payment.py diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/cost_rate.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/cost_rate.yaml new file mode 100644 index 00000000000..878f47899d6 --- /dev/null +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/cost_rate.yaml @@ -0,0 +1,16 @@ +description: Idaho allows for aged or disabled credit if the filer paid care and support costs over this percentage of total costs. +metadata: + unit: /1 + period: year + label: Idaho aged or disabled credit cost rate + reference: + - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D (1) + href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ + - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022, Part E + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=15 + - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3025D (1) + href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3025d/ + - title: Form 39R, Resident Supplemental Schedule 2021 approved + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=2 +values: + 2002-01-01: 0.5 diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml index 1b429262846..b64551f435f 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml @@ -1,7 +1,7 @@ description: Idaho refundable tax credits. metadata: unit: list - label: VeIdaho refundable tax credits + label: Idaho refundable tax credits reference: - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/cost_rate.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/cost_rate.yaml new file mode 100644 index 00000000000..6b173ffdcd4 --- /dev/null +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/cost_rate.yaml @@ -0,0 +1,16 @@ +description: Idaho allows for aged or disabled deduction if the filer paid care and support costs over this percentage of total costs. +metadata: + unit: /1 + period: year + label: Idaho aged or disabled deduction cost rate + reference: + - title: Idaho Title 63, Chapter 30, Section 63-3022E (1) + href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ + - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 + - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3022E (1) + href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3022e/ + - title: Form 39R, Resident Supplemental Schedule 2021 approved + href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 +values: + 1999-01-01: 0.5 diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml index e55b0e36903..55347401791 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml @@ -7,10 +7,14 @@ is_tax_unit_spouse: false is_tax_unit_head: false age: 64 + care_and_support_payment: 0 + care_and_support_costs: 0 person2: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 households: household: @@ -23,7 +27,7 @@ output: id_aged_or_disabled_credit: 100 -- name: One eligible person - claim deduction +- name: No eligible person as payment less than one-half of cost period: 2023 input: people: @@ -31,12 +35,16 @@ is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: false - age: 64 + age: 65 + care_and_support_payment: 0 + care_and_support_costs: 0 person2: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: false age: 65 + care_and_support_payment: 300 + care_and_support_costs: 1_000 households: household: members: [person1, person2] @@ -44,69 +52,81 @@ tax_units: tax_unit: members: [person1, person2] - id_aged_or_disabled_deduction: 1000 + id_aged_or_disabled_deduction: 0 output: id_aged_or_disabled_credit: 0 -- name: Four eligible people - capped at 3 +- name: One eligible person - claim deduction period: 2023 input: people: person1: - is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: false - age: 64 - person2: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: false - age: 65 - person3: - is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: false + care_and_support_payment: 0 + care_and_support_costs: 0 age: 64 - person4: + person2: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 households: household: - members: [person1, person2, person3, person4] + members: [person1, person2] state_code: ID tax_units: tax_unit: members: [person1, person2] - id_aged_or_disabled_deduction: 0 + id_aged_or_disabled_deduction: 1000 output: - id_aged_or_disabled_credit: 300 + id_aged_or_disabled_credit: 0 -- name: No eligible people +- name: Four eligible people - capped at 3 period: 2023 input: people: person1: - is_disabled: false + is_disabled: true is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 person2: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 + age: 65 + person3: + is_disabled: true + is_tax_unit_spouse: false + is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 + person4: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 + age: 65 households: household: - members: [person1, person2] + members: [person1, person2, person3, person4] state_code: ID tax_units: tax_unit: members: [person1, person2] id_aged_or_disabled_deduction: 0 output: - id_aged_or_disabled_credit: 0 + id_aged_or_disabled_credit: 300 - name: Head and Spouse are not eligible if aged period: 2023 @@ -116,21 +136,29 @@ is_disabled: true is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 person2: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: true + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 person3: is_disabled: true is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 person4: is_disabled: false is_tax_unit_spouse: true is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 households: household: @@ -151,21 +179,29 @@ is_disabled: true is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 person2: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: true + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 person3: is_disabled: true is_tax_unit_spouse: true is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 person4: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 households: household: diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml index eb15cbeb337..75e36ba74ec 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml @@ -1,4 +1,4 @@ -- name: Househould with only head and spouse +- name: Househould with only head and aged spouse period: 2023 input: people: @@ -6,11 +6,15 @@ is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: true + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 person2: is_disabled: false is_tax_unit_spouse: true is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 households: household: @@ -27,6 +31,8 @@ is_disabled: true is_tax_unit_spouse: false is_tax_unit_head: true + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 households: household: @@ -35,7 +41,7 @@ output: id_aged_or_disabled_deduction: 1_000 -- name: Househould with only spouse +- name: Househould with only aged spouse period: 2023 input: people: @@ -43,6 +49,8 @@ is_disabled: false is_tax_unit_spouse: true is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 households: household: @@ -51,6 +59,31 @@ output: id_aged_or_disabled_deduction: 0 +- name: No eligible person as payment less than one-half of cost + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 65 + care_and_support_payment: 0 + care_and_support_costs: 0 + person2: + is_disabled: false + is_tax_unit_spouse: false + is_tax_unit_head: false + age: 65 + care_and_support_payment: 300 + care_and_support_costs: 1_000 + households: + household: + members: [person1, person2] + state_code: ID + output: + id_aged_or_disabled_deduction: 0 + - name: Four eligible people - capped at 3 period: 2023 input: @@ -59,21 +92,29 @@ is_disabled: true is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 person2: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 person3: is_disabled: true is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 person4: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 households: household: @@ -90,11 +131,15 @@ is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 person2: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 households: household: @@ -103,38 +148,7 @@ output: id_aged_or_disabled_deduction: 1_000 -- name: Four eligible people - capped at 3 - period: 2023 - input: - people: - person1: - is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: false - age: 64 - person2: - is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false - age: 65 - person3: - is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: false - age: 64 - person4: - is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false - age: 65 - households: - household: - members: [person1, person2, person3, person4] - state_code: ID - output: - id_aged_or_disabled_deduction: 3_000 - -- name: No eligible people +- name: No eligible people as age less than 65 period: 2023 input: people: @@ -142,11 +156,15 @@ is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 person2: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 households: household: @@ -163,21 +181,29 @@ is_disabled: true is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 person2: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: true + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 person3: is_disabled: true is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 person4: is_disabled: false is_tax_unit_spouse: true is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 households: household: @@ -194,21 +220,29 @@ is_disabled: true is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 person2: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: true + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 person3: is_disabled: true is_tax_unit_spouse: true is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 64 person4: is_disabled: false is_tax_unit_spouse: false is_tax_unit_head: false + care_and_support_payment: 600 + care_and_support_costs: 1_000 age: 65 households: household: diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py index 5092c075f8a..c35ff5d53e1 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py @@ -12,20 +12,27 @@ class id_aged_or_disabled_credit(Variable): def formula(tax_unit, period, parameters): person = tax_unit.members age = person("age", period) - head = person("is_tax_unit_head", period) - spouse = person("is_tax_unit_spouse", period) + head_or_spouse = person("is_tax_unit_head_or_spouse", period) disabled = person("is_disabled", period) p = parameters( period ).gov.states.id.tax.income.credits.aged_or_disabled - age_eligible = (age >= p.age_eligibility) & ~(head | spouse) - eligible = age_eligible | disabled + age_eligible = (age >= p.age_eligibility) & ~head_or_spouse + # To claim aged or disabled credit, filers also have to maintain a household for family members + # and provide more than one-half of the family member’s support for the year + care_and_support_payment = person("care_and_support_payment", period) + care_and_support_costs = person("care_and_support_costs", period) + support_payment_ratio = np.zeros_like(care_and_support_costs) + mask = care_and_support_costs != 0 + support_payment_ratio[mask] = ( + care_and_support_payment[mask] / care_and_support_costs[mask] + ) + payment_eligible = support_payment_ratio > p.cost_rate + eligible = (age_eligible | disabled) & payment_eligible total_eligible = sum(eligible) capped_eligible = min_(total_eligible, p.max_amount) # The aged or disabled credit can only be claimed if the aged # or disabled deduction is not claimed aged_deduction = tax_unit("id_aged_or_disabled_deduction", period) credit_amount = capped_eligible * p.amount - # To claim aged or disabled credit, filers also have to maintain a household for family members - # and provide more than one-half of the family member’s support for the year return where(aged_deduction == 0, credit_amount, 0) diff --git a/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py b/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py index 5f06a6438bb..035a4ede7a1 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py +++ b/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py @@ -12,14 +12,23 @@ class id_aged_or_disabled_deduction(Variable): def formula(tax_unit, period, parameters): person = tax_unit.members age = person("age", period) - head = person("is_tax_unit_head", period) - spouse = person("is_tax_unit_spouse", period) + head_or_spouse = person("is_tax_unit_head_or_spouse", period) disabled = person("is_disabled", period) p = parameters( period ).gov.states.id.tax.income.deductions.aged_or_disabled - age_eligible = (age >= p.age_eligibility) & ~(head | spouse) - eligible = age_eligible | disabled + age_eligible = (age >= p.age_eligibility) & ~head_or_spouse + # To claim aged or disabled credit, filers also have to maintain a household for family members + # and provide more than one-half of the family member’s support for the year + care_and_support_payment = person("care_and_support_payment", period) + care_and_support_costs = person("care_and_support_costs", period) + support_payment_ratio = np.zeros_like(care_and_support_costs) + mask = care_and_support_costs != 0 + support_payment_ratio[mask] = ( + care_and_support_payment[mask] / care_and_support_costs[mask] + ) + payment_eligible = support_payment_ratio > p.cost_rate + eligible = (age_eligible | disabled) & payment_eligible total_eligible = tax_unit.sum(eligible) capped_eligible = min_(total_eligible, p.max_deductions) # To claim aged or disabled deduction, filers also have to maintain a household for family members diff --git a/policyengine_us/variables/household/demographic/person/care_and_support_costs.py b/policyengine_us/variables/household/demographic/person/care_and_support_costs.py new file mode 100644 index 00000000000..013bae506a8 --- /dev/null +++ b/policyengine_us/variables/household/demographic/person/care_and_support_costs.py @@ -0,0 +1,9 @@ +from policyengine_us.model_api import * + + +class care_and_support_costs(Variable): + value_type = float + entity = Person + unit = USD + definition_period = YEAR + label = "Amount of total costs for care and support of seniors" diff --git a/policyengine_us/variables/household/demographic/person/care_and_support_payment.py b/policyengine_us/variables/household/demographic/person/care_and_support_payment.py new file mode 100644 index 00000000000..07409bcdbff --- /dev/null +++ b/policyengine_us/variables/household/demographic/person/care_and_support_payment.py @@ -0,0 +1,9 @@ +from policyengine_us.model_api import * + + +class care_and_support_payment(Variable): + value_type = float + entity = Person + unit = USD + definition_period = YEAR + label = "Amount of payments made for care and support of this person" From a748a25b8ea7882fe212cce9a59de02c239a9a19 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Fri, 10 Nov 2023 00:29:11 +0000 Subject: [PATCH 12/35] title, make format --- .../income/credits/aged_or_disabled/age_eligibility.yaml | 2 +- .../id/tax/income/credits/aged_or_disabled/amount.yaml | 2 +- .../id/tax/income/credits/aged_or_disabled/cost_rate.yaml | 2 +- .../deductions/aged_or_disabled/age_eligibility.yaml | 2 +- .../id/tax/income/deductions/aged_or_disabled/amount.yaml | 2 +- .../tax/income/deductions/aged_or_disabled/cost_rate.yaml | 2 +- .../{max_deductions.yaml => max_deduction.yaml} | 2 +- .../id/tax/income/credits/id_aged_or_disabled_credit.py | 8 ++++---- .../income/deductions/id_aged_or_disabled_deduction.py | 8 ++++---- 9 files changed, 15 insertions(+), 15 deletions(-) rename policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/{max_deductions.yaml => max_deduction.yaml} (87%) diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml index d2e1383de21..de545066b3f 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml @@ -1,4 +1,4 @@ -description: Idaho qualifies filers for the aged or disabled credit at or above this age threshold. +description: Idaho limits the aged or disabled credit to filers at or above this age threshold. values: 2002-01-01: 65 metadata: diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml index 14145c33656..c445261d6a8 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml @@ -3,7 +3,7 @@ values: 2002-01-01: 100 metadata: reference: - - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D (1) + - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D (4) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022, Part E href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=15 diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/cost_rate.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/cost_rate.yaml index 878f47899d6..0484a5ce102 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/cost_rate.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/cost_rate.yaml @@ -1,4 +1,4 @@ -description: Idaho allows for aged or disabled credit if the filer paid care and support costs over this percentage of total costs. +description: Idaho limits its aged or disabled credit for family members of filers for whom the filer pays more than this percentage of their care and support costs. metadata: unit: /1 period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml index ccce7a6117d..07e783b7e03 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml @@ -1,4 +1,4 @@ -description: Idaho provides the aged or disabled deduction for members of the taxpayers at or above this age threshold. +description: Idaho limits the aged or disabled deduction to filers at or above this age threshold. values: 1999-01-01: 65 metadata: diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml index aa4076a0292..7c9edc70a0d 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml @@ -3,7 +3,7 @@ values: 1999-01-01: 1_000 metadata: reference: - - title: Idaho Title 63, Chapter 30, Section 63-3022E (1) + - title: Idaho Title 63, Chapter 30, Section 63-3022E (4) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/cost_rate.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/cost_rate.yaml index 6b173ffdcd4..208a30c15f1 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/cost_rate.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/cost_rate.yaml @@ -1,4 +1,4 @@ -description: Idaho allows for aged or disabled deduction if the filer paid care and support costs over this percentage of total costs. +description: Idaho limits its aged or disabled deduction for family members of filers for whom the filer pays more than this percentage of their care and support costs. metadata: unit: /1 period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deduction.yaml similarity index 87% rename from policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml rename to policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deduction.yaml index 7fd701517b5..98ba04dc9e9 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deductions.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deduction.yaml @@ -1,4 +1,4 @@ -description: Idaho provides the development disabilities for this maximum number of family members. +description: Idaho limits the number of family members who qualify for the aged or disabled deduction to this amount. values: 1999-01-01: 3 metadata: diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py index c35ff5d53e1..49a74d5eb9b 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py @@ -28,11 +28,11 @@ def formula(tax_unit, period, parameters): care_and_support_payment[mask] / care_and_support_costs[mask] ) payment_eligible = support_payment_ratio > p.cost_rate - eligible = (age_eligible | disabled) & payment_eligible - total_eligible = sum(eligible) - capped_eligible = min_(total_eligible, p.max_amount) + eligible_person = (age_eligible | disabled) & payment_eligible + total_eligible_people = sum(eligible_person) + capped_eligible_people = min_(total_eligible_people, p.max_amount) # The aged or disabled credit can only be claimed if the aged # or disabled deduction is not claimed aged_deduction = tax_unit("id_aged_or_disabled_deduction", period) - credit_amount = capped_eligible * p.amount + credit_amount = capped_eligible_people * p.amount return where(aged_deduction == 0, credit_amount, 0) diff --git a/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py b/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py index 035a4ede7a1..065dcc1ba58 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py +++ b/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py @@ -28,9 +28,9 @@ def formula(tax_unit, period, parameters): care_and_support_payment[mask] / care_and_support_costs[mask] ) payment_eligible = support_payment_ratio > p.cost_rate - eligible = (age_eligible | disabled) & payment_eligible - total_eligible = tax_unit.sum(eligible) - capped_eligible = min_(total_eligible, p.max_deductions) + eligible_person = (age_eligible | disabled) & payment_eligible + total_eligible_people = tax_unit.sum(eligible_person) + capped_eligible_people = min_(total_eligible_people, p.max_deduction) # To claim aged or disabled deduction, filers also have to maintain a household for family members # and provide more than one-half of the family member’s support for the year - return capped_eligible * p.amount + return capped_eligible_people * p.amount From 5303e5124b1b8a3c8d2c795f5d559372b618ccb1 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Thu, 16 Nov 2023 00:13:52 +0000 Subject: [PATCH 13/35] rename, variables, test --- ...ge_eligibility.yaml => age_threshold.yaml} | 4 +- .../credits/aged_or_disabled/amount.yaml | 2 +- .../{max_amount.yaml => person_cap.yaml} | 2 +- ...e.yaml => support_fraction_threshold.yaml} | 4 +- .../id/tax/income/credits/refundable.yaml | 4 +- .../aged_or_disabled/age_threshold.yaml} | 6 +- .../aged_or_disabled/amount.yaml | 0 .../aged_or_disabled/person_cap.yaml} | 4 +- .../support_fraction_threshold.yaml} | 4 +- .../credits/id_aged_or_disabled_credit.yaml | 107 +++++--------- .../id_aged_or_disabled_deduction.yaml | 132 ++++++------------ .../credits/id_aged_or_disabled_credit.py | 26 ++-- .../id_aged_or_disabled_deduction.py | 36 ----- .../id_aged_or_disabled_deduction.py | 34 +++++ .../person/care_and_support_payment.py | 4 +- ...are_and_support_costs_paid_by_tax_filer.py | 8 ++ 16 files changed, 152 insertions(+), 225 deletions(-) rename policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/{age_eligibility.yaml => age_threshold.yaml} (89%) rename policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/{max_amount.yaml => person_cap.yaml} (87%) rename policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/{cost_rate.yaml => support_fraction_threshold.yaml} (76%) rename policyengine_us/parameters/gov/states/id/tax/income/{deductions/aged_or_disabled/age_eligibility.yaml => subtractions/aged_or_disabled/age_threshold.yaml} (86%) rename policyengine_us/parameters/gov/states/id/tax/income/{deductions => subtractions}/aged_or_disabled/amount.yaml (100%) rename policyengine_us/parameters/gov/states/id/tax/income/{deductions/aged_or_disabled/max_deduction.yaml => subtractions/aged_or_disabled/person_cap.yaml} (80%) rename policyengine_us/parameters/gov/states/id/tax/income/{deductions/aged_or_disabled/cost_rate.yaml => subtractions/aged_or_disabled/support_fraction_threshold.yaml} (75%) rename policyengine_us/tests/policy/baseline/gov/states/id/tax/income/{deductions => subtractions}/id_aged_or_disabled_deduction.yaml (52%) delete mode 100644 policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py create mode 100644 policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py create mode 100644 policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_threshold.yaml similarity index 89% rename from policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml rename to policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_threshold.yaml index de545066b3f..51a6b202655 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_eligibility.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_threshold.yaml @@ -1,4 +1,4 @@ -description: Idaho limits the aged or disabled credit to filers at or above this age threshold. +description: Idaho limits the aged or disabled credit to filers this age or older. values: 2002-01-01: 65 metadata: @@ -12,5 +12,5 @@ metadata: - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=2 unit: year - label: Idaho development disabilities credit age eligibility + label: Idaho development disabilities credit age threshold period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml index c445261d6a8..446368128de 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml @@ -1,4 +1,4 @@ -description: Idaho provides the following aged or disabled credit amount for each member of the taxpayers household. +description: Idaho provides the following aged or disabled credit amount for each person. values: 2002-01-01: 100 metadata: diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/person_cap.yaml similarity index 87% rename from policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml rename to policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/person_cap.yaml index 22d48840ec1..55bb08c6fa9 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/max_amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/person_cap.yaml @@ -1,4 +1,4 @@ -description: Idaho limits the number of family members who qualify for the aged or disabled credit to this amount. +description: Idaho limits the aged or disabled credit to this number of people per filing unit. values: 2002-01-01: 3 metadata: diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/cost_rate.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/support_fraction_threshold.yaml similarity index 76% rename from policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/cost_rate.yaml rename to policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/support_fraction_threshold.yaml index 0484a5ce102..041d2da33d2 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/cost_rate.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/support_fraction_threshold.yaml @@ -1,8 +1,8 @@ -description: Idaho limits its aged or disabled credit for family members of filers for whom the filer pays more than this percentage of their care and support costs. +description: Idaho limits its aged or disabled credit to family members of filers for whom the filer pays more than this fraction of their care and support costs. metadata: unit: /1 period: year - label: Idaho aged or disabled credit cost rate + label: Idaho aged or disabled credit support fraction threshold reference: - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml index b64551f435f..52a6e3935dc 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml @@ -3,8 +3,8 @@ metadata: unit: list label: Idaho refundable tax credits reference: - - title: Idaho TITLE 63, CHAPTER 30, Section 63-3025D (1) - href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/ + - title: Form 40, Individual Income Tax Return and Instructions 2022, Line 44 + href: https://www.cassia.gov/media/Assessor/Forms/Forms_Property/PTR_Tax%20Form-40.pdf#page=2 values: 2021-01-01: - id_aged_or_disabled_credit diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/age_threshold.yaml similarity index 86% rename from policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml rename to policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/age_threshold.yaml index 07e783b7e03..3d77817f7c4 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/age_eligibility.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/age_threshold.yaml @@ -1,16 +1,16 @@ -description: Idaho limits the aged or disabled deduction to filers at or above this age threshold. +description: Idaho limits the aged or disabled deduction to filers this age or older. values: 1999-01-01: 65 metadata: reference: - title: Idaho Title 63, Chapter 30, Section 63-3022E (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ - - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 + - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022, Line 15 href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3022E (1) href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3022e/ - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 unit: year - label: Idaho development disabilities deduction age eligibility + label: Idaho development disabilities deduction age threshold period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/amount.yaml similarity index 100% rename from policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/amount.yaml rename to policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/amount.yaml diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deduction.yaml b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/person_cap.yaml similarity index 80% rename from policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deduction.yaml rename to policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/person_cap.yaml index 98ba04dc9e9..4003441e8b1 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/max_deduction.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/person_cap.yaml @@ -1,4 +1,4 @@ -description: Idaho limits the number of family members who qualify for the aged or disabled deduction to this amount. +description: Idaho limits the aged or disabled deduction to this number of people per filing unit. values: 1999-01-01: 3 metadata: @@ -12,5 +12,5 @@ metadata: - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 unit: /1 - label: Idaho development disabilities deduction max deductions + label: Idaho development disabilities deduction max amount period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/cost_rate.yaml b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/support_fraction_threshold.yaml similarity index 75% rename from policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/cost_rate.yaml rename to policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/support_fraction_threshold.yaml index 208a30c15f1..a05cb78a9ea 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/deductions/aged_or_disabled/cost_rate.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/support_fraction_threshold.yaml @@ -1,8 +1,8 @@ -description: Idaho limits its aged or disabled deduction for family members of filers for whom the filer pays more than this percentage of their care and support costs. +description: Idaho limits its aged or disabled deduction to family members of filers for whom the filer pays more than this fraction of their care and support costs. metadata: unit: /1 period: year - label: Idaho aged or disabled deduction cost rate + label: Idaho aged or disabled deduction support fraction threshold reference: - title: Idaho Title 63, Chapter 30, Section 63-3022E (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml index 55347401791..9e6bacb1d39 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml @@ -4,17 +4,13 @@ people: person1: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false + is_tax_unit_head_or_spouse: false age: 64 - care_and_support_payment: 0 - care_and_support_costs: 0 + share_of_care_and_support_costs_paid_by_tax_filer: 0 person2: - is_disabled: false - is_tax_unit_spouse: false + is_tax_unit_head_or_spouse: false is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 households: household: @@ -33,18 +29,14 @@ people: person1: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false + is_tax_unit_head_or_spouse: false age: 65 - care_and_support_payment: 0 - care_and_support_costs: 0 + share_of_care_and_support_costs_paid_by_tax_filer: 0 person2: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false + is_tax_unit_head_or_spouse: false age: 65 - care_and_support_payment: 300 - care_and_support_costs: 1_000 + share_of_care_and_support_costs_paid_by_tax_filer: 0.3 households: household: members: [person1, person2] @@ -62,17 +54,13 @@ people: person1: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 0 - care_and_support_costs: 0 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0 age: 64 person2: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 households: household: @@ -91,31 +79,23 @@ people: person1: is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person2: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 person3: is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person4: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 households: household: @@ -134,31 +114,23 @@ people: person1: is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person2: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: true - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 person3: is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person4: is_disabled: false - is_tax_unit_spouse: true - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 households: household: @@ -177,31 +149,24 @@ people: person1: is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person2: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: true - care_and_support_payment: 600 + is_tax_unit_head_or_spouse: true + care_and_support_payments_from_tax_filer: 600 care_and_support_costs: 1_000 age: 65 person3: is_disabled: true - is_tax_unit_spouse: true - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person4: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 households: household: diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml similarity index 52% rename from policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml rename to policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml index 75e36ba74ec..93130ead963 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml @@ -4,17 +4,13 @@ people: person1: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: true - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person2: is_disabled: false - is_tax_unit_spouse: true - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 households: household: @@ -29,10 +25,8 @@ people: person1: is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: true - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 households: household: @@ -47,10 +41,8 @@ people: person1: is_disabled: false - is_tax_unit_spouse: true - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 households: household: @@ -65,18 +57,14 @@ people: person1: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false + is_tax_unit_head_or_spouse: false age: 65 - care_and_support_payment: 0 - care_and_support_costs: 0 + share_of_care_and_support_costs_paid_by_tax_filer: 0 person2: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false + is_tax_unit_head_or_spouse: false age: 65 - care_and_support_payment: 300 - care_and_support_costs: 1_000 + share_of_care_and_support_costs_paid_by_tax_filer: 0.3 households: household: members: [person1, person2] @@ -90,31 +78,23 @@ people: person1: is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person2: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 person3: is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person4: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 households: household: @@ -129,17 +109,13 @@ people: person1: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person2: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 households: household: @@ -154,17 +130,13 @@ people: person1: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person2: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 households: household: @@ -179,31 +151,23 @@ people: person1: is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person2: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: true - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 person3: is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person4: is_disabled: false - is_tax_unit_spouse: true - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 households: household: @@ -218,31 +182,23 @@ people: person1: is_disabled: true - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person2: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: true - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 person3: is_disabled: true - is_tax_unit_spouse: true - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 64 person4: is_disabled: false - is_tax_unit_spouse: false - is_tax_unit_head: false - care_and_support_payment: 600 - care_and_support_costs: 1_000 + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 age: 65 households: household: diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py index 49a74d5eb9b..f5a8e386a38 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py @@ -10,27 +10,27 @@ class id_aged_or_disabled_credit(Variable): defined_for = StateCode.ID def formula(tax_unit, period, parameters): + # The program includes individuals in the household, including those not in the filing unit. + # We simplify by limiting to those in the filing unit. person = tax_unit.members - age = person("age", period) - head_or_spouse = person("is_tax_unit_head_or_spouse", period) - disabled = person("is_disabled", period) p = parameters( period ).gov.states.id.tax.income.credits.aged_or_disabled - age_eligible = (age >= p.age_eligibility) & ~head_or_spouse + age = person("age", period) + head_or_spouse = person("is_tax_unit_head_or_spouse", period) + # Aged-eligible individuals cannot be head or spouse. + age_eligible = (age >= p.age_threshold) & ~head_or_spouse + # Disabled-eligible individuals can include head and spouse. + disabled_eligible = person("is_disabled", period) # To claim aged or disabled credit, filers also have to maintain a household for family members # and provide more than one-half of the family member’s support for the year - care_and_support_payment = person("care_and_support_payment", period) - care_and_support_costs = person("care_and_support_costs", period) - support_payment_ratio = np.zeros_like(care_and_support_costs) - mask = care_and_support_costs != 0 - support_payment_ratio[mask] = ( - care_and_support_payment[mask] / care_and_support_costs[mask] + support_payment_ratio = person( + "share_of_care_and_support_costs_paid_by_tax_filer", period ) - payment_eligible = support_payment_ratio > p.cost_rate - eligible_person = (age_eligible | disabled) & payment_eligible + payment_eligible = support_payment_ratio > p.support_fraction_threshold + eligible_person = (age_eligible | disabled_eligible) & payment_eligible total_eligible_people = sum(eligible_person) - capped_eligible_people = min_(total_eligible_people, p.max_amount) + capped_eligible_people = min_(total_eligible_people, p.person_cap) # The aged or disabled credit can only be claimed if the aged # or disabled deduction is not claimed aged_deduction = tax_unit("id_aged_or_disabled_deduction", period) diff --git a/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py b/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py deleted file mode 100644 index 065dcc1ba58..00000000000 --- a/policyengine_us/variables/gov/states/id/tax/income/deductions/id_aged_or_disabled_deduction.py +++ /dev/null @@ -1,36 +0,0 @@ -from policyengine_us.model_api import * - - -class id_aged_or_disabled_deduction(Variable): - value_type = float - entity = TaxUnit - label = "Idaho aged or disabled deduction" - unit = USD - definition_period = YEAR - defined_for = StateCode.ID - - def formula(tax_unit, period, parameters): - person = tax_unit.members - age = person("age", period) - head_or_spouse = person("is_tax_unit_head_or_spouse", period) - disabled = person("is_disabled", period) - p = parameters( - period - ).gov.states.id.tax.income.deductions.aged_or_disabled - age_eligible = (age >= p.age_eligibility) & ~head_or_spouse - # To claim aged or disabled credit, filers also have to maintain a household for family members - # and provide more than one-half of the family member’s support for the year - care_and_support_payment = person("care_and_support_payment", period) - care_and_support_costs = person("care_and_support_costs", period) - support_payment_ratio = np.zeros_like(care_and_support_costs) - mask = care_and_support_costs != 0 - support_payment_ratio[mask] = ( - care_and_support_payment[mask] / care_and_support_costs[mask] - ) - payment_eligible = support_payment_ratio > p.cost_rate - eligible_person = (age_eligible | disabled) & payment_eligible - total_eligible_people = tax_unit.sum(eligible_person) - capped_eligible_people = min_(total_eligible_people, p.max_deduction) - # To claim aged or disabled deduction, filers also have to maintain a household for family members - # and provide more than one-half of the family member’s support for the year - return capped_eligible_people * p.amount diff --git a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py new file mode 100644 index 00000000000..2cabad2db10 --- /dev/null +++ b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py @@ -0,0 +1,34 @@ +from policyengine_us.model_api import * + + +class id_aged_or_disabled_deduction(Variable): + value_type = float + entity = TaxUnit + label = "Idaho aged or disabled deduction" + unit = USD + definition_period = YEAR + defined_for = StateCode.ID + + def formula(tax_unit, period, parameters): + # The program includes individuals in the household, including those not in the filing unit. + # We simplify by limiting to those in the filing unit. + person = tax_unit.members + age = person("age", period) + head_or_spouse = person("is_tax_unit_head_or_spouse", period) + p = parameters( + period + ).gov.states.id.tax.income.subtractions.aged_or_disabled + # Aged-eligible individuals cannot be head or spouse. + age_eligible = (age >= p.age_threshold) & ~head_or_spouse + # Disabled-eligible individuals can include head and spouse. + disabled_eligible = person("is_disabled", period) + # To claim aged or disabled credit, filers also have to maintain a household for family members + # and provide more than one-half of the family member’s support for the year + support_payment_ratio = person( + "share_of_care_and_support_costs_paid_by_tax_filer", period + ) + payment_eligible = support_payment_ratio > p.support_fraction_threshold + eligible_person = (age_eligible | disabled_eligible) & payment_eligible + total_eligible_people = tax_unit.sum(eligible_person) + capped_eligible_people = min_(total_eligible_people, p.person_cap) + return capped_eligible_people * p.amount diff --git a/policyengine_us/variables/household/demographic/person/care_and_support_payment.py b/policyengine_us/variables/household/demographic/person/care_and_support_payment.py index 07409bcdbff..83e1c76218b 100644 --- a/policyengine_us/variables/household/demographic/person/care_and_support_payment.py +++ b/policyengine_us/variables/household/demographic/person/care_and_support_payment.py @@ -1,9 +1,9 @@ from policyengine_us.model_api import * -class care_and_support_payment(Variable): +class care_and_support_payments_from_tax_filer(Variable): value_type = float entity = Person unit = USD definition_period = YEAR - label = "Amount of payments made for care and support of this person" + label = "Amount of payments made by the tax filer for this person's care and support" diff --git a/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py b/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py new file mode 100644 index 00000000000..e4c441f0cfe --- /dev/null +++ b/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py @@ -0,0 +1,8 @@ +from policyengine_us.model_api import * + + +class share_of_care_and_support_costs_paid_by_tax_filer(Variable): + value_type = float + entity = Person + definition_period = YEAR + label = "The percentage of care and support costs of a senior paid by tax filer" From 61dd0e3c742b65e16b67085aee9124f801f13a3e Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Thu, 16 Nov 2023 00:31:51 +0000 Subject: [PATCH 14/35] rename payment.py --- ...ort_payment.py => care_and_support_payments_from_tax_filer.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename policyengine_us/variables/household/demographic/person/{care_and_support_payment.py => care_and_support_payments_from_tax_filer.py} (100%) diff --git a/policyengine_us/variables/household/demographic/person/care_and_support_payment.py b/policyengine_us/variables/household/demographic/person/care_and_support_payments_from_tax_filer.py similarity index 100% rename from policyengine_us/variables/household/demographic/person/care_and_support_payment.py rename to policyengine_us/variables/household/demographic/person/care_and_support_payments_from_tax_filer.py From a2e41a4c6a14a5e083697caadaee8ebfe5f4d906 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Thu, 16 Nov 2023 04:42:16 +0000 Subject: [PATCH 15/35] add fomula, title/labels --- .../income/credits/aged_or_disabled/amount.yaml | 4 ++-- .../credits/aged_or_disabled/person_cap.yaml | 2 +- .../subtractions/aged_or_disabled/amount.yaml | 4 ++-- .../subtractions/aged_or_disabled/person_cap.yaml | 2 +- .../demographic/person/care_and_support_costs.py | 2 +- .../care_and_support_payments_from_tax_filer.py | 14 ++++++++++++++ 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml index 446368128de..819d70db6ea 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml @@ -1,4 +1,4 @@ -description: Idaho provides the following aged or disabled credit amount for each person. +description: Idaho provides the following aged or disabled credit amount for members of the taxpayer's household. values: 2002-01-01: 100 metadata: @@ -12,5 +12,5 @@ metadata: - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=2 unit: currency-USD - label: Idaho development disabilities credit amount + label: Idaho aged or disabled credit period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/person_cap.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/person_cap.yaml index 55bb08c6fa9..3d42a15b84d 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/person_cap.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/person_cap.yaml @@ -12,5 +12,5 @@ metadata: - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=2 unit: /1 - label: Idaho development disabilities credit max amount + label: Idaho aged or disabled credit maximum household members period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/amount.yaml index 7c9edc70a0d..f1d91730f16 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/amount.yaml @@ -1,4 +1,4 @@ -description: Idaho provides the following aged or disabled deduction amount for members of the taxpayers household. +description: Idaho provides the following aged or disabled deduction amount for members of the taxpayer's household. values: 1999-01-01: 1_000 metadata: @@ -12,5 +12,5 @@ metadata: - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 unit: currency-USD - label: Idaho development disabilities deduction amount + label: Idaho aged or disabled deduction period: year diff --git a/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/person_cap.yaml b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/person_cap.yaml index 4003441e8b1..0503aa9008a 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/person_cap.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/person_cap.yaml @@ -12,5 +12,5 @@ metadata: - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 unit: /1 - label: Idaho development disabilities deduction max amount + label: Idaho aged or disabled deduction maximum household members period: year diff --git a/policyengine_us/variables/household/demographic/person/care_and_support_costs.py b/policyengine_us/variables/household/demographic/person/care_and_support_costs.py index 013bae506a8..6d7649da444 100644 --- a/policyengine_us/variables/household/demographic/person/care_and_support_costs.py +++ b/policyengine_us/variables/household/demographic/person/care_and_support_costs.py @@ -6,4 +6,4 @@ class care_and_support_costs(Variable): entity = Person unit = USD definition_period = YEAR - label = "Amount of total costs for care and support of seniors" + label = "Total costs for this person's care and support" diff --git a/policyengine_us/variables/household/demographic/person/care_and_support_payments_from_tax_filer.py b/policyengine_us/variables/household/demographic/person/care_and_support_payments_from_tax_filer.py index 83e1c76218b..9834c1805b1 100644 --- a/policyengine_us/variables/household/demographic/person/care_and_support_payments_from_tax_filer.py +++ b/policyengine_us/variables/household/demographic/person/care_and_support_payments_from_tax_filer.py @@ -7,3 +7,17 @@ class care_and_support_payments_from_tax_filer(Variable): unit = USD definition_period = YEAR label = "Amount of payments made by the tax filer for this person's care and support" + + def formula(tax_unit, period, parameters): + person = tax_unit.members + care_and_support_payment = person( + "care_and_support_payments_from_tax_filer", period + ) + care_and_support_costs = person("care_and_support_costs", period) + support_payment_ratio = np.zeros_like(care_and_support_costs) + mask = care_and_support_costs != 0 + support_payment_ratio[mask] = ( + care_and_support_payment[mask] / care_and_support_costs[mask] + ) + + return support_payment_ratio From bbb83644f3c6755689bf4c209a8ee16d719d5ab6 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Thu, 16 Nov 2023 20:19:57 +0000 Subject: [PATCH 16/35] format,merge --- .../states/id/tax/income/credits/refundable.yaml | 2 +- .../care_and_support_payments_from_tax_filer.py | 14 -------------- ..._of_care_and_support_costs_paid_by_tax_filer.py | 13 +++++++++++++ 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml index 52a6e3935dc..bebb070ad51 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml @@ -6,5 +6,5 @@ metadata: - title: Form 40, Individual Income Tax Return and Instructions 2022, Line 44 href: https://www.cassia.gov/media/Assessor/Forms/Forms_Property/PTR_Tax%20Form-40.pdf#page=2 values: - 2021-01-01: + 2002-01-01: - id_aged_or_disabled_credit diff --git a/policyengine_us/variables/household/demographic/person/care_and_support_payments_from_tax_filer.py b/policyengine_us/variables/household/demographic/person/care_and_support_payments_from_tax_filer.py index 9834c1805b1..83e1c76218b 100644 --- a/policyengine_us/variables/household/demographic/person/care_and_support_payments_from_tax_filer.py +++ b/policyengine_us/variables/household/demographic/person/care_and_support_payments_from_tax_filer.py @@ -7,17 +7,3 @@ class care_and_support_payments_from_tax_filer(Variable): unit = USD definition_period = YEAR label = "Amount of payments made by the tax filer for this person's care and support" - - def formula(tax_unit, period, parameters): - person = tax_unit.members - care_and_support_payment = person( - "care_and_support_payments_from_tax_filer", period - ) - care_and_support_costs = person("care_and_support_costs", period) - support_payment_ratio = np.zeros_like(care_and_support_costs) - mask = care_and_support_costs != 0 - support_payment_ratio[mask] = ( - care_and_support_payment[mask] / care_and_support_costs[mask] - ) - - return support_payment_ratio diff --git a/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py b/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py index e4c441f0cfe..bf9cacd658f 100644 --- a/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py +++ b/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py @@ -6,3 +6,16 @@ class share_of_care_and_support_costs_paid_by_tax_filer(Variable): entity = Person definition_period = YEAR label = "The percentage of care and support costs of a senior paid by tax filer" + + def formula(tax_unit, period, parameters): + person = tax_unit.members + care_and_support_payment = person( + "care_and_support_payments_from_tax_filer", period + ) + care_and_support_costs = person("care_and_support_costs", period) + support_payment_ratio = np.zeros_like(care_and_support_costs) + mask = care_and_support_costs != 0 + support_payment_ratio[mask] = ( + care_and_support_payment[mask] / care_and_support_costs[mask] + ) + return support_payment_ratio From cb65d08929d9eb1200a65f239e963fdba3b891f2 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Thu, 16 Nov 2023 20:46:36 +0000 Subject: [PATCH 17/35] revise entity of share.py --- .../person/share_of_care_and_support_costs_paid_by_tax_filer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py b/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py index bf9cacd658f..c08cae9f838 100644 --- a/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py +++ b/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py @@ -3,7 +3,7 @@ class share_of_care_and_support_costs_paid_by_tax_filer(Variable): value_type = float - entity = Person + entity = TaxUnit definition_period = YEAR label = "The percentage of care and support costs of a senior paid by tax filer" From 9efcbb613680ab6d811efc40afcee73059f785af Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:44:04 +0000 Subject: [PATCH 18/35] person level, add test file --- .../share_of_care_and_support_costs_paid_by_tax_filer.yaml | 7 +++++++ .../share_of_care_and_support_costs_paid_by_tax_filer.py | 5 ++--- 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml diff --git a/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml b/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml new file mode 100644 index 00000000000..08a62e3b6fc --- /dev/null +++ b/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml @@ -0,0 +1,7 @@ +- name: Calculate filers support share on family members + period: 2022 + input: + care_and_support_payments_from_tax_filer: 600 + care_and_support_costs: 1000 + output: + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 \ No newline at end of file diff --git a/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py b/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py index c08cae9f838..7a7983355f3 100644 --- a/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py +++ b/policyengine_us/variables/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.py @@ -3,12 +3,11 @@ class share_of_care_and_support_costs_paid_by_tax_filer(Variable): value_type = float - entity = TaxUnit + entity = Person definition_period = YEAR label = "The percentage of care and support costs of a senior paid by tax filer" - def formula(tax_unit, period, parameters): - person = tax_unit.members + def formula(person, period, parameters): care_and_support_payment = person( "care_and_support_payments_from_tax_filer", period ) From de48d4dbd98f63e550e9a02e57a15beb44686edf Mon Sep 17 00:00:00 2001 From: Pavel Makarchuk <110687043+PavelMakarchuk@users.noreply.github.com> Date: Sun, 19 Nov 2023 21:24:31 +0100 Subject: [PATCH 19/35] Update policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml --- .../share_of_care_and_support_costs_paid_by_tax_filer.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml b/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml index 08a62e3b6fc..3b3e202097c 100644 --- a/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml +++ b/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml @@ -2,6 +2,6 @@ period: 2022 input: care_and_support_payments_from_tax_filer: 600 - care_and_support_costs: 1000 + care_and_support_costs: 1_000 output: share_of_care_and_support_costs_paid_by_tax_filer: 0.6 \ No newline at end of file From 454182da2bd770fff28d7f9a9b5b0b6f3f277563 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Mon, 20 Nov 2023 18:11:29 +0000 Subject: [PATCH 20/35] num format, pass test --- .../share_of_care_and_support_costs_paid_by_tax_filer.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml b/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml index 08a62e3b6fc..fb5823bf911 100644 --- a/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml +++ b/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml @@ -2,6 +2,6 @@ period: 2022 input: care_and_support_payments_from_tax_filer: 600 - care_and_support_costs: 1000 + care_and_support_costs: 1_000 output: - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 \ No newline at end of file + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 From ac74c358a941d713cfd6e5d5a33343886211ca27 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Wed, 22 Nov 2023 23:42:24 +0000 Subject: [PATCH 21/35] add variable to choose credit and deduction --- .../gov/states/ut/tax/income/rate.yaml | 2 +- .../credits/id_aged_or_disabled_credit.yaml | 41 ++++--------------- .../id_aged_or_disabled_deduction.yaml | 36 ++++++++++++++++ .../ut_retirement_credit_max.yaml | 2 +- .../credits/id_aged_or_disabled_credit.py | 8 ++-- .../id_selected_aged_or_disabled_credit.py | 10 +++++ .../id_aged_or_disabled_deduction.py | 6 ++- 7 files changed, 65 insertions(+), 40 deletions(-) create mode 100644 policyengine_us/variables/gov/states/id/tax/income/id_selected_aged_or_disabled_credit.py diff --git a/policyengine_us/parameters/gov/states/ut/tax/income/rate.yaml b/policyengine_us/parameters/gov/states/ut/tax/income/rate.yaml index 278930e3253..df6a30998fc 100644 --- a/policyengine_us/parameters/gov/states/ut/tax/income/rate.yaml +++ b/policyengine_us/parameters/gov/states/ut/tax/income/rate.yaml @@ -19,4 +19,4 @@ metadata: - title: Utah Code 59-10-104 (2) (b) #2022-05-04 href: https://le.utah.gov/xcode/Title59/Chapter10/59-10-S104.html?v=C59-10-S104_2022050420220504 - title: 2023 Utah Code 59-10-104 (2) (b) # The rate was changed to 0.0465 in May 2023 - href: https://le.utah.gov/xcode/Title59/Chapter10/59-10-S104.html?v=C59-10-S104_2022050420220504 \ No newline at end of file + href: https://le.utah.gov/xcode/Title59/Chapter10/59-10-S104.html?v=C59-10-S104_2022050420220504 diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml index 9e6bacb1d39..d03ab1e7db6 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml @@ -19,7 +19,7 @@ tax_units: tax_unit: members: [person1, person2] - id_aged_or_disabled_deduction: 0 + id_selected_aged_or_disabled_credit: true output: id_aged_or_disabled_credit: 100 @@ -44,32 +44,7 @@ tax_units: tax_unit: members: [person1, person2] - id_aged_or_disabled_deduction: 0 - output: - id_aged_or_disabled_credit: 0 - -- name: One eligible person - claim deduction - period: 2023 - input: - people: - person1: - is_disabled: false - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0 - age: 64 - person2: - is_disabled: false - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 - households: - household: - members: [person1, person2] - state_code: ID - tax_units: - tax_unit: - members: [person1, person2] - id_aged_or_disabled_deduction: 1000 + id_selected_aged_or_disabled_credit: true output: id_aged_or_disabled_credit: 0 @@ -103,8 +78,8 @@ state_code: ID tax_units: tax_unit: - members: [person1, person2] - id_aged_or_disabled_deduction: 0 + members: [person1, person2, person3, person4] + id_selected_aged_or_disabled_credit: true output: id_aged_or_disabled_credit: 300 @@ -138,8 +113,8 @@ state_code: ID tax_units: tax_unit: - members: [person1, person2] - id_aged_or_disabled_deduction: 0 + members: [person1, person2, person3, person4] + id_selected_aged_or_disabled_credit: true output: id_aged_or_disabled_credit: 200 @@ -174,7 +149,7 @@ state_code: ID tax_units: tax_unit: - members: [person1, person2] - id_aged_or_disabled_deduction: 0 + members: [person1, person2, person3, person4] + id_selected_aged_or_disabled_credit: true output: id_aged_or_disabled_credit: 300 diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml index 93130ead963..54d47338baf 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml @@ -16,6 +16,10 @@ household: members: [person1, person2] state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + id_selected_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 0 @@ -32,6 +36,10 @@ household: members: [person1] state_code: ID + tax_units: + tax_unit: + members: [person1] + id_selected_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 1_000 @@ -48,6 +56,10 @@ household: members: [person1] state_code: ID + tax_units: + tax_unit: + members: [person1] + id_selected_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 0 @@ -69,6 +81,10 @@ household: members: [person1, person2] state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + id_selected_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 0 @@ -100,6 +116,10 @@ household: members: [person1, person2, person3, person4] state_code: ID + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + id_selected_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 3_000 @@ -121,6 +141,10 @@ household: members: [person1, person2] state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + id_selected_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 1_000 @@ -142,6 +166,10 @@ household: members: [person1, person2] state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + id_selected_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 0 @@ -173,6 +201,10 @@ household: members: [person1, person2, person3, person4] state_code: ID + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + id_selected_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 2_000 @@ -204,5 +236,9 @@ household: members: [person1, person2, person3, person4] state_code: ID + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + id_selected_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 3_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ut/tax/income/credits/retirement_credit/ut_retirement_credit_max.yaml b/policyengine_us/tests/policy/baseline/gov/states/ut/tax/income/credits/retirement_credit/ut_retirement_credit_max.yaml index bb9bbeab31d..2c10e171296 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ut/tax/income/credits/retirement_credit/ut_retirement_credit_max.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ut/tax/income/credits/retirement_credit/ut_retirement_credit_max.yaml @@ -115,4 +115,4 @@ members: [person1, person2] state_code: UT output: - ut_retirement_credit_max: 662.5 \ No newline at end of file + ut_retirement_credit_max: 662.5 diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py index f5a8e386a38..8847d3f397d 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py @@ -31,8 +31,8 @@ def formula(tax_unit, period, parameters): eligible_person = (age_eligible | disabled_eligible) & payment_eligible total_eligible_people = sum(eligible_person) capped_eligible_people = min_(total_eligible_people, p.person_cap) - # The aged or disabled credit can only be claimed if the aged - # or disabled deduction is not claimed - aged_deduction = tax_unit("id_aged_or_disabled_deduction", period) credit_amount = capped_eligible_people * p.amount - return where(aged_deduction == 0, credit_amount, 0) + selected_credit = tax_unit( + "id_selected_aged_or_disabled_credit", period + ) + return where(selected_credit, credit_amount, 0) diff --git a/policyengine_us/variables/gov/states/id/tax/income/id_selected_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/id_selected_aged_or_disabled_credit.py new file mode 100644 index 00000000000..6e0d3d9e575 --- /dev/null +++ b/policyengine_us/variables/gov/states/id/tax/income/id_selected_aged_or_disabled_credit.py @@ -0,0 +1,10 @@ +from policyengine_us.model_api import * + + +class id_selected_aged_or_disabled_credit(Variable): + value_type = bool + entity = TaxUnit + label = "Idaho selected aged or disabled credit" + definition_period = YEAR + defined_for = StateCode.ID + default_value = True diff --git a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py index 2cabad2db10..48e0d185a1b 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py +++ b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py @@ -31,4 +31,8 @@ def formula(tax_unit, period, parameters): eligible_person = (age_eligible | disabled_eligible) & payment_eligible total_eligible_people = tax_unit.sum(eligible_person) capped_eligible_people = min_(total_eligible_people, p.person_cap) - return capped_eligible_people * p.amount + deduction_amount = capped_eligible_people * p.amount + selected_credit = tax_unit( + "id_selected_aged_or_disabled_credit", period + ) + return where(selected_credit, 0, deduction_amount) From 7c8332eb554d7036b5e457fa46f98b70e4bafdeb Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Thu, 30 Nov 2023 03:34:24 +0000 Subject: [PATCH 22/35] add 0 test --- ...e_and_support_costs_paid_by_tax_filer.yaml | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml b/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml index fb5823bf911..a0a66cff675 100644 --- a/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml +++ b/policyengine_us/tests/policy/baseline/household/demographic/person/share_of_care_and_support_costs_paid_by_tax_filer.yaml @@ -5,3 +5,27 @@ care_and_support_costs: 1_000 output: share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + +- name: Calculate filers support share on family members + period: 2022 + input: + care_and_support_payments_from_tax_filer: 0 + care_and_support_costs: 1_000 + output: + share_of_care_and_support_costs_paid_by_tax_filer: 0 + +- name: Calculate filers support share on family members + period: 2022 + input: + care_and_support_payments_from_tax_filer: 600 + care_and_support_costs: 0 + output: + share_of_care_and_support_costs_paid_by_tax_filer: 0 + +- name: Calculate filers support share on family members + period: 2022 + input: + care_and_support_payments_from_tax_filer: 0 + care_and_support_costs: 0 + output: + share_of_care_and_support_costs_paid_by_tax_filer: 0 From 2ac0b4d515cb907e45f906b11570ef7b883cc758 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Thu, 30 Nov 2023 03:43:43 +0000 Subject: [PATCH 23/35] add ut edge case --- .../ut_retirement_credit_max.yaml | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/policyengine_us/tests/policy/baseline/gov/states/ut/tax/income/credits/retirement_credit/ut_retirement_credit_max.yaml b/policyengine_us/tests/policy/baseline/gov/states/ut/tax/income/credits/retirement_credit/ut_retirement_credit_max.yaml index 2c10e171296..71275114c66 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ut/tax/income/credits/retirement_credit/ut_retirement_credit_max.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ut/tax/income/credits/retirement_credit/ut_retirement_credit_max.yaml @@ -116,3 +116,25 @@ state_code: UT output: ut_retirement_credit_max: 662.5 + +- name: Edge case test, birth year + period: 2022 + input: + people: + person1: + age: 70 + tax_exempt_interest_income: 500 + person2: + age: 69 + tax_exempt_interest_income: 500 + tax_units: + tax_unit: + members: [person1, person2] + ut_total_income: 30_000 + filing_status: SINGLE + households: + household: + members: [person1, person2] + state_code: UT + output: + ut_retirement_credit_max: 300 From 2f2be1e418a765166b19e500288279f5567d58f7 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Thu, 30 Nov 2023 21:43:17 +0000 Subject: [PATCH 24/35] add eligible_person.py, change all test files, change title: receive credit --- .../credits/id_aged_or_disabled_credit.yaml | 118 ++------- ...ed_or_disabled_credit_eligible_person.yaml | 226 ++++++++++++++++++ .../id_aged_or_disabled_deduction.yaml | 201 ++-------------- ...or_disabled_deduction_eligible_person.yaml | 226 ++++++++++++++++++ .../credits/id_aged_or_disabled_credit.py | 22 +- ...aged_or_disabled_credit_eligible_person.py | 29 +++ ...=> id_receives_aged_or_disabled_credit.py} | 6 +- .../id_aged_or_disabled_deduction.py | 20 +- ...d_or_disabled_deduction_eligible_person.py | 29 +++ 9 files changed, 564 insertions(+), 313 deletions(-) create mode 100644 policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.yaml create mode 100644 policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py rename policyengine_us/variables/gov/states/id/tax/income/{id_selected_aged_or_disabled_credit.py => id_receives_aged_or_disabled_credit.py} (52%) create mode 100644 policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml index d03ab1e7db6..b9aa01d29ae 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml @@ -1,17 +1,11 @@ -- name: One eligible person +- name: One eligible people period: 2023 input: people: person1: - is_disabled: false - is_tax_unit_head_or_spouse: false - age: 64 - share_of_care_and_support_costs_paid_by_tax_filer: 0 + id_aged_or_disabled_credit_eligible_person: true person2: - is_tax_unit_head_or_spouse: false - is_tax_unit_head: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 + id_aged_or_disabled_credit_eligible_person: false households: household: members: [person1, person2] @@ -19,24 +13,18 @@ tax_units: tax_unit: members: [person1, person2] - id_selected_aged_or_disabled_credit: true + id_receives_aged_or_disabled_credit: true output: id_aged_or_disabled_credit: 100 -- name: No eligible person as payment less than one-half of cost +- name: No eligible people as eligible person is false period: 2023 input: people: person1: - is_disabled: false - is_tax_unit_head_or_spouse: false - age: 65 - share_of_care_and_support_costs_paid_by_tax_filer: 0 + id_aged_or_disabled_credit_eligible_person: false person2: - is_disabled: false - is_tax_unit_head_or_spouse: false - age: 65 - share_of_care_and_support_costs_paid_by_tax_filer: 0.3 + id_aged_or_disabled_credit_eligible_person: false households: household: members: [person1, person2] @@ -44,105 +32,41 @@ tax_units: tax_unit: members: [person1, person2] - id_selected_aged_or_disabled_credit: true + id_receives_aged_or_disabled_credit: true output: id_aged_or_disabled_credit: 0 -- name: Four eligible people - capped at 3 - period: 2023 - input: - people: - person1: - is_disabled: true - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 - person2: - is_disabled: false - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 - person3: - is_disabled: true - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 - person4: - is_disabled: false - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 - households: - household: - members: [person1, person2, person3, person4] - state_code: ID - tax_units: - tax_unit: - members: [person1, person2, person3, person4] - id_selected_aged_or_disabled_credit: true - output: - id_aged_or_disabled_credit: 300 - -- name: Head and Spouse are not eligible if aged +- name: No eligible people as receiving deduction period: 2023 input: people: person1: - is_disabled: true - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 + id_aged_or_disabled_credit_eligible_person: true person2: - is_disabled: false - is_tax_unit_head_or_spouse: true - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 - person3: - is_disabled: true - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 - person4: - is_disabled: false - is_tax_unit_head_or_spouse: true - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 + id_aged_or_disabled_credit_eligible_person: false households: household: - members: [person1, person2, person3, person4] + members: [person1, person2] state_code: ID tax_units: tax_unit: - members: [person1, person2, person3, person4] - id_selected_aged_or_disabled_credit: true + members: [person1, person2] + id_receives_aged_or_disabled_credit: false output: - id_aged_or_disabled_credit: 200 + id_aged_or_disabled_credit: 0 -- name: Head and Spouse are not eligible if aged but are eligible if disabled +- name: Four eligible people - capped at 3 period: 2023 input: people: person1: - is_disabled: true - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 + id_aged_or_disabled_credit_eligible_person: true person2: - is_disabled: false - is_tax_unit_head_or_spouse: true - care_and_support_payments_from_tax_filer: 600 - care_and_support_costs: 1_000 - age: 65 + id_aged_or_disabled_credit_eligible_person: true person3: - is_disabled: true - is_tax_unit_head_or_spouse: true - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 + id_aged_or_disabled_credit_eligible_person: true person4: - is_disabled: false - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 + id_aged_or_disabled_credit_eligible_person: true households: household: members: [person1, person2, person3, person4] @@ -150,6 +74,6 @@ tax_units: tax_unit: members: [person1, person2, person3, person4] - id_selected_aged_or_disabled_credit: true + id_receives_aged_or_disabled_credit: true output: id_aged_or_disabled_credit: 300 diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.yaml new file mode 100644 index 00000000000..361a2a20327 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.yaml @@ -0,0 +1,226 @@ +- name: Househould with only head and aged spouse + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + person2: + is_disabled: false + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + households: + household: + members: [person1, person2] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + output: + id_aged_or_disabled_credit_eligible_person: [false, false] + +- name: Househould with only disabled head + period: 2023 + input: + people: + person1: + is_disabled: true + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + households: + household: + members: [person1] + state_code: ID + tax_units: + tax_unit: + members: [person1] + output: + id_aged_or_disabled_deduction_eligible_person: [true] + + +- name: Househould with only aged spouse + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + households: + household: + members: [person1] + state_code: ID + tax_units: + tax_unit: + members: [person1] + output: + id_aged_or_disabled_deduction_eligible_person: [false] + +- name: No eligible person as payment less than one-half of cost + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_head_or_spouse: false + age: 65 + share_of_care_and_support_costs_paid_by_tax_filer: 0 + person2: + is_disabled: false + is_tax_unit_head_or_spouse: false + age: 65 + share_of_care_and_support_costs_paid_by_tax_filer: 0.3 + households: + household: + members: [person1, person2] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + output: + id_aged_or_disabled_deduction_eligible_person: [false, false] + +- name: Four eligible people - capped at 3 + period: 2023 + input: + people: + person1: + is_disabled: true + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + person2: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + person3: + is_disabled: true + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + person4: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + households: + household: + members: [person1, person2, person3, person4] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + output: + id_aged_or_disabled_deduction_eligible_person: [true, true, true, true] + +- name: One eligible person + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + person2: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + households: + household: + members: [person1, person2] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + output: + id_aged_or_disabled_deduction_eligible_person: [false, true] + +- name: No eligible people as age less than 65 + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + person2: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + households: + household: + members: [person1, person2] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + output: + id_aged_or_disabled_deduction_eligible_person: [false, false] + +- name: Head and Spouse are not eligible if aged + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + person2: + is_disabled: false + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + households: + household: + members: [person1, person2] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + output: + id_aged_or_disabled_deduction_eligible_person: [true, false] + +- name: Head and Spouse are not eligible if aged but are eligible if disabled + period: 2023 + input: + people: + person1: + is_disabled: true + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + person2: + is_disabled: false + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + person3: + is_disabled: true + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + person4: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + households: + household: + members: [person1, person2, person3, person4] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + output: + id_aged_or_disabled_deduction_eligible_person: [true, false, true, true] diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml index 54d47338baf..eb79241f273 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml @@ -1,17 +1,11 @@ -- name: Househould with only head and aged spouse +- name: One eligible people period: 2023 input: people: person1: - is_disabled: false - is_tax_unit_head_or_spouse: true - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 + id_aged_or_disabled_deduction_eligible_person: true person2: - is_disabled: false - is_tax_unit_head_or_spouse: true - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 + id_aged_or_disabled_deduction_eligible_person: false households: household: members: [person1, person2] @@ -19,64 +13,18 @@ tax_units: tax_unit: members: [person1, person2] - id_selected_aged_or_disabled_credit: false - output: - id_aged_or_disabled_deduction: 0 - -- name: Househould with only disabled head - period: 2023 - input: - people: - person1: - is_disabled: true - is_tax_unit_head_or_spouse: true - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 - households: - household: - members: [person1] - state_code: ID - tax_units: - tax_unit: - members: [person1] - id_selected_aged_or_disabled_credit: false + id_receives_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 1_000 -- name: Househould with only aged spouse +- name: No eligible people as eligible person is false period: 2023 input: people: person1: - is_disabled: false - is_tax_unit_head_or_spouse: true - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 - households: - household: - members: [person1] - state_code: ID - tax_units: - tax_unit: - members: [person1] - id_selected_aged_or_disabled_credit: false - output: - id_aged_or_disabled_deduction: 0 - -- name: No eligible person as payment less than one-half of cost - period: 2023 - input: - people: - person1: - is_disabled: false - is_tax_unit_head_or_spouse: false - age: 65 - share_of_care_and_support_costs_paid_by_tax_filer: 0 + id_aged_or_disabled_deduction_eligible_person: false person2: - is_disabled: false - is_tax_unit_head_or_spouse: false - age: 65 - share_of_care_and_support_costs_paid_by_tax_filer: 0.3 + id_aged_or_disabled_deduction_eligible_person: false households: household: members: [person1, person2] @@ -84,59 +32,18 @@ tax_units: tax_unit: members: [person1, person2] - id_selected_aged_or_disabled_credit: false + id_receives_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 0 -- name: Four eligible people - capped at 3 - period: 2023 - input: - people: - person1: - is_disabled: true - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 - person2: - is_disabled: false - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 - person3: - is_disabled: true - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 - person4: - is_disabled: false - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 - households: - household: - members: [person1, person2, person3, person4] - state_code: ID - tax_units: - tax_unit: - members: [person1, person2, person3, person4] - id_selected_aged_or_disabled_credit: false - output: - id_aged_or_disabled_deduction: 3_000 - -- name: One eligible person +- name: No eligible deduction as receiving credit period: 2023 input: people: person1: - is_disabled: false - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 + id_aged_or_disabled_deduction_eligible_person: true person2: - is_disabled: false - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 + id_aged_or_disabled_deduction_eligible_person: false households: household: members: [person1, person2] @@ -144,94 +51,22 @@ tax_units: tax_unit: members: [person1, person2] - id_selected_aged_or_disabled_credit: false - output: - id_aged_or_disabled_deduction: 1_000 - -- name: No eligible people as age less than 65 - period: 2023 - input: - people: - person1: - is_disabled: false - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 - person2: - is_disabled: false - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 - households: - household: - members: [person1, person2] - state_code: ID - tax_units: - tax_unit: - members: [person1, person2] - id_selected_aged_or_disabled_credit: false + id_receives_aged_or_disabled_credit: true output: id_aged_or_disabled_deduction: 0 -- name: Head and Spouse are not eligible if aged - period: 2023 - input: - people: - person1: - is_disabled: true - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 - person2: - is_disabled: false - is_tax_unit_head_or_spouse: true - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 - person3: - is_disabled: true - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 - person4: - is_disabled: false - is_tax_unit_head_or_spouse: true - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 - households: - household: - members: [person1, person2, person3, person4] - state_code: ID - tax_units: - tax_unit: - members: [person1, person2, person3, person4] - id_selected_aged_or_disabled_credit: false - output: - id_aged_or_disabled_deduction: 2_000 - -- name: Head and Spouse are not eligible if aged but are eligible if disabled +- name: Four eligible people - capped at 3 period: 2023 input: people: person1: - is_disabled: true - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 + id_aged_or_disabled_deduction_eligible_person: true person2: - is_disabled: false - is_tax_unit_head_or_spouse: true - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 + id_aged_or_disabled_deduction_eligible_person: true person3: - is_disabled: true - is_tax_unit_head_or_spouse: true - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 64 + id_aged_or_disabled_deduction_eligible_person: true person4: - is_disabled: false - is_tax_unit_head_or_spouse: false - share_of_care_and_support_costs_paid_by_tax_filer: 0.6 - age: 65 + id_aged_or_disabled_deduction_eligible_person: true households: household: members: [person1, person2, person3, person4] @@ -239,6 +74,6 @@ tax_units: tax_unit: members: [person1, person2, person3, person4] - id_selected_aged_or_disabled_credit: false + id_receives_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 3_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.yaml new file mode 100644 index 00000000000..6e64804dda1 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.yaml @@ -0,0 +1,226 @@ +- name: Househould with only head and aged spouse + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + person2: + is_disabled: false + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + households: + household: + members: [person1, person2] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + output: + id_aged_or_disabled_deduction_eligible_person: [false, false] + +- name: Househould with only disabled head + period: 2023 + input: + people: + person1: + is_disabled: true + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + households: + household: + members: [person1] + state_code: ID + tax_units: + tax_unit: + members: [person1] + output: + id_aged_or_disabled_deduction_eligible_person: [true] + + +- name: Househould with only aged spouse + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + households: + household: + members: [person1] + state_code: ID + tax_units: + tax_unit: + members: [person1] + output: + id_aged_or_disabled_deduction_eligible_person: [false] + +- name: No eligible person as payment less than one-half of cost + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_head_or_spouse: false + age: 65 + share_of_care_and_support_costs_paid_by_tax_filer: 0 + person2: + is_disabled: false + is_tax_unit_head_or_spouse: false + age: 65 + share_of_care_and_support_costs_paid_by_tax_filer: 0.3 + households: + household: + members: [person1, person2] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + output: + id_aged_or_disabled_deduction_eligible_person: [false, false] + +- name: Four eligible people - capped at 3 + period: 2023 + input: + people: + person1: + is_disabled: true + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + person2: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + person3: + is_disabled: true + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + person4: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + households: + household: + members: [person1, person2, person3, person4] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + output: + id_aged_or_disabled_deduction_eligible_person: [true, true, true, true] + +- name: One eligible person + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + person2: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + households: + household: + members: [person1, person2] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + output: + id_aged_or_disabled_deduction_eligible_person: [false, true] + +- name: No eligible people as age less than 65 + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + person2: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + households: + household: + members: [person1, person2] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + output: + id_aged_or_disabled_deduction_eligible_person: [false, false] + +- name: Head and Spouse are not eligible if aged + period: 2023 + input: + people: + person1: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + person2: + is_disabled: false + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + households: + household: + members: [person1, person2] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2] + output: + id_aged_or_disabled_deduction_eligible_person: [true, false] + +- name: Head and Spouse are not eligible if aged but are eligible if disabled + period: 2023 + input: + people: + person1: + is_disabled: true + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + person2: + is_disabled: false + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + person3: + is_disabled: true + is_tax_unit_head_or_spouse: true + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 64 + person4: + is_disabled: false + is_tax_unit_head_or_spouse: false + share_of_care_and_support_costs_paid_by_tax_filer: 0.6 + age: 65 + households: + household: + members: [person1, person2, person3, person4] + state_code: ID + tax_units: + tax_unit: + members: [person1, person2, person3, person4] + output: + id_aged_or_disabled_deduction_eligible_person: [true, false, true, true] diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py index 8847d3f397d..3b1a6799e86 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py @@ -16,23 +16,13 @@ def formula(tax_unit, period, parameters): p = parameters( period ).gov.states.id.tax.income.credits.aged_or_disabled - age = person("age", period) - head_or_spouse = person("is_tax_unit_head_or_spouse", period) - # Aged-eligible individuals cannot be head or spouse. - age_eligible = (age >= p.age_threshold) & ~head_or_spouse - # Disabled-eligible individuals can include head and spouse. - disabled_eligible = person("is_disabled", period) - # To claim aged or disabled credit, filers also have to maintain a household for family members - # and provide more than one-half of the family member’s support for the year - support_payment_ratio = person( - "share_of_care_and_support_costs_paid_by_tax_filer", period + eligible_person = person( + "id_aged_or_disabled_credit_eligible_person", period ) - payment_eligible = support_payment_ratio > p.support_fraction_threshold - eligible_person = (age_eligible | disabled_eligible) & payment_eligible - total_eligible_people = sum(eligible_person) + total_eligible_people = tax_unit.sum(eligible_person) capped_eligible_people = min_(total_eligible_people, p.person_cap) credit_amount = capped_eligible_people * p.amount - selected_credit = tax_unit( - "id_selected_aged_or_disabled_credit", period + receive_credit = tax_unit( + "id_receives_aged_or_disabled_credit", period ) - return where(selected_credit, credit_amount, 0) + return where(receive_credit, credit_amount, 0) diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py new file mode 100644 index 00000000000..8801e1057b8 --- /dev/null +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py @@ -0,0 +1,29 @@ +from policyengine_us.model_api import * + + +class id_aged_or_disabled_credit_eligible_person(Variable): + value_type = bool + entity = Person + label = "Idaho aged or disabled credit eligible person" + unit = USD + definition_period = YEAR + defined_for = StateCode.ID + + def formula(person, period, parameters): + p = parameters( + period + ).gov.states.id.tax.income.subtractions.aged_or_disabled + head_or_spouse = person("is_tax_unit_head_or_spouse", period) + age = person("age", period) + # Aged-eligible individuals cannot be head or spouse. + age_eligible = (age >= p.age_threshold) & ~head_or_spouse + # Disabled-eligible individuals can include head and spouse. + disabled_eligible = person("is_disabled", period) + # To claim aged or disabled credit, filers also have to maintain a household for family members + # and provide more than one-half of the family member’s support for the year + support_payment_ratio = person( + "share_of_care_and_support_costs_paid_by_tax_filer", period + ) + payment_eligible = support_payment_ratio > p.support_fraction_threshold + eligible_person = (age_eligible | disabled_eligible) & payment_eligible + return eligible_person diff --git a/policyengine_us/variables/gov/states/id/tax/income/id_selected_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/id_receives_aged_or_disabled_credit.py similarity index 52% rename from policyengine_us/variables/gov/states/id/tax/income/id_selected_aged_or_disabled_credit.py rename to policyengine_us/variables/gov/states/id/tax/income/id_receives_aged_or_disabled_credit.py index 6e0d3d9e575..e6e186f4af9 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/id_selected_aged_or_disabled_credit.py +++ b/policyengine_us/variables/gov/states/id/tax/income/id_receives_aged_or_disabled_credit.py @@ -1,10 +1,12 @@ from policyengine_us.model_api import * -class id_selected_aged_or_disabled_credit(Variable): +class id_receives_aged_or_disabled_credit(Variable): value_type = bool entity = TaxUnit - label = "Idaho selected aged or disabled credit" + label = ( + "Filer receives the Idaho aged or disabled credit over the deduction" + ) definition_period = YEAR defined_for = StateCode.ID default_value = True diff --git a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py index 48e0d185a1b..a2ca2d8d0db 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py +++ b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py @@ -13,26 +13,16 @@ def formula(tax_unit, period, parameters): # The program includes individuals in the household, including those not in the filing unit. # We simplify by limiting to those in the filing unit. person = tax_unit.members - age = person("age", period) - head_or_spouse = person("is_tax_unit_head_or_spouse", period) p = parameters( period ).gov.states.id.tax.income.subtractions.aged_or_disabled - # Aged-eligible individuals cannot be head or spouse. - age_eligible = (age >= p.age_threshold) & ~head_or_spouse - # Disabled-eligible individuals can include head and spouse. - disabled_eligible = person("is_disabled", period) - # To claim aged or disabled credit, filers also have to maintain a household for family members - # and provide more than one-half of the family member’s support for the year - support_payment_ratio = person( - "share_of_care_and_support_costs_paid_by_tax_filer", period + eligible_person = person( + "id_aged_or_disabled_deduction_eligible_person", period ) - payment_eligible = support_payment_ratio > p.support_fraction_threshold - eligible_person = (age_eligible | disabled_eligible) & payment_eligible total_eligible_people = tax_unit.sum(eligible_person) capped_eligible_people = min_(total_eligible_people, p.person_cap) deduction_amount = capped_eligible_people * p.amount - selected_credit = tax_unit( - "id_selected_aged_or_disabled_credit", period + receive_credit = tax_unit( + "id_receives_aged_or_disabled_credit", period ) - return where(selected_credit, 0, deduction_amount) + return where(receive_credit, 0, deduction_amount) diff --git a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py new file mode 100644 index 00000000000..408a01971ac --- /dev/null +++ b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py @@ -0,0 +1,29 @@ +from policyengine_us.model_api import * + + +class id_aged_or_disabled_deduction_eligible_person(Variable): + value_type = bool + entity = Person + label = "Idaho aged or disabled deduction eligible person" + unit = USD + definition_period = YEAR + defined_for = StateCode.ID + + def formula(person, period, parameters): + p = parameters( + period + ).gov.states.id.tax.income.subtractions.aged_or_disabled + head_or_spouse = person("is_tax_unit_head_or_spouse", period) + age = person("age", period) + # Aged-eligible individuals cannot be head or spouse. + age_eligible = (age >= p.age_threshold) & ~head_or_spouse + # Disabled-eligible individuals can include head and spouse. + disabled_eligible = person("is_disabled", period) + # To claim aged or disabled credit, filers also have to maintain a household for family members + # and provide more than one-half of the family member’s support for the year + support_payment_ratio = person( + "share_of_care_and_support_costs_paid_by_tax_filer", period + ) + payment_eligible = support_payment_ratio > p.support_fraction_threshold + eligible_person = (age_eligible | disabled_eligible) & payment_eligible + return eligible_person From c8e4782e0535c543b97be56b46b0b5087c761861 Mon Sep 17 00:00:00 2001 From: Pavel Makarchuk <110687043+PavelMakarchuk@users.noreply.github.com> Date: Fri, 1 Dec 2023 01:07:29 +0100 Subject: [PATCH 25/35] Update policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py --- .../income/credits/id_aged_or_disabled_credit_eligible_person.py | 1 - 1 file changed, 1 deletion(-) diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py index 8801e1057b8..f5c6fae1cc0 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py @@ -5,7 +5,6 @@ class id_aged_or_disabled_credit_eligible_person(Variable): value_type = bool entity = Person label = "Idaho aged or disabled credit eligible person" - unit = USD definition_period = YEAR defined_for = StateCode.ID From 40b2058ec31adda6ede2485da2c254c0c297e5d6 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Fri, 1 Dec 2023 00:20:33 +0000 Subject: [PATCH 26/35] Co-authored-by: Pavel Makarchuk --- .../income/credits/aged_or_disabled/age_threshold.yaml | 2 +- .../credits/id_aged_or_disabled_credit_eligible_person.py | 8 +++----- .../id_aged_or_disabled_deduction_eligible_person.py | 6 ++---- setup.py | 2 +- 4 files changed, 7 insertions(+), 11 deletions(-) diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_threshold.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_threshold.yaml index 51a6b202655..31115eb3540 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_threshold.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/age_threshold.yaml @@ -12,5 +12,5 @@ metadata: - title: Form 39R, Resident Supplemental Schedule 2021 approved href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=2 unit: year - label: Idaho development disabilities credit age threshold + label: Idaho aged or disabled credit age threshold period: year diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py index 8801e1057b8..6e2cbb49f6b 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py @@ -4,8 +4,7 @@ class id_aged_or_disabled_credit_eligible_person(Variable): value_type = bool entity = Person - label = "Idaho aged or disabled credit eligible person" - unit = USD + label = "Eligible person for the Idaho aged or disabled credit" definition_period = YEAR defined_for = StateCode.ID @@ -15,7 +14,7 @@ def formula(person, period, parameters): ).gov.states.id.tax.income.subtractions.aged_or_disabled head_or_spouse = person("is_tax_unit_head_or_spouse", period) age = person("age", period) - # Aged-eligible individuals cannot be head or spouse. + # Aged-eligible individuals cannot be the head or spouse. age_eligible = (age >= p.age_threshold) & ~head_or_spouse # Disabled-eligible individuals can include head and spouse. disabled_eligible = person("is_disabled", period) @@ -25,5 +24,4 @@ def formula(person, period, parameters): "share_of_care_and_support_costs_paid_by_tax_filer", period ) payment_eligible = support_payment_ratio > p.support_fraction_threshold - eligible_person = (age_eligible | disabled_eligible) & payment_eligible - return eligible_person + return (age_eligible | disabled_eligible) & payment_eligible \ No newline at end of file diff --git a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py index 408a01971ac..dd7ddcb5474 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py +++ b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py @@ -5,7 +5,6 @@ class id_aged_or_disabled_deduction_eligible_person(Variable): value_type = bool entity = Person label = "Idaho aged or disabled deduction eligible person" - unit = USD definition_period = YEAR defined_for = StateCode.ID @@ -15,7 +14,7 @@ def formula(person, period, parameters): ).gov.states.id.tax.income.subtractions.aged_or_disabled head_or_spouse = person("is_tax_unit_head_or_spouse", period) age = person("age", period) - # Aged-eligible individuals cannot be head or spouse. + # Aged eligible individuals cannot be the head or spouse. age_eligible = (age >= p.age_threshold) & ~head_or_spouse # Disabled-eligible individuals can include head and spouse. disabled_eligible = person("is_disabled", period) @@ -25,5 +24,4 @@ def formula(person, period, parameters): "share_of_care_and_support_costs_paid_by_tax_filer", period ) payment_eligible = support_payment_ratio > p.support_fraction_threshold - eligible_person = (age_eligible | disabled_eligible) & payment_eligible - return eligible_person + return (age_eligible | disabled_eligible) & payment_eligible diff --git a/setup.py b/setup.py index 4c265ddf637..9e20257bf32 100644 --- a/setup.py +++ b/setup.py @@ -37,7 +37,7 @@ "microdf_python", "pandas", "pathlib", - "policyengine-core>=2.10,<3", + "policyengine-core>=2.11.1,<3", "pytest", "pytest-dependency", "pyyaml", From ee89ed73a9f0cf84c24c513db821965e029a267a Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Fri, 1 Dec 2023 00:22:29 +0000 Subject: [PATCH 27/35] adjusted label --- .../credits/id_aged_or_disabled_credit_eligible_person.py | 2 +- .../id_aged_or_disabled_deduction_eligible_person.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py index ae7af483c82..6e2cbb49f6b 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py @@ -4,7 +4,7 @@ class id_aged_or_disabled_credit_eligible_person(Variable): value_type = bool entity = Person - label = "Idaho aged or disabled credit eligible person" + label = "Eligible person for the Idaho aged or disabled credit" definition_period = YEAR defined_for = StateCode.ID diff --git a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py index dd7ddcb5474..7c1e4bfb374 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py +++ b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py @@ -4,7 +4,7 @@ class id_aged_or_disabled_deduction_eligible_person(Variable): value_type = bool entity = Person - label = "Idaho aged or disabled deduction eligible person" + label = "Eligible person for the Idaho aged or disabled deduction" definition_period = YEAR defined_for = StateCode.ID From f74d2d6a3b0e51462d4ea4a5e0fa13c1078889f3 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Fri, 1 Dec 2023 01:04:58 +0000 Subject: [PATCH 28/35] make formt --- ...aged_or_disabled_credit_eligible_person.py | 2 +- ...rly_homeowner_or_renter_credit_eligible.py | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 policyengine_us/variables/gov/states/mt/tax/income/credits/mt_elderly_homeowner_or_renter_credit/mt_elderly_homeowner_or_renter_credit_eligible.py diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py index 6e2cbb49f6b..80ed65a7310 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py @@ -24,4 +24,4 @@ def formula(person, period, parameters): "share_of_care_and_support_costs_paid_by_tax_filer", period ) payment_eligible = support_payment_ratio > p.support_fraction_threshold - return (age_eligible | disabled_eligible) & payment_eligible \ No newline at end of file + return (age_eligible | disabled_eligible) & payment_eligible diff --git a/policyengine_us/variables/gov/states/mt/tax/income/credits/mt_elderly_homeowner_or_renter_credit/mt_elderly_homeowner_or_renter_credit_eligible.py b/policyengine_us/variables/gov/states/mt/tax/income/credits/mt_elderly_homeowner_or_renter_credit/mt_elderly_homeowner_or_renter_credit_eligible.py new file mode 100644 index 00000000000..6ed2b1188c4 --- /dev/null +++ b/policyengine_us/variables/gov/states/mt/tax/income/credits/mt_elderly_homeowner_or_renter_credit/mt_elderly_homeowner_or_renter_credit_eligible.py @@ -0,0 +1,22 @@ +from policyengine_us.model_api import * + + +class mt_elderly_homeowner_or_renter_credit_eligible(Variable): + value_type = bool + entity = TaxUnit + label = "Montana Elderly Homeowner/Renter Credit Eligibility" + definition_period = YEAR + defined_for = StateCode.MT + + def formula(tax_unit, period, parameters): + p = parameters( + period + ).gov.states.mt.tax.income.credits.elderly_homeowner_or_renter_credit.eligibility + age_head = tax_unit("age_head", period) + age_spouse = tax_unit("age_spouse", period) + # If the filer is married and both spouses owned or rent the residence + # Only one of them must meet the age requierments + # reference: https://mtrevenue.gov/wp-content/uploads/dlm_uploads/2022/12/Form-2-2022-Instructions.pdf#page=47 + age_eligible = age_head | age_spouse >= p.age_threshold + gross_household_income = tax_unit("mt_gross_household_income", period) + return age_eligible & (gross_household_income < p.income_limit) From c0baa07accc12a89d56c6b249334f67119ee7e61 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Fri, 1 Dec 2023 01:32:35 +0000 Subject: [PATCH 29/35] notes --- .../credits/id_aged_or_disabled_credit_eligible_person.py | 4 ++-- .../id_aged_or_disabled_deduction_eligible_person.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py index 80ed65a7310..8c64db7d6dc 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit_eligible_person.py @@ -14,9 +14,9 @@ def formula(person, period, parameters): ).gov.states.id.tax.income.subtractions.aged_or_disabled head_or_spouse = person("is_tax_unit_head_or_spouse", period) age = person("age", period) - # Aged-eligible individuals cannot be the head or spouse. + # Aged eligible individuals cannot be the head or spouse. age_eligible = (age >= p.age_threshold) & ~head_or_spouse - # Disabled-eligible individuals can include head and spouse. + # Disabled eligible individuals can include head and spouse. disabled_eligible = person("is_disabled", period) # To claim aged or disabled credit, filers also have to maintain a household for family members # and provide more than one-half of the family member’s support for the year diff --git a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py index 7c1e4bfb374..f742473d9f5 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py +++ b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py @@ -16,7 +16,7 @@ def formula(person, period, parameters): age = person("age", period) # Aged eligible individuals cannot be the head or spouse. age_eligible = (age >= p.age_threshold) & ~head_or_spouse - # Disabled-eligible individuals can include head and spouse. + # Disabled eligible individuals can include head and spouse. disabled_eligible = person("is_disabled", period) # To claim aged or disabled credit, filers also have to maintain a household for family members # and provide more than one-half of the family member’s support for the year From d951f235b30fbb95abf04b1dcccb5faac3838061 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Thu, 30 Nov 2023 20:43:46 -0500 Subject: [PATCH 30/35] Delete policyengine_us/variables/gov/states/mt/tax/income/credits/mt_elderly_homeowner_or_renter_credit/mt_elderly_homeowner_or_renter_credit_eligible.py --- ...rly_homeowner_or_renter_credit_eligible.py | 22 ------------------- 1 file changed, 22 deletions(-) delete mode 100644 policyengine_us/variables/gov/states/mt/tax/income/credits/mt_elderly_homeowner_or_renter_credit/mt_elderly_homeowner_or_renter_credit_eligible.py diff --git a/policyengine_us/variables/gov/states/mt/tax/income/credits/mt_elderly_homeowner_or_renter_credit/mt_elderly_homeowner_or_renter_credit_eligible.py b/policyengine_us/variables/gov/states/mt/tax/income/credits/mt_elderly_homeowner_or_renter_credit/mt_elderly_homeowner_or_renter_credit_eligible.py deleted file mode 100644 index 6ed2b1188c4..00000000000 --- a/policyengine_us/variables/gov/states/mt/tax/income/credits/mt_elderly_homeowner_or_renter_credit/mt_elderly_homeowner_or_renter_credit_eligible.py +++ /dev/null @@ -1,22 +0,0 @@ -from policyengine_us.model_api import * - - -class mt_elderly_homeowner_or_renter_credit_eligible(Variable): - value_type = bool - entity = TaxUnit - label = "Montana Elderly Homeowner/Renter Credit Eligibility" - definition_period = YEAR - defined_for = StateCode.MT - - def formula(tax_unit, period, parameters): - p = parameters( - period - ).gov.states.mt.tax.income.credits.elderly_homeowner_or_renter_credit.eligibility - age_head = tax_unit("age_head", period) - age_spouse = tax_unit("age_spouse", period) - # If the filer is married and both spouses owned or rent the residence - # Only one of them must meet the age requierments - # reference: https://mtrevenue.gov/wp-content/uploads/dlm_uploads/2022/12/Form-2-2022-Instructions.pdf#page=47 - age_eligible = age_head | age_spouse >= p.age_threshold - gross_household_income = tax_unit("mt_gross_household_income", period) - return age_eligible & (gross_household_income < p.income_limit) From 313ddf49266be0a55ece9757cd341d4bd0655554 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Fri, 15 Dec 2023 18:54:40 +0000 Subject: [PATCH 31/35] fix Max's comments --- .../id/tax/income/credits/aged_or_disabled/amount.yaml | 2 +- .../gov/states/id/tax/income/credits/refundable.yaml | 2 +- .../tax/income/subtractions/aged_or_disabled/amount.yaml | 2 +- .../aged_or_disabled/support_fraction_threshold.yaml | 4 ++-- .../id/tax/income/credits/id_aged_or_disabled_credit.yaml | 8 ++++---- .../subtractions/id_aged_or_disabled_deduction.yaml | 8 ++++---- .../id/tax/income/credits/id_aged_or_disabled_credit.py | 8 ++++---- .../id/tax/income/id_receives_aged_or_disabled_credit.py | 4 +++- .../income/subtractions/id_aged_or_disabled_deduction.py | 7 +++---- 9 files changed, 23 insertions(+), 22 deletions(-) diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml index 819d70db6ea..796aa8d7624 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/aged_or_disabled/amount.yaml @@ -1,4 +1,4 @@ -description: Idaho provides the following aged or disabled credit amount for members of the taxpayer's household. +description: Idaho provides this credit for each aged or disabled person in the taxpayer's household. values: 2002-01-01: 100 metadata: diff --git a/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml b/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml index e37640b6e43..2308159acbe 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/credits/refundable.yaml @@ -16,4 +16,4 @@ values: 2021-01-01: - id_ctc # Idaho Child Tax Credit - id_grocery_credit # Idaho grocery credit - + - id_aged_or_disabled_credit # Idaho aged or disabled credit diff --git a/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/amount.yaml b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/amount.yaml index f1d91730f16..bce06b7a24f 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/amount.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/amount.yaml @@ -1,4 +1,4 @@ -description: Idaho provides the following aged or disabled deduction amount for members of the taxpayer's household. +description: Idaho subtracts this amount from adjusted gross income for each aged or disabled person in the taxpayer's household. values: 1999-01-01: 1_000 metadata: diff --git a/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/support_fraction_threshold.yaml b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/support_fraction_threshold.yaml index a05cb78a9ea..2b74c15287d 100644 --- a/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/support_fraction_threshold.yaml +++ b/policyengine_us/parameters/gov/states/id/tax/income/subtractions/aged_or_disabled/support_fraction_threshold.yaml @@ -6,11 +6,11 @@ metadata: reference: - title: Idaho Title 63, Chapter 30, Section 63-3022E (1) href: https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3022e/ - - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022 + - title: Idaho Form 39R, Resident Supplemental Schedule and Instructions 2022, line 15 href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_12-30-2022.pdf#page=9 - title: 2021 Idaho Code, Title 63, Chapter 30, Section 63-3022E (1) href: https://law.justia.com/codes/idaho/2021/title-63/chapter-30/section-63-3022e/ - - title: Form 39R, Resident Supplemental Schedule 2021 approved + - title: Form 39R, Resident Supplemental Schedule 2021 approved, line 15 href: https://tax.idaho.gov/wp-content/uploads/forms/EFO00088/EFO00088_09-23-2021.pdf#page=1 values: 1999-01-01: 0.5 diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml index b9aa01d29ae..6d423c6a6ea 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml @@ -13,7 +13,7 @@ tax_units: tax_unit: members: [person1, person2] - id_receives_aged_or_disabled_credit: true + receives_credit: true output: id_aged_or_disabled_credit: 100 @@ -32,7 +32,7 @@ tax_units: tax_unit: members: [person1, person2] - id_receives_aged_or_disabled_credit: true + receives_credit: true output: id_aged_or_disabled_credit: 0 @@ -51,7 +51,7 @@ tax_units: tax_unit: members: [person1, person2] - id_receives_aged_or_disabled_credit: false + receives_credit: false output: id_aged_or_disabled_credit: 0 @@ -74,6 +74,6 @@ tax_units: tax_unit: members: [person1, person2, person3, person4] - id_receives_aged_or_disabled_credit: true + receives_credit: true output: id_aged_or_disabled_credit: 300 diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml index eb79241f273..0cb6a5d9144 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml @@ -13,7 +13,7 @@ tax_units: tax_unit: members: [person1, person2] - id_receives_aged_or_disabled_credit: false + receives_credit: false output: id_aged_or_disabled_deduction: 1_000 @@ -32,7 +32,7 @@ tax_units: tax_unit: members: [person1, person2] - id_receives_aged_or_disabled_credit: false + receives_credit: false output: id_aged_or_disabled_deduction: 0 @@ -51,7 +51,7 @@ tax_units: tax_unit: members: [person1, person2] - id_receives_aged_or_disabled_credit: true + receives_credit: true output: id_aged_or_disabled_deduction: 0 @@ -74,6 +74,6 @@ tax_units: tax_unit: members: [person1, person2, person3, person4] - id_receives_aged_or_disabled_credit: false + receives_credit: false output: id_aged_or_disabled_deduction: 3_000 diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py index 3b1a6799e86..5f22de3823e 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py @@ -22,7 +22,7 @@ def formula(tax_unit, period, parameters): total_eligible_people = tax_unit.sum(eligible_person) capped_eligible_people = min_(total_eligible_people, p.person_cap) credit_amount = capped_eligible_people * p.amount - receive_credit = tax_unit( - "id_receives_aged_or_disabled_credit", period - ) - return where(receive_credit, credit_amount, 0) + # Filers cannot claim the credit if they claim the subtraction. + # This variable verifies that. + eligible = tax_unit("receives_credit", period) + return eligible * credit_amount diff --git a/policyengine_us/variables/gov/states/id/tax/income/id_receives_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/id_receives_aged_or_disabled_credit.py index e6e186f4af9..0ff5bb642fc 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/id_receives_aged_or_disabled_credit.py +++ b/policyengine_us/variables/gov/states/id/tax/income/id_receives_aged_or_disabled_credit.py @@ -1,12 +1,14 @@ from policyengine_us.model_api import * -class id_receives_aged_or_disabled_credit(Variable): +class receives_credit(Variable): value_type = bool entity = TaxUnit label = ( "Filer receives the Idaho aged or disabled credit over the deduction" ) definition_period = YEAR + # 63-3025D(1) indicates that filers can only take either the deduction or credit. + reference = "https://legislature.idaho.gov/statutesrules/idstat/title63/t63ch30/sect63-3025d/" defined_for = StateCode.ID default_value = True diff --git a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py index a2ca2d8d0db..9184b4529cb 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py +++ b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py @@ -22,7 +22,6 @@ def formula(tax_unit, period, parameters): total_eligible_people = tax_unit.sum(eligible_person) capped_eligible_people = min_(total_eligible_people, p.person_cap) deduction_amount = capped_eligible_people * p.amount - receive_credit = tax_unit( - "id_receives_aged_or_disabled_credit", period - ) - return where(receive_credit, 0, deduction_amount) + # Filers cannot claim the subtraction if they claim the credit. + eligible = ~tax_unit("receives_credit", period) + return eligible * deduction_amount From c36f9ed866aa01eb5d29d17c79549276a8ed6b64 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Fri, 15 Dec 2023 19:17:24 +0000 Subject: [PATCH 32/35] rename variable, typo --- changelog_entry.yaml | 2 +- .../id/tax/income/credits/id_aged_or_disabled_credit.yaml | 8 ++++---- .../subtractions/id_aged_or_disabled_deduction.yaml | 8 ++++---- .../id/tax/income/credits/id_aged_or_disabled_credit.py | 2 +- .../id/tax/income/id_receives_aged_or_disabled_credit.py | 2 +- .../income/subtractions/id_aged_or_disabled_deduction.py | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/changelog_entry.yaml b/changelog_entry.yaml index b99990577cb..e2681b3fc55 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -1,4 +1,4 @@ - bump: minor changes: added: - - Idaho aged and disbaled deduction. + - Idaho aged and disabled deduction. diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml index 6d423c6a6ea..b9aa01d29ae 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.yaml @@ -13,7 +13,7 @@ tax_units: tax_unit: members: [person1, person2] - receives_credit: true + id_receives_aged_or_disabled_credit: true output: id_aged_or_disabled_credit: 100 @@ -32,7 +32,7 @@ tax_units: tax_unit: members: [person1, person2] - receives_credit: true + id_receives_aged_or_disabled_credit: true output: id_aged_or_disabled_credit: 0 @@ -51,7 +51,7 @@ tax_units: tax_unit: members: [person1, person2] - receives_credit: false + id_receives_aged_or_disabled_credit: false output: id_aged_or_disabled_credit: 0 @@ -74,6 +74,6 @@ tax_units: tax_unit: members: [person1, person2, person3, person4] - receives_credit: true + id_receives_aged_or_disabled_credit: true output: id_aged_or_disabled_credit: 300 diff --git a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml index 0cb6a5d9144..eb79241f273 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.yaml @@ -13,7 +13,7 @@ tax_units: tax_unit: members: [person1, person2] - receives_credit: false + id_receives_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 1_000 @@ -32,7 +32,7 @@ tax_units: tax_unit: members: [person1, person2] - receives_credit: false + id_receives_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 0 @@ -51,7 +51,7 @@ tax_units: tax_unit: members: [person1, person2] - receives_credit: true + id_receives_aged_or_disabled_credit: true output: id_aged_or_disabled_deduction: 0 @@ -74,6 +74,6 @@ tax_units: tax_unit: members: [person1, person2, person3, person4] - receives_credit: false + id_receives_aged_or_disabled_credit: false output: id_aged_or_disabled_deduction: 3_000 diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py index 5f22de3823e..efe7419b73f 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py @@ -24,5 +24,5 @@ def formula(tax_unit, period, parameters): credit_amount = capped_eligible_people * p.amount # Filers cannot claim the credit if they claim the subtraction. # This variable verifies that. - eligible = tax_unit("receives_credit", period) + eligible = tax_unit("receid_receives_aged_or_disabled_creditives_credit", period) return eligible * credit_amount diff --git a/policyengine_us/variables/gov/states/id/tax/income/id_receives_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/id_receives_aged_or_disabled_credit.py index 0ff5bb642fc..ce06499164d 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/id_receives_aged_or_disabled_credit.py +++ b/policyengine_us/variables/gov/states/id/tax/income/id_receives_aged_or_disabled_credit.py @@ -1,7 +1,7 @@ from policyengine_us.model_api import * -class receives_credit(Variable): +class id_receives_aged_or_disabled_credit(Variable): value_type = bool entity = TaxUnit label = ( diff --git a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py index 9184b4529cb..dcefdfe4749 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py +++ b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction.py @@ -23,5 +23,5 @@ def formula(tax_unit, period, parameters): capped_eligible_people = min_(total_eligible_people, p.person_cap) deduction_amount = capped_eligible_people * p.amount # Filers cannot claim the subtraction if they claim the credit. - eligible = ~tax_unit("receives_credit", period) + eligible = ~tax_unit("id_receives_aged_or_disabled_credit", period) return eligible * deduction_amount From b334b649de6b24462331910e30f4775707616a34 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Fri, 15 Dec 2023 19:19:51 +0000 Subject: [PATCH 33/35] format --- .../id/tax/income/credits/id_aged_or_disabled_credit.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py index efe7419b73f..9a2d32c9655 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py @@ -24,5 +24,7 @@ def formula(tax_unit, period, parameters): credit_amount = capped_eligible_people * p.amount # Filers cannot claim the credit if they claim the subtraction. # This variable verifies that. - eligible = tax_unit("receid_receives_aged_or_disabled_creditives_credit", period) + eligible = tax_unit( + "receid_receives_aged_or_disabled_creditives_credit", period + ) return eligible * credit_amount From 7dae9923dd32e4ff5c3c76385809598080828de7 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Fri, 15 Dec 2023 19:36:39 +0000 Subject: [PATCH 34/35] format, pass test --- .../id/tax/income/credits/id_aged_or_disabled_credit.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py index 9a2d32c9655..94355f42d13 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py +++ b/policyengine_us/variables/gov/states/id/tax/income/credits/id_aged_or_disabled_credit.py @@ -24,7 +24,5 @@ def formula(tax_unit, period, parameters): credit_amount = capped_eligible_people * p.amount # Filers cannot claim the credit if they claim the subtraction. # This variable verifies that. - eligible = tax_unit( - "receid_receives_aged_or_disabled_creditives_credit", period - ) + eligible = tax_unit("id_receives_aged_or_disabled_credit", period) return eligible * credit_amount From 688d05d572613085151bfa8b64d32893ddac24e6 Mon Sep 17 00:00:00 2001 From: Jingjing Wang <87988673+Jingj-WANG@users.noreply.github.com> Date: Fri, 15 Dec 2023 19:40:56 +0000 Subject: [PATCH 35/35] test --- .../id_aged_or_disabled_deduction_eligible_person.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py index f742473d9f5..baca666f352 100644 --- a/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py +++ b/policyengine_us/variables/gov/states/id/tax/income/subtractions/id_aged_or_disabled_deduction_eligible_person.py @@ -19,7 +19,7 @@ def formula(person, period, parameters): # Disabled eligible individuals can include head and spouse. disabled_eligible = person("is_disabled", period) # To claim aged or disabled credit, filers also have to maintain a household for family members - # and provide more than one-half of the family member’s support for the year + # and provide more than one-half of the family member’s support for the year. support_payment_ratio = person( "share_of_care_and_support_costs_paid_by_tax_filer", period )