Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/8309.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Added the Kentucky Homestead Exemption property tax reduction.
Original file line number Diff line number Diff line change
Expand Up @@ -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
- ky_homestead_property_tax_reduction
- 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
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: Kentucky limits age-based eligibility to filers at or above this age under the Homestead Exemption program.
values:
2025-01-01: 65
metadata:
unit: year
period: year
label: Kentucky homestead exemption age threshold
reference:
- title: Kentucky Department of Revenue | Homestead Exemption
href: https://revenue.ky.gov/Property/Residential-Farm-Commercial-Property/pages/homestead-exemption.aspx
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: Kentucky provides this amount as a homestead exemption under the Homestead Exemption program.
values:
2025-01-01: 49_100
metadata:
unit: currency-USD
period: year
label: Kentucky homestead exemption amount
reference:
- title: Kentucky Department of Revenue | Homestead Exemption
href: https://revenue.ky.gov/Property/Residential-Farm-Commercial-Property/pages/homestead-exemption.aspx
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
- name: Case 1, exemption is capped at the statutory amount.
period: 2025
input:
people:
person1:
age: 65
assessed_property_value: 200_000
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: KY
output:
ky_homestead_exemption: 49_100

- name: Case 2, exemption is limited to assessed property value.
period: 2025
input:
people:
person1:
age: 65
assessed_property_value: 40_000
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: KY
output:
ky_homestead_exemption: 40_000
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
- name: Case 1, senior homeowner is eligible.
period: 2025
input:
people:
person1:
age: 65
assessed_property_value: 200_000
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: KY
output:
ky_homestead_exemption_eligible: true

- name: Case 2, disabled homeowner under age 65 is eligible.
period: 2025
input:
people:
person1:
age: 40
is_disabled: true
assessed_property_value: 200_000
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: KY
output:
ky_homestead_exemption_eligible: true

- name: Case 3, non-senior homeowner without disability is ineligible.
period: 2025
input:
people:
person1:
age: 64
assessed_property_value: 200_000
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: KY
output:
ky_homestead_exemption_eligible: false

- name: Case 4, senior without assessed property is ineligible.
period: 2025
input:
people:
person1:
age: 65
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: KY
output:
ky_homestead_exemption_eligible: false
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
- name: Case 1, reduction equals the property tax on the exempt share of value.
period: 2025
input:
people:
person1:
age: 65
assessed_property_value: 200_000
real_estate_taxes: 2_000
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: KY
output:
ky_homestead_property_tax_reduction: 491

- name: Case 2, reduction cannot exceed property taxes.
period: 2025
input:
people:
person1:
age: 65
assessed_property_value: 40_000
real_estate_taxes: 800
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: KY
output:
ky_homestead_property_tax_reduction: 800

- name: Case 3, ineligible filer gets no reduction.
period: 2025
input:
people:
person1:
age: 64
assessed_property_value: 200_000
real_estate_taxes: 2_000
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: KY
output:
ky_homestead_property_tax_reduction: 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from policyengine_us.model_api import *


class ky_homestead_exemption(Variable):
value_type = float
entity = TaxUnit
label = "Kentucky homestead exemption"
unit = USD
definition_period = YEAR
reference = "https://revenue.ky.gov/Property/Residential-Farm-Commercial-Property/pages/homestead-exemption.aspx"
defined_for = "ky_homestead_exemption_eligible"

def formula(tax_unit, period, parameters):
return min_(
add(tax_unit, period, ["assessed_property_value"]),
parameters(period).gov.states.ky.tax.property.homestead_exemption.amount,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from policyengine_us.model_api import *


class ky_homestead_exemption_eligible(Variable):
value_type = bool
entity = TaxUnit
label = "Eligible for the Kentucky Homestead Exemption"
definition_period = YEAR
reference = "https://revenue.ky.gov/Property/Residential-Farm-Commercial-Property/pages/homestead-exemption.aspx"
defined_for = StateCode.KY

def formula(tax_unit, period, parameters):
p = parameters(period).gov.states.ky.tax.property.homestead_exemption
person = tax_unit.members
head_or_spouse = person("is_tax_unit_head_or_spouse", period)
age = person("age", period.this_year)
is_disabled = person("is_disabled", period)
owns_assessed_property = add(tax_unit, period, ["assessed_property_value"]) > 0

return (
tax_unit.any(((age >= p.age_threshold) | is_disabled) & head_or_spouse)
& owns_assessed_property
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from policyengine_us.model_api import *


class ky_homestead_property_tax_reduction(Variable):
value_type = float
entity = TaxUnit
label = "Kentucky homestead property tax reduction"
unit = USD
definition_period = YEAR
reference = "https://revenue.ky.gov/Property/Residential-Farm-Commercial-Property/pages/homestead-exemption.aspx"
defined_for = "ky_homestead_exemption_eligible"

def formula(tax_unit, period, parameters):
assessed_value = add(tax_unit, period, ["assessed_property_value"])
return add(tax_unit, period, ["real_estate_taxes"]) * (
tax_unit("ky_homestead_exemption", period) / max_(assessed_value, 1)
)
Loading