diff --git a/changelog.d/statute-bugs-ca-caleitc-itin-children.fixed.md b/changelog.d/statute-bugs-ca-caleitc-itin-children.fixed.md new file mode 100644 index 00000000000..b33d5910344 --- /dev/null +++ b/changelog.d/statute-bugs-ca-caleitc-itin-children.fixed.md @@ -0,0 +1,3 @@ +Count qualifying children with an ITIN or SSN for California's earned income tax credit from 2020. + +Apply the same identification rule to the California young child tax credit: a child under 6 needs a work-valid SSN before 2020 and an SSN or ITIN from 2020. diff --git a/policyengine_us/parameters/gov/states/ca/tax/income/credits/earned_income/eligibility/itin_eligible.yaml b/policyengine_us/parameters/gov/states/ca/tax/income/credits/earned_income/eligibility/itin_eligible.yaml new file mode 100644 index 00000000000..4a67f3aabca --- /dev/null +++ b/policyengine_us/parameters/gov/states/ca/tax/income/credits/earned_income/eligibility/itin_eligible.yaml @@ -0,0 +1,17 @@ +description: California accepts an individual taxpayer identification number, or a social security number not valid for work, for a CalEITC and young child tax credit qualifying child if this is true. +values: + 2015-01-01: false + # R&TC 17052(p), added by AB 1876, applies to taxable years beginning on or + # after January 1, 2020. + 2020-01-01: true +metadata: + unit: bool + period: year + label: California EITC ITIN eligibility for qualifying children + reference: + - title: California Revenue and Taxation Code ยง 17052(p) + href: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=RTC§ionNum=17052. + - title: AB 1876 (Stats. 2020, ch. 87), section 1 + href: https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=201920200AB1876 + - title: 2020 FTB 3514 instructions, Step 1 and Line 7 + href: https://www.ftb.ca.gov/forms/2020/2020-3514-instructions.html diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc.yaml index 8305fe864e0..1aab2769bb4 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc.yaml @@ -3,7 +3,7 @@ absolute_error_margin: 20 input: employment_income: 20_500 - eitc_child_count: 0 + ca_eitc_child_count: 0 output: ca_eitc: 88 @@ -54,3 +54,115 @@ ca_income_tax_before_refundable_credits: 0 ca_eitc: 0 # too much investment income to be CalEITC eligible ca_income_tax: 0 + +- name: A qualifying ITIN child uses the one-child CalEITC schedule + period: 2024 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 35 + is_tax_unit_head: true + is_eitc_qualifying_child: false + ssn_card_type: CITIZEN + has_tin: true + child: + age: 8 + is_tax_unit_dependent: true + is_eitc_qualifying_child: true + ssn_card_type: NONE + has_tin: true + tax_units: + unit: + members: [parent, child] + ca_eitc_eligible: true + ca_eitc_earned_income: 1_000 + adjusted_gross_income: 1_000 + households: + household: + members: [parent, child] + state_code: CA + output: + eitc_child_count: 0 + ca_eitc_child_count: 1 + # $1,000 * .34 * .85, rather than the childless $65.025. + ca_eitc: 289 + +- name: A child without an SSN or ITIN does not increase CalEITC + period: 2024 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 35 + is_tax_unit_head: true + is_eitc_qualifying_child: false + ssn_card_type: CITIZEN + has_tin: true + child: + age: 8 + is_tax_unit_dependent: true + is_eitc_qualifying_child: true + ssn_card_type: NONE + has_tin: false + tax_units: + unit: + members: [parent, child] + ca_eitc_eligible: true + ca_eitc_earned_income: 1_000 + adjusted_gross_income: 1_000 + households: + household: + members: [parent, child] + state_code: CA + output: + eitc_child_count: 0 + ca_eitc_child_count: 0 + ca_eitc: 65.025 + +- name: Four ITIN qualifying children use the three-or-more-child CalEITC schedule + period: 2024 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 35 + is_tax_unit_head: true + is_eitc_qualifying_child: false + ssn_card_type: CITIZEN + has_tin: true + child1: + age: 12 + is_eitc_qualifying_child: true + ssn_card_type: NONE + has_tin: true + child2: + age: 10 + is_eitc_qualifying_child: true + ssn_card_type: NONE + has_tin: true + child3: + age: 8 + is_eitc_qualifying_child: true + ssn_card_type: NONE + has_tin: true + child4: + age: 6 + is_eitc_qualifying_child: true + ssn_card_type: NONE + has_tin: true + tax_units: + unit: + members: [parent, child1, child2, child3, child4] + ca_eitc_eligible: true + ca_eitc_earned_income: 1_000 + adjusted_gross_income: 1_000 + households: + household: + members: [parent, child1, child2, child3, child4] + state_code: CA + output: + eitc_child_count: 0 + ca_eitc_child_count: 4 + # $1,000 * .45 * .85; the count itself is not capped at three. + ca_eitc: 382.5 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc_child_count.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc_child_count.yaml new file mode 100644 index 00000000000..15901785a6b --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc_child_count.yaml @@ -0,0 +1,114 @@ +- name: An ITIN qualifying child does not count before the 2020 extension + period: 2019 + input: + people: + parent: + age: 35 + is_eitc_qualifying_child: false + ssn_card_type: CITIZEN + has_tin: true + child: + age: 8 + is_eitc_qualifying_child: true + ssn_card_type: NONE + has_tin: true + tax_units: + unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: CA + output: + eitc_child_count: 0 + ca_eitc_child_count: 0 + +- name: An ITIN qualifying child counts starting in 2020 without changing the federal count + period: 2020 + input: + people: + parent: + age: 35 + is_eitc_qualifying_child: false + ssn_card_type: CITIZEN + has_tin: true + child: + age: 8 + is_eitc_qualifying_child: true + ssn_card_type: NONE + has_tin: true + tax_units: + unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: CA + output: + eitc_child_count: 0 + ca_eitc_child_count: 1 + +- name: California counts qualifying SSN and ITIN children but excludes missing IDs and nonqualifying dependents + period: 2024 + input: + people: + parent: + age: 35 + is_eitc_qualifying_child: false + ssn_card_type: CITIZEN + has_tin: true + ssn_child: + age: 12 + is_eitc_qualifying_child: true + ssn_card_type: CITIZEN + has_tin: true + itin_child: + age: 10 + is_eitc_qualifying_child: true + ssn_card_type: NONE + has_tin: true + child_without_id: + age: 8 + is_eitc_qualifying_child: true + ssn_card_type: NONE + has_tin: false + nonqualifying_dependent: + age: 25 + is_eitc_qualifying_child: false + ssn_card_type: NONE + has_tin: true + tax_units: + unit: + members: [parent, ssn_child, itin_child, child_without_id, nonqualifying_dependent] + households: + household: + members: [parent, ssn_child, itin_child, child_without_id, nonqualifying_dependent] + state_code: CA + output: + eitc_child_count: 1 + ca_eitc_child_count: 2 + +- name: A qualifying child with an SSN not valid for employment counts for California + period: 2024 + input: + people: + parent: + age: 35 + is_eitc_qualifying_child: false + ssn_card_type: CITIZEN + has_tin: true + child: + age: 8 + is_eitc_qualifying_child: true + ssn_card_type: OTHER_NON_CITIZEN + has_tin: true + tax_units: + unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: CA + output: + eitc_child_count: 0 + ca_eitc_child_count: 1 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc_income_boundary.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc_income_boundary.yaml index d0b14883529..afb4335a1a8 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc_income_boundary.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc_income_boundary.yaml @@ -37,7 +37,7 @@ age: [35, 35, 35, 35] state_code: [CA, CA, CA, CA] employment_income: [31_950, 31_950, 31_950, 31_950] - eitc_child_count: [0, 1, 2, 3] + ca_eitc_child_count: [0, 1, 2, 3] output: ca_eitc_eligible: [true, true, true, true] ca_eitc: [0.009155, 0.030057, 0.041937, 0.042520] @@ -49,7 +49,7 @@ state_code: [CA, CA, CA, CA] employment_income: [31_951, 31_951, 31_951, 31_951] adjusted_gross_income: [10_000, 10_000, 10_000, 10_000] - eitc_child_count: [0, 1, 2, 3] + ca_eitc_child_count: [0, 1, 2, 3] output: ca_eitc_eligible: [true, true, true, true] ca_eitc: [0, 0, 0, 0] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc_integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc_integration.yaml index ff6fb759d93..afbc8469578 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc_integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/earned_income/ca_eitc_integration.yaml @@ -4,7 +4,7 @@ absolute_error_margin: 20 input: state_code: CA - eitc_child_count: 3 + ca_eitc_child_count: 3 employment_income: 8_000 # AGI equals earned income so the worksheet's earned-income/AGI credit # comparison isolates the table value. @@ -18,7 +18,7 @@ absolute_error_margin: 6 input: state_code: CA - eitc_child_count: 1 + ca_eitc_child_count: 1 employment_income: 6_400 adjusted_gross_income: 6_400 output: @@ -30,7 +30,7 @@ absolute_error_margin: 2 input: state_code: CA - eitc_child_count: 0 + ca_eitc_child_count: 0 employment_income: 9_951 adjusted_gross_income: 9_951 output: diff --git a/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/young_child/ca_yctc.yaml b/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/young_child/ca_yctc.yaml index 11ae453eb42..92ce179d6cd 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/young_child/ca_yctc.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ca/tax/income/credits/young_child/ca_yctc.yaml @@ -406,3 +406,108 @@ # Step 8: earned income of zero or less; the 5,000 net loss and the # 10,000 wages are within the 2022 $32,490 limits, so the full $1,083. ca_yctc: 1_083 + +- name: 2024 child under 6 with an SSN qualifies for the YCTC + # R&TC 17052.1(c): the YCTC qualifying child has the section 17052 + # meaning. Earned income of $10,000 is below the $26,626 phase-out start, + # so the full 2024 amount. + period: 2024 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 30 + employment_income: 10_000 + child: + age: 3 + ssn_card_type: CITIZEN + has_tin: true + tax_units: + tax_unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: CA + output: + ca_is_qualifying_child_for_caleitc: [false, true] + ca_eitc_child_count: 1 + ca_yctc: 1_154 + +- name: 2024 child under 6 with an ITIN qualifies for the YCTC + # R&TC 17052(p) accepts an ITIN from 2020, for CalEITC and so for YCTC. + period: 2024 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 30 + employment_income: 10_000 + child: + age: 3 + ssn_card_type: NONE + has_tin: true + tax_units: + tax_unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: CA + output: + ca_is_qualifying_child_for_caleitc: [false, true] + ca_eitc_child_count: 1 + ca_yctc: 1_154 + +- name: 2024 child under 6 with neither an SSN nor an ITIN does not qualify for the YCTC + # FTB 3514 Line 7: a child without an SSN or federal ITIN cannot count as + # a qualifying child for the EITC or YCTC. + period: 2024 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 30 + employment_income: 10_000 + child: + age: 3 + ssn_card_type: NONE + has_tin: false + tax_units: + tax_unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: CA + output: + ca_is_qualifying_child_for_caleitc: [false, false] + ca_eitc_child_count: 0 + # The childless CalEITC is still positive, but no qualifying child. + ca_yctc: 0 + +- name: 2019 child under 6 with only an ITIN does not qualify for the YCTC + # Before 2020 California follows the federal identification rule, under + # which an ITIN does not count. + period: 2019 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 30 + employment_income: 10_000 + child: + age: 3 + ssn_card_type: NONE + has_tin: true + tax_units: + tax_unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: CA + output: + ca_is_qualifying_child_for_caleitc: [false, false] + ca_eitc_child_count: 0 + ca_yctc: 0 diff --git a/policyengine_us/variables/gov/states/ca/tax/income/credits/earned_income/ca_eitc.py b/policyengine_us/variables/gov/states/ca/tax/income/credits/earned_income/ca_eitc.py index 2adfd73c25d..ba0f7d36b50 100644 --- a/policyengine_us/variables/gov/states/ca/tax/income/credits/earned_income/ca_eitc.py +++ b/policyengine_us/variables/gov/states/ca/tax/income/credits/earned_income/ca_eitc.py @@ -17,7 +17,7 @@ class ca_eitc(Variable): def formula(tax_unit, period, parameters): p = parameters(period).gov.states.ca.tax.income.credits.earned_income - child_count = tax_unit("eitc_child_count", period) + child_count = tax_unit("ca_eitc_child_count", period) phase_in_rate = p.phase_in.rate.calc(child_count) * p.adjustment.factor phase_in_max_income = p.earned_income_amount.calc(child_count) diff --git a/policyengine_us/variables/gov/states/ca/tax/income/credits/earned_income/ca_eitc_child_count.py b/policyengine_us/variables/gov/states/ca/tax/income/credits/earned_income/ca_eitc_child_count.py new file mode 100644 index 00000000000..bf56db10a9e --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/tax/income/credits/earned_income/ca_eitc_child_count.py @@ -0,0 +1,24 @@ +from policyengine_us.model_api import * + + +class ca_eitc_child_count(Variable): + value_type = int + entity = TaxUnit + label = "CalEITC qualifying children" + definition_period = YEAR + documentation = """ + Number of qualifying children who meet the CalEITC identification + requirement (ca_is_qualifying_child_for_caleitc). Beginning in 2020, + California accepts an ITIN or SSN rather than requiring a work-valid + SSN; earlier years match the federal EITC child count. + """ + reference = ( + # AB 1876, section 1, R&TC 17052(p): ITIN or SSN from 2020. + "https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=201920200AB1876", + # FTB 3514, Step 1 question 3 and Line 7: qualifying children's IDs. + "https://www.ftb.ca.gov/forms/2020/2020-3514-instructions.html", + ) + defined_for = StateCode.CA + + def formula(tax_unit, period, parameters): + return add(tax_unit, period, ["ca_is_qualifying_child_for_caleitc"]) diff --git a/policyengine_us/variables/gov/states/ca/tax/income/credits/earned_income/ca_is_qualifying_child_for_caleitc.py b/policyengine_us/variables/gov/states/ca/tax/income/credits/earned_income/ca_is_qualifying_child_for_caleitc.py index 7cb17b9f4b6..a637ff69fb8 100644 --- a/policyengine_us/variables/gov/states/ca/tax/income/credits/earned_income/ca_is_qualifying_child_for_caleitc.py +++ b/policyengine_us/variables/gov/states/ca/tax/income/credits/earned_income/ca_is_qualifying_child_for_caleitc.py @@ -5,13 +5,28 @@ class ca_is_qualifying_child_for_caleitc(Variable): value_type = bool entity = Person label = "Child qualifies for CalEITC" + documentation = """ + An IRC 32(c)(3) qualifying child who meets California's identification + requirement. Before 2020 that is the federal rule (an SSN valid for + work); from 2020, R&TC 17052(p) accepts an SSN of any kind or an ITIN. + CalEITC counts these children, and the young child tax credit + (R&TC 17052.1) requires one under age 6. + """ definition_period = YEAR reference = ( "https://www.ftb.ca.gov/file/personal/credits/EITC-calculator/Help/QualifyingChildren", - # RTC 17052 conforms CalEITC to the IRC 32 qualifying-child definition. - "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=RTC§ionNum=17052", + # RTC 17052 conforms CalEITC to the IRC 32 qualifying-child definition; + # 17052(p) modifies the IRC 32(m) identification rule from 2020. + "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=RTC§ionNum=17052.", + # RTC 17052.1(c): "'Qualifying child' shall have the same meaning as + # under Section 17052, except that the child shall be younger than six + # years of age as of the last day of the taxable year." + "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=RTC§ionNum=17052.1.", # IRC 32(c)(3)(A) applies the IRC 152(c) qualifying-child definition. "https://www.law.cornell.edu/uscode/text/26/32#c_3_A", + # FTB 3514, Line 7: a child without an SSN or ITIN cannot count for + # the EITC or YCTC. + "https://www.ftb.ca.gov/forms/2024/2024-3514-booklet.html", ) defined_for = StateCode.CA @@ -19,4 +34,16 @@ def formula(person, period, parameters): # CalEITC uses federal EITC rules regarding qualifying children, # including the IRC 152(c)(3)(B) age waiver for a permanently and # totally disabled dependent and the IRC 152(c)(2) relationship test. - return person("is_eitc_qualifying_child", period) + is_child = person("is_eitc_qualifying_child", period) + p = parameters(period).gov.states.ca.tax.income.credits.earned_income + if p.eligibility.itin_eligible: + # R&TC 17052(p) substitutes "federal individual taxpayer + # identification number or a social security number" for "social + # security number" in IRC 32(m), and drops the benefits-only SSN + # exclusion. + meets_identification = person("has_tin", period) + else: + meets_identification = person( + "meets_eitc_identification_requirements", period + ) + return is_child & meets_identification