From 8ab1a771daef0a88e63022390655a180515f1a55 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 12 Mar 2026 09:46:02 -0400 Subject: [PATCH 1/4] Initial commit for WA state income tax reform Starting implementation of WA Senate Bill 6346-S: 9.9% income tax on household incomes over $1M. Co-Authored-By: Claude Opus 4.6 From 6d390e4b48816779f40db2d80d78f8b8d12c92cb Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 12 Mar 2026 10:20:10 -0400 Subject: [PATCH 2/4] Add WA SSB 6346 income tax reform Co-Authored-By: Claude Opus 4.6 --- changelog.d/wa-income-tax.added.md | 1 + .../charitable_deduction/cap/individual.yaml | 12 + .../charitable_deduction/cap/joint.yaml | 12 + .../contrib/states/wa/sb6346/in_effect.yaml | 12 + .../gov/contrib/states/wa/sb6346/rate.yaml | 12 + .../wa/sb6346/standard_deduction/amount.yaml | 12 + policyengine_us/reforms/reforms.py | 5 + policyengine_us/reforms/states/wa/__init__.py | 0 .../reforms/states/wa/sb6346/__init__.py | 1 + .../reforms/states/wa/sb6346/sb6346.py | 130 +++++++ .../contrib/states/wa/sb6346/sb6346.yaml | 231 ++++++++++++ sources/working_references.md | 342 ++++++++++++++++++ 12 files changed, 770 insertions(+) create mode 100644 changelog.d/wa-income-tax.added.md create mode 100644 policyengine_us/parameters/gov/contrib/states/wa/sb6346/charitable_deduction/cap/individual.yaml create mode 100644 policyengine_us/parameters/gov/contrib/states/wa/sb6346/charitable_deduction/cap/joint.yaml create mode 100644 policyengine_us/parameters/gov/contrib/states/wa/sb6346/in_effect.yaml create mode 100644 policyengine_us/parameters/gov/contrib/states/wa/sb6346/rate.yaml create mode 100644 policyengine_us/parameters/gov/contrib/states/wa/sb6346/standard_deduction/amount.yaml create mode 100644 policyengine_us/reforms/states/wa/__init__.py create mode 100644 policyengine_us/reforms/states/wa/sb6346/__init__.py create mode 100644 policyengine_us/reforms/states/wa/sb6346/sb6346.py create mode 100644 policyengine_us/tests/policy/contrib/states/wa/sb6346/sb6346.yaml create mode 100644 sources/working_references.md diff --git a/changelog.d/wa-income-tax.added.md b/changelog.d/wa-income-tax.added.md new file mode 100644 index 00000000000..4ca4e17f98f --- /dev/null +++ b/changelog.d/wa-income-tax.added.md @@ -0,0 +1 @@ +Added WA SSB 6346 reform: 9.9% income tax on high earners. diff --git a/policyengine_us/parameters/gov/contrib/states/wa/sb6346/charitable_deduction/cap/individual.yaml b/policyengine_us/parameters/gov/contrib/states/wa/sb6346/charitable_deduction/cap/individual.yaml new file mode 100644 index 00000000000..01bf9d533e3 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/wa/sb6346/charitable_deduction/cap/individual.yaml @@ -0,0 +1,12 @@ +description: Washington limits the charitable contribution deduction to this amount per individual under the SSB 6346 reform. + +values: + 2028-01-01: 100_000 + +metadata: + unit: currency-USD + period: year + label: WA SSB 6346 charitable deduction cap (individual) + reference: + - title: SSB 6346, Sec. 307 - Charitable Contributions + href: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=21 diff --git a/policyengine_us/parameters/gov/contrib/states/wa/sb6346/charitable_deduction/cap/joint.yaml b/policyengine_us/parameters/gov/contrib/states/wa/sb6346/charitable_deduction/cap/joint.yaml new file mode 100644 index 00000000000..bbc379b0e57 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/wa/sb6346/charitable_deduction/cap/joint.yaml @@ -0,0 +1,12 @@ +description: Washington limits the combined charitable contribution deduction for married couples to this amount under the SSB 6346 reform. + +values: + 2028-01-01: 100_000 + +metadata: + unit: currency-USD + period: year + label: WA SSB 6346 charitable deduction cap (joint) + reference: + - title: SSB 6346, Sec. 307 - Charitable Contributions + href: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=21 diff --git a/policyengine_us/parameters/gov/contrib/states/wa/sb6346/in_effect.yaml b/policyengine_us/parameters/gov/contrib/states/wa/sb6346/in_effect.yaml new file mode 100644 index 00000000000..117191d138d --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/wa/sb6346/in_effect.yaml @@ -0,0 +1,12 @@ +description: The Washington SSB 6346 income tax reform applies if this is true. + +values: + 0000-01-01: false + +metadata: + unit: bool + period: year + label: WA SSB 6346 income tax reform in effect + reference: + - title: SSB 6346, 69th Legislature, 2025-2026 + href: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=1 diff --git a/policyengine_us/parameters/gov/contrib/states/wa/sb6346/rate.yaml b/policyengine_us/parameters/gov/contrib/states/wa/sb6346/rate.yaml new file mode 100644 index 00000000000..7a5834261c0 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/wa/sb6346/rate.yaml @@ -0,0 +1,12 @@ +description: Washington sets the income tax rate to this share under the SSB 6346 reform. + +values: + 2028-01-01: 0.099 + +metadata: + unit: /1 + period: year + label: WA SSB 6346 income tax rate + reference: + - title: SSB 6346, Sec. 201(1) - Tax Imposed + href: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=16 diff --git a/policyengine_us/parameters/gov/contrib/states/wa/sb6346/standard_deduction/amount.yaml b/policyengine_us/parameters/gov/contrib/states/wa/sb6346/standard_deduction/amount.yaml new file mode 100644 index 00000000000..b97e4cacc3d --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/wa/sb6346/standard_deduction/amount.yaml @@ -0,0 +1,12 @@ +description: Washington provides this amount as the standard deduction under the SSB 6346 reform. + +values: + 2028-01-01: 1_000_000 + +metadata: + unit: currency-USD + period: year + label: WA SSB 6346 standard deduction + reference: + - title: SSB 6346, Sec. 310 - Standard Deduction + href: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=22 diff --git a/policyengine_us/reforms/reforms.py b/policyengine_us/reforms/reforms.py index 3070e9395e9..da417655a04 100644 --- a/policyengine_us/reforms/reforms.py +++ b/policyengine_us/reforms/reforms.py @@ -177,6 +177,9 @@ from .congress.watca import ( create_watca_reform, ) +from .states.wa.sb6346.sb6346 import ( + create_wa_sb6346_reform, +) from .states.ga.sb520 import ( @@ -346,6 +349,7 @@ def create_structural_reforms_from_parameters(parameters, period): ct_hb5009 = create_ct_hb5009_reform(parameters, period) ga_sb520 = create_ga_sb520_reform(parameters, period) watca = create_watca_reform(parameters, period) + wa_sb6346 = create_wa_sb6346_reform(parameters, period) reforms = [ afa_reform, @@ -428,6 +432,7 @@ def create_structural_reforms_from_parameters(parameters, period): ct_tax_rebate_2026, ga_sb520, watca, + wa_sb6346, ] reforms = tuple(filter(lambda x: x is not None, reforms)) diff --git a/policyengine_us/reforms/states/wa/__init__.py b/policyengine_us/reforms/states/wa/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/policyengine_us/reforms/states/wa/sb6346/__init__.py b/policyengine_us/reforms/states/wa/sb6346/__init__.py new file mode 100644 index 00000000000..9fca7b7fed4 --- /dev/null +++ b/policyengine_us/reforms/states/wa/sb6346/__init__.py @@ -0,0 +1 @@ +from .sb6346 import create_wa_sb6346_reform, wa_sb6346 diff --git a/policyengine_us/reforms/states/wa/sb6346/sb6346.py b/policyengine_us/reforms/states/wa/sb6346/sb6346.py new file mode 100644 index 00000000000..3b1c8c8e415 --- /dev/null +++ b/policyengine_us/reforms/states/wa/sb6346/sb6346.py @@ -0,0 +1,130 @@ +from policyengine_us.model_api import * +from policyengine_core.periods import period as period_ + + +def create_wa_sb6346() -> Reform: + """ + WA SSB 6346 - 9.9% income tax on high earners. + + Imposes a 9.9% tax on Washington taxable income (federal AGI minus + a $1M standard deduction and capped charitable deduction). + + Reference: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf + """ + + class wa_income_tax_base_income(Variable): + value_type = float + entity = TaxUnit + label = "Washington base income under SSB 6346" + unit = USD + definition_period = YEAR + reference = "https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=17" + defined_for = StateCode.WA + + def formula(tax_unit, period, parameters): + return tax_unit("adjusted_gross_income", period) + + class wa_income_tax_charitable_deduction(Variable): + value_type = float + entity = TaxUnit + label = "Washington income tax charitable deduction under SSB 6346" + unit = USD + definition_period = YEAR + reference = "https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=21" + defined_for = StateCode.WA + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.contrib.states.wa.sb6346.charitable_deduction.cap + filing_status = tax_unit("filing_status", period) + charitable = add( + tax_unit, + period, + ["charitable_cash_donations", "charitable_non_cash_donations"], + ) + is_joint = filing_status == filing_status.possible_values.JOINT + cap = where(is_joint, p.joint, p.individual) + return min_(charitable, cap) + + class wa_income_tax_standard_deduction(Variable): + value_type = float + entity = TaxUnit + label = "Washington income tax standard deduction under SSB 6346" + unit = USD + definition_period = YEAR + reference = "https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=22" + defined_for = StateCode.WA + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.contrib.states.wa.sb6346.standard_deduction + return p.amount + + class wa_income_tax_taxable_income(Variable): + value_type = float + entity = TaxUnit + label = "Washington taxable income under SSB 6346" + unit = USD + definition_period = YEAR + reference = ( + "https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=21", + "https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=22", + ) + defined_for = StateCode.WA + + def formula(tax_unit, period, parameters): + base_income = tax_unit("wa_income_tax_base_income", period) + charitable_deduction = tax_unit( + "wa_income_tax_charitable_deduction", period + ) + standard_deduction = tax_unit("wa_income_tax_standard_deduction", period) + return max_(base_income - charitable_deduction - standard_deduction, 0) + + class wa_income_tax(Variable): + value_type = float + entity = TaxUnit + label = "Washington income tax" + unit = USD + definition_period = YEAR + reference = "https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=16" + defined_for = StateCode.WA + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.contrib.states.wa.sb6346 + taxable_income = tax_unit("wa_income_tax_taxable_income", period) + sb6346_tax = taxable_income * p.rate + capital_gains_tax = tax_unit("wa_capital_gains_tax", period) + refundable_credits = tax_unit("wa_refundable_credits", period) + return sb6346_tax + capital_gains_tax - refundable_credits + + class reform(Reform): + def apply(self): + self.add_variable(wa_income_tax_base_income) + self.add_variable(wa_income_tax_charitable_deduction) + self.add_variable(wa_income_tax_standard_deduction) + self.add_variable(wa_income_tax_taxable_income) + self.update_variable(wa_income_tax) + + return reform + + +def create_wa_sb6346_reform(parameters, period, bypass=False): + if bypass: + return create_wa_sb6346() + + p = parameters.gov.contrib.states.wa.sb6346 + + reform_active = False + current_period = period_(period) + + for _ in range(5): + if p(current_period).in_effect: + reform_active = True + break + current_period = current_period.offset(1, "year") + + if reform_active: + return create_wa_sb6346() + else: + return None + + +wa_sb6346 = create_wa_sb6346_reform(None, None, bypass=True) diff --git a/policyengine_us/tests/policy/contrib/states/wa/sb6346/sb6346.yaml b/policyengine_us/tests/policy/contrib/states/wa/sb6346/sb6346.yaml new file mode 100644 index 00000000000..7199a1e406d --- /dev/null +++ b/policyengine_us/tests/policy/contrib/states/wa/sb6346/sb6346.yaml @@ -0,0 +1,231 @@ +# WA SSB 6346 Income Tax Reform Tests +# Tests the 9.9% income tax on Washington taxable income: +# tax = max(0, AGI - charitable_deduction - standard_deduction) * 0.099 +# Standard deduction: $1,000,000 (same for single and married) +# Charitable deduction cap: $100,000 individual, $100,000 joint + +- name: Case 1, single high earner with charitable below cap. + period: 2028 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.states.wa.sb6346.sb6346.wa_sb6346 + input: + gov.contrib.states.wa.sb6346.in_effect: true + people: + person1: + age: 40 + employment_income: 2_000_000 + charitable_cash_donations: 50_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: WA + output: + # AGI = $2,000,000 + wa_income_tax_base_income: 2_000_000 + # Charitable: $50,000 < $100,000 cap -> full $50,000 + wa_income_tax_charitable_deduction: 50_000 + # Standard deduction: $1,000,000 + wa_income_tax_standard_deduction: 1_000_000 + # Taxable: $2,000,000 - $50,000 - $1,000,000 = $950,000 + wa_income_tax_taxable_income: 950_000 + # Tax: $950,000 * 0.099 = $94,050 + wa_income_tax: 94_050 + +- name: Case 2, single filer below threshold. + period: 2028 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.states.wa.sb6346.sb6346.wa_sb6346 + input: + gov.contrib.states.wa.sb6346.in_effect: true + people: + person1: + age: 40 + employment_income: 500_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: WA + output: + # AGI = $500,000 + # Taxable: max(0, $500,000 - $0 - $1,000,000) = $0 + wa_income_tax_taxable_income: 0 + # Tax: $0 + wa_income_tax: 0 + +- name: Case 3, married joint high earners with charitable under joint cap. + period: 2028 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.states.wa.sb6346.sb6346.wa_sb6346 + input: + gov.contrib.states.wa.sb6346.in_effect: true + people: + person1: + age: 45 + is_tax_unit_head: true + employment_income: 1_500_000 + charitable_cash_donations: 40_000 + person2: + age: 43 + is_tax_unit_spouse: true + employment_income: 1_500_000 + charitable_cash_donations: 40_000 + tax_units: + tax_unit: + members: [person1, person2] + filing_status: JOINT + households: + household: + members: [person1, person2] + state_code: WA + output: + # AGI = $1,500,000 + $1,500,000 = $3,000,000 + wa_income_tax_base_income: 3_000_000 + # Charitable: $40,000 + $40,000 = $80,000 < $100,000 joint cap + wa_income_tax_charitable_deduction: 80_000 + # Standard deduction: $1,000,000 + wa_income_tax_standard_deduction: 1_000_000 + # Taxable: $3,000,000 - $80,000 - $1,000,000 = $1,920,000 + wa_income_tax_taxable_income: 1_920_000 + # Tax: $1,920,000 * 0.099 = $190,080 + wa_income_tax: 190_080 + +- name: Case 4, married joint below threshold. + period: 2028 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.states.wa.sb6346.sb6346.wa_sb6346 + input: + gov.contrib.states.wa.sb6346.in_effect: true + people: + person1: + age: 45 + is_tax_unit_head: true + employment_income: 400_000 + person2: + age: 43 + is_tax_unit_spouse: true + employment_income: 400_000 + tax_units: + tax_unit: + members: [person1, person2] + filing_status: JOINT + households: + household: + members: [person1, person2] + state_code: WA + output: + # AGI = $800,000 < $1,000,000 standard deduction + # Taxable: max(0, $800,000 - $0 - $1,000,000) = $0 + wa_income_tax: 0 + +- name: Case 5, single filer just above threshold with modest charitable. + period: 2028 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.states.wa.sb6346.sb6346.wa_sb6346 + input: + gov.contrib.states.wa.sb6346.in_effect: true + people: + person1: + age: 40 + employment_income: 1_050_000 + charitable_cash_donations: 20_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: WA + output: + # AGI = $1,050,000 + # Charitable: $20,000 < $100,000 cap -> full $20,000 + wa_income_tax_charitable_deduction: 20_000 + # Taxable: $1,050,000 - $20,000 - $1,000,000 = $30,000 + wa_income_tax_taxable_income: 30_000 + # Tax: $30,000 * 0.099 = $2,970 + wa_income_tax: 2_970 + +- name: Case 6, exactly at standard deduction threshold. + period: 2028 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.states.wa.sb6346.sb6346.wa_sb6346 + input: + gov.contrib.states.wa.sb6346.in_effect: true + people: + person1: + age: 40 + employment_income: 1_000_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: WA + output: + # AGI = $1,000,000 + # Taxable: max(0, $1,000,000 - $0 - $1,000,000) = $0 + wa_income_tax_taxable_income: 0 + wa_income_tax: 0 + +- name: Case 7, non-WA resident gets zero tax. + period: 2028 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.states.wa.sb6346.sb6346.wa_sb6346 + input: + gov.contrib.states.wa.sb6346.in_effect: true + people: + person1: + age: 40 + employment_income: 5_000_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: CA + output: + # defined_for = StateCode.WA, so CA resident gets $0 + wa_income_tax: 0 + +- name: Case 8, single filer with charitable exceeding individual cap. + period: 2028 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.states.wa.sb6346.sb6346.wa_sb6346 + input: + gov.contrib.states.wa.sb6346.in_effect: true + people: + person1: + age: 40 + employment_income: 2_000_000 + charitable_cash_donations: 200_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: WA + output: + # AGI = $2,000,000 + wa_income_tax_base_income: 2_000_000 + # Charitable: $200,000 > $100,000 individual cap -> capped at $100,000 + wa_income_tax_charitable_deduction: 100_000 + # Standard deduction: $1,000,000 + wa_income_tax_standard_deduction: 1_000_000 + # Taxable: $2,000,000 - $100,000 - $1,000,000 = $900,000 + wa_income_tax_taxable_income: 900_000 + # Tax: $900,000 * 0.099 = $89,100 + wa_income_tax: 89_100 diff --git a/sources/working_references.md b/sources/working_references.md new file mode 100644 index 00000000000..6c5220ac56f --- /dev/null +++ b/sources/working_references.md @@ -0,0 +1,342 @@ +# Collected Documentation + +## Washington State Income Tax (Millionaires Tax) - SB 6346-S Implementation +**Collected**: 2026-03-12 +**Implementation Task**: Implement WA state income tax on high earners per Senate Bill 6346-S + +--- + +## Official Program Name + +**Federal Program**: N/A (state-level income tax; no federal counterpart) +**State's Official Name**: Washington Millionaires Tax / Income Tax on High Earners +**Bill Number**: Substitute Senate Bill 6346 (SSB 6346) +**Legislature**: 69th Legislature, 2026 Regular Session +**Source**: SSB 6346, to be codified as Title 82A RCW (Sec. 1003) + +**Variable Prefix**: `wa_income_tax` + +--- + +## Legislative Status + +- **Senate passed**: February 16, 2026 +- **House passed**: March 9, 2026 (51-46 vote, after 24+ hours of floor debate) +- **Senate concurred in House amendments**: March 11, 2026 (27-21 vote) +- **Current status**: On governor's desk; Governor Ferguson has pledged to sign +- **Expected to become law**: Yes + +--- + +## Source Information + +### Primary source +- **Title**: Substitute Senate Bill 6346 (SSB 6346) +- **Citation**: SSB 6346, 69th Legislature, 2026 Regular Session +- **URL**: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf +- **Bill summary URL**: https://app.leg.wa.gov/billsummary/?BillNumber=6346&Year=2025&Initiative=false +- **To be codified as**: Title 82A RCW +- **Effective date**: January 1, 2028 (tax year 2028, first payments due 2029) + +--- + +## Key Definitions (Sec. 101) + +### Federal adjusted gross income (Sec. 101(3)) +"adjusted gross income as determined under section 62 of the internal revenue code" + +### Internal revenue code (Sec. 101(5)) +"the United States internal revenue code of 1986, as amended and in effect on January 1, 2026, or such subsequent date as the department may provide by rule consistent with the purpose of this chapter" + +### Washington base income (Sec. 101(11)) +"federal adjusted gross income as modified under sections 302 through 306 and 401 through 407 of this act" + +### Washington taxable income (Sec. 101(12)) +"Washington base income as further modified by sections 307 through 310 of this act" + +### Resident (Sec. 101(8)) +An individual who: +- (a)(i) Is domiciled in this state during the taxable year, UNLESS the individual (A) maintained no permanent place of abode in this state during the entire taxable year, (B) maintained a permanent place of abode outside of this state during the entire taxable year, and (C) spent in the aggregate not more than 30 days of the taxable year in this state; OR +- (a)(ii) Is not domiciled in this state during the taxable year, but maintained a place of abode and was physically present in this state for more than 183 days during the taxable year. + +--- + +## Tax Rate and Threshold (Sec. 201) + +### Tax imposed (Sec. 201(1)) +**Exact statutory language**: "Beginning January 1, 2028, a tax is imposed on the receipt of Washington taxable income. Only individuals are subject to payment of the tax, which equals 9.90 percent multiplied by an individual's Washington taxable income." + +- **Tax rate**: 9.9% (flat rate) +- **Effective date**: January 1, 2028 +- **Applies to**: Individuals only (not entities directly) + +### Negative income (Sec. 201(2)) +"If an individual's Washington taxable income is less than zero for a taxable year, no tax is due under this section and no amount is allowed as a carryover for use in the calculation of that individual's Washington taxable income, for any taxable year." + +Exception: Loss carryforwards derived from or connected with Washington sources ARE included in Washington taxable income calculation. + +--- + +## Standard Deduction - The $1,000,000 threshold (Sec. 310) + +### One million dollar standard deduction (Sec. 310) +**Exact statutory language**: "In computing a taxpayer's Washington taxable income, a taxpayer may deduct from the taxpayer's Washington base income a standard deduction of $1,000,000 per individual, or in the case of spouses or domestic partners, their combined standard deduction is limited to $1,000,000, regardless of whether they file joint or separate returns." + +- **Standard deduction**: $1,000,000 +- **Per individual**: $1,000,000 (single filers) +- **Per married couple / domestic partners**: $1,000,000 COMBINED (NOT $1M each) +- **Indexed for inflation**: Yes, annually per Sec. 312 + +**CRITICAL for implementation**: The $1M threshold is implemented as a standard deduction from Washington base income, NOT as an income eligibility threshold. The tax applies to Washington taxable income (which is Washington base income MINUS the standard deduction and other adjustments). + +### Filing status considerations (Sec. 703(4)) +"individuals who are spouses or state registered domestic partners are not considered separate taxpayers for the purposes of this chapter regardless of whether they file a joint or separate return... The activities and assets of each spouse or state registered domestic partner are combined as if they were one individual for the purposes of determining the applicability of any threshold amounts, caps, deductions, credits, or any other amounts" + +**Implementation note**: Married couples and domestic partners share a SINGLE $1,000,000 deduction regardless of filing status. This is a household-level (marital unit level) deduction, not a per-person deduction. + +--- + +## Inflation adjustment (Sec. 312) + +### Index for inflation (Sec. 312(1)) +- **When**: Beginning October 2029 and each October thereafter +- **Method**: Multiply current standard deduction by (1 + CPI percentage change) +- **Rounding**: To nearest $1,000 +- **Floor**: No downward adjustment (if CPI change would reduce the deduction, it stays the same) +- **CPI definition**: Consumer price index for all urban consumers, all items, for the Seattle area (Sec. 312(2)(a)) +- **Takes effect**: For taxes due in the following calendar year + +--- + +## Income calculation: Federal AGI to Washington taxable income + +The bill defines a multi-step process to arrive at Washington taxable income: + +### Step 1: Start with federal adjusted gross income (IRC Sec. 62) + +### Step 2: Compute Washington base income (Secs. 302-306, 401-407) +Modifications to federal AGI: + +**Sec. 302 - Long-term capital gains and losses:** +- SUBTRACT long-term capital gains included in federal AGI +- ADD BACK long-term capital losses included in federal AGI +- ADD Washington capital gains subject to tax under chapter 82.87 RCW (WA capital gains tax) plus amounts deducted under RCW 82.87.060(1) and (4) -- only for taxpayers owing WA capital gains tax + +**Sec. 303 - State and local obligations:** +- ADD tax-exempt interest income excluded under IRC Sec. 103, EXCEPT interest on WA state or local obligations + +**Sec. 304 - State/local income taxes and B&O taxes:** +- ADD state/local income taxes deducted on federal return +- ADD taxes for which B&O or public utility tax credit is allowed + +**Sec. 305 - Carryovers:** +- ADD amounts carried over from taxable years before the effective date of the act + +**Sec. 306 - Federal obligations:** +- SUBTRACT income from US obligations that states cannot tax (reduced by related expenses) + +**Secs. 401-407 - Allocation and apportionment (for nonresidents/part-year residents):** +- Complex rules for allocating income to Washington sources +- Residents: entire Washington base income is taxable +- Nonresidents: only income derived from Washington sources + +### Step 3: Compute Washington taxable income (Secs. 307-310) +Further modifications to Washington base income: + +**Sec. 307 - Charitable contributions:** +- SUBTRACT charitable contributions claimed under IRC Sec. 170 +- Maximum: $100,000 per individual, or $100,000 combined for spouses/domestic partners + +**Sec. 308 - Pass-through entity tax payments:** +- ADD BACK distributive share of pass-through entity tax expense (Sec. 502) deducted on federal return + +**Sec. 309 - Capital construction fund:** +- SUBTRACT amounts deposited in capital construction fund under IRC Sec. 7518 + +**Sec. 310 - Standard deduction:** +- SUBTRACT $1,000,000 standard deduction (see details above) + +### Summary formula +``` +Washington taxable income = + Federal AGI + - Long-term capital gains + Long-term capital losses + + WA capital gains (if applicable) + + Tax-exempt interest (except WA obligations) + + State/local income taxes deducted federally + + Pre-effective-date carryovers + - Federal obligation income + [allocation adjustments for nonresidents] + - Charitable contributions (max $100K) + + Pass-through entity tax add-back + - Capital construction fund deposits + - $1,000,000 standard deduction + +Tax = max(0, Washington taxable income) * 9.9% +``` + +--- + +## Filing status rules (Sec. 703) + +### Joint vs. separate returns (Sec. 703(1)-(2)) +- If spouses file a joint federal return, they MUST file a joint WA return +- If spouses file separate federal returns, they MUST file separate WA returns +- State registered domestic partners MAY file jointly even if they filed separate federal returns + +### Combined treatment (Sec. 703(4)(a)) +Spouses and domestic partners are NOT considered separate taxpayers. Their "activities and assets... are combined as if they were one individual for the purposes of determining the applicability of any threshold amounts, caps, deductions, credits, or any other amounts." + +### Separate return allocation (Sec. 703(4)(b)) +When filing separately, spouses must allocate marital community assets and activity. If they cannot agree, each gets one-half. + +--- + +## Credits + +### Credit for income taxes paid to other jurisdictions (Sec. 203) +- Residents get credit for income taxes paid to other states +- Limited to the lesser of: (a) tax paid to other jurisdiction, or (b) WA tax * (income taxed in other jurisdiction / total WA base income) + +### Credit for B&O and public utility taxes (Sec. 204) +- Beginning tax year 2028 (due 2029) +- Credit to avoid double-taxation of same income + +--- + +## Pass-through entity tax election (Sec. 502) + +- Rate: 9.9% of taxable income of electing entity +- Effective: January 1, 2028 +- Election: Annual, irrevocable for taxable year, filed by April 15th +- Members get credit against individual tax for their share of entity-level tax paid + +--- + +## Relationship to Initiative 2111 (Sec. 1001) + +The bill amends RCW 1.90.100 (from Initiative Measure No. 2111, which prohibited state income taxes) to add an exemption: +"Subsection (1) of this section does not apply to the tax authorized in chapter 82A.--- RCW" + +This explicitly carves out SSB 6346 from the income tax prohibition passed by voters. + +--- + +## Null and void provision (Sec. 1002) + +"If a court of final jurisdiction invalidates section 201 of this act, this act is null and void in its entirety." + +--- + +## Implementation notes for PolicyEngine + +### Simplified implementation approach + +For PolicyEngine modeling purposes, the key variables needed are: + +1. **`wa_income_tax`** - The final WA income tax amount + - Formula: `max(0, wa_taxable_income) * 0.099` + - Level: Tax unit + +2. **`wa_taxable_income`** - Washington taxable income + - For a simplified implementation: `federal_agi - wa_income_tax_standard_deduction` + - For full implementation: Apply all Sec. 302-310 modifications + - Level: Tax unit + +3. **`wa_income_tax_standard_deduction`** - The $1M standard deduction + - $1,000,000 per individual, $1,000,000 combined for married couples + - Indexed for inflation starting October 2029 (for tax year 2030) + - Level: Tax unit + +### Parameters needed + +```yaml +# Tax rate +gov.states.wa.tax.income.rate: + values: + 2028-01-01: 0.099 + metadata: + label: Washington income tax rate + unit: /1 + reference: + - title: SSB 6346 Sec. 201(1) + href: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf + +# Standard deduction (individual) +gov.states.wa.tax.income.standard_deduction.individual: + values: + 2028-01-01: 1_000_000 + metadata: + label: Washington income tax standard deduction (individual) + unit: currency-USD + reference: + - title: SSB 6346 Sec. 310 + href: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf + +# Standard deduction (joint / married / domestic partners) +gov.states.wa.tax.income.standard_deduction.joint: + values: + 2028-01-01: 1_000_000 + metadata: + label: Washington income tax standard deduction (joint) + unit: currency-USD + reference: + - title: SSB 6346 Sec. 310 + href: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf + +# Charitable contribution deduction cap (individual) +gov.states.wa.tax.income.charitable_deduction.cap.individual: + values: + 2028-01-01: 100_000 + metadata: + label: Washington income tax charitable deduction cap (individual) + unit: currency-USD + reference: + - title: SSB 6346 Sec. 307 + href: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf + +# Charitable contribution deduction cap (joint) +gov.states.wa.tax.income.charitable_deduction.cap.joint: + values: + 2028-01-01: 100_000 + metadata: + label: Washington income tax charitable deduction cap (joint) + unit: currency-USD + reference: + - title: SSB 6346 Sec. 307 + href: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf +``` + +### Key implementation considerations + +1. **The $1M deduction is the SAME for individuals and married couples** - This is unusual. Most tax systems give married couples a higher threshold. Here, married couples share a single $1M deduction. + +2. **Income definition is complex** - The full "Washington taxable income" requires multiple modifications to federal AGI. A simplified implementation could start with federal AGI minus the $1M deduction, with notes about the simplification. + +3. **The tax only applies starting 2028** - No parameters should exist before 2028-01-01. + +4. **Inflation indexing begins for tax year 2030** - The $1M amount is fixed for 2028 and 2029, then CPI-indexed starting with October 2029 adjustments for 2030. + +5. **CPI index used**: Seattle-area CPI-U (all items, all urban consumers). This is a specific regional CPI, not the national CPI-U. + +6. **Rounding**: Inflation-adjusted deduction rounded to nearest $1,000. + +7. **Legal challenge expected** - The bill includes a "null and void" provision (Sec. 1002) if the tax imposition is invalidated by a court of final jurisdiction. + +--- + +## References for metadata + +```yaml +# For parameters: +reference: + - title: "SSB 6346, Sec. 201 - Tax Imposed" + href: "https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf" + - title: "SB 6346 Bill Summary - Washington State Legislature" + href: "https://app.leg.wa.gov/billsummary/?BillNumber=6346&Year=2025&Initiative=false" +``` + +```python +# For variables: +reference = "https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf" +``` From eed0ca16fc117111888256483390824c1c3b7997 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 12 Mar 2026 10:41:05 -0400 Subject: [PATCH 3/4] Add WFTC age expansion from SSB 6346 Sec. 901 Co-Authored-By: Claude Opus 4.6 --- .../states/wa/sb6346/wftc/min_age.yaml | 12 ++++ .../reforms/states/wa/sb6346/sb6346.py | 48 +++++++++++++ .../contrib/states/wa/sb6346/sb6346.yaml | 68 +++++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100644 policyengine_us/parameters/gov/contrib/states/wa/sb6346/wftc/min_age.yaml diff --git a/policyengine_us/parameters/gov/contrib/states/wa/sb6346/wftc/min_age.yaml b/policyengine_us/parameters/gov/contrib/states/wa/sb6346/wftc/min_age.yaml new file mode 100644 index 00000000000..0010da4ba3e --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/states/wa/sb6346/wftc/min_age.yaml @@ -0,0 +1,12 @@ +description: Minimum age for WFTC eligibility under SSB 6346, for individuals who do not meet the federal EITC age requirement. + +values: + 2028-01-01: 18 + +metadata: + unit: year + period: year + label: SSB 6346 WFTC minimum age for expanded eligibility + reference: + - title: SSB 6346, Sec. 901(2)(a)(ii)(C) + href: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=52 diff --git a/policyengine_us/reforms/states/wa/sb6346/sb6346.py b/policyengine_us/reforms/states/wa/sb6346/sb6346.py index 3b1c8c8e415..e1f8d3eede3 100644 --- a/policyengine_us/reforms/states/wa/sb6346/sb6346.py +++ b/policyengine_us/reforms/states/wa/sb6346/sb6346.py @@ -95,6 +95,53 @@ def formula(tax_unit, period, parameters): refundable_credits = tax_unit("wa_refundable_credits", period) return sb6346_tax + capital_gains_tax - refundable_credits + class wa_working_families_tax_credit(Variable): + value_type = float + entity = TaxUnit + label = "Washington Working Families Tax Credit" + unit = USD + definition_period = YEAR + reference = ( + "https://app.leg.wa.gov/RCW/default.aspx?cite=82.08.0206", + "https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=52", + ) + defined_for = StateCode.WA + + def formula(tax_unit, period, parameters): + eitc = tax_unit("eitc", period) + eitc_eligible = eitc > 0 + # SSB 6346 Sec. 901(2)(a)(ii)(C): individuals who do not meet + # the EITC age requirement but are at least age 18. + sb6346_p = parameters(period).gov.contrib.states.wa.sb6346.wftc + age_head = tax_unit("age_head", period) + age_spouse = tax_unit("age_spouse", period) + filer_at_least_min_age = (age_head >= sb6346_p.min_age) | ( + age_spouse >= sb6346_p.min_age + ) + earned_income = tax_unit("filer_adjusted_earnings", period) + has_earned_income = earned_income > 0 + eligible = eitc_eligible | (filer_at_least_min_age & has_earned_income) + p = parameters( + period + ).gov.states.wa.tax.income.credits.working_families_tax_credit + eitc_child_count = tax_unit("eitc_child_count", period) + max_amount = p.amount.calc(eitc_child_count) + eitc_agi_limit = tax_unit("eitc_agi_limit", period) + phase_out_start_reduction = p.phase_out.start_below_eitc.calc( + eitc_child_count + ) + phase_out_start = eitc_agi_limit - phase_out_start_reduction + phase_out_rate = (max_amount - p.min_amount) / phase_out_start_reduction + excess = max_(0, earned_income - phase_out_start) + reduction = max_(0, excess * phase_out_rate) + phased_out_amount = max_amount - reduction + amount_if_eligible = where( + phased_out_amount > 0, + max_(p.min_amount, phased_out_amount), + 0, + ) + return amount_if_eligible * eligible + class reform(Reform): def apply(self): self.add_variable(wa_income_tax_base_income) @@ -102,6 +149,7 @@ def apply(self): self.add_variable(wa_income_tax_standard_deduction) self.add_variable(wa_income_tax_taxable_income) self.update_variable(wa_income_tax) + self.update_variable(wa_working_families_tax_credit) return reform diff --git a/policyengine_us/tests/policy/contrib/states/wa/sb6346/sb6346.yaml b/policyengine_us/tests/policy/contrib/states/wa/sb6346/sb6346.yaml index 7199a1e406d..a3cb67da612 100644 --- a/policyengine_us/tests/policy/contrib/states/wa/sb6346/sb6346.yaml +++ b/policyengine_us/tests/policy/contrib/states/wa/sb6346/sb6346.yaml @@ -229,3 +229,71 @@ wa_income_tax_taxable_income: 900_000 # Tax: $900,000 * 0.099 = $89,100 wa_income_tax: 89_100 + +- name: Case 9, WFTC age expansion - single age 22, no children, $10,000 earnings. + period: 2028 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.states.wa.sb6346.sb6346.wa_sb6346 + input: + gov.contrib.states.wa.sb6346.in_effect: true + people: + person1: + age: 22 + employment_income: 10_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: WA + output: + # Age 22 < 25 so no federal EITC, but SSB 6346 expands WFTC to age 18+. + # With $10,000 earned income and 0 children, should receive max WFTC (~$359 uprated to 2028). + wa_working_families_tax_credit: 359 + +- name: Case 10, WFTC age expansion - single age 22, no children, $0 earnings. + period: 2028 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.states.wa.sb6346.sb6346.wa_sb6346 + input: + gov.contrib.states.wa.sb6346.in_effect: true + people: + person1: + age: 22 + employment_income: 0 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: WA + output: + # No earned income -> not eligible for WFTC even with age expansion. + wa_working_families_tax_credit: 0 + +- name: Case 11, WFTC existing path - single age 30, no children, $15,000 earnings. + period: 2028 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.states.wa.sb6346.sb6346.wa_sb6346 + input: + gov.contrib.states.wa.sb6346.in_effect: true + people: + person1: + age: 30 + employment_income: 15_000 + tax_units: + tax_unit: + members: [person1] + filing_status: SINGLE + households: + household: + members: [person1] + state_code: WA + output: + # Age 30 qualifies for federal EITC (age 25-64), earned income > 0. + # Should receive WFTC via existing eitc > 0 path (~$359 uprated to 2028). + wa_working_families_tax_credit: 359 From 86012d65f94a185870bb988bf0c1ee8cb272fa6e Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 12 Mar 2026 14:16:42 -0400 Subject: [PATCH 4/4] Add CPI-U uprating to WA standard deduction Uses national CPI-U as proxy for Seattle-area CPI-U specified in Sec. 312. Rounds to nearest $1,000. Indexing starts tax year 2030. Co-Authored-By: Claude Opus 4.6 --- .../states/wa/sb6346/standard_deduction/amount.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/policyengine_us/parameters/gov/contrib/states/wa/sb6346/standard_deduction/amount.yaml b/policyengine_us/parameters/gov/contrib/states/wa/sb6346/standard_deduction/amount.yaml index b97e4cacc3d..1aab2d81245 100644 --- a/policyengine_us/parameters/gov/contrib/states/wa/sb6346/standard_deduction/amount.yaml +++ b/policyengine_us/parameters/gov/contrib/states/wa/sb6346/standard_deduction/amount.yaml @@ -7,6 +7,15 @@ metadata: unit: currency-USD period: year label: WA SSB 6346 standard deduction + uprating: gov.bls.cpi.cpi_u + # Sec. 312 specifies Seattle-area CPI-U for indexing starting Oct 2029 + # (for tax year 2030). Using national CPI-U as a proxy until we add + # Seattle-area CPI data. Fixed at $1M for 2028-2029. + rounding: + type: nearest + interval: 1000 reference: - title: SSB 6346, Sec. 310 - Standard Deduction href: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=22 + - title: SSB 6346, Sec. 312 - Inflation Adjustment + href: https://lawfilesext.leg.wa.gov/biennium/2025-26/Pdf/Bills/Senate%20Bills/6346-S.pdf#page=23