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

+