Skip to content
Open
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/added/8194.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add the District of Columbia Senior Citizen or Disabled Property Owner Tax Relief.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: The District of Columbia limits senior eligibility to people at or above this age under the Senior Citizen or Disabled Property Owner Tax Relief program.
values:
2025-01-01: 65
metadata:
unit: year
period: year
label: DC senior disabled property tax relief age threshold
reference:
- title: Office of Tax and Revenue Real Property Tax Reliefs, Credits, and Deductions, Senior Citizen or Disabled Property Owner Tax Relief
href: https://otr.cfo.dc.gov/page/real-property-tax-reliefs-credits-and-deductions
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
description: The District of Columbia limits household adjusted gross income to this amount under the Senior Citizen or Disabled Property Owner Tax Relief program.
values:
2025-01-01: 159_750
2026-01-01: 163_500
metadata:
unit: currency-USD
period: year
label: DC senior disabled property tax relief income limit
reference:
- title: Office of Tax and Revenue Real Property Tax Reliefs, Credits, and Deductions, Senior Citizen or Disabled Property Owner Tax Relief
href: https://otr.cfo.dc.gov/page/real-property-tax-reliefs-credits-and-deductions
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
description: The District of Columbia reduces property tax by this share under the Senior Citizen or Disabled Property Owner Tax Relief program.
values:
2025-01-01: 0.5
metadata:
unit: /1
period: year
label: DC senior disabled property tax relief rate
reference:
- title: Office of Tax and Revenue Real Property Tax Reliefs, Credits, and Deductions, Senior Citizen or Disabled Property Owner Tax Relief
href: https://otr.cfo.dc.gov/page/real-property-tax-reliefs-credits-and-deductions
- title: D.C. Law Library § 47–863. Reduced tax liability for property owners over age 65 and for property owners with disabilities; rules
href: https://code.dccouncil.gov/us/dc/council/code/sections/47-863
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
- dc_senior_disabled_property_tax_relief
- 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
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
- name: Case 1, senior homeowner receives half of property taxes.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1:
age: 65
employment_income: 100_000
real_estate_taxes: 4_000
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
takes_up_dc_ptc: false
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: DC
output:
dc_senior_disabled_property_tax_relief: 2_000
state_property_tax_credit: 2_000

- name: Case 2, disabled homeowner receives half of property taxes.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1:
age: 40
employment_income: 80_000
real_estate_taxes: 3_000
is_permanently_and_totally_disabled: true
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: DC
output:
dc_senior_disabled_property_tax_relief: 1_500

- name: Case 3, ineligible homeowner receives no relief.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1:
age: 64
employment_income: 40_000
real_estate_taxes: 4_000
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: DC
output:
dc_senior_disabled_property_tax_relief: 0

- name: Case 4, homeowner with generic disability receives no relief.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1:
age: 40
employment_income: 80_000
real_estate_taxes: 3_000
is_disabled: true
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: DC
output:
dc_senior_disabled_property_tax_relief: 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
- name: Case 1, senior homeowner with income below the limit is eligible.
period: 2026
input:
people:
person1:
age: 65
employment_income: 100_000
real_estate_taxes: 4_000
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: DC
output:
dc_senior_disabled_property_tax_relief_eligible: true

- name: Case 2, disabled homeowner below the senior age threshold is eligible.
period: 2026
input:
people:
person1:
age: 40
employment_income: 80_000
real_estate_taxes: 3_000
is_permanently_and_totally_disabled: true
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: DC
output:
dc_senior_disabled_property_tax_relief_eligible: true

- name: Case 3, senior homeowner with income at the limit is ineligible.
period: 2026
input:
people:
person1:
age: 65
employment_income: 163_500
real_estate_taxes: 4_000
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: DC
output:
dc_senior_disabled_property_tax_relief_eligible: false

- name: Case 4, senior renter is ineligible.
period: 2026
input:
people:
person1:
age: 65
employment_income: 40_000
rent: 12_000
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: DC
output:
dc_senior_disabled_property_tax_relief_eligible: false

- name: Case 5, non-senior homeowner without disability is ineligible.
period: 2026
input:
people:
person1:
age: 64
employment_income: 40_000
real_estate_taxes: 4_000
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: DC
output:
dc_senior_disabled_property_tax_relief_eligible: false

- name: Case 6, homeowner with generic disability is ineligible.
period: 2026
input:
people:
person1:
age: 40
employment_income: 80_000
real_estate_taxes: 3_000
is_disabled: true
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: DC
output:
dc_senior_disabled_property_tax_relief_eligible: false
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from policyengine_us.model_api import *


class dc_senior_disabled_property_tax_relief(Variable):
value_type = float
entity = TaxUnit
label = "DC senior disabled property tax relief"
unit = USD
definition_period = YEAR
reference = (
"https://otr.cfo.dc.gov/page/real-property-tax-reliefs-credits-and-deductions",
"https://code.dccouncil.gov/us/dc/council/code/sections/47-863",
)
defined_for = "dc_senior_disabled_property_tax_relief_eligible"

def formula(tax_unit, period, parameters):
p = parameters(
period
).gov.states.dc.tax.property.senior_disabled_property_tax_relief
return add(tax_unit, period, ["real_estate_taxes"]) * p.rate
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from policyengine_us.model_api import *


class dc_senior_disabled_property_tax_relief_eligible(Variable):
value_type = bool
entity = TaxUnit
label = "Eligible for the DC senior disabled property tax relief"
definition_period = YEAR
reference = (
"https://otr.cfo.dc.gov/page/real-property-tax-reliefs-credits-and-deductions",
"https://code.dccouncil.gov/us/dc/council/code/sections/47-863",
)
defined_for = StateCode.DC

def formula(tax_unit, period, parameters):
p = parameters(
period
).gov.states.dc.tax.property.senior_disabled_property_tax_relief
age_eligible = tax_unit("greater_age_head_spouse", period) >= p.age_threshold
person = tax_unit.members
head_or_spouse = person("is_tax_unit_head_or_spouse", period)
disabled = person("is_permanently_and_totally_disabled", period) | (
add(
person,
period,
["ssi", "social_security_disability", "total_disability_payments"],
)
> 0
)
disability_eligible = tax_unit.any(head_or_spouse & disabled)
income = tax_unit.spm_unit(
"dc_senior_disabled_property_tax_relief_income", period
)
income_eligible = income < p.income_limit
pays_property_taxes = add(tax_unit, period, ["real_estate_taxes"]) > 0
is_renter = tax_unit("rents", period)
return (
(age_eligible | disability_eligible)
& income_eligible
& pays_property_taxes
& ~is_renter
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from policyengine_us.model_api import *


class dc_senior_disabled_property_tax_relief_income(Variable):
value_type = float
entity = SPMUnit
label = "DC senior disabled property tax relief household income"
unit = USD
definition_period = YEAR
defined_for = StateCode.DC

adds = ["adjusted_gross_income"]
Loading