California YCTC skips Form 3514 truncation, $1 minimum and whole-dollar rounding
Maintainers usually reply within 2 days
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 68/100
Research direction
Start by locating the ca_yctc calculation and its tests; the issue gives the relevant Form 3514 lines and three wage cases to reproduce. Check how the calculation handles truncation, the $1 minimum, and whole-dollar rounding, and whether the same rule applies to the Foster Youth Tax Credit. Done when tests match line 28 for the listed cases and cover the Foster Youth calculation if applicable.
Written by the indexing model from the issue text.
Description
Problem
ca_yctc returns the continuous phase-out amount, but FTB Form 3514 (2025) Part VII computes the Young Child Tax Credit with truncation and a whole-dollar result (https://www.ftb.ca.gov/forms/2025/2025-3514-booklet.pdf):
- line 26: excess earned income / 100, "two decimal places, do not round"
- line 27: line 26 × $21.71, "two decimal places, do not round"
- line 28: $1,189 minus line 27; "If your credit amount is between $0 and $1, enter $1. If your credit amount is over $1, round to the nearest whole dollar."
PolicyEngine-US 2.40.1, single wage earner, one qualifying child age 3, full-year resident, 2025:
| Wages | Form 3514 line 28 | ca_yctc |
|---|---|---|
| $27,426 | $1,189 | $1,188.78 |
| $27,500 | $1,173 | $1,172.72 |
| $32,900 | $1 | $0.38 |
On a 239-case panel from $0 to $32,902 wages, 48 cases differ from line 28, by up to $0.62. The phase-out start, rate and end match the form; only the rounding and the $1 minimum differ. The $1 minimum is a rule, not just presentation: a filer just under the $32,901 cutoff gets $1 on the form and $0.38 here.
Should ca_yctc follow line 28 (truncate lines 26–27, $1 minimum, round to whole dollars)? If so, the same applies to the Foster Youth Tax Credit (lines 37–39).
Reproduce
from policyengine_us import Simulation
Y = 2025
for wages in [27_426, 27_500, 32_900]:
sim = Simulation(situation={
"people": {"a": {"age": {Y: 30}, "employment_income": {Y: wages}},
"c": {"age": {Y: 3}, "is_tax_unit_dependent": {Y: True}}},
"tax_units": {"t": {"members": ["a", "c"]}},
"households": {"h": {"members": ["a", "c"], "state_code": {Y: "CA"}}},
})
print(wages, sim.calculate("ca_yctc", Y)[0]) # 1188.78, 1172.72, 0.38
- Dominant language
- Python
- Stars
- 168
- Forks
- 216
- Avg merge
- 3d 1h
- Merged PRs (30d)
- 339
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from PolicyEngine/policyengine-us
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
PolicyEngine/policyengine-us#10073 ·
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
PolicyEngine/policyengine-us#10072 ·
Maintainers usually reply within 2 days
-
bug state-income-tax states/vt
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
PolicyEngine/policyengine-us#9996 ·
Maintainers usually reply within 2 days
-
bug hhs/tanf states/nh
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
PolicyEngine/policyengine-us#9984 ·
Maintainers usually reply within 2 days
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
PolicyEngine/policyengine-us#9952 ·
Maintainers usually reply within 2 days
All issues in PolicyEngine/policyengine-us
Similar issues
-
Questions crashes on a real SQuAD2 no-answer predictionPossibly taken @HuaTNA claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
GST is read as Gulf Standard Time (UTC+4) instead of Guam Standard Time (UTC+10)Possibly taken @yang00333 claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
DOI-USGS/dataretrieval-python#454 ·
Maintainers usually reply within 4 days
-
area:core-platform effort:S priority:P3 status:in-review type:test
Difficulty 2/5 Under an hour Newbie friendliness 80/100
randomparity/kdive#3246 · 1 comment ·
Maintainers usually reply within 1 day
-
Requantification library converts m/z to mass with the hydrogen-atom mass instead of the proton massOpenbug
Difficulty 1/5 Under an hour Newbie friendliness 85/100
nf-core/metaboigniter#130 ·
Maintainers usually reply within 1 day
-
netbox status: needs owner type: documentation
Difficulty 1/5 Under an hour Newbie friendliness 75/100
netbox-community/netbox#23412 · 1 reaction ·
Maintainers usually reply within 1 day