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..ca5d9878d7d --- /dev/null +++ b/changelog.d/statute-bugs-ca-caleitc-itin-children.fixed.md @@ -0,0 +1 @@ +Count qualifying children with an ITIN or SSN for California's earned income tax credit from 2020. 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/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..24618d6b6d3 --- /dev/null +++ b/policyengine_us/variables/gov/states/ca/tax/income/credits/earned_income/ca_eitc_child_count.py @@ -0,0 +1,29 @@ +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 otherwise qualifying children who meet the CalEITC + identification requirement. Beginning in 2020, California accepts an + ITIN or SSN rather than requiring a work-valid SSN. Earlier years use + 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", + ) + + def formula(tax_unit, period, parameters): + return tax_unit("eitc_child_count", period) + + def formula_2020(tax_unit, period, parameters): + person = tax_unit.members + is_child = person("is_eitc_qualifying_child", period) + has_tin = person("has_tin", period) + return tax_unit.sum(is_child & has_tin)