From d777a81db934794c8842af1cd2dfadbfe2925dcf Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 14 May 2026 14:36:26 -0400 Subject: [PATCH 1/6] Add Tennessee elderly property tax relief --- changelog.d/8203.added.md | 1 + .../household/state_property_tax_credits.yaml | 1 + .../age_threshold.yaml | 13 +++ .../assessment_rate.yaml | 11 +++ .../income_limit.yaml | 16 ++++ .../property_value_cap.yaml | 16 ++++ .../tn_elderly_property_tax_relief.yaml | 76 +++++++++++++++ ..._elderly_property_tax_relief_eligible.yaml | 93 +++++++++++++++++++ .../tn_elderly_property_tax_relief.py | 28 ++++++ ...tn_elderly_property_tax_relief_eligible.py | 27 ++++++ .../tn_elderly_property_tax_relief_income.py | 12 +++ 11 files changed, 294 insertions(+) create mode 100644 changelog.d/8203.added.md create mode 100644 policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/age_threshold.yaml create mode 100644 policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/assessment_rate.yaml create mode 100644 policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/income_limit.yaml create mode 100644 policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/property_value_cap.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief_eligible.yaml create mode 100644 policyengine_us/variables/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief.py create mode 100644 policyengine_us/variables/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief_eligible.py create mode 100644 policyengine_us/variables/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief_income.py diff --git a/changelog.d/8203.added.md b/changelog.d/8203.added.md new file mode 100644 index 00000000000..848052999d7 --- /dev/null +++ b/changelog.d/8203.added.md @@ -0,0 +1 @@ +Added Tennessee property tax relief for elderly homeowners. diff --git a/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml b/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml index b9792f1ef71..9ec2f533a25 100644 --- a/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml +++ b/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml @@ -152,6 +152,7 @@ values: - ny_real_property_tax_credit - ok_ptc - ri_property_tax_credit + - tn_elderly_property_tax_relief - ut_homeowner_renter_relief - wi_homestead_credit - wi_property_tax_credit diff --git a/policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/age_threshold.yaml b/policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/age_threshold.yaml new file mode 100644 index 00000000000..bd46506076d --- /dev/null +++ b/policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/age_threshold.yaml @@ -0,0 +1,13 @@ +description: Tennessee sets the qualifying age to this threshold under the Property Tax Relief for Elderly Homeowners program. +values: + 2025-01-01: 65 + +metadata: + unit: year + period: year + label: Tennessee elderly property tax relief age threshold + reference: + - title: Tennessee Comptroller Tax Relief Brochure + href: https://comptroller.tn.gov/content/dam/cot/pa/documents/tax-relief/TaxReliefBrochure.pdf + - title: Tennessee Code Annotated Sections 67-5-701 through 67-5-704 + href: https://comptroller.tn.gov/content/dam/cot/pa/documents/tax-relief/TCA%2067-5-701%20through%2067-5-704.pdf diff --git a/policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/assessment_rate.yaml b/policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/assessment_rate.yaml new file mode 100644 index 00000000000..a3981fb64e3 --- /dev/null +++ b/policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/assessment_rate.yaml @@ -0,0 +1,11 @@ +description: Tennessee uses this assessment rate for residential property under the Property Tax Relief for Elderly Homeowners program. +values: + 2025-01-01: 0.25 + +metadata: + unit: /1 + period: year + label: Tennessee elderly property tax relief residential assessment rate + reference: + - title: Tennessee Code Annotated Sections 67-5-701 through 67-5-704 + href: https://comptroller.tn.gov/content/dam/cot/pa/documents/tax-relief/TCA%2067-5-701%20through%2067-5-704.pdf diff --git a/policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/income_limit.yaml b/policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/income_limit.yaml new file mode 100644 index 00000000000..994a20b127a --- /dev/null +++ b/policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/income_limit.yaml @@ -0,0 +1,16 @@ +description: Tennessee limits income to this amount under the Property Tax Relief for Elderly Homeowners program. +values: + 2025-01-01: 37_530 + 2026-01-01: 38_470 + +metadata: + unit: currency-USD + period: year + label: Tennessee elderly property tax relief income limit + reference: + - title: Tennessee Comptroller Tax Relief Brochure + href: https://comptroller.tn.gov/content/dam/cot/pa/documents/tax-relief/TaxReliefBrochure.pdf + - title: Tennessee Comptroller 2026 Tax Freeze Income Limits + href: https://comptroller.tn.gov/content/dam/cot/pa/documents/tax-freeze/TaxFreezeIncomeLimitsList2026.pdf + - title: Tennessee Code Annotated Sections 67-5-701 through 67-5-704 + href: https://comptroller.tn.gov/content/dam/cot/pa/documents/tax-relief/TCA%2067-5-701%20through%2067-5-704.pdf diff --git a/policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/property_value_cap.yaml b/policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/property_value_cap.yaml new file mode 100644 index 00000000000..b884155ee6e --- /dev/null +++ b/policyengine_us/parameters/gov/states/tn/tax/property/elderly_property_tax_relief/property_value_cap.yaml @@ -0,0 +1,16 @@ +description: Tennessee limits property value to this amount under the Property Tax Relief for Elderly Homeowners program. +values: + 2025-01-01: 32_700 + 2026-01-01: 32_700 + +metadata: + unit: currency-USD + period: year + label: Tennessee elderly property tax relief property value cap + reference: + - title: Tennessee Comptroller Tax Relief Brochure + href: https://comptroller.tn.gov/content/dam/cot/pa/documents/tax-relief/TaxReliefBrochure.pdf + - title: University of Tennessee Municipal Technical Advisory Service Property Tax Relief for Elderly and Disabled + href: https://www.mtas.tennessee.edu/reference/property-tax-relief-elderly-and-disabled + - title: Tennessee Code Annotated Sections 67-5-701 through 67-5-704 + href: https://comptroller.tn.gov/content/dam/cot/pa/documents/tax-relief/TCA%2067-5-701%20through%2067-5-704.pdf diff --git a/policyengine_us/tests/policy/baseline/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief.yaml b/policyengine_us/tests/policy/baseline/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief.yaml new file mode 100644 index 00000000000..b63cc6d917b --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief.yaml @@ -0,0 +1,76 @@ +- name: Case 1, senior homeowner receives relief on the capped assessed value. + period: 2026 + input: + people: + person1: + age: 65 + real_estate_taxes: 1_000 + assessed_property_value: 25_000 + tax_units: + tax_unit: + members: [person1] + adjusted_gross_income: 38_470 + households: + household: + members: [person1] + state_code: TN + output: + # Capped assessed value = 32,700 * 25% = 8,175. + # Relief = 1,000 * 8,175 / 25,000. + tn_elderly_property_tax_relief: 327 + +- name: Case 2, home below the value cap receives relief for all real estate taxes. + period: 2026 + input: + people: + person1: + age: 70 + real_estate_taxes: 400 + assessed_property_value: 6_000 + tax_units: + tax_unit: + members: [person1] + adjusted_gross_income: 30_000 + households: + household: + members: [person1] + state_code: TN + output: + tn_elderly_property_tax_relief: 400 + +- name: Case 3, senior homeowner above the 2025 income limit receives no relief. + period: 2025 + input: + people: + person1: + age: 70 + real_estate_taxes: 1_000 + assessed_property_value: 25_000 + tax_units: + tax_unit: + members: [person1] + adjusted_gross_income: 37_531 + households: + household: + members: [person1] + state_code: TN + output: + tn_elderly_property_tax_relief: 0 + +- name: Case 4, missing assessed property value yields no relief. + period: 2026 + input: + people: + person1: + age: 70 + real_estate_taxes: 1_000 + tax_units: + tax_unit: + members: [person1] + adjusted_gross_income: 30_000 + households: + household: + members: [person1] + state_code: TN + output: + tn_elderly_property_tax_relief: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief_eligible.yaml new file mode 100644 index 00000000000..702813b774a --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief_eligible.yaml @@ -0,0 +1,93 @@ +- name: Case 1, senior homeowner at the 2026 income limit is eligible. + period: 2026 + input: + people: + person1: + age: 65 + real_estate_taxes: 1_000 + assessed_property_value: 25_000 + tax_units: + tax_unit: + members: [person1] + adjusted_gross_income: 38_470 + households: + household: + members: [person1] + state_code: TN + output: + tn_elderly_property_tax_relief_eligible: true + +- name: Case 2, senior homeowner above the 2026 income limit is ineligible. + period: 2026 + input: + people: + person1: + age: 65 + real_estate_taxes: 1_000 + assessed_property_value: 25_000 + tax_units: + tax_unit: + members: [person1] + adjusted_gross_income: 38_471 + households: + household: + members: [person1] + state_code: TN + output: + tn_elderly_property_tax_relief_eligible: false + +- name: Case 3, homeowner below the age threshold is ineligible. + period: 2026 + input: + people: + person1: + age: 64 + real_estate_taxes: 1_000 + assessed_property_value: 25_000 + tax_units: + tax_unit: + members: [person1] + adjusted_gross_income: 30_000 + households: + household: + members: [person1] + state_code: TN + output: + tn_elderly_property_tax_relief_eligible: false + +- name: Case 4, senior renter is ineligible. + period: 2026 + input: + people: + person1: + age: 70 + rent: 12_000 + tax_units: + tax_unit: + members: [person1] + adjusted_gross_income: 30_000 + households: + household: + members: [person1] + state_code: TN + output: + tn_elderly_property_tax_relief_eligible: false + +- name: Case 5, senior homeowner outside Tennessee is ineligible. + period: 2026 + input: + people: + person1: + age: 70 + real_estate_taxes: 1_000 + assessed_property_value: 25_000 + tax_units: + tax_unit: + members: [person1] + adjusted_gross_income: 30_000 + households: + household: + members: [person1] + state_code: KY + output: + tn_elderly_property_tax_relief_eligible: false diff --git a/policyengine_us/variables/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief.py b/policyengine_us/variables/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief.py new file mode 100644 index 00000000000..730c3747bae --- /dev/null +++ b/policyengine_us/variables/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief.py @@ -0,0 +1,28 @@ +from policyengine_us.model_api import * + + +class tn_elderly_property_tax_relief(Variable): + value_type = float + entity = TaxUnit + label = "Tennessee elderly property tax relief" + unit = USD + definition_period = YEAR + reference = ( + "https://comptroller.tn.gov/office-functions/pa/property-taxes/property-tax-programs/tax-relief.html", + "https://comptroller.tn.gov/content/dam/cot/pa/documents/tax-relief/TaxReliefBrochure.pdf", + "https://comptroller.tn.gov/content/dam/cot/pa/documents/tax-relief/TCA%2067-5-701%20through%2067-5-704.pdf", + ) + defined_for = "tn_elderly_property_tax_relief_eligible" + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.tn.tax.property.elderly_property_tax_relief + assessed_property_value = add(tax_unit, period, ["assessed_property_value"]) + capped_assessed_property_value = min_( + assessed_property_value, + p.property_value_cap * p.assessment_rate, + ) + return ( + add(tax_unit, period, ["real_estate_taxes"]) + * capped_assessed_property_value + / assessed_property_value + ) diff --git a/policyengine_us/variables/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief_eligible.py b/policyengine_us/variables/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief_eligible.py new file mode 100644 index 00000000000..3961159f531 --- /dev/null +++ b/policyengine_us/variables/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief_eligible.py @@ -0,0 +1,27 @@ +from policyengine_us.model_api import * + + +class tn_elderly_property_tax_relief_eligible(Variable): + value_type = bool + entity = TaxUnit + label = "Eligible for the Tennessee elderly property tax relief" + definition_period = YEAR + reference = ( + "https://comptroller.tn.gov/office-functions/pa/property-taxes/property-tax-programs/tax-relief.html", + "https://comptroller.tn.gov/content/dam/cot/pa/documents/tax-relief/TaxReliefBrochure.pdf", + "https://comptroller.tn.gov/content/dam/cot/pa/documents/tax-relief/TCA%2067-5-701%20through%2067-5-704.pdf", + ) + defined_for = StateCode.TN + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.tn.tax.property.elderly_property_tax_relief + return ( + (tax_unit("greater_age_head_spouse", period) >= p.age_threshold) + & ( + tax_unit("tn_elderly_property_tax_relief_income", period) + <= p.income_limit + ) + & (add(tax_unit, period, ["real_estate_taxes"]) > 0) + & (add(tax_unit, period, ["assessed_property_value"]) > 0) + & ~tax_unit("rents", period) + ) diff --git a/policyengine_us/variables/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief_income.py b/policyengine_us/variables/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief_income.py new file mode 100644 index 00000000000..055ae52babf --- /dev/null +++ b/policyengine_us/variables/gov/states/tn/tax/property/elderly_property_tax_relief/tn_elderly_property_tax_relief_income.py @@ -0,0 +1,12 @@ +from policyengine_us.model_api import * + + +class tn_elderly_property_tax_relief_income(Variable): + value_type = float + entity = TaxUnit + label = "Tennessee elderly property tax relief income" + unit = USD + definition_period = YEAR + defined_for = StateCode.TN + + adds = ["adjusted_gross_income"] From 7935c9cafd2b1eecd9285b05fe696104e14b8f69 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 14 May 2026 16:53:52 -0400 Subject: [PATCH 2/6] Rename changelog fragment for PR 8307 --- changelog.d/{8203.added.md => 8307.added.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename changelog.d/{8203.added.md => 8307.added.md} (100%) diff --git a/changelog.d/8203.added.md b/changelog.d/8307.added.md similarity index 100% rename from changelog.d/8203.added.md rename to changelog.d/8307.added.md From 771f837cdd39b4599a642dc7c6d879100e5b7614 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Mon, 18 May 2026 16:48:17 -0400 Subject: [PATCH 3/6] Wire tn_elderly_property_tax_relief into net income Create tn_refundable_credits variable and refundable.yaml list, and add tn_refundable_credits to household_refundable_state_credits. The relief now flows through household_refundable_state_tax_credits to household_net_income, mirroring the pattern used for WA Working Families Tax Credit (also a state without an income tax). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../household_refundable_state_credits.yaml | 1 + .../states/tn/tax/income/credits/refundable.yaml | 14 ++++++++++++++ .../tn/tax/income/credits/tn_refundable_credits.py | 11 +++++++++++ 3 files changed, 26 insertions(+) create mode 100644 policyengine_us/parameters/gov/states/tn/tax/income/credits/refundable.yaml create mode 100644 policyengine_us/variables/gov/states/tn/tax/income/credits/tn_refundable_credits.py diff --git a/policyengine_us/parameters/gov/household/household_refundable_state_credits.yaml b/policyengine_us/parameters/gov/household/household_refundable_state_credits.yaml index b18f5410087..cf9c075f90c 100644 --- a/policyengine_us/parameters/gov/household/household_refundable_state_credits.yaml +++ b/policyengine_us/parameters/gov/household/household_refundable_state_credits.yaml @@ -39,6 +39,7 @@ values: # Skip PA which has no refundable credits. - ri_refundable_credits # Rhode Island. - sc_refundable_credits # South Carolina. + - tn_refundable_credits # Tennessee. - wa_refundable_credits # Washington. - nyc_refundable_credits # New York City. - ut_refundable_credits # Utah. diff --git a/policyengine_us/parameters/gov/states/tn/tax/income/credits/refundable.yaml b/policyengine_us/parameters/gov/states/tn/tax/income/credits/refundable.yaml new file mode 100644 index 00000000000..3f558406ea5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/tn/tax/income/credits/refundable.yaml @@ -0,0 +1,14 @@ +description: Tennessee provides these refundable property tax relief credits. +values: + 2025-01-01: + - tn_elderly_property_tax_relief + +metadata: + unit: list + period: year + label: Tennessee refundable credits + reference: + - title: Tennessee Comptroller Property Tax Relief + href: https://comptroller.tn.gov/office-functions/pa/property-taxes/property-tax-programs/tax-relief.html + - title: Tennessee Code Annotated Sections 67-5-701 through 67-5-704 + href: https://comptroller.tn.gov/content/dam/cot/pa/documents/tax-relief/TCA%2067-5-701%20through%2067-5-704.pdf diff --git a/policyengine_us/variables/gov/states/tn/tax/income/credits/tn_refundable_credits.py b/policyengine_us/variables/gov/states/tn/tax/income/credits/tn_refundable_credits.py new file mode 100644 index 00000000000..26ddbd67fce --- /dev/null +++ b/policyengine_us/variables/gov/states/tn/tax/income/credits/tn_refundable_credits.py @@ -0,0 +1,11 @@ +from policyengine_us.model_api import * + + +class tn_refundable_credits(Variable): + value_type = float + entity = TaxUnit + label = "Tennessee refundable credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.TN + adds = "gov.states.tn.tax.income.credits.refundable" From a487eb440d75a2a2462b8836c6671294f35b6c44 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 21 May 2026 16:10:53 -0400 Subject: [PATCH 4/6] Keep property tax relief household-only --- .../household_refundable_state_credits.yaml | 1 - .../household/state_property_tax_credits.yaml | 176 ++---------------- .../tn/tax/income/credits/refundable.yaml | 14 -- .../income/credits/tn_refundable_credits.py | 11 -- 4 files changed, 19 insertions(+), 183 deletions(-) delete mode 100644 policyengine_us/parameters/gov/states/tn/tax/income/credits/refundable.yaml delete mode 100644 policyengine_us/variables/gov/states/tn/tax/income/credits/tn_refundable_credits.py diff --git a/policyengine_us/parameters/gov/household/household_refundable_state_credits.yaml b/policyengine_us/parameters/gov/household/household_refundable_state_credits.yaml index cf9c075f90c..b18f5410087 100644 --- a/policyengine_us/parameters/gov/household/household_refundable_state_credits.yaml +++ b/policyengine_us/parameters/gov/household/household_refundable_state_credits.yaml @@ -39,7 +39,6 @@ values: # Skip PA which has no refundable credits. - ri_refundable_credits # Rhode Island. - sc_refundable_credits # South Carolina. - - tn_refundable_credits # Tennessee. - wa_refundable_credits # Washington. - nyc_refundable_credits # New York City. - ut_refundable_credits # Utah. diff --git a/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml b/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml index 9ec2f533a25..6a9b8dfc6a4 100644 --- a/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml +++ b/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml @@ -1,162 +1,24 @@ description: All state property tax credits and circuit breaker programs. values: - # Year-gated: each credit appears from the year its - # parameters are first defined in PE-US. - 1977-01-01: - - ri_property_tax_credit - 1996-01-01: - - nj_property_tax_credit - - ri_property_tax_credit - 1997-01-01: - - mo_property_tax_credit - - nj_property_tax_credit - - ri_property_tax_credit - 2000-01-01: - - mo_property_tax_credit - - nj_property_tax_credit - - ny_real_property_tax_credit - - ri_property_tax_credit - - wi_property_tax_credit - 2001-01-01: - - ma_senior_circuit_breaker - - mo_property_tax_credit - - nj_property_tax_credit - - ny_real_property_tax_credit - - ri_property_tax_credit - - wi_property_tax_credit - 2008-01-01: - - ma_senior_circuit_breaker - - mo_property_tax_credit - - nj_property_tax_credit - - ny_real_property_tax_credit - - ri_property_tax_credit - - wi_property_tax_credit - - wv_homestead_excess_property_tax_credit - 2009-01-01: - - ma_senior_circuit_breaker - - mo_property_tax_credit - - mt_elderly_homeowner_or_renter_credit - - nj_property_tax_credit - - ny_real_property_tax_credit - - ri_property_tax_credit - - wi_property_tax_credit - - wv_homestead_excess_property_tax_credit - 2011-01-01: - - ct_property_tax_credit - - ma_senior_circuit_breaker - - mo_property_tax_credit - - mt_elderly_homeowner_or_renter_credit - - nj_property_tax_credit - - ny_real_property_tax_credit - - ri_property_tax_credit - - wi_homestead_credit - - wi_property_tax_credit - - wv_homestead_excess_property_tax_credit - 2014-01-01: - - ct_property_tax_credit - - ma_senior_circuit_breaker - - me_property_tax_fairness_credit - - mo_property_tax_credit - - mt_elderly_homeowner_or_renter_credit - - nj_property_tax_credit - - ny_real_property_tax_credit - - ri_property_tax_credit - - wi_homestead_credit - - wi_property_tax_credit - - wv_homestead_excess_property_tax_credit - 2016-01-01: - - ct_property_tax_credit - - ma_senior_circuit_breaker - - me_property_tax_fairness_credit - - mi_homestead_property_tax_credit - - mo_property_tax_credit - - mt_elderly_homeowner_or_renter_credit - - nj_property_tax_credit - - ny_real_property_tax_credit - - ri_property_tax_credit - - wi_homestead_credit - - wi_property_tax_credit - - wv_homestead_excess_property_tax_credit - 2021-01-01: - - az_property_tax_credit - - ct_property_tax_credit - - dc_ptc - - il_property_tax_credit - - ma_senior_circuit_breaker - - me_property_tax_fairness_credit - - mi_homestead_property_tax_credit - - mo_property_tax_credit - - mt_elderly_homeowner_or_renter_credit - - nj_property_tax_credit - - nm_property_tax_rebate - - ny_real_property_tax_credit - - ok_ptc - - ri_property_tax_credit - - wi_homestead_credit - - wi_property_tax_credit - - wv_homestead_excess_property_tax_credit - 2022-01-01: - - az_property_tax_credit - - ct_property_tax_credit - - dc_ptc - - il_property_tax_credit - - ma_senior_circuit_breaker - - me_property_tax_fairness_credit - - mi_homestead_property_tax_credit - - mo_property_tax_credit - - mt_elderly_homeowner_or_renter_credit - - mt_property_tax_rebate - - nj_property_tax_credit - - nm_property_tax_rebate - - ny_real_property_tax_credit - - ok_ptc - - ri_property_tax_credit - - wi_homestead_credit - - wi_property_tax_credit - - wv_homestead_excess_property_tax_credit - 2024-01-01: - - az_property_tax_credit - - ct_property_tax_credit - - dc_ptc - - il_property_tax_credit - - ma_senior_circuit_breaker - - me_property_tax_fairness_credit - - mi_homestead_property_tax_credit - - mn_renters_credit - - mo_property_tax_credit - - mt_elderly_homeowner_or_renter_credit - - mt_property_tax_rebate - - nj_property_tax_credit - - nm_property_tax_rebate - - ny_real_property_tax_credit - - ok_ptc - - ri_property_tax_credit - - wi_homestead_credit - - wi_property_tax_credit - - wv_homestead_excess_property_tax_credit - 2025-01-01: - - az_property_tax_credit - - ct_property_tax_credit - - dc_ptc - - dc_senior_disabled_property_tax_relief - - il_property_tax_credit - - ma_senior_circuit_breaker - - me_property_tax_fairness_credit - - mi_homestead_property_tax_credit - - mn_renters_credit - - mo_property_tax_credit - - mt_elderly_homeowner_or_renter_credit - - mt_property_tax_rebate - - nj_property_tax_credit - - nm_property_tax_rebate - - ny_real_property_tax_credit - - ok_ptc - - ri_property_tax_credit - - tn_elderly_property_tax_relief - - ut_homeowner_renter_relief - - wi_homestead_credit - - wi_property_tax_credit - - wv_homestead_excess_property_tax_credit + 0000-01-01: + - az_property_tax_credit # Arizona Property Tax Credit + - ct_property_tax_credit # Connecticut Property Tax Credit + # Exclude ca_renter_credit as it is for renters, not homeowners. + - dc_ptc # DC Property Tax Credit + # Exclude hi_tax_credit_for_low_income_household_renters as it is for renters, not homeowners. + - ma_senior_circuit_breaker # Massachusetts Senior Circuit Breaker Credit + - me_property_tax_fairness_credit # Maine Property Tax Fairness Credit + - mi_homestead_property_tax_credit # Michigan homestead property tax credit + - mo_property_tax_credit # Missouri property tax credit + - mt_elderly_homeowner_or_renter_credit # Montana Elderly Homeowner/Renter Credit + - nj_property_tax_credit # New Jersey property tax credit + - nm_property_tax_rebate # New Mexico property tax rebate + - ny_real_property_tax_credit # New York real property tax credit + - ri_property_tax_credit # Rhode Island property tax credit + # Omit vt_renter_credit + - wi_homestead_credit # Wisconsin homestead credit + - wi_property_tax_credit # Wisconsin property tax credit + - wv_homestead_excess_property_tax_credit # West Virginia metadata: unit: list diff --git a/policyengine_us/parameters/gov/states/tn/tax/income/credits/refundable.yaml b/policyengine_us/parameters/gov/states/tn/tax/income/credits/refundable.yaml deleted file mode 100644 index 3f558406ea5..00000000000 --- a/policyengine_us/parameters/gov/states/tn/tax/income/credits/refundable.yaml +++ /dev/null @@ -1,14 +0,0 @@ -description: Tennessee provides these refundable property tax relief credits. -values: - 2025-01-01: - - tn_elderly_property_tax_relief - -metadata: - unit: list - period: year - label: Tennessee refundable credits - reference: - - title: Tennessee Comptroller Property Tax Relief - href: https://comptroller.tn.gov/office-functions/pa/property-taxes/property-tax-programs/tax-relief.html - - title: Tennessee Code Annotated Sections 67-5-701 through 67-5-704 - href: https://comptroller.tn.gov/content/dam/cot/pa/documents/tax-relief/TCA%2067-5-701%20through%2067-5-704.pdf diff --git a/policyengine_us/variables/gov/states/tn/tax/income/credits/tn_refundable_credits.py b/policyengine_us/variables/gov/states/tn/tax/income/credits/tn_refundable_credits.py deleted file mode 100644 index 26ddbd67fce..00000000000 --- a/policyengine_us/variables/gov/states/tn/tax/income/credits/tn_refundable_credits.py +++ /dev/null @@ -1,11 +0,0 @@ -from policyengine_us.model_api import * - - -class tn_refundable_credits(Variable): - value_type = float - entity = TaxUnit - label = "Tennessee refundable credits" - unit = USD - definition_period = YEAR - defined_for = StateCode.TN - adds = "gov.states.tn.tax.income.credits.refundable" From fa66f302799984effafdefa6948ee851f76fcf7a Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 21 May 2026 16:13:30 -0400 Subject: [PATCH 5/6] Restore property tax aggregate base --- .../household/state_property_tax_credits.yaml | 178 ++++++++++++++++-- 1 file changed, 159 insertions(+), 19 deletions(-) diff --git a/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml b/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml index 6a9b8dfc6a4..5fc7a8116bf 100644 --- a/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml +++ b/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml @@ -1,24 +1,164 @@ description: All state property tax credits and circuit breaker programs. values: - 0000-01-01: - - az_property_tax_credit # Arizona Property Tax Credit - - ct_property_tax_credit # Connecticut Property Tax Credit - # Exclude ca_renter_credit as it is for renters, not homeowners. - - dc_ptc # DC Property Tax Credit - # Exclude hi_tax_credit_for_low_income_household_renters as it is for renters, not homeowners. - - ma_senior_circuit_breaker # Massachusetts Senior Circuit Breaker Credit - - me_property_tax_fairness_credit # Maine Property Tax Fairness Credit - - mi_homestead_property_tax_credit # Michigan homestead property tax credit - - mo_property_tax_credit # Missouri property tax credit - - mt_elderly_homeowner_or_renter_credit # Montana Elderly Homeowner/Renter Credit - - nj_property_tax_credit # New Jersey property tax credit - - nm_property_tax_rebate # New Mexico property tax rebate - - ny_real_property_tax_credit # New York real property tax credit - - ri_property_tax_credit # Rhode Island property tax credit - # Omit vt_renter_credit - - wi_homestead_credit # Wisconsin homestead credit - - wi_property_tax_credit # Wisconsin property tax credit - - wv_homestead_excess_property_tax_credit # West Virginia + # Year-gated: each credit appears from the year its + # parameters are first defined in PE-US. + 1977-01-01: + - ri_property_tax_credit + 1996-01-01: + - nj_property_tax_credit + - ri_property_tax_credit + 1997-01-01: + - mo_property_tax_credit + - nj_property_tax_credit + - ri_property_tax_credit + 2000-01-01: + - mo_property_tax_credit + - nj_property_tax_credit + - ny_real_property_tax_credit + - ri_property_tax_credit + - wi_property_tax_credit + 2001-01-01: + - ma_senior_circuit_breaker + - mo_property_tax_credit + - nj_property_tax_credit + - ny_real_property_tax_credit + - ri_property_tax_credit + - wi_property_tax_credit + 2008-01-01: + - ma_senior_circuit_breaker + - mo_property_tax_credit + - nj_property_tax_credit + - ny_real_property_tax_credit + - ri_property_tax_credit + - wi_property_tax_credit + - wv_homestead_excess_property_tax_credit + 2009-01-01: + - ma_senior_circuit_breaker + - mo_property_tax_credit + - mt_elderly_homeowner_or_renter_credit + - nj_property_tax_credit + - ny_real_property_tax_credit + - ri_property_tax_credit + - wi_property_tax_credit + - wv_homestead_excess_property_tax_credit + 2011-01-01: + - ct_property_tax_credit + - ma_senior_circuit_breaker + - mo_property_tax_credit + - mt_elderly_homeowner_or_renter_credit + - nj_property_tax_credit + - ny_real_property_tax_credit + - ri_property_tax_credit + - wi_homestead_credit + - wi_property_tax_credit + - wv_homestead_excess_property_tax_credit + 2014-01-01: + - ct_property_tax_credit + - ma_senior_circuit_breaker + - me_property_tax_fairness_credit + - mo_property_tax_credit + - mt_elderly_homeowner_or_renter_credit + - nj_property_tax_credit + - ny_real_property_tax_credit + - ri_property_tax_credit + - wi_homestead_credit + - wi_property_tax_credit + - wv_homestead_excess_property_tax_credit + 2016-01-01: + - ct_property_tax_credit + - ma_senior_circuit_breaker + - me_property_tax_fairness_credit + - mi_homestead_property_tax_credit + - mo_property_tax_credit + - mt_elderly_homeowner_or_renter_credit + - nj_property_tax_credit + - ny_real_property_tax_credit + - ri_property_tax_credit + - wi_homestead_credit + - wi_property_tax_credit + - wv_homestead_excess_property_tax_credit + 2021-01-01: + - az_property_tax_credit + - ct_property_tax_credit + - dc_ptc + - il_property_tax_credit + - ma_senior_circuit_breaker + - me_property_tax_fairness_credit + - mi_homestead_property_tax_credit + - mo_property_tax_credit + - mt_elderly_homeowner_or_renter_credit + - nj_property_tax_credit + - nm_property_tax_rebate + - ny_real_property_tax_credit + - ok_ptc + - ri_property_tax_credit + - wi_homestead_credit + - wi_property_tax_credit + - wv_homestead_excess_property_tax_credit + 2022-01-01: + - az_property_tax_credit + - ct_property_tax_credit + - dc_ptc + - il_property_tax_credit + - ma_senior_circuit_breaker + - me_property_tax_fairness_credit + - mi_homestead_property_tax_credit + - mo_property_tax_credit + - mt_elderly_homeowner_or_renter_credit + - mt_property_tax_rebate + - nj_property_tax_credit + - nm_property_tax_rebate + - ny_real_property_tax_credit + - ok_ptc + - ri_property_tax_credit + - wi_homestead_credit + - wi_property_tax_credit + - wv_homestead_excess_property_tax_credit + 2024-01-01: + - az_property_tax_credit + - ct_property_tax_credit + - dc_ptc + - il_property_tax_credit + - ma_senior_circuit_breaker + - me_property_tax_fairness_credit + - mi_homestead_property_tax_credit + - mn_renters_credit + - mo_property_tax_credit + - mt_elderly_homeowner_or_renter_credit + - mt_property_tax_rebate + - nd_renters_refund + - nj_property_tax_credit + - nm_property_tax_rebate + - ny_real_property_tax_credit + - ok_ptc + - ri_property_tax_credit + - wi_homestead_credit + - wi_property_tax_credit + - wv_homestead_excess_property_tax_credit + 2025-01-01: + - az_property_tax_credit + - ct_property_tax_credit + - dc_ptc + - dc_senior_disabled_property_tax_relief + - il_property_tax_credit + - ma_senior_circuit_breaker + - me_property_tax_fairness_credit + - mi_homestead_property_tax_credit + - mn_renters_credit + - mo_property_tax_credit + - mt_elderly_homeowner_or_renter_credit + - mt_property_tax_rebate + - nd_renters_refund + - nj_property_tax_credit + - nm_property_tax_rebate + - ny_real_property_tax_credit + - ok_ptc + - pa_property_tax_or_rent_rebate + - ri_property_tax_credit + - ut_homeowner_renter_relief + - wi_homestead_credit + - wi_property_tax_credit + - wv_homestead_excess_property_tax_credit metadata: unit: list From fed766968d58671742d6271fbf2b51e04159a5f4 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 21 May 2026 16:17:30 -0400 Subject: [PATCH 6/6] Drop property tax aggregate diff --- .../gov/states/household/state_property_tax_credits.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml b/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml index 5fc7a8116bf..b9792f1ef71 100644 --- a/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml +++ b/policyengine_us/parameters/gov/states/household/state_property_tax_credits.yaml @@ -126,7 +126,6 @@ values: - mo_property_tax_credit - mt_elderly_homeowner_or_renter_credit - mt_property_tax_rebate - - nd_renters_refund - nj_property_tax_credit - nm_property_tax_rebate - ny_real_property_tax_credit @@ -148,12 +147,10 @@ values: - mo_property_tax_credit - mt_elderly_homeowner_or_renter_credit - mt_property_tax_rebate - - nd_renters_refund - nj_property_tax_credit - nm_property_tax_rebate - ny_real_property_tax_credit - ok_ptc - - pa_property_tax_or_rent_rebate - ri_property_tax_credit - ut_homeowner_renter_relief - wi_homestead_credit