Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Vermont child tax credit: the $20-per-$1,000 reduction is applied once to the total credit, but 32 V.S.A. 5830f(b) reduces each child's credit

Open Beginner friendly
#9,996 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 2 days

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
78/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
python
Domain
backend, databases

Research direction

Read policyengine_us/variables/gov/states/vt/tax/income/credits/ctc/vt_ctc.py and the Vermont credit parameters to trace how the reduction is applied to eligible children. Add the two-child, above-$125,000 case to tests/policy/baseline/gov/states/vt/tax/income/credits/vt_ctc.yaml and run that test; done when the result matches the per-child phaseout described in the issue.

Written by the indexing model from the issue text.

Description

bug state-income-tax states/vt

Summary

Vermont's refundable child tax credit is $1,000 per qualifying child six or younger (five or younger before tax year 2025). Subsection (b) of 32 V.S.A. § 5830f says:

the amount of the credit per child under this section shall be reduced, but not below zero, by $20.00 for each $1,000.00, or fraction thereof, by which the individual's adjusted gross income exceeds $125,000.00

So each child's $1,000 falls by $20 per $1,000 of AGI above $125,000, and a family with two young children loses $40 per $1,000. Vermont's Joint Fiscal Office describes the credit the same way: it "phases out at a rate of 2% per $1,000 of income above $125,000, reaching zero at incomes of $175,000 and above" (JFO issue brief, January 2024).

vt_ctc (policyengine_us/variables/gov/states/vt/tax/income/credits/ctc/vt_ctc.py, unchanged on main at 19c240d0ff, 2026-10-07) subtracts one reduction from the total:

max_credit = p.amount * count_eligible
excess_agi = max_(agi - p.reduction.start, 0)
increments = np.ceil(excess_agi / p.reduction.increment)
total_reduction = p.reduction.amount * increments
return max_(max_credit - total_reduction, 0)

Families with two or more eligible children above $125,000 of AGI keep too much credit, and their credit ends at a higher income than the statute's $175,000.

Repro (policyengine-us 1.811.2)

from policyengine_us import Simulation
Y = 2025
def vt_ctc(wages, kids):
    P = lambda v: {str(Y): v}
    people = {"head": {"age": P(40), "employment_income": P(wages)}, "spouse": {"age": P(38)}}
    members = ["head", "spouse"]
    for i, a in enumerate(kids):
        people[f"c{i}"] = {"age": P(a)}
        members.append(f"c{i}")
    sit = {"people": people, "tax_units": {"tu": {"members": members}}, "families": {"f": {"members": members}},
           "spm_units": {"s": {"members": members}}, "marital_units": {"m": {"members": ["head", "spouse"]}},
           "households": {"h": {"members": members, "state_code": P("VT")}}}
    return Simulation(situation=sit).calculate("vt_ctc", Y)[0]

vt_ctc(130_000, (3, 2))     # 1900.0; statute: 2 x (1,000 - 5 x 20) = 1,800
vt_ctc(130_000, (5, 3, 1))  # 2900.0; statute: 3 x 900 = 2,700
vt_ctc(180_000, (3, 2))     # 900.0; statute: 2 x max(1,000 - 55 x 20, 0) = 0

Expected vs actual

Expected: count_eligible * max_(p.amount - total_reduction, 0). Actual: max_(count_eligible * p.amount - total_reduction, 0). The YAML tests in tests/policy/baseline/gov/states/vt/tax/income/credits/vt_ctc.yaml should add a two-child case above $125,000.

Impact on the PRD comparison

None of the prd-comparison dashboard's CPS tax units (2024-2026, aligned view) has two or more eligible Vermont children above $125,000 of AGI, so the bug moves no unit there; it matters for such families in household calculations. The comparison records the mechanism as cause state_credits.vt_ctc_reduction_once (a PolicyEngine bug), computed as PE's formula minus the statute on PE's AGI and roster.

🤖 Generated with Claude Code

Dominant language
Python
Stars
166
Forks
214
Avg merge
2d 9h
Merged PRs (30d)
243

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from PolicyEngine/policyengine-us

All issues in PolicyEngine/policyengine-us

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.