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/8311.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Added the South Carolina 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
- 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
- sc_homestead_property_tax_reduction
- 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: South Carolina 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: South Carolina homestead exemption age threshold
reference:
- title: South Carolina Department of Revenue | Exempt Property
href: https://dor.sc.gov/property/exempt-property
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: South Carolina provides this fair market value exemption amount under the Homestead Exemption program.
values:
2025-01-01: 50_000
metadata:
unit: currency-USD
period: year
label: South Carolina homestead exemption amount
reference:
- title: South Carolina Department of Revenue | Exempt Property
href: https://dor.sc.gov/property/exempt-property
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: South Carolina assesses legal residence value at this rate under the Homestead Exemption program.
values:
2025-01-01: 0.04
metadata:
unit: /1
period: year
label: South Carolina homestead exemption legal residence assessment rate
reference:
- title: South Carolina Department of Revenue | Exempt Property
href: https://dor.sc.gov/property/exempt-property
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: 8_000
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: SC
output:
sc_homestead_exemption: 2_000

- name: Case 2, exemption is limited to assessed property value.
period: 2025
input:
people:
person1:
age: 65
assessed_property_value: 1_600
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: SC
output:
sc_homestead_exemption: 1_600
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
- name: Case 1, senior homeowner is eligible.
period: 2025
input:
people:
person1:
age: 65
assessed_property_value: 8_000
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: SC
output:
sc_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: 8_000
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: SC
output:
sc_homestead_exemption_eligible: true

- name: Case 3, blind homeowner under age 65 is eligible.
period: 2025
input:
people:
person1:
age: 40
is_blind: true
assessed_property_value: 8_000
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: SC
output:
sc_homestead_exemption_eligible: true

- name: Case 4, non-senior homeowner without disability or blindness is ineligible.
period: 2025
input:
people:
person1:
age: 64
assessed_property_value: 8_000
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: SC
output:
sc_homestead_exemption_eligible: false

- name: Case 5, 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: SC
output:
sc_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: 8_000
real_estate_taxes: 2_000
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: SC
output:
sc_homestead_property_tax_reduction: 500

- name: Case 2, reduction cannot exceed property taxes.
period: 2025
input:
people:
person1:
age: 65
assessed_property_value: 1_600
real_estate_taxes: 800
tax_units:
tax_unit:
members: [person1]
households:
household:
members: [person1]
state_code: SC
output:
sc_homestead_property_tax_reduction: 800

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


class sc_homestead_exemption(Variable):
value_type = float
entity = TaxUnit
label = "South Carolina homestead exemption"
unit = USD
definition_period = YEAR
reference = "https://dor.sc.gov/property/exempt-property"
defined_for = "sc_homestead_exemption_eligible"

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


class sc_homestead_exemption_eligible(Variable):
value_type = bool
entity = TaxUnit
label = "Eligible for the South Carolina Homestead Exemption"
definition_period = YEAR
reference = "https://dor.sc.gov/property/exempt-property"
defined_for = StateCode.SC

def formula(tax_unit, period, parameters):
p = parameters(period).gov.states.sc.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)
is_blind = person("is_blind", period)

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


class sc_homestead_property_tax_reduction(Variable):
value_type = float
entity = TaxUnit
label = "South Carolina homestead property tax reduction"
unit = USD
definition_period = YEAR
reference = "https://dor.sc.gov/property/exempt-property"
defined_for = "sc_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("sc_homestead_exemption", period) / max_(assessed_value, 1)
)
Loading