diff --git a/changelog.d/dc-standard-deduction-separate.fixed.md b/changelog.d/dc-standard-deduction-separate.fixed.md new file mode 100644 index 00000000000..3b2faf8517d --- /dev/null +++ b/changelog.d/dc-standard-deduction-separate.fixed.md @@ -0,0 +1 @@ +Deny the DC standard deduction, basic and additional amounts, to a separate filer whose spouse itemizes (D.C. Code 47-1803.03(c)). diff --git a/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_standard_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_standard_deduction.yaml index 351c28a6c09..1b62af520d6 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_standard_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/dc/tax/income/dc_standard_deduction.yaml @@ -202,3 +202,69 @@ output: # Uprated from $22,500 DC base. Must NOT be $24,150 (federal). dc_standard_deduction: 23_000 + +# --- Separate filer whose spouse itemizes: D.C. Code 47-1803.03(c) --- + +- name: DC 2024 separate filer aged 66 whose spouse itemizes gets no standard deduction. + period: 2024 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 66 + is_tax_unit_head: true + tax_units: + tax_unit: + members: [person1] + filing_status: SEPARATE + separate_filer_itemizes: true + households: + household: + members: [person1] + state_code: DC + output: + # 47-1803.03(c): allowed to neither spouse, so neither the basic + # amount nor the $1,550 additional amount for age. + dc_standard_deduction: 0 + +- name: DC 2025 separate filer aged 66 whose spouse itemizes gets no standard deduction. + period: 2025 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 66 + is_tax_unit_head: true + tax_units: + tax_unit: + members: [person1] + filing_status: SEPARATE + separate_filer_itemizes: true + households: + household: + members: [person1] + state_code: DC + output: + # Neither the $15,000 DC basic amount nor the $1,600 additional amount. + dc_standard_deduction: 0 + +- name: DC 2025 separate filer aged 66 whose spouse does not itemize. + period: 2025 + absolute_error_margin: 0.1 + input: + people: + person1: + age: 66 + is_tax_unit_head: true + tax_units: + tax_unit: + members: [person1] + filing_status: SEPARATE + separate_filer_itemizes: false + households: + household: + members: [person1] + state_code: DC + output: + # $15,000 DC basic + $1,600 additional (married, 65+) = $16,600 + dc_standard_deduction: 16_600 diff --git a/policyengine_us/variables/gov/states/dc/tax/income/deductions/dc_standard_deduction.py b/policyengine_us/variables/gov/states/dc/tax/income/deductions/dc_standard_deduction.py index c2ed1cf0021..d8c23fb812a 100644 --- a/policyengine_us/variables/gov/states/dc/tax/income/deductions/dc_standard_deduction.py +++ b/policyengine_us/variables/gov/states/dc/tax/income/deductions/dc_standard_deduction.py @@ -9,16 +9,20 @@ class dc_standard_deduction(Variable): definition_period = YEAR defined_for = StateCode.DC reference = ( + # 47-1803.03(c): when spouses file separate returns and one itemizes, + # the standard deduction "shall be allowed to neither". + "https://code.dccouncil.gov/us/dc/council/code/sections/47-1803.03#(c)", "https://otr.cfo.dc.gov/sites/default/files/dc/sites/otr/publication/attachments/2025_D40_Book_082026_v1.pdf#page=13", ) def formula(tax_unit, period, parameters): # Before 2025, DC conformed to federal standard deduction - return add( + standard = add( tax_unit, period, ["basic_standard_deduction", "additional_standard_deduction"], ) + return where(tax_unit("separate_filer_itemizes", period), 0, standard) def formula_2025(tax_unit, period, parameters): # Starting 2025, DC established its own basic standard deduction @@ -28,4 +32,4 @@ def formula_2025(tax_unit, period, parameters): filing_status = tax_unit("filing_status", period) basic = p.amount[filing_status] additional = add(tax_unit, period, ["additional_standard_deduction"]) - return basic + additional + return where(tax_unit("separate_filer_itemizes", period), 0, basic + additional)