diff --git a/changelog.d/issue-8301-state-ui-income-flow.added.md b/changelog.d/issue-8301-state-ui-income-flow.added.md new file mode 100644 index 00000000000..4df888cf91a --- /dev/null +++ b/changelog.d/issue-8301-state-ui-income-flow.added.md @@ -0,0 +1 @@ +Integrated modeled Alabama, New York, Oklahoma, Pennsylvania, and Utah unemployment insurance into unemployment compensation income flows. diff --git a/policyengine_us/tests/policy/baseline/gov/states/al/dol/unemployment_insurance/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/al/dol/unemployment_insurance/integration.yaml index 8d2581e2aae..54d92e1fa63 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/al/dol/unemployment_insurance/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/al/dol/unemployment_insurance/integration.yaml @@ -367,3 +367,27 @@ # so the clamp binds. Annual = 275 * 14 = 3,850 (equals MBA, so the # MBA cap is not additionally binding here). al_ui: 3_850 + +- name: Case 13, AL UI feeds unemployment compensation income flows. + # Reuses Case 1's monetarily-eligible input set (al_ui = $3,850) and asserts + # the state benefit also surfaces through the federal unemployment + # compensation income chain (unemployment_compensation adds al_ui). + period: 2024 + absolute_error_margin: 0.01 + input: + age: 35 + state_code: AL + employment_income: 100_000 + is_tax_unit_dependent: false + al_ui_high_quarter_wages: 10_000 + al_ui_second_high_quarter_wages: 10_000 + al_ui_base_period_wages: 40_000 + al_ui_quarters_with_wages: 4 + al_ui_weekly_earnings: 0 + weeks_unemployed: 20 + output: + al_ui: 3_850 + unemployment_compensation: 3_850 + tax_unit_unemployment_compensation: 3_850 + taxable_unemployment_compensation: 3_850 + tax_unit_taxable_unemployment_compensation: 3_850 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ny/dol/unemployment_insurance/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ny/dol/unemployment_insurance/integration.yaml index 028c782f6d0..2407a921a0b 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ny/dol/unemployment_insurance/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ny/dol/unemployment_insurance/integration.yaml @@ -246,3 +246,27 @@ ny_ui_weekly_payable: 71.5 # Annual = $71.50 * 10 = $715; MBA = $143 * 26 = $3,718 (not binding). ny_ui: 715 + +- name: Case 9, NY UI feeds unemployment compensation income flows. + # Reuses Case 1's monetarily-eligible input set (ny_ui = $7,982) and asserts + # the state benefit also surfaces through the federal unemployment + # compensation income chain (unemployment_compensation adds ny_ui). + period: 2025 + absolute_error_margin: 0.01 + input: + age: 35 + state_code: NY + employment_income: 100_000 + is_tax_unit_dependent: false + ny_ui_high_quarter_wages: 8_000 + ny_ui_base_period_wages: 28_000 + ny_ui_quarters_with_wages: 4 + weeks_unemployed: 26 + ny_ui_weekly_hours_worked: 0 + ny_ui_gross_weekly_earnings: 0 + output: + ny_ui: 7_982 + unemployment_compensation: 7_982 + tax_unit_unemployment_compensation: 7_982 + taxable_unemployment_compensation: 7_982 + tax_unit_taxable_unemployment_compensation: 7_982 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ok/oesc/unemployment_insurance/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ok/oesc/unemployment_insurance/integration.yaml index c776e6375d4..8161ab872ae 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ok/oesc/unemployment_insurance/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ok/oesc/unemployment_insurance/integration.yaml @@ -213,3 +213,27 @@ # Note: intermediate variables (eligibility, WBA, etc.) may still # compute, but the top-level ok_ui is gated to OK households only. ok_ui: 0 + +- name: Case 8, OK UI feeds unemployment compensation income flows. + # Reuses Case 1's monetarily-eligible input set (ok_ui = $8,000) and asserts + # the state benefit also surfaces through the federal unemployment + # compensation income chain (unemployment_compensation adds ok_ui). + period: 2024 + absolute_error_margin: 0.01 + input: + age: 35 + state_code: OK + employment_income: 100_000 + is_tax_unit_dependent: false + ok_ui_high_quarter_taxable_wages: 11_500 + ok_ui_high_quarter_total_wages: 11_500 + ok_ui_base_period_taxable_wages: 11_500 + ok_ui_base_period_total_wages: 35_000 + ok_ui_gross_weekly_earnings: 0 + weeks_unemployed: 16 + output: + ok_ui: 8_000 + unemployment_compensation: 8_000 + tax_unit_unemployment_compensation: 8_000 + taxable_unemployment_compensation: 8_000 + tax_unit_taxable_unemployment_compensation: 8_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/pa/dli/unemployment_compensation/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/pa/dli/unemployment_compensation/integration.yaml index bf6f9384e27..ff8b2073b05 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/pa/dli/unemployment_compensation/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/pa/dli/unemployment_compensation/integration.yaml @@ -263,3 +263,25 @@ person1: # Household is outside PA -> defined_for filters the benefit. pa_uc: 0 + +- name: Case 8, PA UC feeds unemployment compensation income flows. + period: 2025 + absolute_error_margin: 0.01 + input: + age: 35 + state_code: PA + employment_income: 100_000 + is_tax_unit_dependent: false + pa_uc_highest_quarter_wages: 10_000 + pa_uc_base_year_wages: 28_000 + pa_uc_credit_weeks: 26 + weeks_unemployed: 26 + pa_uc_gross_weekly_earnings: 0 + output: + pa_uc: 10_218 + unemployment_compensation: 10_218 + tax_unit_unemployment_compensation: 10_218 + taxable_unemployment_compensation: 10_218 + tax_unit_taxable_unemployment_compensation: 10_218 + spm_unit_benefits: 10_218 + household_benefits: 10_218 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ut/dws/unemployment_insurance/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ut/dws/unemployment_insurance/integration.yaml index 36f811ebc1c..04592a1fa42 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ut/dws/unemployment_insurance/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ut/dws/unemployment_insurance/integration.yaml @@ -266,3 +266,27 @@ # weeks_unemployed (17) == duration (17): annual = $395 * 17 = $6,715. # min($6,715, MBA $6,715) = $6,715 -> cap binds exactly at equality. ut_ui: 6_715 + +- name: Case 9, UT UI feeds unemployment compensation income flows. + # Reuses Case 2's monetarily-eligible input set (ut_ui = $19,396) and asserts + # the state benefit also surfaces through the federal unemployment + # compensation income chain (unemployment_compensation adds ut_ui). + period: 2024 + absolute_error_margin: 0.01 + input: + age: 35 + state_code: UT + employment_income: 100_000 + is_tax_unit_dependent: false + ut_ui_base_period_wages: 80_000 + ut_ui_high_quarter_wages: 25_000 + ut_ui_quarters_with_wages: 4 + ut_ui_weeks_unemployed: 26 + ut_ui_gross_weekly_earnings: 0 + ut_ui_weekly_hours_worked: 0 + output: + ut_ui: 19_396 + unemployment_compensation: 19_396 + tax_unit_unemployment_compensation: 19_396 + taxable_unemployment_compensation: 19_396 + tax_unit_taxable_unemployment_compensation: 19_396 diff --git a/policyengine_us/variables/gov/states/unemployment_compensation.py b/policyengine_us/variables/gov/states/unemployment_compensation.py index 0857864ab17..229ee61fcb1 100644 --- a/policyengine_us/variables/gov/states/unemployment_compensation.py +++ b/policyengine_us/variables/gov/states/unemployment_compensation.py @@ -9,3 +9,4 @@ class unemployment_compensation(Variable): documentation = "Income from unemployment compensation programs." definition_period = YEAR uprating = "calibration.gov.irs.soi.unemployment_compensation" + adds = ["al_ui", "ny_ui", "ok_ui", "pa_uc", "ut_ui"]