mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
Merge branch 'mig/14.0/l10n_us_hr_payroll_401k' into '14.0'
mig/14.0/l10n_us_hr_payroll_401k into 14.0 See merge request hibou-io/hibou-odoo/suite!700
This commit is contained in:
1
hr_payroll_hibou/__init__.py
Normal file
1
hr_payroll_hibou/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import models
|
||||||
27
hr_payroll_hibou/__manifest__.py
Normal file
27
hr_payroll_hibou/__manifest__.py
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
{
|
||||||
|
'name': 'Hibou Payroll',
|
||||||
|
'author': 'Hibou Corp. <hello@hibou.io>',
|
||||||
|
'version': '14.0.1.0.0',
|
||||||
|
'category': 'Payroll Localization',
|
||||||
|
'depends': [
|
||||||
|
'hr_payroll',
|
||||||
|
'hr_contract_reports',
|
||||||
|
'hibou_professional',
|
||||||
|
],
|
||||||
|
'description': """
|
||||||
|
Hibou Payroll
|
||||||
|
=============
|
||||||
|
|
||||||
|
Base module for fixing specific qwerks or assumptions in the way Payroll Odoo Enterprise Edition behaves.
|
||||||
|
|
||||||
|
""",
|
||||||
|
'data': [
|
||||||
|
'views/res_config_settings_views.xml',
|
||||||
|
],
|
||||||
|
'demo': [
|
||||||
|
],
|
||||||
|
'auto_install': True,
|
||||||
|
'license': 'OPL-1',
|
||||||
|
}
|
||||||
4
hr_payroll_hibou/models/__init__.py
Normal file
4
hr_payroll_hibou/models/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
from . import browsable_object
|
||||||
|
from . import hr_payslip
|
||||||
|
from . import hr_salary_rule
|
||||||
|
from . import res_config_settings
|
||||||
151
hr_payroll_hibou/models/browsable_object.py
Normal file
151
hr_payroll_hibou/models/browsable_object.py
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from odoo import fields
|
||||||
|
from odoo.addons.hr_payroll.models import browsable_object
|
||||||
|
|
||||||
|
|
||||||
|
class BrowsableObject(object):
|
||||||
|
def __init__(self, employee_id, dict, env):
|
||||||
|
self.employee_id = employee_id
|
||||||
|
self.dict = dict
|
||||||
|
self.env = env
|
||||||
|
# Customization to allow changing the behavior of the discrete browsable objects.
|
||||||
|
# you can think of this as 'compiling' the query based on the configuration.
|
||||||
|
sum_field = env['ir.config_parameter'].sudo().get_param('hr_payroll.payslip.sum_behavior', 'date_from')
|
||||||
|
if sum_field == 'date' and 'date' not in env['hr.payslip']:
|
||||||
|
# missing attribute, closest by definition
|
||||||
|
sum_field = 'date_to'
|
||||||
|
if not sum_field:
|
||||||
|
sum_field = 'date_from'
|
||||||
|
self._compile_browsable_query(sum_field)
|
||||||
|
|
||||||
|
def __getattr__(self, attr):
|
||||||
|
return attr in self.dict and self.dict.__getitem__(attr) or 0.0
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
return self.dict[key] or 0.0
|
||||||
|
|
||||||
|
def _compile_browsable_query(self, sum_field):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class InputLine(BrowsableObject):
|
||||||
|
"""a class that will be used into the python code, mainly for usability purposes"""
|
||||||
|
def _compile_browsable_query(self, sum_field):
|
||||||
|
self.__browsable_query = """
|
||||||
|
SELECT sum(amount) as sum
|
||||||
|
FROM hr_payslip as hp, hr_payslip_input as pi
|
||||||
|
WHERE hp.employee_id = %s AND hp.state = 'done'
|
||||||
|
AND hp.{sum_field} >= %s AND hp.date_to <= %s AND hp.id = pi.payslip_id AND pi.code = %s""".format(sum_field=sum_field)
|
||||||
|
|
||||||
|
def sum(self, code, from_date, to_date=None):
|
||||||
|
if to_date is None:
|
||||||
|
to_date = fields.Date.today()
|
||||||
|
self.env.cr.execute(self.__browsable_query, (self.employee_id, from_date, to_date, code))
|
||||||
|
return self.env.cr.fetchone()[0] or 0.0
|
||||||
|
|
||||||
|
|
||||||
|
class WorkedDays(BrowsableObject):
|
||||||
|
"""a class that will be used into the python code, mainly for usability purposes"""
|
||||||
|
def _compile_browsable_query(self, sum_field):
|
||||||
|
self.__browsable_query = """
|
||||||
|
SELECT sum(number_of_days) as number_of_days, sum(number_of_hours) as number_of_hours
|
||||||
|
FROM hr_payslip as hp, hr_payslip_worked_days as pi
|
||||||
|
WHERE hp.employee_id = %s AND hp.state = 'done'
|
||||||
|
AND hp.{sum_field} >= %s AND hp.date_to <= %s AND hp.id = pi.payslip_id AND pi.code = %s""".format(sum_field=sum_field)
|
||||||
|
|
||||||
|
def _sum(self, code, from_date, to_date=None):
|
||||||
|
if to_date is None:
|
||||||
|
to_date = fields.Date.today()
|
||||||
|
self.env.cr.execute(self.__browsable_query, (self.employee_id, from_date, to_date, code))
|
||||||
|
return self.env.cr.fetchone()
|
||||||
|
|
||||||
|
def sum(self, code, from_date, to_date=None):
|
||||||
|
res = self._sum(code, from_date, to_date)
|
||||||
|
return res and res[0] or 0.0
|
||||||
|
|
||||||
|
def sum_hours(self, code, from_date, to_date=None):
|
||||||
|
res = self._sum(code, from_date, to_date)
|
||||||
|
return res and res[1] or 0.0
|
||||||
|
|
||||||
|
|
||||||
|
class Payslips(BrowsableObject):
|
||||||
|
"""a class that will be used into the python code, mainly for usability purposes"""
|
||||||
|
def _compile_browsable_query(self, sum_field):
|
||||||
|
# Note that the core odoo has this as `hp.credit_note = False` but what if it is NULL?
|
||||||
|
# reverse of the desired behavior.
|
||||||
|
self.__browsable_query_rule = """
|
||||||
|
SELECT sum(case when hp.credit_note is not True then (pl.total) else (-pl.total) end)
|
||||||
|
FROM hr_payslip as hp, hr_payslip_line as pl
|
||||||
|
WHERE hp.employee_id = %s AND hp.state = 'done'
|
||||||
|
AND hp.{sum_field} >= %s AND hp.date_to <= %s AND hp.id = pl.slip_id AND pl.code = %s""".format(sum_field=sum_field)
|
||||||
|
# Original (non-recursive)
|
||||||
|
# self.__browsable_query_category = """
|
||||||
|
# SELECT sum(case when hp.credit_note is not True then (pl.total) else (-pl.total) end)
|
||||||
|
# FROM hr_payslip as hp, hr_payslip_line as pl, hr_salary_rule_category as rc
|
||||||
|
# WHERE hp.employee_id = %s AND hp.state = 'done'
|
||||||
|
# AND hp.{sum_field} >= %s AND hp.date_to <= %s AND hp.id = pl.slip_id
|
||||||
|
# AND rc.id = pl.category_id AND rc.code = %s""".format(sum_field=sum_field)
|
||||||
|
|
||||||
|
# Hibou Recursive version
|
||||||
|
self.__browsable_query_category = """
|
||||||
|
WITH RECURSIVE
|
||||||
|
category_by_code as (
|
||||||
|
SELECT id
|
||||||
|
FROM hr_salary_rule_category
|
||||||
|
WHERE code = %s
|
||||||
|
),
|
||||||
|
category_ids as (
|
||||||
|
SELECT COALESCE((SELECT id FROM category_by_code), -1) AS id
|
||||||
|
UNION ALL
|
||||||
|
SELECT rc.id
|
||||||
|
FROM hr_salary_rule_category AS rc
|
||||||
|
JOIN category_ids AS rcs ON rcs.id = rc.parent_id
|
||||||
|
)
|
||||||
|
|
||||||
|
SELECT sum(case when hp.credit_note is not True then (pl.total) else (-pl.total) end)
|
||||||
|
FROM hr_payslip as hp, hr_payslip_line as pl
|
||||||
|
WHERE hp.employee_id = %s AND hp.state = 'done'
|
||||||
|
AND hp.{sum_field} >= %s AND hp.date_to <= %s AND hp.id = pl.slip_id
|
||||||
|
AND pl.category_id in (SELECT id from category_ids)""".format(sum_field=sum_field)
|
||||||
|
|
||||||
|
def sum(self, code, from_date, to_date=None):
|
||||||
|
if to_date is None:
|
||||||
|
to_date = fields.Date.today()
|
||||||
|
self.env.cr.execute(self.__browsable_query_rule, (self.employee_id, from_date, to_date, code))
|
||||||
|
res = self.env.cr.fetchone()
|
||||||
|
return res and res[0] or 0.0
|
||||||
|
|
||||||
|
def rule_parameter(self, code):
|
||||||
|
return self.env['hr.rule.parameter']._get_parameter_from_code(code, self.dict.date_to)
|
||||||
|
|
||||||
|
def sum_category(self, code, from_date, to_date=None):
|
||||||
|
if to_date is None:
|
||||||
|
to_date = fields.Date.today()
|
||||||
|
|
||||||
|
self.env['hr.payslip'].flush(['credit_note', 'employee_id', 'state', 'date_from', 'date_to'])
|
||||||
|
self.env['hr.payslip.line'].flush(['total', 'slip_id', 'category_id'])
|
||||||
|
self.env['hr.salary.rule.category'].flush(['code'])
|
||||||
|
|
||||||
|
# standard version
|
||||||
|
# self.env.cr.execute(self.__browsable_query_category, (self.employee_id, from_date, to_date, code))
|
||||||
|
# recursive category version
|
||||||
|
self.env.cr.execute(self.__browsable_query_category, (code, self.employee_id, from_date, to_date))
|
||||||
|
res = self.env.cr.fetchone()
|
||||||
|
return res and res[0] or 0.0
|
||||||
|
|
||||||
|
@property
|
||||||
|
def paid_amount(self):
|
||||||
|
return self.dict._get_paid_amount()
|
||||||
|
|
||||||
|
|
||||||
|
# Patch over Core
|
||||||
|
browsable_object.BrowsableObject.__init__ = BrowsableObject.__init__
|
||||||
|
browsable_object.BrowsableObject._compile_browsable_query = BrowsableObject._compile_browsable_query
|
||||||
|
browsable_object.InputLine._compile_browsable_query = InputLine._compile_browsable_query
|
||||||
|
browsable_object.InputLine.sum = InputLine.sum
|
||||||
|
browsable_object.WorkedDays._compile_browsable_query = WorkedDays._compile_browsable_query
|
||||||
|
browsable_object.WorkedDays.sum = WorkedDays.sum
|
||||||
|
browsable_object.Payslips._compile_browsable_query = Payslips._compile_browsable_query
|
||||||
|
browsable_object.Payslips.sum = Payslips.sum
|
||||||
|
browsable_object.Payslips.sum_category = Payslips.sum_category
|
||||||
14
hr_payroll_hibou/models/hr_payslip.py
Normal file
14
hr_payroll_hibou/models/hr_payslip.py
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class HrPayslip(models.Model):
|
||||||
|
_inherit = 'hr.payslip'
|
||||||
|
|
||||||
|
def get_year(self):
|
||||||
|
"""
|
||||||
|
# Helper method to get the year (normalized between Odoo Versions)
|
||||||
|
:return: int year of payslip
|
||||||
|
"""
|
||||||
|
return self.date_to.year
|
||||||
19
hr_payroll_hibou/models/hr_salary_rule.py
Normal file
19
hr_payroll_hibou/models/hr_salary_rule.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class HrPayrollStructure(models.Model):
|
||||||
|
_inherit = 'hr.payroll.structure'
|
||||||
|
|
||||||
|
schedule_pay = fields.Selection(selection_add=[
|
||||||
|
('semi-monthly', 'Semi-monthly'),
|
||||||
|
], ondelete={'semi-monthly': 'set null'})
|
||||||
|
|
||||||
|
|
||||||
|
class HrPayrollStructureType(models.Model):
|
||||||
|
_inherit = 'hr.payroll.structure.type'
|
||||||
|
|
||||||
|
default_schedule_pay = fields.Selection(selection_add=[
|
||||||
|
('semi-monthly', 'Semi-monthly'),
|
||||||
|
])
|
||||||
28
hr_payroll_hibou/models/res_config_settings.py
Normal file
28
hr_payroll_hibou/models/res_config_settings.py
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class ResConfigSettings(models.TransientModel):
|
||||||
|
_inherit = 'res.config.settings'
|
||||||
|
|
||||||
|
# TODO We need MORE here...
|
||||||
|
module_l10n_us_hr_payroll = fields.Boolean(string='USA Payroll')
|
||||||
|
module_l10n_us_hr_payroll_401k = fields.Boolean(string='USA Payroll 401k')
|
||||||
|
|
||||||
|
payslip_sum_type = fields.Selection([
|
||||||
|
('date_from', 'Date From'),
|
||||||
|
('date_to', 'Date To'),
|
||||||
|
('date', 'Accounting Date'),
|
||||||
|
], 'Payslip Sum Behavior', help="Behavior for what payslips are considered "
|
||||||
|
"during rule execution. Stock Odoo behavior "
|
||||||
|
"would not consider a payslip starting on 2019-12-30 "
|
||||||
|
"ending on 2020-01-07 when summing a 2020 payslip category.\n\n"
|
||||||
|
"Accounting Date requires Payroll Accounting and will "
|
||||||
|
"fall back to date_to as the 'closest behavior'.",
|
||||||
|
config_parameter='hr_payroll.payslip.sum_behavior')
|
||||||
|
|
||||||
|
def set_values(self):
|
||||||
|
super(ResConfigSettings, self).set_values()
|
||||||
|
self.env['ir.config_parameter'].set_param('hr_payroll.payslip.sum_behavior',
|
||||||
|
self.payslip_sum_type or 'date_from')
|
||||||
5
hr_payroll_hibou/tests/__init__.py
Normal file
5
hr_payroll_hibou/tests/__init__.py
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from . import common
|
||||||
|
|
||||||
|
from . import test_special
|
||||||
153
hr_payroll_hibou/tests/common.py
Executable file
153
hr_payroll_hibou/tests/common.py
Executable file
@@ -0,0 +1,153 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from logging import getLogger
|
||||||
|
from sys import float_info as sys_float_info
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
from odoo.tests import common
|
||||||
|
from odoo.tools.float_utils import float_round as odoo_float_round
|
||||||
|
|
||||||
|
|
||||||
|
def process_payslip(payslip):
|
||||||
|
try:
|
||||||
|
payslip.action_payslip_done()
|
||||||
|
except AttributeError:
|
||||||
|
# v9
|
||||||
|
payslip.process_sheet()
|
||||||
|
|
||||||
|
|
||||||
|
class TestPayslip(common.TransactionCase):
|
||||||
|
debug = False
|
||||||
|
_logger = getLogger(__name__)
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestPayslip, self).setUp()
|
||||||
|
self.contract_model = self.env['hr.contract']
|
||||||
|
self.env.user.tz = 'PST8PDT'
|
||||||
|
self.env.ref('resource.resource_calendar_std').tz = 'PST8PDT'
|
||||||
|
self.env['ir.config_parameter'].set_param('hr_payroll.payslip.sum_behavior', 'date_to')
|
||||||
|
self.structure_type = self.env['hr.payroll.structure.type'].create({
|
||||||
|
'name': 'Test Structure Type',
|
||||||
|
})
|
||||||
|
self.structure = self.env['hr.payroll.structure'].create({
|
||||||
|
'name': 'Test Structure',
|
||||||
|
'type_id': self.structure_type.id,
|
||||||
|
})
|
||||||
|
self._log('structue_type %s and structure %s' % (self.structure_type, self.structure))
|
||||||
|
self.structure_type.default_struct_id = self.structure
|
||||||
|
self.resource_calendar = self.ref('resource.resource_calendar_std')
|
||||||
|
|
||||||
|
float_info = sys_float_info
|
||||||
|
|
||||||
|
def float_round(self, value, digits):
|
||||||
|
return odoo_float_round(value, digits)
|
||||||
|
|
||||||
|
_payroll_digits = -1
|
||||||
|
|
||||||
|
@property
|
||||||
|
def payroll_digits(self):
|
||||||
|
if self._payroll_digits == -1:
|
||||||
|
self._payroll_digits = self.env['decimal.precision'].precision_get('Payroll')
|
||||||
|
return self._payroll_digits
|
||||||
|
|
||||||
|
def _log(self, message):
|
||||||
|
if self.debug:
|
||||||
|
self._logger.warning(message)
|
||||||
|
|
||||||
|
def _createEmployee(self):
|
||||||
|
return self.env['hr.employee'].create({
|
||||||
|
'birthday': '1985-03-14',
|
||||||
|
'country_id': self.ref('base.us'),
|
||||||
|
'department_id': self.ref('hr.dep_rd'),
|
||||||
|
'gender': 'male',
|
||||||
|
'name': 'Jared'
|
||||||
|
})
|
||||||
|
|
||||||
|
def _get_contract_defaults(self, contract_values):
|
||||||
|
if not contract_values.get('state'):
|
||||||
|
contract_values['state'] = 'open' # Running
|
||||||
|
if not contract_values.get('structure_type_id'):
|
||||||
|
contract_values['structure_type_id'] = self.structure_type.id
|
||||||
|
if not contract_values.get('date_start'):
|
||||||
|
contract_values['date_start'] = '2016-01-01'
|
||||||
|
if not contract_values.get('date_end'):
|
||||||
|
contract_values['date_end'] = '2030-12-31'
|
||||||
|
if not contract_values.get('resource_calendar_id'):
|
||||||
|
contract_values['resource_calendar_id'] = self.resource_calendar
|
||||||
|
|
||||||
|
# Compatibility with earlier Odoo versions
|
||||||
|
if not contract_values.get('journal_id') and hasattr(self.contract_model, 'journal_id'):
|
||||||
|
try:
|
||||||
|
contract_values['journal_id'] = self.env['account.journal'].search([('type', '=', 'general')], limit=1).id
|
||||||
|
except KeyError:
|
||||||
|
# Accounting not installed
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _createContract(self, employee, **kwargs):
|
||||||
|
if not 'schedule_pay' in kwargs:
|
||||||
|
kwargs['schedule_pay'] = 'monthly'
|
||||||
|
schedule_pay = kwargs['schedule_pay']
|
||||||
|
contract_values = {
|
||||||
|
'name': 'Test Contract',
|
||||||
|
'employee_id': employee.id,
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, val in kwargs.items():
|
||||||
|
# Assume any Odoo object is in a Many2one
|
||||||
|
if hasattr(val, 'id'):
|
||||||
|
val = val.id
|
||||||
|
found = False
|
||||||
|
if hasattr(self.contract_model, key):
|
||||||
|
contract_values[key] = val
|
||||||
|
found = True
|
||||||
|
if not found:
|
||||||
|
self._logger.warn('cannot locate attribute names "%s" on hr.contract().' % (key, ))
|
||||||
|
|
||||||
|
self._get_contract_defaults(contract_values)
|
||||||
|
contract = self.contract_model.create(contract_values)
|
||||||
|
|
||||||
|
# Compatibility with Odoo 14
|
||||||
|
contract.structure_type_id.default_struct_id.schedule_pay = schedule_pay
|
||||||
|
return contract
|
||||||
|
|
||||||
|
def _createPayslip(self, employee, date_from, date_to, skip_compute=False):
|
||||||
|
slip = self.env['hr.payslip'].create({
|
||||||
|
'name': 'Test %s From: %s To: %s' % (employee.name, date_from, date_to),
|
||||||
|
'employee_id': employee.id,
|
||||||
|
'date_from': date_from,
|
||||||
|
'date_to': date_to
|
||||||
|
})
|
||||||
|
# Included in hr.payslip.action_refresh_from_work_entries() as ov 14.0 EE
|
||||||
|
# slip._onchange_employee()
|
||||||
|
# as is the 'compute' that is almost always called immediaately after
|
||||||
|
if not skip_compute:
|
||||||
|
slip.action_refresh_from_work_entries()
|
||||||
|
return slip
|
||||||
|
|
||||||
|
def _getCategories(self, payslip):
|
||||||
|
categories = defaultdict(float)
|
||||||
|
for line in payslip.line_ids:
|
||||||
|
self._log(' line code: ' + str(line.code) +
|
||||||
|
' category code: ' + line.category_id.code +
|
||||||
|
' total: ' + str(line.total) +
|
||||||
|
' rate: ' + str(line.rate) +
|
||||||
|
' amount: ' + str(line.amount))
|
||||||
|
category_id = line.category_id
|
||||||
|
category_code = line.category_id.code
|
||||||
|
while category_code:
|
||||||
|
categories[category_code] += line.total
|
||||||
|
category_id = category_id.parent_id
|
||||||
|
category_code = category_id.code
|
||||||
|
return categories
|
||||||
|
|
||||||
|
def _getRules(self, payslip):
|
||||||
|
rules = defaultdict(float)
|
||||||
|
for line in payslip.line_ids:
|
||||||
|
rules[line.code] += line.total
|
||||||
|
return rules
|
||||||
|
|
||||||
|
def assertPayrollEqual(self, first, second):
|
||||||
|
self.assertAlmostEqual(first, second, self.payroll_digits)
|
||||||
|
|
||||||
|
def assertPayrollAlmostEqual(self, first, second):
|
||||||
|
self.assertAlmostEqual(first, second, self.payroll_digits-1)
|
||||||
127
hr_payroll_hibou/tests/test_special.py
Normal file
127
hr_payroll_hibou/tests/test_special.py
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
from .common import TestPayslip, process_payslip
|
||||||
|
|
||||||
|
|
||||||
|
class TestSpecial(TestPayslip):
|
||||||
|
|
||||||
|
def test_get_year(self):
|
||||||
|
salary = 80000.0
|
||||||
|
employee = self._createEmployee()
|
||||||
|
# so the schedule_pay is now on the Structure...
|
||||||
|
contract = self._createContract(employee, wage=salary)
|
||||||
|
payslip = self._createPayslip(employee, '2020-01-01', '2020-01-14')
|
||||||
|
self.assertEqual(payslip.get_year(), 2020)
|
||||||
|
|
||||||
|
def test_semi_monthly(self):
|
||||||
|
salary = 80000.0
|
||||||
|
employee = self._createEmployee()
|
||||||
|
# so the schedule_pay is now on the Structure...
|
||||||
|
contract = self._createContract(employee, wage=salary, schedule_pay='semi-monthly')
|
||||||
|
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-14')
|
||||||
|
|
||||||
|
def test_payslip_sum_behavior(self):
|
||||||
|
self.env['ir.config_parameter'].set_param('hr_payroll.payslip.sum_behavior', 'date')
|
||||||
|
rule_category_comp = self.env.ref('hr_payroll.COMP')
|
||||||
|
test_rule_category = self.env['hr.salary.rule.category'].create({
|
||||||
|
'name': 'Test Sum Behavior',
|
||||||
|
'code': 'test_sum_behavior',
|
||||||
|
'parent_id': rule_category_comp.id,
|
||||||
|
})
|
||||||
|
test_rule = self.env['hr.salary.rule'].create({
|
||||||
|
'sequence': 450,
|
||||||
|
'struct_id': self.structure.id,
|
||||||
|
'category_id': test_rule_category.id,
|
||||||
|
'name': 'Test Sum Behavior',
|
||||||
|
'code': 'test_sum_behavior',
|
||||||
|
'condition_select': 'python',
|
||||||
|
'condition_python': 'result = 1',
|
||||||
|
'amount_select': 'code',
|
||||||
|
'amount_python_compute': '''
|
||||||
|
ytd_category = payslip.sum_category('test_sum_behavior', '2020-01-01', '2021-01-01')
|
||||||
|
ytd_rule = payslip.sum('test_sum_behavior', '2020-01-01', '2021-01-01')
|
||||||
|
result = 0.0
|
||||||
|
if ytd_category != ytd_rule:
|
||||||
|
# error
|
||||||
|
result = -1.0
|
||||||
|
elif ytd_rule == 0.0:
|
||||||
|
# first payslip in period
|
||||||
|
result = 1.0
|
||||||
|
'''
|
||||||
|
})
|
||||||
|
salary = 80000.0
|
||||||
|
employee = self._createEmployee()
|
||||||
|
contract = self._createContract(employee, wage=salary, schedule_pay='bi-weekly')
|
||||||
|
payslip = self._createPayslip(employee, '2019-12-30', '2020-01-12')
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
self.assertEqual(cats['BASIC'], salary)
|
||||||
|
self.assertEqual(cats['test_sum_behavior'], 1.0)
|
||||||
|
process_payslip(payslip)
|
||||||
|
|
||||||
|
# Basic date_from behavior.
|
||||||
|
self.env['ir.config_parameter'].set_param('hr_payroll.payslip.sum_behavior', 'date_from')
|
||||||
|
# The the date_from on the last payslip will not be found
|
||||||
|
payslip = self._createPayslip(employee, '2020-01-13', '2020-01-27')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
self.assertEqual(cats['test_sum_behavior'], 1.0)
|
||||||
|
|
||||||
|
# date_to behavior.
|
||||||
|
self.env['ir.config_parameter'].set_param('hr_payroll.payslip.sum_behavior', 'date_to')
|
||||||
|
# The date_to on the last payslip is found
|
||||||
|
payslip = self._createPayslip(employee, '2020-01-13', '2020-01-27')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
self.assertEqual(cats['test_sum_behavior'], 0.0)
|
||||||
|
|
||||||
|
def test_recursive_salary_rule_category(self):
|
||||||
|
self.debug = True
|
||||||
|
# In this scenario, you are in rule code that will check for the category
|
||||||
|
# and a subcategory will also
|
||||||
|
alw_category = self.env.ref('hr_payroll.ALW')
|
||||||
|
ded_category = self.env.ref('hr_payroll.DED')
|
||||||
|
test_category = self.env['hr.salary.rule.category'].create({
|
||||||
|
'name': 'Special ALW',
|
||||||
|
'code': 'ALW_SPECIAL_RECURSIVE',
|
||||||
|
'parent_id': alw_category.id,
|
||||||
|
})
|
||||||
|
test_special_alw = self.env['hr.salary.rule'].create({
|
||||||
|
'name': 'Flat amount 200',
|
||||||
|
'code': 'ALW_SPECIAL_RECURSIVE',
|
||||||
|
'category_id': test_category.id,
|
||||||
|
'condition_select': 'none',
|
||||||
|
'amount_select': 'fix',
|
||||||
|
'amount_fix': 200.0,
|
||||||
|
'struct_id': self.structure.id,
|
||||||
|
})
|
||||||
|
test_recursion = self.env['hr.salary.rule'].create({
|
||||||
|
'name': 'Actual Test Behavior',
|
||||||
|
'code': 'RECURSION_TEST',
|
||||||
|
'category_id': ded_category.id,
|
||||||
|
'condition_select': 'none',
|
||||||
|
'amount_select': 'code',
|
||||||
|
'amount_python_compute': """
|
||||||
|
# this rule will always be the total of the ALW category and YTD ALW category
|
||||||
|
result = categories.ALW
|
||||||
|
# Note, this tests the hr.payslip.get_year() to return an integer rep of year
|
||||||
|
year = payslip.dict.get_year()
|
||||||
|
result += payslip.sum_category('ALW', str(year) + '-01-01', str(year+1) + '-01-01')
|
||||||
|
""",
|
||||||
|
'sequence': 101,
|
||||||
|
'struct_id': self.structure.id,
|
||||||
|
})
|
||||||
|
|
||||||
|
salary = 80000.0
|
||||||
|
employee = self._createEmployee()
|
||||||
|
contract = self._createContract(employee, wage=salary, schedule_pay='bi-weekly')
|
||||||
|
payslip = self._createPayslip(employee, '2020-01-01', '2020-01-14')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
rules = self._getRules(payslip)
|
||||||
|
self.assertEqual(rules['RECURSION_TEST'], 200.0)
|
||||||
|
process_payslip(payslip)
|
||||||
|
|
||||||
|
payslip = self._createPayslip(employee, '2020-01-15', '2020-01-27')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
rules = self._getRules(payslip)
|
||||||
|
# two hundred is in the YTD ALW
|
||||||
|
self.assertEqual(rules['RECURSION_TEST'], 200.0 + 200.0)
|
||||||
49
hr_payroll_hibou/views/res_config_settings_views.xml
Normal file
49
hr_payroll_hibou/views/res_config_settings_views.xml
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="res_config_settings_view_form_hibou" model="ir.ui.view">
|
||||||
|
<field name="name">res.config.settings.view.form.inherit.hr.payroll.hibou</field>
|
||||||
|
<field name="model">res.config.settings</field>
|
||||||
|
<field name="priority" eval="50"/>
|
||||||
|
<field name="inherit_id" ref="hr_payroll.res_config_settings_view_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//div[@data-key='hr_payroll']" position="inside">
|
||||||
|
<field name="module_l10n_us_hr_payroll" invisible="1"/>
|
||||||
|
<!-- TODO payment, attendance, timesheet, ovetrtime... -->
|
||||||
|
<h2>Hibou Payroll</h2>
|
||||||
|
<div class="row mt16 o_settings_container" id="hr_payroll_hibou">
|
||||||
|
<div class="col-lg-6 col-12 o_setting_box">
|
||||||
|
<div class="o_setting_left_pane"/>
|
||||||
|
<div class="o_setting_right_pane">
|
||||||
|
<label for="payslip_sum_type" string="Payslip Sum Behavior"/>
|
||||||
|
<div class="text-muted">
|
||||||
|
Customize the behavior of what payslips are eligible when summing over date ranges in rules.
|
||||||
|
Generally, "Date To" or "Accounting Date" would be preferred in the United States and anywhere
|
||||||
|
else where the ending date on the payslip is used to calculate wage bases.
|
||||||
|
</div>
|
||||||
|
<field name="payslip_sum_type"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-6 col-12 o_setting_box">
|
||||||
|
<div class="o_setting_left_pane">
|
||||||
|
<field name="module_l10n_us_hr_payroll_401k"/>
|
||||||
|
</div>
|
||||||
|
<div class="o_setting_right_pane">
|
||||||
|
<label for="module_l10n_us_hr_payroll_401k" string="USA Payroll 401k"/>
|
||||||
|
<div class="text-muted">
|
||||||
|
Provide retirement plans with optional company matching.
|
||||||
|
</div>
|
||||||
|
<div class="mt8" id="l10n_us_hr_payroll_401k_match">
|
||||||
|
<button name="%(hr_payroll.hr_rule_parameter_action)d" icon="fa-arrow-right" type="action"
|
||||||
|
string="Configure Matching & Limits" class="btn-link"
|
||||||
|
context="{'search_default_us_payroll_401k': True}"
|
||||||
|
attrs="{'invisible': [('module_l10n_us_hr_payroll_401k', '=', False)]}"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
12
l10n_us_hr_payroll/__init__.py
Normal file
12
l10n_us_hr_payroll/__init__.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from . import models
|
||||||
|
|
||||||
|
def _post_install_hook(cr, registry):
|
||||||
|
"""
|
||||||
|
This method will set the default for the Payslip Sum Behavior
|
||||||
|
"""
|
||||||
|
cr.execute("SELECT id FROM ir_config_parameter WHERE key = 'hr_payroll.payslip.sum_behavior';")
|
||||||
|
existing = cr.fetchall()
|
||||||
|
if not existing:
|
||||||
|
cr.execute("INSERT INTO ir_config_parameter (key, value) VALUES ('hr_payroll.payslip.sum_behavior', 'date');")
|
||||||
82
l10n_us_hr_payroll/__manifest__.py
Normal file
82
l10n_us_hr_payroll/__manifest__.py
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
{
|
||||||
|
'name': 'United States of America - Payroll',
|
||||||
|
'author': 'Hibou Corp. <hello@hibou.io>',
|
||||||
|
'version': '14.0.2020.0.0',
|
||||||
|
'category': 'Payroll Localization',
|
||||||
|
'depends': [
|
||||||
|
'hr_payroll_hibou',
|
||||||
|
],
|
||||||
|
'description': """
|
||||||
|
United States of America - Payroll Rules.
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
""",
|
||||||
|
|
||||||
|
'data': [
|
||||||
|
'security/ir.model.access.csv',
|
||||||
|
'data/base.xml',
|
||||||
|
'data/integration_rules.xml',
|
||||||
|
'data/federal/fed_940_futa_parameters.xml',
|
||||||
|
'data/federal/fed_940_futa_rules.xml',
|
||||||
|
'data/federal/fed_941_fica_parameters.xml',
|
||||||
|
'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/al_alabama.xml',
|
||||||
|
'data/state/ar_arkansas.xml',
|
||||||
|
'data/state/az_arizona.xml',
|
||||||
|
'data/state/ca_california.xml',
|
||||||
|
'data/state/co_colorado.xml',
|
||||||
|
'data/state/ct_connecticut.xml',
|
||||||
|
'data/state/de_delaware.xml',
|
||||||
|
'data/state/fl_florida.xml',
|
||||||
|
'data/state/ga_georgia.xml',
|
||||||
|
'data/state/hi_hawaii.xml',
|
||||||
|
'data/state/ia_iowa.xml',
|
||||||
|
'data/state/id_idaho.xml',
|
||||||
|
'data/state/il_illinois.xml',
|
||||||
|
'data/state/in_indiana.xml',
|
||||||
|
'data/state/ks_kansas.xml',
|
||||||
|
'data/state/ky_kentucky.xml',
|
||||||
|
'data/state/la_louisiana.xml',
|
||||||
|
'data/state/me_maine.xml',
|
||||||
|
'data/state/mi_michigan.xml',
|
||||||
|
'data/state/mn_minnesota.xml',
|
||||||
|
'data/state/mo_missouri.xml',
|
||||||
|
'data/state/ms_mississippi.xml',
|
||||||
|
'data/state/mt_montana.xml',
|
||||||
|
'data/state/nc_northcarolina.xml',
|
||||||
|
'data/state/nd_north_dakota.xml',
|
||||||
|
'data/state/ne_nebraska.xml',
|
||||||
|
'data/state/nh_new_hampshire.xml',
|
||||||
|
'data/state/nj_newjersey.xml',
|
||||||
|
'data/state/nm_new_mexico.xml',
|
||||||
|
'data/state/nv_nevada.xml',
|
||||||
|
'data/state/ny_new_york.xml',
|
||||||
|
'data/state/oh_ohio.xml',
|
||||||
|
'data/state/ok_oklahoma.xml',
|
||||||
|
'data/state/pa_pennsylvania.xml',
|
||||||
|
'data/state/ri_rhode_island.xml',
|
||||||
|
'data/state/sc_south_carolina.xml',
|
||||||
|
'data/state/sd_south_dakota.xml',
|
||||||
|
'data/state/tn_tennessee.xml',
|
||||||
|
'data/state/tx_texas.xml',
|
||||||
|
'data/state/ut_utah.xml',
|
||||||
|
'data/state/vt_vermont.xml',
|
||||||
|
'data/state/va_virginia.xml',
|
||||||
|
'data/state/wa_washington.xml',
|
||||||
|
'data/state/wi_wisconsin.xml',
|
||||||
|
'data/state/wv_west_virginia.xml',
|
||||||
|
'data/state/wy_wyoming.xml',
|
||||||
|
'views/hr_contract_views.xml',
|
||||||
|
'views/us_payroll_config_views.xml',
|
||||||
|
],
|
||||||
|
'demo': [
|
||||||
|
],
|
||||||
|
'auto_install': False,
|
||||||
|
'post_init_hook': '_post_install_hook',
|
||||||
|
'license': 'OPL-1',
|
||||||
|
}
|
||||||
133
l10n_us_hr_payroll/data/base.xml
Normal file
133
l10n_us_hr_payroll/data/base.xml
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="structure_type_employee" model="hr.payroll.structure.type">
|
||||||
|
<field name="name">USA Employee</field>
|
||||||
|
<field name="default_resource_calendar_id" ref="resource.resource_calendar_std"/>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<record id="hr_payroll_structure" model="hr.payroll.structure">
|
||||||
|
<field name="name">USA Employee Standard</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
<field name="type_id" ref="l10n_us_hr_payroll.structure_type_employee"/>
|
||||||
|
<field name="unpaid_work_entry_type_ids" eval="[
|
||||||
|
(4, ref('hr_work_entry_contract.work_entry_type_unpaid_leave')),
|
||||||
|
]"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="l10n_us_hr_payroll.structure_type_employee" model="hr.payroll.structure.type">
|
||||||
|
<field name="default_struct_id" ref="hr_payroll_structure"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- State Unemployment -->
|
||||||
|
<record id="hr_payroll_category_ee_us_suta" model="hr.salary.rule.category">
|
||||||
|
<field name="name">EE: State Unemployment SUTA</field>
|
||||||
|
<field name="code">EE_US_SUTA</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.DED"/>
|
||||||
|
</record>
|
||||||
|
<record id="hr_payroll_category_er_us_suta" model="hr.salary.rule.category">
|
||||||
|
<field name="name">ER: State Unemployment SUTA</field>
|
||||||
|
<field name="code">ER_US_SUTA</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.COMP"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- State Income Tax -->
|
||||||
|
<record id="hr_payroll_category_ee_us_sit" model="hr.salary.rule.category">
|
||||||
|
<field name="name">EE: State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_SIT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.DED"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Tax Exempt Benefits/Wage -->
|
||||||
|
<!-- IRS Publication 15-B Lists several categories of benefits, limits and classifications -->
|
||||||
|
<!-- If your rule is intended to add to gross wages or be pre-gross, use the ALW_ Categories -->
|
||||||
|
<record id="hr_payroll_category_alw_fit_exempt" model="hr.salary.rule.category">
|
||||||
|
<field name="name">Wage: US FIT Exempt</field>
|
||||||
|
<field name="code">ALW_FIT_EXEMPT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.ALW"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_alw_fit_fica_exempt" model="hr.salary.rule.category">
|
||||||
|
<field name="name">Wage: US FIT & FICA Exempt</field>
|
||||||
|
<field name="code">ALW_FIT_FICA_EXEMPT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.ALW"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_alw_fit_futa_exempt" model="hr.salary.rule.category">
|
||||||
|
<field name="name">Wage: US FIT & FUTA Exempt</field>
|
||||||
|
<field name="code">ALW_FIT_FUTA_EXEMPT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.ALW"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_alw_fit_fica_futa_exempt" model="hr.salary.rule.category">
|
||||||
|
<field name="name">Wage: US FIT & FICA & FUTA Exempt</field>
|
||||||
|
<field name="code">ALW_FIT_FICA_FUTA_EXEMPT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.ALW"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_alw_fica_exempt" model="hr.salary.rule.category">
|
||||||
|
<field name="name">Wage: US FICA Exempt</field>
|
||||||
|
<field name="code">ALW_FICA_EXEMPT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.ALW"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_alw_fica_futa_exempt" model="hr.salary.rule.category">
|
||||||
|
<field name="name">Wage: US FICA & FUTA Exempt</field>
|
||||||
|
<field name="code">ALW_FICA_FUTA_EXEMPT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.ALW"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_alw_futa_exempt" model="hr.salary.rule.category">
|
||||||
|
<field name="name">Wage: US FUTA Exempt</field>
|
||||||
|
<field name="code">ALW_FUTA_EXEMPT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.ALW"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Tax Exempt Deductions -->
|
||||||
|
<!-- If your rule is intended to withhold from gross, use the DED_ Categories -->
|
||||||
|
<record id="hr_payroll_category_ded_fit_exempt" model="hr.salary.rule.category">
|
||||||
|
<field name="name">Deduction: US FIT Exempt</field>
|
||||||
|
<field name="code">DED_FIT_EXEMPT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.DED"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_ded_fit_fica_exempt" model="hr.salary.rule.category">
|
||||||
|
<field name="name">Deduction: US FIT & FICA Exempt</field>
|
||||||
|
<field name="code">DED_FIT_FICA_EXEMPT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.DED"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_ded_fit_futa_exempt" model="hr.salary.rule.category">
|
||||||
|
<field name="name">Deduction: US FIT & FUTA Exempt</field>
|
||||||
|
<field name="code">DED_FIT_FUTA_EXEMPT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.DED"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_ded_fit_fica_futa_exempt" model="hr.salary.rule.category">
|
||||||
|
<field name="name">Deduction: US FIT & FICA & FUTA Exempt</field>
|
||||||
|
<field name="code">DED_FIT_FICA_FUTA_EXEMPT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.DED"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_ded_fica_exempt" model="hr.salary.rule.category">
|
||||||
|
<field name="name">Deduction: US FICA Exempt</field>
|
||||||
|
<field name="code">DED_FICA_EXEMPT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.DED"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_ded_fica_futa_exempt" model="hr.salary.rule.category">
|
||||||
|
<field name="name">Deduction: US FICA & FUTA Exempt</field>
|
||||||
|
<field name="code">DED_FICA_FUTA_EXEMPT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.DED"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_ded_futa_exempt" model="hr.salary.rule.category">
|
||||||
|
<field name="name">Deduction: US FUTA Exempt</field>
|
||||||
|
<field name="code">DED_FUTA_EXEMPT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.DED"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
38
l10n_us_hr_payroll/data/federal/fed_940_futa_parameters.xml
Normal file
38
l10n_us_hr_payroll/data/federal/fed_940_futa_parameters.xml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_940_futa_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">Federal 940 FUTA Wage Base</field>
|
||||||
|
<field name="code">fed_940_futa_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_940_futa_wage_base_2016" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">7000.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_940_futa_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2016, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_940_futa_rate_basic" model="hr.rule.parameter">
|
||||||
|
<field name="name">Federal 940 FUTA Rate Basic</field>
|
||||||
|
<field name="code">fed_940_futa_rate_basic</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_940_futa_rate_basic_2016" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">6.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_940_futa_rate_basic"/>
|
||||||
|
<field name="date_from" eval="datetime(2016, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="rule_parameter_940_futa_rate_normal" model="hr.rule.parameter">
|
||||||
|
<field name="name">Federal 940 FUTA Rate Normal</field>
|
||||||
|
<field name="code">fed_940_futa_rate_normal</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_940_futa_rate_normal_2016" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.6</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_940_futa_rate_normal"/>
|
||||||
|
<field name="date_from" eval="datetime(2016, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
28
l10n_us_hr_payroll/data/federal/fed_940_futa_rules.xml
Normal file
28
l10n_us_hr_payroll/data/federal/fed_940_futa_rules.xml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="res_partner_eftps_940" model="res.partner">
|
||||||
|
<field name="name">US Federal 940 - EFTPS</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_er_fed_940" model="hr.salary.rule.category">
|
||||||
|
<field name="name">ER: Federal 940 FUTA</field>
|
||||||
|
<field name="code">ER_US_940_FUTA</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.COMP"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_er_fed_940" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="440"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_fed_940"/>
|
||||||
|
<field name="name">ER: US FUTA Federal Unemployment</field>
|
||||||
|
<field name="code">ER_US_940_FUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = er_us_940_futa(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = er_us_940_futa(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_eftps_940"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
88
l10n_us_hr_payroll/data/federal/fed_941_fica_parameters.xml
Normal file
88
l10n_us_hr_payroll/data/federal/fed_941_fica_parameters.xml
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Social Security -->
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_941_fica_ss_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">Federal 941 FICA Social Security Wage Base</field>
|
||||||
|
<field name="code">fed_941_fica_ss_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fica_ss_wage_base_2016" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">128400.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fica_ss_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2016, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fica_ss_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">132900.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fica_ss_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fica_ss_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">137700.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fica_ss_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_941_fica_ss_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">Federal 941 FICA Rate</field>
|
||||||
|
<field name="code">fed_941_fica_ss_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fica_ss_rate_2016" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">6.2</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fica_ss_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2016, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Medicare -->
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_941_fica_m_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">Federal 941 FICA Medicare Wage Base</field>
|
||||||
|
<field name="code">fed_941_fica_m_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fica_m_wage_base_2016" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">"inf"</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fica_m_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2016, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_941_fica_m_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">Federal 941 FICA Rate</field>
|
||||||
|
<field name="code">fed_941_fica_m_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fica_m_rate_2016" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.45</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fica_m_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2016, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Medicare Additional -->
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_941_fica_m_add_wage_start" model="hr.rule.parameter">
|
||||||
|
<field name="name">Federal 941 FICA Medicare Additional Wage Start</field>
|
||||||
|
<field name="code">fed_941_fica_m_add_wage_start</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fica_m_add_wage_start_2016" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">200000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fica_m_add_wage_start"/>
|
||||||
|
<field name="date_from" eval="datetime(2016, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_941_fica_m_add_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">Federal 941 FICA Medicare Additional Rate</field>
|
||||||
|
<field name="code">fed_941_fica_m_add_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fica_m_add_rate_2016" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.9</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fica_m_add_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2016, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
94
l10n_us_hr_payroll/data/federal/fed_941_fica_rules.xml
Normal file
94
l10n_us_hr_payroll/data/federal/fed_941_fica_rules.xml
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="res_partner_eftps_941" model="res.partner">
|
||||||
|
<field name="name">US Federal 941 - EFTPS</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_ee_fed_941" model="hr.salary.rule.category">
|
||||||
|
<field name="name">EE: Federal 941 FICA</field>
|
||||||
|
<field name="code">EE_US_941_FICA</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.DED"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_er_fed_941" model="hr.salary.rule.category">
|
||||||
|
<field name="name">ER: Federal 941 FICA</field>
|
||||||
|
<field name="code">ER_US_941_FICA</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.COMP"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Social Security -->
|
||||||
|
<record id="hr_payroll_rule_ee_fed_941_ss" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="190"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_fed_941"/>
|
||||||
|
<field name="name">EE: US FICA Social Security</field>
|
||||||
|
<field name="code">EE_US_941_FICA_SS</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ee_us_941_fica_ss(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ee_us_941_fica_ss(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_eftps_941"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_er_fed_941_ss" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="440"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_fed_941"/>
|
||||||
|
<field name="name">ER: US FICA Social Security</field>
|
||||||
|
<field name="code">ER_US_941_FICA_SS</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = er_us_941_fica_ss(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = er_us_941_fica_ss(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_eftps_941"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Medicare -->
|
||||||
|
<record id="hr_payroll_rule_ee_fed_941_m" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="190"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_fed_941"/>
|
||||||
|
<field name="name">EE: US FICA Medicare</field>
|
||||||
|
<field name="code">EE_US_941_FICA_M</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ee_us_941_fica_m(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ee_us_941_fica_m(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_eftps_941"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_er_fed_941_m" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="440"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_fed_941"/>
|
||||||
|
<field name="name">ER: US FICA Medicare</field>
|
||||||
|
<field name="code">ER_US_941_FICA_M</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = er_us_941_fica_m(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = er_us_941_fica_m(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_eftps_941"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Medicare Additional -->
|
||||||
|
<record id="hr_payroll_rule_ee_fed_941_m_add" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="190"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_fed_941"/>
|
||||||
|
<field name="name">EE: US FICA Medicare Additional</field>
|
||||||
|
<field name="code">EE_US_941_FICA_M_ADD</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ee_us_941_fica_m_add(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ee_us_941_fica_m_add(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_eftps_941"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
504
l10n_us_hr_payroll/data/federal/fed_941_fit_parameters.xml
Normal file
504
l10n_us_hr_payroll/data/federal/fed_941_fit_parameters.xml
Normal file
@@ -0,0 +1,504 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<!-- Shared -->
|
||||||
|
<record id="rule_parameter_941_fit_allowance" model="hr.rule.parameter">
|
||||||
|
<field name="name">Federal 941 FIT Allowance</field>
|
||||||
|
<field name="code">fed_941_fit_allowance</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fit_allowance_2018" model="hr.rule.parameter.value">
|
||||||
|
<!-- Bogus 2018 -->
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': 80.80,
|
||||||
|
'bi-weekly': 161.50,
|
||||||
|
'semi-monthly': 175.00,
|
||||||
|
'monthly': 350.00,
|
||||||
|
'quarterly': 1050.00,
|
||||||
|
'semi-annually': 2100.00,
|
||||||
|
'annually': 4200.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fit_allowance"/>
|
||||||
|
<field name="date_from" eval="datetime(2018, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fit_allowance_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': 80.80,
|
||||||
|
'bi-weekly': 161.50,
|
||||||
|
'semi-monthly': 175.00,
|
||||||
|
'monthly': 350.00,
|
||||||
|
'quarterly': 1050.00,
|
||||||
|
'semi-annually': 2100.00,
|
||||||
|
'annually': 4200.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fit_allowance"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fit_allowance_2020" model="hr.rule.parameter.value">
|
||||||
|
<!-- Warning, major change to allowance in 2020 -->
|
||||||
|
<field name="parameter_value">4300.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fit_allowance"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="rule_parameter_941_fit_nra_additional" model="hr.rule.parameter">
|
||||||
|
<field name="name">Federal 941 FIT NRA Additional</field>
|
||||||
|
<field name="code">fed_941_fit_nra_additional</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fit_nra_additional_2018" model="hr.rule.parameter.value">
|
||||||
|
<!-- Bogus from 2018 -->
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': 153.80,
|
||||||
|
'bi-weekly': 307.70,
|
||||||
|
'semi-monthly': 333.30,
|
||||||
|
'monthly': 666.70,
|
||||||
|
'quarterly': 2000.00,
|
||||||
|
'semi-annually': 4000.00,
|
||||||
|
'annually': 8000.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fit_nra_additional"/>
|
||||||
|
<field name="date_from" eval="datetime(2018, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fit_nra_additional_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': 153.80,
|
||||||
|
'bi-weekly': 307.70,
|
||||||
|
'semi-monthly': 333.30,
|
||||||
|
'monthly': 666.70,
|
||||||
|
'quarterly': 2000.00,
|
||||||
|
'semi-annually': 4000.00,
|
||||||
|
'annually': 8000.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fit_nra_additional"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fit_nra_additional_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': 238.50,
|
||||||
|
'bi-weekly': 476.90,
|
||||||
|
'semi-monthly': 516.70,
|
||||||
|
'monthly': 1033.30,
|
||||||
|
'quarterly': 3100.00,
|
||||||
|
'semi-annually': 6200.00,
|
||||||
|
'annually': 12400.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fit_nra_additional"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Single and Married Single Rate -->
|
||||||
|
<record id="rule_parameter_941_fit_table_single" model="hr.rule.parameter">
|
||||||
|
<field name="name">Federal 941 FIT Table Single</field>
|
||||||
|
<field name="code">fed_941_fit_table_single</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fit_table_single_2018" model="hr.rule.parameter.value">
|
||||||
|
<!-- Bogus 2018 -->
|
||||||
|
<!-- But-not-over, $, % -->
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': [
|
||||||
|
( 73.00, 0.00, 0),
|
||||||
|
( 260.00, 0.00, 10),
|
||||||
|
( 832.00, 18.70, 12),
|
||||||
|
( 1692.00, 87.34, 22),
|
||||||
|
( 3164.00, 276.54, 24),
|
||||||
|
( 3998.00, 629.82, 32),
|
||||||
|
( 9887.00, 896.70, 35),
|
||||||
|
( 'inf', 2957.85, 37),
|
||||||
|
],
|
||||||
|
'bi-weekly': [
|
||||||
|
( 146.00, 0.00, 0),
|
||||||
|
( 519.00, 0.00, 10),
|
||||||
|
( 1664.00, 37.30, 12),
|
||||||
|
( 3385.00, 174.70, 22),
|
||||||
|
( 6328.00, 553.32, 24),
|
||||||
|
( 7996.00, 1259.64, 32),
|
||||||
|
( 19773.00, 1793.40, 35),
|
||||||
|
( 'inf', 5915.35, 37),
|
||||||
|
],
|
||||||
|
'semi-monthly': [
|
||||||
|
( 158.00, 0.00, 0),
|
||||||
|
( 563.00, 0.00, 10),
|
||||||
|
( 1803.00, 40.50, 12),
|
||||||
|
( 3667.00, 189.30, 22),
|
||||||
|
( 6855.00, 599.38, 24),
|
||||||
|
( 8663.00, 1364.50, 32),
|
||||||
|
( 21421.00, 1943.06, 35),
|
||||||
|
( 'inf', 6408.36, 37),
|
||||||
|
],
|
||||||
|
'monthly': [
|
||||||
|
( 317.00, 0.00, 0),
|
||||||
|
( 1125.00, 0.00, 10),
|
||||||
|
( 3606.00, 80.80, 12),
|
||||||
|
( 7333.00, 378.52, 22),
|
||||||
|
( 13710.00, 1198.46, 24),
|
||||||
|
( 17325.00, 2728.94, 32),
|
||||||
|
( 42842.00, 3885.74, 35),
|
||||||
|
( 'inf', 12816.69, 37),
|
||||||
|
],
|
||||||
|
'quarterly': [
|
||||||
|
( 950.00, 0.00, 0),
|
||||||
|
( 3375.00, 0.00, 10),
|
||||||
|
( 10819.00, 242.50, 12),
|
||||||
|
( 22000.00, 1135.78, 22),
|
||||||
|
( 41131.00, 3595.60, 24),
|
||||||
|
( 51975.00, 8187.04, 32),
|
||||||
|
( 128525.00, 11657.12, 35),
|
||||||
|
( 'inf', 38449.62, 37),
|
||||||
|
],
|
||||||
|
'semi-annually': [
|
||||||
|
( 1900.00, 0.00, 0),
|
||||||
|
( 6750.00, 0.00, 10),
|
||||||
|
( 21638.00, 485.00, 12),
|
||||||
|
( 44000.00, 2271.56, 22),
|
||||||
|
( 82263.00, 7191.20, 24),
|
||||||
|
( 103950.00, 16374.32, 32),
|
||||||
|
( 257050.00, 23314.16, 35),
|
||||||
|
( 'inf', 76899.16, 37),
|
||||||
|
],
|
||||||
|
'annually': [
|
||||||
|
( 3800.00, 0.00, 0),
|
||||||
|
( 13500.00, 0.00, 10),
|
||||||
|
( 43275.00, 970.00, 12),
|
||||||
|
( 88000.00, 4543.00, 22),
|
||||||
|
( 164525.00, 14382.50, 24),
|
||||||
|
( 207900.00, 32748.50, 32),
|
||||||
|
( 514100.00, 46628.50, 35),
|
||||||
|
( 'inf', 153798.50, 37),
|
||||||
|
],
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fit_table_single"/>
|
||||||
|
<field name="date_from" eval="datetime(2018, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fit_table_single_2019" model="hr.rule.parameter.value">
|
||||||
|
<!-- But-not-over, $, % -->
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': [
|
||||||
|
( 73.00, 0.00, 0),
|
||||||
|
( 260.00, 0.00, 10),
|
||||||
|
( 832.00, 18.70, 12),
|
||||||
|
( 1692.00, 87.34, 22),
|
||||||
|
( 3164.00, 276.54, 24),
|
||||||
|
( 3998.00, 629.82, 32),
|
||||||
|
( 9887.00, 896.70, 35),
|
||||||
|
( 'inf', 2957.85, 37),
|
||||||
|
],
|
||||||
|
'bi-weekly': [
|
||||||
|
( 146.00, 0.00, 0),
|
||||||
|
( 519.00, 0.00, 10),
|
||||||
|
( 1664.00, 37.30, 12),
|
||||||
|
( 3385.00, 174.70, 22),
|
||||||
|
( 6328.00, 553.32, 24),
|
||||||
|
( 7996.00, 1259.64, 32),
|
||||||
|
( 19773.00, 1793.40, 35),
|
||||||
|
( 'inf', 5915.35, 37),
|
||||||
|
],
|
||||||
|
'semi-monthly': [
|
||||||
|
( 158.00, 0.00, 0),
|
||||||
|
( 563.00, 0.00, 10),
|
||||||
|
( 1803.00, 40.50, 12),
|
||||||
|
( 3667.00, 189.30, 22),
|
||||||
|
( 6855.00, 599.38, 24),
|
||||||
|
( 8663.00, 1364.50, 32),
|
||||||
|
( 21421.00, 1943.06, 35),
|
||||||
|
( 'inf', 6408.36, 37),
|
||||||
|
],
|
||||||
|
'monthly': [
|
||||||
|
( 317.00, 0.00, 0),
|
||||||
|
( 1125.00, 0.00, 10),
|
||||||
|
( 3606.00, 80.80, 12),
|
||||||
|
( 7333.00, 378.52, 22),
|
||||||
|
( 13710.00, 1198.46, 24),
|
||||||
|
( 17325.00, 2728.94, 32),
|
||||||
|
( 42842.00, 3885.74, 35),
|
||||||
|
( 'inf', 12816.69, 37),
|
||||||
|
],
|
||||||
|
'quarterly': [
|
||||||
|
( 950.00, 0.00, 0),
|
||||||
|
( 3375.00, 0.00, 10),
|
||||||
|
( 10819.00, 242.50, 12),
|
||||||
|
( 22000.00, 1135.78, 22),
|
||||||
|
( 41131.00, 3595.60, 24),
|
||||||
|
( 51975.00, 8187.04, 32),
|
||||||
|
( 128525.00, 11657.12, 35),
|
||||||
|
( 'inf', 38449.62, 37),
|
||||||
|
],
|
||||||
|
'semi-annually': [
|
||||||
|
( 1900.00, 0.00, 0),
|
||||||
|
( 6750.00, 0.00, 10),
|
||||||
|
( 21638.00, 485.00, 12),
|
||||||
|
( 44000.00, 2271.56, 22),
|
||||||
|
( 82263.00, 7191.20, 24),
|
||||||
|
( 103950.00, 16374.32, 32),
|
||||||
|
( 257050.00, 23314.16, 35),
|
||||||
|
( 'inf', 76899.16, 37),
|
||||||
|
],
|
||||||
|
'annually': [
|
||||||
|
( 3800.00, 0.00, 0),
|
||||||
|
( 13500.00, 0.00, 10),
|
||||||
|
( 43275.00, 970.00, 12),
|
||||||
|
( 88000.00, 4543.00, 22),
|
||||||
|
( 164525.00, 14382.50, 24),
|
||||||
|
( 207900.00, 32748.50, 32),
|
||||||
|
( 514100.00, 46628.50, 35),
|
||||||
|
( 'inf', 153798.50, 37),
|
||||||
|
],
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fit_table_single"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fit_table_single_2020" model="hr.rule.parameter.value">
|
||||||
|
<!-- Major changes in 2020 -->
|
||||||
|
<!-- Wage Threshold, Base Withholding Amount, Marginal Rate Over Threshold -->
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'standard': [
|
||||||
|
( 0.00, 0.00, 0.00),
|
||||||
|
( 3800.00, 0.00, 0.10),
|
||||||
|
( 13675.00, 987.50, 0.12),
|
||||||
|
( 43925.00, 4617.50, 0.22),
|
||||||
|
( 89325.00, 14605.50, 0.24),
|
||||||
|
( 167100.00, 33271.50, 0.32),
|
||||||
|
( 211150.00, 47367.50, 0.35),
|
||||||
|
( 522200.00, 156235.00, 0.37),
|
||||||
|
],
|
||||||
|
'higher': [
|
||||||
|
( 0.00, 0.00, 0.00),
|
||||||
|
( 6200.00, 0.00, 0.10),
|
||||||
|
( 11138.00, 493.75, 0.12),
|
||||||
|
( 26263.00, 2308.75, 0.22),
|
||||||
|
( 48963.00, 7302.75, 0.24),
|
||||||
|
( 87850.00, 16635.75, 0.32),
|
||||||
|
( 109875.00, 23683.75, 0.35),
|
||||||
|
( 265400.00, 78117.50, 0.37),
|
||||||
|
],
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fit_table_single"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Married -->
|
||||||
|
<record id="rule_parameter_941_fit_table_married" model="hr.rule.parameter">
|
||||||
|
<field name="name">Federal 941 FIT Table Married</field>
|
||||||
|
<field name="code">fed_941_fit_table_married</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fit_table_married_2018" model="hr.rule.parameter.value">
|
||||||
|
<!-- Bogus 2018 -->
|
||||||
|
<!-- But-not-over, $, % -->
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': [
|
||||||
|
( 227.00, 0.00, 0),
|
||||||
|
( 600.00, 0.00, 10),
|
||||||
|
( 1745.00, 37.30, 12),
|
||||||
|
( 3465.00, 174.70, 22),
|
||||||
|
( 6409.00, 553.10, 24),
|
||||||
|
( 8077.00, 1259.66, 32),
|
||||||
|
( 12003.00, 1793.42, 35),
|
||||||
|
( 'inf', 3167.52, 37),
|
||||||
|
],
|
||||||
|
'bi-weekly': [
|
||||||
|
( 454.00, 0.00, 0),
|
||||||
|
( 1200.00, 0.00, 10),
|
||||||
|
( 3490.00, 74.60, 12),
|
||||||
|
( 6931.00, 349.40, 22),
|
||||||
|
( 12817.00, 1106.42, 24),
|
||||||
|
( 16154.00, 2519.06, 32),
|
||||||
|
( 24006.00, 3586.90, 35),
|
||||||
|
( 'inf', 6335.10, 37),
|
||||||
|
],
|
||||||
|
'semi-monthly': [
|
||||||
|
( 492.00, 0.00, 0),
|
||||||
|
( 1300.00, 0.00, 10),
|
||||||
|
( 3781.00, 80.80, 12),
|
||||||
|
( 7508.00, 378.52, 22),
|
||||||
|
( 13885.00, 1198.46, 24),
|
||||||
|
( 17500.00, 2728.94, 32),
|
||||||
|
( 26006.00, 3885.74, 35),
|
||||||
|
( 'inf', 6862.84, 37),
|
||||||
|
],
|
||||||
|
'monthly': [
|
||||||
|
( 983.00, 0.00, 0),
|
||||||
|
( 2600.00, 0.00, 10),
|
||||||
|
( 7563.00, 161.70, 12),
|
||||||
|
( 15017.00, 757.26, 22),
|
||||||
|
( 27771.00, 2397.14, 24),
|
||||||
|
( 35000.00, 5458.10, 32),
|
||||||
|
( 52013.00, 7771.38, 35),
|
||||||
|
( 'inf', 13725.93, 37),
|
||||||
|
],
|
||||||
|
'quarterly': [
|
||||||
|
( 2950.00, 0.00, 0),
|
||||||
|
( 7800.00, 0.00, 10),
|
||||||
|
( 22688.00, 485.00, 12),
|
||||||
|
( 45050.00, 2271.56, 22),
|
||||||
|
( 83313.00, 7191.20, 24),
|
||||||
|
( 105000.00, 16374.32, 32),
|
||||||
|
( 156038.00, 23314.16, 35),
|
||||||
|
( 'inf', 41177.46, 37),
|
||||||
|
],
|
||||||
|
'semi-annually': [
|
||||||
|
( 5900.00, 0.00, 0),
|
||||||
|
( 15600.00, 0.00, 10),
|
||||||
|
( 45375.00, 970.00, 12),
|
||||||
|
( 90100.00, 4543.00, 22),
|
||||||
|
( 166625.00, 14382.50, 24),
|
||||||
|
( 210000.00, 32748.50, 32),
|
||||||
|
( 312075.00, 46628.50, 35),
|
||||||
|
( 'inf', 82354.75, 37),
|
||||||
|
],
|
||||||
|
'annually': [
|
||||||
|
( 11800.00, 0.00, 0),
|
||||||
|
( 31200.00, 0.00, 10),
|
||||||
|
( 90750.00, 1940.00, 12),
|
||||||
|
( 180200.00, 9086.00, 22),
|
||||||
|
( 333250.00, 28765.00, 24),
|
||||||
|
( 420000.00, 65497.00, 32),
|
||||||
|
( 624150.00, 93257.00, 35),
|
||||||
|
( 'inf', 164709.50, 37),
|
||||||
|
],
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fit_table_married"/>
|
||||||
|
<field name="date_from" eval="datetime(2018, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fit_table_married_2019" model="hr.rule.parameter.value">
|
||||||
|
<!-- But-not-over, $, % -->
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': [
|
||||||
|
( 227.00, 0.00, 0),
|
||||||
|
( 600.00, 0.00, 10),
|
||||||
|
( 1745.00, 37.30, 12),
|
||||||
|
( 3465.00, 174.70, 22),
|
||||||
|
( 6409.00, 553.10, 24),
|
||||||
|
( 8077.00, 1259.66, 32),
|
||||||
|
( 12003.00, 1793.42, 35),
|
||||||
|
( 'inf', 3167.52, 37),
|
||||||
|
],
|
||||||
|
'bi-weekly': [
|
||||||
|
( 454.00, 0.00, 0),
|
||||||
|
( 1200.00, 0.00, 10),
|
||||||
|
( 3490.00, 74.60, 12),
|
||||||
|
( 6931.00, 349.40, 22),
|
||||||
|
( 12817.00, 1106.42, 24),
|
||||||
|
( 16154.00, 2519.06, 32),
|
||||||
|
( 24006.00, 3586.90, 35),
|
||||||
|
( 'inf', 6335.10, 37),
|
||||||
|
],
|
||||||
|
'semi-monthly': [
|
||||||
|
( 492.00, 0.00, 0),
|
||||||
|
( 1300.00, 0.00, 10),
|
||||||
|
( 3781.00, 80.80, 12),
|
||||||
|
( 7508.00, 378.52, 22),
|
||||||
|
( 13885.00, 1198.46, 24),
|
||||||
|
( 17500.00, 2728.94, 32),
|
||||||
|
( 26006.00, 3885.74, 35),
|
||||||
|
( 'inf', 6862.84, 37),
|
||||||
|
],
|
||||||
|
'monthly': [
|
||||||
|
( 983.00, 0.00, 0),
|
||||||
|
( 2600.00, 0.00, 10),
|
||||||
|
( 7563.00, 161.70, 12),
|
||||||
|
( 15017.00, 757.26, 22),
|
||||||
|
( 27771.00, 2397.14, 24),
|
||||||
|
( 35000.00, 5458.10, 32),
|
||||||
|
( 52013.00, 7771.38, 35),
|
||||||
|
( 'inf', 13725.93, 37),
|
||||||
|
],
|
||||||
|
'quarterly': [
|
||||||
|
( 2950.00, 0.00, 0),
|
||||||
|
( 7800.00, 0.00, 10),
|
||||||
|
( 22688.00, 485.00, 12),
|
||||||
|
( 45050.00, 2271.56, 22),
|
||||||
|
( 83313.00, 7191.20, 24),
|
||||||
|
( 105000.00, 16374.32, 32),
|
||||||
|
( 156038.00, 23314.16, 35),
|
||||||
|
( 'inf', 41177.46, 37),
|
||||||
|
],
|
||||||
|
'semi-annually': [
|
||||||
|
( 5900.00, 0.00, 0),
|
||||||
|
( 15600.00, 0.00, 10),
|
||||||
|
( 45375.00, 970.00, 12),
|
||||||
|
( 90100.00, 4543.00, 22),
|
||||||
|
( 166625.00, 14382.50, 24),
|
||||||
|
( 210000.00, 32748.50, 32),
|
||||||
|
( 312075.00, 46628.50, 35),
|
||||||
|
( 'inf', 82354.75, 37),
|
||||||
|
],
|
||||||
|
'annually': [
|
||||||
|
( 11800.00, 0.00, 0),
|
||||||
|
( 31200.00, 0.00, 10),
|
||||||
|
( 90750.00, 1940.00, 12),
|
||||||
|
( 180200.00, 9086.00, 22),
|
||||||
|
( 333250.00, 28765.00, 24),
|
||||||
|
( 420000.00, 65497.00, 32),
|
||||||
|
( 624150.00, 93257.00, 35),
|
||||||
|
( 'inf', 164709.50, 37),
|
||||||
|
],
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fit_table_married"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fit_table_married_2020" model="hr.rule.parameter.value">
|
||||||
|
<!-- Major changes in 2020 -->
|
||||||
|
<!-- Wage Threshold, Base Withholding Amount, Marginal Rate Over Threshold -->
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'standard': [
|
||||||
|
( 0.00, 0.00, 0.00),
|
||||||
|
( 11900.00, 0.00, 0.10),
|
||||||
|
( 31650.00, 1975.00, 0.12),
|
||||||
|
( 92150.00, 9235.00, 0.22),
|
||||||
|
( 182950.00, 29211.00, 0.24),
|
||||||
|
( 338500.00, 66543.00, 0.32),
|
||||||
|
( 426600.00, 94735.00, 0.35),
|
||||||
|
( 633950.00, 167307.50, 0.37),
|
||||||
|
],
|
||||||
|
'higher': [
|
||||||
|
( 0.00, 0.00, 0.00),
|
||||||
|
( 12400.00, 0.00, 0.10),
|
||||||
|
( 22275.00, 987.50, 0.12),
|
||||||
|
( 52525.00, 4617.50, 0.22),
|
||||||
|
( 97925.00, 14605.50, 0.24),
|
||||||
|
( 175700.00, 33271.50, 0.32),
|
||||||
|
( 219750.00, 47367.50, 0.35),
|
||||||
|
( 323425.00, 83653.75, 0.37),
|
||||||
|
],
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fit_table_married"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="rule_parameter_941_fit_table_hh" model="hr.rule.parameter">
|
||||||
|
<field name="name">Federal 941 FIT Table Head of Household</field>
|
||||||
|
<field name="code">fed_941_fit_table_hh</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_941_fit_table_hh_2020" model="hr.rule.parameter.value">
|
||||||
|
<!-- Major changes in 2020 -->
|
||||||
|
<!-- Wage Threshold, Base Withholding Amount, Marginal Rate Over Threshold -->
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'standard': [
|
||||||
|
( 0.00, 0.00, 0.00),
|
||||||
|
( 10050.00, 0.00, 0.10),
|
||||||
|
( 24150.00, 1410.00, 0.12),
|
||||||
|
( 63750.00, 6162.00, 0.22),
|
||||||
|
( 95550.00, 13158.00, 0.24),
|
||||||
|
( 173350.00, 31830.00, 0.32),
|
||||||
|
( 217400.00, 45926.00, 0.35),
|
||||||
|
( 528450.00, 154793.50, 0.37),
|
||||||
|
],
|
||||||
|
'higher': [
|
||||||
|
( 0.00, 0.00, 0.00),
|
||||||
|
( 9325.00, 0.00, 0.10),
|
||||||
|
( 16375.00, 705.00, 0.12),
|
||||||
|
( 36175.00, 3081.00, 0.22),
|
||||||
|
( 52075.00, 6579.00, 0.24),
|
||||||
|
( 90975.00, 15915.00, 0.32),
|
||||||
|
( 113000.00, 22963.00, 0.35),
|
||||||
|
( 268525.00, 77396.75, 0.37),
|
||||||
|
],
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_941_fit_table_hh"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
24
l10n_us_hr_payroll/data/federal/fed_941_fit_rules.xml
Normal file
24
l10n_us_hr_payroll/data/federal/fed_941_fit_rules.xml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="hr_payroll_category_ee_fed_941_fit" model="hr.salary.rule.category">
|
||||||
|
<field name="name">EE: Federal 941 Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_941_FIT</field>
|
||||||
|
<field name="parent_id" ref="hr_payroll.DED"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_fed_941_fit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="190"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_fed_941_fit"/>
|
||||||
|
<field name="name">EE: US Federal Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_941_FIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ee_us_941_fit(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ee_us_941_fit(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_eftps_941"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
29
l10n_us_hr_payroll/data/integration_rules.xml
Normal file
29
l10n_us_hr_payroll/data/integration_rules.xml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Commissions from hr_payroll_commission -->
|
||||||
|
<record id="hr_salary_rule_commission" model="hr.salary.rule">
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result = inputs.COMMISSION.amount > 0.0 if inputs.COMMISSION else False</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result = inputs.COMMISSION.amount if inputs.COMMISSION else 0</field>
|
||||||
|
<field name="code">BASIC_COM</field>
|
||||||
|
<field name="category_id" ref="hr_payroll.BASIC"/>
|
||||||
|
<field name="name">Commissions</field>
|
||||||
|
<field name="sequence" eval="20"/>
|
||||||
|
<field name="struct_id" ref="l10n_us_hr_payroll.hr_payroll_structure"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Badges from hr_payroll_gamification -->
|
||||||
|
<record id="hr_salary_rule_gamification" model="hr.salary.rule">
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result = inputs.BADGES.amount > 0.0 if inputs.BADGES else False</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result = inputs.BADGES.amount if inputs.BADGES else 0</field>
|
||||||
|
<field name="code">BASIC_BADGES</field>
|
||||||
|
<field name="category_id" ref="hr_payroll.BASIC"/>
|
||||||
|
<field name="name">Badges</field>
|
||||||
|
<field name="sequence" eval="20"/>
|
||||||
|
<field name="struct_id" ref="l10n_us_hr_payroll.hr_payroll_structure"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
95
l10n_us_hr_payroll/data/state/ak_alaska.xml
Normal file
95
l10n_us_hr_payroll/data/state/ak_alaska.xml
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_ak_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AK Alaska SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ak_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ak_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">39900.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ak_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ak_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">41500.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ak_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_ak_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AK Alaska SUTA Rate</field>
|
||||||
|
<field name="code">us_ak_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ak_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.780</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ak_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ak_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.590</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ak_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ak_suta_ee_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AK Alaska SUTA Rate EE</field>
|
||||||
|
<field name="code">us_ak_suta_ee_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ak_suta_ee_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.500</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ak_suta_ee_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ak_suta_ee_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.500</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ak_suta_ee_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_ak_dor" model="res.partner">
|
||||||
|
<field name="name">US Alaska - Department of Labor and Workforce Development (ADLWD) - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ak_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US AK Alaska State Unemployment</field>
|
||||||
|
<field name="code">ER_US_AK_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_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')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">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')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ak_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_ak_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_suta"/>
|
||||||
|
<field name="name">EE: US AK Alaska State Unemployment (UC-2)</field>
|
||||||
|
<field name="code">EE_US_AK_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_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')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">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')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ak_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
219
l10n_us_hr_payroll/data/state/al_alabama.xml
Normal file
219
l10n_us_hr_payroll/data/state/al_alabama.xml
Normal file
@@ -0,0 +1,219 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_al_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AL Alabama SUTA Wage Base</field>
|
||||||
|
<field name="code">us_al_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_al_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">8000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_al_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_al_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">8000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_al_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_al_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AL Alabama SUTA Rate</field>
|
||||||
|
<field name="code">us_al_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_al_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_al_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_al_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_al_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_al_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AL Alabama SIT Tax Rate</field>
|
||||||
|
<field name="code">us_al_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_al_sit_tax_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'0': [
|
||||||
|
( 500, 2),
|
||||||
|
( 3000, 4),
|
||||||
|
('inf', 5),
|
||||||
|
],
|
||||||
|
'M': [
|
||||||
|
( 1000, 2),
|
||||||
|
( 6000, 4),
|
||||||
|
('inf', 5),
|
||||||
|
],
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_al_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_al_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'0' : [
|
||||||
|
( 500, 2),
|
||||||
|
( 2500, 4),
|
||||||
|
('inf', 5),
|
||||||
|
],
|
||||||
|
'M': [
|
||||||
|
( 1000, 2),
|
||||||
|
( 5000, 4),
|
||||||
|
('inf', 5),
|
||||||
|
],
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_al_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_al_sit_dependent_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AL Alabama Dependent Rate</field>
|
||||||
|
<field name="code">us_al_sit_dependent_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<!-- https://revenue.alabama.gov/wp-content/uploads/2019/01/whbooklet_0119.pdf -->
|
||||||
|
<!-- Page 7. D-->
|
||||||
|
<record id="rule_parameter_us_al_sit_dependent_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">[
|
||||||
|
( 1000, 20000),
|
||||||
|
( 500, 100000),
|
||||||
|
( 300, 'inf'),
|
||||||
|
]</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_al_sit_dependent_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://revenue.alabama.gov/wp-content/uploads/2019/01/whbooklet_0119.pdf -->
|
||||||
|
<!-- Page 7. D-->
|
||||||
|
<record id="rule_parameter_us_al_sit_dependent_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">[
|
||||||
|
( 1000, 20000),
|
||||||
|
( 500, 100000),
|
||||||
|
( 300, 'inf'),
|
||||||
|
]</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_al_sit_dependent_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_al_sit_standard_deduction_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AL Alabama Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_al_sit_standard_deduction_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<!-- https://revenue.alabama.gov/wp-content/uploads/2019/01/whbooklet_0119.pdf -->
|
||||||
|
<!-- Page 7. A-->
|
||||||
|
<record id="rule_parameter_us_al_sit_standard_deduction_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'0': ((23499.0, 2500.0), (33000.0, 2500.0, 25.0, 500.0), ('inf', 2000.0)),
|
||||||
|
'S': ((23499.0, 2500.0), (33000.0, 2500.0, 25.0, 500.0), ('inf', 2000.0)),
|
||||||
|
'MS': ((10749.0, 3750.0), (15500.0, 3750.0, 88.0, 250.0), ('inf', 2000.0)),
|
||||||
|
'M': ((23499.0, 7500.0), (33000.0, 7500.0, 175.0, 500.0), ('inf', 4000.0)),
|
||||||
|
'H': ((23499.0, 4700.0), (33000.0, 7500.0, 175.0, 500.0), ('inf', 4000.0)),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_al_sit_standard_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://revenue.alabama.gov/wp-content/uploads/2019/01/whbooklet_0119.pdf -->
|
||||||
|
<!-- Page 7. A-->
|
||||||
|
<record id="rule_parameter_us_al_sit_standard_deduction_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'0': ((23499.0, 2500.0), (33000.0, 2500.0, 25.0, 500.0), ('inf', 2000.0)),
|
||||||
|
'S': ((23499.0, 2500.0), (33000.0, 2500.0, 25.0, 500.0), ('inf', 2000.0)),
|
||||||
|
'MS': ((10749.0, 3750.0), (15500.0, 3750.0, 88.0, 250.0), ('inf', 2000.0)),
|
||||||
|
'M': ((23499.0, 7500.0), (33000.0, 7500.0, 175.0, 500.0), ('inf', 4000.0)),
|
||||||
|
'H': ((23499.0, 4700.0), (33000.0, 7500.0, 175.0, 500.0), ('inf', 4000.0)),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_al_sit_standard_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_al_sit_personal_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AL Alabama Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_al_sit_personal_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<!-- https://revenue.alabama.gov/wp-content/uploads/2019/01/whbooklet_0119.pdf -->
|
||||||
|
<!-- Page 7. C-->
|
||||||
|
<record id="rule_parameter_us_al_sit_personal_exemption_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'0' : 0,
|
||||||
|
'S' : 1500,
|
||||||
|
'MS': 1500,
|
||||||
|
'M' : 3000,
|
||||||
|
'H' : 3000,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_al_sit_personal_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://revenue.alabama.gov/wp-content/uploads/2019/01/whbooklet_0119.pdf -->
|
||||||
|
<!-- Page 7. C-->
|
||||||
|
<record id="rule_parameter_us_al_sit_personal_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'0' : 0,
|
||||||
|
'S' : 1500,
|
||||||
|
'MS': 1500,
|
||||||
|
'M' : 3000,
|
||||||
|
'H' : 3000,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_al_sit_personal_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_al_dor" model="res.partner">
|
||||||
|
<field name="name">US Alabama - Department of Economic Security (IDES) - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_al_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Alabama - Department of Revenue (IDOR) - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_al_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US AL Alabama State Unemployment</field>
|
||||||
|
<field name="code">ER_US_AL_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_al_suta_wage_base', rate='us_al_suta_rate', state_code='AL')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_al_suta_wage_base', rate='us_al_suta_rate', state_code='AL')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_al_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_al_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US AL Alabama State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_AL_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = al_alabama_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = al_alabama_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_al_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
145
l10n_us_hr_payroll/data/state/ar_arkansas.xml
Normal file
145
l10n_us_hr_payroll/data/state/ar_arkansas.xml
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_ar_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AR Arkansas SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ar_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ar_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">10000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ar_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ar_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">8000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ar_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_ar_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AR Arkansas SUTA Rate</field>
|
||||||
|
<field name="code">us_ar_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ar_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">3.2</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ar_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ar_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.9</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ar_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ar_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AR Arkansas SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ar_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ar_sit_tax_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">[
|
||||||
|
( 4599, 0.0, 0.00),
|
||||||
|
( 9099, 2.0, 91.98),
|
||||||
|
( 13699, 3.0, 182.97),
|
||||||
|
( 22599, 3.4, 237.77),
|
||||||
|
( 37899, 5.0, 421.46),
|
||||||
|
( 80800, 5.9, 762.55),
|
||||||
|
( 81800, 6.6, 1243.40),
|
||||||
|
( 82800, 6.6, 1143.40),
|
||||||
|
( 84100, 6.6, 1043.40),
|
||||||
|
( 85200, 6.6, 943.40),
|
||||||
|
( 86200, 6.6, 843.40),
|
||||||
|
( 'inf', 6.6, 803.40),
|
||||||
|
]</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ar_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://www.dfa.arkansas.gov/images/uploads/incomeTaxOffice/whformula.pdf-->
|
||||||
|
<!-- Notover, percentage , minus adjustment page 1. 3.-->
|
||||||
|
<record id="rule_parameter_us_ar_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">[
|
||||||
|
( 4599, 0.0, 0.00),
|
||||||
|
( 9099, 2.0, 91.98),
|
||||||
|
( 13699, 3.0, 182.97),
|
||||||
|
( 22599, 3.4, 237.77),
|
||||||
|
( 37899, 5.0, 421.46),
|
||||||
|
( 80800, 5.9, 762.55),
|
||||||
|
( 81800, 6.6, 1243.40),
|
||||||
|
( 82800, 6.6, 1143.40),
|
||||||
|
( 84100, 6.6, 1043.40),
|
||||||
|
( 85200, 6.6, 943.40),
|
||||||
|
( 86200, 6.6, 843.40),
|
||||||
|
( 'inf', 6.6, 803.40),
|
||||||
|
]</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ar_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ar_sit_standard_deduction_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AR Arkansas Allowances Rate</field>
|
||||||
|
<field name="code">us_ar_sit_standard_deduction_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ar_sit_standard_deduction_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2200.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ar_sit_standard_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ar_sit_standard_deduction_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2200.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ar_sit_standard_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_ar_dor" model="res.partner">
|
||||||
|
<field name="name">US Arkansas - Department of Workforce Solutions - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ar_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Arkansas - Department of Financial Administration - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ar_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US AR Arkansas State Unemployment</field>
|
||||||
|
<field name="code">ER_US_AR_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ar_suta_wage_base', rate='us_ar_suta_rate', state_code='AR')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ar_suta_wage_base', rate='us_ar_suta_rate', state_code='AR')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ar_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_ar_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US AR Arkansas State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_AR_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ar_arkansas_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ar_arkansas_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ar_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
81
l10n_us_hr_payroll/data/state/az_arizona.xml
Normal file
81
l10n_us_hr_payroll/data/state/az_arizona.xml
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_az_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AZ Arizona SUTA Wage Base</field>
|
||||||
|
<field name="code">us_az_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_az_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">7000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_az_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_az_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">7000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_az_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_az_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US AZ Arizona SUTA Rate</field>
|
||||||
|
<field name="code">us_az_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_az_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_az_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_az_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_az_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_az_dor" model="res.partner">
|
||||||
|
<field name="name">US Arizona - Department of Economic Security (ADES) - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_az_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Arizona - Department of Revenue (ADOR) - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_az_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US AZ Arizona State Unemployment</field>
|
||||||
|
<field name="code">ER_US_AZ_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_az_suta_wage_base', rate='us_az_suta_rate', state_code='AZ')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_az_suta_wage_base', rate='us_az_suta_rate', state_code='AZ')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_az_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_az_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US AZ Arizona State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_AZ_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = az_arizona_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = az_arizona_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_az_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
829
l10n_us_hr_payroll/data/state/ca_california.xml
Normal file
829
l10n_us_hr_payroll/data/state/ca_california.xml
Normal file
@@ -0,0 +1,829 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_ca_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US CA California SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ca_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">7000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ca_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">7000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_ca_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US CA California SUTA Rate</field>
|
||||||
|
<field name="code">us_ca_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">3.5</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ca_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">3.4</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- ETT Rate -->
|
||||||
|
<record id="rule_parameter_us_ca_suta_ett_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US CA California SUTA ETT Rate</field>
|
||||||
|
<field name="code">us_ca_suta_ett_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_suta_ett_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.1</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_suta_ett_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ca_suta_ett_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.1</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_suta_ett_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- SDI Rate -->
|
||||||
|
<record id="rule_parameter_us_ca_suta_sdi_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US CA California SUTA SDI Rate</field>
|
||||||
|
<field name="code">us_ca_suta_sdi_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_suta_sdi_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_suta_sdi_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ca_suta_sdi_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_suta_sdi_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ca_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US CA California SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ca_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_sit_tax_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'head_household': {
|
||||||
|
'weekly': (
|
||||||
|
( 316, 0.0110, 0.00),
|
||||||
|
( 750, 0.0220, 3.48),
|
||||||
|
( 967, 0.0440, 13.03),
|
||||||
|
( 1196, 0.0660, 22.58),
|
||||||
|
( 1413, 0.0880, 37.69),
|
||||||
|
( 7212, 0.1023, 56.79),
|
||||||
|
( 8654, 0.1133, 650.03),
|
||||||
|
(14423, 0.1243, 813.41),
|
||||||
|
(19231, 0.1353, 1530.50),
|
||||||
|
('inf', 0.1463, 2181.02),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 632, 0.0110, 0.00),
|
||||||
|
( 1500, 0.0220, 6.95),
|
||||||
|
( 1934, 0.0440, 26.05),
|
||||||
|
( 2392, 0.0660, 45.15),
|
||||||
|
( 2826, 0.0880, 75.38),
|
||||||
|
(14424, 0.1023, 113.57),
|
||||||
|
(17308, 0.1133, 1300.05),
|
||||||
|
(28846, 0.1243, 1626.81),
|
||||||
|
(38462, 0.1353, 3060.98),
|
||||||
|
('inf', 0.1463, 4362.02),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 686, 0.0110, 0.00),
|
||||||
|
( 1625, 0.0220, 7.55),
|
||||||
|
( 2094, 0.0440, 28.21),
|
||||||
|
( 2592, 0.0660, 48.85),
|
||||||
|
( 3062, 0.0880, 81.72),
|
||||||
|
(15625, 0.1023, 123.08),
|
||||||
|
(18750, 0.1133, 1408.27),
|
||||||
|
(31250, 0.1243, 1762.33),
|
||||||
|
(41667, 0.1353, 3316.08),
|
||||||
|
('inf', 0.1463, 4725.50),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 1372, 0.0110, 0.00),
|
||||||
|
( 3250, 0.0220, 15.09),
|
||||||
|
( 4188, 0.0440, 56.41),
|
||||||
|
( 5184, 0.0660, 97.68),
|
||||||
|
( 6124, 0.0880, 163.42),
|
||||||
|
(31250, 0.1023, 246.14),
|
||||||
|
(37500, 0.1133, 2816.53),
|
||||||
|
(62500, 0.1243, 3524.66),
|
||||||
|
(83334, 0.1353, 6632.16),
|
||||||
|
('inf', 0.1463, 9451.00),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 4114, 0.0110, 0.00),
|
||||||
|
( 9748, 0.0220, 45.25),
|
||||||
|
( 12566, 0.0440, 169.20),
|
||||||
|
( 15552, 0.0660, 293.19),
|
||||||
|
( 18369, 0.0880, 490.27),
|
||||||
|
( 93751, 0.1023, 738.17),
|
||||||
|
(112501, 0.1133, 8449.75),
|
||||||
|
(187501, 0.1243, 10574.13),
|
||||||
|
(250000, 0.1353, 19896.63),
|
||||||
|
( 'inf', 0.1463, 28352.74),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 8228, 0.0110, 0.00),
|
||||||
|
( 19496, 0.0220, 90.51),
|
||||||
|
( 25132, 0.0440, 338.41),
|
||||||
|
( 31104, 0.0660, 586.39),
|
||||||
|
( 36738, 0.0880, 980.54),
|
||||||
|
(187502, 0.1023, 1476.33),
|
||||||
|
(225002, 0.1133, 16899.49),
|
||||||
|
(375002, 0.1243, 21148.24),
|
||||||
|
(500000, 0.1353, 39793.24),
|
||||||
|
( 'inf', 0.1463, 56705.47),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 16457, 0.0110, 0.00),
|
||||||
|
( 38991, 0.0220, 181.03),
|
||||||
|
( 50264, 0.0440, 676.78),
|
||||||
|
( 62206, 0.0660, 1172.79),
|
||||||
|
( 73477, 0.0880, 1960.96),
|
||||||
|
( 375002, 0.1023, 2952.81),
|
||||||
|
( 450003, 0.1133, 33798.82),
|
||||||
|
( 750003, 0.1243, 42296.43),
|
||||||
|
(1000000, 0.1353, 79586.43),
|
||||||
|
( 'inf', 0.1463, 113411.02),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': (
|
||||||
|
( 316, 0.0110, 0.00),
|
||||||
|
( 750, 0.0220, 3.48),
|
||||||
|
( 1184, 0.0440, 13.03),
|
||||||
|
( 1642, 0.0660, 32.13),
|
||||||
|
( 2076, 0.0880, 62.36),
|
||||||
|
(10606, 0.1023, 100.55),
|
||||||
|
(12726, 0.1133, 973.17),
|
||||||
|
(19231, 0.1243, 1213.37),
|
||||||
|
(21210, 0.1353, 2021.94),
|
||||||
|
('inf', 0.1463, 2289.70),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 632, 0.0110, 0.00),
|
||||||
|
( 1500, 0.0220, 6.95),
|
||||||
|
( 2368, 0.0440, 26.05),
|
||||||
|
( 3284, 0.0660, 64.24),
|
||||||
|
( 4152, 0.0880, 124.70),
|
||||||
|
(21212, 0.1023, 201.08),
|
||||||
|
(25452, 0.1133, 1946.32),
|
||||||
|
(38462, 0.1243, 2426.71),
|
||||||
|
(42420, 0.1353, 4043.85),
|
||||||
|
('inf', 0.1463, 4579.37),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 686, 0.0110, 0.00),
|
||||||
|
( 1624, 0.0220, 7.55),
|
||||||
|
( 2564, 0.0440, 28.19),
|
||||||
|
( 3560, 0.0660, 69.55),
|
||||||
|
( 4498, 0.0880, 135.29),
|
||||||
|
(22978, 0.1023, 217.83),
|
||||||
|
(27574, 0.1133, 2108.33),
|
||||||
|
(41667, 0.1243, 2629.06),
|
||||||
|
(45956, 0.1353, 4380.82),
|
||||||
|
('inf', 0.1463, 4961.12),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 1372, 0.0110, 0.00),
|
||||||
|
( 3248, 0.0220, 15.09),
|
||||||
|
( 5128, 0.0440, 56.36),
|
||||||
|
( 7120, 0.0660, 139.08),
|
||||||
|
( 8996, 0.0880, 270.55),
|
||||||
|
(45956, 0.1023, 435.64),
|
||||||
|
(55148, 0.1133, 4216.65),
|
||||||
|
(83334, 0.1243, 5258.10),
|
||||||
|
(91912, 0.1353, 8761.62),
|
||||||
|
('inf', 0.1463, 9922.22),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 4112, 0.0110, 0.00),
|
||||||
|
( 9748, 0.0220, 45.23),
|
||||||
|
( 15384, 0.0440, 169.22),
|
||||||
|
( 21356, 0.0660, 417.20),
|
||||||
|
( 26990, 0.0880, 811.35),
|
||||||
|
(137870, 0.1023, 1307.14),
|
||||||
|
(165442, 0.1133, 12650.16),
|
||||||
|
(250000, 0.1243, 15774.07),
|
||||||
|
(275736, 0.1353, 26284.63),
|
||||||
|
( 'inf', 0.1463, 29766.71),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 8224, 0.0110, 0.00),
|
||||||
|
( 19496, 0.0220, 90.46),
|
||||||
|
( 30768, 0.0440, 338.44),
|
||||||
|
( 42712, 0.0660, 834.41),
|
||||||
|
( 53980, 0.0880, 1622.71),
|
||||||
|
(275740, 0.1023, 2614.29),
|
||||||
|
(330884, 0.1133, 25300.34),
|
||||||
|
(500000, 0.1243, 31548.16),
|
||||||
|
(551472, 0.1353, 52569.28),
|
||||||
|
( 'inf', 0.1463, 59533.44),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 16446, 0.0110, 0.00),
|
||||||
|
( 38990, 0.0220, 180.91),
|
||||||
|
( 61538, 0.0440, 676.88),
|
||||||
|
( 85422, 0.0660, 1668.99),
|
||||||
|
( 107960, 0.0880, 3245.33),
|
||||||
|
( 551476, 0.1023, 5228.67),
|
||||||
|
( 661768, 0.1133, 50600.36),
|
||||||
|
(1000000, 0.1243, 63096.44),
|
||||||
|
(1102946, 0.1353, 105138.68),
|
||||||
|
( 'inf', 0.1463, 119067.26),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'single': {
|
||||||
|
'weekly': (
|
||||||
|
( 158, 0.0110, 0.00),
|
||||||
|
( 375, 0.0220, 1.74),
|
||||||
|
( 592, 0.0440, 6.51),
|
||||||
|
( 821, 0.0660, 16.06),
|
||||||
|
( 1038, 0.0880, 31.17),
|
||||||
|
( 5303, 0.1023, 50.27),
|
||||||
|
( 6363, 0.1133, 486.58),
|
||||||
|
(10605, 0.1243, 606.68),
|
||||||
|
(19231, 0.1353, 1133.96),
|
||||||
|
('inf', 0.1463, 2301.06),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 316, 0.0110, 0.00),
|
||||||
|
( 750, 0.0220, 3.48),
|
||||||
|
( 1184, 0.0440, 13.03),
|
||||||
|
( 1642, 0.066, 32.13),
|
||||||
|
( 2076, 0.0880, 62.36),
|
||||||
|
(10606, 0.1023, 100.55),
|
||||||
|
(12726, 0.1133, 973.17),
|
||||||
|
(21210, 0.1243, 1213.37),
|
||||||
|
(38462, 0.1353, 2267.93),
|
||||||
|
('inf', 0.1463, 4602.13),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 343, 0.0110, 0.00),
|
||||||
|
( 812, 0.0220, 3.77),
|
||||||
|
( 1282, 0.0440, 14.09),
|
||||||
|
( 1780, 0.0660, 34.77),
|
||||||
|
( 2249, 0.0880, 67.64),
|
||||||
|
(11489, 0.1023, 108.91),
|
||||||
|
(13787, 0.1133, 1054.16),
|
||||||
|
(22978, 0.1243, 1314.52),
|
||||||
|
(41667, 0.1353, 2456.96),
|
||||||
|
('inf', 0.1463, 4985.58),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 686, 0.0110, 0.00),
|
||||||
|
( 1624, 0.0220, 7.55),
|
||||||
|
( 2564, 0.0440, 28.19),
|
||||||
|
( 3560, 0.0660, 69.55),
|
||||||
|
( 4498, 0.0880, 135.29),
|
||||||
|
(22978, 0.1023, 217.83),
|
||||||
|
(27574, 0.1133, 2108.33),
|
||||||
|
(45956, 0.1243, 2629.06),
|
||||||
|
(83334, 0.1353, 4913.94),
|
||||||
|
('inf', 0.1463, 9971.18),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 2056, 0.0110, 0.00),
|
||||||
|
( 4874, 0.0220, 22.62),
|
||||||
|
( 7692, 0.0440, 84.62),
|
||||||
|
( 10678, 0.066, 208.61),
|
||||||
|
( 13495, 0.0880, 405.69),
|
||||||
|
( 68935, 0.1023, 653.59),
|
||||||
|
( 82721, 0.1133, 6325.10),
|
||||||
|
(137868, 0.1243, 7887.05),
|
||||||
|
(250000, 0.1353, 14741.82),
|
||||||
|
( 'inf', 0.1463, 29913.28),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 4112, 0.0110, 0.00),
|
||||||
|
( 9748, 0.0220, 45.23),
|
||||||
|
( 15384, 0.0440, 169.22),
|
||||||
|
( 21356, 0.0660, 417.20),
|
||||||
|
( 26990, 0.0880, 811.35),
|
||||||
|
(137870, 0.1023, 1307.14),
|
||||||
|
(165442, 0.1133, 12650.16),
|
||||||
|
(275736, 0.1243, 15774.07),
|
||||||
|
(500000, 0.1353, 29483.61),
|
||||||
|
('inf', 0.1463, 59826.53),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 8223, 0.0110, 0.00),
|
||||||
|
( 19495, 0.0220, 90.45),
|
||||||
|
( 30769, 0.0440, 338.43),
|
||||||
|
( 42711, 0.0660, 834.49),
|
||||||
|
( 53980, 0.0880, 1622.66),
|
||||||
|
( 275738, 0.1023, 2614.33),
|
||||||
|
( 330884, 0.1133, 25300.17),
|
||||||
|
( 551473, 0.1243, 31548.21),
|
||||||
|
(1000000, 0.1353, 58967.42),
|
||||||
|
( 'inf', 0.1463, 119653.12),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://www.edd.ca.gov/pdf_pub_ctr/20methb.pdf -->
|
||||||
|
<!-- Table 5. Tax rate table -->
|
||||||
|
<record id="rule_parameter_us_ca_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'head_household': {
|
||||||
|
'weekly': (
|
||||||
|
( 339, 0.0110, 0.00),
|
||||||
|
( 803, 0.0220, 3.73),
|
||||||
|
( 1035, 0.0440, 13.93),
|
||||||
|
( 1281, 0.0660, 24.15),
|
||||||
|
( 1514, 0.0880, 40.39),
|
||||||
|
( 7725, 0.1023, 60.89),
|
||||||
|
( 9270, 0.1133, 696.28),
|
||||||
|
(15450, 0.1243, 871.33),
|
||||||
|
(19231, 0.1353, 1639.50),
|
||||||
|
('inf', 0.1463, 2151.07),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 678, 0.0110, 0.00),
|
||||||
|
( 1606, 0.0220, 7.46),
|
||||||
|
( 2070, 0.0440, 27.88),
|
||||||
|
( 2562, 0.0660, 48.30),
|
||||||
|
( 3028, 0.0880, 80.77),
|
||||||
|
(15450, 0.1023, 121.78),
|
||||||
|
(18540, 0.1133, 1392.55),
|
||||||
|
(30900, 0.1243, 1742.65),
|
||||||
|
(38462, 0.1353, 3279.00),
|
||||||
|
('inf', 0.1463, 4302.14),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 735, 0.0110, 0.00),
|
||||||
|
( 1740, 0.0220, 8.09),
|
||||||
|
( 2243, 0.0440, 30.20),
|
||||||
|
( 2777, 0.0660, 52.33),
|
||||||
|
( 3280, 0.0880, 87.57),
|
||||||
|
(16738, 0.1023, 131.83),
|
||||||
|
(20085, 0.1133, 1508.58),
|
||||||
|
(33475, 0.1243, 1887.80),
|
||||||
|
(41667, 0.1353, 3552.18),
|
||||||
|
('inf', 0.1463, 4660.56),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 1470, 0.0110, 0.00),
|
||||||
|
( 3480, 0.0220, 16.17),
|
||||||
|
( 4486, 0.0440, 60.39),
|
||||||
|
( 5554, 0.0660, 104.65),
|
||||||
|
( 6560, 0.0880, 175.14),
|
||||||
|
(33476, 0.1023, 263.67),
|
||||||
|
(40170, 0.1133, 3017.18),
|
||||||
|
(66950, 0.1243, 3775.61),
|
||||||
|
(83334, 0.1353, 7104.36),
|
||||||
|
('inf', 0.1463, 9321.12),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 4407, 0.0110, 0.00),
|
||||||
|
( 10442, 0.0220, 48.48),
|
||||||
|
( 13461, 0.0440, 181.25),
|
||||||
|
( 16659, 0.0660, 314.09),
|
||||||
|
( 19678, 0.0880, 525.16),
|
||||||
|
(100426, 0.1023, 790.83),
|
||||||
|
(120512, 0.1133, 9051.35),
|
||||||
|
(200853, 0.1243, 11327.09),
|
||||||
|
(250000, 0.1353, 21313.48),
|
||||||
|
( 'inf', 0.1463, 27963.07),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 8814, 0.0110, 0.00),
|
||||||
|
( 20884, 0.0220, 96.95),
|
||||||
|
( 26922, 0.0440, 362.49),
|
||||||
|
( 33318, 0.0660, 628.16),
|
||||||
|
( 39356, 0.0880, 1050.30),
|
||||||
|
(200852, 0.1023, 1581.64),
|
||||||
|
(241024, 0.1133, 18102.68),
|
||||||
|
(401706, 0.1243, 22654.17),
|
||||||
|
(500000, 0.1353, 42626.94),
|
||||||
|
( 'inf', 0.1463, 55926.12),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 17629, 0.0110, 0.00),
|
||||||
|
( 41768, 0.0220, 193.92),
|
||||||
|
( 53843, 0.0440, 724.98),
|
||||||
|
( 66636, 0.0660, 1256.28),
|
||||||
|
( 78710, 0.0880, 2100.62),
|
||||||
|
( 401705, 0.1023, 3163.13),
|
||||||
|
( 482047, 0.1133, 36205.52),
|
||||||
|
( 803410, 0.1243, 45308.27),
|
||||||
|
(1000000, 0.1353, 85253.69),
|
||||||
|
( 'inf', 0.1463, 111852.32),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': (
|
||||||
|
( 338, 0.0110, 0.00),
|
||||||
|
( 804, 0.0220, 3.72),
|
||||||
|
( 1268, 0.0440, 13.97),
|
||||||
|
( 1760, 0.0660, 34.39),
|
||||||
|
( 2224, 0.0880, 66.86),
|
||||||
|
(11360, 0.1023, 107.69),
|
||||||
|
(13632, 0.1133, 1042.30),
|
||||||
|
(19231, 0.1243, 1299.72),
|
||||||
|
(22721, 0.1353, 1995.68),
|
||||||
|
('inf', 0.1463, 2467.88),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 676, 0.0110, 0.00),
|
||||||
|
( 1608, 0.0220, 7.44),
|
||||||
|
( 2536, 0.0440, 27.94),
|
||||||
|
( 3520, 0.0660, 68.77),
|
||||||
|
( 4448, 0.0880, 124.70),
|
||||||
|
(21212, 0.1023, 201.08),
|
||||||
|
(25452, 0.1133, 1946.32),
|
||||||
|
(38462, 0.1243, 2426.71),
|
||||||
|
(42420, 0.1353, 4043.85),
|
||||||
|
('inf', 0.1463, 4579.37),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 734, 0.0110, 0.00),
|
||||||
|
( 1740, 0.0220, 8.07),
|
||||||
|
( 2746, 0.0440, 30.20),
|
||||||
|
( 3812, 0.0660, 74.46),
|
||||||
|
( 4818, 0.0880, 144.82),
|
||||||
|
(24614, 0.1023, 233.35),
|
||||||
|
(29538, 0.1133, 2258.48),
|
||||||
|
(41667, 0.1243, 2816.37),
|
||||||
|
(49229, 0.1353, 4324.00),
|
||||||
|
('inf', 0.1463, 5347.14),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 1468, 0.0110, 0.00),
|
||||||
|
( 3480, 0.0220, 16.15),
|
||||||
|
( 5492, 0.0440, 60.41),
|
||||||
|
( 7624, 0.0660, 148.94),
|
||||||
|
( 9636, 0.0880, 289.65),
|
||||||
|
(49228, 0.1023, 466.71),
|
||||||
|
(59076, 0.1133, 4516.97),
|
||||||
|
(83334, 0.1243, 5632.75),
|
||||||
|
(98458, 0.1353, 8648.02),
|
||||||
|
('inf', 0.1463, 10694.30),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 4404, 0.0110, 0.00),
|
||||||
|
( 10442, 0.0220, 48.44),
|
||||||
|
( 16480, 0.0440, 181.28),
|
||||||
|
( 22876, 0.0660, 446.95),
|
||||||
|
( 28912, 0.0880, 869.09),
|
||||||
|
(147686, 0.1023, 1400.26),
|
||||||
|
(177222, 0.1133, 13550.84),
|
||||||
|
(250000, 0.1243, 16897.27),
|
||||||
|
(295371, 0.1353, 25943.58),
|
||||||
|
( 'inf', 0.1463, 32082.28),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 8808, 0.0110, 0.00),
|
||||||
|
( 20884, 0.0220, 96.89),
|
||||||
|
( 32960, 0.0440, 362.56),
|
||||||
|
( 45752, 0.0660, 893.90),
|
||||||
|
( 57824, 0.0880, 1738.17),
|
||||||
|
(295372, 0.1023, 2800.51),
|
||||||
|
(354444, 0.1133, 27101.67),
|
||||||
|
(500000, 0.1243, 33794.53),
|
||||||
|
(590742, 0.1353, 51887.14),
|
||||||
|
( 'inf', 0.1463, 64164.53),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 17618, 0.0110, 0.00),
|
||||||
|
( 41766, 0.0220, 193.80),
|
||||||
|
( 65920, 0.0440, 725.06),
|
||||||
|
( 91506, 0.0660, 1787.84),
|
||||||
|
( 115648, 0.0880, 3476.52),
|
||||||
|
( 590746, 0.1023, 5601.02),
|
||||||
|
( 708890, 0.1133, 54203.55),
|
||||||
|
(1000000, 0.1243, 67589.27),
|
||||||
|
(1181484, 0.1353, 103774.24),
|
||||||
|
( 'inf', 0.1463, 128329.03),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'single': {
|
||||||
|
'weekly': (
|
||||||
|
( 169, 0.0110, 0.00),
|
||||||
|
( 402, 0.0220, 1.86),
|
||||||
|
( 634, 0.0440, 6.99),
|
||||||
|
( 880, 0.0660, 17.20),
|
||||||
|
( 1112, 0.0880, 33.44),
|
||||||
|
( 5680, 0.1023, 53.86),
|
||||||
|
( 6816, 0.1133, 521.17),
|
||||||
|
(11360, 0.1243, 649.88),
|
||||||
|
(19231, 0.1353, 1214.70),
|
||||||
|
('inf', 0.1463, 2279.65),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 338, 0.0110, 0.00),
|
||||||
|
( 804, 0.0220, 3.72),
|
||||||
|
( 1268, 0.0440, 13.97),
|
||||||
|
( 1760, 0.0660, 34.39),
|
||||||
|
( 2224, 0.0880, 66.86),
|
||||||
|
(11360, 0.1023, 107.69),
|
||||||
|
(13632, 0.1133, 1042.30),
|
||||||
|
(22720, 0.1243, 1299.72),
|
||||||
|
(38462, 0.1353, 2429.36),
|
||||||
|
('inf', 0.1463, 4559.25),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 367, 0.0110, 0.00),
|
||||||
|
( 870, 0.0220, 4.04),
|
||||||
|
( 1373, 0.0440, 15.11),
|
||||||
|
( 1906, 0.0660, 37.24),
|
||||||
|
( 2409, 0.0880, 72.42),
|
||||||
|
(12307, 0.1023, 116.68),
|
||||||
|
(14769, 0.1133, 1129.25),
|
||||||
|
(24614, 0.1243, 1408.19),
|
||||||
|
(41667, 0.1353, 2631.92),
|
||||||
|
('inf', 0.1463, 4939.19),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 734, 0.0110, 0.00),
|
||||||
|
( 1740, 0.0220, 8.07),
|
||||||
|
( 2746, 0.0440, 30.20),
|
||||||
|
( 3812, 0.0660, 74.46),
|
||||||
|
( 4818, 0.0880, 144.82),
|
||||||
|
(24614, 0.1023, 233.35),
|
||||||
|
(29538, 0.1133, 2258.48),
|
||||||
|
(49228, 0.1243, 2816.37),
|
||||||
|
(83334, 0.1353, 5263.84),
|
||||||
|
('inf', 0.1463, 9878.38),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 2202, 0.0110, 0.00),
|
||||||
|
( 5221, 0.0220, 24.22),
|
||||||
|
( 8240, 0.0440, 90.64),
|
||||||
|
( 11438, 0.0660, 223.48),
|
||||||
|
( 14456, 0.0880, 434.55),
|
||||||
|
( 73843, 0.1023, 700.13),
|
||||||
|
( 88611, 0.1133, 6775.42),
|
||||||
|
(147686, 0.1243, 8448.63),
|
||||||
|
(250000, 0.1353, 15791.65),
|
||||||
|
( 'inf', 0.1463, 29634.73),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 4404, 0.0110, 0.00),
|
||||||
|
( 10442, 0.0220, 48.44),
|
||||||
|
( 16480, 0.0440, 181.28),
|
||||||
|
( 22876, 0.0660, 446.95),
|
||||||
|
( 28912, 0.0880, 869.09),
|
||||||
|
(147686, 0.1023, 1400.26),
|
||||||
|
(177222, 0.1133, 13550.84),
|
||||||
|
(295372, 0.1243, 16897.27),
|
||||||
|
(500000, 0.1353, 31583.32),
|
||||||
|
( 'inf', 0.1463, 59269.49),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 8809, 0.0110, 0.00),
|
||||||
|
( 20883, 0.0220, 96.90),
|
||||||
|
( 32960, 0.0440, 362.53),
|
||||||
|
( 45753, 0.0660, 893.92),
|
||||||
|
( 57824, 0.0880, 1738.26),
|
||||||
|
( 295373, 0.1023, 2800.51),
|
||||||
|
( 354445, 0.1133, 27101.77),
|
||||||
|
( 590742, 0.1243, 33794.63),
|
||||||
|
(1000000, 0.1353, 63166.35),
|
||||||
|
( 'inf', 0.1463, 118538.96),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ca_sit_income_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US CA California Low Income Exemption Rate</field>
|
||||||
|
<field name="code">us_ca_sit_income_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_sit_income_exemption_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': ( 280, 280, 561, 561),
|
||||||
|
'bi-weekly': ( 561, 561, 1121, 1121),
|
||||||
|
'semi-monthly': ( 607, 607, 1214, 1214),
|
||||||
|
'monthly': ( 1214, 1214, 2429, 2429),
|
||||||
|
'quarterly': ( 3643, 3643, 7287, 7287),
|
||||||
|
'semi-annual': ( 7287, 7287, 14573, 14573),
|
||||||
|
'annually': (14573, 14573, 29146, 29146),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_sit_income_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://www.edd.ca.gov/pdf_pub_ctr/20methb.pdf -->
|
||||||
|
<!-- Table 1. Low income exemption table -->
|
||||||
|
<record id="rule_parameter_us_ca_sit_income_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': ( 289, 289, 579, 579),
|
||||||
|
'bi-weekly': ( 579, 579, 1157, 1157),
|
||||||
|
'semi-monthly': ( 627, 627, 1253, 1253),
|
||||||
|
'monthly': ( 1254, 1254, 2507, 2507),
|
||||||
|
'quarterly': ( 3761, 3761, 7521, 7521),
|
||||||
|
'semi-annual': ( 7521, 7521, 15042, 15042),
|
||||||
|
'annually': (15042, 15042, 30083, 30083),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_sit_income_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ca_sit_estimated_deduction_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US CA California Estimated Deduction Rate</field>
|
||||||
|
<field name="code">us_ca_sit_estimated_deduction_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_sit_estimated_deduction_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': ( 19, 38, 58, 77, 96, 115, 135, 154, 173, 192),
|
||||||
|
'bi-weekly': ( 38, 77, 115, 154, 192, 231, 269, 308, 346, 385),
|
||||||
|
'semi-monthly': ( 42, 83, 125, 167, 208, 250, 292, 333, 375, 417),
|
||||||
|
'monthly': ( 83, 167, 250, 333, 417, 500, 583, 667, 750, 833),
|
||||||
|
'quarterly': ( 250, 500, 750, 1000, 1250, 1500, 1750, 2000, 2250, 2500),
|
||||||
|
'semi-annual': ( 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000),
|
||||||
|
'annually': (1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_sit_estimated_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://www.edd.ca.gov/pdf_pub_ctr/20methb.pdf -->
|
||||||
|
<!-- Table 2. Estimated Deduction table -->
|
||||||
|
<record id="rule_parameter_us_ca_sit_estimated_deduction_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': ( 19, 38, 58, 77, 96, 115, 135, 154, 173, 192),
|
||||||
|
'bi-weekly': ( 38, 77, 115, 154, 192, 231, 269, 308, 346, 385),
|
||||||
|
'semi-monthly': ( 42, 83, 125, 167, 208, 250, 292, 333, 375, 417),
|
||||||
|
'monthly': ( 83, 167, 250, 333, 417, 500, 583, 667, 750, 833),
|
||||||
|
'quarterly': ( 250, 500, 750, 1000, 1250, 1500, 1750, 2000, 2250, 2500),
|
||||||
|
'semi-annual': ( 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000),
|
||||||
|
'annually': (1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_sit_estimated_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ca_sit_standard_deduction_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US CA California Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_ca_sit_standard_deduction_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_sit_standard_deduction_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': ( 85, 85, 169, 169),
|
||||||
|
'bi-weekly': ( 169, 169, 339, 339),
|
||||||
|
'semi-monthly': ( 183, 183, 367, 367),
|
||||||
|
'monthly': ( 367, 367, 734, 734),
|
||||||
|
'quarterly': (1100, 1100, 2201, 2201),
|
||||||
|
'semi-annual': (2201, 2201, 4401, 4401),
|
||||||
|
'annually': (4401, 4401, 8802, 8802),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_sit_standard_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://www.edd.ca.gov/pdf_pub_ctr/20methb.pdf -->
|
||||||
|
<!-- Table 3. Standard Deduction table -->
|
||||||
|
<record id="rule_parameter_us_ca_sit_standard_deduction_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': ( 87, 87, 175, 175),
|
||||||
|
'bi-weekly': ( 175, 175, 349, 349),
|
||||||
|
'semi-monthly': ( 189, 189, 378, 378),
|
||||||
|
'monthly': ( 378, 378, 756, 756),
|
||||||
|
'quarterly': (1134, 1134, 2269, 2269),
|
||||||
|
'semi-annual': (2269, 2269, 4537, 4537),
|
||||||
|
'annually': (4537, 4537, 9074, 9074),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_sit_standard_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ca_sit_exemption_allowance_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US CA California Exemption Allowance Rate</field>
|
||||||
|
<field name="code">us_ca_sit_exemption_allowance_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_sit_exemption_allowance_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': ( 2.41, 4.82, 7.23, 9.65, 12.06, 14.47, 16.88, 19.29, 21.70, 24.12),
|
||||||
|
'bi-weekly': ( 4.82, 9.65, 14.47, 19.29, 24.12, 28.94, 33.76, 38.58, 43.41, 48.23),
|
||||||
|
'semi-monthly': ( 5.23, 10.45, 15.68, 20.90, 26.13, 31.35, 36.58, 41.80, 47.03, 52.25),
|
||||||
|
'monthly': ( 10.45, 20.90, 31.35, 41.80, 52.25, 62.70, 73.15, 83.60, 94.05, 104.50),
|
||||||
|
'quarterly': ( 31.35, 62.70, 94.05, 125.40, 156.75, 188.10, 219.45, 250.80, 282.15, 313.50),
|
||||||
|
'semi-annual': ( 62.70, 125.40, 188.10, 250.80, 313.50, 376.20, 438.90, 501.60, 564.30, 627.00),
|
||||||
|
'annually': (125.40, 250.80, 376.20, 501.60, 627.00, 752.40, 877.80, 1003.20, 1128.60, 1254.00),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_sit_exemption_allowance_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://www.edd.ca.gov/pdf_pub_ctr/20methb.pdf -->
|
||||||
|
<!-- Table 4. Exemption Allowance table -->
|
||||||
|
<record id="rule_parameter_us_ca_sit_exemption_allowance_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': ( 2.58, 5.16, 7.74, 10.32, 12.90, 15.48, 18.07, 20.65, 23.23, 25.81),
|
||||||
|
'bi-weekly': ( 5.16, 10.32, 15.48, 20.65, 25.81, 30.97, 36.13, 41.29, 46.45, 51.62),
|
||||||
|
'semi-monthly': ( 5.59, 11.18, 16.78, 22.37, 27.96, 33.55, 39.14, 44.73, 50.33, 55.92),
|
||||||
|
'monthly': ( 11.18, 22.37, 33.55, 44.73, 55.92, 67.10, 78.28, 89.47, 100.65, 111.83),
|
||||||
|
'quarterly': ( 33.55, 67.10, 100.65, 134.20, 167.75, 201.30, 234.85, 268.40, 301.95, 335.50),
|
||||||
|
'semi-annual': ( 67.10, 134.20, 201.30, 268.40, 335.50, 402.60, 469.70, 536.80, 603.90, 671.00),
|
||||||
|
'annually': (134.20, 268.40, 402.60, 536.80, 671.00, 805.20, 939.40, 1073.60, 1207.80, 1342.00),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ca_sit_exemption_allowance_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_ca_dor" model="res.partner">
|
||||||
|
<field name="name">US California - Department of Taxation (CA DE88) - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ca_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US California - Department of Taxation - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ca_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US CA California State Unemployment</field>
|
||||||
|
<field name="code">ER_US_CA_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ca_suta_wage_base', rate='us_ca_suta_rate', state_code='CA')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ca_suta_wage_base', rate='us_ca_suta_rate', state_code='CA')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ca_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_er_us_ca_suta_ett" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="451"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US CA California State Employee Training Tax</field>
|
||||||
|
<field name="code">ER_US_CA_SUTA_ETT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ca_suta_wage_base', rate='us_ca_suta_ett_rate', state_code='CA')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ca_suta_wage_base', rate='us_ca_suta_ett_rate', state_code='CA')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ca_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_ca_suta_sdi" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_suta"/>
|
||||||
|
<field name="name">EE: US CA California State Disability Insurance</field>
|
||||||
|
<field name="code">EE_US_CA_SUTA_SDI</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ca_suta_wage_base', rate='us_ca_suta_sdi_rate', state_code='CA')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ca_suta_wage_base', rate='us_ca_suta_sdi_rate', state_code='CA')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ca_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_ca_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US CA California State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_CA_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ca_california_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ca_california_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ca_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
97
l10n_us_hr_payroll/data/state/co_colorado.xml
Normal file
97
l10n_us_hr_payroll/data/state/co_colorado.xml
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_co_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US CO Colorado SUTA Wage Base</field>
|
||||||
|
<field name="code">us_co_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_co_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">13600.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_co_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_co_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US CO Colorado SUTA Rate</field>
|
||||||
|
<field name="code">us_co_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_co_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_co_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_co_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US CO Colorado SIT Tax Rate</field>
|
||||||
|
<field name="code">us_co_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_co_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">4.63</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_co_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_co_sit_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US CO Colorado SIT Exemption Rate</field>
|
||||||
|
<field name="code">us_co_sit_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_co_sit_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">4000</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_co_sit_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_co_dor" model="res.partner">
|
||||||
|
<field name="name">US Colorado - Department of Labor and Employment - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_co_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Colorado - Division of Revenue - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_co_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US CO Colorado State Unemployment</field>
|
||||||
|
<field name="code">ER_US_CO_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_co_suta_wage_base', rate='us_co_suta_rate', state_code='CO')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_co_suta_wage_base', rate='us_co_suta_rate', state_code='CO')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_co_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_co_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US CO Colorado State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_CO_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = co_colorado_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = co_colorado_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_co_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
1237
l10n_us_hr_payroll/data/state/ct_connecticut.xml
Normal file
1237
l10n_us_hr_payroll/data/state/ct_connecticut.xml
Normal file
File diff suppressed because it is too large
Load Diff
119
l10n_us_hr_payroll/data/state/de_delaware.xml
Normal file
119
l10n_us_hr_payroll/data/state/de_delaware.xml
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_de_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US DE Delaware SUTA Wage Base</field>
|
||||||
|
<field name="code">us_de_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_de_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">16500.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_de_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_de_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US DE Delaware SUTA Rate</field>
|
||||||
|
<field name="code">us_de_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_de_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.50</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_de_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_de_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US DE Delaware SIT Tax Rate</field>
|
||||||
|
<field name="code">us_de_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_de_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">[
|
||||||
|
( 2000, 0.0, 0.00),
|
||||||
|
( 5000, 0.0, 2.20),
|
||||||
|
(10000, 66.0, 3.90),
|
||||||
|
(20000, 261.0, 4.80),
|
||||||
|
(25000, 741.0, 5.20),
|
||||||
|
(60000, 1001.0, 5.55),
|
||||||
|
('inf', 2943.0, 6.60),
|
||||||
|
|
||||||
|
]</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_de_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_de_sit_standard_deduction_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US DE Delaware Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_de_sit_standard_deduction_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_de_sit_standard_deduction_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">3250</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_de_sit_standard_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_de_sit_personal_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US DE Delaware Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_de_sit_personal_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_de_sit_personal_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">110</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_de_sit_personal_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_de_dor" model="res.partner">
|
||||||
|
<field name="name">US Delaware - Division of Unemployment Insurance - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_de_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Delaware - Division of Revenue - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_de_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US DE Delaware State Unemployment</field>
|
||||||
|
<field name="code">ER_US_DE_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_de_suta_wage_base', rate='us_de_suta_rate', state_code='DE')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_de_suta_wage_base', rate='us_de_suta_rate', state_code='DE')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_de_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_de_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US DE Delaware State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_DE_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = de_delaware_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = de_delaware_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_de_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
63
l10n_us_hr_payroll/data/state/fl_florida.xml
Normal file
63
l10n_us_hr_payroll/data/state/fl_florida.xml
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_fl_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US FL Florida SUTA Wage Base</field>
|
||||||
|
<field name="code">us_fl_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_fl_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">7000.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_fl_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_fl_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">7000.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_fl_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_fl_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US FL Florida SUTA Rate</field>
|
||||||
|
<field name="code">us_fl_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_fl_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_fl_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_fl_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_fl_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_fl_dor" model="res.partner">
|
||||||
|
<field name="name">US Florida - Department of Revenue</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_fl_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US FL Florida State Unemployment (RT-6)</field>
|
||||||
|
<field name="code">ER_US_FL_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_fl_suta_wage_base', rate='us_fl_suta_rate', state_code='FL')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_fl_suta_wage_base', rate='us_fl_suta_rate', state_code='FL')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_fl_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
943
l10n_us_hr_payroll/data/state/ga_georgia.xml
Normal file
943
l10n_us_hr_payroll/data/state/ga_georgia.xml
Normal file
@@ -0,0 +1,943 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_ga_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US GA Georgia SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ga_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ga_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">9500.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ga_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ga_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">9500.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ga_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_ga_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US GA Georgia SUTA Rate</field>
|
||||||
|
<field name="code">us_ga_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ga_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ga_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ga_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ga_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ga_sit_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US GA Georgia SIT Rate Table</field>
|
||||||
|
<field name="code">us_ga_sit_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ga_sit_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'married filing joint, both spouses working': {
|
||||||
|
'weekly': (
|
||||||
|
( 9.50, 0.00, 1.00),
|
||||||
|
(29.00, 0.10, 2.00),
|
||||||
|
(48.00, 0.48, 3.00),
|
||||||
|
(67.50, 1.06, 4.00),
|
||||||
|
(96.00, 1.83, 5.00),
|
||||||
|
('inf', 3.27, 5.75),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 19.00, 0.00, 1.00),
|
||||||
|
( 57.50, 0.19, 2.00),
|
||||||
|
( 96.00, 0.96, 3.00),
|
||||||
|
(135.00, 2.12, 4.00),
|
||||||
|
(192.00, 3.65, 5.00),
|
||||||
|
( 'inf', 6.54, 5.75),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 21.00, 0.00, 1.00),
|
||||||
|
( 62.50, 0.21, 2.00),
|
||||||
|
(104.00, 1.04, 3.00),
|
||||||
|
(146.00, 2.29, 4.00),
|
||||||
|
(208.00, 3.96, 5.00),
|
||||||
|
( 'inf', 7.08, 5.75),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 41.50, 0.00, 1.00),
|
||||||
|
(125.50, 0.42, 2.00),
|
||||||
|
(208.00, 2.08, 3.00),
|
||||||
|
(292.00, 4.58, 4.00),
|
||||||
|
(417.00, 7.92, 5.00),
|
||||||
|
( 'inf', 14.17, 5.75),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 125.00, 0.00, 1.00),
|
||||||
|
( 375.00, 1.25, 2.00),
|
||||||
|
( 625.00, 6.25, 3.00),
|
||||||
|
( 875.00, 13.75, 4.00),
|
||||||
|
(1250.00, 23.75, 5.00),
|
||||||
|
( 'inf', 42.50, 5.75),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 250.00, 0.00, 1.00),
|
||||||
|
( 750.00, 2.50, 2.00),
|
||||||
|
(1250.00, 12.50, 3.00),
|
||||||
|
(1750.00, 27.50, 4.00),
|
||||||
|
(2500.00, 47.50, 5.00),
|
||||||
|
( 'inf', 85.00, 5.75),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 500.00, 0.00, 1.00),
|
||||||
|
(1500.00, 5.00, 2.00),
|
||||||
|
(2500.00, 25.00, 3.00),
|
||||||
|
(3500.00, 55.00, 4.00),
|
||||||
|
(5000.00, 95.00, 5.00),
|
||||||
|
( 'inf', 170.00, 5.75),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married filing joint, one spouse working': {
|
||||||
|
'weekly': (
|
||||||
|
( 19.00, 0.00, 1.00),
|
||||||
|
( 57.50, 0.19, 2.00),
|
||||||
|
( 96.00, 0.96, 3.00),
|
||||||
|
(135.00, 2.12, 4.00),
|
||||||
|
(192.50, 3.65, 5.00),
|
||||||
|
( 'inf', 6.54, 5.75),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 38.50, 0.00, 1.00),
|
||||||
|
(115.00, 0.38, 2.00),
|
||||||
|
(192.00, 1.92, 3.00),
|
||||||
|
(269.00, 4.23, 4.00),
|
||||||
|
(385.00, 7.31, 5.00),
|
||||||
|
( 'inf', 13.08, 5.75),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 41.50, 0.00, 1.00),
|
||||||
|
(125.00, 0.42, 2.00),
|
||||||
|
(208.00, 2.08, 3.00),
|
||||||
|
(292.00, 4.58, 4.00),
|
||||||
|
(417.00, 7.92, 5.00),
|
||||||
|
( 'inf', 14.17, 5.75),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 83.00, 0.00, 1.00),
|
||||||
|
(250.00, 0.83, 2.00),
|
||||||
|
(417.00, 4.17, 3.00),
|
||||||
|
(583.00, 9.17, 4.00),
|
||||||
|
(833.00, 15.83, 5.00),
|
||||||
|
( 'inf', 28.33, 5.75),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 250.00, 0.00, 1.00),
|
||||||
|
( 750.00, 2.50, 2.00),
|
||||||
|
(1250.00, 12.50, 3.00),
|
||||||
|
(1750.00, 27.50, 4.00),
|
||||||
|
(2500.00, 47.50, 5.00),
|
||||||
|
( 'inf', 85.00, 5.75),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 500.00, 0.00, 1.00),
|
||||||
|
(1500.00, 5.00, 2.00),
|
||||||
|
(2500.00, 25.00, 3.00),
|
||||||
|
(3500.00, 55.00, 4.00),
|
||||||
|
(5000.00, 95.00, 5.00),
|
||||||
|
( 'inf', 170.00, 5.75),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 1000.00, 0.00, 1.00),
|
||||||
|
( 3000.00, 10.00, 2.00),
|
||||||
|
( 5000.00, 50.00, 3.00),
|
||||||
|
( 7000.00, 110.00, 4.00),
|
||||||
|
(10000.00, 190.00, 5.00),
|
||||||
|
( 'inf', 340.00, 5.75),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'single': {
|
||||||
|
'weekly': (
|
||||||
|
( 14.50, 0.00, 1.00),
|
||||||
|
( 43.50, 0.14, 2.00),
|
||||||
|
( 72.00, 0.72, 3.00),
|
||||||
|
(101.00, 1.59, 4.00),
|
||||||
|
(135.00, 2.74, 5.00),
|
||||||
|
( 'inf', 4.42, 5.75),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 29.00, 0.00, 1.00),
|
||||||
|
( 86.50, 0.29, 2.00),
|
||||||
|
(144.00, 1.44, 3.00),
|
||||||
|
(202.00, 3.17, 4.00),
|
||||||
|
(269.00, 5.48, 5.00),
|
||||||
|
( 'inf', 8.85, 5.75),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 31.00, 0.00, 1.00),
|
||||||
|
( 93.50, 0.31, 2.00),
|
||||||
|
(156.00, 1.56, 3.00),
|
||||||
|
(219.00, 3.34, 4.00),
|
||||||
|
(292.00, 5.94, 5.00),
|
||||||
|
( 'inf', 9.58, 5.75),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 62.50, 0.00, 1.00),
|
||||||
|
(187.00, 0.62, 2.00),
|
||||||
|
(312.00, 3.12, 3.00),
|
||||||
|
(437.00, 6.87, 4.00),
|
||||||
|
(583.00, 11.87, 5.00),
|
||||||
|
( 'inf', 19.17, 5.75),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 187.50, 0.00, 1.00),
|
||||||
|
( 562.50, 1.88, 2.00),
|
||||||
|
( 937.50, 9.38, 3.00),
|
||||||
|
(1312.00, 20.63, 4.00),
|
||||||
|
(1750.00, 35.63, 5.00),
|
||||||
|
( 'inf', 57.50, 5.75),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 375.00, 0.00, 1.00),
|
||||||
|
(1125.00, 3.75, 2.00),
|
||||||
|
(1875.00, 18.75, 3.00),
|
||||||
|
(2625.00, 41.25, 4.00),
|
||||||
|
(3500.00, 71.25, 5.00),
|
||||||
|
( 'inf', 115.00, 5.75),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 750.00, 0.00, 1.00),
|
||||||
|
(2250.00, 7.50, 2.00),
|
||||||
|
(3750.00, 37.50, 3.00),
|
||||||
|
(5250.00, 82.50, 4.00),
|
||||||
|
(7000.00, 142.50, 5.00),
|
||||||
|
( 'inf', 230.00, 5.75),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'head of household': {
|
||||||
|
'weekly': (
|
||||||
|
( 19.00, 0.00, 1.00),
|
||||||
|
( 57.50, 0.19, 2.00),
|
||||||
|
( 96.00, 0.96, 3.00),
|
||||||
|
(135.00, 2.12, 4.00),
|
||||||
|
(192.50, 3.65, 5.00),
|
||||||
|
( 'inf', 6.54, 5.75),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 38.50, 0.00, 1.00),
|
||||||
|
(115.00, 0.38, 2.00),
|
||||||
|
(192.00, 1.92, 3.00),
|
||||||
|
(269.00, 4.23, 4.00),
|
||||||
|
(385.00, 7.31, 5.00),
|
||||||
|
( 'inf', 13.08, 5.75),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 41.50, 0.00, 1.00),
|
||||||
|
(125.00, 0.42, 2.00),
|
||||||
|
(208.00, 2.08, 3.00),
|
||||||
|
(292.00, 4.58, 4.00),
|
||||||
|
(417.00, 7.92, 5.00),
|
||||||
|
( 'inf', 14.17, 5.75),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 83.00, 0.00, 1.00),
|
||||||
|
(250.00, 0.83, 2.00),
|
||||||
|
(417.00, 4.17, 3.00),
|
||||||
|
(583.00, 9.17, 4.00),
|
||||||
|
(833.00, 15.83, 5.00),
|
||||||
|
( 'inf', 28.33, 5.75),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 250.00, 0.00, 1.00),
|
||||||
|
( 750.00, 2.50, 2.00),
|
||||||
|
(1250.00, 12.50, 3.00),
|
||||||
|
(1750.00, 27.50, 4.00),
|
||||||
|
(2500.00, 47.50, 5.00),
|
||||||
|
( 'inf', 85.00, 5.75),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 500.00, 0.00, 1.00),
|
||||||
|
(1500.00, 5.00, 2.00),
|
||||||
|
(2500.00, 25.00, 3.00),
|
||||||
|
(3500.00, 55.00, 4.00),
|
||||||
|
(5000.00, 95.00, 5.00),
|
||||||
|
( 'inf', 170.00, 5.75),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 1000.00, 0.00, 1.00),
|
||||||
|
( 3000.00, 10.00, 2.00),
|
||||||
|
( 5000.00, 50.00, 3.00),
|
||||||
|
( 7000.00, 110.00, 4.00),
|
||||||
|
(10000.00, 190.00, 5.00),
|
||||||
|
( 'inf', 340.00, 5.75),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married filing separate': {
|
||||||
|
'weekly': (
|
||||||
|
( 9.50, 0.00, 1.00),
|
||||||
|
(29.00, 0.10, 2.00),
|
||||||
|
(48.00, 0.48, 3.00),
|
||||||
|
(67.50, 1.06, 4.00),
|
||||||
|
(96.00, 1.83, 5.00),
|
||||||
|
('inf', 3.27, 5.75),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 19.00, 0.00, 1.00),
|
||||||
|
( 57.50, 0.19, 2.00),
|
||||||
|
( 96.00, 0.96, 3.00),
|
||||||
|
(135.00, 2.12, 4.00),
|
||||||
|
(192.00, 3.65, 5.00),
|
||||||
|
( 'inf', 6.54, 5.75),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 21.00, 0.00, 1.00),
|
||||||
|
( 62.50, 0.21, 2.00),
|
||||||
|
(104.00, 1.04, 3.00),
|
||||||
|
(146.00, 2.29, 4.00),
|
||||||
|
(208.00, 3.96, 5.00),
|
||||||
|
( 'inf', 7.08, 5.75),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 41.50, 0.00, 1.00),
|
||||||
|
(125.50, 0.42, 2.00),
|
||||||
|
(208.00, 2.08, 3.00),
|
||||||
|
(292.00, 4.58, 4.00),
|
||||||
|
(417.00, 7.92, 5.00),
|
||||||
|
( 'inf', 14.17, 5.75),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 125.00, 0.00, 1.00),
|
||||||
|
( 375.00, 1.25, 2.00),
|
||||||
|
( 625.00, 6.25, 3.00),
|
||||||
|
( 875.00, 13.75, 4.00),
|
||||||
|
(1250.00, 23.75, 5.00),
|
||||||
|
( 'inf', 42.50, 5.75),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 250.00, 0.00, 1.00),
|
||||||
|
( 750.00, 2.50, 2.00),
|
||||||
|
(1250.00, 12.50, 3.00),
|
||||||
|
(1750.00, 27.50, 4.00),
|
||||||
|
(2500.00, 47.50, 5.00),
|
||||||
|
( 'inf', 85.00, 5.75),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 500.00, 0.00, 1.00),
|
||||||
|
(1500.00, 5.00, 2.00),
|
||||||
|
(2500.00, 25.00, 3.00),
|
||||||
|
(3500.00, 55.00, 4.00),
|
||||||
|
(5000.00, 95.00, 5.00),
|
||||||
|
( 'inf', 170.00, 5.75),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ga_sit_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://dor.georgia.gov/employers-tax-guide File 2020 -->
|
||||||
|
<!-- Table F, G ,H-->
|
||||||
|
<record id="rule_parameter_us_ga_sit_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'married filing joint, both spouses working': {
|
||||||
|
'weekly': (
|
||||||
|
( 9.50, 0.00, 1.00),
|
||||||
|
(29.00, 0.10, 2.00),
|
||||||
|
(48.00, 0.48, 3.00),
|
||||||
|
(67.50, 1.06, 4.00),
|
||||||
|
(96.00, 1.83, 5.00),
|
||||||
|
('inf', 3.27, 5.75),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 19.00, 0.00, 1.00),
|
||||||
|
( 57.50, 0.19, 2.00),
|
||||||
|
( 96.00, 0.96, 3.00),
|
||||||
|
(135.00, 2.12, 4.00),
|
||||||
|
(192.00, 3.65, 5.00),
|
||||||
|
( 'inf', 6.54, 5.75),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 21.00, 0.00, 1.00),
|
||||||
|
( 62.50, 0.21, 2.00),
|
||||||
|
(104.00, 1.04, 3.00),
|
||||||
|
(146.00, 2.29, 4.00),
|
||||||
|
(208.00, 3.96, 5.00),
|
||||||
|
( 'inf', 7.08, 5.75),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 41.50, 0.00, 1.00),
|
||||||
|
(125.50, 0.42, 2.00),
|
||||||
|
(208.00, 2.08, 3.00),
|
||||||
|
(292.00, 4.58, 4.00),
|
||||||
|
(417.00, 7.92, 5.00),
|
||||||
|
( 'inf', 14.17, 5.75),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 125.00, 0.00, 1.00),
|
||||||
|
( 375.00, 1.25, 2.00),
|
||||||
|
( 625.00, 6.25, 3.00),
|
||||||
|
( 875.00, 13.75, 4.00),
|
||||||
|
(1250.00, 23.75, 5.00),
|
||||||
|
( 'inf', 42.50, 5.75),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 250.00, 0.00, 1.00),
|
||||||
|
( 750.00, 2.50, 2.00),
|
||||||
|
(1250.00, 12.50, 3.00),
|
||||||
|
(1750.00, 27.50, 4.00),
|
||||||
|
(2500.00, 47.50, 5.00),
|
||||||
|
( 'inf', 85.00, 5.75),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 500.00, 0.00, 1.00),
|
||||||
|
(1500.00, 5.00, 2.00),
|
||||||
|
(2500.00, 25.00, 3.00),
|
||||||
|
(3500.00, 55.00, 4.00),
|
||||||
|
(5000.00, 95.00, 5.00),
|
||||||
|
( 'inf', 170.00, 5.75),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married filing joint, one spouse working': {
|
||||||
|
'weekly': (
|
||||||
|
( 19.00, 0.00, 1.00),
|
||||||
|
( 57.50, 0.19, 2.00),
|
||||||
|
( 96.00, 0.96, 3.00),
|
||||||
|
(135.00, 2.12, 4.00),
|
||||||
|
(192.50, 3.65, 5.00),
|
||||||
|
( 'inf', 6.54, 5.75),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 38.50, 0.00, 1.00),
|
||||||
|
(115.00, 0.38, 2.00),
|
||||||
|
(192.00, 1.92, 3.00),
|
||||||
|
(269.00, 4.23, 4.00),
|
||||||
|
(385.00, 7.31, 5.00),
|
||||||
|
( 'inf', 13.08, 5.75),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 41.50, 0.00, 1.00),
|
||||||
|
(125.00, 0.42, 2.00),
|
||||||
|
(208.00, 2.08, 3.00),
|
||||||
|
(292.00, 4.58, 4.00),
|
||||||
|
(417.00, 7.92, 5.00),
|
||||||
|
( 'inf', 14.17, 5.75),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 83.00, 0.00, 1.00),
|
||||||
|
(250.00, 0.83, 2.00),
|
||||||
|
(417.00, 4.17, 3.00),
|
||||||
|
(583.00, 9.17, 4.00),
|
||||||
|
(833.00, 15.83, 5.00),
|
||||||
|
( 'inf', 28.33, 5.75),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 250.00, 0.00, 1.00),
|
||||||
|
( 750.00, 2.50, 2.00),
|
||||||
|
(1250.00, 12.50, 3.00),
|
||||||
|
(1750.00, 27.50, 4.00),
|
||||||
|
(2500.00, 47.50, 5.00),
|
||||||
|
( 'inf', 85.00, 5.75),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 500.00, 0.00, 1.00),
|
||||||
|
(1500.00, 5.00, 2.00),
|
||||||
|
(2500.00, 25.00, 3.00),
|
||||||
|
(3500.00, 55.00, 4.00),
|
||||||
|
(5000.00, 95.00, 5.00),
|
||||||
|
( 'inf', 170.00, 5.75),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 1000.00, 0.00, 1.00),
|
||||||
|
( 3000.00, 10.00, 2.00),
|
||||||
|
( 5000.00, 50.00, 3.00),
|
||||||
|
( 7000.00, 110.00, 4.00),
|
||||||
|
(10000.00, 190.00, 5.00),
|
||||||
|
( 'inf', 340.00, 5.75),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'single': {
|
||||||
|
'weekly': (
|
||||||
|
( 14.50, 0.00, 1.00),
|
||||||
|
( 43.50, 0.14, 2.00),
|
||||||
|
( 72.00, 0.72, 3.00),
|
||||||
|
(101.00, 1.59, 4.00),
|
||||||
|
(135.00, 2.74, 5.00),
|
||||||
|
( 'inf', 4.42, 5.75),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 29.00, 0.00, 1.00),
|
||||||
|
( 86.50, 0.29, 2.00),
|
||||||
|
(144.00, 1.44, 3.00),
|
||||||
|
(202.00, 3.17, 4.00),
|
||||||
|
(269.00, 5.48, 5.00),
|
||||||
|
( 'inf', 8.85, 5.75),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 31.00, 0.00, 1.00),
|
||||||
|
( 93.50, 0.31, 2.00),
|
||||||
|
(156.00, 1.56, 3.00),
|
||||||
|
(219.00, 3.34, 4.00),
|
||||||
|
(292.00, 5.94, 5.00),
|
||||||
|
( 'inf', 9.58, 5.75),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 62.50, 0.00, 1.00),
|
||||||
|
(187.00, 0.62, 2.00),
|
||||||
|
(312.00, 3.12, 3.00),
|
||||||
|
(437.00, 6.87, 4.00),
|
||||||
|
(583.00, 11.87, 5.00),
|
||||||
|
( 'inf', 19.17, 5.75),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 187.50, 0.00, 1.00),
|
||||||
|
( 562.50, 1.88, 2.00),
|
||||||
|
( 937.50, 9.38, 3.00),
|
||||||
|
(1312.00, 20.63, 4.00),
|
||||||
|
(1750.00, 35.63, 5.00),
|
||||||
|
( 'inf', 57.50, 5.75),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 375.00, 0.00, 1.00),
|
||||||
|
(1125.00, 3.75, 2.00),
|
||||||
|
(1875.00, 18.75, 3.00),
|
||||||
|
(2625.00, 41.25, 4.00),
|
||||||
|
(3500.00, 71.25, 5.00),
|
||||||
|
( 'inf', 115.00, 5.75),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 750.00, 0.00, 1.00),
|
||||||
|
(2250.00, 7.50, 2.00),
|
||||||
|
(3750.00, 37.50, 3.00),
|
||||||
|
(5250.00, 82.50, 4.00),
|
||||||
|
(7000.00, 142.50, 5.00),
|
||||||
|
( 'inf', 230.00, 5.75),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'head of household': {
|
||||||
|
'weekly': (
|
||||||
|
( 19.00, 0.00, 1.00),
|
||||||
|
( 57.50, 0.19, 2.00),
|
||||||
|
( 96.00, 0.96, 3.00),
|
||||||
|
(135.00, 2.12, 4.00),
|
||||||
|
(192.50, 3.65, 5.00),
|
||||||
|
( 'inf', 6.54, 5.75),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 38.50, 0.00, 1.00),
|
||||||
|
(115.00, 0.38, 2.00),
|
||||||
|
(192.00, 1.92, 3.00),
|
||||||
|
(269.00, 4.23, 4.00),
|
||||||
|
(385.00, 7.31, 5.00),
|
||||||
|
( 'inf', 13.08, 5.75),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 41.50, 0.00, 1.00),
|
||||||
|
(125.00, 0.42, 2.00),
|
||||||
|
(208.00, 2.08, 3.00),
|
||||||
|
(292.00, 4.58, 4.00),
|
||||||
|
(417.00, 7.92, 5.00),
|
||||||
|
( 'inf', 14.17, 5.75),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 83.00, 0.00, 1.00),
|
||||||
|
(250.00, 0.83, 2.00),
|
||||||
|
(417.00, 4.17, 3.00),
|
||||||
|
(583.00, 9.17, 4.00),
|
||||||
|
(833.00, 15.83, 5.00),
|
||||||
|
( 'inf', 28.33, 5.75),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 250.00, 0.00, 1.00),
|
||||||
|
( 750.00, 2.50, 2.00),
|
||||||
|
(1250.00, 12.50, 3.00),
|
||||||
|
(1750.00, 27.50, 4.00),
|
||||||
|
(2500.00, 47.50, 5.00),
|
||||||
|
( 'inf', 85.00, 5.75),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 500.00, 0.00, 1.00),
|
||||||
|
(1500.00, 5.00, 2.00),
|
||||||
|
(2500.00, 25.00, 3.00),
|
||||||
|
(3500.00, 55.00, 4.00),
|
||||||
|
(5000.00, 95.00, 5.00),
|
||||||
|
( 'inf', 170.00, 5.75),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 1000.00, 0.00, 1.00),
|
||||||
|
( 3000.00, 10.00, 2.00),
|
||||||
|
( 5000.00, 50.00, 3.00),
|
||||||
|
( 7000.00, 110.00, 4.00),
|
||||||
|
(10000.00, 190.00, 5.00),
|
||||||
|
( 'inf', 340.00, 5.75),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married filing separate': {
|
||||||
|
'weekly': (
|
||||||
|
( 9.50, 0.00, 1.00),
|
||||||
|
(29.00, 0.10, 2.00),
|
||||||
|
(48.00, 0.48, 3.00),
|
||||||
|
(67.50, 1.06, 4.00),
|
||||||
|
(96.00, 1.83, 5.00),
|
||||||
|
('inf', 3.27, 5.75),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 19.00, 0.00, 1.00),
|
||||||
|
( 57.50, 0.19, 2.00),
|
||||||
|
( 96.00, 0.96, 3.00),
|
||||||
|
(135.00, 2.12, 4.00),
|
||||||
|
(192.00, 3.65, 5.00),
|
||||||
|
( 'inf', 6.54, 5.75),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 21.00, 0.00, 1.00),
|
||||||
|
( 62.50, 0.21, 2.00),
|
||||||
|
(104.00, 1.04, 3.00),
|
||||||
|
(146.00, 2.29, 4.00),
|
||||||
|
(208.00, 3.96, 5.00),
|
||||||
|
( 'inf', 7.08, 5.75),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 41.50, 0.00, 1.00),
|
||||||
|
(125.50, 0.42, 2.00),
|
||||||
|
(208.00, 2.08, 3.00),
|
||||||
|
(292.00, 4.58, 4.00),
|
||||||
|
(417.00, 7.92, 5.00),
|
||||||
|
( 'inf', 14.17, 5.75),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 125.00, 0.00, 1.00),
|
||||||
|
( 375.00, 1.25, 2.00),
|
||||||
|
( 625.00, 6.25, 3.00),
|
||||||
|
( 875.00, 13.75, 4.00),
|
||||||
|
(1250.00, 23.75, 5.00),
|
||||||
|
( 'inf', 42.50, 5.75),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 250.00, 0.00, 1.00),
|
||||||
|
( 750.00, 2.50, 2.00),
|
||||||
|
(1250.00, 12.50, 3.00),
|
||||||
|
(1750.00, 27.50, 4.00),
|
||||||
|
(2500.00, 47.50, 5.00),
|
||||||
|
( 'inf', 85.00, 5.75),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 500.00, 0.00, 1.00),
|
||||||
|
(1500.00, 5.00, 2.00),
|
||||||
|
(2500.00, 25.00, 3.00),
|
||||||
|
(3500.00, 55.00, 4.00),
|
||||||
|
(5000.00, 95.00, 5.00),
|
||||||
|
( 'inf', 170.00, 5.75),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ga_sit_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ga_sit_personal_allowance" model="hr.rule.parameter">
|
||||||
|
<field name="name">US GA Georgia SIT Personal Allowance</field>
|
||||||
|
<field name="code">us_ga_sit_personal_allowance</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ga_sit_personal_allowance_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'married filing joint, both spouses working': {
|
||||||
|
'weekly': 142.30,
|
||||||
|
'bi-weekly': 284.62,
|
||||||
|
'semi-monthly': 308.33,
|
||||||
|
'monthly': 616.67,
|
||||||
|
'quarterly': 1850.00,
|
||||||
|
'semi-annual': 3700.00,
|
||||||
|
'annual': 7400.00,
|
||||||
|
},
|
||||||
|
'married filing joint, one spouse working': {
|
||||||
|
'weekly': 142.30,
|
||||||
|
'bi-weekly': 284.62,
|
||||||
|
'semi-monthly': 308.33,
|
||||||
|
'monthly': 616.67,
|
||||||
|
'quarterly': 1850.00,
|
||||||
|
'semi-annual': 3700.00,
|
||||||
|
'annual': 7400.00,
|
||||||
|
},
|
||||||
|
'single': {
|
||||||
|
'weekly': 51.92,
|
||||||
|
'bi-weekly': 103.85,
|
||||||
|
'semi-monthly': 112.50,
|
||||||
|
'monthly': 225.00,
|
||||||
|
'quarterly': 675.00,
|
||||||
|
'semi-annual': 1350.00,
|
||||||
|
'annual': 2700.00,
|
||||||
|
},
|
||||||
|
'head of household': {
|
||||||
|
'weekly': 51.92,
|
||||||
|
'bi-weekly': 103.85,
|
||||||
|
'semi-monthly': 112.50,
|
||||||
|
'monthly': 225.00,
|
||||||
|
'quarterly': 675.00,
|
||||||
|
'semi-annual': 1350.00,
|
||||||
|
'annual': 2700.00,
|
||||||
|
},
|
||||||
|
'married filing separate': {
|
||||||
|
'weekly': 71.15,
|
||||||
|
'bi-weekly': 142.30,
|
||||||
|
'semi-monthly': 154.16,
|
||||||
|
'monthly': 308.33,
|
||||||
|
'quarterly': 925.00,
|
||||||
|
'semi-annual': 1850.00,
|
||||||
|
'annual': 3700.00,
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ga_sit_personal_allowance"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://dor.georgia.gov/employers-tax-guide File 2020 -->
|
||||||
|
<!-- Table E Column 4. 5. 6.-->
|
||||||
|
<record id="rule_parameter_us_ga_sit_personal_allowance_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'married filing joint, both spouses working': {
|
||||||
|
'weekly': 142.30,
|
||||||
|
'bi-weekly': 284.62,
|
||||||
|
'semi-monthly': 308.33,
|
||||||
|
'monthly': 616.67,
|
||||||
|
'quarterly': 1850.00,
|
||||||
|
'semi-annual': 3700.00,
|
||||||
|
'annual': 7400.00,
|
||||||
|
},
|
||||||
|
'married filing joint, one spouse working': {
|
||||||
|
'weekly': 142.30,
|
||||||
|
'bi-weekly': 284.62,
|
||||||
|
'semi-monthly': 308.33,
|
||||||
|
'monthly': 616.67,
|
||||||
|
'quarterly': 1850.00,
|
||||||
|
'semi-annual': 3700.00,
|
||||||
|
'annual': 7400.00,
|
||||||
|
},
|
||||||
|
'single': {
|
||||||
|
'weekly': 51.92,
|
||||||
|
'bi-weekly': 103.85,
|
||||||
|
'semi-monthly': 112.50,
|
||||||
|
'monthly': 225.00,
|
||||||
|
'quarterly': 675.00,
|
||||||
|
'semi-annual': 1350.00,
|
||||||
|
'annual': 2700.00,
|
||||||
|
},
|
||||||
|
'head of household': {
|
||||||
|
'weekly': 51.92,
|
||||||
|
'bi-weekly': 103.85,
|
||||||
|
'semi-monthly': 112.50,
|
||||||
|
'monthly': 225.00,
|
||||||
|
'quarterly': 675.00,
|
||||||
|
'semi-annual': 1350.00,
|
||||||
|
'annual': 2700.00,
|
||||||
|
},
|
||||||
|
'married filing separate': {
|
||||||
|
'weekly': 71.15,
|
||||||
|
'bi-weekly': 142.30,
|
||||||
|
'semi-monthly': 154.16,
|
||||||
|
'monthly': 308.33,
|
||||||
|
'quarterly': 925.00,
|
||||||
|
'semi-annual': 1850.00,
|
||||||
|
'annual': 3700.00,
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ga_sit_personal_allowance"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ga_sit_dependent_allowance_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US GA Georgia SIT Dependent Allowance Rate</field>
|
||||||
|
<field name="code">us_ga_sit_dependent_allowance_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ga_sit_dependent_allowance_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': 57.50,
|
||||||
|
'bi-weekly': 115.00,
|
||||||
|
'semi-monthly': 125.00,
|
||||||
|
'monthly': 250.00,
|
||||||
|
'quarterly': 750.00,
|
||||||
|
'semi-annual': 1500.00,
|
||||||
|
'annual': 3000.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ga_sit_dependent_allowance_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://dor.georgia.gov/employers-tax-guide File 2020 -->
|
||||||
|
<!-- Table E Column 7.-->
|
||||||
|
<record id="rule_parameter_us_ga_sit_dependent_allowance_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': 57.50,
|
||||||
|
'bi-weekly': 115.00,
|
||||||
|
'semi-monthly': 125.00,
|
||||||
|
'monthly': 250.00,
|
||||||
|
'quarterly': 750.00,
|
||||||
|
'semi-annual': 1500.00,
|
||||||
|
'annual': 3000.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ga_sit_dependent_allowance_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ga_sit_deduction" model="hr.rule.parameter">
|
||||||
|
<field name="name">US GA Georgia SIT Deduction</field>
|
||||||
|
<field name="code">us_ga_sit_deduction</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ga_sit_deduction_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'married filing joint, both spouses working': {
|
||||||
|
'weekly': 115.50,
|
||||||
|
'bi-weekly': 230.75,
|
||||||
|
'semi-monthly': 250.00,
|
||||||
|
'monthly': 500.00,
|
||||||
|
'quarterly': 1500.00,
|
||||||
|
'semi-annual': 3000.00,
|
||||||
|
'annual': 6000.00,
|
||||||
|
},
|
||||||
|
'married filing joint, one spouse working': {
|
||||||
|
'weekly': 115.50,
|
||||||
|
'bi-weekly': 230.75,
|
||||||
|
'semi-monthly': 250.00,
|
||||||
|
'monthly': 500.00,
|
||||||
|
'quarterly': 1500.00,
|
||||||
|
'semi-annual': 3000.00,
|
||||||
|
'annual': 6000.00,
|
||||||
|
},
|
||||||
|
'single': {
|
||||||
|
'weekly': 88.50,
|
||||||
|
'bi-weekly': 177.00,
|
||||||
|
'semi-monthly': 191.75,
|
||||||
|
'monthly': 383.50,
|
||||||
|
'quarterly': 1150.00,
|
||||||
|
'semi-annual': 2300.00,
|
||||||
|
'annual': 4600.00,
|
||||||
|
},
|
||||||
|
'head of household': {
|
||||||
|
'weekly': 88.50,
|
||||||
|
'bi-weekly': 177.00,
|
||||||
|
'semi-monthly': 191.75,
|
||||||
|
'monthly': 383.50,
|
||||||
|
'quarterly': 1150.00,
|
||||||
|
'semi-annual': 2300.00,
|
||||||
|
'annual': 4600.00,
|
||||||
|
},
|
||||||
|
'married filing separate': {
|
||||||
|
'weekly': 57.75,
|
||||||
|
'bi-weekly': 115.50,
|
||||||
|
'semi-monthly': 125.00,
|
||||||
|
'monthly': 250.00,
|
||||||
|
'quarterly': 750.00,
|
||||||
|
'semi-annual': 1500.00,
|
||||||
|
'annual': 3000.00,
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ga_sit_deduction"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://dor.georgia.gov/employers-tax-guide File 2020 -->
|
||||||
|
<!-- Table E Column 1. 2. 3.-->
|
||||||
|
<record id="rule_parameter_us_ga_sit_deduction_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'married filing joint, both spouses working': {
|
||||||
|
'weekly': 115.50,
|
||||||
|
'bi-weekly': 230.75,
|
||||||
|
'semi-monthly': 250.00,
|
||||||
|
'monthly': 500.00,
|
||||||
|
'quarterly': 1500.00,
|
||||||
|
'semi-annual': 3000.00,
|
||||||
|
'annual': 6000.00,
|
||||||
|
},
|
||||||
|
'married filing joint, one spouse working': {
|
||||||
|
'weekly': 115.50,
|
||||||
|
'bi-weekly': 230.75,
|
||||||
|
'semi-monthly': 250.00,
|
||||||
|
'monthly': 500.00,
|
||||||
|
'quarterly': 1500.00,
|
||||||
|
'semi-annual': 3000.00,
|
||||||
|
'annual': 6000.00,
|
||||||
|
},
|
||||||
|
'single': {
|
||||||
|
'weekly': 88.50,
|
||||||
|
'bi-weekly': 177.00,
|
||||||
|
'semi-monthly': 191.75,
|
||||||
|
'monthly': 383.50,
|
||||||
|
'quarterly': 1150.00,
|
||||||
|
'semi-annual': 2300.00,
|
||||||
|
'annual': 4600.00,
|
||||||
|
},
|
||||||
|
'head of household': {
|
||||||
|
'weekly': 88.50,
|
||||||
|
'bi-weekly': 177.00,
|
||||||
|
'semi-monthly': 191.75,
|
||||||
|
'monthly': 383.50,
|
||||||
|
'quarterly': 1150.00,
|
||||||
|
'semi-annual': 2300.00,
|
||||||
|
'annual': 4600.00,
|
||||||
|
},
|
||||||
|
'married filing separate': {
|
||||||
|
'weekly': 57.75,
|
||||||
|
'bi-weekly': 115.50,
|
||||||
|
'semi-monthly': 125.00,
|
||||||
|
'monthly': 250.00,
|
||||||
|
'quarterly': 750.00,
|
||||||
|
'semi-annual': 1500.00,
|
||||||
|
'annual': 3000.00,
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ga_sit_deduction"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_ga_dor" model="res.partner">
|
||||||
|
<field name="name">US Georgia - Department of Taxation - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ga_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Georgia - Department of Taxation - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ga_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US GA Georgia State Unemployment</field>
|
||||||
|
<field name="code">ER_US_GA_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ga_suta_wage_base', rate='us_ga_suta_rate', state_code='GA')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ga_suta_wage_base', rate='us_ga_suta_rate', state_code='GA')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ga_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_ga_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US GA Georgia State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_GA_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ga_georgia_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ga_georgia_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ga_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
181
l10n_us_hr_payroll/data/state/hi_hawaii.xml
Normal file
181
l10n_us_hr_payroll/data/state/hi_hawaii.xml
Normal file
@@ -0,0 +1,181 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_hi_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US HI Hawaii SUTA Wage Base</field>
|
||||||
|
<field name="code">us_hi_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_hi_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">46800.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_hi_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_hi_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">48100.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_hi_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_hi_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US HI Hawaii SUTA Rate</field>
|
||||||
|
<field name="code">us_hi_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_hi_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.40</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_hi_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_hi_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.40</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_hi_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_hi_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US HI Hawaii SIT Tax Rate</field>
|
||||||
|
<field name="code">us_hi_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_hi_sit_tax_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': (
|
||||||
|
( 2400, 0.00, 1.40),
|
||||||
|
( 4800, 34.00, 3.20),
|
||||||
|
( 9600, 110.00, 5.50),
|
||||||
|
(14400, 374.00, 6.40),
|
||||||
|
(19200, 682.00, 6.80),
|
||||||
|
(24000, 1008.00, 7.20),
|
||||||
|
(36000, 1354.00, 7.60),
|
||||||
|
('inf', 2266.00, 7.90),
|
||||||
|
),
|
||||||
|
'married': (
|
||||||
|
( 4800, 0.00, 1.40),
|
||||||
|
( 9600, 67.00, 3.20),
|
||||||
|
(19200, 221.00, 5.50),
|
||||||
|
(28800, 749.00, 6.40),
|
||||||
|
(38400, 1363.00, 6.80),
|
||||||
|
(48000, 2016.00, 7.20),
|
||||||
|
(72000, 2707.00, 7.60),
|
||||||
|
('inf', 4531.00, 7.90),
|
||||||
|
),
|
||||||
|
'head_of_household': (
|
||||||
|
( 2400, 0.00, 1.40),
|
||||||
|
( 4800, 34.00, 3.20),
|
||||||
|
( 9600, 110.00, 5.50),
|
||||||
|
(14400, 374.00, 6.40),
|
||||||
|
(19200, 682.00, 6.80),
|
||||||
|
(24000, 1008.00, 7.20),
|
||||||
|
(36000, 1354.00, 7.60),
|
||||||
|
('inf', 2266.00, 7.90),
|
||||||
|
),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_hi_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://files.hawaii.gov/tax/forms/2019/19table.pdf -->
|
||||||
|
<!-- Table from Schedule I, II and III -->
|
||||||
|
<record id="rule_parameter_us_hi_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': (
|
||||||
|
( 2400, 0.00, 1.40),
|
||||||
|
( 4800, 34.00, 3.20),
|
||||||
|
( 9600, 110.00, 5.50),
|
||||||
|
(14400, 374.00, 6.40),
|
||||||
|
(19200, 682.00, 6.80),
|
||||||
|
(24000, 1008.00, 7.20),
|
||||||
|
(36000, 1354.00, 7.60),
|
||||||
|
('inf', 2266.00, 7.90),
|
||||||
|
),
|
||||||
|
'married': (
|
||||||
|
( 4800, 0.00, 1.40),
|
||||||
|
( 9600, 67.00, 3.20),
|
||||||
|
(19200, 221.00, 5.50),
|
||||||
|
(28800, 749.00, 6.40),
|
||||||
|
(38400, 1363.00, 6.80),
|
||||||
|
(48000, 2016.00, 7.20),
|
||||||
|
(72000, 2707.00, 7.60),
|
||||||
|
('inf', 4531.00, 7.90),
|
||||||
|
),
|
||||||
|
'head_of_household': (
|
||||||
|
( 2400, 0.00, 1.40),
|
||||||
|
( 4800, 34.00, 3.20),
|
||||||
|
( 9600, 110.00, 5.50),
|
||||||
|
(14400, 374.00, 6.40),
|
||||||
|
(19200, 682.00, 6.80),
|
||||||
|
(24000, 1008.00, 7.20),
|
||||||
|
(36000, 1354.00, 7.60),
|
||||||
|
('inf', 2266.00, 7.90),
|
||||||
|
),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_hi_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_hi_sit_personal_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US HI Hawaii Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_hi_sit_personal_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_hi_sit_personal_exemption_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1144</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_hi_sit_personal_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_hi_sit_personal_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1144</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_hi_sit_personal_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_hi_dor" model="res.partner">
|
||||||
|
<field name="name">US Hawaii - Department of Labor and Industrial Relations - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_hi_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Hawaii - Department of Taxation - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_hi_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US HI Hawaii State Unemployment</field>
|
||||||
|
<field name="code">ER_US_HI_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_hi_suta_wage_base', rate='us_hi_suta_rate', state_code='HI')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_hi_suta_wage_base', rate='us_hi_suta_rate', state_code='HI')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_hi_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_hi_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US HI Hawaii State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_HI_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = hi_hawaii_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = hi_hawaii_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_hi_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
303
l10n_us_hr_payroll/data/state/ia_iowa.xml
Normal file
303
l10n_us_hr_payroll/data/state/ia_iowa.xml
Normal file
@@ -0,0 +1,303 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_ia_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US IA Iowa SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ia_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ia_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">30600.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ia_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ia_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">31600.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ia_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_ia_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US IA Iowa SUTA Rate</field>
|
||||||
|
<field name="code">us_ia_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ia_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ia_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ia_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ia_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ia_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US IA Iowa SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ia_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ia_sit_tax_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'daily': (
|
||||||
|
( 5.13, 0.0033, 0.00),
|
||||||
|
( 10.25, 0.0067, 0.02),
|
||||||
|
( 20.50, 0.0225, 0.05),
|
||||||
|
( 46.13, 0.0414, 0.28),
|
||||||
|
( 76.89, 0.0563, 1.34),
|
||||||
|
(102.52, 0.0596, 3.07),
|
||||||
|
(153.78, 0.0625, 4.60),
|
||||||
|
(230.68, 0.0744, 7.80),
|
||||||
|
( 'inf', 0.0853, 13.52),
|
||||||
|
),
|
||||||
|
'weekly': (
|
||||||
|
( 25.63, 0.0033, 0.00),
|
||||||
|
( 51.27, 0.0067, 0.08),
|
||||||
|
( 102.52, 0.0225, 0.25),
|
||||||
|
( 230.67, 0.0414, 1.40),
|
||||||
|
( 384.46, 0.0563, 6.71),
|
||||||
|
( 512.62, 0.0596, 15.37),
|
||||||
|
( 768.92, 0.0625, 23.01),
|
||||||
|
(1153.38, 0.0744, 39.03),
|
||||||
|
( 'inf', 0.0853, 67.63),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 51.27, 0.0033, 0.00),
|
||||||
|
( 102.54, 0.0067, 0.17),
|
||||||
|
( 205.04, 0.0225, 0.51),
|
||||||
|
( 461.35, 0.0414, 2.82),
|
||||||
|
( 768.92, 0.0563, 13.43),
|
||||||
|
(1025.23, 0.0596, 30.75),
|
||||||
|
(1537.85, 0.0625, 46.03),
|
||||||
|
(2306.77, 0.0744, 78.07),
|
||||||
|
( 'inf', 0.0853, 135.28),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 55.54, 0.0033, 0.00),
|
||||||
|
( 111.08, 0.0067, 0.18),
|
||||||
|
( 222.13, 0.0225, 0.55),
|
||||||
|
( 499.79, 0.0414, 3.05),
|
||||||
|
( 833.00, 0.0563, 14.59),
|
||||||
|
(1110.67, 0.0596, 33.31),
|
||||||
|
(1666.00, 0.0625, 49.86),
|
||||||
|
(2499.00, 0.0744, 84.57),
|
||||||
|
( 'inf', 0.0853, 146.55),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 111.08, 0.0033, 0.00),
|
||||||
|
( 222.17, 0.0067, 0.37),
|
||||||
|
( 444.25, 0.0225, 1.11),
|
||||||
|
( 999.58, 0.0414, 6.11),
|
||||||
|
(1666.00, 0.0563, 29.10),
|
||||||
|
(2221.33, 0.0596, 62.66),
|
||||||
|
(3332.00, 0.0625, 99.72),
|
||||||
|
(4998.00, 0.0744, 169.14),
|
||||||
|
( 'inf', 0.0853, 293.09),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 1333.00, 0.0033, 0.00),
|
||||||
|
( 2666.00, 0.0067, 4.40),
|
||||||
|
( 5331.00, 0.0225, 13.33),
|
||||||
|
(11995.00, 0.0414, 73.29),
|
||||||
|
(19992.00, 0.0563, 349.19),
|
||||||
|
(26656.00, 0.0596, 799.41),
|
||||||
|
(39984.00, 0.0625, 1196.58),
|
||||||
|
(59976.00, 0.0744, 2029.58),
|
||||||
|
( 'inf', 0.0853, 3516.98),
|
||||||
|
),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ia_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://tax.iowa.gov/sites/default/files/idr/documents/WH/IA%20Withholding%20Formula%20and%20Instructions%20TY2020.pdf -->
|
||||||
|
<!-- Table from page 2.-->
|
||||||
|
<record id="rule_parameter_us_ia_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'daily': (
|
||||||
|
( 5.69, 0.0033, 0.00),
|
||||||
|
( 11.38, 0.0067, 0.02),
|
||||||
|
( 22.76, 0.0225, 0.06),
|
||||||
|
( 51.22, 0.0414, 0.32),
|
||||||
|
( 85.36, 0.0563, 1.50),
|
||||||
|
(113.81, 0.0596, 3.42),
|
||||||
|
(170.71, 0.0625, 5.12),
|
||||||
|
(256.07, 0.0744, 8.68),
|
||||||
|
( 'inf', 0.0853, 15.03),
|
||||||
|
),
|
||||||
|
'weekly': (
|
||||||
|
( 28.46, 0.0033, 0.00),
|
||||||
|
( 56.90, 0.0067, 0.09),
|
||||||
|
( 113.81, 0.0225, 0.28),
|
||||||
|
( 256.08, 0.0414, 1.56),
|
||||||
|
( 426.79, 0.0563, 7.45),
|
||||||
|
( 569.04, 0.0596, 17.06),
|
||||||
|
( 853.56, 0.0625, 25.54),
|
||||||
|
(1280.35, 0.0744, 43.32),
|
||||||
|
( 'inf', 0.0853, 75.07),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 56.92, 0.0033, 0.00),
|
||||||
|
( 113.81, 0.0067, 0.19),
|
||||||
|
( 227.62, 0.0225, 0.57),
|
||||||
|
( 512.15, 0.0414, 3.13),
|
||||||
|
( 853.58, 0.0563, 14.91),
|
||||||
|
(1138.08, 0.0596, 34.13),
|
||||||
|
(1707.12, 0.0625, 51.09),
|
||||||
|
(2560.69, 0.0744, 86.66),
|
||||||
|
( 'inf', 0.0853, 150.17),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 61.67, 0.0033, 0.00),
|
||||||
|
( 23.29, 0.0067, 0.20),
|
||||||
|
( 246.58, 0.0225, 0.61),
|
||||||
|
( 554.83, 0.0414, 3.38),
|
||||||
|
( 924.71, 0.0563, 16.14),
|
||||||
|
(1232.92, 0.0596, 36.96),
|
||||||
|
(1849.38, 0.0625, 55.33),
|
||||||
|
(2774.08, 0.0744, 93.86),
|
||||||
|
( 'inf', 0.0853, 162.66),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 123.33, 0.0033, 0.00),
|
||||||
|
( 246.58, 0.0067, 0.41),
|
||||||
|
( 493.17, 0.0225, 1.24),
|
||||||
|
(1109.67, 0.0414, 6.79),
|
||||||
|
(1849.42, 0.0563, 32.31),
|
||||||
|
(2465.83, 0.0596, 73.96),
|
||||||
|
(3698.75, 0.0625, 110.70),
|
||||||
|
(5548.17, 0.0744, 187.76),
|
||||||
|
( 'inf', 0.0853, 325.36),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 1480.00, 0.0033, 0.00),
|
||||||
|
( 2959.00, 0.0067, 4.88),
|
||||||
|
( 5918.00, 0.0225, 14.79),
|
||||||
|
(13316.00, 0.0414, 81.37),
|
||||||
|
(22193.00, 0.0563, 387.65),
|
||||||
|
(29590.00, 0.0596, 887.43),
|
||||||
|
(44385.00, 0.0625, 1328.29),
|
||||||
|
(66578.00, 0.0744, 2252.98),
|
||||||
|
( 'inf', 0.0853, 3904.14),
|
||||||
|
),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ia_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ia_sit_standard_deduction_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US IA Iowa Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_ia_sit_standard_deduction_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ia_sit_standard_deduction_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'daily': ( 6.50, 16.00),
|
||||||
|
'weekly': ( 32.50, 80.00),
|
||||||
|
'bi-weekly': ( 65.00, 160.00),
|
||||||
|
'semi-monthly': ( 70.42, 173.33),
|
||||||
|
'monthly': ( 140.83, 346.67),
|
||||||
|
'annually': (1690.00, 4160.00),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ia_sit_standard_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://tax.iowa.gov/sites/default/files/idr/documents/WH/IA%20Withholding%20Formula%20and%20Instructions%20TY2020.pdf-->
|
||||||
|
<!-- Step 2 -->
|
||||||
|
<record id="rule_parameter_us_ia_sit_standard_deduction_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'daily': ( 7.23, 17.81),
|
||||||
|
'weekly': ( 36.15, 89.04),
|
||||||
|
'bi-weekly': ( 72.31, 178.08),
|
||||||
|
'semi-monthly': ( 78.33, 192.92),
|
||||||
|
'monthly': ( 156.67, 385.83),
|
||||||
|
'annually': (1880.00, 4630.00),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ia_sit_standard_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ia_sit_deduction_allowance_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US IA Iowa Deduction Allowance Rate</field>
|
||||||
|
<field name="code">us_ia_sit_deduction_allowance_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ia_sit_deduction_allowance_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'daily': 0.15,
|
||||||
|
'weekly': 0.77,
|
||||||
|
'bi-weekly': 1.54,
|
||||||
|
'semi-monthly': 1.67,
|
||||||
|
'monthly': 3.33,
|
||||||
|
'annually': 40.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ia_sit_deduction_allowance_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://tax.iowa.gov/sites/default/files/idr/documents/WH/IA%20Withholding%20Formula%20and%20Instructions%20TY2020.pdf -->
|
||||||
|
<!-- Step 4 -->
|
||||||
|
<record id="rule_parameter_us_ia_sit_deduction_allowance_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'daily': 0.15,
|
||||||
|
'weekly': 0.77,
|
||||||
|
'bi-weekly': 1.54,
|
||||||
|
'semi-monthly': 1.67,
|
||||||
|
'monthly': 3.33,
|
||||||
|
'annually': 40.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ia_sit_deduction_allowance_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_ia_dor" model="res.partner">
|
||||||
|
<field name="name">US Iowa - Department of Economic Security (IDES) - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ia_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Iowa - Department of Revenue (IDOR) - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ia_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US IA Iowa State Unemployment</field>
|
||||||
|
<field name="code">ER_US_IA_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ia_suta_wage_base', rate='us_ia_suta_rate', state_code='IA')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ia_suta_wage_base', rate='us_ia_suta_rate', state_code='IA')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ia_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_ia_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US IA Iowa State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_IA_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ia_iowa_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ia_iowa_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ia_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
448
l10n_us_hr_payroll/data/state/id_idaho.xml
Normal file
448
l10n_us_hr_payroll/data/state/id_idaho.xml
Normal file
@@ -0,0 +1,448 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_id_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US ID Idaho SUTA Wage Base</field>
|
||||||
|
<field name="code">us_id_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_id_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">40000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_id_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_id_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">41600.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_id_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_id_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US ID Idaho SUTA Rate</field>
|
||||||
|
<field name="code">us_id_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_id_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_id_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_id_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_id_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_id_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US ID Idaho SIT Tax Rate</field>
|
||||||
|
<field name="code">us_id_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_id_sit_tax_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly': (
|
||||||
|
( 235, 0.00, 0.000),
|
||||||
|
( 264, 0.00, 1.125),
|
||||||
|
( 294, 0.00, 3.125),
|
||||||
|
( 324, 1.00, 3.625),
|
||||||
|
( 353, 2.00, 4.625),
|
||||||
|
( 383, 4.00, 5.625),
|
||||||
|
( 457, 5.00, 6.625),
|
||||||
|
('inf', 10.00, 6.925),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 469, 0.00, 0.000),
|
||||||
|
( 529, 0.00, 1.125),
|
||||||
|
( 588, 1.00, 3.125),
|
||||||
|
( 647, 3.00, 3.625),
|
||||||
|
( 706, 5.00, 4.625),
|
||||||
|
( 766, 7.00, 5.625),
|
||||||
|
( 914, 11.00, 6.625),
|
||||||
|
('inf', 21.00, 6.925),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 508, 0.00, 0.000),
|
||||||
|
( 573, 0.00, 1.125),
|
||||||
|
( 637, 1.00, 3.125),
|
||||||
|
( 701, 3.00, 3.625),
|
||||||
|
( 765, 5.00, 4.625),
|
||||||
|
( 829, 8.00, 5.625),
|
||||||
|
( 990, 12.00, 6.625),
|
||||||
|
('inf', 22.00, 6.925),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 1017, 0.00, 0.000),
|
||||||
|
( 1145, 0.00, 1.125),
|
||||||
|
( 1273, 1.00, 3.125),
|
||||||
|
( 1402, 5.00, 3.625),
|
||||||
|
( 1530, 10.00, 4.625),
|
||||||
|
( 1659, 16.00, 5.625),
|
||||||
|
( 1980, 23.00, 6.625),
|
||||||
|
('inf', 45.00, 6.925),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
(12200, 0.00, 0.000),
|
||||||
|
(13741, 0.00, 1.125),
|
||||||
|
(15281, 17.00, 3.125),
|
||||||
|
(16822, 65.00, 3.625),
|
||||||
|
(18362, 121.00, 4.625),
|
||||||
|
(19903, 192.00, 5.625),
|
||||||
|
(23754, 279.00, 6.625),
|
||||||
|
('inf', 534.00, 6.925),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': (
|
||||||
|
( 469, 0.00, 0.000),
|
||||||
|
( 529, 0.00, 1.125),
|
||||||
|
( 588, 0.00, 3.125),
|
||||||
|
( 647, 1.00, 3.625),
|
||||||
|
( 706, 2.00, 4.625),
|
||||||
|
( 766, 4.00, 5.625),
|
||||||
|
( 914, 5.00, 6.625),
|
||||||
|
('inf', 10.00, 6.925),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 938, 0.00, 0.000),
|
||||||
|
( 1057, 0.00, 1.125),
|
||||||
|
( 1175, 1.00, 3.125),
|
||||||
|
( 1294, 5.00, 3.625),
|
||||||
|
( 1412, 9.00, 4.625),
|
||||||
|
( 1531, 15.00, 5.625),
|
||||||
|
( 1827, 21.00, 6.625),
|
||||||
|
('inf', 41.00, 6.925),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 1017, 0.00, 0.000),
|
||||||
|
( 1145, 0.00, 1.125),
|
||||||
|
( 1273, 1.00, 3.125),
|
||||||
|
( 1402, 5.00, 3.625),
|
||||||
|
( 1530, 10.00, 4.625),
|
||||||
|
( 1659, 16.00, 5.625),
|
||||||
|
( 1980, 23.00, 6.625),
|
||||||
|
('inf', 45.00, 6.925),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 2033, 0.00, 0.000),
|
||||||
|
( 2290, 0.00, 1.125),
|
||||||
|
( 2547, 3.00, 3.125),
|
||||||
|
( 2804, 11.00, 3.625),
|
||||||
|
( 3060, 20.00, 4.625),
|
||||||
|
( 3317, 32.00, 5.625),
|
||||||
|
( 3959, 47.00, 6.625),
|
||||||
|
('inf', 89.00, 6.925),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
(24400, 0.00, 0.000),
|
||||||
|
(27482, 0.00, 1.125),
|
||||||
|
(30562, 35.00, 3.125),
|
||||||
|
(33644, 131.00, 3.625),
|
||||||
|
(36724, 243.00, 4.625),
|
||||||
|
(39806, 385.00, 5.625),
|
||||||
|
(47508, 558.00, 6.625),
|
||||||
|
('inf', 1068.00, 6.925),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'head of household': {
|
||||||
|
'weekly': (
|
||||||
|
( 235, 0.00, 0.000),
|
||||||
|
( 264, 0.00, 1.125),
|
||||||
|
( 294, 0.00, 3.125),
|
||||||
|
( 324, 1.00, 3.625),
|
||||||
|
( 353, 2.00, 4.625),
|
||||||
|
( 383, 4.00, 5.625),
|
||||||
|
( 457, 5.00, 6.625),
|
||||||
|
('inf', 10.00, 6.925),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 469, 0.00, 0.000),
|
||||||
|
( 529, 0.00, 1.125),
|
||||||
|
( 588, 1.00, 3.125),
|
||||||
|
( 647, 3.00, 3.625),
|
||||||
|
( 706, 5.00, 4.625),
|
||||||
|
( 766, 7.00, 5.625),
|
||||||
|
( 914, 11.00, 6.625),
|
||||||
|
('inf', 21.00, 6.925),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 508, 0.00, 0.000),
|
||||||
|
( 573, 0.00, 1.125),
|
||||||
|
( 637, 1.00, 3.125),
|
||||||
|
( 701, 3.00, 3.625),
|
||||||
|
( 765, 5.00, 4.625),
|
||||||
|
( 829, 8.00, 5.625),
|
||||||
|
( 990, 12.00, 6.625),
|
||||||
|
('inf', 22.00, 6.925),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 1017, 0.00, 0.000),
|
||||||
|
( 1145, 0.00, 1.125),
|
||||||
|
( 1273, 1.00, 3.125),
|
||||||
|
( 1402, 5.00, 3.625),
|
||||||
|
( 1530, 10.00, 4.625),
|
||||||
|
( 1659, 16.00, 5.625),
|
||||||
|
( 1980, 23.00, 6.625),
|
||||||
|
('inf', 45.00, 6.925),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
(12200, 0.00, 0.000),
|
||||||
|
(13741, 0.00, 1.125),
|
||||||
|
(15281, 17.00, 3.125),
|
||||||
|
(16822, 65.00, 3.625),
|
||||||
|
(18362, 121.00, 4.625),
|
||||||
|
(19903, 192.00, 5.625),
|
||||||
|
(23754, 279.00, 6.625),
|
||||||
|
('inf', 534.00, 6.925),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_id_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://tax.idaho.gov/pubs/EPB00744_06-16-2020.pdf -->
|
||||||
|
<!-- Page 1 to 3 -->
|
||||||
|
<record id="rule_parameter_us_id_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly': (
|
||||||
|
( 238, 0.00, 0.000),
|
||||||
|
( 269, 0.00, 1.125),
|
||||||
|
( 299, 0.00, 3.125),
|
||||||
|
( 329, 1.00, 3.625),
|
||||||
|
( 359, 2.00, 4.625),
|
||||||
|
( 389, 4.00, 5.625),
|
||||||
|
( 465, 5.00, 6.625),
|
||||||
|
('inf', 10.00, 6.925),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 477, 0.00, 0.000),
|
||||||
|
( 537, 0.00, 1.125),
|
||||||
|
( 598, 1.00, 3.125),
|
||||||
|
( 658, 3.00, 3.625),
|
||||||
|
( 718, 5.00, 4.625),
|
||||||
|
( 778, 8.00, 5.625),
|
||||||
|
( 929, 11.00, 6.625),
|
||||||
|
('inf', 21.00, 6.925),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 517, 0.00, 0.000),
|
||||||
|
( 582, 0.00, 1.125),
|
||||||
|
( 647, 1.00, 3.125),
|
||||||
|
( 713, 3.00, 3.625),
|
||||||
|
( 778, 5.00, 4.625),
|
||||||
|
( 843, 8.00, 5.625),
|
||||||
|
( 1007, 12.00, 6.625),
|
||||||
|
('inf', 23.00, 6.925),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 1033, 0.00, 0.000),
|
||||||
|
( 1164, 0.00, 1.125),
|
||||||
|
( 1295, 1.00, 3.125),
|
||||||
|
( 1425, 6.00, 3.625),
|
||||||
|
( 1556, 10.00, 4.625),
|
||||||
|
( 1687, 16.00, 5.625),
|
||||||
|
( 2013, 24.00, 6.625),
|
||||||
|
('inf', 45.00, 6.925),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
(12400, 0.00, 0.000),
|
||||||
|
(13968, 0.00, 1.125),
|
||||||
|
(15536, 18.00, 3.125),
|
||||||
|
(17104, 67.00, 3.625),
|
||||||
|
(18672, 124.00, 4.625),
|
||||||
|
(20240, 197.00, 5.625),
|
||||||
|
(24160, 285.00, 6.625),
|
||||||
|
('inf', 545.00, 6.925),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': (
|
||||||
|
( 477, 0.00, 0.000),
|
||||||
|
( 537, 0.00, 1.125),
|
||||||
|
( 598, 0.00, 3.125),
|
||||||
|
( 658, 1.00, 3.625),
|
||||||
|
( 718, 3.00, 4.625),
|
||||||
|
( 778, 5.00, 5.625),
|
||||||
|
( 929, 11.00, 6.625),
|
||||||
|
('inf', 21.00, 6.925),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 954, 0.00, 0.000),
|
||||||
|
( 1074, 0.00, 1.125),
|
||||||
|
( 1195, 1.00, 3.125),
|
||||||
|
( 1316, 5.00, 3.625),
|
||||||
|
( 1436, 9.00, 4.625),
|
||||||
|
( 1557, 15.00, 5.625),
|
||||||
|
( 1858, 22.00, 6.625),
|
||||||
|
('inf', 42.00, 6.925),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 1033, 0.00, 0.000),
|
||||||
|
( 1164, 0.00, 1.125),
|
||||||
|
( 1295, 1.00, 3.125),
|
||||||
|
( 1425, 6.00, 3.625),
|
||||||
|
( 1556, 10.00, 4.625),
|
||||||
|
( 1687, 16.00, 5.625),
|
||||||
|
( 2013, 24.00, 6.625),
|
||||||
|
('inf', 45.00, 6.925),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 2067, 0.00, 0.000),
|
||||||
|
( 2328, 0.00, 1.125),
|
||||||
|
( 2589, 3.00, 3.125),
|
||||||
|
( 2851, 11.00, 3.625),
|
||||||
|
( 3112, 21.00, 4.625),
|
||||||
|
( 3373, 33.00, 5.625),
|
||||||
|
( 4027, 47.00, 6.625),
|
||||||
|
('inf', 91.00, 6.925),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
(24400, 0.00, 0.000),
|
||||||
|
(27482, 0.00, 1.125),
|
||||||
|
(30562, 35.00, 3.125),
|
||||||
|
(33644, 131.00, 3.625),
|
||||||
|
(36724, 243.00, 4.625),
|
||||||
|
(39806, 385.00, 5.625),
|
||||||
|
(47508, 558.00, 6.625),
|
||||||
|
('inf', 1068.00, 6.925),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'head of household': {
|
||||||
|
'weekly': (
|
||||||
|
( 238, 0.00, 0.000),
|
||||||
|
( 269, 0.00, 1.125),
|
||||||
|
( 299, 0.00, 3.125),
|
||||||
|
( 329, 1.00, 3.625),
|
||||||
|
( 359, 2.00, 4.625),
|
||||||
|
( 389, 4.00, 5.625),
|
||||||
|
( 465, 5.00, 6.625),
|
||||||
|
('inf', 10.00, 6.925),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 477, 0.00, 0.000),
|
||||||
|
( 537, 0.00, 1.125),
|
||||||
|
( 598, 1.00, 3.125),
|
||||||
|
( 658, 3.00, 3.625),
|
||||||
|
( 718, 5.00, 4.625),
|
||||||
|
( 778, 8.00, 5.625),
|
||||||
|
( 929, 11.00, 6.625),
|
||||||
|
('inf', 21.00, 6.925),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 517, 0.00, 0.000),
|
||||||
|
( 582, 0.00, 1.125),
|
||||||
|
( 647, 1.00, 3.125),
|
||||||
|
( 713, 3.00, 3.625),
|
||||||
|
( 778, 5.00, 4.625),
|
||||||
|
( 843, 8.00, 5.625),
|
||||||
|
( 1007, 12.00, 6.625),
|
||||||
|
('inf', 23.00, 6.925),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 1033, 0.00, 0.000),
|
||||||
|
( 1164, 0.00, 1.125),
|
||||||
|
( 1295, 1.00, 3.125),
|
||||||
|
( 1425, 6.00, 3.625),
|
||||||
|
( 1556, 10.00, 4.625),
|
||||||
|
( 1687, 16.00, 5.625),
|
||||||
|
( 2013, 24.00, 6.625),
|
||||||
|
('inf', 45.00, 6.925),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
(12400, 0.00, 0.000),
|
||||||
|
(13968, 0.00, 1.125),
|
||||||
|
(15536, 18.00, 3.125),
|
||||||
|
(17104, 67.00, 3.625),
|
||||||
|
(18672, 124.00, 4.625),
|
||||||
|
(20240, 197.00, 5.625),
|
||||||
|
(24160, 285.00, 6.625),
|
||||||
|
('inf', 545.00, 6.925),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_id_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_id_sit_ictcat_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US ID Idaho Child Tax Credit Allowance Rate</field>
|
||||||
|
<field name="code">us_id_sit_ictcat_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_id_sit_ictcat_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': 56.92,
|
||||||
|
'bi-weekly': 113.85,
|
||||||
|
'semi-monthly': 123.33,
|
||||||
|
'monthly': 246.67,
|
||||||
|
'annually': 2960.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_id_sit_ictcat_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://tax.idaho.gov/i-1026.cfm?seg=compute -->
|
||||||
|
<!-- Idaho Child Tax Credit Allowances Table -->
|
||||||
|
<record id="rule_parameter_us_id_sit_ictcat_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': 56.92,
|
||||||
|
'bi-weekly': 113.85,
|
||||||
|
'semi-monthly': 123.33,
|
||||||
|
'monthly': 246.67,
|
||||||
|
'annually': 2960.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_id_sit_ictcat_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_id_dor" model="res.partner">
|
||||||
|
<field name="name">US Idaho - Department of Labor (IDOL) - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_id_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Idaho - State Tax Commission (ISTC) - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_id_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US ID Idaho State Unemployment</field>
|
||||||
|
<field name="code">ER_US_ID_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_id_suta_wage_base', rate='us_id_suta_rate', state_code='ID')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_id_suta_wage_base', rate='us_id_suta_rate', state_code='ID')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_id_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_id_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US ID Idaho State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_ID_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = id_idaho_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = id_idaho_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_id_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
117
l10n_us_hr_payroll/data/state/il_illinois.xml
Normal file
117
l10n_us_hr_payroll/data/state/il_illinois.xml
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_il_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US IL Illinois SUTA Wage Base</field>
|
||||||
|
<field name="code">us_il_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_il_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">12960.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_il_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_il_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">12740.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_il_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_il_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US IL Illinois SUTA Rate</field>
|
||||||
|
<field name="code">us_il_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_il_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">3.175</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_il_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_il_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">3.125</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_il_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_il_sit_basic_allowances_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US IL Illinois Basic Allowances Rate</field>
|
||||||
|
<field name="code">us_il_sit_basic_allowances_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_il_sit_basic_allowances_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2275.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_il_sit_basic_allowances_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_il_sit_basic_allowances_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2325.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_il_sit_basic_allowances_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_il_sit_additional_allowances_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US IL Illinois Additional Allowances Rate</field>
|
||||||
|
<field name="code">us_il_sit_additional_allowances_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_il_sit_additional_allowances_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_il_sit_additional_allowances_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_il_sit_additional_allowances_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_il_sit_additional_allowances_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_il_dor" model="res.partner">
|
||||||
|
<field name="name">US Illinois - Department of Economic Security (IDES) - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_il_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Illinois - Department of Revenue (IDOR) - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_il_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US IL Illinois State Unemployment</field>
|
||||||
|
<field name="code">ER_US_IL_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_il_suta_wage_base', rate='us_il_suta_rate', state_code='IL')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_il_suta_wage_base', rate='us_il_suta_rate', state_code='IL')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_il_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_il_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US IL Illinois State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_IL_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = il_illinois_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = il_illinois_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_il_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
122
l10n_us_hr_payroll/data/state/in_indiana.xml
Normal file
122
l10n_us_hr_payroll/data/state/in_indiana.xml
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_in_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US IN Indiana SUTA Wage Base</field>
|
||||||
|
<field name="code">us_in_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_in_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">9500.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_in_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_in_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US IN Indiana SUTA Rate</field>
|
||||||
|
<field name="code">us_in_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_in_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.5</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_in_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- state income rate -->
|
||||||
|
<record id="rule_parameter_us_in_suta_income_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US IN Indiana SUTA Income Rate</field>
|
||||||
|
<field name="code">us_in_suta_income_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_in_suta_income_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">3.23</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_in_suta_income_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_in_sit_personal_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US IN Indiana SIT Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_in_sit_personal_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_in_sit_personal_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'daily': ( 2.74, 5.48, 8.22, 10.96, 13.70, 16.44),
|
||||||
|
'weekly': ( 19.23, 38.46, 57.69, 76.92, 96.15, 115.38),
|
||||||
|
'bi-weekly': ( 38.46, 76.92, 115.38, 153.85, 192.31, 230.77),
|
||||||
|
'semi-monthly': ( 41.67, 83.33, 125.00, 166.67, 208.33, 250.00),
|
||||||
|
'monthly': ( 83.33, 166.67, 250.00, 333.33, 416.67, 500.00),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_in_sit_personal_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_in_sit_dependent_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US IN Indiana SIT Dependent Exemption Rate</field>
|
||||||
|
<field name="code">us_in_sit_dependent_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_in_sit_dependent_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'daily': ( 4.11, 8.22, 12.33, 16.44, 20.55),
|
||||||
|
'weekly': ( 28.85, 57.69, 86.54, 115.38, 144.23),
|
||||||
|
'bi-weekly': ( 57.69, 115.38, 173.08, 230.77, 288.46),
|
||||||
|
'semi-monthly': ( 62.50, 125.00, 187.50, 250.00, 312.50),
|
||||||
|
'monthly': (125.00, 250.00, 375.00, 500.00, 625.00),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_in_sit_dependent_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_in_dor" model="res.partner">
|
||||||
|
<field name="name">US Indiana - Department of Workforce Development - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_in_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Indiana - Department of Revenue - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_in_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US IN Indiana State Unemployment</field>
|
||||||
|
<field name="code">ER_US_IN_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_in_suta_wage_base', rate='us_in_suta_rate', state_code='IN')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_in_suta_wage_base', rate='us_in_suta_rate', state_code='IN')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_in_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_in_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US IN Indiana State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_IN_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = in_indiana_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = in_indiana_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_in_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
194
l10n_us_hr_payroll/data/state/ks_kansas.xml
Normal file
194
l10n_us_hr_payroll/data/state/ks_kansas.xml
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_ks_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US KS Kansas SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ks_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ks_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">14000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ks_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_ks_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US KS Kansas SUTA Rate</field>
|
||||||
|
<field name="code">us_ks_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ks_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ks_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ks_sit_allowances_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US KS Kansas Allowances Rate</field>
|
||||||
|
<field name="code">us_ks_sit_allowances_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ks_sit_allowances_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly' : 43.27,
|
||||||
|
'bi-weekly' : 86.54,
|
||||||
|
'semi-monthly': 93.75,
|
||||||
|
'monthly' : 187.50,
|
||||||
|
'quarterly' : 562.50,
|
||||||
|
'semi-annual': 1125.00,
|
||||||
|
'annually': 2250.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ks_sit_allowances_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- Table from percentage table from https://www.ksrevenue.org/pdf/kw100.pdf -->
|
||||||
|
<record id="rule_parameter_us_ks_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US KS Kansas SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ks_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ks_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly': (
|
||||||
|
( 58, 0.00, 0.00),
|
||||||
|
( 346, 3.10, 0.00),
|
||||||
|
( 635, 5.25, 8.94),
|
||||||
|
('inf', 5.70, 24.09),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 115, 0.00, 0.00),
|
||||||
|
( 692, 3.10, 0.00),
|
||||||
|
( 1269, 5.25, 17.88),
|
||||||
|
('inf', 5.70, 48.17),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 125, 0.00, 0.00),
|
||||||
|
( 750, 3.10, 0.00),
|
||||||
|
( 1375, 5.25, 19.38),
|
||||||
|
('inf', 5.70, 52.19),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 250, 0.00, 0.00),
|
||||||
|
( 1500, 3.10, 0.00),
|
||||||
|
( 2750, 5.25, 38.75),
|
||||||
|
('inf', 5.70, 104.38),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 750, 0.00, 0.00),
|
||||||
|
( 4500, 3.10, 0.00),
|
||||||
|
(8250, 5.25, 116.25),
|
||||||
|
('inf', 5.70, 313.13),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 1500, 0.00, 0.00),
|
||||||
|
( 9000, 3.10, 0.00),
|
||||||
|
(16500, 5.25, 232.50),
|
||||||
|
('inf', 5.70, 626.25),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 3000, 0.00, 0.00),
|
||||||
|
(18000, 3.10, 0.00),
|
||||||
|
(33000, 5.25, 465.00),
|
||||||
|
('inf', 5.70, 1252.50),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': (
|
||||||
|
( 144, 0.00, 0.00),
|
||||||
|
( 721, 3.10, 0.00),
|
||||||
|
(1298, 5.25, 17.88),
|
||||||
|
('inf', 5.70, 48.17),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 288, 0.00, 0.00),
|
||||||
|
( 1442, 3.10, 0.00),
|
||||||
|
( 2596, 5.25, 35.77),
|
||||||
|
('inf', 5.70, 96.35),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 313, 0.00, 0.00),
|
||||||
|
( 1563, 3.10, 0.00),
|
||||||
|
( 2813, 5.25, 38.75),
|
||||||
|
('inf', 5.70, 104.38),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 625, 0.00, 0.00),
|
||||||
|
( 3125, 3.10, 0.00),
|
||||||
|
( 5625, 5.25, 77.50),
|
||||||
|
('inf', 5.70, 208.75),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 1875, 0.00, 0.00),
|
||||||
|
( 9375, 3.10, 0.00),
|
||||||
|
(16875, 5.25, 232.50),
|
||||||
|
('inf', 5.70, 626.25),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 3750, 0.00, 0.00),
|
||||||
|
(18750, 3.10, 0.00),
|
||||||
|
(33750, 5.25, 465.00),
|
||||||
|
('inf', 5.70, 1252.50),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 7500, 0.00, 0.00),
|
||||||
|
(37500, 3.10, 0.00),
|
||||||
|
(67500, 5.25, 930.00),
|
||||||
|
('inf', 5.70, 2505.00),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ks_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_ks_dor" model="res.partner">
|
||||||
|
<field name="name">US Kansas - Department of Labor - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ks_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Kansas - Department of Revenue - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ks_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US KS Kansas State Unemployment</field>
|
||||||
|
<field name="code">ER_US_KS_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ks_suta_wage_base', rate='us_ks_suta_rate', state_code='KS')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ks_suta_wage_base', rate='us_ks_suta_rate', state_code='KS')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ks_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_ks_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US KS Kansas State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_KS_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ks_kansas_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ks_kansas_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ks_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
99
l10n_us_hr_payroll/data/state/ky_kentucky.xml
Normal file
99
l10n_us_hr_payroll/data/state/ky_kentucky.xml
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_ky_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US KY Kentucky SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ky_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ky_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">10800.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ky_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_ky_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US KY Kentucky SUTA Rate</field>
|
||||||
|
<field name="code">us_ky_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ky_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ky_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ky_sit_standard_deduction_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US KY Kentucky Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_ky_sit_standard_deduction_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<!-- Data from https://revenue.ky.gov/Forms/42A003(T)%20(12-2019)%202020%20Tax%20Tables.pdf -->
|
||||||
|
<record id="rule_parameter_us_ky_sit_standard_deduction_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2650</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ky_sit_standard_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ky_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US KY Kentucky SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ky_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<!-- Data from https://revenue.ky.gov/Forms/42A003(T)%20(12-2019)%202020%20Tax%20Tables.pdf -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ky_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">5.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ky_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_ky_dor" model="res.partner">
|
||||||
|
<field name="name">US Kentucky - Office of Unemployment Insurance - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ky_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Kentucky - Department of Revenue - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ky_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US KY Kentucky State Unemployment</field>
|
||||||
|
<field name="code">ER_US_KY_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ky_suta_wage_base', rate='us_ky_suta_rate', state_code='KY')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ky_suta_wage_base', rate='us_ky_suta_rate', state_code='KY')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ky_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_ky_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US KY Kentucky State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_KY_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ky_kentucky_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ky_kentucky_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ky_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
157
l10n_us_hr_payroll/data/state/la_louisiana.xml
Normal file
157
l10n_us_hr_payroll/data/state/la_louisiana.xml
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_la_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US LA Louisiana SUTA Wage Base</field>
|
||||||
|
<field name="code">us_la_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_la_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">7700.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_la_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_la_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">7700.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_la_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_la_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US LA Louisiana SUTA Rate</field>
|
||||||
|
<field name="code">us_la_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_la_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.14</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_la_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_la_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.14</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_la_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- table data from http://www.revenue.louisiana.gov/taxforms/1306(7_09)W.pdf page 9. -->
|
||||||
|
<record id="rule_parameter_us_la_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US LA Louisiana SIT Tax Rate</field>
|
||||||
|
<field name="code">us_la_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_la_sit_tax_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': (
|
||||||
|
(12500.00, 2.10),
|
||||||
|
(50000.00, 1.60),
|
||||||
|
( 'inf', 1.35),
|
||||||
|
),
|
||||||
|
'married': (
|
||||||
|
( 25000.00, 2.10),
|
||||||
|
(100000.00, 1.65),
|
||||||
|
( 'inf', 1.35),
|
||||||
|
),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_la_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_la_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': (
|
||||||
|
(12500.00, 2.10),
|
||||||
|
(50000.00, 1.60),
|
||||||
|
( 'inf', 1.35)
|
||||||
|
),
|
||||||
|
'married': (
|
||||||
|
( 25000.00, 2.10),
|
||||||
|
(100000.00, 1.65),
|
||||||
|
( 'inf', 1.35)
|
||||||
|
),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_la_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_la_sit_personal_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US LA Louisiana Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_la_sit_personal_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_la_sit_personal_exemption_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">4500</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_la_sit_personal_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_la_sit_personal_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">4500</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_la_sit_personal_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_la_sit_dependent_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US LA Louisiana Dependent Rate</field>
|
||||||
|
<field name="code">us_la_sit_dependent_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_la_sit_dependent_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_la_sit_dependent_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_la_sit_dependent_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_la_sit_dependent_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_la_dor" model="res.partner">
|
||||||
|
<field name="name">US Louisiana - Workforce Commission (LWC) - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_la_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Louisiana - Department of Revenue (LDOR) - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_la_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US LA Louisiana State Unemployment</field>
|
||||||
|
<field name="code">ER_US_LA_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_la_suta_wage_base', rate='us_la_suta_rate', state_code='LA')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_la_suta_wage_base', rate='us_la_suta_rate', state_code='LA')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_la_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_la_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US LA Louisiana State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_LA_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = la_louisiana_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = la_louisiana_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_la_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
131
l10n_us_hr_payroll/data/state/me_maine.xml
Normal file
131
l10n_us_hr_payroll/data/state/me_maine.xml
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_me_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US ME Maine SUTA Wage Base</field>
|
||||||
|
<field name="code">us_me_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_me_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">12000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_me_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_me_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US ME Maine SUTA Rate</field>
|
||||||
|
<field name="code">us_me_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_me_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.92</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_me_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- table based on https://www.maine.gov/revenue/forms/with/2020/20_WH_Tab&Instructions.pdf step 6.-->
|
||||||
|
<record id="rule_parameter_us_me_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US ME Maine SIT Tax Rate</field>
|
||||||
|
<field name="code">us_me_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_me_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': (
|
||||||
|
( 22200, 0, 5.80),
|
||||||
|
( 52600, 1288, 6.75),
|
||||||
|
( 'inf', 3340, 7.15),
|
||||||
|
),
|
||||||
|
'married': (
|
||||||
|
( 44450, 0, 5.80),
|
||||||
|
( 105200, 2578, 6.75),
|
||||||
|
( 'inf', 6679, 7.15),
|
||||||
|
),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_me_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_me_sit_standard_deduction_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US ME Maine Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_me_sit_standard_deduction_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_me_sit_standard_deduction_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
( 82900, 9550),
|
||||||
|
(157900, 75000),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
(165800, 21950),
|
||||||
|
(315800, 150000),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_me_sit_standard_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_me_sit_personal_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US ME Maine Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_me_sit_personal_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_me_sit_personal_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">4300</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_me_sit_personal_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_me_dor" model="res.partner">
|
||||||
|
<field name="name">US Maine - Department Of Labor | ReEmploy - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_me_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Maine - Department Of Revenue Services - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_me_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US ME Maine State Unemployment</field>
|
||||||
|
<field name="code">ER_US_ME_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_me_suta_wage_base', rate='us_me_suta_rate', state_code='ME')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_me_suta_wage_base', rate='us_me_suta_rate', state_code='ME')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_me_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_me_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US ME Maine State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_ME_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = me_maine_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = me_maine_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_me_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
99
l10n_us_hr_payroll/data/state/mi_michigan.xml
Normal file
99
l10n_us_hr_payroll/data/state/mi_michigan.xml
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_mi_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MI Michigan SUTA Wage Base</field>
|
||||||
|
<field name="code">us_mi_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mi_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">9500.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mi_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mi_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">9000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mi_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_mi_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MI Michigan SUTA Rate</field>
|
||||||
|
<field name="code">us_mi_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mi_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mi_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mi_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mi_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_mi_sit_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MI Michigan Exemption Rate</field>
|
||||||
|
<field name="code">us_mi_sit_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mi_sit_exemption_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">4400.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mi_sit_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mi_sit_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">4750.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mi_sit_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_mi_dor" model="res.partner">
|
||||||
|
<field name="name">US Michigan - Unemployment Insurance Agency - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_mi_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Michigan - Department of Treasury - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_mi_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US MI Michigan State Unemployment</field>
|
||||||
|
<field name="code">ER_US_MI_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_mi_suta_wage_base', rate='us_mi_suta_rate', state_code='MI')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_mi_suta_wage_base', rate='us_mi_suta_rate', state_code='MI')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mi_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_mi_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US MI Michigan State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_MI_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = mi_michigan_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = mi_michigan_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mi_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
147
l10n_us_hr_payroll/data/state/mn_minnesota.xml
Normal file
147
l10n_us_hr_payroll/data/state/mn_minnesota.xml
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_mn_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MN Minnesota SUTA Wage Base</field>
|
||||||
|
<field name="code">us_mn_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mn_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">34000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mn_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mn_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">35000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mn_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_mn_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MN Minnesota SUTA Rate</field>
|
||||||
|
<field name="code">us_mn_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mn_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.11</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mn_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mn_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.11</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mn_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_mn_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MN Minnesota SIT Tax Rate</field>
|
||||||
|
<field name="code">us_mn_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mn_sit_tax_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': (
|
||||||
|
( 28920, 2400, 5.35, 0.00),
|
||||||
|
( 89510, 28920, 7.05, 1418.82),
|
||||||
|
(166290, 89510, 7.85, 5690.42),
|
||||||
|
( 'inf', 166290, 9.85, 11717.65),
|
||||||
|
),
|
||||||
|
'married': (
|
||||||
|
( 47820, 9050, 5.35, 0.00),
|
||||||
|
( 163070, 47820, 7.05, 2074.20),
|
||||||
|
( 282200, 163070, 7.85, 10199.33),
|
||||||
|
( 'inf', 282200, 9.85, 19551.04),
|
||||||
|
),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mn_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://www.revenue.state.mn.us/sites/default/files/2019-12/wh_inst_20_0.pdf -->
|
||||||
|
<!-- Chart for step 5 value -->
|
||||||
|
<record id="rule_parameter_us_mn_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': (
|
||||||
|
( 30760, 3800, 5.35, 0.00),
|
||||||
|
( 92350, 30760, 6.80, 1442.36),
|
||||||
|
(168200, 92350, 7.85, 5630.48),
|
||||||
|
( 'inf', 168200, 9.85, 11584.71),
|
||||||
|
),
|
||||||
|
'married': (
|
||||||
|
( 51310, 11900, 5.35, 0.00),
|
||||||
|
( 168470, 51310, 6.80, 2108.44),
|
||||||
|
( 285370, 168470, 7.85, 10075.32),
|
||||||
|
( 'inf', 285370, 9.85, 19251.97),
|
||||||
|
),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mn_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_mn_sit_allowances_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MN Minnesota Allowances Rate</field>
|
||||||
|
<field name="code">us_mn_sit_allowances_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mn_sit_allowances_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">4250.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mn_sit_allowances_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://www.revenue.state.mn.us/sites/default/files/2019-12/wh_inst_20_0.pdf -->
|
||||||
|
<!-- Step 3. -->
|
||||||
|
<record id="rule_parameter_us_mn_sit_allowances_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">4300.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mn_sit_allowances_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_mn_dor" model="res.partner">
|
||||||
|
<field name="name">US Minnesota - Unemployment Insurance Agency - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_mn_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Minnesota - Department of Treasury - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_mn_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US MN Minnesota State Unemployment</field>
|
||||||
|
<field name="code">ER_US_MN_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_mn_suta_wage_base', rate='us_mn_suta_rate', state_code='MN')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_mn_suta_wage_base', rate='us_mn_suta_rate', state_code='MN')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mn_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_mn_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US MN Minnesota State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_MN_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = mn_minnesota_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = mn_minnesota_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mn_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
151
l10n_us_hr_payroll/data/state/mo_missouri.xml
Normal file
151
l10n_us_hr_payroll/data/state/mo_missouri.xml
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_mo_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MO Missouri SUTA Wage Base</field>
|
||||||
|
<field name="code">us_mo_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mo_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">12000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mo_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mo_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">11500.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mo_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_mo_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MO Missouri SUTA Rate</field>
|
||||||
|
<field name="code">us_mo_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mo_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.376</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mo_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mo_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.376</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mo_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_mo_sit_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MO Missouri SIT Rate Table</field>
|
||||||
|
<field name="code">us_mo_sit_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<!-- https://dor.mo.gov/forms/4282_2019.pdf -->
|
||||||
|
<record id="rule_parameter_us_mo_sit_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">[
|
||||||
|
(1053.0, 1.5),
|
||||||
|
(1053.0, 2.0),
|
||||||
|
(1053.0, 2.5),
|
||||||
|
(1053.0, 3.0),
|
||||||
|
(1053.0, 3.5),
|
||||||
|
(1053.0, 4.0),
|
||||||
|
(1053.0, 4.5),
|
||||||
|
(1053.0, 5.0),
|
||||||
|
( 'inf', 5.4),
|
||||||
|
]</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mo_sit_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://dor.mo.gov/forms/4282_2020.pdf -->
|
||||||
|
<!-- Income Tax Withholding Percentage Table-->
|
||||||
|
<record id="rule_parameter_us_mo_sit_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">[
|
||||||
|
(1073.0, 1.5),
|
||||||
|
(1073.0, 2.0),
|
||||||
|
(1073.0, 2.5),
|
||||||
|
(1073.0, 3.0),
|
||||||
|
(1073.0, 3.5),
|
||||||
|
(1073.0, 4.0),
|
||||||
|
(1073.0, 4.5),
|
||||||
|
(1073.0, 5.0),
|
||||||
|
( 'inf', 5.4),
|
||||||
|
]</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mo_sit_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_mo_sit_deduction" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MO Missouri SIT Deduction</field>
|
||||||
|
<field name="code">us_mo_sit_deduction</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<!-- https://dor.mo.gov/forms/4282_2019.pdf -->
|
||||||
|
<record id="rule_parameter_us_mo_sit_deduction_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': 12400.0,
|
||||||
|
'married': 24800.0,
|
||||||
|
'head_of_household': 18650.0,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mo_sit_deduction"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://dor.mo.gov/forms/4282_2020.pdf -->
|
||||||
|
<!-- 2020 Missouri Withholding Tax Formula Page.12 -->
|
||||||
|
<record id="rule_parameter_us_mo_sit_deduction_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': 12400.0,
|
||||||
|
'married': 24800.0,
|
||||||
|
'head_of_household': 18650.0,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mo_sit_deduction"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_mo_dor" model="res.partner">
|
||||||
|
<field name="name">US Missouri - Department of Taxation - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_mo_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Missouri - Department of Taxation - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_mo_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US MO Missouri State Unemployment</field>
|
||||||
|
<field name="code">ER_US_MO_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_mo_suta_wage_base', rate='us_mo_suta_rate', state_code='MO')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_mo_suta_wage_base', rate='us_mo_suta_rate', state_code='MO')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mo_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_mo_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US MO Missouri State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_MO_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = mo_missouri_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = mo_missouri_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mo_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
139
l10n_us_hr_payroll/data/state/ms_mississippi.xml
Normal file
139
l10n_us_hr_payroll/data/state/ms_mississippi.xml
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_ms_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MS Mississippi SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ms_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ms_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">14000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ms_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ms_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">14000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ms_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_ms_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MS Mississippi SUTA Rate</field>
|
||||||
|
<field name="code">us_ms_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ms_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.2</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ms_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ms_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.2</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ms_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ms_sit_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MS Mississippi SIT Rate Table</field>
|
||||||
|
<field name="code">us_ms_sit_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ms_sit_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">[
|
||||||
|
( 10000.00, 290.0, 0.05),
|
||||||
|
( 5000.00, 90.0, 0.04),
|
||||||
|
( 2000.00, 0.0, 0.03),
|
||||||
|
]</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ms_sit_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://www.dor.ms.gov/Documents/Computer%20Payroll%20Flowchart.pdf -->
|
||||||
|
<!-- Table D. -->
|
||||||
|
<record id="rule_parameter_us_ms_sit_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">[
|
||||||
|
( 10000.00, 260.0, 0.05),
|
||||||
|
( 5000.00, 60.0, 0.04),
|
||||||
|
( 3000.00, 0.0, 0.03),
|
||||||
|
]</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ms_sit_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ms_sit_deduction" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MS Mississippi SIT Deduction</field>
|
||||||
|
<field name="code">us_ms_sit_deduction</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ms_sit_deduction_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': 2300.0,
|
||||||
|
'head_of_household': 3400.0,
|
||||||
|
'married_dual': 2300.0,
|
||||||
|
'married': 4600.0,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ms_sit_deduction"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://www.dor.ms.gov/Documents/Computer%20Payroll%20Flowchart.pdf -->
|
||||||
|
<!-- Table C. -->
|
||||||
|
<record id="rule_parameter_us_ms_sit_deduction_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': 2300.0,
|
||||||
|
'head_of_household': 3400.0,
|
||||||
|
'married_dual': 2300.0,
|
||||||
|
'married': 4600.0,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ms_sit_deduction"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_ms_dor" model="res.partner">
|
||||||
|
<field name="name">US Mississippi - Department of Employment Security (Unemployment)</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ms_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Mississippi - Mississippi Department of Revenue (Income Tax)</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ms_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US MS Mississippi State Unemployment</field>
|
||||||
|
<field name="code">ER_US_MS_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ms_suta_wage_base', rate='us_ms_suta_rate', state_code='MS')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ms_suta_wage_base', rate='us_ms_suta_rate', state_code='MS')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ms_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_ms_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US MS Mississippi State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_MS_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ms_mississippi_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ms_mississippi_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ms_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
227
l10n_us_hr_payroll/data/state/mt_montana.xml
Normal file
227
l10n_us_hr_payroll/data/state/mt_montana.xml
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_mt_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MT Montana SUTA Wage Base</field>
|
||||||
|
<field name="code">us_mt_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mt_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">33000.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mt_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mt_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">34100.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mt_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_mt_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MT Montana SUTA Rate (UI)</field>
|
||||||
|
<field name="code">us_mt_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mt_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.18</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mt_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mt_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.18</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mt_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_mt_suta_aft_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MT Montana SUTA Administrative Fund Tax Rate</field>
|
||||||
|
<field name="code">us_mt_suta_aft_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mt_suta_aft_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.13</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mt_suta_aft_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mt_suta_aft_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.13</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mt_suta_aft_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_mt_sit_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MT Montana SIT Rate Table</field>
|
||||||
|
<field name="code">us_mt_sit_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mt_sit_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': (
|
||||||
|
( 135.00, 0.0, 1.80),
|
||||||
|
( 288.00, 2.0, 4.40),
|
||||||
|
( 2308.00, 9.0, 6.00),
|
||||||
|
( 'inf', 130.0, 6.60),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 269.00, 0.0, 1.80),
|
||||||
|
( 577.00, 5.0, 4.40),
|
||||||
|
( 4615.00, 18.0, 6.00),
|
||||||
|
( 'inf', 261.0, 6.60),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 292.00, 0.0, 1.80),
|
||||||
|
( 625.00, 5.0, 4.40),
|
||||||
|
( 5000.00, 20.0, 6.00),
|
||||||
|
( 'inf', 282.0, 6.60),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 583.00, 0.0, 1.80),
|
||||||
|
( 1250.00, 11.0, 4.40),
|
||||||
|
( 10000.00, 40.0, 6.00),
|
||||||
|
( 'inf', 565.0, 6.60),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 7000.00, 0.0, 1.80),
|
||||||
|
( 15000.00, 126.0, 4.40),
|
||||||
|
( 120000.00, 478.0, 6.00),
|
||||||
|
( 'inf', 6778.0, 6.60),
|
||||||
|
),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mt_sit_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://app.mt.gov/myrevenue/Endpoint/DownloadPdf?yearId=705 -->
|
||||||
|
<!-- Table Montana Withholding Tax Formula for Computerized Payroll Systems -->
|
||||||
|
<record id="rule_parameter_us_mt_sit_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': (
|
||||||
|
( 135.00, 0.0, 1.80),
|
||||||
|
( 288.00, 2.0, 4.40),
|
||||||
|
( 2308.00, 9.0, 6.00),
|
||||||
|
( 'inf', 130.0, 6.60),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 269.00, 0.0, 1.80),
|
||||||
|
( 577.00, 5.0, 4.40),
|
||||||
|
( 4615.00, 18.0, 6.00),
|
||||||
|
( 'inf', 261.0, 6.60),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 292.00, 0.0, 1.80),
|
||||||
|
( 625.00, 5.0, 4.40),
|
||||||
|
( 5000.00, 20.0, 6.00),
|
||||||
|
( 'inf', 282.0, 6.60),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 583.00, 0.0, 1.80),
|
||||||
|
( 1250.00, 11.0, 4.40),
|
||||||
|
( 10000.00, 40.0, 6.00),
|
||||||
|
( 'inf', 565.0, 6.60),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 7000.00, 0.0, 1.80),
|
||||||
|
( 15000.00, 126.0, 4.40),
|
||||||
|
( 120000.00, 478.0, 6.00),
|
||||||
|
( 'inf', 6778.0, 6.60),
|
||||||
|
),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mt_sit_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_mt_sit_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US MT Montana SIT Exemption Rate Table</field>
|
||||||
|
<field name="code">us_mt_sit_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mt_sit_exemption_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': 37.0,
|
||||||
|
'bi-weekly': 73.0,
|
||||||
|
'semi-monthly': 79.0,
|
||||||
|
'monthly': 158.0,
|
||||||
|
'annually': 1900.0,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mt_sit_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://app.mt.gov/myrevenue/Endpoint/DownloadPdf?yearId=705 -->
|
||||||
|
<!-- Table Montana Withholding Tax Formula for Computerized Payroll Systems -->
|
||||||
|
<record id="rule_parameter_us_mt_sit_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': 37.0,
|
||||||
|
'bi-weekly': 73.0,
|
||||||
|
'semi-monthly': 79.0,
|
||||||
|
'monthly': 158.0,
|
||||||
|
'annually': 1900.0,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_mt_sit_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_mt_dor" model="res.partner">
|
||||||
|
<field name="name">US Montana - Department of Labor & Industries</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_mt_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Montana - Department of Revenue - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_mt_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US MT Montana State Unemployment (UI-5)</field>
|
||||||
|
<field name="code">ER_US_MT_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_mt_suta_wage_base', rate='us_mt_suta_rate', state_code='MT')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_mt_suta_wage_base', rate='us_mt_suta_rate', state_code='MT')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mt_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_er_us_mt_suta_aft" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="451"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US MT Montana State Unemployment Administrative Fund Tax (AFT) (UI-5)</field>
|
||||||
|
<field name="code">ER_US_MT_SUTA_AFT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_mt_suta_wage_base', rate='us_mt_suta_aft_rate', state_code='MT')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_mt_suta_wage_base', rate='us_mt_suta_aft_rate', state_code='MT')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mt_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_mt_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US MT Montana State Income Tax Withholding (MW-3)</field>
|
||||||
|
<field name="code">EE_US_MT_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = mt_montana_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = mt_montana_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mt_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
113
l10n_us_hr_payroll/data/state/nc_northcarolina.xml
Normal file
113
l10n_us_hr_payroll/data/state/nc_northcarolina.xml
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_nc_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NC North Carolina SUTA Wage Base</field>
|
||||||
|
<field name="code">us_nc_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nc_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">24300.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nc_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_nc_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">25200.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nc_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_nc_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NC North Carolina SUTA Rate</field>
|
||||||
|
<field name="code">us_nc_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nc_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nc_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_nc_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nc_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_nc_sit_allowance_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NC North Carolina Allowance Rate</field>
|
||||||
|
<field name="code">us_nc_sit_allowance_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<!-- https://files.nc.gov/ncdor/documents/files/NC-30_book_Web_1-16-19_v4_Final.pdf -->
|
||||||
|
<!-- Allowance Table Page 19. + SD For single or married + SD for Head of household (SD Page. 16-18)-->
|
||||||
|
<record id="rule_parameter_us_nc_sit_allowance_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': {'allowance': 48.08, 'standard_deduction': 192.31, 'standard_deduction_hh': 288.46},
|
||||||
|
'bi-weekly': {'allowance': 96.15, 'standard_deduction': 384.62, 'standard_deduction_hh': 576.92},
|
||||||
|
'semi-monthly': {'allowance': 104.17, 'standard_deduction': 416.67, 'standard_deduction_hh': 625.00},
|
||||||
|
'monthly': {'allowance': 208.33, 'standard_deduction': 833.33, 'standard_deduction_hh': 1250.00},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nc_sit_allowance_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- https://files.nc.gov/ncdor/documents/files/2020-NC-30_Final.pdf -->
|
||||||
|
<!-- Allowance Table Page 19. + SD For single or married + SD for Head of household (SD Page. 16-18)-->
|
||||||
|
<record id="rule_parameter_us_nc_sit_allowance_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': {'allowance': 48.08, 'standard_deduction': 206.73, 'standard_deduction_hh': 310.10},
|
||||||
|
'bi-weekly': {'allowance': 96.15, 'standard_deduction': 413.46, 'standard_deduction_hh': 620.19},
|
||||||
|
'semi-monthly': {'allowance': 104.17, 'standard_deduction': 447.92, 'standard_deduction_hh': 671.88},
|
||||||
|
'monthly': {'allowance': 208.33, 'standard_deduction': 895.83, 'standard_deduction_hh': 1343.75},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nc_sit_allowance_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_nc_dor" model="res.partner">
|
||||||
|
<field name="name">US North Carolina - Department of Taxation - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_nc_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US North Carolina - Department of Taxation - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_nc_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US NC North Carolina State Unemployment</field>
|
||||||
|
<field name="code">ER_US_NC_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_nc_suta_wage_base', rate='us_nc_suta_rate', state_code='NC')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_nc_suta_wage_base', rate='us_nc_suta_rate', state_code='NC')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nc_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_nc_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US NC North Carolina State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_NC_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = nc_northcarolina_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = nc_northcarolina_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nc_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
280
l10n_us_hr_payroll/data/state/nd_north_dakota.xml
Normal file
280
l10n_us_hr_payroll/data/state/nd_north_dakota.xml
Normal file
@@ -0,0 +1,280 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_nd_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US ND North Dakota SUTA Wage Base</field>
|
||||||
|
<field name="code">us_nd_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nd_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">37900.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nd_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_nd_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US ND North Dakota SUTA Rate</field>
|
||||||
|
<field name="code">us_nd_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nd_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.02</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nd_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- Table based on https://www.nd.gov/tax/data/upfiles/media/rates-and-instructions.pdf?20191208155535 -->
|
||||||
|
<record id="rule_parameter_us_nd_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US ND North Dakota SIT Tax Rate</field>
|
||||||
|
<field name="code">us_nd_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nd_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly': (
|
||||||
|
( 119, 0.00, 0.00),
|
||||||
|
( 891, 0.00, 1.10),
|
||||||
|
( 1988, 8.49, 2.04),
|
||||||
|
( 4016, 30.87, 2.27),
|
||||||
|
( 8592, 76.91, 2.64),
|
||||||
|
('inf', 197.71, 2.90),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 238, 0.00, 0.00),
|
||||||
|
( 1782, 0.00, 1.10),
|
||||||
|
( 3975, 16.98, 2.04),
|
||||||
|
( 8033, 61.72, 2.27),
|
||||||
|
( 17185, 153.84, 2.64),
|
||||||
|
( 'inf', 395.45, 2.90),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 258, 0.00, 0.00),
|
||||||
|
( 1930, 0.00, 1.10),
|
||||||
|
( 4306, 18.39, 2.04),
|
||||||
|
( 8702, 66.86, 2.27),
|
||||||
|
( 18617, 166.65, 2.64),
|
||||||
|
( 'inf', 428.41, 2.90),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 517, 0.00, 0.00),
|
||||||
|
( 3860, 0.00, 1.10),
|
||||||
|
( 8613, 36.77, 2.04),
|
||||||
|
( 17404, 133.73, 2.27),
|
||||||
|
( 37233, 333.29, 2.64),
|
||||||
|
( 'inf', 856.78, 2.90),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 1550, 0.00, 0.00),
|
||||||
|
( 11581, 0.00, 1.10),
|
||||||
|
( 25838, 110.34, 2.04),
|
||||||
|
( 52213, 401.18, 2.27),
|
||||||
|
( 111700, 999.90, 2.64),
|
||||||
|
( 'inf', 2570.35, 2.90),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 3100, 0.00, 0.00),
|
||||||
|
( 23163, 0.00, 1.10),
|
||||||
|
( 51675, 220.69, 2.04),
|
||||||
|
( 104425, 802.34, 2.27),
|
||||||
|
( 223400, 1999.76, 2.64),
|
||||||
|
( 'inf', 5140.70, 2.90),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 6200, 0.00, 0.00),
|
||||||
|
( 46325, 0.00, 1.10),
|
||||||
|
( 103350, 441.38, 2.04),
|
||||||
|
( 208850, 1604.69, 2.27),
|
||||||
|
( 446800, 3999.54, 2.64),
|
||||||
|
( 'inf', 10281.42, 2.90),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': (
|
||||||
|
( 238, 0.00, 0.00),
|
||||||
|
( 883, 0.00, 1.10),
|
||||||
|
( 1796, 7.10, 2.04),
|
||||||
|
( 2611, 25.72, 2.27),
|
||||||
|
( 4475, 44.22, 2.64),
|
||||||
|
('inf', 93.43, 2.90),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 477, 0.00, 0.00),
|
||||||
|
( 1766, 0.00, 1.10),
|
||||||
|
( 3591, 14.18, 2.04),
|
||||||
|
( 5221, 51.41, 2.27),
|
||||||
|
( 8950, 88.41, 2.64),
|
||||||
|
( 'inf', 186.86, 2.90),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 517, 0.00, 0.00),
|
||||||
|
( 1914, 0.00, 1.10),
|
||||||
|
( 3891, 15.37, 2.04),
|
||||||
|
( 5656, 55.70, 2.27),
|
||||||
|
( 9696, 95.76, 2.64),
|
||||||
|
( 'inf', 202.42, 2.90),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 1033, 0.00, 0.00),
|
||||||
|
( 3827, 0.00, 1.10),
|
||||||
|
( 7781, 30.73, 2.04),
|
||||||
|
( 11313, 111.40, 2.27),
|
||||||
|
( 19392, 191.57, 2.64),
|
||||||
|
( 'inf', 404.86, 2.90),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 3100, 0.00, 0.00),
|
||||||
|
( 11481, 0.00, 1.10),
|
||||||
|
( 23344, 92.19, 2.04),
|
||||||
|
( 33938, 334.20, 2.27),
|
||||||
|
( 58175, 574.68, 2.64),
|
||||||
|
( 'inf', 1214.54, 2.90),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 6200, 0.00, 0.00),
|
||||||
|
( 22963, 0.00, 1.10),
|
||||||
|
( 46688, 184.39, 2.04),
|
||||||
|
( 67875, 668.38, 2.27),
|
||||||
|
( 116350, 1149.33, 2.64),
|
||||||
|
( 'inf', 2429.07, 2.90),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 12400, 0.00, 0.00),
|
||||||
|
( 45925, 0.00, 1.10),
|
||||||
|
( 93375, 368.78, 2.04),
|
||||||
|
( 135750, 1336.76, 2.27),
|
||||||
|
( 232700, 2298.67, 2.64),
|
||||||
|
( 'inf', 4858.15, 2.90),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'head_household':{
|
||||||
|
'weekly': (
|
||||||
|
( 119, 0.00, 0.00),
|
||||||
|
( 891, 0.00, 1.10),
|
||||||
|
( 1988, 8.49, 2.04),
|
||||||
|
( 4016, 30.87, 2.27),
|
||||||
|
( 8592, 76.91, 2.64),
|
||||||
|
('inf', 197.71, 2.90),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 238, 0.00, 0.00),
|
||||||
|
( 1782, 0.00, 1.10),
|
||||||
|
( 3975, 16.98, 2.04),
|
||||||
|
( 8033, 61.72, 2.27),
|
||||||
|
( 17185, 153.84, 2.64),
|
||||||
|
( 'inf', 395.45, 2.90),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 258, 0.00, 0.00),
|
||||||
|
( 1930, 0.00, 1.10),
|
||||||
|
( 4306, 18.39, 2.04),
|
||||||
|
( 8702, 66.86, 2.27),
|
||||||
|
( 18617, 166.65, 2.64),
|
||||||
|
( 'inf', 428.41, 2.90),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 517, 0.00, 0.00),
|
||||||
|
( 3860, 0.00, 1.10),
|
||||||
|
( 8613, 36.77, 2.04),
|
||||||
|
( 17404, 133.73, 2.27),
|
||||||
|
( 37233, 333.29, 2.64),
|
||||||
|
( 'inf', 856.78, 2.90),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 1550, 0.00, 0.00),
|
||||||
|
( 11581, 0.00, 1.10),
|
||||||
|
( 25838, 110.34, 2.04),
|
||||||
|
( 52213, 401.18, 2.27),
|
||||||
|
( 111700, 999.90, 2.64),
|
||||||
|
( 'inf', 2570.35, 2.90),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 3100, 0.00, 0.00),
|
||||||
|
( 23163, 0.00, 1.10),
|
||||||
|
( 51675, 220.69, 2.04),
|
||||||
|
( 104425, 802.34, 2.27),
|
||||||
|
( 223400, 1999.76, 2.64),
|
||||||
|
( 'inf', 5140.70, 2.90),
|
||||||
|
),
|
||||||
|
'annual': (
|
||||||
|
( 6200, 0.00, 0.00),
|
||||||
|
( 46325, 0.00, 1.10),
|
||||||
|
( 103350, 441.38, 2.04),
|
||||||
|
( 208850, 1604.69, 2.27),
|
||||||
|
( 446800, 3999.54, 2.64),
|
||||||
|
( 'inf', 10281.42, 2.90),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nd_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_nd_sit_allowances_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US ND North Dakota Allowances Rate</field>
|
||||||
|
<field name="code">us_nd_sit_allowances_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nd_sit_allowances_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly' : 83.00,
|
||||||
|
'bi-weekly' : 165.00,
|
||||||
|
'semi-monthly': 179.00,
|
||||||
|
'monthly' : 358.00,
|
||||||
|
'quarterly' : 1075.00,
|
||||||
|
'semi-annual': 2150.00,
|
||||||
|
'annually': 4300.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nd_sit_allowances_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_nd_dor" model="res.partner">
|
||||||
|
<field name="name">US North Dakota - Office of State Tax Commissioner - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_nd_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US North Dakota - Taxpayer Access Point - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_nd_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US ND North Dakota State Unemployment</field>
|
||||||
|
<field name="code">ER_US_ND_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_nd_suta_wage_base', rate='us_nd_suta_rate', state_code='ND')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_nd_suta_wage_base', rate='us_nd_suta_rate', state_code='ND')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nd_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_nd_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US ND North Dakota State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_ND_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = nd_north_dakota_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = nd_north_dakota_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nd_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
237
l10n_us_hr_payroll/data/state/ne_nebraska.xml
Normal file
237
l10n_us_hr_payroll/data/state/ne_nebraska.xml
Normal file
@@ -0,0 +1,237 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_ne_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NE Nebraska SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ne_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ne_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">9000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ne_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_ne_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NE Nebraska SUTA Rate</field>
|
||||||
|
<field name="code">us_ne_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ne_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.25</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ne_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- Table based on Percentage method from https://revenue.nebraska.gov/sites/revenue.nebraska.gov/files/doc/business/2017cir-en_whole.pdf -->
|
||||||
|
<record id="rule_parameter_us_ne_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NE Nebraska SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ne_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ne_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly': (
|
||||||
|
( 57, 0.00, 0.00),
|
||||||
|
( 105, 0.00, 2.26),
|
||||||
|
( 342, 1.08, 3.22),
|
||||||
|
( 496, 8.71, 4.91),
|
||||||
|
( 629, 16.27, 6.20),
|
||||||
|
( 1182, 24.52, 6.59),
|
||||||
|
('inf', 60.96, 6.95),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 114, 0.00, 0.00),
|
||||||
|
( 211, 0.00, 2.26),
|
||||||
|
( 684, 2.19, 3.22),
|
||||||
|
( 992, 17.42, 4.91),
|
||||||
|
( 1259, 32.54, 6.20),
|
||||||
|
( 2364, 49.09, 6.59),
|
||||||
|
('inf', 121.91, 6.95),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 124, 0.00, 0.00),
|
||||||
|
( 228, 0.00, 2.26),
|
||||||
|
( 741, 2.35, 3.22),
|
||||||
|
( 1074, 18.87, 4.91),
|
||||||
|
( 1364, 35.22, 6.20),
|
||||||
|
( 2561, 53.20, 6.59),
|
||||||
|
('inf', 132.08, 6.95),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 248, 0.00, 0.00),
|
||||||
|
( 457, 0.00, 2.26),
|
||||||
|
( 1483, 4.72, 3.22),
|
||||||
|
( 2148, 37.76, 4.91),
|
||||||
|
( 2728, 70.41, 6.20),
|
||||||
|
( 5123, 106.37, 6.59),
|
||||||
|
('inf', 264.20, 6.95),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 744, 0.00, 0.00),
|
||||||
|
( 1370, 0.00, 2.26),
|
||||||
|
( 4448, 14.15, 3.22),
|
||||||
|
( 6445, 113.26, 4.91),
|
||||||
|
( 8183, 211.31, 6.20),
|
||||||
|
( 15368, 319.07, 6.59),
|
||||||
|
( 'inf', 792.56, 6.95),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 1488, 0.00, 0.00),
|
||||||
|
( 2740, 0.00, 2.26),
|
||||||
|
( 8895, 28.30, 3.22),
|
||||||
|
( 12890, 226.49, 4.91),
|
||||||
|
( 16365, 422.64, 6.20),
|
||||||
|
( 30735, 638.09, 6.59),
|
||||||
|
( 'inf', 1585.07, 6.95),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 2975, 0.00, 0.00),
|
||||||
|
( 5480, 0.00, 2.26),
|
||||||
|
( 17790, 56.61, 3.22),
|
||||||
|
( 25780, 452.99, 4.91),
|
||||||
|
( 32730, 845.30, 6.20),
|
||||||
|
( 61470, 1276.20, 6.59),
|
||||||
|
( 'inf', 3170.17, 6.95),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': (
|
||||||
|
( 137, 0.00, 0.00),
|
||||||
|
( 204, 0.00, 2.26),
|
||||||
|
( 508, 1.51, 3.22),
|
||||||
|
( 790, 11.30, 4.91),
|
||||||
|
( 981, 25.15, 6.20),
|
||||||
|
( 1300, 36.99, 6.59),
|
||||||
|
('inf', 58.01, 6.95),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 273, 0.00, 0.00),
|
||||||
|
( 408, 0.00, 2.26),
|
||||||
|
( 1016, 3.05, 3.22),
|
||||||
|
( 1581, 22.63, 4.91),
|
||||||
|
( 1961, 50.37, 6.20),
|
||||||
|
( 2601, 73.93, 6.59),
|
||||||
|
('inf', 116.11, 6.95),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 296, 0.00, 0.00),
|
||||||
|
( 442, 0.00, 2.26),
|
||||||
|
( 1101, 3.30, 3.22),
|
||||||
|
( 1713, 24.52, 4.91),
|
||||||
|
( 2125, 54.57, 6.20),
|
||||||
|
( 2818, 80.11, 6.59),
|
||||||
|
('inf', 125.78, 6.95),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 592, 0.00, 0.00),
|
||||||
|
( 884, 0.00, 2.26),
|
||||||
|
( 2202, 6.60, 3.22),
|
||||||
|
( 3425, 49.04, 4.91),
|
||||||
|
( 4249, 109.09, 6.20),
|
||||||
|
( 5635, 160.18, 6.59),
|
||||||
|
('inf', 251.52, 6.95),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 1775, 0.00, 0.00),
|
||||||
|
( 2653, 0.00, 2.26),
|
||||||
|
( 6605, 19.84, 3.22),
|
||||||
|
( 10275, 147.09, 4.91),
|
||||||
|
( 12748, 327.29, 6.20),
|
||||||
|
( 16905, 480.62, 6.59),
|
||||||
|
( 'inf', 754.57, 6.95),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 3550, 0.00, 0.00),
|
||||||
|
( 5305, 0.00, 2.26),
|
||||||
|
( 13210, 39.66, 3.22),
|
||||||
|
( 20550, 294.20, 4.91),
|
||||||
|
( 25495, 654.59, 6.20),
|
||||||
|
( 33810, 961.18, 6.59),
|
||||||
|
( 'inf', 1509.14, 6.95),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 7100, 0.00, 0.00),
|
||||||
|
( 10610, 0.00, 2.26),
|
||||||
|
( 26420, 79.33, 3.22),
|
||||||
|
( 41100, 588.41, 4.91),
|
||||||
|
( 50990, 1309.20, 6.20),
|
||||||
|
( 67620, 1992.38, 6.59),
|
||||||
|
( 'inf', 3018.30, 6.95),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ne_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ne_sit_allowances_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NE Nebraska Allowances Rate</field>
|
||||||
|
<field name="code">us_ne_sit_allowances_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ne_sit_allowances_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly' : 37.69,
|
||||||
|
'bi-weekly' : 75.38,
|
||||||
|
'semi-monthly': 81.67,
|
||||||
|
'monthly' : 163.33,
|
||||||
|
'quarterly' : 490.00,
|
||||||
|
'semi-annual': 980.00,
|
||||||
|
'annually': 1960.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ne_sit_allowances_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_ne_dor" model="res.partner">
|
||||||
|
<field name="name">US Nebraska - Nebraska Department of Labor - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ne_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Nebraska - Nebraska Department of Revenue - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ne_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US NE Nebraska State Unemployment</field>
|
||||||
|
<field name="code">ER_US_NE_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ne_suta_wage_base', rate='us_ne_suta_rate', state_code='NE')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ne_suta_wage_base', rate='us_ne_suta_rate', state_code='NE')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ne_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_ne_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US NE Nebraska State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_NE_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ne_nebraska_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ne_nebraska_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ne_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
51
l10n_us_hr_payroll/data/state/nh_new_hampshire.xml
Normal file
51
l10n_us_hr_payroll/data/state/nh_new_hampshire.xml
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_nh_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NH New Hampshire SUTA Wage Base</field>
|
||||||
|
<field name="code">us_nh_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nh_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">14000.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nh_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_nh_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NH New Hampshire SUTA Rate</field>
|
||||||
|
<field name="code">us_nh_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nh_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.2</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nh_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_nh_dor" model="res.partner">
|
||||||
|
<field name="name">US New Hampshire - Department of Employment Security - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_nh_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US NH New Hampshire State Unemployment</field>
|
||||||
|
<field name="code">ER_US_NH_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_nh_suta_wage_base', rate='us_nh_suta_rate', state_code='NH')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_nh_suta_wage_base', rate='us_nh_suta_rate', state_code='NH')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nh_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
1048
l10n_us_hr_payroll/data/state/nj_newjersey.xml
Normal file
1048
l10n_us_hr_payroll/data/state/nj_newjersey.xml
Normal file
File diff suppressed because it is too large
Load Diff
303
l10n_us_hr_payroll/data/state/nm_new_mexico.xml
Normal file
303
l10n_us_hr_payroll/data/state/nm_new_mexico.xml
Normal file
@@ -0,0 +1,303 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_nm_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NM New Mexico SUTA Wage Base</field>
|
||||||
|
<field name="code">us_nm_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nm_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">25800.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nm_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_nm_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NM New Mexico SUTA Rate</field>
|
||||||
|
<field name="code">us_nm_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nm_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nm_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_nm_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NM New Mexico SIT Tax Rate</field>
|
||||||
|
<field name="code">us_nm_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<!-- Table based on Percentage method from https://s3.amazonaws.com/realFile34821a95-73ca-43e7-b06d-fad20f5183fd/a9bf1098-533b-4a3d-806a-4bf6336af6e4?response-content-disposition=filename%3D%22FYI-104+-+New+Mexico+Withholding+Tax+-+Effective+January+1%2C+2020.pdf%22&response-content-type=application%2Fpdf&AWSAccessKeyId=AKIAJBI25DHBYGD7I7TA&Signature=OK0i%2F7YIRTdSEQHWAC2UY3ukZVI%3D&Expires=1597878297 -->
|
||||||
|
<record id="rule_parameter_us_nm_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly': (
|
||||||
|
( 119, 0.00, 0.0),
|
||||||
|
( 225, 0.00, 1.7),
|
||||||
|
( 331, 1.80, 3.2),
|
||||||
|
( 427, 5.18, 4.7),
|
||||||
|
( 619, 9.70, 4.9),
|
||||||
|
( 927, 19.13, 4.9),
|
||||||
|
( 1369, 34.20, 4.9),
|
||||||
|
('inf', 55.88, 4.9),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 238, 0.00, 0.0),
|
||||||
|
( 450, 0.00, 1.7),
|
||||||
|
( 662, 3.60, 3.2),
|
||||||
|
( 854, 10.37, 4.7),
|
||||||
|
( 1238, 19.40, 4.9),
|
||||||
|
( 1854, 38.25, 4.9),
|
||||||
|
( 2738, 68.40, 4.9),
|
||||||
|
('inf', 111.75, 4.9),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 258, 0.00, 0.0),
|
||||||
|
( 488, 0.00, 1.7),
|
||||||
|
( 717, 3.90, 3.2),
|
||||||
|
( 925, 11.23, 4.7),
|
||||||
|
( 1342, 21.02, 4.9),
|
||||||
|
( 2008, 41.44, 4.9),
|
||||||
|
( 2967, 74.10, 4.9),
|
||||||
|
('inf', 121.06, 4.9),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 517, 0.00, 0.0),
|
||||||
|
( 975, 0.00, 1.7),
|
||||||
|
( 1433, 7.79, 3.2),
|
||||||
|
( 1850, 22.46, 4.7),
|
||||||
|
( 2683, 42.04, 4.9),
|
||||||
|
( 4017, 82.88, 4.9),
|
||||||
|
( 5933, 148.21, 4.9),
|
||||||
|
('inf', 242.13, 4.9),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 1550, 0.00, 0.0),
|
||||||
|
( 2925, 0.00, 1.7),
|
||||||
|
( 4300, 23.38, 3.2),
|
||||||
|
( 5550, 67.38, 4.7),
|
||||||
|
( 8050, 126.13, 4.9),
|
||||||
|
( 12050, 248.63, 4.9),
|
||||||
|
( 17800, 444.63, 4.9),
|
||||||
|
( 'inf', 726.38, 4.9),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 3100, 0.00, 0.0),
|
||||||
|
( 5850, 0.00, 1.7),
|
||||||
|
( 8600, 46.75, 3.2),
|
||||||
|
(11100, 134.75, 4.7),
|
||||||
|
(16100, 252.25, 4.9),
|
||||||
|
(24100, 497.25, 4.9),
|
||||||
|
(35600, 889.25, 4.9),
|
||||||
|
('inf', 1452.75, 4.9),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 6200, 0.00, 0.0),
|
||||||
|
(11700, 0.00, 1.7),
|
||||||
|
(17200, 93.50, 3.2),
|
||||||
|
(22200, 269.50, 4.7),
|
||||||
|
(32200, 504.50, 4.9),
|
||||||
|
(48200, 994.50, 4.9),
|
||||||
|
(71200, 1778.50, 4.9),
|
||||||
|
('inf', 2905.50, 4.9),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': (
|
||||||
|
( 238, 0.00, 0.0),
|
||||||
|
( 392, 0.00, 1.7),
|
||||||
|
( 546, 2.62, 3.2),
|
||||||
|
( 700, 7.54, 4.7),
|
||||||
|
( 1008, 14.77, 4.9),
|
||||||
|
( 1469, 29.85, 4.9),
|
||||||
|
( 2162, 52.46, 4.9),
|
||||||
|
('inf', 86.38, 4.9),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 477, 0.00, 0.0),
|
||||||
|
( 785, 0.00, 1.7),
|
||||||
|
( 1092, 5.23, 3.2),
|
||||||
|
( 1400, 15.08, 4.7),
|
||||||
|
(2015, 29.54, 4.9),
|
||||||
|
( 2938, 59.69, 4.9),
|
||||||
|
( 4323, 104.92, 4.9),
|
||||||
|
('inf', 172.77, 4.9),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 517, 0.00, 0.0),
|
||||||
|
( 850, 0.00, 1.7),
|
||||||
|
( 1183, 5.67, 3.2),
|
||||||
|
( 1517, 16.33, 4.7),
|
||||||
|
( 2183, 32.00, 4.9),
|
||||||
|
( 3183, 64.67, 4.9),
|
||||||
|
( 4683, 113.67, 4.9),
|
||||||
|
('inf', 187.17, 4.9),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 1033, 0.00, 0.0),
|
||||||
|
( 1700, 0.00, 1.7),
|
||||||
|
( 2367, 11.33, 3.2),
|
||||||
|
( 3033, 32.67, 4.7),
|
||||||
|
( 4367, 64.00, 4.9),
|
||||||
|
( 6367, 129.33, 4.9),
|
||||||
|
( 9367, 227.33, 4.9),
|
||||||
|
('inf', 374.33, 4.9),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 3100, 0.00, 0.0),
|
||||||
|
( 5100, 0.00, 1.7),
|
||||||
|
( 7100, 34.00, 3.2),
|
||||||
|
( 9100, 98.00, 4.7),
|
||||||
|
(13100, 192.00, 4.9),
|
||||||
|
(19100, 388.00, 4.9),
|
||||||
|
(28100, 682.00, 4.9),
|
||||||
|
('inf', 1123.00, 4.9),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 6200, 0.00, 0.0),
|
||||||
|
(10200, 0.00, 1.7),
|
||||||
|
(14200, 68.00, 3.2),
|
||||||
|
(18200, 196.00, 4.7),
|
||||||
|
(26200, 384.00, 4.9),
|
||||||
|
(38200, 776.00, 4.9),
|
||||||
|
(56200, 1364.00, 4.9),
|
||||||
|
('inf', 2246.00, 4.9),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 12400, 0.00, 0.0),
|
||||||
|
( 20400, 0.00, 1.7),
|
||||||
|
( 28400, 136.00, 3.2),
|
||||||
|
( 36400, 392.00, 4.7),
|
||||||
|
( 52400, 768.00, 4.9),
|
||||||
|
( 76400, 1552.00, 4.9),
|
||||||
|
(112400, 2728.00, 4.9),
|
||||||
|
( 'inf', 4492.00, 4.9),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married_as_single': {
|
||||||
|
'weekly': (
|
||||||
|
( 179, 0.00, 0.0),
|
||||||
|
( 333, 0.00, 1.7),
|
||||||
|
( 487, 2.62, 3.2),
|
||||||
|
( 641, 7.54, 4.7),
|
||||||
|
( 949, 14.77, 4.9),
|
||||||
|
( 1410, 29.85, 4.9),
|
||||||
|
( 2102, 52.46, 4.9),
|
||||||
|
('inf', 86.38, 4.9),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 359, 0.00, 0.0),
|
||||||
|
( 666, 0.00, 1.7),
|
||||||
|
( 974, 5.23, 3.2),
|
||||||
|
( 1282, 15.08, 4.7),
|
||||||
|
( 1897, 29.54, 4.9),
|
||||||
|
( 2820, 59.69, 4.9),
|
||||||
|
( 4205, 104.92, 4.9),
|
||||||
|
('inf', 172.77, 4.9),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 389, 0.00, 0.0),
|
||||||
|
( 722, 0.00, 1.7),
|
||||||
|
( 1055, 5.67, 3.2),
|
||||||
|
( 1389, 16.33, 4.7),
|
||||||
|
( 2055, 32.00, 4.9),
|
||||||
|
( 3055, 64.67, 4.9),
|
||||||
|
( 4555, 113.67, 4.9),
|
||||||
|
('inf', 187.17, 4.9),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 777, 0.00, 0.0),
|
||||||
|
( 1444, 0.00, 1.7),
|
||||||
|
( 2110, 11.33, 3.2),
|
||||||
|
( 2777, 32.67, 4.7),
|
||||||
|
( 4110, 64.00, 4.9),
|
||||||
|
( 6110, 129.33, 4.9),
|
||||||
|
( 9110, 227.33, 4.9),
|
||||||
|
('inf', 374.33, 4.9),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 2331, 0.00, 0.0),
|
||||||
|
( 4331, 0.00, 1.7),
|
||||||
|
( 6331, 34.00, 3.2),
|
||||||
|
( 8331, 98.00, 4.7),
|
||||||
|
( 12331, 192.00, 4.9),
|
||||||
|
( 18331, 388.00, 4.9),
|
||||||
|
( 27331, 682.00, 4.9),
|
||||||
|
( 'inf', 1123.00, 4.9),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 4663, 0.00, 0.0),
|
||||||
|
( 8663, 0.00, 1.7),
|
||||||
|
( 12663, 68.00, 3.2),
|
||||||
|
( 16663, 196.00, 4.7),
|
||||||
|
( 24663, 384.00, 4.9),
|
||||||
|
( 36663, 776.00, 4.9),
|
||||||
|
( 54663, 1364.00, 4.9),
|
||||||
|
( 'inf', 2246.00, 4.9),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 9325, 0.00, 0.0),
|
||||||
|
( 17325, 0.00, 1.7),
|
||||||
|
( 25325, 136.00, 3.2),
|
||||||
|
( 33325, 392.00, 4.7),
|
||||||
|
( 49325, 768.00, 4.9),
|
||||||
|
( 73325, 1552.00, 4.9),
|
||||||
|
(109325, 2728.00, 4.9),
|
||||||
|
( 'inf', 4492.00, 4.9),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nm_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_nm_dor" model="res.partner">
|
||||||
|
<field name="name">US New Mexico - Department of Workforce Solutions - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_nm_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US New Mexico - Department of Taxation and Revenue - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_nm_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US NM New Mexico State Unemployment</field>
|
||||||
|
<field name="code">ER_US_NM_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_nm_suta_wage_base', rate='us_nm_suta_rate', state_code='NM')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_nm_suta_wage_base', rate='us_nm_suta_rate', state_code='NM')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nm_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_nm_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US NM New Mexico State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_NM_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = nm_new_mexico_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = nm_new_mexico_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nm_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
53
l10n_us_hr_payroll/data/state/nv_nevada.xml
Normal file
53
l10n_us_hr_payroll/data/state/nv_nevada.xml
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_nv_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NV Nevada SUTA Wage Base</field>
|
||||||
|
<field name="code">us_nv_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nv_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">32500.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nv_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_nv_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NV Nevada SUTA Rate</field>
|
||||||
|
<field name="code">us_nv_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nv_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.95</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_nv_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_nv_dor" model="res.partner">
|
||||||
|
<field name="name">US Nevada - Department of Employment, Training, and Rehabilitation, Employment Security Division - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_nv_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US NV Nevada State Unemployment (RT-6)</field>
|
||||||
|
<field name="code">ER_US_NV_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_nv_suta_wage_base', rate='us_nv_suta_rate', state_code='NV')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_nv_suta_wage_base', rate='us_nv_suta_rate', state_code='NV')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nv_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
429
l10n_us_hr_payroll/data/state/ny_new_york.xml
Normal file
429
l10n_us_hr_payroll/data/state/ny_new_york.xml
Normal file
@@ -0,0 +1,429 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_ny_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NY New York SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ny_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ny_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">11400.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ny_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ny_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">11600.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ny_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_ny_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NY New York SUTA Rate</field>
|
||||||
|
<field name="code">us_ny_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ny_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.5</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ny_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ny_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.5</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ny_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ny_suta_rsf_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NY New York SUTA RSF Rate</field>
|
||||||
|
<field name="code">us_ny_suta_rsf_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ny_suta_rsf_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.075</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ny_suta_rsf_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ny_suta_rsf_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.075</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ny_suta_rsf_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ny_suta_mctmt_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NY New York SUTA MCTMT Rate</field>
|
||||||
|
<field name="code">us_ny_suta_mctmt_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ny_suta_mctmt_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ny_suta_mctmt_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ny_suta_mctmt_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ny_suta_mctmt_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ny_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NY New York SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ny_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ny_sit_tax_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly': ((163, 0.0400, 0.0), (225, 0.0450, 6.54), (267, 0.0525, 9.31), (412, 0.0590, 11.54), (1551, 0.0633, 20.04), (1862, 0.0657, 92.17), (2070, 0.0758, 112.58), (3032, 0.0808, 128.38), (4142, 0.0707, 206.08), (5104, 0.0856, 284.60), (20722, 0.0735, 366.90), (21684, 0.5208, 1514.85), ('inf', 0.0962, 2015.62)),
|
||||||
|
'bi-weekly': ((327, 0.0400, 0.0), (450, 0.0450, 13.08), (535, 0.0525, 18.62), (823, 0.0590, 23.08), (3102, 0.0633, 40.08), (3723, 0.0657, 184.35), (4140, 0.0758, 225.15), (6063, 0.0808, 256.77), (8285, 0.0707, 412.15), (10208, 0.0856, 569.19), (41444, 0.0735, 733.81), (43367, 0.5208, 3029.69), ('inf', 0.0962, 4021.23)),
|
||||||
|
'semi-monthly': ((354, 0.0400, 0.0), (488, 0.0450, 14.17), (579, 0.0525, 20.17), (892, 0.0590, 25.00), (3360, 0.0633, 43.42), (4033, 0.0657, 199.71), (4485, 0.0758, 243.92), (6569, 0.0808, 278.17), (8975, 0.0707, 446.50), (11058, 0.0856, 616.63), (44898, 0.0735, 794.96), (46981, 0.5208, 3282.17), ('inf', 0.0962, 4367.17)),
|
||||||
|
'monthly': ((708, 0.0400, 0.0), (975, 0.0450, 28.33), (1158, 0.0525, 40.33), (1783, 0.0590, 50.00), (6721, 0.0633, 86.83), (8067, 0.0657, 399.42), (8971, 0.0758, 487.83), (13138, 0.0808, 556.33), (17950, 0.0707, 893.00), (22117, 0.0856, 1233.25), (89796, 0.0735, 1589.92), (93963, 0.5208, 6564.33), ('inf', 0.0962, 8734.33)),
|
||||||
|
'annually': ((8500, 0.0400, 0.0), (11700, 0.0450, 340.00), (13900, 0.0525, 484.00), (21400, 0.0590, 600.00), (80650, 0.0633, 1042.00), (96800, 0.0657, 4793.00), (107650, 0.0758, 5854.00), (157650, 0.0808, 6676.00), (215400, 0.0707, 10716.00), (265400, 0.0856, 14799.00), (1077550, 0.0735, 19079.00), (1127550, 0.5208, 78772.00), ('inf', 0.0962, 104812.00)),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': ((163, 0.0400, 0.0), (225, 0.0450, 6.54), (267, 0.0525, 9.31), (412, 0.0590, 11.54), (1551, 0.0633, 20.04), (1862, 0.0657, 92.17), (2070, 0.0783, 112.58), (3032, 0.0833, 128.90), (4068, 0.0785, 209.00), (6215, 0.0707, 290.37), (7177, 0.0916, 442.17), (20722, 0.0735, 530.25), (41449, 0.0765, 1525.83), (42411, 0.9454, 3111.42), ('inf', 0.0962, 4020.46)),
|
||||||
|
'bi-weekly': ((327, 0.0400, 0.0), (450, 0.0450, 13.08), (535, 0.0525, 18.62), (823, 0.0590, 23.08), (3102, 0.0633, 40.08), (3723, 0.0657, 184.35), (4140, 0.0783, 225.15), (6063, 0.0833, 257.81), (8137, 0.0785, 418.00), (12431, 0.0707, 580.73), (14354, 0.0916, 884.35), (41444, 0.0735, 1060.50), (82898, 0.0765, 3051.65), (84821, 0.9454, 6222.85), ('inf', 0.0962, 8040.92)),
|
||||||
|
'semi-monthly': ((354, 0.0400, 0.0), (488, 0.0450, 14.17), (579, 0.0525, 20.17), (892, 0.0590, 25.00), (3360, 0.0633, 43.42), (4033, 0.0657, 199.71), (4485, 0.0783, 243.92), (6569, 0.0833, 279.29), (8815, 0.0785, 452.83), (13476, 0.0707, 629.13), (15550, 0.0916, 958.04), (44898, 0.0735, 1148.88), (89806, 0.0765, 3305.96), (91890, 0.9454, 6741.42), ('inf', 0.0962, 8711.00)),
|
||||||
|
'monthly': ((708, 0.0400, 0.0), (975, 0.0450, 28.33), (1158, 0.0525, 40.33), (1783, 0.0590, 50.00), (6721, 0.0633, 86.83), (8067, 0.0657, 399.42), (8971, 0.0783, 487.83), (13138, 0.0833, 558.58), (17629, 0.0785, 905.67), (26933, 0.0707, 1258.25), (31100, 0.0916, 1916.08), (89796, 0.0735, 2297.75), (179613, 0.0765, 6611.92), (183779, 0.9454, 13482.83), ('inf', 0.0962, 17422.00)),
|
||||||
|
'annually': ((8500, 0.0400, 0.0), (11700, 0.0450, 340.00), (13900, 0.0525, 484.00), (21400, 0.0590, 600.00), (80650, 0.0633, 1042.00), (96800, 0.0657, 4793.00), (107650, 0.0783, 5854.00), (157650, 0.0833, 6703.00), (211550, 0.0785, 10868.00), (323200, 0.0707, 15099.00), (373200, 0.0916, 22993.00), (1077550, 0.0735, 27573.00), (2155350, 0.0765, 79343.00), (2205350, 0.9454, 161794.00), ('inf', 0.0962, 209064.00)),
|
||||||
|
}
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ny_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ny_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly': (
|
||||||
|
( 163, 0.0400, 0.00),
|
||||||
|
( 225, 0.0450, 6.54),
|
||||||
|
( 267, 0.0525, 9.31),
|
||||||
|
( 412, 0.0590, 11.54),
|
||||||
|
( 1551, 0.0609, 20.04),
|
||||||
|
( 1862, 0.0641, 89.42),
|
||||||
|
( 2070, 0.0745, 109.35),
|
||||||
|
( 3032, 0.0795, 124.88),
|
||||||
|
( 4142, 0.0691, 201.33),
|
||||||
|
( 5104, 0.0925, 278.06),
|
||||||
|
(20722, 0.0735, 367.00),
|
||||||
|
(21684, 0.5208, 1514.94),
|
||||||
|
('inf', 0.0962, 2015.71),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 327, 0.0400, 0.00),
|
||||||
|
( 450, 0.0450, 13.08),
|
||||||
|
( 535, 0.0525, 18.62),
|
||||||
|
( 823, 0.0590, 23.08),
|
||||||
|
( 3102, 0.0609, 40.08),
|
||||||
|
( 3723, 0.0641, 178.85),
|
||||||
|
( 4140, 0.0745, 218.69),
|
||||||
|
( 6063, 0.0795, 249.77),
|
||||||
|
( 8285, 0.0691, 402.65),
|
||||||
|
(10208, 0.0925, 556.12),
|
||||||
|
(41444, 0.0735, 734.00),
|
||||||
|
(43367, 0.5208, 3029.88),
|
||||||
|
('inf', 0.0962, 4031.42),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 354, 0.0400, 0.00),
|
||||||
|
( 488, 0.0450, 14.17),
|
||||||
|
( 579, 0.0525, 20.17),
|
||||||
|
( 892, 0.0590, 25.00),
|
||||||
|
( 3360, 0.0609, 43.42),
|
||||||
|
( 4033, 0.0641, 193.75),
|
||||||
|
( 4485, 0.0745, 236.92),
|
||||||
|
( 6569, 0.0795, 270.58),
|
||||||
|
( 8975, 0.0691, 436.21),
|
||||||
|
(11058, 0.0925, 602.46),
|
||||||
|
(44898, 0.0735, 795.17),
|
||||||
|
(46981, 0.5208, 3282.38),
|
||||||
|
('inf', 0.0962, 4367.38),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 708, 0.0400, 0.00),
|
||||||
|
( 975, 0.0450, 28.33),
|
||||||
|
( 1158, 0.0525, 40.33),
|
||||||
|
( 1783, 0.0590, 50.00),
|
||||||
|
( 6721, 0.0609, 86.83),
|
||||||
|
( 8067, 0.0641, 387.50),
|
||||||
|
( 8971, 0.0745, 473.83),
|
||||||
|
(13138, 0.0795, 541.17),
|
||||||
|
(17950, 0.0691, 872.42),
|
||||||
|
(22117, 0.0925, 1204.92),
|
||||||
|
(89796, 0.0735, 1590.33),
|
||||||
|
(93963, 0.5208, 6564.75),
|
||||||
|
('inf', 0.0962, 8734.75),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 8500, 0.0400, 0.00),
|
||||||
|
( 11700, 0.0450, 340.00),
|
||||||
|
( 13900, 0.0525, 484.00),
|
||||||
|
( 21400, 0.0590, 600.00),
|
||||||
|
( 80650, 0.0609, 1042.00),
|
||||||
|
( 96800, 0.0641, 4650.00),
|
||||||
|
( 107650, 0.0745, 5686.00),
|
||||||
|
( 157650, 0.0795, 6494.00),
|
||||||
|
( 215400, 0.0691, 10469.00),
|
||||||
|
( 265400, 0.0925, 14459.00),
|
||||||
|
(1077550, 0.0735, 19084.00),
|
||||||
|
(1127550, 0.5208, 78777.00),
|
||||||
|
( 'inf', 0.0962, 104817.00),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': (
|
||||||
|
( 163, 0.0400, 0.00),
|
||||||
|
( 225, 0.0450, 6.54),
|
||||||
|
( 267, 0.0525, 9.31),
|
||||||
|
( 412, 0.0590, 11.54),
|
||||||
|
( 1551, 0.0609, 20.04),
|
||||||
|
( 1862, 0.0641, 89.42),
|
||||||
|
( 2070, 0.0746, 109.35),
|
||||||
|
( 3032, 0.0796, 124.90),
|
||||||
|
( 4068, 0.0794, 201.44),
|
||||||
|
( 6215, 0.0691, 283.75),
|
||||||
|
( 7177, 0.1019, 432.12),
|
||||||
|
(20722, 0.0735, 530.10),
|
||||||
|
(41449, 0.0765, 1525.65),
|
||||||
|
(42411, 0.9454, 3111.27),
|
||||||
|
('inf', 0.0962, 4020.31),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 327, 0.0400, 0.00),
|
||||||
|
( 450, 0.0450, 13.08),
|
||||||
|
( 535, 0.0525, 18.62),
|
||||||
|
( 823, 0.0590, 23.08),
|
||||||
|
( 3102, 0.0609, 40.08),
|
||||||
|
( 3723, 0.0641, 178.85),
|
||||||
|
( 4140, 0.0746, 218.69),
|
||||||
|
( 6063, 0.0796, 249.81),
|
||||||
|
( 8137, 0.0794, 402.88),
|
||||||
|
(12431, 0.0691, 567.50),
|
||||||
|
(14354, 0.1019, 864.23),
|
||||||
|
(41444, 0.0735, 1060.19),
|
||||||
|
(82898, 0.0765, 3051.31),
|
||||||
|
(84821, 0.9454, 6222.54),
|
||||||
|
('inf', 0.0962, 8040.62),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 354, 0.0400, 0.00),
|
||||||
|
( 488, 0.0450, 14.17),
|
||||||
|
( 579, 0.0525, 20.17),
|
||||||
|
( 892, 0.0590, 25.00),
|
||||||
|
( 3360, 0.0609, 43.42),
|
||||||
|
( 4033, 0.0641, 193.75),
|
||||||
|
( 4485, 0.0746, 236.92),
|
||||||
|
( 6569, 0.0796, 270.63),
|
||||||
|
( 8815, 0.0794, 436.46),
|
||||||
|
(13467, 0.0691, 614.79),
|
||||||
|
(15550, 0.1019, 936.25),
|
||||||
|
(44898, 0.0735, 1148.54),
|
||||||
|
(89806, 0.0765, 3305.58),
|
||||||
|
(91890, 0.9454, 6741.08),
|
||||||
|
('inf', 0.0962, 8710.67),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 708, 0.0400, 0.00),
|
||||||
|
( 975, 0.0450, 28.33),
|
||||||
|
( 1158, 0.0525, 40.33),
|
||||||
|
( 1783, 0.0590, 50.00),
|
||||||
|
( 6721, 0.0609, 86.83),
|
||||||
|
( 8067, 0.0641, 387.50),
|
||||||
|
( 8971, 0.0746, 473.83),
|
||||||
|
( 13138, 0.0796, 541.25),
|
||||||
|
( 17629, 0.0794, 872.92),
|
||||||
|
( 26933, 0.0691, 1229.58),
|
||||||
|
( 31100, 0.1019, 1872.50),
|
||||||
|
( 89796, 0.0735, 2297.08),
|
||||||
|
(179613, 0.0765, 6611.17),
|
||||||
|
(183779, 0.9454, 13482.17),
|
||||||
|
( 'inf', 0.0962, 17421.33),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 8500, 0.0400, 0.00),
|
||||||
|
( 11700, 0.0450, 340.00),
|
||||||
|
( 13900, 0.0525, 484.00),
|
||||||
|
( 21400, 0.0590, 600.00),
|
||||||
|
( 80650, 0.0609, 1042.00),
|
||||||
|
( 96800, 0.0641, 4650.00),
|
||||||
|
( 107650, 0.0746, 5686.00),
|
||||||
|
( 157650, 0.0796, 6495.00),
|
||||||
|
( 211550, 0.0794, 10475.00),
|
||||||
|
( 323200, 0.0691, 14755.00),
|
||||||
|
( 373200, 0.1019, 22470.00),
|
||||||
|
(1077550, 0.0735, 27565.00),
|
||||||
|
(2155350, 0.0765, 79334.00),
|
||||||
|
(2205350, 0.9454, 161786.00),
|
||||||
|
( 'inf', 0.0962, 209056.00),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ny_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ny_sit_over_10_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NY New York Over 10 Exemption Rate</field>
|
||||||
|
<field name="code">us_ny_sit_over_10_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ny_sit_over_10_exemption_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': (142.30, 152.90, 19.25),
|
||||||
|
'bi-weekly': (284.60, 305.80, 38.50),
|
||||||
|
'semi-monthly': (308.35, 331.25, 41.65),
|
||||||
|
'monthly': (616.70, 662.50, 83.30),
|
||||||
|
'annual': (7400, 7950, 1000),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ny_sit_over_10_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ny_sit_over_10_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': (142.30, 152.90, 19.25),
|
||||||
|
'bi-weekly': (284.60, 305.80, 38.50),
|
||||||
|
'semi-monthly': (308.35, 331.25, 41.65),
|
||||||
|
'monthly': (616.70, 662.50, 83.30),
|
||||||
|
'annual': (7400, 7950, 1000),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ny_sit_over_10_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- Table A - Combined deduction and exemption allowance (Step 1) -->
|
||||||
|
<record id="rule_parameter_us_ny_sit_deduction_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US NY New York Deduction Exemption Rate</field>
|
||||||
|
<field name="code">us_ny_sit_deduction_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ny_sit_deduction_exemption_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly': (142.30, 161.55, 180.80, 200.05, 219.30, 238.55, 257.80, 277.05, 296.30, 315.55, 334.80),
|
||||||
|
'bi-weekly': (284.60, 323.10, 361.60, 400.10, 438.60, 477.10, 515.60, 544.10, 592.60, 631.10, 669.60),
|
||||||
|
'semi-monthly': (308.35, 350.0, 391.65, 433.30, 474.95, 516.60, 558.25, 599.90, 641.55, 683.20, 724.85),
|
||||||
|
'monthly': (616.70, 700, 783.30, 866.60, 949.90, 1033.20, 1116.50, 1199.80, 1283.10, 1366.40, 1449.70),
|
||||||
|
'annually': (7400, 8400, 9400, 10400, 11400, 12400, 13400, 14400, 15400, 16400, 17400),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': (152.90, 172.15, 191.40, 210.65, 229.90, 249.15, 268.40, 287.65, 306.90, 326.15, 345.40),
|
||||||
|
'bi-weekly': (305.80, 344.30, 382.80, 421.30, 459.80, 498.30, 536.80, 575.30, 613.80, 652.30, 690.80),
|
||||||
|
'semi-monthly': (331.25, 372.90, 414.55, 456.20, 497.85, 539.50, 581.15, 622.80, 664.45, 706.10, 747.75),
|
||||||
|
'monthly': (662.50, 745.80, 829.10, 912.40, 995.70, 1079.00, 1162.30, 1245.60, 1328.90, 1412.20, 1495.50),
|
||||||
|
'annually': (7950, 8950, 9950, 10950, 11950, 12950, 13950, 14950, 15950, 16950, 17950),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ny_sit_deduction_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ny_sit_deduction_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly': (142.30, 161.55, 180.80, 200.05, 219.30, 238.55, 257.80, 277.05, 296.30, 315.55, 334.80),
|
||||||
|
'bi-weekly': (284.60, 323.10, 361.60, 400.10, 438.60, 477.10, 515.60, 544.10, 592.60, 631.10, 669.60),
|
||||||
|
'semi-monthly': (308.35, 350.0, 391.65, 433.30, 474.95, 516.60, 558.25, 599.90, 641.55, 683.20, 724.85),
|
||||||
|
'monthly': (616.70, 700, 783.30, 866.60, 949.90, 1033.20, 1116.50, 1199.80, 1283.10, 1366.40, 1449.70),
|
||||||
|
'annually': (7400, 8400, 9400, 10400, 11400, 12400, 13400, 14400, 15400, 16400, 17400),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': (152.90, 172.15, 191.40, 210.65, 229.90, 249.15, 268.40, 287.65, 306.90, 326.15, 345.40),
|
||||||
|
'bi-weekly': (305.80, 344.30, 382.80, 421.30, 459.80, 498.30, 536.80, 575.30, 613.80, 652.30, 690.80),
|
||||||
|
'semi-monthly': (331.25, 372.90, 414.55, 456.20, 497.85, 539.50, 581.15, 622.80, 664.45, 706.10, 747.75),
|
||||||
|
'monthly': (662.50, 745.80, 829.10, 912.40, 995.70, 1079.00, 1162.30, 1245.60, 1328.90, 1412.20, 1495.50),
|
||||||
|
'annually': (7950, 8950, 9950, 10950, 11950, 12950, 13950, 14950, 15950, 16950, 17950),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ny_sit_deduction_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_ny_dor" model="res.partner">
|
||||||
|
<field name="name">US New York - Department of Taxation and Finance - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ny_dor_rsf" model="res.partner">
|
||||||
|
<field name="name">US New York - Department of Taxation and Finance - Re-employment Service Fund</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ny_dor_mcmt" model="res.partner">
|
||||||
|
<field name="name">US New York - Department of Taxation and Finance - Metropolitan Commuter Transportation Mobility Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ny_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US New York - Department of Taxation and Finance - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ny_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US NY New York State Unemployment</field>
|
||||||
|
<field name="code">ER_US_NY_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ny_suta_wage_base', rate='us_ny_suta_rate', state_code='NY')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ny_suta_wage_base', rate='us_ny_suta_rate', state_code='NY')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ny_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_er_us_ny_suta_rsf" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US NY New York State Re-employment Service Fund</field>
|
||||||
|
<field name="code">ER_US_NY_SUTA_RSF</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ny_suta_wage_base', rate='us_ny_suta_rsf_rate', state_code='NY')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ny_suta_wage_base', rate='us_ny_suta_rsf_rate', state_code='NY')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ny_dor_rsf"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_er_us_ny_suta_mctmt" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US NY New York State Metropolitan Commuter Transportation Mobility Tax</field>
|
||||||
|
<field name="code">ER_US_NY_SUTA_MCTMT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ny_suta_wage_base', rate='us_ny_suta_mctmt_rate', state_code='NY')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ny_suta_wage_base', rate='us_ny_suta_mctmt_rate', state_code='NY')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ny_dor_mcmt"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_ny_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US NY New York State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_NY_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ny_new_york_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ny_new_york_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ny_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
157
l10n_us_hr_payroll/data/state/oh_ohio.xml
Normal file
157
l10n_us_hr_payroll/data/state/oh_ohio.xml
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_oh_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US OH Ohio SUTA Wage Base</field>
|
||||||
|
<field name="code">us_oh_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_oh_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">9500.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_oh_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_oh_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">9000.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_oh_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_oh_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US OH Ohio SUTA Rate</field>
|
||||||
|
<field name="code">us_oh_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_oh_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_oh_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_oh_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_oh_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_oh_sit_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US OH Ohio SIT Rate Table</field>
|
||||||
|
<field name="code">us_oh_sit_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_oh_sit_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<!-- https://www.tax.ohio.gov/Portals/0/employer_withholding/2019%20tables/WTH_OptionalComputerFormula_2019.pdf -->
|
||||||
|
<!-- wage_less_than, base_amount, rate_over -->
|
||||||
|
<field name="parameter_value">[
|
||||||
|
( 5000.00, 0.0, 0.005),
|
||||||
|
( 10000.00, 25.0, 0.010),
|
||||||
|
( 15000.00, 75.0, 0.020),
|
||||||
|
( 20000.00, 175.0, 0.025),
|
||||||
|
( 40000.00, 300.0, 0.030),
|
||||||
|
( 80000.00, 900.0, 0.035),
|
||||||
|
( 100000.00, 2300.0, 0.040),
|
||||||
|
( 'inf', 3100.0, 0.050),
|
||||||
|
]</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_oh_sit_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_oh_sit_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<!-- https://www.tax.ohio.gov/Portals/0/employer_withholding/2020%20tables/WTH_OptionalComputerFormula_2020.pdf -->
|
||||||
|
<!-- wage_less_than, base_amount, rate_over -->
|
||||||
|
<field name="parameter_value">[
|
||||||
|
( 5000.00, 0.0, 0.005),
|
||||||
|
( 10000.00, 25.0, 0.010),
|
||||||
|
( 15000.00, 75.0, 0.020),
|
||||||
|
( 20000.00, 175.0, 0.025),
|
||||||
|
( 40000.00, 300.0, 0.030),
|
||||||
|
( 80000.00, 900.0, 0.035),
|
||||||
|
( 100000.00, 2300.0, 0.040),
|
||||||
|
( 'inf', 3100.0, 0.050),
|
||||||
|
]</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_oh_sit_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_oh_sit_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US OH Ohio SIT Exemption Rate</field>
|
||||||
|
<field name="code">us_oh_sit_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_oh_sit_exemption_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">650.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_oh_sit_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_oh_sit_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">650.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_oh_sit_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_oh_sit_multiplier" model="hr.rule.parameter">
|
||||||
|
<field name="name">US OH Ohio SIT Multiplier Value</field>
|
||||||
|
<field name="code">us_oh_sit_multiplier</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_oh_sit_multiplier_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.075</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_oh_sit_multiplier"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_oh_sit_multiplier_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.032</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_oh_sit_multiplier"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_oh_dor" model="res.partner">
|
||||||
|
<field name="name">US Ohio - OBG - Unemployment</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_oh_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Ohio - OBG - Income Withholding</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_oh_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US OH Ohio State Unemployment (JFS-20125)</field>
|
||||||
|
<field name="code">ER_US_OH_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_oh_suta_wage_base', rate='us_oh_suta_rate', state_code='OH')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_oh_suta_wage_base', rate='us_oh_suta_rate', state_code='OH')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_oh_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_oh_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US OH Ohio State Income Tax Withholding (IT 501)</field>
|
||||||
|
<field name="code">EE_US_OH_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = oh_ohio_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = oh_ohio_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_oh_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
301
l10n_us_hr_payroll/data/state/ok_oklahoma.xml
Normal file
301
l10n_us_hr_payroll/data/state/ok_oklahoma.xml
Normal file
@@ -0,0 +1,301 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_ok_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US OK Oklahoma SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ok_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ok_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">18700.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ok_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_ok_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US OK Oklahoma SUTA Rate</field>
|
||||||
|
<field name="code">us_ok_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ok_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.5</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ok_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- table from https://www.ok.gov/tax/documents/2020WHTables.pdf -->
|
||||||
|
<record id="rule_parameter_us_ok_sit_allowances_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US OK Oklahoma Allowances Rate</field>
|
||||||
|
<field name="code">us_ok_sit_allowances_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ok_sit_allowances_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly' : 19.23,
|
||||||
|
'bi-weekly' : 38.46,
|
||||||
|
'semi-monthly': 41.67,
|
||||||
|
'monthly' : 83.33,
|
||||||
|
'quarterly' : 250.00,
|
||||||
|
'semi-annual': 500.00,
|
||||||
|
'annually': 1000.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ok_sit_allowances_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- table from https://www.ok.gov/tax/documents/2020WHTables.pdf -->
|
||||||
|
<record id="rule_parameter_us_ok_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US OK Oklahoma SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ok_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ok_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly': (
|
||||||
|
( 122, 0.00, 0.00),
|
||||||
|
( 141, 0.50, 0.00),
|
||||||
|
( 170, 1.00, 0.10),
|
||||||
|
( 194, 2.00, 0.38),
|
||||||
|
( 216, 3.00, 0.87),
|
||||||
|
( 261, 4.00, 1.53),
|
||||||
|
('inf', 5.00, 3.30),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 244, 0.00, 0.00),
|
||||||
|
( 283, 0.50, 0.00),
|
||||||
|
( 340, 1.00, 0.19),
|
||||||
|
( 388, 2.00, 0.77),
|
||||||
|
( 433, 3.00, 1.73),
|
||||||
|
( 521, 4.00, 3.06),
|
||||||
|
('inf', 5.00, 6.60),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 265, 0.00, 0.00),
|
||||||
|
( 306, 0.50, 0.00),
|
||||||
|
( 369, 1.00, 0.21),
|
||||||
|
( 421, 2.00, 0.83),
|
||||||
|
( 469, 3.00, 1.88),
|
||||||
|
( 565, 4.00, 3.31),
|
||||||
|
('inf', 5.00, 7.15),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 529, 0.00, 0.00),
|
||||||
|
( 613, 0.50, 0.00),
|
||||||
|
( 738, 1.00, 0.42),
|
||||||
|
( 842, 2.00, 1.67),
|
||||||
|
( 938, 3.00, 3.75),
|
||||||
|
(1129, 4.00, 6.63),
|
||||||
|
('inf', 5.00, 14.29),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 1588, 0.00, 0.00),
|
||||||
|
( 1838, 0.50, 0.00),
|
||||||
|
( 2213, 1.00, 1.25),
|
||||||
|
( 2525, 2.00, 5.00),
|
||||||
|
( 2813, 3.00, 11.25),
|
||||||
|
( 3388, 4.00, 19.88),
|
||||||
|
('inf', 5.00, 42.88),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 3175, 0.00, 0.00),
|
||||||
|
( 3675, 0.50, 0.00),
|
||||||
|
( 4425, 1.00, 2.50),
|
||||||
|
( 5050, 2.00, 10.00),
|
||||||
|
(5625, 3.00, 22.50),
|
||||||
|
( 6775, 4.00, 39.75),
|
||||||
|
('inf', 5.00, 85.75),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 6350, 0.00, 0.00),
|
||||||
|
( 7350, 0.50, 0.00),
|
||||||
|
( 8850, 1.00, 5.00),
|
||||||
|
(10100, 2.00, 20.00),
|
||||||
|
(11250, 3.00, 45.00),
|
||||||
|
(13550, 4.00, 79.50),
|
||||||
|
('inf', 5.00, 171.50),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': (
|
||||||
|
( 244, 0.00, 0.00),
|
||||||
|
( 283, 0.50, 0.00),
|
||||||
|
( 340, 1.00, 0.19),
|
||||||
|
( 388, 2.00, 0.77),
|
||||||
|
( 433, 3.00, 1.73),
|
||||||
|
( 479, 4.00, 3.06),
|
||||||
|
('inf', 5.00, 4.90),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 488, 0.00, 0.00),
|
||||||
|
( 565, 0.50, 0.00),
|
||||||
|
( 681, 1.00, 0.38),
|
||||||
|
( 777, 2.00, 1.54),
|
||||||
|
( 865, 3.00, 3.46),
|
||||||
|
( 958, 4.00, 6.12),
|
||||||
|
('inf', 5.00, 9.81),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 529, 0.00, 0.00),
|
||||||
|
( 613, 0.50, 0.00),
|
||||||
|
( 738, 1.00, 0.42),
|
||||||
|
( 842, 2.00, 1.67),
|
||||||
|
( 938, 3.00, 3.75),
|
||||||
|
( 1038, 4.00, 6.63),
|
||||||
|
('inf', 5.00, 10.63),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 1058, 0.00, 0.00),
|
||||||
|
( 1225, 0.50, 0.00),
|
||||||
|
( 1475, 1.00, 0.83),
|
||||||
|
( 1683, 2.00, 3.33),
|
||||||
|
( 1875, 3.00, 7.50),
|
||||||
|
( 2075, 4.00, 13.25),
|
||||||
|
('inf', 5.00, 21.25),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 3175, 0.00, 0.00),
|
||||||
|
( 3675, 0.50, 0.00),
|
||||||
|
( 4425, 1.00, 2.50),
|
||||||
|
( 5050, 2.00, 10.00),
|
||||||
|
( 5625, 3.00, 22.50),
|
||||||
|
( 6225, 4.00, 39.75),
|
||||||
|
('inf', 5.00, 63.75),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 6350, 0.00, 0.00),
|
||||||
|
( 7350, 0.50, 0.00),
|
||||||
|
( 8850, 1.00, 5.00),
|
||||||
|
( 10100, 2.00, 20.00),
|
||||||
|
( 11250, 3.00, 45.00),
|
||||||
|
( 12450, 4.00, 79.50),
|
||||||
|
( 'inf', 5.00, 127.50),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 12700, 0.00, 0.00),
|
||||||
|
( 14700, 0.50, 0.00),
|
||||||
|
( 17700, 1.00, 10.00),
|
||||||
|
( 20200, 2.00, 40.00),
|
||||||
|
( 22500, 3.00, 90.00),
|
||||||
|
( 24900, 4.00, 159.00),
|
||||||
|
( 'inf', 5.00, 255.00),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'head_household': {
|
||||||
|
'weekly': (
|
||||||
|
( 122, 0.00, 0.00),
|
||||||
|
( 141, 0.50, 0.00),
|
||||||
|
( 170, 1.00, 0.10),
|
||||||
|
( 194, 2.00, 0.38),
|
||||||
|
( 216, 3.00, 0.87),
|
||||||
|
( 261, 4.00, 1.53),
|
||||||
|
('inf', 5.00, 3.30),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 244, 0.00, 0.00),
|
||||||
|
( 283, 0.50, 0.00),
|
||||||
|
( 340, 1.00, 0.19),
|
||||||
|
( 388, 2.00, 0.77),
|
||||||
|
( 433, 3.00, 1.73),
|
||||||
|
( 521, 4.00, 3.06),
|
||||||
|
('inf', 5.00, 6.60),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 265, 0.00, 0.00),
|
||||||
|
( 306, 0.50, 0.00),
|
||||||
|
( 369, 1.00, 0.21),
|
||||||
|
( 421, 2.00, 0.83),
|
||||||
|
( 469, 3.00, 1.88),
|
||||||
|
( 565, 4.00, 3.31),
|
||||||
|
('inf', 5.00, 7.15),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 529, 0.00, 0.00),
|
||||||
|
( 613, 0.50, 0.00),
|
||||||
|
( 738, 1.00, 0.42),
|
||||||
|
( 842, 2.00, 1.67),
|
||||||
|
( 938, 3.00, 3.75),
|
||||||
|
( 1129, 4.00, 6.63),
|
||||||
|
('inf', 5.00, 14.29),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 1588, 0.00, 0.00),
|
||||||
|
( 1838, 0.50, 0.00),
|
||||||
|
( 2213, 1.00, 1.25),
|
||||||
|
( 2525, 2.00, 5.00),
|
||||||
|
( 2813, 3.00, 11.25),
|
||||||
|
( 3388, 4.00, 19.88),
|
||||||
|
('inf', 5.00, 42.88),
|
||||||
|
),
|
||||||
|
'semi-annual': (
|
||||||
|
( 3175, 0.00, 0.00),
|
||||||
|
( 3675, 0.50, 0.00),
|
||||||
|
( 4425, 1.00, 2.50),
|
||||||
|
( 5050, 2.00, 10.00),
|
||||||
|
( 5625, 3.00, 22.50),
|
||||||
|
( 6775, 4.00, 39.75),
|
||||||
|
('inf', 5.00, 85.75),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 6350, 0.00, 0.00),
|
||||||
|
( 7350, 0.50, 0.00),
|
||||||
|
( 8850, 1.00, 5.00),
|
||||||
|
(10100, 2.00, 20.00),
|
||||||
|
(11250, 3.00, 45.00),
|
||||||
|
(13550, 4.00, 79.50),
|
||||||
|
('inf', 5.00, 171.50),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ok_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_ok_dor" model="res.partner">
|
||||||
|
<field name="name">US Oklahoma - Employment Security Commission - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ok_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Oklahoma - Tax Commission - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ok_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US OK Oklahoma State Unemployment</field>
|
||||||
|
<field name="code">ER_US_OK_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ok_suta_wage_base', rate='us_ok_suta_rate', state_code='OK')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ok_suta_wage_base', rate='us_ok_suta_rate', state_code='OK')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ok_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_ok_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US OK Oklahoma State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_OK_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ok_oklahoma_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ok_oklahoma_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ok_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
131
l10n_us_hr_payroll/data/state/pa_pennsylvania.xml
Normal file
131
l10n_us_hr_payroll/data/state/pa_pennsylvania.xml
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_pa_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US PA Pennsylvania SUTA Wage Base (ER)</field>
|
||||||
|
<field name="code">us_pa_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_pa_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">10000.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_pa_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_pa_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">10000.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_pa_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_pa_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US PA Pennsylvania SUTA Rate</field>
|
||||||
|
<field name="code">us_pa_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_pa_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">3.6890</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_pa_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_pa_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">3.6890</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_pa_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_pa_suta_ee_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US PA Pennsylvania SUTA Employee Rate</field>
|
||||||
|
<field name="code">us_pa_suta_ee_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_pa_suta_ee_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.06</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_pa_suta_ee_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_pa_suta_ee_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.06</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_pa_suta_ee_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_pa_sit_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US PA Pennsylvania SIT Rate</field>
|
||||||
|
<field name="code">us_pa_sit_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_pa_sit_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">3.07</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_pa_sit_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_pa_sit_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">3.07</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_pa_sit_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_pa_dor" model="res.partner">
|
||||||
|
<field name="name">US Pennsylvania - Department of Revenue - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_pa_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Pennsylvania - Department of Revenue - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_pa_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US PA Pennsylvania State Unemployment (UC-2)</field>
|
||||||
|
<field name="code">ER_US_PA_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_pa_suta_wage_base', rate='us_pa_suta_rate', state_code='PA')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_pa_suta_wage_base', rate='us_pa_suta_rate', state_code='PA')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_pa_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_pa_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_suta"/>
|
||||||
|
<field name="name">EE: US PA Pennsylvania State Unemployment (UC-2)</field>
|
||||||
|
<field name="code">EE_US_PA_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, rate='us_pa_suta_ee_rate', state_code='PA')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, rate='us_pa_suta_ee_rate', state_code='PA')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_pa_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_pa_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US PA Pennsylvania State Income Tax Withholding (PA-501)</field>
|
||||||
|
<field name="code">EE_US_PA_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_income_withholding(payslip, categories, worked_days, inputs, rate='us_pa_sit_rate', state_code='PA')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_income_withholding(payslip, categories, worked_days, inputs, rate='us_pa_sit_rate', state_code='PA')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_pa_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
141
l10n_us_hr_payroll/data/state/ri_rhode_island.xml
Normal file
141
l10n_us_hr_payroll/data/state/ri_rhode_island.xml
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_ri_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US RI Rhode Island SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ri_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ri_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">24000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ri_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_ri_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US RI Rhode Island SUTA Rate</field>
|
||||||
|
<field name="code">us_ri_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ri_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.06</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ri_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- Withhooding tax exemption based on two table on page 7. from http://www.tax.ri.gov/forms/2020/Withholding/2020%20Withhholding%20Tax%20Booklet.pdf -->
|
||||||
|
<record id="rule_parameter_us_ri_sit_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US RI Rhode Island Exemption Rate</field>
|
||||||
|
<field name="code">us_ri_sit_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ri_sit_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly' : (( 0.00, 19.23), ( 4451.92, 0.00)),
|
||||||
|
'bi-weekly' : (( 0.00, 38.46), ( 8903.85, 0.00)),
|
||||||
|
'semi-monthly': (( 0.00, 41.67), ( 9645.83, 0.00)),
|
||||||
|
'monthly' : (( 0.00, 83.33), ( 19291.67, 0.00)),
|
||||||
|
'quarterly' : (( 0.00, 250.00), ( 57875.00, 0.00)),
|
||||||
|
'semi-annually': (( 0.00, 500.00), ( 115750.00, 0.00)),
|
||||||
|
'annually': (( 0.00, 1000.0), ( 231500.00, 0000)),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ri_sit_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ri_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US RI Rhode Island SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ri_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ri_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': (
|
||||||
|
( 1255, 0.00, 3.75),
|
||||||
|
( 2853, 47.06, 4.75),
|
||||||
|
('inf', 122.97, 5.99),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 2510, 0.00, 3.75),
|
||||||
|
( 5706, 94.13, 4.75),
|
||||||
|
('inf', 245.94, 5.99),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 2719, 0.00, 3.75),
|
||||||
|
( 6181, 101.96, 4.75),
|
||||||
|
('inf', 266.41, 5.99),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 5438, 0.00, 3.75),
|
||||||
|
(12363, 203.93, 4.75),
|
||||||
|
('inf', 532.87, 5.99),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
(16313, 0.00, 3.75),
|
||||||
|
(37088, 611.74, 4.75),
|
||||||
|
('inf', 1598.55, 5.99),
|
||||||
|
),
|
||||||
|
'semi-annually': (
|
||||||
|
(32625, 0.00, 3.75),
|
||||||
|
(74175, 1223.44, 4.75),
|
||||||
|
('inf', 3197.07, 5.99),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 65250, 0.00, 3.75),
|
||||||
|
(148350, 2446.88, 4.75),
|
||||||
|
( 'inf', 6394.13, 5.99),
|
||||||
|
),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ri_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_ri_dor" model="res.partner">
|
||||||
|
<field name="name">US Rhode Island - Department of Labor and Training - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ri_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Rhode Island - Division of Taxations - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ri_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US RI Rhode Island State Unemployment</field>
|
||||||
|
<field name="code">ER_US_RI_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ri_suta_wage_base', rate='us_ri_suta_rate', state_code='RI')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ri_suta_wage_base', rate='us_ri_suta_rate', state_code='RI')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ri_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_ri_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US RI Rhode Island State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_RI_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ri_rhode_island_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ri_rhode_island_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ri_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
151
l10n_us_hr_payroll/data/state/sc_south_carolina.xml
Normal file
151
l10n_us_hr_payroll/data/state/sc_south_carolina.xml
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_sc_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US SC South Carolina SUTA Wage Base</field>
|
||||||
|
<field name="code">us_sc_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_sc_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">14000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_sc_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_sc_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">14000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_sc_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_sc_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US SC South Carolina SUTA Rate</field>
|
||||||
|
<field name="code">us_sc_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_sc_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.09</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_sc_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- Tax rate from https://taxnews.ey.com/news/2019-2183-south-carolina-2020-sui-tax-rates-to-decrease-due-to-elimination-of-the-variable-solvency-surcharge-wage-base-unchanged -->
|
||||||
|
<record id="rule_parameter_us_sc_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.55</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_sc_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_sc_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US SC South Carolina SIT Tax Rate</field>
|
||||||
|
<field name="code">us_sc_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_sc_sit_tax_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">[
|
||||||
|
( 2450, 1.1, 0.0),
|
||||||
|
( 4900, 3.0, 26.95),
|
||||||
|
( 7350, 4.0, 100.45),
|
||||||
|
( 9800, 5.0, 198.45),
|
||||||
|
(12250, 6.0, 320.95),
|
||||||
|
('inf', 7.0, 467.95),
|
||||||
|
]</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_sc_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<!-- Substraction Method table from https://dor.sc.gov/forms-site/Forms/WH1603F_2020.pdf-->
|
||||||
|
<record id="rule_parameter_us_sc_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">[
|
||||||
|
( 2620, 0.8, 0.0),
|
||||||
|
( 5240, 3.0, 57.64),
|
||||||
|
( 7860, 4.0, 110.04),
|
||||||
|
(10490, 5.0, 188.64),
|
||||||
|
(13110, 6.0, 293.54),
|
||||||
|
('inf', 7.0, 424.64),
|
||||||
|
]</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_sc_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_sc_sit_personal_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US SC South Carolina Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_sc_sit_personal_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_sc_sit_personal_exemption_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2510</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_sc_sit_personal_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_sc_sit_personal_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2590</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_sc_sit_personal_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_sc_sit_standard_deduction_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US SC South Carolina Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_sc_sit_standard_deduction_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_sc_sit_standard_deduction_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">3470.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_sc_sit_standard_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_sc_sit_standard_deduction_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">3820.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_sc_sit_standard_deduction_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_sc_dor" model="res.partner">
|
||||||
|
<field name="name">US South Carolina - Department of Labor and Industrial Relations - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_sc_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US South Carolina - Department of Taxation - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_sc_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US SC South Carolina State Unemployment</field>
|
||||||
|
<field name="code">ER_US_SC_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_sc_suta_wage_base', rate='us_sc_suta_rate', state_code='SC')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_sc_suta_wage_base', rate='us_sc_suta_rate', state_code='SC')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_sc_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_sc_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US SC South Carolina State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_SC_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = sc_south_carolina_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = sc_south_carolina_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_sc_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
51
l10n_us_hr_payroll/data/state/sd_south_dakota.xml
Normal file
51
l10n_us_hr_payroll/data/state/sd_south_dakota.xml
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_sd_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US SD South Dakota SUTA Wage Base</field>
|
||||||
|
<field name="code">us_sd_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_sd_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">15000.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_sd_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_sd_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US SD South Dakota SUTA Rate</field>
|
||||||
|
<field name="code">us_sd_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_sd_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.75</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_sd_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_sd_dor" model="res.partner">
|
||||||
|
<field name="name">US South Dakota - Department of Labor - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_sd_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US SD South Dakota State Unemployment</field>
|
||||||
|
<field name="code">ER_US_SD_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_sd_suta_wage_base', rate='us_sd_suta_rate', state_code='SD')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_sd_suta_wage_base', rate='us_sd_suta_rate', state_code='SD')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_sd_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
51
l10n_us_hr_payroll/data/state/tn_tennessee.xml
Normal file
51
l10n_us_hr_payroll/data/state/tn_tennessee.xml
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_tn_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US TN Tennessee SUTA Wage Base</field>
|
||||||
|
<field name="code">us_tn_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_tn_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">7000.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_tn_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_tn_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US TN Tennessee SUTA Rate</field>
|
||||||
|
<field name="code">us_tn_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_tn_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_tn_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_tn_dor" model="res.partner">
|
||||||
|
<field name="name">US Tennessee - Department of Revenue - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_tn_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US TN Tennessee State Unemployment</field>
|
||||||
|
<field name="code">ER_US_TN_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_tn_suta_wage_base', rate='us_tn_suta_rate', state_code='TN')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_tn_suta_wage_base', rate='us_tn_suta_rate', state_code='TN')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_tn_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
127
l10n_us_hr_payroll/data/state/tx_texas.xml
Normal file
127
l10n_us_hr_payroll/data/state/tx_texas.xml
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_tx_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US TX Texas SUTA Wage Base</field>
|
||||||
|
<field name="code">us_tx_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_tx_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">9000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_tx_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_tx_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">9000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_tx_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_tx_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US TX Texas SUTA Rate</field>
|
||||||
|
<field name="code">us_tx_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_tx_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_tx_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_tx_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_tx_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_tx_suta_oa_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US TX Texas Obligation Assessment Rate</field>
|
||||||
|
<field name="code">us_tx_suta_oa_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_tx_suta_oa_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_tx_suta_oa_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_tx_suta_oa_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_tx_suta_oa_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_tx_suta_etia_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US TX Texas Employment & Training Investment Assessment Rate</field>
|
||||||
|
<field name="code">us_tx_suta_etia_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_tx_suta_etia_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.1</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_tx_suta_etia_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_tx_suta_etia_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.1</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_tx_suta_etia_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_tx_dor" model="res.partner">
|
||||||
|
<field name="name">US Texas - Workforce Commission (Unemployment)</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_tx_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US TX Texas State Unemployment (C-3)</field>
|
||||||
|
<field name="code">ER_US_TX_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_tx_suta_wage_base', rate='us_tx_suta_rate', state_code='TX')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_tx_suta_wage_base', rate='us_tx_suta_rate', state_code='TX')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_tx_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_er_us_tx_suta_oa" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="451"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US TX Texas Obligation Assessment (C-3)</field>
|
||||||
|
<field name="code">ER_US_TX_SUTA_OA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_tx_suta_wage_base', rate='us_tx_suta_oa_rate', state_code='TX')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_tx_suta_wage_base', rate='us_tx_suta_oa_rate', state_code='TX')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_tx_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_er_us_tx_suta_etia" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="451"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US TX Texas Employment & Training Investment Assessment (C-3)</field>
|
||||||
|
<field name="code">ER_US_TX_SUTA_ETIA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_tx_suta_wage_base', rate='us_tx_suta_etia_rate', state_code='TX')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_tx_suta_wage_base', rate='us_tx_suta_etia_rate', state_code='TX')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_tx_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
166
l10n_us_hr_payroll/data/state/ut_utah.xml
Normal file
166
l10n_us_hr_payroll/data/state/ut_utah.xml
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_ut_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US UT Utah SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ut_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ut_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">36600.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ut_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_ut_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US UT Utah SUTA Rate</field>
|
||||||
|
<field name="code">us_ut_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ut_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.1</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ut_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_ut_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US UT Utah TAX Rate</field>
|
||||||
|
<field name="code">us_ut_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ut_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.0495</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ut_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- Table based on https://tax.utah.gov/forms/pubs/pub-14.pdf -->
|
||||||
|
<record id="rule_parameter_us_ut_sit_allowances_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US UT Utah Allowances Rate</field>
|
||||||
|
<field name="code">us_ut_sit_allowances_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ut_sit_allowances_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly' : 7,
|
||||||
|
'bi-weekly' : 14,
|
||||||
|
'semi-monthly': 15,
|
||||||
|
'monthly' : 30,
|
||||||
|
'quarterly' : 90,
|
||||||
|
'semi-annual': 180,
|
||||||
|
'annually': 360,
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly' : 14,
|
||||||
|
'bi-weekly' : 28,
|
||||||
|
'semi-monthly': 30,
|
||||||
|
'monthly' : 60,
|
||||||
|
'quarterly' : 180,
|
||||||
|
'semi-annual': 360,
|
||||||
|
'annually': 720,
|
||||||
|
},
|
||||||
|
'head_household': {
|
||||||
|
'weekly' : 7,
|
||||||
|
'bi-weekly' : 14,
|
||||||
|
'semi-monthly': 15,
|
||||||
|
'monthly' : 30,
|
||||||
|
'quarterly' : 90,
|
||||||
|
'semi-annual': 180,
|
||||||
|
'annually': 360,
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ut_sit_allowances_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- Table based on https://tax.utah.gov/forms/pubs/pub-14.pdf -->
|
||||||
|
<record id="rule_parameter_us_ut_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US UT Utah SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ut_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ut_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly': ((137, 1.3)),
|
||||||
|
'bi-weekly': ((274, 1.3)),
|
||||||
|
'semi-monthly': ((297, 1.3)),
|
||||||
|
'monthly': ((594, 1.3)),
|
||||||
|
'quarterly': ((1782, 1.3)),
|
||||||
|
'semi-annual': ((3564, 1.3)),
|
||||||
|
'annually': ((7128, 1.3)),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': ((274, 1.3)),
|
||||||
|
'bi-weekly': (548, 1.3),
|
||||||
|
'semi-monthly': ((594, 1.3)),
|
||||||
|
'monthly': ((1188, 1.3)),
|
||||||
|
'quarterly': ((3564, 1.3)),
|
||||||
|
'semi-annual': ((7128, 1.3)),
|
||||||
|
'annually': ((14256, 1.3)),
|
||||||
|
},
|
||||||
|
'head_household': {
|
||||||
|
'weekly': ((137, 1.3)),
|
||||||
|
'bi-weekly': ((274, 1.3)),
|
||||||
|
'semi-monthly': ((297, 1.3)),
|
||||||
|
'monthly': ((594, 1.3)),
|
||||||
|
'quarterly': ((1782, 1.3)),
|
||||||
|
'semi-annual': ((3564, 1.3)),
|
||||||
|
'annually': ((7128, 1.3)),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_ut_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_ut_dor" model="res.partner">
|
||||||
|
<field name="name">US Utah - Employment Security Commission - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ut_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Utah - Tax Commission - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ut_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US UT Utah State Unemployment</field>
|
||||||
|
<field name="code">ER_US_UT_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ut_suta_wage_base', rate='us_ut_suta_rate', state_code='UT')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ut_suta_wage_base', rate='us_ut_suta_rate', state_code='UT')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ut_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_ut_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US UT Utah State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_UT_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = ut_utah_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = ut_utah_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ut_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
138
l10n_us_hr_payroll/data/state/va_virginia.xml
Normal file
138
l10n_us_hr_payroll/data/state/va_virginia.xml
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_va_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US VA Virginia SUTA Wage Base</field>
|
||||||
|
<field name="code">us_va_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_va_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">8000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_va_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_va_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">8000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_va_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_va_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US VA Virginia SUTA Rate</field>
|
||||||
|
<field name="code">us_va_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_va_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.51</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_va_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_va_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.51</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_va_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- Table page no 10 based https://www.tax.virginia.gov/sites/default/files/inline-files/Employer%20Withholding%20Instructions.pdf -->
|
||||||
|
<record id="rule_parameter_us_va_sit_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US VA Virginia SIT Rate Table</field>
|
||||||
|
<field name="code">us_va_sit_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_va_sit_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">[
|
||||||
|
( 0.00, 0.0, 2.00),
|
||||||
|
( 3000.00, 60.0, 3.00),
|
||||||
|
( 5000.00, 120.0, 5.00),
|
||||||
|
( 17000.00, 720.0, 5.75),
|
||||||
|
]</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_va_sit_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_va_sit_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US VA Virginia SIT Exemption Rate Table</field>
|
||||||
|
<field name="code">us_va_sit_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_va_sit_exemption_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">930.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_va_sit_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_va_sit_other_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US VA Virginia SIT Other Exemption Rate Table</field>
|
||||||
|
<field name="code">us_va_sit_other_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_va_sit_other_exemption_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">800.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_va_sit_other_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_va_sit_deduction" model="hr.rule.parameter">
|
||||||
|
<field name="name">US VA Virginia SIT Deduction</field>
|
||||||
|
<field name="code">us_va_sit_deduction</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_va_sit_deduction_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">4500.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_va_sit_deduction"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_va_dor" model="res.partner">
|
||||||
|
<field name="name">US Virginia - Department of Taxation - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_va_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Virginia - Department of Taxation - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_va_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US VA Virginia State Unemployment</field>
|
||||||
|
<field name="code">ER_US_VA_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_va_suta_wage_base', rate='us_va_suta_rate', state_code='VA')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_va_suta_wage_base', rate='us_va_suta_rate', state_code='VA')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_va_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_va_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US VA Virginia State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_VA_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = va_virginia_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = va_virginia_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_va_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
193
l10n_us_hr_payroll/data/state/vt_vermont.xml
Normal file
193
l10n_us_hr_payroll/data/state/vt_vermont.xml
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base from https://labor.vermont.gov/unemployment-insurance/ui-employers/quarterly-reporting-taxable-wage-information -->
|
||||||
|
<record id="rule_parameter_us_vt_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US VT Vermont SUTA Wage Base</field>
|
||||||
|
<field name="code">us_vt_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_vt_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">16100.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_vt_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_vt_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US VT Vermont SUTA Rate</field>
|
||||||
|
<field name="code">us_vt_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_vt_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_vt_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_vt_sit_allowances_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US VT Vermont Allowances Rate</field>
|
||||||
|
<field name="code">us_vt_sit_allowances_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_vt_sit_allowances_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly' : 83.65,
|
||||||
|
'bi-weekly' : 167.31,
|
||||||
|
'semi-monthly': 181.25,
|
||||||
|
'monthly' : 362.50,
|
||||||
|
'quarterly' : 1087.50,
|
||||||
|
'annually': 4350.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_vt_sit_allowances_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- Table based on https://tax.vermont.gov/sites/tax/files/documents/WithholdingInstructions.pdf-->
|
||||||
|
<record id="rule_parameter_us_vt_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US VT Vermont SIT Tax Rate</field>
|
||||||
|
<field name="code">us_vt_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_vt_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly': (
|
||||||
|
( 60, 0.00, 0.00),
|
||||||
|
( 836, 0.00, 3.35),
|
||||||
|
( 1941, 26.00, 6.60),
|
||||||
|
( 3983, 98.93, 7.60),
|
||||||
|
('inf', 254.12, 8.75),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 120, 0.00, 0.00),
|
||||||
|
( 1672, 0.00, 3.35),
|
||||||
|
( 3882, 51.99, 6.60),
|
||||||
|
( 7966, 197.85, 7.60),
|
||||||
|
('inf', 508.24, 8.75),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 130, 0.00, 0.00),
|
||||||
|
( 1811, 0.00, 3.35),
|
||||||
|
( 4205, 56.31, 6.60),
|
||||||
|
( 8630, 214.32, 7.60),
|
||||||
|
('inf', 550.62, 8.75),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 260, 0.00, 0.00),
|
||||||
|
( 3623, 0.00, 3.35),
|
||||||
|
( 8410, 112.66, 6.60),
|
||||||
|
(17260, 428.60, 7.60),
|
||||||
|
('inf', 1101.20, 8.75),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 781, 0.00, 0.00),
|
||||||
|
(10869, 0.00, 3.35),
|
||||||
|
(25231, 337.95, 6.60),
|
||||||
|
(51781, 1285.84, 7.60),
|
||||||
|
('inf', 3303.64, 8.75),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 3125, 0.00, 0.00),
|
||||||
|
( 43475, 0.00, 3.35),
|
||||||
|
(100925, 1351.73, 6.60),
|
||||||
|
(207125, 5143.43, 7.60),
|
||||||
|
( 'inf', 13214.63, 8.75),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly': (
|
||||||
|
( 180, 0.00, 0.00),
|
||||||
|
( 1477, 0.00, 3.35),
|
||||||
|
( 3315, 43.45, 6.60),
|
||||||
|
( 4956, 164.76, 7.60),
|
||||||
|
('inf', 289.47, 8.75),
|
||||||
|
),
|
||||||
|
'bi-weekly': (
|
||||||
|
( 361, 0.00, 0.00),
|
||||||
|
( 2955, 0.00, 3.35),
|
||||||
|
( 6630, 86.90, 6.60),
|
||||||
|
(9913, 329.45, 7.60),
|
||||||
|
('inf', 578.96, 8.75),
|
||||||
|
),
|
||||||
|
'semi-monthly': (
|
||||||
|
( 391, 0.00, 0.00),
|
||||||
|
( 3201, 0.00, 3.35),
|
||||||
|
( 7182, 94.14, 6.60),
|
||||||
|
(10739, 356.88, 7.60),
|
||||||
|
('inf', 627.21, 8.75),
|
||||||
|
),
|
||||||
|
'monthly': (
|
||||||
|
( 781, 0.00, 0.00),
|
||||||
|
( 6402, 0.00, 3.35),
|
||||||
|
(14365, 188.30, 6.60),
|
||||||
|
(21477, 713.86, 7.60),
|
||||||
|
('inf', 1254.37, 8.75),
|
||||||
|
),
|
||||||
|
'quarterly': (
|
||||||
|
( 2344, 0.00, 0.00),
|
||||||
|
(19206, 0.00, 3.35),
|
||||||
|
(43094, 564.88, 6.60),
|
||||||
|
(64431, 2141.49, 7.60),
|
||||||
|
('inf', 3763.10, 8.75),
|
||||||
|
),
|
||||||
|
'annually': (
|
||||||
|
( 9375, 0.00, 0.00),
|
||||||
|
( 76825, 0.00, 3.35),
|
||||||
|
(172375, 2259.58, 6.60),
|
||||||
|
(257725, 8565.88, 7.60),
|
||||||
|
( 'inf', 15052.48, 8.75),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_vt_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_vt_dor" model="res.partner">
|
||||||
|
<field name="name">US Vermont - Employment Security Commission - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_vt_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Vermont - Tax Commission - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_vt_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US VT Vermont State Unemployment</field>
|
||||||
|
<field name="code">ER_US_VT_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_vt_suta_wage_base', rate='us_vt_suta_rate', state_code='VT')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_vt_suta_wage_base', rate='us_vt_suta_rate', state_code='VT')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_vt_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_vt_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US VT Vermont State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_VT_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = vt_vermont_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = vt_vermont_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_vt_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
200
l10n_us_hr_payroll/data/state/wa_washington.xml
Normal file
200
l10n_us_hr_payroll/data/state/wa_washington.xml
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_wa_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WA Washington SUTA Wage Base</field>
|
||||||
|
<field name="code">us_wa_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wa_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">49800.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wa_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_wa_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">52700.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wa_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_wa_fml_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WA Washington FML Wage Base</field>
|
||||||
|
<field name="code">us_wa_fml_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wa_fml_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">132900.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_wa_fml_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">137700.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_wa_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WA Washington SUTA Rate</field>
|
||||||
|
<field name="code">us_wa_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wa_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.18</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wa_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_wa_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wa_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_wa_fml_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WA Washington FML Rate (Total)</field>
|
||||||
|
<field name="code">us_wa_fml_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wa_fml_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.4</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_wa_fml_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">0.4</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_wa_fml_rate_ee" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WA Washington FML Rate (Employee)</field>
|
||||||
|
<field name="code">us_wa_fml_rate_ee</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wa_fml_rate_ee_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">66.33</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate_ee"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_wa_fml_rate_ee_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">66.33</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate_ee"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_wa_fml_rate_er" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WA Washington FML Rate (Employer)</field>
|
||||||
|
<field name="code">us_wa_fml_rate_er</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wa_fml_rate_er_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">33.67</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate_er"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_wa_fml_rate_er_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">33.67</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wa_fml_rate_er"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_wa_dor" model="res.partner">
|
||||||
|
<field name="name">US Washington - Employment Security Department (Unemployment)</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_wa_dor_lni" model="res.partner">
|
||||||
|
<field name="name">US Washington - Department of Labor & Industries</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_wa_dor_fml" model="res.partner">
|
||||||
|
<field name="name">US Washington - Employment Security Department (PFML)</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_wa_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US WA Washington State Unemployment (5208A/B)</field>
|
||||||
|
<field name="code">ER_US_WA_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_wa_suta_wage_base', rate='us_wa_suta_rate', state_code='WA')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_wa_suta_wage_base', rate='us_wa_suta_rate', state_code='WA')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wa_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_er_us_wa_fml" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="451"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll.COMP"/>
|
||||||
|
<field name="name">ER: US WA Washington State Family Medical Leave</field>
|
||||||
|
<field name="code">ER_US_WA_FML</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = wa_washington_fml_er(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = wa_washington_fml_er(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wa_dor_fml"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_wa_fml" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="196"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll.DED"/>
|
||||||
|
<field name="name">EE: US WA Washington State Family Medical Leave</field>
|
||||||
|
<field name="code">EE_US_WA_FML</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = wa_washington_fml_ee(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = wa_washington_fml_ee(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wa_dor_fml"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- LNI May need to be updated depending on hours worked (or drywall laid) -->
|
||||||
|
<record id="hr_payroll_rule_er_us_wa_lni" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="451"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll.COMP"/>
|
||||||
|
<field name="name">ER: US WA Washington State LNI</field>
|
||||||
|
<field name="code">ER_US_WA_LNI</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result = is_us_state(payslip, 'WA') and payslip.contract_id.us_payroll_config_value('workers_comp_ee_code') and worked_days.WORK100 and worked_days.WORK100.number_of_hours and payslip.rule_parameter(payslip.contract_id.us_payroll_config_value('workers_comp_er_code'))</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = worked_days.WORK100.number_of_hours, -payslip.rule_parameter(payslip.contract_id.us_payroll_config_value('workers_comp_er_code'))</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wa_dor_lni"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_wa_lni" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="196"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll.DED"/>
|
||||||
|
<field name="name">EE: US WA Washington State LNI</field>
|
||||||
|
<field name="code">EE_US_WA_LNI</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result = is_us_state(payslip, 'WA') and payslip.contract_id.us_payroll_config_value('workers_comp_ee_code') and worked_days.WORK100 and worked_days.WORK100.number_of_hours and payslip.rule_parameter(payslip.contract_id.us_payroll_config_value('workers_comp_ee_code'))</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = worked_days.WORK100.number_of_hours, -payslip.rule_parameter(payslip.contract_id.us_payroll_config_value('workers_comp_ee_code'))</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wa_dor_lni"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
118
l10n_us_hr_payroll/data/state/wi_wisconsin.xml
Normal file
118
l10n_us_hr_payroll/data/state/wi_wisconsin.xml
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_wi_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WI Wisconsin SUTA Wage Base</field>
|
||||||
|
<field name="code">us_wi_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wi_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">14000.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wi_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<!-- Rate based on this file https://dwd.wisconsin.gov/ui/employers/taxrates.htm -->
|
||||||
|
<record id="rule_parameter_us_wi_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WI Wisconsin SUTA Rate</field>
|
||||||
|
<field name="code">us_wi_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wi_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">3.05</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wi_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<record id="rule_parameter_us_wi_sit_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WI Wisconsin Exemption Rate</field>
|
||||||
|
<field name="code">us_wi_sit_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wi_sit_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">22</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wi_sit_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Table based on https://www.revenue.wi.gov/DOR%20Publications/pb166.pdf page 25. -->
|
||||||
|
<record id="rule_parameter_us_wi_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WI Wisconsin SIT Tax Rate</field>
|
||||||
|
<field name="code">us_wi_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wi_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': (
|
||||||
|
( 5730, 0.0000, 0.00),
|
||||||
|
( 15200, 4.0000, 0.00),
|
||||||
|
( 16486, 4.4800, 378.80),
|
||||||
|
( 26227, 6.5408, 436.41),
|
||||||
|
( 62950, 7.0224, 1073.55),
|
||||||
|
(240190, 6.2700, 3652.39),
|
||||||
|
( 'inf', 7.6500, 14765.34),
|
||||||
|
),
|
||||||
|
'married': (
|
||||||
|
( 7870, 0.0000, 0.00),
|
||||||
|
( 18780, 4.0000, 0.00),
|
||||||
|
( 21400, 5.8400, 436.40),
|
||||||
|
( 28308, 7.0080, 589.41),
|
||||||
|
( 60750, 7.5240, 1073.52),
|
||||||
|
(240190, 6.2700, 3514.46),
|
||||||
|
( 'inf', 7.6500, 14765.35),
|
||||||
|
),
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wi_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_wi_dor" model="res.partner">
|
||||||
|
<field name="name">US Wisconsin - Department of Workforce Development - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_wi_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Wisconsin - Department of Revenue - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_wi_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US WI Wisconsin State Unemployment</field>
|
||||||
|
<field name="code">ER_US_WI_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_wi_suta_wage_base', rate='us_wi_suta_rate', state_code='WI')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_wi_suta_wage_base', rate='us_wi_suta_rate', state_code='WI')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wi_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_wi_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US WI Wisconsin State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_WI_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = wi_wisconsin_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = wi_wisconsin_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wi_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
215
l10n_us_hr_payroll/data/state/wv_west_virginia.xml
Normal file
215
l10n_us_hr_payroll/data/state/wv_west_virginia.xml
Normal file
@@ -0,0 +1,215 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_wv_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WV West Virginia SUTA Wage Base</field>
|
||||||
|
<field name="code">us_wv_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wv_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">12000.0</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wv_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_wv_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WV West Virginia SUTA Rate</field>
|
||||||
|
<field name="code">us_wv_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wv_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wv_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- Table base on this https://tax.wv.gov/Documents/TaxForms/it100.1a.pdf page 16-->
|
||||||
|
<record id="rule_parameter_us_wv_sit_exemption_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WV West Virginia Exemption Rate</field>
|
||||||
|
<field name="code">us_wv_sit_exemption_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wv_sit_exemption_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly' : 38.46,
|
||||||
|
'bi-weekly' : 76.92,
|
||||||
|
'semi-monthly': 83.33,
|
||||||
|
'monthly' : 166.67,
|
||||||
|
'annually': 2000.00,
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wv_sit_exemption_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- Table base on this https://tax.wv.gov/Documents/TaxForms/it100.1a.pdf page 17-->
|
||||||
|
<record id="rule_parameter_us_wv_sit_tax_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WV West Virginia SIT Tax Rate</field>
|
||||||
|
<field name="code">us_wv_sit_tax_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wv_sit_tax_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
'weekly':(
|
||||||
|
( 192, 0.00, 3.0),
|
||||||
|
( 481, 5.76, 4.0),
|
||||||
|
( 769, 17.32, 4.5),
|
||||||
|
( 1154, 30.28, 6.0),
|
||||||
|
('inf', 53.38, 6.5),
|
||||||
|
),
|
||||||
|
'bi-weekly':(
|
||||||
|
( 385, 0.00, 3.0),
|
||||||
|
( 962, 11.55, 4.0),
|
||||||
|
( 1538, 34.63, 4.5),
|
||||||
|
( 2308, 60.55, 6.0),
|
||||||
|
('inf', 106.75, 6.5),
|
||||||
|
),
|
||||||
|
'semi-monthly':(
|
||||||
|
( 417, 0.00, 3.0),
|
||||||
|
( 1042 , 12.51, 4.0),
|
||||||
|
( 1667, 37.51, 4.5),
|
||||||
|
( 2500, 65.64, 6.0),
|
||||||
|
('inf', 115.62, 6.5),
|
||||||
|
),
|
||||||
|
'monthly':(
|
||||||
|
( 833, 0.00, 3.0),
|
||||||
|
( 2083, 24.99, 4.0),
|
||||||
|
( 3333, 74.99, 4.5),
|
||||||
|
( 5000, 131.24, 6.0),
|
||||||
|
('inf', 231.26, 6.5),
|
||||||
|
),
|
||||||
|
'annually':(
|
||||||
|
( 10000, 0.00, 3.0),
|
||||||
|
( 25000, 300.00, 4.0),
|
||||||
|
( 40000, 900.00, 4.5),
|
||||||
|
( 60000, 1575.00, 6.0),
|
||||||
|
( 'inf', 2775.00, 6.5),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
'weekly':(
|
||||||
|
( 115, 0.00, 3.0),
|
||||||
|
( 288, 3.45, 4.0),
|
||||||
|
( 462, 10.37, 4.5),
|
||||||
|
( 692, 18.20, 6.0),
|
||||||
|
('inf', 32.00, 6.5),
|
||||||
|
),
|
||||||
|
'bi-weekly':(
|
||||||
|
( 231, 0.00, 3.0),
|
||||||
|
( 577, 6.93, 4.0),
|
||||||
|
( 923, 20.77, 4.5),
|
||||||
|
( 1385, 36.34, 6.0),
|
||||||
|
('inf', 64.06, 6.5),
|
||||||
|
),
|
||||||
|
'semi-monthly':(
|
||||||
|
( 250, 0.00, 3.0),
|
||||||
|
( 625, 7.50, 4.0),
|
||||||
|
( 1000, 22.50, 4.5),
|
||||||
|
( 1500, 39.38, 6.0),
|
||||||
|
('inf', 69.38, 6.5),
|
||||||
|
),
|
||||||
|
'monthly':(
|
||||||
|
( 500, 0.00, 3.0),
|
||||||
|
( 1250, 15.00, 4.0),
|
||||||
|
( 2000, 45.00, 4.5),
|
||||||
|
( 3000, 78.75, 6.0),
|
||||||
|
('inf', 138.75, 6.5),
|
||||||
|
),
|
||||||
|
'annually':(
|
||||||
|
( 6000, 0.00, 3.0),
|
||||||
|
(15000, 180.00, 4.0),
|
||||||
|
(24000, 540.00, 4.5),
|
||||||
|
(36000, 945.00, 6.0),
|
||||||
|
('inf', 1665.00, 6.5),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'head_household': {
|
||||||
|
'weekly':(
|
||||||
|
( 192, 0.00, 3.0),
|
||||||
|
( 481, 5.76, 4.0),
|
||||||
|
( 769, 17.32, 4.5),
|
||||||
|
( 1154, 30.28, 6.0),
|
||||||
|
('inf', 53.38, 6.5),
|
||||||
|
),
|
||||||
|
'bi-weekly':(
|
||||||
|
( 385, 0.00, 3.0),
|
||||||
|
( 962, 11.55, 4.0),
|
||||||
|
( 1538, 34.63, 4.5),
|
||||||
|
( 2308, 60.55, 6.0),
|
||||||
|
('inf', 106.75, 6.5),
|
||||||
|
),
|
||||||
|
'semi-monthly':(
|
||||||
|
( 417, 0.00, 3.0),
|
||||||
|
( 1042, 12.51, 4.0),
|
||||||
|
( 1667, 37.51, 4.5),
|
||||||
|
( 2500, 65.64, 6.0),
|
||||||
|
('inf', 115.62, 6.5),
|
||||||
|
),
|
||||||
|
'monthly':(
|
||||||
|
( 833, 0.00, 3.0),
|
||||||
|
( 2083, 24.99, 4.0),
|
||||||
|
( 3333, 74.99, 4.5),
|
||||||
|
( 5000, 131.24, 6.0),
|
||||||
|
('inf', 231.26, 6.5),
|
||||||
|
),
|
||||||
|
'annually':(
|
||||||
|
( 10000, 0.00, 3.0),
|
||||||
|
( 25000, 300.00, 4.0),
|
||||||
|
( 40000, 900.00, 4.5),
|
||||||
|
( 60000, 1575.00, 6.0),
|
||||||
|
( 'inf', 2775.00, 6.5),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wv_sit_tax_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_wv_dor" model="res.partner">
|
||||||
|
<field name="name">US West Virginia - WorkForce - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_wv_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US West Virginia - Department of Revenue - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_wv_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US WV West Virginia State Unemployment</field>
|
||||||
|
<field name="code">ER_US_WV_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_wv_suta_wage_base', rate='us_wv_suta_rate', state_code='WV')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_wv_suta_wage_base', rate='us_wv_suta_rate', state_code='WV')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wv_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_rule_ee_us_wv_sit" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="195"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||||
|
<field name="name">EE: US WV West Virginia State Income Tax Withholding</field>
|
||||||
|
<field name="code">EE_US_WV_SIT</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = wv_west_virginia_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = wv_west_virginia_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wv_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
61
l10n_us_hr_payroll/data/state/wy_wyoming.xml
Normal file
61
l10n_us_hr_payroll/data/state/wy_wyoming.xml
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<record id="rule_parameter_us_wy_suta_wage_base" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WY Wyoming SUTA Wage Base</field>
|
||||||
|
<field name="code">us_wy_suta_wage_base</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wy_suta_wage_base_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">25400.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wy_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_wy_suta_wage_base_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">26400.00</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wy_suta_wage_base"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<record id="rule_parameter_us_wy_suta_rate" model="hr.rule.parameter">
|
||||||
|
<field name="name">US WY Wyoming SUTA Rate</field>
|
||||||
|
<field name="code">us_wy_suta_rate</field>
|
||||||
|
<field name="country_id" ref="base.us"/>
|
||||||
|
</record>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wy_suta_rate_2019" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">2.10</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wy_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_wy_suta_rate_2020" model="hr.rule.parameter.value">
|
||||||
|
<field name="parameter_value">8.5</field>
|
||||||
|
<field name="rule_parameter_id" ref="rule_parameter_us_wy_suta_rate"/>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Partners and Contribution Registers -->
|
||||||
|
<record id="res_partner_us_wy_dor" model="res.partner">
|
||||||
|
<field name="name">US Wyoming - Department of Workforce Services (WDWS) - Unemployment Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_wy_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||||
|
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||||
|
<field name="name">ER: US WY Wyoming State Unemployment</field>
|
||||||
|
<field name="code">ER_US_WY_SUTA</field>
|
||||||
|
<field name="condition_select">python</field>
|
||||||
|
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_wy_suta_wage_base', rate='us_wy_suta_rate', state_code='WY')</field>
|
||||||
|
<field name="amount_select">code</field>
|
||||||
|
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_wy_suta_wage_base', rate='us_wy_suta_rate', state_code='WY')</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wy_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
30
l10n_us_hr_payroll/migrations/13.0.0.0.1/post-migration.py
Normal file
30
l10n_us_hr_payroll/migrations/13.0.0.0.1/post-migration.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
import odoo
|
||||||
|
|
||||||
|
|
||||||
|
def migrate(cr, version):
|
||||||
|
"""
|
||||||
|
Post-migration no contracts will have any structure types.
|
||||||
|
Unfortunately, we have no way of knowing if they used USA in the past
|
||||||
|
so we have to just assume they did (knowing of course that l10n_us_hr_payroll was installed)...
|
||||||
|
"""
|
||||||
|
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
|
||||||
|
structure_type = env.ref('l10n_us_hr_payroll.structure_type_employee')
|
||||||
|
cr.execute("UPDATE hr_contract "
|
||||||
|
"SET structure_type_id = %s "
|
||||||
|
"WHERE structure_type_id is null AND state in ('draft', 'open')", (structure_type.id, ))
|
||||||
|
|
||||||
|
"""
|
||||||
|
Additionally, it is known that post-migration databases will have bad
|
||||||
|
work entry record states (and you will spend time trying to fix them
|
||||||
|
before you could run a payroll batch).
|
||||||
|
"""
|
||||||
|
default_work_entry_type = env.ref('hr_work_entry.work_entry_type_attendance', raise_if_not_found=False)
|
||||||
|
if default_work_entry_type:
|
||||||
|
cr.execute("UPDATE hr_work_entry "
|
||||||
|
"SET work_entry_type_id = %s "
|
||||||
|
"WHERE work_entry_type_id is null", (default_work_entry_type.id, ))
|
||||||
|
cr.execute("UPDATE hr_work_entry "
|
||||||
|
"SET state = 'draft' "
|
||||||
|
"WHERE state = 'conflict'")
|
||||||
26
l10n_us_hr_payroll/migrations/13.0.0.0.1/pre-migration.py
Normal file
26
l10n_us_hr_payroll/migrations/13.0.0.0.1/pre-migration.py
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
import odoo
|
||||||
|
|
||||||
|
|
||||||
|
def migrate(cr, version):
|
||||||
|
"""
|
||||||
|
Salary Rules can be archived by Odoo S.A. during migration.
|
||||||
|
This leaves them archived after the migration, and even un-archiving them
|
||||||
|
is not enough because they will then be pointed to a "migrated" structure.
|
||||||
|
"""
|
||||||
|
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
|
||||||
|
xml_refs = env['ir.model.data'].search([
|
||||||
|
('module', '=', 'l10n_us_hr_payroll'),
|
||||||
|
('model', '=', 'hr.salary.rule'),
|
||||||
|
])
|
||||||
|
# I don't know why Odoo makes these non-updatable...
|
||||||
|
xml_refs.write({'noupdate': False})
|
||||||
|
|
||||||
|
rule_ids = xml_refs.mapped('res_id')
|
||||||
|
rules = env['hr.salary.rule'].browse(rule_ids)
|
||||||
|
rules.write({'active': True})
|
||||||
|
|
||||||
|
# Cannot add new selection type without fixing missing
|
||||||
|
cr.execute('UPDATE hr_payroll_structure SET schedule_pay = \'monthly\' WHERE schedule_pay is null;')
|
||||||
|
cr.execute('UPDATE hr_payroll_structure_type SET default_schedule_pay = \'monthly\' WHERE default_schedule_pay is null;')
|
||||||
6
l10n_us_hr_payroll/models/__init__.py
Normal file
6
l10n_us_hr_payroll/models/__init__.py
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from . import hr_contract
|
||||||
|
from . import hr_payslip
|
||||||
|
from . import update
|
||||||
|
from . import us_payroll_config
|
||||||
1
l10n_us_hr_payroll/models/federal/__init__.py
Normal file
1
l10n_us_hr_payroll/models/federal/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
79
l10n_us_hr_payroll/models/federal/fed_940.py
Normal file
79
l10n_us_hr_payroll/models/federal/fed_940.py
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
|
||||||
|
def futa_wage(payslip, categories):
|
||||||
|
"""
|
||||||
|
Returns FUTA eligible wage for current Payslip (no wage_base, just by categories)
|
||||||
|
WAGE = GROSS - ALW_FUTA_EXEMPT + DED_FUTA_EXEMPT
|
||||||
|
:return: wage
|
||||||
|
"""
|
||||||
|
wage = categories.GROSS
|
||||||
|
|
||||||
|
wage -= categories.ALW_FUTA_EXEMPT + \
|
||||||
|
categories.ALW_FIT_FUTA_EXEMPT + \
|
||||||
|
categories.ALW_FIT_FICA_FUTA_EXEMPT + \
|
||||||
|
categories.ALW_FICA_FUTA_EXEMPT
|
||||||
|
|
||||||
|
wage += categories.DED_FUTA_EXEMPT + \
|
||||||
|
categories.DED_FIT_FUTA_EXEMPT + \
|
||||||
|
categories.DED_FIT_FICA_FUTA_EXEMPT + \
|
||||||
|
categories.DED_FICA_FUTA_EXEMPT
|
||||||
|
|
||||||
|
return wage
|
||||||
|
|
||||||
|
|
||||||
|
def futa_wage_ytd(payslip, categories):
|
||||||
|
"""
|
||||||
|
Returns Year to Date FUTA eligible wages
|
||||||
|
WAGE = GROSS - ALW_FUTA_EXEMPT + DED_FUTA_EXEMPT
|
||||||
|
:return: 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('ALW_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('ALW_FIT_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('ALW_FIT_FICA_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('ALW_FICA_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') + \
|
||||||
|
payslip.sum_category('DED_FIT_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('DED_FIT_FICA_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('DED_FICA_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
|
||||||
|
|
||||||
|
ytd_wage += payslip.contract_id.external_wages
|
||||||
|
return ytd_wage
|
||||||
|
|
||||||
|
|
||||||
|
def er_us_940_futa(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns FUTA eligible wage and rate.
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Determine Rate.
|
||||||
|
if payslip.contract_id.futa_type == payslip.contract_id.FUTA_TYPE_EXEMPT:
|
||||||
|
# Exit early
|
||||||
|
return 0.0, 0.0
|
||||||
|
elif payslip.contract_id.futa_type == payslip.contract_id.FUTA_TYPE_BASIC:
|
||||||
|
result_rate = -payslip.rule_parameter('fed_940_futa_rate_basic')
|
||||||
|
else:
|
||||||
|
result_rate = -payslip.rule_parameter('fed_940_futa_rate_normal')
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = futa_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
ytd_wage = futa_wage_ytd(payslip, categories)
|
||||||
|
wage_base = payslip.rule_parameter('fed_940_futa_wage_base')
|
||||||
|
remaining = wage_base - ytd_wage
|
||||||
|
|
||||||
|
if remaining < 0.0:
|
||||||
|
result = 0.0
|
||||||
|
elif remaining < wage:
|
||||||
|
result = remaining
|
||||||
|
else:
|
||||||
|
result = wage
|
||||||
|
|
||||||
|
return result, result_rate
|
||||||
320
l10n_us_hr_payroll/models/federal/fed_941.py
Normal file
320
l10n_us_hr_payroll/models/federal/fed_941.py
Normal file
@@ -0,0 +1,320 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
# import logging
|
||||||
|
# _logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def fica_wage(payslip, categories):
|
||||||
|
"""
|
||||||
|
Returns FICA eligible wage for current Payslip (no wage_base, just by categories)
|
||||||
|
WAGE = GROSS - ALW_FICA_EXEMPT + DED_FICA_EXEMPT
|
||||||
|
:return: wage
|
||||||
|
"""
|
||||||
|
wage = categories.GROSS
|
||||||
|
|
||||||
|
less_exempt = categories.ALW_FICA_EXEMPT + \
|
||||||
|
categories.ALW_FIT_FICA_EXEMPT + \
|
||||||
|
categories.ALW_FIT_FICA_FUTA_EXEMPT + \
|
||||||
|
categories.ALW_FICA_FUTA_EXEMPT
|
||||||
|
|
||||||
|
plus_exempt = categories.DED_FICA_EXEMPT + \
|
||||||
|
categories.DED_FIT_FICA_EXEMPT + \
|
||||||
|
categories.DED_FIT_FICA_FUTA_EXEMPT + \
|
||||||
|
categories.DED_FICA_FUTA_EXEMPT
|
||||||
|
# _logger.info('fica wage GROSS: %0.2f less exempt ALW: %0.2f plus exempt DED: %0.2f' % (wage, less_exempt, plus_exempt))
|
||||||
|
return wage - less_exempt + plus_exempt
|
||||||
|
|
||||||
|
|
||||||
|
def fica_wage_ytd(payslip, categories):
|
||||||
|
"""
|
||||||
|
Returns Year to Date FICA eligible wages
|
||||||
|
WAGE = GROSS - ALW_FICA_EXEMPT + DED_FICA_EXEMPT
|
||||||
|
:return: wage
|
||||||
|
"""
|
||||||
|
year = payslip.dict.get_year()
|
||||||
|
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year+1) + '-01-01')
|
||||||
|
|
||||||
|
less_exempt = payslip.sum_category('ALW_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('ALW_FIT_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('ALW_FIT_FICA_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('ALW_FICA_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
|
||||||
|
|
||||||
|
plus_exempt = payslip.sum_category('DED_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('DED_FIT_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('DED_FIT_FICA_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('DED_FICA_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
|
||||||
|
|
||||||
|
external_wages = payslip.dict.contract_id.external_wages
|
||||||
|
# _logger.info('fica ytd wage GROSS: %0.2f less exempt ALW: %0.2f plus exempt DED: %0.2f plus external: %0.2f' % (ytd_wage, less_exempt, plus_exempt, external_wages))
|
||||||
|
return ytd_wage - less_exempt + plus_exempt + external_wages
|
||||||
|
|
||||||
|
|
||||||
|
def ee_us_941_fica_ss(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns FICA Social Security eligible wage and rate.
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
exempt = payslip.contract_id.us_payroll_config_value('fed_941_fica_exempt')
|
||||||
|
if exempt:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Rate.
|
||||||
|
result_rate = -payslip.rule_parameter('fed_941_fica_ss_rate')
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = fica_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
ytd_wage = fica_wage_ytd(payslip, categories)
|
||||||
|
wage_base = payslip.rule_parameter('fed_941_fica_ss_wage_base')
|
||||||
|
remaining = wage_base - ytd_wage
|
||||||
|
|
||||||
|
if remaining < 0.0:
|
||||||
|
result = 0.0
|
||||||
|
elif remaining < wage:
|
||||||
|
result = remaining
|
||||||
|
else:
|
||||||
|
result = wage
|
||||||
|
|
||||||
|
return result, result_rate
|
||||||
|
|
||||||
|
|
||||||
|
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.
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
exempt = payslip.contract_id.us_payroll_config_value('fed_941_fica_exempt')
|
||||||
|
if exempt:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Rate.
|
||||||
|
result_rate = -payslip.rule_parameter('fed_941_fica_m_rate')
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = fica_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
ytd_wage = fica_wage_ytd(payslip, categories)
|
||||||
|
wage_base = float(payslip.rule_parameter('fed_941_fica_m_wage_base')) # inf
|
||||||
|
remaining = wage_base - ytd_wage
|
||||||
|
|
||||||
|
if remaining < 0.0:
|
||||||
|
result = 0.0
|
||||||
|
elif remaining < wage:
|
||||||
|
result = remaining
|
||||||
|
else:
|
||||||
|
result = wage
|
||||||
|
|
||||||
|
return result, result_rate
|
||||||
|
|
||||||
|
|
||||||
|
er_us_941_fica_m = ee_us_941_fica_m
|
||||||
|
|
||||||
|
|
||||||
|
def ee_us_941_fica_m_add(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns FICA Medicare Additional eligible wage and rate.
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
exempt = payslip.contract_id.us_payroll_config_value('fed_941_fica_exempt')
|
||||||
|
if exempt:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Rate.
|
||||||
|
result_rate = -payslip.rule_parameter('fed_941_fica_m_add_rate')
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = fica_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
ytd_wage = fica_wage_ytd(payslip, categories)
|
||||||
|
wage_start = payslip.rule_parameter('fed_941_fica_m_add_wage_start')
|
||||||
|
existing_wage = ytd_wage - wage_start
|
||||||
|
|
||||||
|
if existing_wage >= 0.0:
|
||||||
|
result = wage
|
||||||
|
elif wage + existing_wage > 0.0:
|
||||||
|
result = wage + existing_wage
|
||||||
|
else:
|
||||||
|
result = 0.0
|
||||||
|
|
||||||
|
return result, result_rate
|
||||||
|
|
||||||
|
|
||||||
|
def fit_wage(payslip, categories):
|
||||||
|
"""
|
||||||
|
Returns FIT eligible wage for current Payslip (no wage_base, just by categories)
|
||||||
|
WAGE = GROSS - ALW_FIT_EXEMPT + DED_FIT_EXEMPT
|
||||||
|
:return: wage
|
||||||
|
"""
|
||||||
|
wage = categories.GROSS
|
||||||
|
|
||||||
|
wage -= categories.ALW_FIT_EXEMPT + \
|
||||||
|
categories.ALW_FIT_FICA_EXEMPT + \
|
||||||
|
categories.ALW_FIT_FICA_FUTA_EXEMPT + \
|
||||||
|
categories.ALW_FIT_FUTA_EXEMPT
|
||||||
|
|
||||||
|
wage += categories.DED_FIT_EXEMPT + \
|
||||||
|
categories.DED_FIT_FICA_EXEMPT + \
|
||||||
|
categories.DED_FIT_FICA_FUTA_EXEMPT + \
|
||||||
|
categories.DED_FIT_FUTA_EXEMPT
|
||||||
|
|
||||||
|
return wage
|
||||||
|
|
||||||
|
|
||||||
|
def fit_wage_ytd(payslip, categories):
|
||||||
|
"""
|
||||||
|
Returns Year to Date FIT eligible wages
|
||||||
|
WAGE = GROSS - ALW_FIT_EXEMPT + DED_FIT_EXEMPT
|
||||||
|
:return: 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('ALW_FIT_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('ALW_FIT_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('ALW_FIT_FICA_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('ALW_FIT_FUTA_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') + \
|
||||||
|
payslip.sum_category('DED_FIT_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('DED_FIT_FICA_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01') + \
|
||||||
|
payslip.sum_category('DED_FIT_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
|
||||||
|
|
||||||
|
ytd_wage += payslip.contract_id.external_wages
|
||||||
|
return ytd_wage
|
||||||
|
|
||||||
|
|
||||||
|
# Federal Income Tax
|
||||||
|
def ee_us_941_fit(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns Wage and rate that is computed given the amount to withhold.
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
filing_status = payslip.contract_id.us_payroll_config_value('fed_941_fit_w4_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.contract_id.schedule_pay
|
||||||
|
wage = fit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
#_logger.warn('initial gross wage: ' + str(wage))
|
||||||
|
year = payslip.dict.get_year()
|
||||||
|
if year >= 2020:
|
||||||
|
# Large changes in Federal Income Tax in 2020 and the W4
|
||||||
|
# We will assume that your W4 is the 2020 version
|
||||||
|
# Steps are from IRS Publication 15-T
|
||||||
|
#
|
||||||
|
# Step 1
|
||||||
|
working_wage = wage
|
||||||
|
is_nra = payslip.contract_id.us_payroll_config_value('fed_941_fit_w4_is_nonresident_alien')
|
||||||
|
if is_nra:
|
||||||
|
nra_table = payslip.rule_parameter('fed_941_fit_nra_additional')
|
||||||
|
working_wage += nra_table.get(schedule_pay, 0.0)
|
||||||
|
#_logger.warn(' is_nrm after wage: ' + str(working_wage))
|
||||||
|
|
||||||
|
pay_periods = payslip.dict.get_pay_periods_in_year()
|
||||||
|
wage_annual = pay_periods * working_wage
|
||||||
|
#_logger.warn('annual wage: ' + str(wage_annual))
|
||||||
|
wage_annual += payslip.contract_id.us_payroll_config_value('fed_941_fit_w4_other_income')
|
||||||
|
#_logger.warn(' after other income: ' + str(wage_annual))
|
||||||
|
|
||||||
|
deductions = payslip.contract_id.us_payroll_config_value('fed_941_fit_w4_deductions')
|
||||||
|
#_logger.warn('deductions from W4: ' + str(deductions))
|
||||||
|
|
||||||
|
higher_rate_type = payslip.contract_id.us_payroll_config_value('fed_941_fit_w4_multiple_jobs_higher')
|
||||||
|
if not higher_rate_type:
|
||||||
|
deductions += 12900.0 if filing_status == 'married' else 8600.0
|
||||||
|
#_logger.warn(' deductions after standard deduction: ' + str(deductions))
|
||||||
|
|
||||||
|
adjusted_wage_annual = wage_annual - deductions
|
||||||
|
if adjusted_wage_annual < 0.0:
|
||||||
|
adjusted_wage_annual = 0.0
|
||||||
|
#_logger.warn('adusted annual wage: ' + str(adjusted_wage_annual))
|
||||||
|
|
||||||
|
# Step 2
|
||||||
|
if filing_status == 'single':
|
||||||
|
tax_tables = payslip.rule_parameter('fed_941_fit_table_single')
|
||||||
|
elif filing_status == 'married':
|
||||||
|
tax_tables = payslip.rule_parameter('fed_941_fit_table_married')
|
||||||
|
else:
|
||||||
|
# married_as_single for historic reasons
|
||||||
|
tax_tables = payslip.rule_parameter('fed_941_fit_table_hh')
|
||||||
|
|
||||||
|
if higher_rate_type:
|
||||||
|
tax_table = tax_tables['higher']
|
||||||
|
else:
|
||||||
|
tax_table = tax_tables['standard']
|
||||||
|
|
||||||
|
selected_row = None
|
||||||
|
for row in tax_table:
|
||||||
|
if row[0] <= adjusted_wage_annual:
|
||||||
|
selected_row = row
|
||||||
|
else:
|
||||||
|
# First row where wage is higher than adjusted_wage_annual
|
||||||
|
break
|
||||||
|
|
||||||
|
wage_threshold, base_withholding_amount, marginal_rate = selected_row
|
||||||
|
#_logger.warn(' selected row: ' + str(selected_row))
|
||||||
|
working_wage = adjusted_wage_annual - wage_threshold
|
||||||
|
tentative_withholding_amount = (working_wage * marginal_rate) + base_withholding_amount
|
||||||
|
tentative_withholding_amount = tentative_withholding_amount / pay_periods
|
||||||
|
#_logger.warn('tenative withholding amount: ' + str(tentative_withholding_amount))
|
||||||
|
|
||||||
|
# Step 3
|
||||||
|
dependent_credit = payslip.contract_id.us_payroll_config_value('fed_941_fit_w4_dependent_credit')
|
||||||
|
dependent_credit = dependent_credit / pay_periods
|
||||||
|
#_logger.warn('dependent credit (per period): ' + str(dependent_credit))
|
||||||
|
tentative_withholding_amount -= dependent_credit
|
||||||
|
if tentative_withholding_amount < 0.0:
|
||||||
|
tentative_withholding_amount = 0.0
|
||||||
|
|
||||||
|
# Step 4
|
||||||
|
withholding_amount = tentative_withholding_amount + payslip.contract_id.us_payroll_config_value('fed_941_fit_w4_additional_withholding')
|
||||||
|
#_logger.warn('final withholding amount: ' + str(withholding_amount))
|
||||||
|
# Ideally we would set the 'taxable wage' as the result and compute the percentage tax.
|
||||||
|
# This is off by 1 penny across our tests, but I feel like it is worth it for the added reporting.
|
||||||
|
# - Jared Kipe 2019 during Odoo 13.0 rewrite.
|
||||||
|
#
|
||||||
|
# return -withholding_amount, 100.0
|
||||||
|
return wage, -(withholding_amount / wage * 100.0)
|
||||||
|
else:
|
||||||
|
working_wage = wage
|
||||||
|
is_nra = payslip.contract_id.us_payroll_config_value('fed_941_fit_w4_is_nonresident_alien')
|
||||||
|
if is_nra:
|
||||||
|
nra_table = payslip.rule_parameter('fed_941_fit_nra_additional')
|
||||||
|
working_wage += nra_table[schedule_pay]
|
||||||
|
|
||||||
|
allowance_table = payslip.rule_parameter('fed_941_fit_allowance')
|
||||||
|
allowances = payslip.contract_id.us_payroll_config_value('fed_941_fit_w4_allowances')
|
||||||
|
working_wage -= allowance_table[schedule_pay] * allowances
|
||||||
|
tax = 0.0
|
||||||
|
last_limit = 0.0
|
||||||
|
if filing_status == 'married':
|
||||||
|
tax_table = payslip.rule_parameter('fed_941_fit_table_married')
|
||||||
|
else:
|
||||||
|
tax_table = payslip.rule_parameter('fed_941_fit_table_single')
|
||||||
|
for row in tax_table[schedule_pay]:
|
||||||
|
limit, base, percent = row
|
||||||
|
limit = float(limit) # 'inf'
|
||||||
|
if working_wage <= limit:
|
||||||
|
tax = base + ((working_wage - last_limit) * (percent / 100.0))
|
||||||
|
break
|
||||||
|
last_limit = limit
|
||||||
|
|
||||||
|
tax += payslip.contract_id.us_payroll_config_value('fed_941_fit_w4_additional_withholding')
|
||||||
|
# Ideally we would set the 'taxable wage' as the result and compute the percentage tax.
|
||||||
|
# This is off by 1 penny across our tests, but I feel like it is worth it for the added reporting.
|
||||||
|
# - Jared Kipe 2019 during Odoo 13.0 rewrite.
|
||||||
|
#
|
||||||
|
# return -tax, 100.0
|
||||||
|
return wage, -(tax / wage * 100.0)
|
||||||
23
l10n_us_hr_payroll/models/hr_contract.py
Normal file
23
l10n_us_hr_payroll/models/hr_contract.py
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from odoo import api, fields, models
|
||||||
|
from .us_payroll_config import FUTA_TYPE_NORMAL, \
|
||||||
|
FUTA_TYPE_BASIC, \
|
||||||
|
FUTA_TYPE_EXEMPT
|
||||||
|
|
||||||
|
|
||||||
|
class USHRContract(models.Model):
|
||||||
|
_inherit = 'hr.contract'
|
||||||
|
|
||||||
|
FUTA_TYPE_NORMAL = FUTA_TYPE_NORMAL
|
||||||
|
FUTA_TYPE_BASIC = FUTA_TYPE_BASIC
|
||||||
|
FUTA_TYPE_EXEMPT = FUTA_TYPE_EXEMPT
|
||||||
|
|
||||||
|
us_payroll_config_id = fields.Many2one('hr.contract.us_payroll_config', 'Payroll Forms')
|
||||||
|
external_wages = fields.Float(string='External Existing Wages')
|
||||||
|
|
||||||
|
# Simplified fields for easier rules, state code will exempt based on contract's futa_type
|
||||||
|
futa_type = fields.Selection(related='us_payroll_config_id.fed_940_type')
|
||||||
|
|
||||||
|
def us_payroll_config_value(self, name):
|
||||||
|
return self.us_payroll_config_id[name]
|
||||||
128
l10n_us_hr_payroll/models/hr_payslip.py
Normal file
128
l10n_us_hr_payroll/models/hr_payslip.py
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from odoo import api, fields, models
|
||||||
|
|
||||||
|
from .federal.fed_940 import er_us_940_futa
|
||||||
|
from .federal.fed_941 import ee_us_941_fica_ss, \
|
||||||
|
ee_us_941_fica_m, \
|
||||||
|
ee_us_941_fica_m_add,\
|
||||||
|
er_us_941_fica_ss, \
|
||||||
|
er_us_941_fica_m, \
|
||||||
|
ee_us_941_fit
|
||||||
|
from .state.general import general_state_unemployment, \
|
||||||
|
general_state_income_withholding, \
|
||||||
|
is_us_state
|
||||||
|
from .state.al_alabama import al_alabama_state_income_withholding
|
||||||
|
from .state.ar_arkansas import ar_arkansas_state_income_withholding
|
||||||
|
from .state.az_arizona import az_arizona_state_income_withholding
|
||||||
|
from .state.ca_california import ca_california_state_income_withholding
|
||||||
|
from .state.co_colorado import co_colorado_state_income_withholding
|
||||||
|
from .state.ct_connecticut import ct_connecticut_state_income_withholding
|
||||||
|
from .state.de_delaware import de_delaware_state_income_withholding
|
||||||
|
from .state.ga_georgia import ga_georgia_state_income_withholding
|
||||||
|
from .state.hi_hawaii import hi_hawaii_state_income_withholding
|
||||||
|
from .state.ia_iowa import ia_iowa_state_income_withholding
|
||||||
|
from .state.id_idaho import id_idaho_state_income_withholding
|
||||||
|
from .state.il_illinois import il_illinois_state_income_withholding
|
||||||
|
from .state.in_indiana import in_indiana_state_income_withholding
|
||||||
|
from .state.ks_kansas import ks_kansas_state_income_withholding
|
||||||
|
from .state.ky_kentucky import ky_kentucky_state_income_withholding
|
||||||
|
from .state.la_louisiana import la_louisiana_state_income_withholding
|
||||||
|
from .state.me_maine import me_maine_state_income_withholding
|
||||||
|
from .state.mi_michigan import mi_michigan_state_income_withholding
|
||||||
|
from .state.mn_minnesota import mn_minnesota_state_income_withholding
|
||||||
|
from .state.mo_missouri import mo_missouri_state_income_withholding
|
||||||
|
from .state.ms_mississippi import ms_mississippi_state_income_withholding
|
||||||
|
from .state.mt_montana import mt_montana_state_income_withholding
|
||||||
|
from .state.nc_northcarolina import nc_northcarolina_state_income_withholding
|
||||||
|
from .state.nd_north_dakota import nd_north_dakota_state_income_withholding
|
||||||
|
from .state.ne_nebraska import ne_nebraska_state_income_withholding
|
||||||
|
from .state.nj_newjersey import nj_newjersey_state_income_withholding
|
||||||
|
from .state.nm_new_mexico import nm_new_mexico_state_income_withholding
|
||||||
|
from .state.ny_new_york import ny_new_york_state_income_withholding
|
||||||
|
from .state.oh_ohio import oh_ohio_state_income_withholding
|
||||||
|
from .state.ok_oklahoma import ok_oklahoma_state_income_withholding
|
||||||
|
from .state.ri_rhode_island import ri_rhode_island_state_income_withholding
|
||||||
|
from .state.sc_south_carolina import sc_south_carolina_state_income_withholding
|
||||||
|
from .state.ut_utah import ut_utah_state_income_withholding
|
||||||
|
from .state.vt_vermont import vt_vermont_state_income_withholding
|
||||||
|
from .state.va_virginia import va_virginia_state_income_withholding
|
||||||
|
from .state.wa_washington import wa_washington_fml_er, \
|
||||||
|
wa_washington_fml_ee
|
||||||
|
from .state.wi_wisconsin import wi_wisconsin_state_income_withholding
|
||||||
|
from .state.wv_west_virginia import wv_west_virginia_state_income_withholding
|
||||||
|
|
||||||
|
|
||||||
|
class HRPayslip(models.Model):
|
||||||
|
_inherit = 'hr.payslip'
|
||||||
|
|
||||||
|
# From IRS Publication 15-T or logically (annually, bi-monthly)
|
||||||
|
PAY_PERIODS_IN_YEAR = {
|
||||||
|
'annually': 1,
|
||||||
|
'semi-annually': 2,
|
||||||
|
'quarterly': 4,
|
||||||
|
'bi-monthly': 6,
|
||||||
|
'monthly': 12,
|
||||||
|
'semi-monthly': 24,
|
||||||
|
'bi-weekly': 26,
|
||||||
|
'weekly': 52,
|
||||||
|
'daily': 260,
|
||||||
|
}
|
||||||
|
|
||||||
|
def _get_base_local_dict(self):
|
||||||
|
res = super()._get_base_local_dict()
|
||||||
|
res.update({
|
||||||
|
'er_us_940_futa': er_us_940_futa,
|
||||||
|
'ee_us_941_fica_ss': ee_us_941_fica_ss,
|
||||||
|
'ee_us_941_fica_m': ee_us_941_fica_m,
|
||||||
|
'ee_us_941_fica_m_add': ee_us_941_fica_m_add,
|
||||||
|
'er_us_941_fica_ss': er_us_941_fica_ss,
|
||||||
|
'er_us_941_fica_m': er_us_941_fica_m,
|
||||||
|
'ee_us_941_fit': ee_us_941_fit,
|
||||||
|
'general_state_unemployment': general_state_unemployment,
|
||||||
|
'general_state_income_withholding': general_state_income_withholding,
|
||||||
|
'is_us_state': is_us_state,
|
||||||
|
'al_alabama_state_income_withholding': al_alabama_state_income_withholding,
|
||||||
|
'ar_arkansas_state_income_withholding': ar_arkansas_state_income_withholding,
|
||||||
|
'az_arizona_state_income_withholding': az_arizona_state_income_withholding,
|
||||||
|
'ca_california_state_income_withholding': ca_california_state_income_withholding,
|
||||||
|
'co_colorado_state_income_withholding': co_colorado_state_income_withholding,
|
||||||
|
'ct_connecticut_state_income_withholding': ct_connecticut_state_income_withholding,
|
||||||
|
'de_delaware_state_income_withholding': de_delaware_state_income_withholding,
|
||||||
|
'ga_georgia_state_income_withholding': ga_georgia_state_income_withholding,
|
||||||
|
'hi_hawaii_state_income_withholding': hi_hawaii_state_income_withholding,
|
||||||
|
'ia_iowa_state_income_withholding': ia_iowa_state_income_withholding,
|
||||||
|
'id_idaho_state_income_withholding': id_idaho_state_income_withholding,
|
||||||
|
'il_illinois_state_income_withholding': il_illinois_state_income_withholding,
|
||||||
|
'in_indiana_state_income_withholding': in_indiana_state_income_withholding,
|
||||||
|
'ks_kansas_state_income_withholding': ks_kansas_state_income_withholding,
|
||||||
|
'ky_kentucky_state_income_withholding':ky_kentucky_state_income_withholding,
|
||||||
|
'la_louisiana_state_income_withholding': la_louisiana_state_income_withholding,
|
||||||
|
'me_maine_state_income_withholding': me_maine_state_income_withholding,
|
||||||
|
'mi_michigan_state_income_withholding': mi_michigan_state_income_withholding,
|
||||||
|
'mn_minnesota_state_income_withholding': mn_minnesota_state_income_withholding,
|
||||||
|
'mo_missouri_state_income_withholding': mo_missouri_state_income_withholding,
|
||||||
|
'ms_mississippi_state_income_withholding': ms_mississippi_state_income_withholding,
|
||||||
|
'mt_montana_state_income_withholding': mt_montana_state_income_withholding,
|
||||||
|
'nc_northcarolina_state_income_withholding': nc_northcarolina_state_income_withholding,
|
||||||
|
'nd_north_dakota_state_income_withholding': nd_north_dakota_state_income_withholding,
|
||||||
|
'ne_nebraska_state_income_withholding': ne_nebraska_state_income_withholding,
|
||||||
|
'nj_newjersey_state_income_withholding': nj_newjersey_state_income_withholding,
|
||||||
|
'nm_new_mexico_state_income_withholding': nm_new_mexico_state_income_withholding,
|
||||||
|
'ny_new_york_state_income_withholding': ny_new_york_state_income_withholding,
|
||||||
|
'oh_ohio_state_income_withholding': oh_ohio_state_income_withholding,
|
||||||
|
'ok_oklahoma_state_income_withholding': ok_oklahoma_state_income_withholding,
|
||||||
|
'ri_rhode_island_state_income_withholding': ri_rhode_island_state_income_withholding,
|
||||||
|
'sc_south_carolina_state_income_withholding': sc_south_carolina_state_income_withholding,
|
||||||
|
'ut_utah_state_income_withholding': ut_utah_state_income_withholding,
|
||||||
|
'vt_vermont_state_income_withholding': vt_vermont_state_income_withholding,
|
||||||
|
'va_virginia_state_income_withholding': va_virginia_state_income_withholding,
|
||||||
|
'wa_washington_fml_er': wa_washington_fml_er,
|
||||||
|
'wa_washington_fml_ee': wa_washington_fml_ee,
|
||||||
|
'wi_wisconsin_state_income_withholding': wi_wisconsin_state_income_withholding,
|
||||||
|
'wv_west_virginia_state_income_withholding': wv_west_virginia_state_income_withholding,
|
||||||
|
})
|
||||||
|
return res
|
||||||
|
|
||||||
|
def get_pay_periods_in_year(self):
|
||||||
|
return self.PAY_PERIODS_IN_YEAR.get(self.contract_id.schedule_pay, 0)
|
||||||
1
l10n_us_hr_payroll/models/state/__init__.py
Normal file
1
l10n_us_hr_payroll/models/state/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
80
l10n_us_hr_payroll/models/state/al_alabama.py
Normal file
80
l10n_us_hr_payroll/models/state/al_alabama.py
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def al_alabama_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'AL'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
exemptions = payslip.contract_id.us_payroll_config_value('al_a4_sit_exemptions')
|
||||||
|
if not exemptions:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
personal_exempt = payslip.contract_id.us_payroll_config_value('state_income_tax_exempt')
|
||||||
|
if personal_exempt:
|
||||||
|
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')
|
||||||
|
tax_table = payslip.rule_parameter('us_al_sit_tax_rate')
|
||||||
|
dependent_rate = payslip.rule_parameter('us_al_sit_dependent_rate')
|
||||||
|
standard_deduction = payslip.rule_parameter('us_al_sit_standard_deduction_rate').get(exemptions, 0.0)
|
||||||
|
personal_exemption = payslip.rule_parameter('us_al_sit_personal_exemption_rate').get(exemptions, 0.0)
|
||||||
|
dependent = payslip.contract_id.us_payroll_config_value('al_a4_sit_dependents')
|
||||||
|
fed_withholding = categories.EE_US_941_FIT
|
||||||
|
|
||||||
|
annual_wage = wage * pay_periods
|
||||||
|
standard_deduction_amt = 0.0
|
||||||
|
personal_exemption_amt = 0.0
|
||||||
|
dependent_amt = 0.0
|
||||||
|
withholding = 0.0
|
||||||
|
|
||||||
|
if standard_deduction:
|
||||||
|
row = standard_deduction
|
||||||
|
last_amt = 0.0
|
||||||
|
for data in row:
|
||||||
|
if annual_wage < float(data[0]):
|
||||||
|
if len(data) > 3:
|
||||||
|
increment_count = (- (wage - last_amt) // data[3])
|
||||||
|
standard_deduction_amt = data[1] - (increment_count * data[2])
|
||||||
|
else:
|
||||||
|
standard_deduction_amt = data[1]
|
||||||
|
else:
|
||||||
|
last_amt = data[0]
|
||||||
|
after_deduction = annual_wage - standard_deduction_amt
|
||||||
|
after_fed_withholding = (fed_withholding * pay_periods) + after_deduction
|
||||||
|
if not personal_exempt:
|
||||||
|
personal_exemption_amt = personal_exemption
|
||||||
|
after_personal_exemption = after_fed_withholding - personal_exemption_amt
|
||||||
|
for row in dependent_rate:
|
||||||
|
if annual_wage < float(row[1]):
|
||||||
|
dependent_amt = row[0] * dependent
|
||||||
|
break
|
||||||
|
|
||||||
|
taxable_amount = after_personal_exemption - dependent_amt
|
||||||
|
last = 0.0
|
||||||
|
tax_table = tax_table['M'] if exemptions == 'M' else tax_table['0']
|
||||||
|
for row in tax_table:
|
||||||
|
if taxable_amount < float(row[0]):
|
||||||
|
withholding = withholding + ((taxable_amount - last) * (row[1] / 100))
|
||||||
|
break
|
||||||
|
withholding = withholding + ((row[0] - last) * (row[1] / 100))
|
||||||
|
last = row[0]
|
||||||
|
|
||||||
|
if withholding < 0.0:
|
||||||
|
withholding = 0.0
|
||||||
|
withholding /= pay_periods
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
47
l10n_us_hr_payroll/models/state/ar_arkansas.py
Normal file
47
l10n_us_hr_payroll/models/state/ar_arkansas.py
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def ar_arkansas_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'AR'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
if payslip.contract_id.us_payroll_config_value('state_income_tax_exempt'):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
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')
|
||||||
|
sit_tax_rate = payslip.rule_parameter('us_ar_sit_tax_rate')
|
||||||
|
standard_deduction = payslip.rule_parameter('us_ar_sit_standard_deduction_rate')
|
||||||
|
allowances = payslip.contract_id.us_payroll_config_value('ar_ar4ec_sit_allowances')
|
||||||
|
|
||||||
|
allowances_amt = allowances * 26.0
|
||||||
|
taxable_income = (wage * pay_periods) - standard_deduction
|
||||||
|
if taxable_income < 87001.0:
|
||||||
|
taxable_income = (taxable_income // 50) * 50.0 + 50.0
|
||||||
|
|
||||||
|
withholding = 0.0
|
||||||
|
for row in sit_tax_rate:
|
||||||
|
cap, rate, adjust_amount = row
|
||||||
|
cap = float(cap)
|
||||||
|
if cap > taxable_income:
|
||||||
|
withholding = (((rate / 100.0) * taxable_income) - adjust_amount) - allowances_amt
|
||||||
|
break
|
||||||
|
|
||||||
|
# In case withholding or taxable_income is negative
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding = round(withholding / pay_periods)
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
35
l10n_us_hr_payroll/models/state/az_arizona.py
Normal file
35
l10n_us_hr_payroll/models/state/az_arizona.py
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def az_arizona_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
WAGE = GROSS + DED_FIT_EXEMPT
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'AZ'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.contract_id.schedule_pay
|
||||||
|
additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
withholding_percent = payslip.contract_id.us_payroll_config_value('az_a4_sit_withholding_percentage')
|
||||||
|
|
||||||
|
if withholding_percent <= 0.0:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
wh_percentage = withholding_percent / 100.0
|
||||||
|
withholding = wage * wh_percentage
|
||||||
|
|
||||||
|
if withholding < 0.0:
|
||||||
|
withholding = 0.0
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
98
l10n_us_hr_payroll/models/state/ca_california.py
Normal file
98
l10n_us_hr_payroll/models/state/ca_california.py
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
MAX_ALLOWANCES = 10
|
||||||
|
|
||||||
|
|
||||||
|
def ca_california_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
|
||||||
|
state_code = 'CA'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.contract_id.us_payroll_config_value('ca_de4_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.contract_id.schedule_pay
|
||||||
|
additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
sit_allowances = payslip.contract_id.us_payroll_config_value('ca_de4_sit_allowances')
|
||||||
|
additional_allowances = payslip.contract_id.us_payroll_config_value('ca_de4_sit_additional_allowances')
|
||||||
|
low_income_exemption = payslip.rule_parameter('us_ca_sit_income_exemption_rate')[schedule_pay]
|
||||||
|
estimated_deduction = payslip.rule_parameter('us_ca_sit_estimated_deduction_rate')[schedule_pay]
|
||||||
|
tax_table = payslip.rule_parameter('us_ca_sit_tax_rate')[filing_status].get(schedule_pay)
|
||||||
|
standard_deduction = payslip.rule_parameter('us_ca_sit_standard_deduction_rate')[schedule_pay]
|
||||||
|
exemption_allowances = payslip.rule_parameter('us_ca_sit_exemption_allowance_rate')[schedule_pay]
|
||||||
|
|
||||||
|
low_income = False
|
||||||
|
if filing_status == 'head_household':
|
||||||
|
_, _, _, income = low_income_exemption
|
||||||
|
if wage <= income:
|
||||||
|
low_income = True
|
||||||
|
elif filing_status == 'married':
|
||||||
|
if sit_allowances >= 2:
|
||||||
|
_, _, income, _ = low_income_exemption
|
||||||
|
if wage <= income:
|
||||||
|
low_income = True
|
||||||
|
else:
|
||||||
|
_, income, _, _ = low_income_exemption
|
||||||
|
if wage <= income:
|
||||||
|
low_income = True
|
||||||
|
else:
|
||||||
|
income, _, _, _ = low_income_exemption
|
||||||
|
if wage <= income:
|
||||||
|
low_income = True
|
||||||
|
|
||||||
|
withholding = 0.0
|
||||||
|
taxable_wage = wage
|
||||||
|
if not low_income:
|
||||||
|
allowance_index = max(additional_allowances - 1, 0)
|
||||||
|
if additional_allowances > MAX_ALLOWANCES:
|
||||||
|
deduction = (estimated_deduction[0] * additional_allowances)
|
||||||
|
taxable_wage -= deduction
|
||||||
|
elif additional_allowances > 0:
|
||||||
|
deduction = estimated_deduction[allowance_index]
|
||||||
|
taxable_wage -= deduction
|
||||||
|
|
||||||
|
if filing_status == 'head_household':
|
||||||
|
_, _, _, deduction = standard_deduction
|
||||||
|
taxable_wage -= deduction
|
||||||
|
elif filing_status == 'married':
|
||||||
|
if sit_allowances >= 2:
|
||||||
|
_, _, deduction, _ = standard_deduction
|
||||||
|
taxable_wage -= deduction
|
||||||
|
else:
|
||||||
|
_, deduction, _, _ = standard_deduction
|
||||||
|
taxable_wage -= deduction
|
||||||
|
else:
|
||||||
|
deduction, _, _, _ = standard_deduction
|
||||||
|
taxable_wage -= deduction
|
||||||
|
|
||||||
|
over = 0.0
|
||||||
|
for row in tax_table:
|
||||||
|
if taxable_wage <= row[0]:
|
||||||
|
withholding = ((taxable_wage - over) * row[1]) + row[2]
|
||||||
|
break
|
||||||
|
over = row[0]
|
||||||
|
|
||||||
|
allowance_index = sit_allowances - 1
|
||||||
|
if sit_allowances > MAX_ALLOWANCES:
|
||||||
|
deduction = exemption_allowances[0] * sit_allowances
|
||||||
|
withholding -= deduction
|
||||||
|
elif sit_allowances > 0:
|
||||||
|
deduction = exemption_allowances[allowance_index]
|
||||||
|
withholding -= deduction
|
||||||
|
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
45
l10n_us_hr_payroll/models/state/co_colorado.py
Normal file
45
l10n_us_hr_payroll/models/state/co_colorado.py
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def co_colorado_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'CO'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.contract_id.us_payroll_config_value('fed_941_fit_w4_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
state_exempt = payslip.contract_id.us_payroll_config_value('state_income_tax_exempt')
|
||||||
|
if state_exempt:
|
||||||
|
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')
|
||||||
|
exemption_rate = payslip.rule_parameter('us_co_sit_exemption_rate')
|
||||||
|
tax_rate = payslip.rule_parameter('us_co_sit_tax_rate')
|
||||||
|
|
||||||
|
taxable_income = wage * pay_periods
|
||||||
|
if filing_status == 'married':
|
||||||
|
taxable_income -= exemption_rate * 2
|
||||||
|
else:
|
||||||
|
taxable_income -= exemption_rate
|
||||||
|
|
||||||
|
withholding = taxable_income * (tax_rate / 100)
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding = withholding / pay_periods
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
76
l10n_us_hr_payroll/models/state/ct_connecticut.py
Normal file
76
l10n_us_hr_payroll/models/state/ct_connecticut.py
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def ct_connecticut_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'CT'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
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')
|
||||||
|
withholding_code = payslip.contract_id.us_payroll_config_value('ct_w4na_sit_code')
|
||||||
|
exemption_table = payslip.rule_parameter('us_ct_sit_personal_exemption_rate').get(withholding_code, [('inf', 0.0)])
|
||||||
|
initial_tax_tbl = payslip.rule_parameter('us_ct_sit_initial_tax_rate').get(withholding_code, [('inf', 0.0, 0.0)])
|
||||||
|
tax_table = payslip.rule_parameter('us_ct_sit_tax_rate').get(withholding_code, [('inf', 0.0)])
|
||||||
|
recapture_table = payslip.rule_parameter('us_ct_sit_recapture_rate').get(withholding_code, [('inf', 0.0)])
|
||||||
|
decimal_table = payslip.rule_parameter('us_ct_sit_decimal_rate').get(withholding_code, [('inf', 0.0)])
|
||||||
|
|
||||||
|
annual_wages = wage * pay_periods
|
||||||
|
personal_exemption = 0.0
|
||||||
|
for bracket in exemption_table:
|
||||||
|
if annual_wages <= float(bracket[0]):
|
||||||
|
personal_exemption = bracket[1]
|
||||||
|
break
|
||||||
|
|
||||||
|
withholding = 0.0
|
||||||
|
taxable_income = annual_wages - personal_exemption
|
||||||
|
if taxable_income < 0.0:
|
||||||
|
taxable_income = 0.0
|
||||||
|
|
||||||
|
if taxable_income:
|
||||||
|
initial_tax = 0.0
|
||||||
|
last = 0.0
|
||||||
|
for bracket in initial_tax_tbl:
|
||||||
|
if taxable_income <= float(bracket[0]):
|
||||||
|
initial_tax = bracket[1] + ((bracket[2] / 100.0) * (taxable_income - last))
|
||||||
|
break
|
||||||
|
last = bracket[0]
|
||||||
|
|
||||||
|
tax_add_back = 0.0
|
||||||
|
for bracket in tax_table:
|
||||||
|
if annual_wages <= float(bracket[0]):
|
||||||
|
tax_add_back = bracket[1]
|
||||||
|
break
|
||||||
|
|
||||||
|
recapture_amount = 0.0
|
||||||
|
for bracket in recapture_table:
|
||||||
|
if annual_wages <= float(bracket[0]):
|
||||||
|
recapture_amount = bracket[1]
|
||||||
|
break
|
||||||
|
|
||||||
|
withholding = initial_tax + tax_add_back + recapture_amount
|
||||||
|
decimal_amount = 1.0
|
||||||
|
for bracket in decimal_table:
|
||||||
|
if annual_wages <= float(bracket[0]):
|
||||||
|
decimal_amount= bracket[1]
|
||||||
|
break
|
||||||
|
|
||||||
|
withholding = withholding * (1.00 - decimal_amount)
|
||||||
|
if withholding < 0.0:
|
||||||
|
withholding = 0.0
|
||||||
|
withholding /= pay_periods
|
||||||
|
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
49
l10n_us_hr_payroll/models/state/de_delaware.py
Normal file
49
l10n_us_hr_payroll/models/state/de_delaware.py
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def de_delaware_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'DE'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.contract_id.us_payroll_config_value('de_w4_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
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')
|
||||||
|
tax_table = payslip.rule_parameter('us_de_sit_tax_rate')
|
||||||
|
personal_exemption = payslip.rule_parameter('us_de_sit_personal_exemption_rate')
|
||||||
|
allowances = payslip.contract_id.us_payroll_config_value('de_w4_sit_dependent')
|
||||||
|
standard_deduction = payslip.rule_parameter('us_de_sit_standard_deduction_rate')
|
||||||
|
|
||||||
|
taxable_income = wage * pay_periods
|
||||||
|
if filing_status == 'single':
|
||||||
|
taxable_income -= standard_deduction
|
||||||
|
else:
|
||||||
|
taxable_income -= standard_deduction * 2
|
||||||
|
|
||||||
|
withholding = 0.0
|
||||||
|
last = 0.0
|
||||||
|
for row in tax_table:
|
||||||
|
if taxable_income <= float(row[0]):
|
||||||
|
withholding = (row[1] + ((row[2] / 100.0) * (taxable_income - last)) - (allowances * personal_exemption))
|
||||||
|
break
|
||||||
|
last = row[0]
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding = withholding / pay_periods
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
51
l10n_us_hr_payroll/models/state/ga_georgia.py
Normal file
51
l10n_us_hr_payroll/models/state/ga_georgia.py
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def ga_georgia_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'GA'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
ga_filing_status = payslip.contract_id.us_payroll_config_value('ga_g4_sit_filing_status')
|
||||||
|
if not ga_filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
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')
|
||||||
|
additional_allowances = payslip.contract_id.us_payroll_config_value('ga_g4_sit_additional_allowances')
|
||||||
|
dependent_allowance_rate = payslip.rule_parameter('us_ga_sit_dependent_allowance_rate').get(schedule_pay)
|
||||||
|
personal_allowance = payslip.rule_parameter('us_ga_sit_personal_allowance').get(ga_filing_status, {}).get(schedule_pay)
|
||||||
|
deduction = payslip.rule_parameter('us_ga_sit_deduction').get(ga_filing_status, {}).get(schedule_pay)
|
||||||
|
withholding_rate = payslip.rule_parameter('us_ga_sit_rate').get(ga_filing_status, {}).get(schedule_pay)
|
||||||
|
if not all((dependent_allowance_rate, personal_allowance, deduction, withholding_rate)):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
after_standard_deduction = wage - deduction
|
||||||
|
allowances = dependent_allowances + additional_allowances
|
||||||
|
working_wages = after_standard_deduction - (personal_allowance + (allowances * dependent_allowance_rate))
|
||||||
|
|
||||||
|
withholding = 0.0
|
||||||
|
if working_wages > 0.0:
|
||||||
|
prior_row_base = 0.0
|
||||||
|
for row in withholding_rate:
|
||||||
|
wage_base, base, rate = row
|
||||||
|
wage_base = float(wage_base)
|
||||||
|
if working_wages < wage_base:
|
||||||
|
withholding = base + ((working_wages - prior_row_base) * rate / 100.0)
|
||||||
|
break
|
||||||
|
prior_row_base = wage_base
|
||||||
|
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
131
l10n_us_hr_payroll/models/state/general.py
Normal file
131
l10n_us_hr_payroll/models/state/general.py
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
from odoo.exceptions import UserError
|
||||||
|
from ..federal.fed_940 import futa_wage, futa_wage_ytd
|
||||||
|
from ..federal.fed_941 import fit_wage, fit_wage_ytd
|
||||||
|
|
||||||
|
# import logging
|
||||||
|
# _logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
suta_wage = futa_wage
|
||||||
|
suta_wage_ytd = futa_wage_ytd
|
||||||
|
sit_wage = fit_wage
|
||||||
|
sit_wage_ytd = fit_wage_ytd
|
||||||
|
|
||||||
|
|
||||||
|
def _state_applies(payslip, state_code):
|
||||||
|
return state_code == payslip.contract_id.us_payroll_config_value('state_code')
|
||||||
|
|
||||||
|
|
||||||
|
# Export for eval context
|
||||||
|
is_us_state = _state_applies
|
||||||
|
|
||||||
|
|
||||||
|
def _general_rate(payslip, wage, ytd_wage, wage_base=None, wage_start=None, rate=None):
|
||||||
|
"""
|
||||||
|
Function parameters:
|
||||||
|
wage_base, wage_start, rate can either be strings (rule_parameters) or floats
|
||||||
|
:return: result, result_rate(wage, percent)
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Resolve parameters. On exception, return (probably missing a year, would rather not have exception)
|
||||||
|
if wage_base and isinstance(wage_base, str):
|
||||||
|
try:
|
||||||
|
wage_base = payslip.rule_parameter(wage_base)
|
||||||
|
except (KeyError, UserError):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
if wage_start and isinstance(wage_start, str):
|
||||||
|
try:
|
||||||
|
wage_start = payslip.rule_parameter(wage_start)
|
||||||
|
except (KeyError, UserError):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
if rate and isinstance(rate, str):
|
||||||
|
try:
|
||||||
|
rate = payslip.rule_parameter(rate)
|
||||||
|
except (KeyError, UserError):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
if not rate:
|
||||||
|
return 0.0, 0.0
|
||||||
|
else:
|
||||||
|
# Rate assumed positive percentage!
|
||||||
|
rate = -rate
|
||||||
|
|
||||||
|
if wage_base:
|
||||||
|
remaining = wage_base - ytd_wage
|
||||||
|
if remaining < 0.0:
|
||||||
|
result = 0.0
|
||||||
|
elif remaining < wage:
|
||||||
|
result = remaining
|
||||||
|
else:
|
||||||
|
result = wage
|
||||||
|
|
||||||
|
# _logger.warn(' wage_base method result: ' + str(result) + ' rate: ' + str(rate))
|
||||||
|
return result, rate
|
||||||
|
if wage_start:
|
||||||
|
if ytd_wage >= wage_start:
|
||||||
|
# _logger.warn(' wage_start 1 method result: ' + str(wage) + ' rate: ' + str(rate))
|
||||||
|
return wage, rate
|
||||||
|
if ytd_wage + wage <= wage_start:
|
||||||
|
# _logger.warn(' wage_start 2 method result: ' + str(0.0) + ' rate: ' + str(0.0))
|
||||||
|
return 0.0, 0.0
|
||||||
|
# _logger.warn(' wage_start 3 method result: ' + str((wage - (wage_start - ytd_wage))) + ' rate: ' + str(rate))
|
||||||
|
return (wage - (wage_start - ytd_wage)), rate
|
||||||
|
|
||||||
|
# If the wage doesn't have a start or a base
|
||||||
|
# _logger.warn(' basic result: ' + str(wage) + ' rate: ' + str(rate))
|
||||||
|
return wage, 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 + DED_FUTA_EXEMPT
|
||||||
|
|
||||||
|
The contract's `futa_type` determines if SUTA should be collected.
|
||||||
|
|
||||||
|
:return: result, result_rate(wage, percent)
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Eligible.
|
||||||
|
if payslip.contract_id.futa_type in (payslip.contract_id.FUTA_TYPE_EXEMPT, payslip.contract_id.FUTA_TYPE_BASIC):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = suta_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
ytd_wage = suta_wage_ytd(payslip, categories)
|
||||||
|
|
||||||
|
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 + DED_FIT_EXEMPT
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
if payslip.contract_id.us_payroll_config_value('state_income_tax_exempt'):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
ytd_wage = sit_wage_ytd(payslip, categories)
|
||||||
|
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
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:
|
||||||
|
tax = result * (result_rate / 100.0)
|
||||||
|
tax -= additional # assumed result_rate is negative and that the 'additional' should increase it.
|
||||||
|
return result, ((tax / result) * 100.0)
|
||||||
|
return result, result_rate
|
||||||
43
l10n_us_hr_payroll/models/state/hi_hawaii.py
Normal file
43
l10n_us_hr_payroll/models/state/hi_hawaii.py
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def hi_hawaii_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'HI'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.contract_id.us_payroll_config_value('hi_hw4_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
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('hi_hw4_sit_allowances')
|
||||||
|
tax_table = payslip.rule_parameter('us_hi_sit_tax_rate')[filing_status]
|
||||||
|
personal_exemption = payslip.rule_parameter('us_hi_sit_personal_exemption_rate')
|
||||||
|
|
||||||
|
taxable_income = (wage * pay_periods) - (personal_exemption * allowances)
|
||||||
|
withholding = 0.0
|
||||||
|
last = 0.0
|
||||||
|
for row in tax_table:
|
||||||
|
if taxable_income <= float(row[0]):
|
||||||
|
withholding = row[1] + ((row[2] / 100.0) * (taxable_income - last))
|
||||||
|
break
|
||||||
|
last = row[0]
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding = withholding / pay_periods
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
48
l10n_us_hr_payroll/models/state/ia_iowa.py
Normal file
48
l10n_us_hr_payroll/models/state/ia_iowa.py
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def ia_iowa_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'IA'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
if payslip.contract_id.us_payroll_config_value('state_income_tax_exempt'):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.contract_id.schedule_pay
|
||||||
|
fed_withholding = categories.EE_US_941_FIT
|
||||||
|
additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
allowances = payslip.contract_id.us_payroll_config_value('ia_w4_sit_allowances')
|
||||||
|
standard_deduction = payslip.rule_parameter('us_ia_sit_standard_deduction_rate')[schedule_pay]
|
||||||
|
tax_table = payslip.rule_parameter('us_ia_sit_tax_rate')[schedule_pay]
|
||||||
|
deduction_per_allowance = payslip.rule_parameter('us_ia_sit_deduction_allowance_rate')[schedule_pay]
|
||||||
|
|
||||||
|
t1 = wage + fed_withholding
|
||||||
|
standard_deduction_amt = standard_deduction[0] if allowances < 2 else standard_deduction[1]
|
||||||
|
t2 = t1 - standard_deduction_amt
|
||||||
|
t3 = 0.0
|
||||||
|
last = 0.0
|
||||||
|
for row in tax_table:
|
||||||
|
cap, rate, flat_fee = row
|
||||||
|
if float(cap) > float(t2):
|
||||||
|
taxed_amount = t2 - last
|
||||||
|
t3 = flat_fee + (rate * taxed_amount)
|
||||||
|
break
|
||||||
|
last = cap
|
||||||
|
withholding = t3 - (deduction_per_allowance * allowances)
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
41
l10n_us_hr_payroll/models/state/id_idaho.py
Normal file
41
l10n_us_hr_payroll/models/state/id_idaho.py
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def id_idaho_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'ID'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.contract_id.us_payroll_config_value('id_w4_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.contract_id.schedule_pay
|
||||||
|
allowances = payslip.contract_id.us_payroll_config_value('id_w4_sit_allowances')
|
||||||
|
ictcat_table = payslip.rule_parameter('us_id_sit_ictcat_rate')[schedule_pay]
|
||||||
|
tax_table = payslip.rule_parameter('us_id_sit_tax_rate')[filing_status].get(schedule_pay)
|
||||||
|
|
||||||
|
taxable_income = wage - (ictcat_table * allowances)
|
||||||
|
withholding = 0.0
|
||||||
|
last = 0.0
|
||||||
|
for row in tax_table:
|
||||||
|
if taxable_income <= float(row[0]):
|
||||||
|
withholding = row[1] + ((row[2] / 100.0) * (taxable_income - last))
|
||||||
|
break
|
||||||
|
last = row[0]
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding = round(withholding)
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
35
l10n_us_hr_payroll/models/state/il_illinois.py
Normal file
35
l10n_us_hr_payroll/models/state/il_illinois.py
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def il_illinois_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
WAGE = GROSS + DED_FIT_EXEMPT
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'IL'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
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')
|
||||||
|
basic_allowances_rate = payslip.rule_parameter('us_il_sit_basic_allowances_rate')
|
||||||
|
additional_allowances_rate = payslip.rule_parameter('us_il_sit_additional_allowances_rate')
|
||||||
|
basic_allowances = payslip.contract_id.us_payroll_config_value('il_w4_sit_basic_allowances')
|
||||||
|
additional_allowances = payslip.contract_id.us_payroll_config_value('il_w4_sit_additional_allowances')
|
||||||
|
|
||||||
|
rate = 4.95 / 100.0
|
||||||
|
withholding = rate * (wage - (((basic_allowances * basic_allowances_rate) + (additional_allowances *
|
||||||
|
additional_allowances_rate)) / pay_periods))
|
||||||
|
if withholding < 0.0:
|
||||||
|
withholding = 0.0
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
34
l10n_us_hr_payroll/models/state/in_indiana.py
Normal file
34
l10n_us_hr_payroll/models/state/in_indiana.py
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def in_indiana_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'IN'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.contract_id.schedule_pay
|
||||||
|
additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
personal_exemption = payslip.contract_id.us_payroll_config_value('in_w4_sit_personal_exemption')
|
||||||
|
personal_exemption_rate = payslip.rule_parameter('us_in_sit_personal_exemption_rate')[schedule_pay][personal_exemption - 1]
|
||||||
|
dependent_exemption = payslip.contract_id.us_payroll_config_value('in_w4_sit_dependent_exemption')
|
||||||
|
dependent_exemption_rate = payslip.rule_parameter('us_in_sit_dependent_exemption_rate')[schedule_pay][dependent_exemption - 1]
|
||||||
|
income_tax_rate = payslip.rule_parameter('us_in_suta_income_rate')
|
||||||
|
|
||||||
|
taxable_income = wage - (personal_exemption_rate + dependent_exemption_rate)
|
||||||
|
withholding = taxable_income * (income_tax_rate / 100.0)
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
44
l10n_us_hr_payroll/models/state/ks_kansas.py
Normal file
44
l10n_us_hr_payroll/models/state/ks_kansas.py
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def ks_kansas_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'KS'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.contract_id.us_payroll_config_value('ks_k4_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.contract_id.schedule_pay
|
||||||
|
additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
allowances = payslip.contract_id.us_payroll_config_value('ks_k4_sit_allowances')
|
||||||
|
allowances_amt = payslip.rule_parameter('us_ks_sit_allowances_rate')[schedule_pay]
|
||||||
|
tax_table = payslip.rule_parameter('us_ks_sit_tax_rate')[filing_status].get(schedule_pay)
|
||||||
|
|
||||||
|
taxable_income = wage - (allowances * allowances_amt)
|
||||||
|
withholding = 0.0
|
||||||
|
last = 0.0
|
||||||
|
for row in tax_table:
|
||||||
|
amt, rate, flat_fee = row
|
||||||
|
if wage <= float(amt):
|
||||||
|
withholding = ((taxable_income - last) * (rate / 100)) + flat_fee
|
||||||
|
break
|
||||||
|
last = amt
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding += additional
|
||||||
|
withholding = round(withholding)
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
32
l10n_us_hr_payroll/models/state/ky_kentucky.py
Normal file
32
l10n_us_hr_payroll/models/state/ky_kentucky.py
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def ky_kentucky_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'KY'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
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')
|
||||||
|
tax_rate = payslip.rule_parameter('us_ky_sit_tax_rate')
|
||||||
|
standard_deduction = payslip.rule_parameter('us_ky_sit_standard_deduction_rate')
|
||||||
|
|
||||||
|
taxable_income = (wage * pay_periods) - standard_deduction
|
||||||
|
withholding = taxable_income * (tax_rate / 100)
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding /= pay_periods
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
62
l10n_us_hr_payroll/models/state/la_louisiana.py
Normal file
62
l10n_us_hr_payroll/models/state/la_louisiana.py
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def la_louisiana_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'LA'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.contract_id.us_payroll_config_value('la_l4_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
pay_periods = payslip.dict.get_pay_periods_in_year()
|
||||||
|
personal_exemptions = payslip.contract_id.us_payroll_config_value('la_l4_sit_exemptions')
|
||||||
|
additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
dependent_exemptions = payslip.contract_id.us_payroll_config_value('la_l4_sit_dependents')
|
||||||
|
tax_table = payslip.rule_parameter('us_la_sit_tax_rate')[filing_status]
|
||||||
|
exemption_rate = payslip.rule_parameter('us_la_sit_personal_exemption_rate')
|
||||||
|
dependent_rate = payslip.rule_parameter('us_la_sit_dependent_rate')
|
||||||
|
|
||||||
|
annual_wage = wage * pay_periods
|
||||||
|
|
||||||
|
effect_cap = 0.0
|
||||||
|
multiplier = 0.0
|
||||||
|
if filing_status == 'single':
|
||||||
|
effect_cap = 12500.00
|
||||||
|
multiplier = 1.60
|
||||||
|
elif filing_status == 'married':
|
||||||
|
effect_cap = 25000.00
|
||||||
|
multiplier = 1.65
|
||||||
|
|
||||||
|
after_credits_under = (2.100 / 100) * (((personal_exemptions * exemption_rate) +
|
||||||
|
(dependent_exemptions * dependent_rate)) / pay_periods)
|
||||||
|
after_credits_over = 0.00
|
||||||
|
if after_credits_under > effect_cap:
|
||||||
|
after_credits_under = effect_cap
|
||||||
|
after_credits_over_check = ((personal_exemptions * exemption_rate) + (dependent_exemptions * dependent_rate)) - effect_cap
|
||||||
|
after_credits_over = (multiplier / 100.00) * (after_credits_over_check / pay_periods) if after_credits_over_check > 0 else 0.00
|
||||||
|
withholding = 0.0
|
||||||
|
last = 0.0
|
||||||
|
for amt, rate in tax_table:
|
||||||
|
withholding = withholding + ((rate / 100.0) * (wage - (last / pay_periods)))
|
||||||
|
if annual_wage <= float(amt):
|
||||||
|
break
|
||||||
|
last = amt
|
||||||
|
|
||||||
|
withholding = withholding - (after_credits_under + after_credits_over)
|
||||||
|
withholding = round(withholding, 2)
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
62
l10n_us_hr_payroll/models/state/me_maine.py
Normal file
62
l10n_us_hr_payroll/models/state/me_maine.py
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def me_maine_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
WAGE = GROSS + DED_FIT_EXEMPT
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'ME'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.contract_id.us_payroll_config_value('me_w4me_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
exempt = payslip.contract_id.us_payroll_config_value('state_income_tax_exempt')
|
||||||
|
if exempt:
|
||||||
|
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('me_w4me_sit_allowances')
|
||||||
|
tax_rate = payslip.rule_parameter('us_me_sit_tax_rate')[filing_status]
|
||||||
|
personal_exemption = payslip.rule_parameter('us_me_sit_personal_exemption_rate')
|
||||||
|
standard_deduction = payslip.rule_parameter('us_me_sit_standard_deduction_rate')[filing_status]
|
||||||
|
|
||||||
|
taxable_income = wage * pay_periods
|
||||||
|
exemption_amt = allowances * personal_exemption
|
||||||
|
last = 0.0
|
||||||
|
standard_deduction_amt = 0.0
|
||||||
|
for row in standard_deduction:
|
||||||
|
amt, flat_amt = row
|
||||||
|
if taxable_income < 82900:
|
||||||
|
standard_deduction_amt = flat_amt
|
||||||
|
break
|
||||||
|
elif taxable_income < amt:
|
||||||
|
standard_deduction_amt = last * (amt - taxable_income) / flat_amt
|
||||||
|
break
|
||||||
|
last = flat_amt
|
||||||
|
annual_income = taxable_income - (exemption_amt + standard_deduction_amt)
|
||||||
|
withholding = 0.0
|
||||||
|
for row in tax_rate:
|
||||||
|
amt, flat_fee, rate = row
|
||||||
|
if annual_income < float(amt):
|
||||||
|
withholding = ((annual_income - last) * (rate / 100)) + flat_fee
|
||||||
|
break
|
||||||
|
last = amt
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding = round(withholding / pay_periods)
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
35
l10n_us_hr_payroll/models/state/mi_michigan.py
Normal file
35
l10n_us_hr_payroll/models/state/mi_michigan.py
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def mi_michigan_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
WAGE = GROSS + DED_FIT_EXEMPT
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'MI'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
if payslip.contract_id.us_payroll_config_value('state_income_tax_exempt'):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
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')
|
||||||
|
exemption_rate = payslip.rule_parameter('us_mi_sit_exemption_rate')
|
||||||
|
exemption = payslip.contract_id.us_payroll_config_value('mi_w4_sit_exemptions')
|
||||||
|
|
||||||
|
annual_exemption = (exemption * exemption_rate) / pay_periods
|
||||||
|
withholding = ((wage - annual_exemption) * 0.0425)
|
||||||
|
if withholding < 0.0:
|
||||||
|
withholding = 0.0
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
44
l10n_us_hr_payroll/models/state/mn_minnesota.py
Normal file
44
l10n_us_hr_payroll/models/state/mn_minnesota.py
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def mn_minnesota_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
WAGE = GROSS + DED_FIT_EXEMPT
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'MN'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.contract_id.us_payroll_config_value('mn_w4mn_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
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')
|
||||||
|
sit_tax_rate = payslip.rule_parameter('us_mn_sit_tax_rate')[filing_status]
|
||||||
|
allowances_rate = payslip.rule_parameter('us_mn_sit_allowances_rate')
|
||||||
|
allowances = payslip.contract_id.us_payroll_config_value('mn_w4mn_sit_allowances')
|
||||||
|
|
||||||
|
taxable_income = (wage * pay_periods) - (allowances * allowances_rate)
|
||||||
|
withholding = 0.0
|
||||||
|
for row in sit_tax_rate:
|
||||||
|
cap, subtract_amt, rate, flat_fee = row
|
||||||
|
cap = float(cap)
|
||||||
|
if cap > taxable_income:
|
||||||
|
withholding = ((rate / 100.00) * (taxable_income - subtract_amt)) + flat_fee
|
||||||
|
break
|
||||||
|
withholding = round(withholding / pay_periods)
|
||||||
|
if withholding < 0.0:
|
||||||
|
withholding = 0.0
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
53
l10n_us_hr_payroll/models/state/mo_missouri.py
Normal file
53
l10n_us_hr_payroll/models/state/mo_missouri.py
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def mo_missouri_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
WAGE = GROSS + DED_FIT_EXEMPT
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'MO'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.contract_id.us_payroll_config_value('mo_mow4_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
reduced_withholding = payslip.contract_id.us_payroll_config_value('mo_mow4_sit_withholding')
|
||||||
|
if reduced_withholding:
|
||||||
|
return wage, -((reduced_withholding / wage) * 100.0)
|
||||||
|
|
||||||
|
pay_periods = payslip.dict.get_pay_periods_in_year()
|
||||||
|
additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
sit_table = payslip.rule_parameter('us_mo_sit_rate')
|
||||||
|
deduction = payslip.rule_parameter('us_mo_sit_deduction')[filing_status]
|
||||||
|
|
||||||
|
gross_taxable_income = wage * pay_periods
|
||||||
|
gross_taxable_income -= deduction
|
||||||
|
|
||||||
|
remaining_taxable_income = gross_taxable_income
|
||||||
|
withholding = 0.0
|
||||||
|
for amt, rate in sit_table:
|
||||||
|
amt = float(amt)
|
||||||
|
rate = rate / 100.0
|
||||||
|
if (remaining_taxable_income - amt) > 0.0 or (remaining_taxable_income - amt) == 0.0:
|
||||||
|
withholding += rate * amt
|
||||||
|
else:
|
||||||
|
withholding += rate * remaining_taxable_income
|
||||||
|
break
|
||||||
|
remaining_taxable_income = remaining_taxable_income - amt
|
||||||
|
|
||||||
|
withholding /= pay_periods
|
||||||
|
withholding += additional
|
||||||
|
withholding = round(withholding)
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
46
l10n_us_hr_payroll/models/state/ms_mississippi.py
Normal file
46
l10n_us_hr_payroll/models/state/ms_mississippi.py
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def ms_mississippi_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
WAGE = GROSS + DED_FIT_EXEMPT
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'MS'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.contract_id.us_payroll_config_value('ms_89_350_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
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')
|
||||||
|
exemptions = payslip.contract_id.us_payroll_config_value('ms_89_350_sit_exemption_value')
|
||||||
|
standard_deduction = payslip.rule_parameter('us_ms_sit_deduction').get(filing_status)
|
||||||
|
withholding_rate = payslip.rule_parameter('us_ms_sit_rate')
|
||||||
|
|
||||||
|
wage_annual = wage * pay_periods
|
||||||
|
taxable_income = wage_annual - (exemptions + standard_deduction)
|
||||||
|
if taxable_income <= 0.01:
|
||||||
|
return wage, 0.0
|
||||||
|
|
||||||
|
withholding = 0.0
|
||||||
|
for row in withholding_rate:
|
||||||
|
wage_base, base, rate = row
|
||||||
|
if taxable_income >= wage_base:
|
||||||
|
withholding = base + ((taxable_income - wage_base) * rate)
|
||||||
|
break
|
||||||
|
withholding /= pay_periods
|
||||||
|
withholding = round(withholding)
|
||||||
|
withholding += round(additional)
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
45
l10n_us_hr_payroll/models/state/mt_montana.py
Normal file
45
l10n_us_hr_payroll/models/state/mt_montana.py
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def mt_montana_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
WAGE = GROSS + DED_FIT_EXEMPT
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'MT'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
if payslip.contract_id.us_payroll_config_value('mt_mw4_sit_exempt'):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
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')
|
||||||
|
exemption_rate = payslip.rule_parameter('us_mt_sit_exemption_rate').get(schedule_pay)
|
||||||
|
withholding_rate = payslip.rule_parameter('us_mt_sit_rate').get(schedule_pay)
|
||||||
|
if not exemption_rate or not withholding_rate:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
adjusted_wage = wage - (exemption_rate * (exemptions or 0))
|
||||||
|
withholding = 0.0
|
||||||
|
if adjusted_wage > 0.0:
|
||||||
|
prior_wage_cap = 0.0
|
||||||
|
for row in withholding_rate:
|
||||||
|
wage_cap, base, rate = row
|
||||||
|
wage_cap = float(wage_cap) # e.g. 'inf'
|
||||||
|
if adjusted_wage < wage_cap:
|
||||||
|
withholding = round(base + ((rate / 100.0) * (adjusted_wage - prior_wage_cap)))
|
||||||
|
break
|
||||||
|
prior_wage_cap = wage_cap
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user