Implement Utah Unemployment Insurance (ut_ui)#8281
Draft
daphnehanse11 wants to merge 8 commits into
Draft
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8281 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 7 13 +6
Lines 215 157 -58
Branches 6 0 -6
=========================================
- Hits 215 157 -58
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
- Split min_base_period_wages into 2024/2025 ($5,300) and 2026 ($5,500) entries - Fix Claimant Guide page references (printed p.11 = file p.13) - Update test boundary cases to match new $5,300 threshold
- Replace misleading 2025 form URL with Wayback Machine archive snapshot - Clarify Claimant Guide page references (printed p.11 = file p.13) - Add 2024/2026 boundary tests for min_base_period_wages (Cases 28-32) - Use canonical verb in base_period_to_high_quarter_ratio description - Pair statute and admin rule citations on min_quarters_with_wages
Derived from 2024 max WBA ($712) per UC § 35A-4-201(16) + § 35A-4-401(2)(b)(ii): both values depend on the same insured average fiscal year wage. Working backward, 8% × annual_IAFY ≈ $4,772, rounded up to next $100 = $4,800. - Update 2024-01-01 entry from $5,300 to $4,800 - Adjust edge case boundaries (Cases 28-29) to test new $4,800 floor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements Utah Unemployment Insurance (UI) in PolicyEngine, administered by the Utah Department of Workforce Services (DWS) under Utah Code Title 35A Chapter 4 and Utah Admin Code R994 series.
Closes #8280
Regulatory Authority
Weekly Benefit Amount (WBA) Formula
floor(high_quarter_wages / 26) − 5, capped at the annual maximumMonetary Eligibility Tests
Duration of Benefits
clamp(floor(0.27 × base_period_wages / WBA), 10, 26)Partial Benefits
floor(max(0, WBA − max(0, earnings − 0.30 × WBA)))Requirements Coverage
ut_ui_base_period_wages.py(docstring)ut_ui_base_period_wages.py(docstring)eligibility/min_base_period_wages.yaml($5,500)ut_ui_monetarily_eligible.pyut_ui_monetarily_eligible.yamlCase 2; edge Cases 1-3eligibility/min_quarters_with_wages.yaml(2)ut_ui_monetarily_eligible.pyut_ui_monetarily_eligible.yamlCase 3; edge Cases 6-7eligibility/base_period_to_high_quarter_ratio.yaml(1.5)ut_ui_monetarily_eligible.pyut_ui_monetarily_eligible.yamlCase 4; edge Cases 4-5ut_ui_monetarily_eligible.pyut_ui_monetarily_eligible.yamlCase 1wba/divisor.yaml(26);wba/subtraction.yaml($5)ut_ui_weekly_benefit_amount.pyut_ui_weekly_benefit_amount.yamlCase 1wba/max_amount.yaml(712/777/806)ut_ui_weekly_benefit_amount.pyut_ui_weekly_benefit_amount.yamlCases 2-3; edge Cases 10-13min_amount.yaml)ut_ui_weekly_benefit_amount.py(max_(raw, 0))ut_ui_weekly_benefit_amount.py(× monetarily_eligible)ut_ui_weekly_benefit_amount.yamlCase 4duration/multiplier.yaml,min_weeks.yaml,max_weeks.yamlut_ui_duration_weeks.pyut_ui_duration_weeks.yamlCases 1-3duration/min_weeks.yaml(10)ut_ui_duration_weeks.pyut_ui_duration_weeks.yamlCase 2; integration Case 4duration/max_weeks.yaml(26)ut_ui_duration_weeks.pyut_ui_duration_weeks.yamlCase 1; edge Cases 16-17duration/multiplier.yaml(0.27)ut_ui_duration_weeks.pyut_ui_duration_weeks.yamlCases 1-3ut_ui_maximum_benefit_amount.pyut_ui_maximum_benefit_amount.yamlCases 1-2; integration Cases 2-5partial/earnings_disregard_rate.yaml(0.30)ut_ui_weekly_payable_amount.pyut_ui_weekly_payable_amount.yamlCases 2-3; edge Cases 19-20ut_ui_weekly_payable_amount.pyut_ui_weekly_payable_amount.yamlCase 3; edge Case 20ut_ui_weekly_payable_amount.py(earnings ≥ WBA → 0)ut_ui_weekly_payable_amount.yamlCase 4; edge Case 18partial/hours_threshold.yaml(40)ut_ui_weekly_payable_amount.pyut_ui_weekly_payable_amount.yamlCase 5; edge Cases 21-23ut_ui_gross_weekly_earnings.py(docstring)ut_ui.py(defined_for=StateCode.UT)ut_ui.py+ut_ui_duration_weeks.py(26-week cap absorbs waiting week)ut_ui_base_period_wages.py(Person/YEAR/USD)ut_ui_high_quarter_wages.py(Person/YEAR/USD)ut_ui_quarters_with_wages.py(Person/YEAR/int)ut_ui_gross_weekly_earnings.py(Person/YEAR/USD)ut_ui_weekly_hours_worked.py(Person/YEAR/hour)ut_ui_weeks_unemployed.py(Person/YEAR/week)29 in-scope requirements (22 modeled + 7 input definitions) — all covered.
Not Modeled (14 items)
Files Added
policyengine_us/parameters/gov/states/ut/dwf/unemployment_insurance/policyengine_us/variables/gov/states/ut/dwf/unemployment_insurance/policyengine_us/tests/policy/baseline/gov/states/ut/dwf/unemployment_insurance/programs.yamlupdated withut_uiState entry (status=complete, verified_years="2024-2026")Tests
floor(HQ/26) − 5clipped to[0, max_wba]reproduces the published schedule exactly (e.g., HQ $15,054 → WBA $574; HQ ≥ $21,086 → WBA $806 cap)