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
4 changes: 4 additions & 0 deletions changelog_entry.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
- bump: patch
changes:
changed:
- Extend AMT kiddie tax to include full-time students under age 24.
Original file line number Diff line number Diff line change
@@ -1,30 +1,106 @@
- name: Kiddie tax does applies to single head
# Non-student tests
- name: Kiddie tax applies to single head under 19
period: 2022
input:
age_head: 18
output:
amt_kiddie_tax_applies: true

- name: Older spouse
- name: Kiddie tax does not apply when spouse is 19+ (non-student)
period: 2022
input:
age_head: 18
age_spouse: 19
output:
amt_kiddie_tax_applies: false

- name: Younger spouse
- name: Kiddie tax applies when both head and spouse under 19
period: 2022
input:
age_head: 18
age_spouse: 18
output:
amt_kiddie_tax_applies: true

- name: Older head
- name: Kiddie tax does not apply when head is 19+ (non-student)
period: 2022
input:
age_head: 19
age_spouse: 18
output:
amt_kiddie_tax_applies: false

# Full-time student tests (students under 24 are subject to kiddie tax)
- name: Kiddie tax applies to 20-year-old full-time student head
period: 2022
input:
people:
person1:
age: 20
is_full_time_college_student: true
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
output:
amt_kiddie_tax_applies: true

- name: Kiddie tax applies to 23-year-old full-time student head
period: 2022
input:
people:
person1:
age: 23
is_full_time_college_student: true
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
output:
amt_kiddie_tax_applies: true

- name: Kiddie tax does not apply to 24-year-old student
period: 2022
input:
people:
person1:
age: 24
is_full_time_college_student: true
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
output:
amt_kiddie_tax_applies: false

- name: Kiddie tax does not apply to 20-year-old non-student
period: 2022
input:
people:
person1:
age: 20
is_full_time_college_student: false
is_tax_unit_head: true
tax_units:
tax_unit:
members: [person1]
output:
amt_kiddie_tax_applies: false

- name: Kiddie tax does not apply when student spouse is 24+
period: 2022
input:
people:
person1:
age: 20
is_full_time_college_student: true
is_tax_unit_head: true
person2:
age: 24
is_full_time_college_student: true
is_tax_unit_spouse: true
tax_units:
tax_unit:
members: [person1, person2]
output:
amt_kiddie_tax_applies: false
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,41 @@ class amt_kiddie_tax_applies(Variable):
definition_period = YEAR
label = "Alternative Minimum Tax kiddie tax applies"
documentation = "Whether the kiddie tax applies to the tax unit"
reference = [
"https://www.law.cornell.edu/uscode/text/26/1#g_2_A",
"https://www.irs.gov/publications/p929",
]

def formula(tax_unit, period, parameters):
age_head = tax_unit("age_head", period)
# The kiddie tax applies to children under 19, or under 24 if a
# full-time student. Per IRC 1(g)(2)(A), the age requirements
# reference Section 152(c)(3), same as the dependent definition.
p = parameters(period).gov.irs.dependent.ineligible_age
young_head = (age_head != 0) & (age_head < p.non_student)
no_or_young_spouse = tax_unit("age_spouse", period) < p.non_student

# Get student status from person-level data
person = tax_unit.members
is_student = person("is_full_time_student", period)
is_head = person("is_tax_unit_head", period)
is_spouse = person("is_tax_unit_spouse", period)

# Check if head or spouse is a full-time student
head_is_student = tax_unit.any(is_student & is_head)
spouse_is_student = tax_unit.any(is_student & is_spouse)

# Get tax unit level ages
age_head = tax_unit("age_head", period)
age_spouse = tax_unit("age_spouse", period)

# Determine age limits based on student status
head_age_limit = where(head_is_student, p.student, p.non_student)
spouse_age_limit = where(spouse_is_student, p.student, p.non_student)

# Check head age: head must be young (and exist - age != 0)
young_head = (age_head != 0) & (age_head < head_age_limit)

# Check spouse age: spouse must be young (or not exist - age == 0)
no_or_young_spouse = (age_spouse == 0) | (
age_spouse < spouse_age_limit
)

return young_head & no_or_young_spouse
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.