Skip to content
Merged
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/fix-tips-overtime-dependents-ssn.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Count only tips and overtime received by a filer (a tax unit member who is not a dependent) with a valid SSN toward the qualified tips and overtime deductions (26 U.S.C. 224(e)(1) and 225(d)(1)). A dependent's tips and overtime no longer raise the filer's deductions, and a joint return on which one spouse lacks a valid SSN now deducts the other spouse's tips and overtime instead of nothing.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
description: The IRS limits the overtime income deduction to filers with one of these SSN Card types.
description: The IRS counts overtime toward the overtime income deduction only when the filer (not a dependent) who received it has one of these SSN card types.
values:
2018-01-01:
- CITIZEN
Expand All @@ -9,5 +9,11 @@ metadata:
period: year
unit: list
reference:
- title: 26 U.S.C. 225(d)
href: https://www.law.cornell.edu/uscode/text/26/225#d
- title: 26 U.S.C. 24(h)(7)
href: https://www.law.cornell.edu/uscode/text/26/24#h_7
- title: 2025 Form 1040 instructions, Schedule 1-A, Part III
href: https://www.irs.gov/pub/irs-pdf/i1040gi.pdf#page=106
- title: H.R.1 - One Big Beautiful Bill Act
href: https://www.congress.gov/bill/119th-congress/house-bill/1/text
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
description: The IRS limits the tip income deduction to filers with one of these SSN Card types.
description: The IRS counts tips toward the tip income deduction only when the filer (not a dependent) who received them has one of these SSN card types.
values:
2018-01-01:
- CITIZEN
Expand All @@ -9,5 +9,11 @@ metadata:
period: year
unit: list
reference:
- title: 26 U.S.C. 224(e)
href: https://www.law.cornell.edu/uscode/text/26/224#e
- title: 26 U.S.C. 24(h)(7)
href: https://www.law.cornell.edu/uscode/text/26/24#h_7
- title: 2025 Form 1040 instructions, Schedule 1-A, Part II
href: https://www.irs.gov/pub/irs-pdf/i1040gi.pdf#page=101
- title: H.R.1 - One Big Beautiful Bill Act
href: https://www.congress.gov/bill/119th-congress/house-bill/1/text
318 changes: 277 additions & 41 deletions policyengine_us/tests/core/test_tip_and_overtime_deduction_properties.py

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -318,3 +318,211 @@
# 26 U.S.C. 7703(b): considered unmarried, so 225(e) does not apply.
filing_status: [HEAD_OF_HOUSEHOLD, SEPARATE]
overtime_income_deduction: [12_500, 0]

- name: A joint return claims the overtime of a spouse with a valid SSN when the other spouse has none
period: 2025
input:
people:
head:
age: 40
ssn_card_type: CITIZEN
fsla_overtime_premium: 5_000
spouse:
age: 38
ssn_card_type: OTHER_NON_CITIZEN
marital_units:
marital_unit:
members: [head, spouse]
tax_units:
tax_unit:
members: [head, spouse]
adjusted_gross_income: 80_000
households:
household:
members: [head, spouse]
state_code: TX
output:
# 26 U.S.C. 225(d)(1): only the spouse who received the overtime needs an SSN.
filing_status: JOINT
overtime_income_deduction_ssn_requirement_met: true
overtime_income_deduction: 5_000

- name: Overtime received by a spouse without a valid SSN does not count
period: 2025
input:
people:
head:
age: 40
ssn_card_type: CITIZEN
spouse:
age: 38
ssn_card_type: OTHER_NON_CITIZEN
fsla_overtime_premium: 10_000
marital_units:
marital_unit:
members: [head, spouse]
tax_units:
tax_unit:
members: [head, spouse]
adjusted_gross_income: 80_000
households:
household:
members: [head, spouse]
state_code: TX
output:
# 26 U.S.C. 225(d)(1): the spouse who received the overtime needs the SSN.
filing_status: JOINT
overtime_income_deduction_ssn_requirement_met: true
overtime_income_deduction: 0

- name: On a joint return with overtime on both sides, only the spouse with a valid SSN counts
period: 2025
input:
people:
head:
age: 40
ssn_card_type: CITIZEN
fsla_overtime_premium: 15_000
spouse:
age: 38
ssn_card_type: OTHER_NON_CITIZEN
fsla_overtime_premium: 20_000
marital_units:
marital_unit:
members: [head, spouse]
tax_units:
tax_unit:
members: [head, spouse]
adjusted_gross_income: 80_000
households:
household:
members: [head, spouse]
state_code: TX
output:
# The $25,000 joint cap applies to the $15,000 that counts, not to $35,000.
filing_status: JOINT
overtime_income_deduction_ssn_requirement_met: true
overtime_income_deduction: 15_000

- name: A dependent's overtime does not count toward the filer's deduction
period: 2025
input:
people:
parent:
age: 45
ssn_card_type: CITIZEN
employment_income: 60_000
teen:
age: 17
ssn_card_type: CITIZEN
employment_income: 8_000
tip_income: 6_000
treasury_tipped_occupation_code: 102
fsla_overtime_premium: 1_000
marital_units:
parent_marital_unit:
members: [parent]
teen_marital_unit:
members: [teen]
tax_units:
tax_unit:
members: [parent, teen]
households:
household:
members: [parent, teen]
state_code: TX
output:
# The teen's overtime and wages are the teen's own income (26 U.S.C. 73(a)), outside the parent's AGI.
filing_status: HEAD_OF_HOUSEHOLD
is_tax_unit_dependent: [false, true]
adjusted_gross_income: 60_000
overtime_income_deduction: 0

- name: A filer's own overtime counts while a dependent's does not
period: 2025
input:
people:
parent:
age: 45
ssn_card_type: CITIZEN
employment_income: 60_000
fsla_overtime_premium: 3_000
teen:
age: 17
ssn_card_type: CITIZEN
employment_income: 8_000
tip_income: 6_000
treasury_tipped_occupation_code: 102
fsla_overtime_premium: 1_000
marital_units:
parent_marital_unit:
members: [parent]
teen_marital_unit:
members: [teen]
tax_units:
tax_unit:
members: [parent, teen]
households:
household:
members: [parent, teen]
state_code: TX
output:
# Only the parent's $3,000 counts; the teen's $1,000 does not.
filing_status: HEAD_OF_HOUSEHOLD
is_tax_unit_dependent: [false, true]
adjusted_gross_income: 60_000
overtime_income_deduction: 3_000

- name: An adult input as a dependent deducts nothing even as the only adult in the unit
period: 2025
input:
people:
adult:
age: 40
ssn_card_type: CITIZEN
is_tax_unit_dependent: true
fsla_overtime_premium: 1_000
tax_units:
tax_unit:
members: [adult]
filing_status: SINGLE
adjusted_gross_income: 80_000
households:
household:
members: [adult]
state_code: TX
output:
# A dependent's overtime stays off the unit's return, like the rest of the
# dependent's income (irs_gross_income).
overtime_income_deduction: 0

- name: A filer under 18 deducts their own overtime, not an adult dependent's
period: 2025
input:
people:
filer:
age: 17
ssn_card_type: CITIZEN
is_tax_unit_dependent: false
fsla_overtime_premium: 3_000
parent:
age: 45
ssn_card_type: CITIZEN
is_tax_unit_dependent: true
fsla_overtime_premium: 500
marital_units:
filer_marital_unit:
members: [filer]
parent_marital_unit:
members: [parent]
tax_units:
tax_unit:
members: [filer, parent]
filing_status: HEAD_OF_HOUSEHOLD
adjusted_gross_income: 80_000
households:
household:
members: [filer, parent]
state_code: TX
output:
overtime_income_deduction: 3_000
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
- name: Head and spouse with valid SSNs count; a dependent and an ITIN spouse do not
period: 2025
input:
people:
head:
age: 40
ssn_card_type: CITIZEN
spouse:
age: 38
ssn_card_type: NON_CITIZEN_VALID_EAD
child:
age: 17
ssn_card_type: CITIZEN
marital_units:
marital_unit:
members: [head, spouse]
child_marital_unit:
members: [child]
tax_units:
tax_unit:
members: [head, spouse, child]
output:
is_tax_unit_head_or_spouse: [true, true, false]
# A dependent's overtime is the dependent's own income (26 U.S.C. 73(a)).
overtime_income_deduction_eligible_person: [true, true, false]

- name: A spouse without a valid SSN does not count, whatever the card type
period: 2025
input:
people:
head:
age: 40
ssn_card_type: CITIZEN
spouse:
age: 38
ssn_card_type: OTHER_NON_CITIZEN
marital_units:
marital_unit:
members: [head, spouse]
tax_units:
tax_unit:
members: [head, spouse]
output:
overtime_income_deduction_eligible_person: [true, false]

- name: A head with no SSN card does not count
period: 2025
input:
people:
head:
age: 40
ssn_card_type: NONE
child:
age: 10
ssn_card_type: CITIZEN
marital_units:
marital_unit:
members: [head]
child_marital_unit:
members: [child]
tax_units:
tax_unit:
members: [head, child]
output:
overtime_income_deduction_eligible_person: [false, false]

- name: An adult input as a dependent does not count
period: 2025
input:
people:
head:
age: 40
ssn_card_type: CITIZEN
is_tax_unit_dependent: false
parent:
age: 70
ssn_card_type: CITIZEN
is_tax_unit_dependent: true
marital_units:
marital_unit:
members: [head]
parent_marital_unit:
members: [parent]
tax_units:
tax_unit:
members: [head, parent]
output:
is_tax_unit_head: [true, false]
overtime_income_deduction_eligible_person: [true, false]

- name: An adult input as a dependent does not count even when no other adult is a filer
period: 2025
input:
people:
adult:
age: 40
ssn_card_type: CITIZEN
is_tax_unit_dependent: true
tax_units:
tax_unit:
members: [adult]
output:
# The head-or-spouse inference keeps an input dependent as head when no
# adult filer is left, but the person's income is still left out of the
# unit (irs_gross_income).
is_tax_unit_head: true
overtime_income_deduction_eligible_person: false

- name: A filer under 18 counts and an adult input as a dependent does not
period: 2025
input:
people:
filer:
age: 17
ssn_card_type: CITIZEN
is_tax_unit_dependent: false
parent:
age: 45
ssn_card_type: CITIZEN
is_tax_unit_dependent: true
marital_units:
filer_marital_unit:
members: [filer]
parent_marital_unit:
members: [parent]
tax_units:
tax_unit:
members: [filer, parent]
output:
is_tax_unit_head: [false, true]
overtime_income_deduction_eligible_person: [true, false]
Loading
Loading