From 72f4aebca24aaba2172d5bd30e0b80a6b560d177 Mon Sep 17 00:00:00 2001 From: Bhoomi Vaishnani Date: Mon, 17 Feb 2020 13:10:01 -0500 Subject: [PATCH] IMP `l10n_us_hr_payroll` Port `l10n_us_ak_hr_payroll` AK Alaska including migration --- l10n_us_hr_payroll/__manifest__.py | 1 + l10n_us_hr_payroll/data/final.xml | 3 + l10n_us_hr_payroll/data/state/ak_alaska.xml | 88 +++++++++++++++++++ l10n_us_hr_payroll/migrations/data.py | 10 +++ l10n_us_hr_payroll/tests/__init__.py | 3 + .../tests/test_us_ak_alaska_payslip_2019.py | 61 +++++++++++++ .../tests/test_us_ak_alaska_payslip_2020.py | 15 ++++ 7 files changed, 181 insertions(+) create mode 100644 l10n_us_hr_payroll/data/state/ak_alaska.xml create mode 100644 l10n_us_hr_payroll/tests/test_us_ak_alaska_payslip_2019.py create mode 100644 l10n_us_hr_payroll/tests/test_us_ak_alaska_payslip_2020.py diff --git a/l10n_us_hr_payroll/__manifest__.py b/l10n_us_hr_payroll/__manifest__.py index 41d93477..f331885a 100755 --- a/l10n_us_hr_payroll/__manifest__.py +++ b/l10n_us_hr_payroll/__manifest__.py @@ -28,6 +28,7 @@ USA Payroll Rules. 'data/federal/fed_941_fica_rules.xml', 'data/federal/fed_941_fit_parameters.xml', 'data/federal/fed_941_fit_rules.xml', + 'data/state/ak_alaska.xml', 'data/state/ar_arkansas.xml', 'data/state/az_arizona.xml', 'data/state/fl_florida.xml', diff --git a/l10n_us_hr_payroll/data/final.xml b/l10n_us_hr_payroll/data/final.xml index 23b5beef..4b1a0afc 100644 --- a/l10n_us_hr_payroll/data/final.xml +++ b/l10n_us_hr_payroll/data/final.xml @@ -16,6 +16,9 @@ ref('hr_payroll_rule_ee_fed_941_fit'), + ref('hr_payroll_rule_er_us_ak_suta'), + ref('hr_payroll_rule_ee_us_ak_suta'), + ref('hr_payroll_rule_er_us_ar_suta'), ref('hr_payroll_rule_ee_us_ar_sit'), diff --git a/l10n_us_hr_payroll/data/state/ak_alaska.xml b/l10n_us_hr_payroll/data/state/ak_alaska.xml new file mode 100644 index 00000000..cf0f747f --- /dev/null +++ b/l10n_us_hr_payroll/data/state/ak_alaska.xml @@ -0,0 +1,88 @@ + + + + + + US AK Alaska SUTA Wage Base + us_ak_suta_wage_base + 39900.00 + + + + US AK Alaska SUTA Wage Base + us_ak_suta_wage_base + 41500.00 + + + + + + + + US AK Alaska SUTA Rate + us_ak_suta_rate + 1.780 + + + + US AK Alaska SUTA Rate + us_ak_suta_rate + 1.590 + + + + + + + US AK Alaska SUTA Rate EE + us_ak_suta_ee_rate + 0.500 + + + + US AK Alaska SUTA Rate EE + us_ak_suta_ee_rate + 0.500 + + + + + + + US Alaska - Department of Labor and Workforce Development (ADLWD) - Unemployment Tax + + + US Alaska - Department of Labor and Workforce Development (ADLWD) - Unemployment Tax + + + + + + + + + + ER: US AK Alaska State Unemployment + ER_US_AK_SUTA + python + result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ak_suta_wage_base', rate='us_ak_suta_rate', state_code='AK') + code + result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ak_suta_wage_base', rate='us_ak_suta_rate', state_code='AK') + + + + + + + + EE: US AK Alaska State Unemployment (UC-2) + EE_US_AK_SUTA + python + result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ak_suta_wage_base', rate='us_ak_suta_ee_rate', state_code='AK') + code + result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ak_suta_wage_base', rate='us_ak_suta_ee_rate', state_code='AK') + + + + + \ No newline at end of file diff --git a/l10n_us_hr_payroll/migrations/data.py b/l10n_us_hr_payroll/migrations/data.py index e6077043..ff3f606a 100644 --- a/l10n_us_hr_payroll/migrations/data.py +++ b/l10n_us_hr_payroll/migrations/data.py @@ -79,6 +79,11 @@ XMLIDS_TO_REMOVE_2020 = [ 'l10n_us_hr_payroll.hr_payroll_rules_futa_wages_2018', 'l10n_us_hr_payroll.hr_payroll_rules_fed_inc_withhold_2018_married', # State + 'l10n_us_ak_hr_payroll.hr_payroll_ak_unemp_wages', + 'l10n_us_ak_hr_payroll.hr_payroll_ak_unemp', + 'l10n_us_ak_hr_payroll.hr_payroll_ak_unemp_ee', + 'l10n_us_ak_hr_payroll.hr_payroll_rules_ak_unemp_wages', + 'l10n_us_ar_hr_payroll.hr_payroll_ar_unemp_wages', 'l10n_us_ar_hr_payroll.hr_payroll_ar_unemp', 'l10n_us_ar_hr_payroll.hr_payroll_ar_income_withhold', @@ -208,6 +213,11 @@ XMLIDS_TO_RENAME_2020 = { 'l10n_us_hr_payroll.hr_payroll_rules_fica_comp_m': 'l10n_us_hr_payroll.hr_payroll_rule_er_fed_941_m', 'l10n_us_hr_payroll.hr_payroll_rules_fed_inc_withhold_2018_single': 'l10n_us_hr_payroll.hr_payroll_rule_ee_fed_941_fit', # State + 'l10n_us_ak_hr_payroll.res_partner_ak_dlwd_unemp': 'l10n_us_hr_payroll.res_partner_us_ak_dor', + 'l10n_us_ak_hr_payroll.contrib_register_ak_dlwd_unemp': 'l10n_us_hr_payroll.contrib_register_us_ak_dor', + 'l10n_us_ak_hr_payroll.hr_payroll_rules_ak_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_ak_suta', + 'l10n_us_ak_hr_payroll.hr_payroll_rules_ak_unemp_ee': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_ak_sit', + 'l10n_us_ar_hr_payroll.res_partner_ar_dws_unemp': 'l10n_us_hr_payroll.res_partner_us_ar_dor', 'l10n_us_ar_hr_payroll.res_partner_ar_dfa_withhold': 'l10n_us_hr_payroll.res_partner_us_ar_dor_sit', 'l10n_us_ar_hr_payroll.contrib_register_ar_dws_unemp': 'l10n_us_hr_payroll.contrib_register_us_ar_dor', diff --git a/l10n_us_hr_payroll/tests/__init__.py b/l10n_us_hr_payroll/tests/__init__.py index 7d4abae5..e5b8fa04 100755 --- a/l10n_us_hr_payroll/tests/__init__.py +++ b/l10n_us_hr_payroll/tests/__init__.py @@ -4,6 +4,9 @@ from . import common from . import test_us_payslip_2019 from . import test_us_payslip_2020 +from . import test_us_ak_alaska_payslip_2019 +from . import test_us_ak_alaska_payslip_2020 + from . import test_us_ar_arkansas_payslip_2019 from . import test_us_ar_arkansas_payslip_2020 diff --git a/l10n_us_hr_payroll/tests/test_us_ak_alaska_payslip_2019.py b/l10n_us_hr_payroll/tests/test_us_ak_alaska_payslip_2019.py new file mode 100644 index 00000000..3eb62184 --- /dev/null +++ b/l10n_us_hr_payroll/tests/test_us_ak_alaska_payslip_2019.py @@ -0,0 +1,61 @@ +# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. + +from .common import TestUsPayslip, process_payslip + + +class TestUsAKPayslip(TestUsPayslip): + # TAXES AND RATES + AK_UNEMP_MAX_WAGE = 39900.00 + AK_UNEMP = -(1.780 / 100.0) + AK_UNEMP_EE = -(0.5 / 100.0) + + def test_taxes_monthly_over_max(self): + salary = 50000.00 + schedule_pay = 'monthly' + + employee = self._createEmployee() + contract = self._createContract(employee, + wage=salary, + state_id=self.get_us_state('AK'), + state_income_tax_additional_withholding=0.0, + schedule_pay=schedule_pay) + + self._log('2019 Alaska tax first payslip monthly:') + payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31') + payslip.compute_sheet() + cats = self._getCategories(payslip) + + self.assertPayrollEqual(cats['ER_US_SUTA'], self.AK_UNEMP_MAX_WAGE * self.AK_UNEMP) + self.assertPayrollEqual(cats['EE_US_SUTA'], self.AK_UNEMP_MAX_WAGE * self.AK_UNEMP_EE) + + process_payslip(payslip) + + remaining_ak_unemp_wages = 0.00 # We already reached the maximum wage for unemployment insurance. + + self._log('2019 Alaska tax second payslip monthly:') + payslip = self._createPayslip(employee, '2019-02-01', '2019-02-28') + payslip.compute_sheet() + cats = self._getCategories(payslip) + + self.assertPayrollEqual(cats['ER_US_SUTA'], remaining_ak_unemp_wages * self.AK_UNEMP) # 0 + + def test_taxes_weekly_under_max(self): + salary = 5000.00 + schedule_pay = 'weekly' + + employee = self._createEmployee() + contract = self._createContract(employee, + wage=salary, + state_id=self.get_us_state('AK'), + state_income_tax_additional_withholding=0.0, + schedule_pay=schedule_pay) + + self._log('2019 Alaska tax first payslip weekly:') + payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31') + payslip.compute_sheet() + cats = self._getCategories(payslip) + + self.assertPayrollEqual(cats['ER_US_SUTA'], salary * self.AK_UNEMP) + self.assertPayrollEqual(cats['EE_US_SUTA'], salary * self.AK_UNEMP_EE) + + process_payslip(payslip) diff --git a/l10n_us_hr_payroll/tests/test_us_ak_alaska_payslip_2020.py b/l10n_us_hr_payroll/tests/test_us_ak_alaska_payslip_2020.py new file mode 100644 index 00000000..868a8dff --- /dev/null +++ b/l10n_us_hr_payroll/tests/test_us_ak_alaska_payslip_2020.py @@ -0,0 +1,15 @@ +# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. + +from datetime import date +from .common import TestUsPayslip + + +class TestUsAKPayslip(TestUsPayslip): + # TAXES AND RATES + AK_UNEMP_MAX_WAGE = 41500.00 + AK_UNEMP = 1.590 + AK_UNEMP_EE = 0.5 + + def test_2020_taxes(self): + self._test_er_suta('AK', self.AK_UNEMP, date(2020, 1, 1), wage_base=self.AK_UNEMP_MAX_WAGE) + self._test_ee_suta('AK', self.AK_UNEMP_EE, date(2020, 1, 1), wage_base=self.AK_UNEMP_MAX_WAGE)