diff --git a/changelog.d/8307.added.md b/changelog.d/8307.added.md new file mode 100644 index 00000000000..848052999d7 --- /dev/null +++ b/changelog.d/8307.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 b5c719c31cf..8a0c37f320c 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 @@ -114,6 +114,26 @@ values: - 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 + - 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 + - tn_elderly_property_tax_relief + - wi_homestead_credit + - wi_property_tax_credit + - wv_homestead_excess_property_tax_credit metadata: unit: list 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"]