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)