From b5f8e60cba14be271810073e59eb3baaf33be96d Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Tue, 6 Oct 2026 16:06:38 -0400 Subject: [PATCH 1/2] Count 18-year-olds as Minnesota qualifying older children Minn. Stat. 290.0671, subd. 1a defines a qualifying older child as an IRC 32(c) qualifying child that attained at least age 18. The formula used age > 18 and also required full-time student or disability status, so an 18-year-old added nothing. IRC 152(c)(3) already makes every child under 19 a qualifying child, and Schedule M1DQC (2023-2025) step 8 checks row 11 for a non-student under 19. Compare with >= and drop the extra student gate, which is_qualifying_child_dependent already applies from age 19. Fixes #9871. Co-Authored-By: Claude Opus 5.5 --- changelog.d/mn-cwfc-older-child-age.fixed.md | 1 + .../cwfc/wfc/additional/age_threshold.yaml | 12 +- ...mn_child_and_working_families_credits.yaml | 103 ++++++++++++++++++ .../mn_child_and_working_families_credits.py | 19 ++-- 4 files changed, 120 insertions(+), 15 deletions(-) create mode 100644 changelog.d/mn-cwfc-older-child-age.fixed.md diff --git a/changelog.d/mn-cwfc-older-child-age.fixed.md b/changelog.d/mn-cwfc-older-child-age.fixed.md new file mode 100644 index 00000000000..655163cf091 --- /dev/null +++ b/changelog.d/mn-cwfc-older-child-age.fixed.md @@ -0,0 +1 @@ +Count 18-year-old qualifying children, students or not, as qualifying older children for the Minnesota working family credit. diff --git a/policyengine_us/parameters/gov/states/mn/tax/income/credits/cwfc/wfc/additional/age_threshold.yaml b/policyengine_us/parameters/gov/states/mn/tax/income/credits/cwfc/wfc/additional/age_threshold.yaml index 661c1b10c0a..05a7921b569 100644 --- a/policyengine_us/parameters/gov/states/mn/tax/income/credits/cwfc/wfc/additional/age_threshold.yaml +++ b/policyengine_us/parameters/gov/states/mn/tax/income/credits/cwfc/wfc/additional/age_threshold.yaml @@ -1,4 +1,4 @@ -description: Minnesota provides an additional working family credit amount for each qualifying child over this age threshold. +description: Minnesota provides an additional working family credit amount for each qualifying child who has attained at least this age. values: 2023-01-01: 18 metadata: @@ -7,10 +7,14 @@ metadata: href: https://www.revenue.state.mn.us/sites/default/files/2025-01/m1cwfc-24.pdf#page=2 - title: 2023 Schedule M1CWFC, Minnesota Child and Working Family Credits href: https://www.revenue.state.mn.us/sites/default/files/2025-01/m1cwfc-23.pdf#page=2 + - title: 2023 Schedule M1DQC, Dependents and Qualifying Children + href: https://www.revenue.state.mn.us/sites/default/files/2024-01/m1dqc-23.pdf#page=3 + - title: 2024 Schedule M1DQC, Dependents and Qualifying Children + href: https://www.revenue.state.mn.us/sites/default/files/2024-12/m1dqc-24.pdf#page=3 - title: 2025 Schedule M1DQC, Dependents and Qualifying Children href: https://www.revenue.state.mn.us/sites/default/files/2026-01/m1dqc-25.pdf#page=3 - - title: 290.0671 MINNESOTA WORKING FAMILY CREDIT. Subd. 1 (3) - href: https://www.revisor.mn.gov/statutes/cite/290.0671 + - title: 290.0671 MINNESOTA WORKING FAMILY CREDIT. Subd. 1a + href: https://www.revisor.mn.gov/statutes/cite/290.0671#stat.290.0671.1a unit: year period: year - label: Minnesota working family credit additional amount age threshold + label: Minnesota working family credit qualifying older child minimum age diff --git a/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.yaml b/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.yaml index 4de751088e0..669f09d111c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.yaml @@ -490,6 +490,109 @@ # WFC base only: min($10,000, $9,480) * 0.04 = $379.20, no older-child bonus. mn_child_and_working_families_credits: 379.2 +# Minn. Stat. 290.0671, subd. 1a: a qualifying older child is an IRC 32(c) +# qualifying child that "attained at least the age of 18". Schedule M1DQC +# (2023-2025, page 3) step 4 sends a child who is not under 18 at the end of +# the year to steps 5-8; step 7 checks row 11 for a full-time student and +# step 8 checks row 11 for a child under 19, so every 18-year-old qualifying +# child is a qualifying older child. The next four cases share one 2025 +# household: a head of household with $10,000 of wages and one dependent. +- name: 2025 an 18-year-old full-time student is a qualifying older child + period: 2025 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 40 + employment_income: 10_000 + child: + age: 18 + is_tax_unit_dependent: true + is_full_time_student: true + tax_units: + tax_unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: MN + output: + # WFC base: 4% of the first $9,480 of earned income = $379.20. + # One qualifying older child (M1DQC step 7): + $1,000. + # No CTC (not under 18); AGI $10,000 is below the $31,950 threshold. + mn_child_and_working_families_credits: 379.2 + 1_000 + +- name: 2025 an 18-year-old who is not a student is a qualifying older child + period: 2025 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 40 + employment_income: 10_000 + child: + age: 18 + is_tax_unit_dependent: true + is_full_time_student: false + tax_units: + tax_unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: MN + output: + # Under 19 at the end of the year (M1DQC step 8, IRC 152(c)(3)(A)), so + # the same $379.20 + $1,000 as the full-time student above. + mn_child_and_working_families_credits: 379.2 + 1_000 + +- name: 2025 a 17-year-old gets the child tax credit and no older-child amount + period: 2025 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 40 + employment_income: 10_000 + child: + age: 17 + is_tax_unit_dependent: true + is_full_time_student: false + tax_units: + tax_unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: MN + output: + # Under 18 at the end of the year (M1DQC step 4, row 10): CTC $1,750 + # plus the $379.20 WFC base, no qualifying older child amount. + mn_child_and_working_families_credits: 379.2 + 1_750 + +- name: 2025 a 19-year-old who is not a student is not a qualifying older child + period: 2025 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 40 + employment_income: 10_000 + child: + age: 19 + is_tax_unit_dependent: true + is_full_time_student: false + tax_units: + tax_unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: MN + output: + # Not a student and not under 19 (M1DQC step 8): WFC base $379.20 only. + mn_child_and_working_families_credits: 379.2 + # Minnesota decouples from IRC 32(m) (Minn. Stat. 290.0661/290.0671), so an # ITIN child (ssn_card_type OTHER_NON_CITIZEN, no SSN valid for employment) # receives the same MN CTC as a citizen child. This mirrors the "2025 Joint diff --git a/policyengine_us/variables/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.py b/policyengine_us/variables/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.py index 77034a7320d..923059249d1 100644 --- a/policyengine_us/variables/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.py +++ b/policyengine_us/variables/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.py @@ -34,12 +34,12 @@ def formula(tax_unit, period, parameters): base_wfc_credit = p.wfc.phase_in.calc(earnings) person = tax_unit.members # Minn. Stat. 290.0671, subd. 1a defines a qualifying older child as - # an IRC 32(c) qualifying child that attained at least age 18; the - # IRC 32(c)(3) definition incorporates IRC 152(c)(3)(B), which waives - # the age (and student) test for permanently and totally disabled - # individuals. Schedule M1DQC step 4 routes a disabled dependent aged - # 18 or older directly to the qualifying-older-child row (row 11) - # without the full-time-student test. + # an IRC 32(c) qualifying child that attained at least age 18. IRC + # 32(c)(3) uses the IRC 152(c)(3) age test: under 19, under 24 if a + # full-time student, or any age if permanently and totally disabled. + # Schedule M1DQC steps 4-8 follow it: an 18-year-old qualifies whether + # or not a student, a 19- to 23-year-old only as a full-time student, + # and a disabled child aged 18 or older always. is_disabled_dependent = person("is_tax_unit_dependent", period) & person( "is_permanently_and_totally_disabled", period ) @@ -47,11 +47,8 @@ def formula(tax_unit, period, parameters): person("is_qualifying_child_dependent", period) | is_disabled_dependent ) age = person("age", period) - full_time_student = person("is_full_time_student", period) - qualifying_older_child = ( - qualifying_child - & (age > p.wfc.additional.age_threshold) - & (full_time_student | is_disabled_dependent) + qualifying_older_child = qualifying_child & ( + age >= p.wfc.additional.age_threshold ) qualifying_older_children = tax_unit.sum(qualifying_older_child) additional_wfc_credit = p.wfc.additional.amount.calc(qualifying_older_children) From 1d4fa226a26011256b44132c22825f14103e3dd0 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Tue, 6 Oct 2026 19:18:06 -0400 Subject: [PATCH 2/2] Test a disabled 18-year-old and the phase-out with an 18-year-old older child Co-Authored-By: Claude Opus 5.5 --- ...mn_child_and_working_families_credits.yaml | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.yaml b/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.yaml index 669f09d111c..09e3fa5821e 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/mn/tax/income/credits/mn_child_and_working_families_credits.yaml @@ -593,6 +593,54 @@ # Not a student and not under 19 (M1DQC step 8): WFC base $379.20 only. mn_child_and_working_families_credits: 379.2 +- name: 2025 a disabled 18-year-old is a qualifying older child + period: 2025 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 40 + employment_income: 10_000 + child: + age: 18 + is_tax_unit_dependent: true + is_full_time_student: false + is_permanently_and_totally_disabled: true + tax_units: + tax_unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: MN + output: + # Disabled and not under 18 (M1DQC step 4 sends the child to row 11). + mn_child_and_working_families_credits: 379.2 + 1_000 + +- name: 2025 an 18-year-old older child above the phase-out start + period: 2025 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 40 + employment_income: 40_000 + child: + age: 18 + is_tax_unit_dependent: true + is_full_time_student: false + tax_units: + tax_unit: + members: [parent, child] + households: + household: + members: [parent, child] + state_code: MN + output: + # $379.20 + $1,000, less 9% of the income above the $31,950 phase-out + # start (2025 Schedule M1CWFC): 1,379.20 - 0.09 x 8,050 = 654.70. + mn_child_and_working_families_credits: 654.7 + # Minnesota decouples from IRC 32(m) (Minn. Stat. 290.0661/290.0671), so an # ITIN child (ssn_card_type OTHER_NON_CITIZEN, no SSN valid for employment) # receives the same MN CTC as a citizen child. This mirrors the "2025 Joint