WA Washington

This commit is contained in:
Jared Self
2021-01-07 10:41:29 -07:00
parent ac222b587c
commit 25595393a7
3 changed files with 71 additions and 59 deletions

View File

@@ -1,22 +1,23 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Wage Base -->
<!-- https://esd.wa.gov/employer-taxes/rates#:~:text=State%20Unemployment%20Taxes%20(SUTA),increasing%20from%20%2452%2C700%20in%202020.-->
<record id="rule_parameter_us_wa_suta_wage_base" model="hr.rule.parameter">
<field name="name">US WA Washington SUTA Wage Base</field>
<field name="code">us_wa_suta_wage_base</field>
<field name="country_id" ref="base.us"/>
</record>
<data noupdate="1">
<record id="rule_parameter_us_wa_suta_wage_base_2019" model="hr.rule.parameter.value">
<field name="parameter_value">49800.0</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_suta_wage_base"/>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_suta_wage_base_2020" model="hr.rule.parameter.value">
<field name="parameter_value">52700.00</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_suta_wage_base"/>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_suta_wage_base_2021" model="hr.rule.parameter.value">
<field name="parameter_value">56500.00</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_suta_wage_base"/>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<record id="rule_parameter_us_wa_fml_wage_base" model="hr.rule.parameter">
@@ -25,16 +26,17 @@
<field name="country_id" ref="base.us"/>
</record>
<data noupdate="1">
<record id="rule_parameter_us_wa_fml_wage_base_2019" model="hr.rule.parameter.value">
<field name="parameter_value">132900.00</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_wage_base"/>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<!-- https://paidleave.wa.gov/estimate-your-paid-leave-payments/-->
<record id="rule_parameter_us_wa_fml_wage_base_2020" model="hr.rule.parameter.value">
<field name="parameter_value">137700.00</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_wage_base"/>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_fml_wage_base_2021" model="hr.rule.parameter.value">
<field name="parameter_value">142800.00</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_wage_base"/>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Rate -->
@@ -43,17 +45,23 @@
<field name="code">us_wa_suta_rate</field>
<field name="country_id" ref="base.us"/>
</record>
<!-- todo: need to figure out how this was/is calculated-->
<data noupdate="1">
<record id="rule_parameter_us_wa_suta_rate_2019" model="hr.rule.parameter.value">
<field name="parameter_value">1.18</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_suta_rate"/>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_suta_rate_2020" model="hr.rule.parameter.value">
<field name="parameter_value">1.0</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_suta_rate"/>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<!-- https://esd.wa.gov/employer-taxes/determining-rates-->
<!-- At the above link and under the "New Employers" Header:-->
<!-- "For 2021, new employers will pay 115 percent of the average rate for all businesses in their respective industries."-->
<!-- Under "Average tax rates: "The 2021 average tax rate is 1.88%"-->
<!-- (1.88 * 1.15) = 2.16-->
<record id="rule_parameter_us_wa_suta_rate_2021" model="hr.rule.parameter.value">
<field name="parameter_value">2.16</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_suta_rate"/>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<record id="rule_parameter_us_wa_fml_rate" model="hr.rule.parameter">
@@ -62,16 +70,17 @@
<field name="country_id" ref="base.us"/>
</record>
<data noupdate="1">
<record id="rule_parameter_us_wa_fml_rate_2019" model="hr.rule.parameter.value">
<field name="parameter_value">0.4</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate"/>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<!-- https://resources.paidleave.wa.gov/premium-calculator-->
<record id="rule_parameter_us_wa_fml_rate_2020" model="hr.rule.parameter.value">
<field name="parameter_value">0.4</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate"/>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_fml_rate_2021" model="hr.rule.parameter.value">
<field name="parameter_value">0.4</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate"/>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<record id="rule_parameter_us_wa_fml_rate_ee" model="hr.rule.parameter">
@@ -80,16 +89,18 @@
<field name="country_id" ref="base.us"/>
</record>
<data noupdate="1">
<record id="rule_parameter_us_wa_fml_rate_ee_2019" model="hr.rule.parameter.value">
<field name="parameter_value">66.33</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate_ee"/>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_fml_rate_ee_2020" model="hr.rule.parameter.value">
<field name="parameter_value">66.33</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate_ee"/>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<!-- Bullet 4 in: https://resources.paidleave.wa.gov/premium-calculator-->
<!-- "Employers may withhold up to 63.33% of the total premium from an employee."-->
<record id="rule_parameter_us_wa_fml_rate_ee_2021" model="hr.rule.parameter.value">
<field name="parameter_value">66.33</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate_ee"/>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<record id="rule_parameter_us_wa_fml_rate_er" model="hr.rule.parameter">
@@ -98,16 +109,18 @@
<field name="country_id" ref="base.us"/>
</record>
<data noupdate="1">
<record id="rule_parameter_us_wa_fml_rate_er_2019" model="hr.rule.parameter.value">
<field name="parameter_value">33.67</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate_er"/>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_fml_rate_er_2020" model="hr.rule.parameter.value">
<field name="parameter_value">33.67</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate_er"/>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<!-- Bullet 4 also says in: https://resources.paidleave.wa.gov/premium-calculator-->
<!-- "The employer is responsible for paying the other 36.67%"-->
<record id="rule_parameter_us_wa_fml_rate_er_2021" model="hr.rule.parameter.value">
<field name="parameter_value">33.67</field>
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate_er"/>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Partners and Contribution Registers -->

View File

@@ -22,6 +22,7 @@ class TestUsWAPayslip(TestUsPayslip):
# 'rate': 0.1261,
# 'rate_emp_withhold': 0.05575,
# })
# todo: figure out how the two rates below corralate with ee and er rates above
self.test_ee_lni = 0.05575 # per 100 hours
self.test_er_lni = 0.1261 # per 100 hours
self.parameter_lni_ee = self.env['hr.rule.parameter'].create({

View File

@@ -8,8 +8,9 @@ class TestUsWAPayslip(TestUsPayslip):
###
# Taxes and Rates
###
WA_UNEMP_MAX_WAGE = 49800.0
WA_UNEMP_RATE = 1.18
WA_UNEMP_MAX_WAGE = 56500.00
WA_UNEMP_RATE = 2.16
WA_FML_MAX_WAGE = 142800.00
WA_FML_RATE = 0.4
WA_FML_RATE_EE = 66.33
WA_FML_RATE_ER = 33.67
@@ -27,7 +28,7 @@ class TestUsWAPayslip(TestUsPayslip):
'name': 'Test LNI EE',
'code': 'test_lni_ee',
'parameter_version_ids': [(0, 0, {
'date_from': date(2019, 1, 1),
'date_from': date(2021, 1, 1),
'parameter_value': str(self.test_ee_lni * 100),
})],
})
@@ -35,13 +36,15 @@ class TestUsWAPayslip(TestUsPayslip):
'name': 'Test LNI ER',
'code': 'test_lni_er',
'parameter_version_ids': [(0, 0, {
'date_from': date(2019, 1, 1),
'date_from': date(2021, 1, 1),
'parameter_value': str(self.test_er_lni * 100),
})],
})
def test_2019_taxes(self):
salary = 25000.0
def test_2021_taxes(self):
self._test_er_suta('WA', self.WA_UNEMP_RATE, date(2021, 1, 1), wage_base=self.WA_UNEMP_MAX_WAGE)
salary = (self.WA_FML_MAX_WAGE / 2.0) + 1000.0
employee = self._createEmployee()
@@ -54,39 +57,34 @@ class TestUsWAPayslip(TestUsPayslip):
self._log(str(contract.resource_calendar_id) + ' ' + contract.resource_calendar_id.name)
# tax rates
wa_unemp = self.WA_UNEMP_RATE / -100.0
self._log('2019 Washington tax first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
# Non SUTA
self._log('2021 Washington tax first payslip:')
payslip = self._createPayslip(employee, '2021-01-01', '2021-01-31')
hours_in_period = payslip.worked_days_line_ids.filtered(lambda l: l.code == 'WORK100').number_of_hours
self.assertAlmostEqual(hours_in_period, 184) # only asserted to test algorithm
self.assertPayrollAlmostEqual(hours_in_period, 169) # only asserted to test algorithm
payslip.compute_sheet()
cats = self._getCategories(payslip)
rules = self._getRules(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], salary * wa_unemp)
self.assertPayrollEqual(rules['EE_US_WA_LNI'], -(self.test_ee_lni * hours_in_period))
self.assertPayrollAlmostEqual(rules['EE_US_WA_LNI'], -(self.test_ee_lni * hours_in_period))
self.assertPayrollEqual(rules['ER_US_WA_LNI'], -(self.test_er_lni * hours_in_period))
# Both of these are known to be within 1 penny
self.assertPayrollAlmostEqual(rules['EE_US_WA_FML'], -(salary * (self.WA_FML_RATE / 100.0) * (self.WA_FML_RATE_EE / 100.0)))
self.assertPayrollAlmostEqual(rules['ER_US_WA_FML'], -(salary * (self.WA_FML_RATE / 100.0) * (self.WA_FML_RATE_ER / 100.0)))
# FML
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_wa_unemp_wages = self.WA_UNEMP_MAX_WAGE - salary if (self.WA_UNEMP_MAX_WAGE - 2*salary < salary) \
else salary
self._log('2019 Washington tax second payslip:')
payslip = self._createPayslip(employee, '2019-02-01', '2019-02-28')
# Second payslip
remaining_wage = self.WA_FML_MAX_WAGE - salary
payslip = self._createPayslip(employee, '2021-03-01', '2021-03-31')
payslip.compute_sheet()
rules = self._getRules(payslip)
self.assertPayrollAlmostEqual(rules['EE_US_WA_FML'], -(remaining_wage * (self.WA_FML_RATE / 100.0) * (self.WA_FML_RATE_EE / 100.0)))
self.assertPayrollAlmostEqual(rules['ER_US_WA_FML'], -(remaining_wage * (self.WA_FML_RATE / 100.0) * (self.WA_FML_RATE_ER / 100.0)))
process_payslip(payslip)
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], remaining_wa_unemp_wages * wa_unemp)
# Third payslip
payslip = self._createPayslip(employee, '2021-04-01', '2021-04-30')
payslip.compute_sheet()
rules = self._getRules(payslip)
self.assertPayrollAlmostEqual(rules['EE_US_WA_FML'], 0.0)
self.assertPayrollAlmostEqual(rules['ER_US_WA_FML'], 0.0)