Skip to content

Commit 90d6759

Browse files
MaxGhenisclaude
andcommitted
Extend AMT kiddie tax to include full-time students under age 24
Per IRC 1(g)(2)(A), the kiddie tax applies to children who meet the age requirements of Section 152(c)(3), which includes full-time students under age 24. Previously, the AMT kiddie tax only checked if the filer was under age 19. Changes: - Updated amt_kiddie_tax_applies to check student status for ages 19-23 - Added head_is_full_time_student and spouse_is_full_time_student variables - Added tests for student scenarios Closes #3909 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent fbc5283 commit 90d6759

File tree

6 files changed

+135
-8
lines changed

6 files changed

+135
-8
lines changed

changelog_entry.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
- bump: patch
2+
changes:
3+
changed:
4+
- Extend AMT kiddie tax to include full-time students under age 24.
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,106 @@
1-
- name: Kiddie tax does applies to single head
1+
# Non-student tests
2+
- name: Kiddie tax applies to single head under 19
23
period: 2022
34
input:
45
age_head: 18
56
output:
67
amt_kiddie_tax_applies: true
78

8-
- name: Older spouse
9+
- name: Kiddie tax does not apply when spouse is 19+ (non-student)
910
period: 2022
1011
input:
1112
age_head: 18
1213
age_spouse: 19
1314
output:
1415
amt_kiddie_tax_applies: false
1516

16-
- name: Younger spouse
17+
- name: Kiddie tax applies when both head and spouse under 19
1718
period: 2022
1819
input:
1920
age_head: 18
2021
age_spouse: 18
2122
output:
2223
amt_kiddie_tax_applies: true
2324

24-
- name: Older head
25+
- name: Kiddie tax does not apply when head is 19+ (non-student)
2526
period: 2022
2627
input:
2728
age_head: 19
2829
age_spouse: 18
2930
output:
3031
amt_kiddie_tax_applies: false
32+
33+
# Full-time student tests (students under 24 are subject to kiddie tax)
34+
- name: Kiddie tax applies to 20-year-old full-time student head
35+
period: 2022
36+
input:
37+
people:
38+
person1:
39+
age: 20
40+
is_full_time_college_student: true
41+
is_tax_unit_head: true
42+
tax_units:
43+
tax_unit:
44+
members: [person1]
45+
output:
46+
amt_kiddie_tax_applies: true
47+
48+
- name: Kiddie tax applies to 23-year-old full-time student head
49+
period: 2022
50+
input:
51+
people:
52+
person1:
53+
age: 23
54+
is_full_time_college_student: true
55+
is_tax_unit_head: true
56+
tax_units:
57+
tax_unit:
58+
members: [person1]
59+
output:
60+
amt_kiddie_tax_applies: true
61+
62+
- name: Kiddie tax does not apply to 24-year-old student
63+
period: 2022
64+
input:
65+
people:
66+
person1:
67+
age: 24
68+
is_full_time_college_student: true
69+
is_tax_unit_head: true
70+
tax_units:
71+
tax_unit:
72+
members: [person1]
73+
output:
74+
amt_kiddie_tax_applies: false
75+
76+
- name: Kiddie tax does not apply to 20-year-old non-student
77+
period: 2022
78+
input:
79+
people:
80+
person1:
81+
age: 20
82+
is_full_time_college_student: false
83+
is_tax_unit_head: true
84+
tax_units:
85+
tax_unit:
86+
members: [person1]
87+
output:
88+
amt_kiddie_tax_applies: false
89+
90+
- name: Kiddie tax does not apply when student spouse is 24+
91+
period: 2022
92+
input:
93+
people:
94+
person1:
95+
age: 20
96+
is_full_time_college_student: true
97+
is_tax_unit_head: true
98+
person2:
99+
age: 24
100+
is_full_time_college_student: true
101+
is_tax_unit_spouse: true
102+
tax_units:
103+
tax_unit:
104+
members: [person1, person2]
105+
output:
106+
amt_kiddie_tax_applies: false

policyengine_us/variables/gov/irs/tax/federal_income/alternative_minimum_tax/kiddie_tax/amt_kiddie_tax_applies.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,27 @@ class amt_kiddie_tax_applies(Variable):
77
definition_period = YEAR
88
label = "Alternative Minimum Tax kiddie tax applies"
99
documentation = "Whether the kiddie tax applies to the tax unit"
10+
reference = [
11+
"https://www.law.cornell.edu/uscode/text/26/1#g_2_A",
12+
"https://www.irs.gov/publications/p929",
13+
]
1014

1115
def formula(tax_unit, period, parameters):
12-
age_head = tax_unit("age_head", period)
16+
# The kiddie tax applies to children under 19, or under 24 if a
17+
# full-time student. Per IRC 1(g)(2)(A), the age requirements
18+
# reference Section 152(c)(3), same as the dependent definition.
1319
p = parameters(period).gov.irs.dependent.ineligible_age
14-
young_head = (age_head != 0) & (age_head < p.non_student)
15-
no_or_young_spouse = tax_unit("age_spouse", period) < p.non_student
20+
21+
# Check head age eligibility
22+
age_head = tax_unit("age_head", period)
23+
head_is_student = tax_unit("head_is_full_time_student", period)
24+
head_age_limit = where(head_is_student, p.student, p.non_student)
25+
young_head = (age_head != 0) & (age_head < head_age_limit)
26+
27+
# Check spouse age eligibility (if present)
28+
age_spouse = tax_unit("age_spouse", period)
29+
spouse_is_student = tax_unit("spouse_is_full_time_student", period)
30+
spouse_age_limit = where(spouse_is_student, p.student, p.non_student)
31+
no_or_young_spouse = age_spouse < spouse_age_limit
32+
1633
return young_head & no_or_young_spouse
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from policyengine_us.model_api import *
2+
3+
4+
class head_is_full_time_student(Variable):
5+
value_type = bool
6+
entity = TaxUnit
7+
definition_period = YEAR
8+
label = "Head is a full-time student"
9+
documentation = "Whether the head of the tax unit is a full-time student"
10+
11+
def formula(tax_unit, period, parameters):
12+
person = tax_unit.members
13+
is_student = person("is_full_time_student", period)
14+
is_head = person("is_tax_unit_head", period)
15+
return tax_unit.any(is_student & is_head)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from policyengine_us.model_api import *
2+
3+
4+
class spouse_is_full_time_student(Variable):
5+
value_type = bool
6+
entity = TaxUnit
7+
definition_period = YEAR
8+
label = "Spouse is a full-time student"
9+
documentation = "Whether the spouse of the tax unit is a full-time student"
10+
11+
def formula(tax_unit, period, parameters):
12+
person = tax_unit.members
13+
is_student = person("is_full_time_student", period)
14+
is_spouse = person("is_tax_unit_spouse", period)
15+
return tax_unit.any(is_student & is_spouse)

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)