diff --git a/changelog.d/wa-wftc-phaseout-income.fixed.md b/changelog.d/wa-wftc-phaseout-income.fixed.md new file mode 100644 index 00000000000..a283e71db2c --- /dev/null +++ b/changelog.d/wa-wftc-phaseout-income.fixed.md @@ -0,0 +1 @@ +Base the Washington Working Families Tax Credit phase-out on federal phase-out income (greater of earned income or AGI) rather than earned income alone. diff --git a/policyengine_us/tests/policy/baseline/gov/states/wa/tax/income/credits/wa_working_families_tax_credit.yaml b/policyengine_us/tests/policy/baseline/gov/states/wa/tax/income/credits/wa_working_families_tax_credit.yaml index c993d998292..671757b1dde 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/wa/tax/income/credits/wa_working_families_tax_credit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/wa/tax/income/credits/wa_working_families_tax_credit.yaml @@ -150,6 +150,60 @@ output: wa_working_families_tax_credit: 640 +- name: Case 6b, phase-out keys off federal phase-out income (max of earned income and AGI), not earnings alone. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + head: + age: 40 + employment_income: 40_000 + unemployment_compensation: 16_000 + has_tin: true + ssn_card_type: CITIZEN + is_tax_unit_head: true + spouse: + age: 40 + has_tin: true + ssn_card_type: CITIZEN + is_tax_unit_spouse: true + child1: + age: 8 + has_tin: true + ssn_card_type: CITIZEN + is_tax_unit_dependent: true + child2: + age: 10 + has_tin: true + ssn_card_type: CITIZEN + is_tax_unit_dependent: true + child3: + age: 12 + has_tin: true + ssn_card_type: CITIZEN + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [head, spouse, child1, child2, child3] + filing_status: JOINT + would_file_taxes_voluntarily: true + takes_up_eitc: true + spm_units: + spm_unit: + members: [head, spouse, child1, child2, child3] + households: + household: + members: [head, spouse, child1, child2, child3] + state_code: WA + output: + # Earned income ($40,000) is below the 3-child phase-out start (~$54,190), + # but AGI ($56,000, incl. $16,000 unemployment) lands inside the phase-out + # band. RCW 82.08.0206(3)(b) measures the reduction against the federal + # phase-out income = max(earned income, AGI) = $56,000, so the $1,330 + # maximum tapers at 25.6% over the ~$1,810 of excess to ~$866.57 rather + # than paying the full $1,330. See policyengine-taxsim#986. + wa_working_families_tax_credit: 866.57 + # ESSB 6346 Sec. 901 - WFTC Age Expansion tests (effective 2029) - name: Case 7, age 18+ without EITC gets WFTC under 2029 age expansion. diff --git a/policyengine_us/variables/gov/states/wa/tax/income/credits/wa_working_families_tax_credit.py b/policyengine_us/variables/gov/states/wa/tax/income/credits/wa_working_families_tax_credit.py index 0f5e073ff42..1b7928e24b4 100644 --- a/policyengine_us/variables/gov/states/wa/tax/income/credits/wa_working_families_tax_credit.py +++ b/policyengine_us/variables/gov/states/wa/tax/income/credits/wa_working_families_tax_credit.py @@ -124,7 +124,11 @@ def formula(tax_unit, period, parameters): # amount is reached at the applicable maximum qualifying income. # https://app.leg.wa.gov/billsummary?BillNumber=1888&Year=2021&Initiative=false phase_out_rate = (max_amount - p.min_amount) / phase_out_start_reduction - excess = max_(0, earnings - phase_out_start) + # RCW 82.08.0206(3)(b) measures the reduction against the federal + # phase-out income (the greater of earned income or AGI) -- the same + # measure used for the maximum-qualifying-income ceiling above -- not + # earned income alone. + excess = max_(0, higher_income - phase_out_start) reduction = max_(0, excess * phase_out_rate) phased_out_amount = max_amount - reduction # minimum benefit applies if calculated amount exceeds zero