mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
[FIX] l10n_us_hr_payroll: calculate ER as negative, not FICA/FUTA exempt
This commit is contained in:
@@ -57,7 +57,7 @@
|
|||||||
<record id="category_ee_401k_traditional" model="hr.salary.rule.category">
|
<record id="category_ee_401k_traditional" model="hr.salary.rule.category">
|
||||||
<field name="name">EE: 401K Traditional</field>
|
<field name="name">EE: 401K Traditional</field>
|
||||||
<field name="code">EE_IRA</field>
|
<field name="code">EE_IRA</field>
|
||||||
<field name="parent_id" ref="l10n_us_hr_payroll.hr_payroll_category_ded_fit_fica_futa_exempt"/>
|
<field name="parent_id" ref="l10n_us_hr_payroll.hr_payroll_category_ded_fit_exempt"/>
|
||||||
</record>
|
</record>
|
||||||
<record id="category_ee_401k_roth" model="hr.salary.rule.category">
|
<record id="category_ee_401k_roth" model="hr.salary.rule.category">
|
||||||
<field name="name">EE: 401K Roth</field>
|
<field name="name">EE: 401K Roth</field>
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ def er_401k_match(wages, payslip, categories, worked_days, inputs):
|
|||||||
else:
|
else:
|
||||||
if remaining - result < 0.0:
|
if remaining - result < 0.0:
|
||||||
result = remaining
|
result = remaining
|
||||||
return result
|
return -result
|
||||||
|
|
||||||
|
|
||||||
class HRPayslip(models.Model):
|
class HRPayslip(models.Model):
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class TestUsPayslip(common.TestUsPayslip):
|
|||||||
|
|
||||||
er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH')
|
er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH')
|
||||||
self.assertTrue(er_ira_line)
|
self.assertTrue(er_ira_line)
|
||||||
self.assertPayrollEqual(er_ira_line.amount, 80.0) # 4% of wage up to their contribution
|
self.assertPayrollEqual(er_ira_line.amount, -80.0) # 4% of wage up to their contribution
|
||||||
|
|
||||||
contract.ira_rate = 0.0
|
contract.ira_rate = 0.0
|
||||||
contract.ira_amount = 25.0
|
contract.ira_amount = 25.0
|
||||||
@@ -44,7 +44,7 @@ class TestUsPayslip(common.TestUsPayslip):
|
|||||||
|
|
||||||
er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH')
|
er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH')
|
||||||
self.assertTrue(er_ira_line)
|
self.assertTrue(er_ira_line)
|
||||||
self.assertPayrollEqual(er_ira_line.amount, 25.0) # 4% of wage up to their contribution
|
self.assertPayrollEqual(er_ira_line.amount, -25.0) # 4% of wage up to their contribution
|
||||||
|
|
||||||
def test_02_payslip_roth(self):
|
def test_02_payslip_roth(self):
|
||||||
wage = 2000.0
|
wage = 2000.0
|
||||||
@@ -61,7 +61,7 @@ class TestUsPayslip(common.TestUsPayslip):
|
|||||||
|
|
||||||
er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH')
|
er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH')
|
||||||
self.assertTrue(er_ira_line)
|
self.assertTrue(er_ira_line)
|
||||||
self.assertPayrollEqual(er_ira_line.amount, 80.0) # 4% of wage up to their contribution
|
self.assertPayrollEqual(er_ira_line.amount, -80.0) # 4% of wage up to their contribution
|
||||||
|
|
||||||
contract.ira_roth_rate = 0.0
|
contract.ira_roth_rate = 0.0
|
||||||
contract.ira_roth_amount = 25.0
|
contract.ira_roth_amount = 25.0
|
||||||
@@ -72,7 +72,7 @@ class TestUsPayslip(common.TestUsPayslip):
|
|||||||
|
|
||||||
er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH')
|
er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH')
|
||||||
self.assertTrue(er_ira_line)
|
self.assertTrue(er_ira_line)
|
||||||
self.assertPayrollEqual(er_ira_line.amount, 25.0) # 4% of wage up to their contribution
|
self.assertPayrollEqual(er_ira_line.amount, -25.0) # 4% of wage up to their contribution
|
||||||
|
|
||||||
def test_10_payslip_limits(self):
|
def test_10_payslip_limits(self):
|
||||||
self.er_match_parameter.parameter_value = '20.0' # 20% match up to salary
|
self.er_match_parameter.parameter_value = '20.0' # 20% match up to salary
|
||||||
@@ -92,7 +92,7 @@ class TestUsPayslip(common.TestUsPayslip):
|
|||||||
self.assertPayrollEqual(ira_line.amount, -(wage * rate / 100.0))
|
self.assertPayrollEqual(ira_line.amount, -(wage * rate / 100.0))
|
||||||
er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH')
|
er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH')
|
||||||
self.assertTrue(er_ira_line)
|
self.assertTrue(er_ira_line)
|
||||||
self.assertPayrollEqual(er_ira_line.amount, -ira_line.amount)
|
self.assertPayrollEqual(er_ira_line.amount, ira_line.amount)
|
||||||
common.process_payslip(payslip)
|
common.process_payslip(payslip)
|
||||||
|
|
||||||
# Payslip 2 - 3.5k
|
# Payslip 2 - 3.5k
|
||||||
@@ -104,7 +104,7 @@ class TestUsPayslip(common.TestUsPayslip):
|
|||||||
self.assertPayrollEqual(ira_line.amount, -(self.EE_LIMIT-(wage * rate / 100.0)))
|
self.assertPayrollEqual(ira_line.amount, -(self.EE_LIMIT-(wage * rate / 100.0)))
|
||||||
er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH')
|
er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH')
|
||||||
self.assertTrue(er_ira_line)
|
self.assertTrue(er_ira_line)
|
||||||
self.assertPayrollEqual(er_ira_line.amount, -ira_line.amount)
|
self.assertPayrollEqual(er_ira_line.amount, ira_line.amount)
|
||||||
common.process_payslip(payslip)
|
common.process_payslip(payslip)
|
||||||
|
|
||||||
# Payslip 3 - 0 (over limit)
|
# Payslip 3 - 0 (over limit)
|
||||||
@@ -124,7 +124,7 @@ class TestUsPayslip(common.TestUsPayslip):
|
|||||||
self.assertPayrollEqual(ira_line.amount, -self.EE_LIMIT_CATCHUP)
|
self.assertPayrollEqual(ira_line.amount, -self.EE_LIMIT_CATCHUP)
|
||||||
er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH')
|
er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH')
|
||||||
self.assertTrue(er_ira_line)
|
self.assertTrue(er_ira_line)
|
||||||
self.assertPayrollEqual(er_ira_line.amount, -ira_line.amount)
|
self.assertPayrollEqual(er_ira_line.amount, ira_line.amount)
|
||||||
common.process_payslip(payslip)
|
common.process_payslip(payslip)
|
||||||
|
|
||||||
# Note that the company limit is higher than what is possible by 'match'
|
# Note that the company limit is higher than what is possible by 'match'
|
||||||
|
|||||||
Reference in New Issue
Block a user