diff --git a/l10n_us_hr_payroll/data/base.xml b/l10n_us_hr_payroll/data/base.xml
index 6bd03f57..09172433 100644
--- a/l10n_us_hr_payroll/data/base.xml
+++ b/l10n_us_hr_payroll/data/base.xml
@@ -36,4 +36,29 @@
+
+
+
+
+
+ Deduction: Federal Income Tax Exempt
+ DED_US_FIT_EXEMPT
+
+
+
+
+
+
+ Deduction: FICA Exempt
+ DED_FICA_EXEMPT
+
+
+
+
+
+ Deduction: FUTA Exempt
+ DED_FUTA_EXEMPT
+
+
+
\ No newline at end of file
diff --git a/l10n_us_hr_payroll/data/federal/fed_940_futa_rules.xml b/l10n_us_hr_payroll/data/federal/fed_940_futa_rules.xml
index 5b315100..6a153efb 100644
--- a/l10n_us_hr_payroll/data/federal/fed_940_futa_rules.xml
+++ b/l10n_us_hr_payroll/data/federal/fed_940_futa_rules.xml
@@ -11,12 +11,6 @@
-
-
- WAGE: Federal 940 FUTA Exempt
- WAGE_US_940_FUTA_EXEMPT
-
-
diff --git a/l10n_us_hr_payroll/data/federal/fed_941_fica_rules.xml b/l10n_us_hr_payroll/data/federal/fed_941_fica_rules.xml
index 324958a4..64c91607 100644
--- a/l10n_us_hr_payroll/data/federal/fed_941_fica_rules.xml
+++ b/l10n_us_hr_payroll/data/federal/fed_941_fica_rules.xml
@@ -17,12 +17,6 @@
-
-
- WAGE: Federal 941 FICA Exempt
- WAGE_US_941_FICA_EXEMPT
-
-
diff --git a/l10n_us_hr_payroll/data/federal/fed_941_fit_rules.xml b/l10n_us_hr_payroll/data/federal/fed_941_fit_rules.xml
index a7751adf..4e3cb28c 100644
--- a/l10n_us_hr_payroll/data/federal/fed_941_fit_rules.xml
+++ b/l10n_us_hr_payroll/data/federal/fed_941_fit_rules.xml
@@ -1,10 +1,5 @@
-
-
- WAGE: Federal 941 Income Tax Exempt
- WAGE_US_941_FIT_EXEMPT
-
EE: Federal 941 Income Tax Withholding
diff --git a/l10n_us_hr_payroll/models/federal/fed_940.py b/l10n_us_hr_payroll/models/federal/fed_940.py
index 1cf042c7..7dafd750 100644
--- a/l10n_us_hr_payroll/models/federal/fed_940.py
+++ b/l10n_us_hr_payroll/models/federal/fed_940.py
@@ -3,7 +3,7 @@
def er_us_940_futa(payslip, categories, worked_days, inputs):
"""
Returns FUTA eligible wage and rate.
- WAGE = GROSS - WAGE_US_940_FUTA_EXEMPT
+ WAGE = GROSS + DED_FUTA_EXEMPT
:return: result, result_rate (wage, percent)
"""
@@ -19,13 +19,13 @@ def er_us_940_futa(payslip, categories, worked_days, inputs):
# Determine Wage
year = payslip.dict.get_year()
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year+1) + '-01-01')
- ytd_wage -= payslip.sum_category('WAGE_US_940_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
+ ytd_wage += payslip.sum_category('DED_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
ytd_wage += payslip.contract_id.external_wages
wage_base = payslip.rule_parameter('fed_940_futa_wage_base')
remaining = wage_base - ytd_wage
- wage = categories.GROSS - categories.WAGE_US_940_FUTA_EXEMPT
+ wage = categories.GROSS + categories.DED_FUTA_EXEMPT
if remaining < 0.0:
result = 0.0
diff --git a/l10n_us_hr_payroll/models/federal/fed_941.py b/l10n_us_hr_payroll/models/federal/fed_941.py
index e6288f88..256c67c1 100644
--- a/l10n_us_hr_payroll/models/federal/fed_941.py
+++ b/l10n_us_hr_payroll/models/federal/fed_941.py
@@ -7,7 +7,7 @@
def ee_us_941_fica_ss(payslip, categories, worked_days, inputs):
"""
Returns FICA Social Security eligible wage and rate.
- WAGE = GROSS - WAGE_US_941_FICA_EXEMPT
+ WAGE = GROSS + DED_FICA_EXEMPT
:return: result, result_rate (wage, percent)
"""
exempt = payslip.contract_id.us_payroll_config_value('fed_941_fica_exempt')
@@ -20,13 +20,13 @@ def ee_us_941_fica_ss(payslip, categories, worked_days, inputs):
# Determine Wage
year = payslip.dict.get_year()
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year+1) + '-01-01')
- ytd_wage -= payslip.sum_category('WAGE_US_941_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
+ ytd_wage += payslip.sum_category('DED_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
ytd_wage += payslip.contract_id.external_wages
wage_base = payslip.rule_parameter('fed_941_fica_ss_wage_base')
remaining = wage_base - ytd_wage
- wage = categories.GROSS - categories.WAGE_US_941_FICA_EXEMPT
+ wage = categories.GROSS + categories.DED_FICA_EXEMPT
if remaining < 0.0:
result = 0.0
@@ -44,7 +44,7 @@ er_us_941_fica_ss = ee_us_941_fica_ss
def ee_us_941_fica_m(payslip, categories, worked_days, inputs):
"""
Returns FICA Medicare eligible wage and rate.
- WAGE = GROSS - WAGE_US_941_FICA_EXEMPT
+ WAGE = GROSS + DED_FICA_EXEMPT
:return: result, result_rate (wage, percent)
"""
exempt = payslip.contract_id.us_payroll_config_value('fed_941_fica_exempt')
@@ -57,13 +57,13 @@ def ee_us_941_fica_m(payslip, categories, worked_days, inputs):
# Determine Wage
year = payslip.dict.get_year()
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year+1) + '-01-01')
- ytd_wage -= payslip.sum_category('WAGE_US_941_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
+ ytd_wage += payslip.sum_category('DED_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
ytd_wage += payslip.contract_id.external_wages
wage_base = float(payslip.rule_parameter('fed_941_fica_m_wage_base')) # inf
remaining = wage_base - ytd_wage
- wage = categories.GROSS - categories.WAGE_US_941_FICA_EXEMPT
+ wage = categories.GROSS + categories.DED_FICA_EXEMPT
if remaining < 0.0:
result = 0.0
@@ -95,13 +95,13 @@ def ee_us_941_fica_m_add(payslip, categories, worked_days, inputs):
# Determine Wage
year = payslip.dict.get_year()
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year+1) + '-01-01')
- ytd_wage -= payslip.sum_category('WAGE_US_941_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
+ ytd_wage += payslip.sum_category('DED_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
ytd_wage += payslip.contract_id.external_wages
wage_start = payslip.rule_parameter('fed_941_fica_m_add_wage_start')
existing_wage = ytd_wage - wage_start
- wage = categories.GROSS - categories.WAGE_US_941_FICA_EXEMPT
+ wage = categories.GROSS + categories.DED_FICA_EXEMPT
if existing_wage >= 0.0:
result = wage
@@ -117,7 +117,7 @@ def ee_us_941_fica_m_add(payslip, categories, worked_days, inputs):
def ee_us_941_fit(payslip, categories, worked_days, inputs):
"""
Returns Wage and rate that is computed given the amount to withhold.
- WAGE = GROSS - WAGE_US_941_FIT_EXEMPT
+ WAGE = GROSS + DED_FIT_EXEMPT
:return: result, result_rate (wage, percent)
"""
filing_status = payslip.contract_id.us_payroll_config_value('fed_941_fit_w4_filing_status')
@@ -125,7 +125,7 @@ def ee_us_941_fit(payslip, categories, worked_days, inputs):
return 0.0, 0.0
schedule_pay = payslip.contract_id.schedule_pay
- wage = categories.GROSS - categories.WAGE_US_941_FIT_EXEMPT
+ wage = categories.GROSS + categories.DED_FIT_EXEMPT
#_logger.warn('initial gross wage: ' + str(wage))
year = payslip.dict.get_year()
if year >= 2020:
diff --git a/l10n_us_hr_payroll/models/state/ga_georgia.py b/l10n_us_hr_payroll/models/state/ga_georgia.py
index 42c24cd4..1ea2d560 100644
--- a/l10n_us_hr_payroll/models/state/ga_georgia.py
+++ b/l10n_us_hr_payroll/models/state/ga_georgia.py
@@ -6,7 +6,7 @@ from .general import _state_applies
def ga_georgia_state_income_withholding(payslip, categories, worked_days, inputs):
"""
Returns SIT eligible wage and rate.
- WAGE = GROSS - WAGE_US_941_FIT_EXEMPT
+ WAGE = GROSS + DED_FIT_EXEMPT
:return: result, result_rate (wage, percent)
"""
@@ -18,7 +18,7 @@ def ga_georgia_state_income_withholding(payslip, categories, worked_days, inputs
return 0.0, 0.0
# Determine Wage
- wage = categories.GROSS - categories.WAGE_US_941_FIT_EXEMPT
+ wage = categories.GROSS + categories.DED_FIT_EXEMPT
schedule_pay = payslip.contract_id.schedule_pay
additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
dependent_allowances = payslip.contract_id.us_payroll_config_value('ga_g4_sit_dependent_allowances')
diff --git a/l10n_us_hr_payroll/models/state/general.py b/l10n_us_hr_payroll/models/state/general.py
index c10133fb..b2ec4c7a 100644
--- a/l10n_us_hr_payroll/models/state/general.py
+++ b/l10n_us_hr_payroll/models/state/general.py
@@ -74,7 +74,7 @@ def _general_rate(payslip, wage, ytd_wage, wage_base=None, wage_start=None, rate
def general_state_unemployment(payslip, categories, worked_days, inputs, wage_base=None, wage_start=None, rate=None, state_code=None):
"""
Returns SUTA eligible wage and rate.
- WAGE = GROSS - WAGE_US_940_FUTA_EXEMPT
+ WAGE = GROSS + DED_FUTA_EXEMPT
The contract's `futa_type` determines if SUTA should be collected.
@@ -91,17 +91,17 @@ def general_state_unemployment(payslip, categories, worked_days, inputs, wage_ba
# Determine Wage
year = payslip.dict.get_year()
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year + 1) + '-01-01')
- ytd_wage -= payslip.sum_category('WAGE_US_940_FUTA_EXEMPT', str(year) + '-01-01', str(year + 1) + '-01-01')
+ ytd_wage += payslip.sum_category('DED_FUTA_EXEMPT', str(year) + '-01-01', str(year + 1) + '-01-01')
ytd_wage += payslip.contract_id.external_wages
- wage = categories.GROSS - categories.WAGE_US_940_FUTA_EXEMPT
+ wage = categories.GROSS + categories.DED_FUTA_EXEMPT
return _general_rate(payslip, wage, ytd_wage, wage_base=wage_base, wage_start=wage_start, rate=rate)
def general_state_income_withholding(payslip, categories, worked_days, inputs, wage_base=None, wage_start=None, rate=None, state_code=None):
"""
Returns SIT eligible wage and rate.
- WAGE = GROSS - WAGE_US_941_FIT_EXEMPT
+ WAGE = GROSS + DED_FIT_EXEMPT
:return: result, result_rate (wage, percent)
"""
@@ -114,10 +114,10 @@ def general_state_income_withholding(payslip, categories, worked_days, inputs, w
# Determine Wage
year = payslip.dict.get_year()
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year + 1) + '-01-01')
- ytd_wage -= payslip.sum_category('WAGE_US_941_FIT_EXEMPT', str(year) + '-01-01', str(year + 1) + '-01-01')
+ ytd_wage += payslip.sum_category('DED_FIT_EXEMPT', str(year) + '-01-01', str(year + 1) + '-01-01')
ytd_wage += payslip.contract_id.external_wages
- wage = categories.GROSS - categories.WAGE_US_941_FIT_EXEMPT
+ wage = categories.GROSS + categories.DED_FIT_EXEMPT
result, result_rate = _general_rate(payslip, wage, ytd_wage, wage_base=wage_base, wage_start=wage_start, rate=rate)
additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
if additional:
diff --git a/l10n_us_hr_payroll/models/state/ms_mississippi.py b/l10n_us_hr_payroll/models/state/ms_mississippi.py
index dfd9872a..cda417cf 100644
--- a/l10n_us_hr_payroll/models/state/ms_mississippi.py
+++ b/l10n_us_hr_payroll/models/state/ms_mississippi.py
@@ -6,7 +6,7 @@ from .general import _state_applies
def ms_mississippi_state_income_withholding(payslip, categories, worked_days, inputs):
"""
Returns SIT eligible wage and rate.
- WAGE = GROSS - WAGE_US_941_FIT_EXEMPT
+ WAGE = GROSS + DED_FIT_EXEMPT
:return: result, result_rate (wage, percent)
"""
@@ -19,7 +19,7 @@ def ms_mississippi_state_income_withholding(payslip, categories, worked_days, in
return 0.0, 0.0
# Determine Wage
- wage = categories.GROSS - categories.WAGE_US_941_FIT_EXEMPT
+ wage = categories.GROSS + categories.DED_FIT_EXEMPT
if wage == 0.0:
return 0.0, 0.0
diff --git a/l10n_us_hr_payroll/models/state/mt_montana.py b/l10n_us_hr_payroll/models/state/mt_montana.py
index 742d7607..b89c692f 100644
--- a/l10n_us_hr_payroll/models/state/mt_montana.py
+++ b/l10n_us_hr_payroll/models/state/mt_montana.py
@@ -6,7 +6,7 @@ from .general import _state_applies
def mt_montana_state_income_withholding(payslip, categories, worked_days, inputs):
"""
Returns SIT eligible wage and rate.
- WAGE = GROSS - WAGE_US_941_FIT_EXEMPT
+ WAGE = GROSS + DED_FIT_EXEMPT
:return: result, result_rate (wage, percent)
"""
@@ -18,7 +18,7 @@ def mt_montana_state_income_withholding(payslip, categories, worked_days, inputs
return 0.0, 0.0
# Determine Wage
- wage = categories.GROSS - categories.WAGE_US_941_FIT_EXEMPT
+ wage = categories.GROSS + categories.DED_FIT_EXEMPT
schedule_pay = payslip.contract_id.schedule_pay
additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
exemptions = payslip.contract_id.us_payroll_config_value('mt_mw4_sit_exemptions')
diff --git a/l10n_us_hr_payroll/models/state/oh_ohio.py b/l10n_us_hr_payroll/models/state/oh_ohio.py
index ed4ca8e2..24e7cc9f 100644
--- a/l10n_us_hr_payroll/models/state/oh_ohio.py
+++ b/l10n_us_hr_payroll/models/state/oh_ohio.py
@@ -6,7 +6,7 @@ from .general import _state_applies
def oh_ohio_state_income_withholding(payslip, categories, worked_days, inputs):
"""
Returns SIT eligible wage and rate.
- WAGE = GROSS - WAGE_US_941_FIT_EXEMPT
+ WAGE = GROSS + DED_FIT_EXEMPT
:return: result, result_rate (wage, percent)
"""
@@ -18,7 +18,7 @@ def oh_ohio_state_income_withholding(payslip, categories, worked_days, inputs):
return 0.0, 0.0
# Determine Wage
- wage = categories.GROSS - categories.WAGE_US_941_FIT_EXEMPT
+ wage = categories.GROSS + categories.DED_FIT_EXEMPT
pay_periods = payslip.dict.get_pay_periods_in_year()
additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
exemptions = payslip.contract_id.us_payroll_config_value('oh_it4_sit_exemptions')
diff --git a/l10n_us_hr_payroll/models/state/va_virginia.py b/l10n_us_hr_payroll/models/state/va_virginia.py
index 163ba0c3..018e56a3 100644
--- a/l10n_us_hr_payroll/models/state/va_virginia.py
+++ b/l10n_us_hr_payroll/models/state/va_virginia.py
@@ -6,7 +6,7 @@ from .general import _state_applies
def va_virginia_state_income_withholding(payslip, categories, worked_days, inputs):
"""
Returns SIT eligible wage and rate.
- WAGE = GROSS - WAGE_US_941_FIT_EXEMPT
+ WAGE = GROSS + DED_FIT_EXEMPT
:return: result, result_rate (wage, percent)
"""
@@ -18,7 +18,7 @@ def va_virginia_state_income_withholding(payslip, categories, worked_days, input
return 0.0, 0.0
# Determine Wage
- wage = categories.GROSS - categories.WAGE_US_941_FIT_EXEMPT
+ wage = categories.GROSS + categories.DED_FIT_EXEMPT
pay_periods = payslip.dict.get_pay_periods_in_year()
additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
personal_exemptions = payslip.contract_id.us_payroll_config_value('va_va4_sit_exemptions')