Skip to content

Add Connecticut refundable child tax credit (HB 5134)#7432

Merged
DTrim99 merged 6 commits intoPolicyEngine:mainfrom
DTrim99:ct-refundable-ctc
Feb 23, 2026
Merged

Add Connecticut refundable child tax credit (HB 5134)#7432
DTrim99 merged 6 commits intoPolicyEngine:mainfrom
DTrim99:ct-refundable-ctc

Conversation

@DTrim99
Copy link
Collaborator

@DTrim99 DTrim99 commented Feb 18, 2026

Summary

Implements Connecticut HB 5134 (2026 session) as a reform - a refundable child tax credit against the personal income tax.

Bill Reference: https://www.cga.ct.gov/2026/TOB/H/PDF/2026HB-05134-R00-HB.PDF

Credit Details

Parameter Value
Amount per child $600
Maximum children 3
Child age limit Under 18
Income threshold (single/HOH/separate) < $100,000
Income threshold (joint/surviving spouse) < $200,000
Refundable Yes

Files Added

Parameters (parameters/gov/contrib/states/ct/refundable_ctc/):

  • in_effect.yaml - Toggle to enable the reform (default: false)
  • amount.yaml - $600 per child
  • max_children.yaml - Maximum 3 children
  • age_limit.yaml - Children must be under 18
  • income_threshold.yaml - AGI thresholds by filing status

Reform (reforms/states/ct/refundable_ctc/):

  • ct_refundable_ctc.py - Reform logic
  • __init__.py - Module exports

Tests (tests/policy/reforms/states/ct/refundable_ctc/):

  • ct_refundable_ctc.yaml - 10 comprehensive tests

Test Coverage

  • Single filer with children under income limit ✓
  • Joint filers under income limit ✓
  • Child count capped at 3 ✓
  • Income at/over threshold disqualifies ✓
  • No children = no credit ✓
  • Reform toggle (in_effect) works ✓
  • Age limit enforcement (18+) ✓

🤖 Generated with Claude Code

@DTrim99
Copy link
Collaborator Author

DTrim99 commented Feb 18, 2026

Implementation Notes

This reform implements CT HB 5134 as a contributed policy (not enacted law). Key design decisions:

  1. Parameters in contrib/: Since this is a proposed bill, all parameters are in gov/contrib/states/ct/ with an in_effect toggle defaulting to false

  2. Income eligibility: The bill specifies AGI must be "less than" the thresholds for all filing statuses (strict < comparison)

  3. Child definition: Uses is_tax_unit_dependent with an age limit parameter (set to 18) - not tied to federal CTC qualifying child definition

  4. Filing status thresholds:

    • JOINT and SURVIVING_SPOUSE: $200,000
    • SINGLE, HEAD_OF_HOUSEHOLD, SEPARATE: $100,000

The reform can be enabled by setting gov.contrib.states.ct.refundable_ctc.in_effect to true in the PolicyEngine interface.

@DTrim99
Copy link
Collaborator Author

DTrim99 commented Feb 20, 2026

Fixes Applied ✅

🟡 Should-Address Issues Fixed

  1. ✅ Parameter descriptions updated - All 5 parameter files now use active voice, one-sentence format:

    • amount.yaml: "Connecticut proposed to provide the following refundable child tax credit amount per qualifying child."
    • age_limit.yaml: "Connecticut proposed to set the following age limit for qualifying children under the refundable child tax credit."
    • income_threshold.yaml: "Connecticut proposed to set the following federal adjusted gross income thresholds..."
    • in_effect.yaml: "Connecticut proposed to make the refundable child tax credit effective when this parameter is true."
    • max_children.yaml: "Connecticut proposed to limit the refundable child tax credit to the following maximum number of children."
  2. ✅ Removed in_effect check from formula - The in_effect parameter is now handled at the reform registration level (create_ct_refundable_ctc_reform), not in the formula itself. This is the correct pattern for contributed reforms.

  3. ✅ Extended end date from 2030 to 2035 - Per user instruction, the parameter modification end date has been extended.

  4. ✅ Removed obsolete test - Removed the "Credit is zero when not in effect" test since this behavior is now controlled at the reform registration layer, not the formula.

Note on age_limit parameter

The age limit of 18 is implied by other organization research and House Dem press releases but not stated explicitly in the bill. This is documented but kept in the implementation.

Verification

  • ✅ All 9 tests pass locally
  • ✅ Code formatted

Ready for re-review.


🤖 Generated with Claude Code

@PavelMakarchuk
Copy link
Collaborator

@DTrim99 can you resolve the open comments?

Copy link
Collaborator

@PavelMakarchuk PavelMakarchuk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test and closing comments

@DTrim99
Copy link
Collaborator Author

DTrim99 commented Feb 23, 2026

Fixes Applied

🔴 Critical Issues Fixed

  • Resolved uv.lock merge conflict: Merged upstream/main and resolved conflicts
  • Fixed PR variable conflict: Removed duplicate pr_gross_income.py that was causing VariableNameConflictError after merge

🟡 Review Comment Addressed

  • Added computation tree outputs: Added ct_income_tax and household_net_income as outputs to all 9 test cases in ct_refundable_ctc.yaml to verify the computation flows through correctly

Verification

  • ✅ All 9 CT refundable CTC tests pass locally
  • ✅ Code formatted

🤖 Generated with Claude Code

DTrim99 and others added 5 commits February 23, 2026 11:57
Implements CT HB 5134 (2026 session) as a reform:
- $600 per qualifying child (under age 18)
- Maximum 3 children
- Income threshold: <$100k (single/HOH/separate) or <$200k (joint)
- Refundable credit against CT personal income tax

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update parameter descriptions to use active voice one-sentence format
- Remove in_effect check from formula (handled at reform registration level)
- Extend parameter modification end date from 2030 to 2035
- Remove test for in_effect=false (tested at reform layer, not formula)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…riable conflict

- Added ct_income_tax and household_net_income outputs to all 9 test cases
  to verify the computation flows through the tree
- Removed duplicate pr_gross_income.py that was causing variable conflict

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@DTrim99
Copy link
Collaborator Author

DTrim99 commented Feb 23, 2026

Fixes Applied

🔴 Critical Issues Fixed

  • Rebased onto upstream/main: Incorporated fix from PR Fix CI Fail #7459 to resolve CI failures
  • Resolved uv.lock conflict: Accepted upstream version during rebase

Verification

  • ✅ All 9 CT refundable CTC tests pass locally
  • ✅ Code rebased and pushed

CI should now pass with the upstream fix included.

🤖 Generated with Claude Code

- Use strict < for single filers, <= for joint/surviving_spouse per HB 5134
- Update parameter descriptions, labels, and reference titles
- Rewrite tests: 12 cases with naming conventions and edge cases

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@DTrim99 DTrim99 merged commit cc6c53a into PolicyEngine:main Feb 23, 2026
7 checks passed
DTrim99 added a commit to DTrim99/policyengine-us that referenced this pull request Feb 23, 2026
Implements Gov. Lamont's proposed 2026 tax rebate as a contributed policy:
- Single filers: $200 if AGI <= $200,000
- Joint filers: $400 if AGI <= $400,000
- Head of household: $320 if AGI <= $320,000
- Married filing separately: $200 if AGI <= $200,000
- Surviving spouse: $400 if AGI <= $400,000

Matches the style and implementation patterns from PR PolicyEngine#7432.

Closes PolicyEngine#7466

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
DTrim99 added a commit to DTrim99/policyengine-us that referenced this pull request Feb 23, 2026
Implements Gov. Lamont's proposed 2026 tax rebate as a contributed policy:
- Single filers: $200 if AGI <= $200,000
- Joint filers: $400 if AGI <= $400,000
- Head of household: $320 if AGI <= $320,000
- Married filing separately: $200 if AGI <= $200,000
- Surviving spouse: $400 if AGI <= $400,000

Matches the style and implementation patterns from PR PolicyEngine#7432.

Closes PolicyEngine#7466

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants