Bug Description
The individual_eitc (Winship EITC) reform does not respond to parameter changes in the app. When setting enabled to true and agi_eitc_limit to 100000, there is no impact.
Root Cause
-
Reform activation check at creation time: The enabled parameter is checked in create_eitc_winship_reform() at reform creation time (line 5 of winship.py), not at simulation time. Since structural reforms are created with base parameters before user modifications are applied, the reform is never included when enabled defaults to false.
-
Missing takes_up_eitc multiplier: The reform's eitc formula omits the takes_up_eitc factor that exists in the baseline.
-
Default agi_eitc_limit of 0: When the limit is 0, the condition agi < 0 is false for virtually everyone.
Expected Behavior
When user sets enabled: true and agi_eitc_limit: 100000 in the app, households with AGI < $100,000 should receive the individual-income-based EITC calculation.
Solution
Restructure the reform to follow modern patterns (like NJ budget reforms):
- Check
enabled inside the formula using where()
- Include
takes_up_eitc multiplier
- Handle
agi_eitc_limit = 0 as "no limit" rather than "no EITC"
Files to Modify
policyengine_us/reforms/winship.py
policyengine_us/parameters/gov/contrib/individual_eitc/agi_eitc_limit.yaml (update description)
Bug Description
The
individual_eitc(Winship EITC) reform does not respond to parameter changes in the app. When settingenabledtotrueandagi_eitc_limitto100000, there is no impact.Root Cause
Reform activation check at creation time: The
enabledparameter is checked increate_eitc_winship_reform()at reform creation time (line 5 ofwinship.py), not at simulation time. Since structural reforms are created with base parameters before user modifications are applied, the reform is never included whenenableddefaults tofalse.Missing
takes_up_eitcmultiplier: The reform'seitcformula omits thetakes_up_eitcfactor that exists in the baseline.Default
agi_eitc_limitof 0: When the limit is 0, the conditionagi < 0is false for virtually everyone.Expected Behavior
When user sets
enabled: trueandagi_eitc_limit: 100000in the app, households with AGI < $100,000 should receive the individual-income-based EITC calculation.Solution
Restructure the reform to follow modern patterns (like NJ budget reforms):
enabledinside the formula usingwhere()takes_up_eitcmultiplieragi_eitc_limit = 0as "no limit" rather than "no EITC"Files to Modify
policyengine_us/reforms/winship.pypolicyengine_us/parameters/gov/contrib/individual_eitc/agi_eitc_limit.yaml(update description)