diff --git a/l10n_us_hr_payroll/data/state/sc_south_carolina.xml b/l10n_us_hr_payroll/data/state/sc_south_carolina.xml
index 95867646..b2a46192 100644
--- a/l10n_us_hr_payroll/data/state/sc_south_carolina.xml
+++ b/l10n_us_hr_payroll/data/state/sc_south_carolina.xml
@@ -31,8 +31,9 @@
+
- 1.09
+ 0.55
@@ -56,6 +57,7 @@
+
[
( 2620, 0.8, 0.0),
diff --git a/l10n_us_hr_payroll/models/state/sc_south_carolina.py b/l10n_us_hr_payroll/models/state/sc_south_carolina.py
index 169961eb..e877f8f9 100644
--- a/l10n_us_hr_payroll/models/state/sc_south_carolina.py
+++ b/l10n_us_hr_payroll/models/state/sc_south_carolina.py
@@ -24,6 +24,7 @@ def sc_south_carolina_state_income_withholding(payslip, categories, worked_days,
return 0.0, 0.0
pay_periods = payslip.dict.get_pay_periods_in_year()
+ additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
allowances = payslip.contract_id.us_payroll_config_value('sc_w4_sit_allowances')
tax_rate = payslip.rule_parameter('us_sc_sit_tax_rate')
personal_exemption = payslip.rule_parameter('us_sc_sit_personal_exemption_rate')
@@ -45,4 +46,5 @@ def sc_south_carolina_state_income_withholding(payslip, categories, worked_days,
withholding = (taxable_income * (rate / 100.0) - flat_amt)
break
withholding /= pay_periods
+ withholding += additional
return wage, -((withholding / wage) * 100.0)
diff --git a/l10n_us_hr_payroll/tests/test_us_sc_south_carolina_payslip_2020.py b/l10n_us_hr_payroll/tests/test_us_sc_south_carolina_payslip_2020.py
index e17a8052..170c3bf5 100644
--- a/l10n_us_hr_payroll/tests/test_us_sc_south_carolina_payslip_2020.py
+++ b/l10n_us_hr_payroll/tests/test_us_sc_south_carolina_payslip_2020.py
@@ -9,14 +9,15 @@ class TestUsSCPayslip(TestUsPayslip):
# 2020 Taxes and Rates
###
SC_UNEMP_MAX_WAGE = 14000.0
- SC_UNEMP = 1.09
+ SC_UNEMP = 0.55
# Calculation based on https://dor.sc.gov/forms-site/Forms/WH1603F_2020.pdf
- def _test_sit(self, wage, exempt, allowances, schedule_pay, date_start, expected_withholding):
+ def _test_sit(self, wage, additional_withholding, exempt, allowances, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('SC'),
+ state_income_tax_additional_withholding=additional_withholding,
state_income_tax_exempt=exempt,
sc_w4_sit_allowances=allowances,
schedule_pay=schedule_pay)
@@ -25,10 +26,11 @@ class TestUsSCPayslip(TestUsPayslip):
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
- self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
+ self.assertPayrollAlmostEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2020_taxes_example(self):
self._test_er_suta('SC', self.SC_UNEMP, date(2020, 1, 1), wage_base=self.SC_UNEMP_MAX_WAGE)
- self._test_sit(750.0, False, 3.0, 'weekly', date(2020, 1, 1), 28.73)
- self._test_sit(800.0, True, 0.0, 'weekly', date(2020, 1, 1), 0.00)
- self._test_sit(9000.0, False, 0.0, 'monthly', date(2020, 1, 1), 594.61)
+ self._test_sit(750.0, 0.0, False, 3.0, 'weekly', date(2020, 1, 1), 28.73)
+ self._test_sit(800.0, 0.0, True, 0.0, 'weekly', date(2020, 1, 1), 0.00)
+ self._test_sit(9000.0, 0.0, False, 0.0, 'monthly', date(2020, 1, 1), 594.61)
+ self._test_sit(5000.0, 10.0, False, 2.0, 'semi-monthly', date(2020, 1, 1), 316.06)
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 8c05dbd3..5a2c6da1 100644
--- a/l10n_us_hr_payroll/views/us_payroll_config_views.xml
+++ b/l10n_us_hr_payroll/views/us_payroll_config_views.xml
@@ -247,6 +247,7 @@
Form SC W-4 - State Income Tax
+