From b409dba9103a2567a47c5c9da1c1cdbbfa48593f Mon Sep 17 00:00:00 2001
From: Jared Kipe
Date: Tue, 7 Jan 2020 16:06:31 -0800
Subject: [PATCH] IMP `l10n_us_hr_payroll` Implement generic state income tax
exempt and additional fields. Include in PA Tests and State Form section.
---
l10n_us_hr_payroll/data/state/pa_pennsylvania.xml | 6 +++---
l10n_us_hr_payroll/models/state/general.py | 12 ++++++++----
l10n_us_hr_payroll/models/us_payroll_config.py | 2 ++
.../tests/test_us_pa_pennsylvania_payslip_2020.py | 12 ++++++++++++
l10n_us_hr_payroll/views/us_payroll_config_views.xml | 4 ++++
5 files changed, 29 insertions(+), 7 deletions(-)
diff --git a/l10n_us_hr_payroll/data/state/pa_pennsylvania.xml b/l10n_us_hr_payroll/data/state/pa_pennsylvania.xml
index 53312b39..f46a92b4 100644
--- a/l10n_us_hr_payroll/data/state/pa_pennsylvania.xml
+++ b/l10n_us_hr_payroll/data/state/pa_pennsylvania.xml
@@ -90,7 +90,7 @@
- ER: US PA Pennsylvania State Unemployment (RT-6)
+ ER: US PA Pennsylvania State Unemployment (UC-2)
ER_US_PA_SUTA
python
result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_pa_suta_wage_base', rate='us_pa_suta_rate', state_code='PA')
@@ -104,7 +104,7 @@
- EE: US PA Pennsylvania State Unemployment (RT-6)
+ EE: US PA Pennsylvania State Unemployment (UC-2)
EE_US_PA_SUTA
python
result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, rate='us_pa_suta_ee_rate', state_code='PA')
@@ -118,7 +118,7 @@
- EE: US PA Pennsylvania State Income Tax Withholding
+ EE: US PA Pennsylvania State Income Tax Withholding (PA-501)
EE_US_PA_SIT
python
result, _ = general_state_income_withholding(payslip, categories, worked_days, inputs, rate='us_pa_sit_rate', state_code='PA')
diff --git a/l10n_us_hr_payroll/models/state/general.py b/l10n_us_hr_payroll/models/state/general.py
index 0185aea8..eff29da8 100644
--- a/l10n_us_hr_payroll/models/state/general.py
+++ b/l10n_us_hr_payroll/models/state/general.py
@@ -99,14 +99,12 @@ def general_state_income_withholding(payslip, categories, worked_days, inputs, w
Returns SUTA eligible wage and rate.
WAGE = GROSS - WAGE_US_941_FIT_EXEMPT
- The Federal Income Tax Filing status (W4) is used for Exemption.
-
:return: result, result_rate (wage, percent)
"""
if not _state_applies(payslip, state_code):
return 0.0, 0.0
- if not payslip.contract_id.us_payroll_config_value('fed_941_fit_w4_filing_status'):
+ if payslip.contract_id.us_payroll_config_value('state_income_tax_exempt'):
return 0.0, 0.0
# Determine Wage
@@ -116,4 +114,10 @@ def general_state_income_withholding(payslip, categories, worked_days, inputs, w
ytd_wage += payslip.contract_id.external_wages
wage = categories.GROSS - categories.WAGE_US_941_FIT_EXEMPT
- return _general_rate(payslip, wage, ytd_wage, wage_base=wage_base, wage_start=wage_start, rate=rate)
+ result, result_rate = _general_rate(payslip, wage, ytd_wage, wage_base=wage_base, wage_start=wage_start, rate=rate)
+ additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
+ if additional:
+ tax = result * (result_rate / 100.0)
+ tax -= additional # assumed result_rate is negative and that the 'additional' should increase it.
+ return result, ((tax / result) * 100.0)
+ return result, result_rate
diff --git a/l10n_us_hr_payroll/models/us_payroll_config.py b/l10n_us_hr_payroll/models/us_payroll_config.py
index d87ebcac..e75b5210 100644
--- a/l10n_us_hr_payroll/models/us_payroll_config.py
+++ b/l10n_us_hr_payroll/models/us_payroll_config.py
@@ -15,6 +15,8 @@ class HRContractUSPayrollConfig(models.Model):
employee_id = fields.Many2one('hr.employee', string="Employee", required=True)
state_id = fields.Many2one('res.country.state', string="Applied State")
state_code = fields.Char(related='state_id.code')
+ state_income_tax_exempt = fields.Boolean(string='State Income Tax Exempt')
+ state_income_tax_additional_withholding = fields.Float(string='State Income Tax Additional Withholding')
fed_940_type = fields.Selection([
(FUTA_TYPE_EXEMPT, 'Exempt (0%)'),
diff --git a/l10n_us_hr_payroll/tests/test_us_pa_pennsylvania_payslip_2020.py b/l10n_us_hr_payroll/tests/test_us_pa_pennsylvania_payslip_2020.py
index 9433e805..3dd3fd27 100755
--- a/l10n_us_hr_payroll/tests/test_us_pa_pennsylvania_payslip_2020.py
+++ b/l10n_us_hr_payroll/tests/test_us_pa_pennsylvania_payslip_2020.py
@@ -29,3 +29,15 @@ class TestUsPAPayslip(TestUsPayslip):
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
+
+ # Test Additional
+ contract.us_payroll_config_id.state_income_tax_additional_withholding = 100.0
+ payslip.compute_sheet()
+ cats = self._getCategories(payslip)
+ self.assertPayrollEqual(cats['EE_US_SIT'], wh - 100.0)
+
+ # Test Exempt
+ contract.us_payroll_config_id.state_income_tax_exempt = True
+ payslip.compute_sheet()
+ cats = self._getCategories(payslip)
+ self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), 0.0)
diff --git a/l10n_us_hr_payroll/views/us_payroll_config_views.xml b/l10n_us_hr_payroll/views/us_payroll_config_views.xml
index e7ae0338..701920b3 100644
--- a/l10n_us_hr_payroll/views/us_payroll_config_views.xml
+++ b/l10n_us_hr_payroll/views/us_payroll_config_views.xml
@@ -44,6 +44,10 @@
No additional fields.
+
+
+
+