diff --git a/changelog.d/8304.added.md b/changelog.d/8304.added.md new file mode 100644 index 00000000000..6a4a2dfbeb8 --- /dev/null +++ b/changelog.d/8304.added.md @@ -0,0 +1 @@ +Added Alabama senior homestead property tax relief. diff --git a/policyengine_us/parameters/gov/states/al/tax/property/senior_homestead_exemption/age_threshold.yaml b/policyengine_us/parameters/gov/states/al/tax/property/senior_homestead_exemption/age_threshold.yaml new file mode 100644 index 00000000000..b49797a53eb --- /dev/null +++ b/policyengine_us/parameters/gov/states/al/tax/property/senior_homestead_exemption/age_threshold.yaml @@ -0,0 +1,13 @@ +description: Alabama sets the qualifying age to this threshold under the senior homestead exemption program. +values: + 2025-01-01: 65 + +metadata: + unit: year + period: year + label: Alabama senior homestead exemption age threshold + reference: + - title: Alabama Code Section 40-9-19(a)(2) + href: https://law.justia.com/codes/alabama/title-40/chapter-9/article-1/section-40-9-19/ + - title: Alabama Department of Revenue Homestead Exemptions + href: https://www.revenue.alabama.gov/property-tax/homestead-exemptions/ diff --git a/policyengine_us/parameters/gov/states/al/tax/property/senior_homestead_exemption/state_property_tax_rate.yaml b/policyengine_us/parameters/gov/states/al/tax/property/senior_homestead_exemption/state_property_tax_rate.yaml new file mode 100644 index 00000000000..953728b399f --- /dev/null +++ b/policyengine_us/parameters/gov/states/al/tax/property/senior_homestead_exemption/state_property_tax_rate.yaml @@ -0,0 +1,13 @@ +description: Alabama sets the state property tax rate to this share under the senior homestead exemption program. +values: + 2025-01-01: 0.0065 + +metadata: + unit: /1 + period: year + label: Alabama senior homestead exemption state property tax rate + reference: + - title: Alabama Department of Revenue Property (Ad Valorem) Tax + href: https://www.revenue.alabama.gov/tax-types/property-ad-valorem-tax/ + - title: Alabama Department of Revenue Property Tax Incentives + href: https://www.revenue.alabama.gov/tax-incentives/property-tax-incentives/ 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..aa0836e79e1 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: + - al_senior_homestead_exemption + - 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 metadata: unit: list diff --git a/policyengine_us/tests/policy/baseline/gov/states/al/tax/property/senior_homestead_exemption/al_senior_homestead_exemption.yaml b/policyengine_us/tests/policy/baseline/gov/states/al/tax/property/senior_homestead_exemption/al_senior_homestead_exemption.yaml new file mode 100644 index 00000000000..b25f7a0dd62 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/al/tax/property/senior_homestead_exemption/al_senior_homestead_exemption.yaml @@ -0,0 +1,71 @@ +- name: Case 1, senior homeowner receives the state levy exemption. + period: 2025 + input: + people: + person1: + age: 65 + real_estate_taxes: 1_000 + assessed_property_value: 100_000 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: AL + output: + # 100,000 assessed value * 0.0065 state levy. + al_senior_homestead_exemption: 650 + +- name: Case 2, relief is capped at real estate taxes paid. + period: 2025 + input: + people: + person1: + age: 70 + real_estate_taxes: 500 + assessed_property_value: 100_000 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: AL + output: + al_senior_homestead_exemption: 500 + +- name: Case 3, homeowner below the age threshold receives no relief. + period: 2025 + input: + people: + person1: + age: 64 + real_estate_taxes: 1_000 + assessed_property_value: 100_000 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: AL + output: + al_senior_homestead_exemption: 0 + +- name: Case 4, missing assessed property value yields no modeled relief. + period: 2025 + input: + people: + person1: + age: 70 + real_estate_taxes: 1_000 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: AL + output: + al_senior_homestead_exemption: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/al/tax/property/senior_homestead_exemption/al_senior_homestead_exemption_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/al/tax/property/senior_homestead_exemption/al_senior_homestead_exemption_eligible.yaml new file mode 100644 index 00000000000..4bdb1a04d61 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/al/tax/property/senior_homestead_exemption/al_senior_homestead_exemption_eligible.yaml @@ -0,0 +1,70 @@ +- name: Case 1, senior homeowner is eligible. + period: 2025 + input: + people: + person1: + age: 65 + real_estate_taxes: 1_000 + assessed_property_value: 100_000 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: AL + output: + al_senior_homestead_exemption_eligible: true + +- name: Case 2, homeowner below the age threshold is ineligible. + period: 2025 + input: + people: + person1: + age: 64 + real_estate_taxes: 1_000 + assessed_property_value: 100_000 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: AL + output: + al_senior_homestead_exemption_eligible: false + +- name: Case 3, senior renter is ineligible. + period: 2025 + input: + people: + person1: + age: 70 + rent: 12_000 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: AL + output: + al_senior_homestead_exemption_eligible: false + +- name: Case 4, senior homeowner outside Alabama is ineligible. + period: 2025 + input: + people: + person1: + age: 70 + real_estate_taxes: 1_000 + assessed_property_value: 100_000 + tax_units: + tax_unit: + members: [person1] + households: + household: + members: [person1] + state_code: GA + output: + al_senior_homestead_exemption_eligible: false diff --git a/policyengine_us/variables/gov/states/al/tax/property/senior_homestead_exemption/al_senior_homestead_exemption.py b/policyengine_us/variables/gov/states/al/tax/property/senior_homestead_exemption/al_senior_homestead_exemption.py new file mode 100644 index 00000000000..a8f31956951 --- /dev/null +++ b/policyengine_us/variables/gov/states/al/tax/property/senior_homestead_exemption/al_senior_homestead_exemption.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class al_senior_homestead_exemption(Variable): + value_type = float + entity = TaxUnit + label = "Alabama senior homestead exemption" + unit = USD + definition_period = YEAR + reference = ( + "https://law.justia.com/codes/alabama/title-40/chapter-9/article-1/section-40-9-19/", + "https://www.revenue.alabama.gov/tax-types/property-ad-valorem-tax/", + "https://www.revenue.alabama.gov/property-tax/homestead-exemptions/", + ) + defined_for = "al_senior_homestead_exemption_eligible" + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.al.tax.property.senior_homestead_exemption + return min_( + add(tax_unit, period, ["assessed_property_value"]) + * p.state_property_tax_rate, + add(tax_unit, period, ["real_estate_taxes"]), + ) diff --git a/policyengine_us/variables/gov/states/al/tax/property/senior_homestead_exemption/al_senior_homestead_exemption_eligible.py b/policyengine_us/variables/gov/states/al/tax/property/senior_homestead_exemption/al_senior_homestead_exemption_eligible.py new file mode 100644 index 00000000000..4eec630a541 --- /dev/null +++ b/policyengine_us/variables/gov/states/al/tax/property/senior_homestead_exemption/al_senior_homestead_exemption_eligible.py @@ -0,0 +1,22 @@ +from policyengine_us.model_api import * + + +class al_senior_homestead_exemption_eligible(Variable): + value_type = bool + entity = TaxUnit + label = "Eligible for the Alabama senior homestead exemption" + definition_period = YEAR + reference = ( + "https://law.justia.com/codes/alabama/title-40/chapter-9/article-1/section-40-9-19/", + "https://www.law.cornell.edu/regulations/alabama/Ala-Admin-Code-r-810-4-1-.23", + "https://www.revenue.alabama.gov/property-tax/homestead-exemptions/", + ) + defined_for = StateCode.AL + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.states.al.tax.property.senior_homestead_exemption + return ( + (tax_unit("greater_age_head_spouse", period) >= p.age_threshold) + & (add(tax_unit, period, ["real_estate_taxes"]) > 0) + & ~tax_unit("rents", period) + )