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/de-per-column-credits.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix Delaware Filing Status 4 to allocate non-refundable credits per-column instead of pooling at the tax-unit level.
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
- name: CDCC locked to lower-income spouse (head has higher income)
period: 2025
input:
people:
person1:
is_tax_unit_head: true
de_taxable_income_indv: 50_000
person2:
is_tax_unit_spouse: true
de_taxable_income_indv: 10_000
tax_units:
tax_unit:
members: [person1, person2]
de_cdcc: 200
households:
household:
members: [person1, person2]
state_code: DE
output:
de_cdcc_indv: [0, 200]

- name: CDCC locked to lower-income spouse (spouse has higher income)
period: 2025
input:
people:
person1:
is_tax_unit_head: true
de_taxable_income_indv: 5_000
person2:
is_tax_unit_spouse: true
de_taxable_income_indv: 60_000
tax_units:
tax_unit:
members: [person1, person2]
de_cdcc: 200
households:
household:
members: [person1, person2]
state_code: DE
output:
de_cdcc_indv: [200, 0]

- name: CDCC zero when no childcare expenses
period: 2025
input:
people:
person1:
is_tax_unit_head: true
de_taxable_income_indv: 30_000
person2:
is_tax_unit_spouse: true
de_taxable_income_indv: 20_000
tax_units:
tax_unit:
members: [person1, person2]
de_cdcc: 0
households:
household:
members: [person1, person2]
state_code: DE
output:
de_cdcc_indv: [0, 0]

- name: tied taxable incomes route CDCC to spouse
period: 2025
input:
people:
person1:
is_tax_unit_head: true
de_taxable_income_indv: 30_000
person2:
is_tax_unit_spouse: true
de_taxable_income_indv: 30_000
tax_units:
tax_unit:
members: [person1, person2]
de_cdcc: 200
households:
household:
members: [person1, person2]
state_code: DE
output:
# On tie, head is "higher", spouse is "lower" -> spouse gets CDCC
de_cdcc_indv: [0, 200]

- name: dependent never gets CDCC
period: 2025
input:
people:
person1:
is_tax_unit_head: true
de_taxable_income_indv: 50_000
person2:
is_tax_unit_spouse: true
de_taxable_income_indv: 10_000
person3:
is_tax_unit_dependent: true
age: 8
tax_units:
tax_unit:
members: [person1, person2, person3]
de_cdcc: 200
households:
household:
members: [person1, person2, person3]
state_code: DE
output:
de_cdcc_indv: [0, 200, 0]
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
- name: only head 60+, spouse under 60
period: 2025
input:
people:
person1:
age: 65
is_tax_unit_head: true
person2:
age: 50
is_tax_unit_spouse: true
households:
household:
members: [person1, person2]
state_code: DE
output:
de_aged_personal_credit_indv: [110, 0]

- name: aged dependent does not get credit
period: 2025
input:
people:
person1:
age: 65
is_tax_unit_head: true
person2:
age: 70
is_tax_unit_head: false
is_tax_unit_spouse: false
is_tax_unit_dependent: true
households:
household:
members: [person1, person2]
state_code: DE
output:
de_aged_personal_credit_indv: [110, 0]

- name: both spouses 60+ each get $110 in own column
period: 2025
input:
people:
person1:
age: 60
is_tax_unit_head: true
person2:
age: 80
is_tax_unit_spouse: true
households:
household:
members: [person1, person2]
state_code: DE
output:
de_aged_personal_credit_indv: [110, 110]

- name: only spouse 60+
period: 2025
input:
people:
person1:
age: 55
is_tax_unit_head: true
person2:
age: 65
is_tax_unit_spouse: true
households:
household:
members: [person1, person2]
state_code: DE
output:
de_aged_personal_credit_indv: [0, 110]

- name: neither spouse 60+
period: 2025
input:
people:
person1:
age: 40
is_tax_unit_head: true
person2:
age: 50
is_tax_unit_spouse: true
households:
household:
members: [person1, person2]
state_code: DE
output:
de_aged_personal_credit_indv: [0, 0]
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
- name: all credits to higher-capacity column (spouse)
period: 2025
input:
people:
person1:
is_tax_unit_head: true
de_income_tax_before_non_refundable_credits_indv: 100
person2:
is_tax_unit_spouse: true
de_income_tax_before_non_refundable_credits_indv: 1_000
tax_units:
tax_unit:
members: [person1, person2]
households:
household:
members: [person1, person2]
state_code: DE
output:
# 2 exemptions × $110 = $220, all to spouse (more capacity)
de_personal_credit_indv: [0, 220]

- name: all credits to higher-capacity column (head)
period: 2025
input:
people:
person1:
is_tax_unit_head: true
de_income_tax_before_non_refundable_credits_indv: 5_000
person2:
is_tax_unit_spouse: true
de_income_tax_before_non_refundable_credits_indv: 100
child1:
is_tax_unit_dependent: true
age: 8
child2:
is_tax_unit_dependent: true
age: 12
tax_units:
tax_unit:
members: [person1, person2, child1, child2]
households:
household:
members: [person1, person2, child1, child2]
state_code: DE
output:
# 4 exemptions × $110 = $440, all to head (more capacity)
de_personal_credit_indv: [440, 0, 0, 0]

- name: tied capacity routes to head
period: 2025
input:
people:
person1:
is_tax_unit_head: true
de_income_tax_before_non_refundable_credits_indv: 500
person2:
is_tax_unit_spouse: true
de_income_tax_before_non_refundable_credits_indv: 500
tax_units:
tax_unit:
members: [person1, person2]
households:
household:
members: [person1, person2]
state_code: DE
output:
# On tie, head wins; gets all $220
de_personal_credit_indv: [220, 0]
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
- name: per-column credits cap at column tax (Line 32)
period: 2025
input:
people:
person1:
is_tax_unit_head: true
de_income_tax_before_non_refundable_credits_indv: 50
de_personal_credit_indv: 110
de_aged_personal_credit_indv: 110
de_cdcc_indv: 0
person2:
is_tax_unit_spouse: true
de_income_tax_before_non_refundable_credits_indv: 1_000
de_personal_credit_indv: 110
de_aged_personal_credit_indv: 110
de_cdcc_indv: 0
households:
household:
members: [person1, person2]
state_code: DE
output:
# Head: $50 tax, $220 credits → capped at $50, line33 = $0
# Spouse: $1000 tax, $220 credits → line33 = $780
de_income_tax_after_non_refundable_credits_indv: [0, 780]

- name: full credit absorption
period: 2025
input:
people:
person1:
is_tax_unit_head: true
de_income_tax_before_non_refundable_credits_indv: 500
de_personal_credit_indv: 110
de_aged_personal_credit_indv: 0
de_cdcc_indv: 0
person2:
is_tax_unit_spouse: true
de_income_tax_before_non_refundable_credits_indv: 800
de_personal_credit_indv: 110
de_aged_personal_credit_indv: 0
de_cdcc_indv: 0
households:
household:
members: [person1, person2]
state_code: DE
output:
# Head: $500 - $110 = $390
# Spouse: $800 - $110 = $690
de_income_tax_after_non_refundable_credits_indv: [390, 690]

- name: both spouses 60+ with very low column taxes (aged credit waste)
period: 2025
input:
people:
person1:
is_tax_unit_head: true
de_income_tax_before_non_refundable_credits_indv: 50
de_personal_credit_indv: 0
de_aged_personal_credit_indv: 110
de_cdcc_indv: 0
person2:
is_tax_unit_spouse: true
de_income_tax_before_non_refundable_credits_indv: 80
de_personal_credit_indv: 0
de_aged_personal_credit_indv: 110
de_cdcc_indv: 0
households:
household:
members: [person1, person2]
state_code: DE
output:
# Head: $50 tax, $110 aged → capped at $50, line33 = $0 ($60 wasted)
# Spouse: $80 tax, $110 aged → capped at $80, line33 = $0 ($30 wasted)
de_income_tax_after_non_refundable_credits_indv: [0, 0]

- name: dependents return zero (only head/spouse have line 33)
period: 2025
input:
people:
person1:
is_tax_unit_head: true
de_income_tax_before_non_refundable_credits_indv: 1_000
de_personal_credit_indv: 220
de_aged_personal_credit_indv: 0
de_cdcc_indv: 0
person2:
is_tax_unit_dependent: true
age: 10
de_income_tax_before_non_refundable_credits_indv: 0
de_personal_credit_indv: 0
de_aged_personal_credit_indv: 0
de_cdcc_indv: 0
households:
household:
members: [person1, person2]
state_code: DE
output:
de_income_tax_after_non_refundable_credits_indv: [780, 0]
Loading
Loading