Florida TCA: fl_tca_200_and_half_disregard_eligible ignores current receipt, so enrolled units lose the $200 and 1/2 disregard
Maintainers usually reply within 2 days
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 66/100
Research direction
Read the Florida TCA variables fl_tca_200_and_half_disregard_eligible and fl_tca_countable_earned_income, plus fl_tca_countable_earned_income.yaml and the cited Florida policy manual. Start by running the countable-income tests and comparing their cases with the manual. Done means current participants qualify for the disregard and the tests reflect the $90 standard disregard being included in the first $200.
Written by the indexing model from the issue text.
Description
Summary
Fla. Stat. 414.095(11)(a): "the first $200 plus one-half of the remainder of earned income shall be disregarded. In order to be eligible for earned income to be disregarded, the individual must be: 1. A current participant in the program; or 2. Eligible for participation in the program without the earnings disregard." DCF ESS Program Policy Manual 2420.0315 puts the same two conditions as: the member must "1. have been eligible for and received TCA in one of the past four months; or 2. have gross countable income (including earned and unearned income), less the $90 standard earned income disregard, which is less than the applicable payment standard."
fl_tca_200_and_half_disregard_eligible (added in #8941 for item 4 of #8728) encodes condition 2 only, for every unit. Its documentation says condition 1 is left out because prior-month receipt is not observable. PE-US has is_tanf_enrolled (defaults to receives_tanf) for this, and other state programs read it for applicant-versus-recipient rules (mi_fip_income_eligible, ct_tfa_income_eligible, nh_fanf_countable_earned_income, tx_tanf_earned_income_after_disregard_person); #9205 lists applicant-versus-recipient tests as a correct use of that input. So an enrolled unit whose income less $90 is at or above the payment standard has its earnings less $90 counted, which leaves no deficit: fl_tca is $0 (and above equality fl_tca_net_income_eligible is false), although Florida applies the $200 and 1/2 disregard to a current participant.
Repro
Same result on 1.811.2 (45d51ef5d4) and on main (26348e7cf7).
from policyengine_us import Simulation
s = Simulation(situation={
"people": {"a": {"age": {"2025": 30}, "employment_income": {"2025": 6_000}, "pre_subsidy_rent": {"2025": 9_600}},
"b": {"age": {"2025": 8}}, "c": {"age": {"2025": 5}}},
"tax_units": {"t": {"members": ["a", "b", "c"]}},
"spm_units": {"s": {"members": ["a", "b", "c"], "is_tanf_enrolled": {"2025": True}}},
"families": {"f": {"members": ["a", "b", "c"]}},
"households": {"h": {"members": ["a", "b", "c"], "state_name": {"2025": "FL"}}},
})
s.calculate("fl_tca_payment_standard", "2025-01") # 303 (3 people, shelter over $50)
s.calculate("fl_tca_200_and_half_disregard_eligible", "2025-01") # False: 500 - 90 = 410 >= 303
s.calculate("fl_tca_countable_earned_income", "2025-01") # 410
s.calculate("fl_tca", "2025-01") # 0
Expected for an enrolled unit: eligible for the disregard; countable earnings (500 - 200) x 1/2 = $150; fl_tca = 303 - 150 = $153.
With only the eligibility fix, PE would give $198 (countable (500 - 90 - 200) x 1/2 = $105), because of the second defect below.
Second defect in the same formula: the $90 is part of the $200
2420.0315: "The $90 standard earned income disregard is included in the first $200 earned income disregard. ... If the amount is less than the payment standard, then subtract $110 for a total of $200." 2620.0111.01 Step 3: "Subtract the remainder of $200 and 1/2 earned income disregard, if eligible." The statute also says "the first $200".
fl_tca_countable_earned_income subtracts the whole first_amount ($200) after the $90 (max_(after_standard - p.first_amount, 0)), so it disregards $290 before the half. For an eligible unit, countable earnings are too low by half of the extra $90: $45 a month when earnings are $290 or more, less between $200 and $290. The tests in fl_tca_countable_earned_income.yaml encode the $290 (Case 2: $290 of earnings gives $0; the manual gives (290 - 200) / 2 = $45). This can be split into its own issue.
Possible fix
fl_tca_200_and_half_disregard_eligible:return spm_unit("is_tanf_enrolled", period) | (income_after_standard < payment_standard), withis_tanf_enrolledstanding for receipt in one of the past four months; update the documentation.fl_tca_countable_earned_income: subtractfirst_amount - standard_disregard($110) from the earnings left after the $90, then half; update the tests.
Impact on the PRD comparison
2025 aligned view, shared set: 17 Florida units (16 where PE and PRD differ), $30,840 lower PE TANF (2026: $28,103). Fix 2 does not close a PE-PRD gap: PRD's Florida branch also deducts $290 before the half.
- Dominant language
- Python
- Stars
- 166
- Forks
- 214
- Avg merge
- 2d 22h
- Merged PRs (30d)
- 343
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 68/100
PolicyEngine/policyengine-us#10179 ·
Maintainers usually reply within 2 days
-
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
All issues in PolicyEngine/policyengine-us
Similar issues
-
documentation pkg: sphinx-needs
Difficulty 1/5 Under an hour Newbie friendliness 82/100
useblocks/sphinx-needs#2255 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 60/100
home-assistant/core#186538 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
btclib-org/btclib-secp256k1#1181 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
pyrite-wiki/pyrite#917 ·
Maintainers usually reply within 1 day