Skip to content
Merged
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
1 change: 1 addition & 0 deletions changelog.d/credits-2026-id-ctc-co-fatc.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Remove Idaho's expired child tax credit from state child tax credit totals after 2025, preserve those totals under Idaho revival reforms, and pause Colorado's family affordability tax credit from 2026.
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,23 @@ description: Colorado provides this family affordability tax credit base amount
values:
2024-01-01: 3_200
2025-01-01: 3_273
# C.R.S. 39-22-130(6)(f): no credit is allowed below the 3% adjustment factor.
# LCS R26-322 confirms the credit is unavailable for 2026 and projects
# adjustment factors of 2.78% for 2027 and 2.71% for 2028, also below 3%.
# The amount stays at zero from 2026 pending a later determination.
2026-01-01: 0
metadata:
period: year
unit: currency-USD
label: Colorado family affordability tax credit young child amount
reference:
- title: Colorado General Assembly House Bill 24-1311 Family Affordability Tax Credit
href: https://leg.colorado.gov/bills/hb24-1311
- title: 2024 Colorado Child Tax Credit Instructions, Section C
href: https://tax.colorado.gov/sites/tax/files/documents/DR0104CN_2024.pdf#page=3
- title: 2025 Colorado Individual Tax Filing Guide 104 Book, Section C
href: https://tax.colorado.gov/sites/tax/files/documents/Book104_2025.pdf#page=27
- title: 2025 Colorado Child Tax Credit Instructions, Section C
href: https://tax.colorado.gov/sites/tax/files/documents/DR_0104CN_2025.pdf#page=3
- title: "House Bill 24-1311, C.R.S. 39-22-130(6), (6)(f) #page 7,10"
href: https://leg.colorado.gov/sites/default/files/2024a_1311_signed.pdf#page=7
- title: Legislative Council Staff R26-322, Treatment of Tax Credit Triggers in Fiscal Notes
href: https://content.leg.colorado.gov/sites/default/files/R26-322_Treatment%20of%20Tax%20Credit%20Triggers%20in%20Fiscal%20Notes%20March%202026.pdf#page=3
- title: Colorado Department of Revenue, Child Tax Credit and EITC FAQs (tax year 2026 pause)
href: https://tax.colorado.gov/ctc-eitc-faqs
Original file line number Diff line number Diff line change
Expand Up @@ -74,14 +74,14 @@ values:
- or_ctc
- ut_ctc
- vt_ctc
# Idaho's child tax credit ends after 2025 (Idaho Code 63-3029L(1)).
2026-01-01:
- az_dependent_tax_credit
- ca_yctc
- co_ctc
- co_family_affordability_credit
- dc_ctc
- ga_ctc
- id_ctc
- il_ctc
- ma_child_and_family_credit_or_dependent_care_credit
- md_ctc
Expand All @@ -103,7 +103,6 @@ values:
- co_family_affordability_credit
- dc_ctc
- ga_ctc
- id_ctc
- il_ctc
- ma_child_and_family_credit_or_dependent_care_credit
- md_ctc
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ metadata:
- title: Idaho Individual Income Tax Instructions Packet 2024
href: https://tax.idaho.gov/wp-content/uploads/forms/EIN00046/EIN00046_10-23-2024.pdf#page=10
- title: Idaho Individual Income Tax Instructions Packet 2025
href: https://tax.idaho.gov/wp-content/uploads/forms/EIN00046/EIN00046_03-02-2026.pdf
href: https://tax.idaho.gov/wp-content/uploads/forms/EIN00046/EIN00046_03-02-2026.pdf#page=12
28 changes: 28 additions & 0 deletions policyengine_us/reforms/states/id/ctc/id_ctc_reform.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,33 @@ def _first_true_instant(nodes, default):
return min(candidates)


def _restore_id_ctc_reporting(parameters, revival_start):
"""Include the revived worksheet amount without erasing later credits."""
state_ctcs = parameters.gov.states.household.state_ctcs
revival_stop = instant("2100-12-31")
if revival_start > revival_stop:
return

# Snapshot every dated list before update replaces overlapping intervals.
# In particular, the 2027 list adds Rhode Island's credit independently.
dated_lists = [(revival_start, list(state_ctcs(revival_start)))]
dated_lists.extend(
(instant(value.instant_str), list(value.value))
for value in state_ctcs.values_list
if str(revival_start) < value.instant_str <= str(revival_stop)
)
dated_lists.sort(key=lambda entry: entry[0])
for index, (start, credits) in enumerate(dated_lists):
if "id_ctc" in credits:
continue
stop = (
dated_lists[index + 1][0].offset(-1, "day")
if index + 1 < len(dated_lists)
else revival_stop
)
state_ctcs.update(start=start, stop=stop, value=credits + ["id_ctc"])


def create_id_ctc() -> Reform:
class id_refundable_ctc(Variable):
value_type = float
Expand Down Expand Up @@ -73,6 +100,7 @@ def modify_parameters(parameters):
# Never revive before the baseline drop date: id_ctc is already in the
# list through 2025, so revival only matters from 2026 onward.
revival_start = max(activation, baseline_drop)
_restore_id_ctc_reporting(parameters, revival_start)
non_refundable = parameters.gov.states.id.tax.income.credits.non_refundable
current_non_refundable = non_refundable(revival_start)
if "id_ctc" not in current_non_refundable:
Expand Down
4 changes: 4 additions & 0 deletions policyengine_us/reforms/states/id/s1450/s1450.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
from policyengine_core.reforms import Reform

from policyengine_us.model_api import *
from policyengine_us.reforms.states.id.ctc.id_ctc_reform import (
_restore_id_ctc_reporting,
)


def create_id_s1450() -> Reform:
Expand All @@ -14,6 +17,7 @@ def modify_parameters(parameters: ParameterNode) -> ParameterNode:
stop=instant("2100-12-31"),
value=["id_ctc"],
)
_restore_id_ctc_reporting(parameters, instant("2026-01-01"))
return parameters

class reform(Reform):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,45 @@
output:
co_family_affordability_credit: [0, 0, 0]
co_refundable_credits: 0

- name: Colorado family affordability credit in 2025
period: 2025
input:
people:
head:
age: 30
child:
age: 1
tax_units:
tax_unit:
members: [head, child]
adjusted_gross_income: 0
households:
household:
members: [head, child]
state_code: CO
output:
co_family_affordability_credit: [0, 3_273]

- name: Colorado pauses the family affordability credit in 2026
period: 2026
input:
people:
head:
age: 30
child:
age: 1
older_child:
age: 10
tax_units:
tax_unit:
members: [head, child, older_child]
adjusted_gross_income: 0
households:
household:
members: [head, child, older_child]
state_code: CO
output:
# C.R.S. 39-22-130(6)(f): no credit when forecast revenue growth is below
# three percent; the Department of Revenue pauses it for tax year 2026.
co_family_affordability_credit: [0, 0, 0]
Original file line number Diff line number Diff line change
Expand Up @@ -126,3 +126,24 @@
output:
# 5 children under 17 * $205
id_ctc: 1025

- name: No Idaho child tax credit after 2025 in the credit list or the state child tax credit totals
period: 2026
input:
people:
head:
age: 30
child:
age: 5
tax_units:
tax_unit:
members: [head, child]
households:
household:
members: [head, child]
state_code: ID
output:
# Idaho Code 63-3029L(1): taxable years beginning before January 1, 2026.
# id_ctc stays the worksheet amount a reform can revive.
id_non_refundable_credits: 0
taxsim_state_ctc: 0
Original file line number Diff line number Diff line change
Expand Up @@ -136,9 +136,10 @@
co_state_supplement: 0.0
co_oap: 0.0
child1:
# FAC mid-reduction (HOH threshold 16,000): excess 24,000 ->
# ceil(24,000 / 5,000) = 5 increments x 6.875% = 34.375% reduction;
# FAC is 0 in 2026 (3% trigger). Without the pause, mid-reduction
# (HOH threshold 16,000): excess 24,000 -> ceil(24,000 / 5,000) = 5
# increments x 6.875% = 34.375% reduction;
# 3,273 x 1.0 (age under 6) x 0.65625 = 2,147.91.
co_family_affordability_credit: 2_147.91
co_family_affordability_credit: 0
co_state_supplement: 0.0
co_oap: 0.0
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
# YAML regression-test fixture (policyengine-us partner edge cases).
# CO Family Affordability Credit (HB24-1311), 2026 parameters: base 3,273 per
# CO Family Affordability Credit (HB24-1311). The 2026 credit is 0:
# C.R.S. 39-22-130(6)(f) allows no credit when the adjustment factor is below
# 3% (LCS memo R26-322). Without the pause the base would be 3,273 per
# qualifying-child dependent; age multiplier 1.0 under 6, 0.75 ages 6-16, 0 at
# 17+; AGI reduction of 6.875% per 5,000 increment above 16,000
# (single/HOH) or 26,000 (joint), uprated values for 2026.
# (single/HOH) or 26,000 (joint).
- name: co_family_affordability_age_multiplier_ladder_5_6_17 (co)
period: 2026
absolute_error_margin: 0.1
Expand Down Expand Up @@ -134,14 +136,15 @@
co_state_supplement: 0.0
co_oap: 0.0
child1:
# AGI 10,000 < 26,000 joint threshold -> no reduction;
# age 5 -> 3,273 x 1.0 = 3,273.
co_family_affordability_credit: 3_273.0
# 0 in 2026 (3% trigger). Without the pause: AGI 10,000 < 26,000
# joint threshold -> no reduction; age 5 -> 3,273 x 1.0 = 3,273.
co_family_affordability_credit: 0
co_state_supplement: 0.0
co_oap: 0.0
child2:
# Age 6 -> 3,273 x 0.75 = 2,454.75.
co_family_affordability_credit: 2_454.75
# 0 in 2026 (3% trigger). Without the pause: age 6 ->
# 3,273 x 0.75 = 2,454.75.
co_family_affordability_credit: 0
co_state_supplement: 0.0
co_oap: 0.0
child3:
Expand Down Expand Up @@ -243,9 +246,10 @@
co_state_supplement: 0.0
co_oap: 0.0
child1:
# AGI exactly at the 26,000 joint threshold -> excess 0 -> full
# 3,273 x 1.0 (age under 6); $1 more starts the reduction.
co_family_affordability_credit: 3_273.0
# 0 in 2026 (3% trigger). Without the pause: AGI exactly at the
# 26,000 joint threshold -> excess 0 -> full 3,273 x 1.0 (age under
# 6); $1 more starts the reduction.
co_family_affordability_credit: 0
co_state_supplement: 0.0
co_oap: 0.0
- name: co_family_affordability_joint_agi_26k_plus_1_first_increment (co)
Expand Down Expand Up @@ -341,9 +345,10 @@
co_state_supplement: 0.0
co_oap: 0.0
child1:
# Excess 1 over the 26,000 joint threshold -> ceil(1/5,000) = 1
# increment x 6.875%; 3,273 x 0.93125 = 3,047.98.
co_family_affordability_credit: 3_047.98
# 0 in 2026 (3% trigger). Without the pause: excess 1 over the
# 26,000 joint threshold -> ceil(1/5,000) = 1 increment x 6.875%;
# 3,273 x 0.93125 = 3,047.98.
co_family_affordability_credit: 0
co_state_supplement: 0.0
co_oap: 0.0
- name: co_family_affordability_hoh_agi_90k_fully_phased_out (co)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
# for the same 20,000 AGI under two filing statuses: the HOH filer is past
# the 16,000 FAC reduction threshold (one 6.875% increment) while the joint
# filer at the same AGI is below the 26,000 joint threshold (full FAC).
# In 2026 the FAC is 0 under the 3% trigger (C.R.S. 39-22-130(6)(f)).
- name: statetax_size_3_single_parent_2_children (co)
period: 2026
absolute_error_margin: 0.1
Expand Down Expand Up @@ -96,14 +97,16 @@
co_state_supplement: 0.0
co_oap: 0.0
child1:
# FAC: excess 4,000 over 16,000 HOH threshold -> 1 increment x 6.875%;
# age 8 -> 3,273 x 0.75 x 0.93125 = 2,285.99.
co_family_affordability_credit: 2_285.99
# FAC is 0 in 2026 (3% trigger). Without the pause: excess 4,000
# over 16,000 HOH threshold -> 1 increment x 6.875%; age 8 ->
# 3,273 x 0.75 x 0.93125 = 2,285.99.
co_family_affordability_credit: 0
co_state_supplement: 0.0
co_oap: 0.0
child2:
# Age 3 -> 3,273 x 1.0 x 0.93125 = 3,047.98.
co_family_affordability_credit: 3_047.98
# 0 in 2026 (3% trigger). Without the pause: age 3 ->
# 3,273 x 1.0 x 0.93125 = 3,047.98.
co_family_affordability_credit: 0
co_state_supplement: 0.0
co_oap: 0.0
- name: statetax_size_4_couple_2_children (co)
Expand Down Expand Up @@ -218,13 +221,15 @@
co_state_supplement: 0.0
co_oap: 0.0
child1:
# FAC joint: AGI 20,000 < 26,000 threshold -> no reduction;
# age 8 -> 3,273 x 0.75 = 2,454.75.
co_family_affordability_credit: 2_454.75
# FAC is 0 in 2026 (3% trigger). Without the pause: joint AGI
# 20,000 < 26,000 threshold -> no reduction; age 8 ->
# 3,273 x 0.75 = 2,454.75.
co_family_affordability_credit: 0
co_state_supplement: 0.0
co_oap: 0.0
child2:
# Age 3 -> full 3,273 (contrast with the HOH case at the same AGI).
co_family_affordability_credit: 3_273.0
# 0 in 2026 (3% trigger). Without the pause: age 3 -> full 3,273
# (contrast with the HOH case at the same AGI).
co_family_affordability_credit: 0
co_state_supplement: 0.0
co_oap: 0.0
Loading
Loading