diff --git a/hr_workers_comp_payroll/__manifest__.py b/hr_workers_comp_payroll/__manifest__.py index f3aebf27..0bdaaa76 100755 --- a/hr_workers_comp_payroll/__manifest__.py +++ b/hr_workers_comp_payroll/__manifest__.py @@ -4,7 +4,7 @@ 'license': 'AGPL-3', 'category': 'Human Resources', 'depends': [ - 'hr_contract', + 'hr_payroll', 'hr_workers_comp', ], 'version': '11.0.0.0.0', diff --git a/l10n_us_hr_payroll/__manifest__.py b/l10n_us_hr_payroll/__manifest__.py index d9201dff..50ab5121 100755 --- a/l10n_us_hr_payroll/__manifest__.py +++ b/l10n_us_hr_payroll/__manifest__.py @@ -5,7 +5,7 @@ 'license': 'AGPL-3', 'category': 'Localization', 'depends': ['hr_payroll'], - 'version': '11.0.2017.0.0', + 'version': '11.0.2018.1.0', 'description': """ USA Payroll Rules. ================== diff --git a/l10n_us_hr_payroll/data/rules_2018.xml b/l10n_us_hr_payroll/data/rules_2018.xml index a774ae09..8eb537ac 100755 --- a/l10n_us_hr_payroll/data/rules_2018.xml +++ b/l10n_us_hr_payroll/data/rules_2018.xml @@ -10,7 +10,7 @@ FICA Employee Social Security Wages (2018) FICA_EMP_SS_WAGES_2018 python - result = (payslip.date_to[:4] == '2018') + result = (payslip.date_to[:4] == '2018') and not contract.fica_exempt code ### @@ -32,7 +32,7 @@ else: FICA Employee Medicare Wages (2018) FICA_EMP_M_WAGES_2018 python - result = (payslip.date_to[:4] == '2018') + result = (payslip.date_to[:4] == '2018') and not contract.fica_exempt code result = categories.GROSS @@ -43,7 +43,7 @@ else: FICA Employee Medicare Additional Wages (2018) FICA_EMP_M_ADD_WAGES_2018 python - result = (payslip.date_to[:4] == '2018') + result = (payslip.date_to[:4] == '2018') and not contract.fica_exempt code ### diff --git a/l10n_us_hr_payroll/l10n_us_hr_payroll.py b/l10n_us_hr_payroll/l10n_us_hr_payroll.py index 68099b6e..a60fe555 100755 --- a/l10n_us_hr_payroll/l10n_us_hr_payroll.py +++ b/l10n_us_hr_payroll/l10n_us_hr_payroll.py @@ -26,6 +26,8 @@ class USHrContract(models.Model): external_wages = fields.Float(string='External Existing Wages', default=0.0) + fica_exempt = fields.Boolean(string='FICA Exempt', help="Exempt from Social Security and " + "Medicare e.g. F1 Student Visa") futa_type = fields.Selection([ (FUTA_TYPE_EXEMPT, 'Exempt (0%)'), (FUTA_TYPE_NORMAL, 'Normal Net Rate (0.6%)'), diff --git a/l10n_us_hr_payroll/l10n_us_hr_payroll_view.xml b/l10n_us_hr_payroll/l10n_us_hr_payroll_view.xml index 962c0909..257508bc 100755 --- a/l10n_us_hr_payroll/l10n_us_hr_payroll_view.xml +++ b/l10n_us_hr_payroll/l10n_us_hr_payroll_view.xml @@ -20,6 +20,7 @@ + diff --git a/l10n_us_hr_payroll/tests/test_us_payslip_2018.py b/l10n_us_hr_payroll/tests/test_us_payslip_2018.py index 9e676218..341dd803 100755 --- a/l10n_us_hr_payroll/tests/test_us_payslip_2018.py +++ b/l10n_us_hr_payroll/tests/test_us_payslip_2018.py @@ -342,3 +342,27 @@ class TestUsPayslip2018(TestUsPayslip): if 'FED_INC_WITHHOLD' in cats: fed_inc_withhold = cats['FED_INC_WITHHOLD'] self.assertPayrollEqual(fed_inc_withhold, 0.0) + + def test_2018_taxes_with_fica_exempt(self): + salary = 6000.0 + schedule_pay = 'bi-weekly' + w4_allowances = 2 + employee = self._createEmployee() + contract = self._createContract(employee, salary, schedule_pay, w4_allowances) + contract.fica_exempt = True + + self._log('2018 tax w4 exempt payslip:') + payslip = self._createPayslip(employee, '2018-01-01', '2018-01-31') + + payslip.compute_sheet() + + cats = self._getCategories(payslip) + + ss_wages = cats.get('FICA_EMP_SS_WAGES', 0.0) + med_wages = cats.get('FICA_EMP_M_WAGES', 0.0) + ss = cats.get('FICA_EMP_SS', 0.0) + med = cats.get('FICA_EMP_M', 0.0) + self.assertPayrollEqual(ss_wages, 0.0) + self.assertPayrollEqual(med_wages, 0.0) + self.assertPayrollEqual(ss, 0.0) + self.assertPayrollEqual(med, 0.0)