mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
[REL] l10n_us_hr_payroll: For Odoo 2020.2.2
This release fixes multiple logical problems with Odoo's payroll, including the difference in behavior on payslips with 'recursive' category calculations needed for many.
This commit is contained in:
@@ -1,3 +1,12 @@
|
|||||||
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
from . import models
|
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');")
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
# -*- encoding: utf-8 -*-
|
|
||||||
{
|
{
|
||||||
'name': 'USA - Payroll',
|
'name': 'USA - Payroll',
|
||||||
'author': 'Hibou Corp. <hello@hibou.io>',
|
'author': 'Hibou Corp. <hello@hibou.io>',
|
||||||
'category': 'Localization',
|
'category': 'Localization',
|
||||||
'depends': ['hr_payroll', 'hr_payroll_rate'],
|
'depends': [
|
||||||
'version': '11.0.2020.1.0',
|
'hr_payroll',
|
||||||
|
'hr_payroll_rate',
|
||||||
|
'hibou_professional',
|
||||||
|
],
|
||||||
|
'version': '11.0.2020.2.2',
|
||||||
'description': """
|
'description': """
|
||||||
USA Payroll Rules.
|
USA Payroll Rules.
|
||||||
==================
|
==================
|
||||||
@@ -29,19 +32,62 @@ USA Payroll Rules.
|
|||||||
'data/federal/fed_941_fica_rules.xml',
|
'data/federal/fed_941_fica_rules.xml',
|
||||||
'data/federal/fed_941_fit_parameters.xml',
|
'data/federal/fed_941_fit_parameters.xml',
|
||||||
'data/federal/fed_941_fit_rules.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/fl_florida.xml',
|
||||||
'data/state/ga_georgia.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/ms_mississippi.xml',
|
||||||
'data/state/mt_montana.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/oh_ohio.xml',
|
||||||
|
'data/state/ok_oklahoma.xml',
|
||||||
'data/state/pa_pennsylvania.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/tx_texas.xml',
|
||||||
|
'data/state/ut_utah.xml',
|
||||||
|
'data/state/vt_vermont.xml',
|
||||||
'data/state/va_virginia.xml',
|
'data/state/va_virginia.xml',
|
||||||
'data/state/wa_washington.xml',
|
'data/state/wa_washington.xml',
|
||||||
|
'data/state/wi_wisconsin.xml',
|
||||||
|
'data/state/wv_west_virginia.xml',
|
||||||
|
'data/state/wy_wyoming.xml',
|
||||||
'data/final.xml',
|
'data/final.xml',
|
||||||
'views/hr_contract_views.xml',
|
'views/hr_contract_views.xml',
|
||||||
|
'views/res_config_settings_views.xml',
|
||||||
'views/us_payroll_config_views.xml',
|
'views/us_payroll_config_views.xml',
|
||||||
],
|
],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
|
'demo': [
|
||||||
|
],
|
||||||
|
'auto_install': False,
|
||||||
|
'post_init_hook': '_post_install_hook',
|
||||||
'license': 'OPL-1',
|
'license': 'OPL-1',
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,25 +20,89 @@
|
|||||||
<field name="parent_id" ref="hr_payroll.DED"/>
|
<field name="parent_id" ref="hr_payroll.DED"/>
|
||||||
</record>
|
</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 -->
|
<!-- Tax Exempt Deductions -->
|
||||||
|
<!-- If your rule is intended to withhold from gross, use the DED_ Categories -->
|
||||||
<!-- Deductions that reduce the wage for Federal Income Tax (e.g. 401k) -->
|
|
||||||
<record id="hr_payroll_category_ded_fit_exempt" model="hr.salary.rule.category">
|
<record id="hr_payroll_category_ded_fit_exempt" model="hr.salary.rule.category">
|
||||||
<field name="name">Deduction: US Federal Income Tax Exempt</field>
|
<field name="name">Deduction: US FIT Exempt</field>
|
||||||
<field name="code">DED_FIT_EXEMPT</field>
|
<field name="code">DED_FIT_EXEMPT</field>
|
||||||
<field name="parent_id" ref="hr_payroll.DED"/>
|
<field name="parent_id" ref="hr_payroll.DED"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- Generally speaking, deductions to FICA and FUTA should probably reduce GROSS itself, there may be special or rare cases -->
|
<record id="hr_payroll_category_ded_fit_fica_exempt" model="hr.salary.rule.category">
|
||||||
<!-- Deductions that reduce the wage for FICA -->
|
<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">
|
<record id="hr_payroll_category_ded_fica_exempt" model="hr.salary.rule.category">
|
||||||
<field name="name">Deduction: US FICA Exempt</field>
|
<field name="name">Deduction: US FICA Exempt</field>
|
||||||
<field name="code">DED_FICA_EXEMPT</field>
|
<field name="code">DED_FICA_EXEMPT</field>
|
||||||
<field name="parent_id" ref="hr_payroll.DED"/>
|
<field name="parent_id" ref="hr_payroll.DED"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- Deductions that reduce the wage for Unemployment Insurance/Tax -->
|
<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">
|
<record id="hr_payroll_category_ded_futa_exempt" model="hr.salary.rule.category">
|
||||||
<field name="name">Deduction: US FUTA Exempt</field>
|
<field name="name">Deduction: US FUTA Exempt</field>
|
||||||
<field name="code">DED_FUTA_EXEMPT</field>
|
<field name="code">DED_FUTA_EXEMPT</field>
|
||||||
|
|||||||
@@ -16,11 +16,73 @@
|
|||||||
|
|
||||||
ref('hr_payroll_rule_ee_fed_941_fit'),
|
ref('hr_payroll_rule_ee_fed_941_fit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_ak_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_ak_suta'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_al_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_al_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_ar_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_ar_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_az_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_az_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_ca_suta'),
|
||||||
|
ref('hr_payroll_rule_er_us_ca_suta_ett'),
|
||||||
|
ref('hr_payroll_rule_ee_us_ca_suta_sdi'),
|
||||||
|
ref('hr_payroll_rule_ee_us_ca_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_co_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_co_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_ct_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_ct_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_de_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_de_sit'),
|
||||||
|
|
||||||
ref('hr_payroll_rule_er_us_fl_suta'),
|
ref('hr_payroll_rule_er_us_fl_suta'),
|
||||||
|
|
||||||
ref('hr_payroll_rule_er_us_ga_suta'),
|
ref('hr_payroll_rule_er_us_ga_suta'),
|
||||||
ref('hr_payroll_rule_ee_us_ga_sit'),
|
ref('hr_payroll_rule_ee_us_ga_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_hi_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_hi_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_ia_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_ia_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_id_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_id_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_il_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_il_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_in_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_in_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_ks_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_ks_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_ky_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_ky_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_la_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_la_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_me_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_me_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_mn_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_mn_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_mi_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_mi_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_mo_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_mo_sit'),
|
||||||
|
|
||||||
ref('hr_payroll_rule_er_us_ms_suta'),
|
ref('hr_payroll_rule_er_us_ms_suta'),
|
||||||
ref('hr_payroll_rule_ee_us_ms_sit'),
|
ref('hr_payroll_rule_ee_us_ms_sit'),
|
||||||
|
|
||||||
@@ -28,26 +90,84 @@
|
|||||||
ref('hr_payroll_rule_er_us_mt_suta_aft'),
|
ref('hr_payroll_rule_er_us_mt_suta_aft'),
|
||||||
ref('hr_payroll_rule_ee_us_mt_sit'),
|
ref('hr_payroll_rule_ee_us_mt_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_nc_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_nc_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_nd_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_nd_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_ne_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_ne_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_nh_suta'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_nj_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_nj_suta'),
|
||||||
|
ref('hr_payroll_rule_er_us_nj_sdi'),
|
||||||
|
ref('hr_payroll_rule_ee_us_nj_sdi'),
|
||||||
|
ref('hr_payroll_rule_er_us_nj_wf'),
|
||||||
|
ref('hr_payroll_rule_ee_us_nj_wf'),
|
||||||
|
ref('hr_payroll_rule_er_us_nj_fli'),
|
||||||
|
ref('hr_payroll_rule_ee_us_nj_fli'),
|
||||||
|
ref('hr_payroll_rule_ee_us_nj_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_nm_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_nm_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_nv_suta'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_ny_suta'),
|
||||||
|
ref('hr_payroll_rule_er_us_ny_suta_rsf'),
|
||||||
|
ref('hr_payroll_rule_er_us_ny_suta_mctmt'),
|
||||||
|
ref('hr_payroll_rule_ee_us_ny_sit'),
|
||||||
|
|
||||||
ref('hr_payroll_rule_er_us_oh_suta'),
|
ref('hr_payroll_rule_er_us_oh_suta'),
|
||||||
ref('hr_payroll_rule_ee_us_oh_sit'),
|
ref('hr_payroll_rule_ee_us_oh_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_ok_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_ok_sit'),
|
||||||
|
|
||||||
ref('hr_payroll_rule_er_us_pa_suta'),
|
ref('hr_payroll_rule_er_us_pa_suta'),
|
||||||
ref('hr_payroll_rule_ee_us_pa_suta'),
|
ref('hr_payroll_rule_ee_us_pa_suta'),
|
||||||
ref('hr_payroll_rule_ee_us_pa_sit'),
|
ref('hr_payroll_rule_ee_us_pa_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_ri_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_ri_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_sc_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_sc_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_sd_suta'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_tn_suta'),
|
||||||
|
|
||||||
ref('hr_payroll_rule_er_us_tx_suta'),
|
ref('hr_payroll_rule_er_us_tx_suta'),
|
||||||
ref('hr_payroll_rule_er_us_tx_suta_oa'),
|
ref('hr_payroll_rule_er_us_tx_suta_oa'),
|
||||||
ref('hr_payroll_rule_er_us_tx_suta_etia'),
|
ref('hr_payroll_rule_er_us_tx_suta_etia'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_ut_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_ut_sit'),
|
||||||
|
|
||||||
ref('hr_payroll_rule_er_us_va_suta'),
|
ref('hr_payroll_rule_er_us_va_suta'),
|
||||||
ref('hr_payroll_rule_ee_us_va_sit'),
|
ref('hr_payroll_rule_ee_us_va_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_vt_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_vt_sit'),
|
||||||
|
|
||||||
ref('hr_payroll_rule_er_us_wa_suta'),
|
ref('hr_payroll_rule_er_us_wa_suta'),
|
||||||
ref('hr_payroll_rule_er_us_wa_fml'),
|
ref('hr_payroll_rule_er_us_wa_fml'),
|
||||||
ref('hr_payroll_rule_ee_us_wa_fml'),
|
ref('hr_payroll_rule_ee_us_wa_fml'),
|
||||||
ref('hr_payroll_rule_er_us_wa_lni'),
|
ref('hr_payroll_rule_er_us_wa_lni'),
|
||||||
ref('hr_payroll_rule_ee_us_wa_lni'),
|
ref('hr_payroll_rule_ee_us_wa_lni'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_wi_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_wi_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_wv_suta'),
|
||||||
|
ref('hr_payroll_rule_ee_us_wv_sit'),
|
||||||
|
|
||||||
|
ref('hr_payroll_rule_er_us_wy_suta'),
|
||||||
|
|
||||||
ref('hr_salary_rule_commission'),
|
ref('hr_salary_rule_commission'),
|
||||||
ref('hr_salary_rule_gamification'),
|
ref('hr_salary_rule_gamification'),
|
||||||
])]" name="rule_ids"/>
|
])]" name="rule_ids"/>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
89
l10n_us_hr_payroll/data/state/ak_alaska.xml
Normal file
89
l10n_us_hr_payroll/data/state/ak_alaska.xml
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ak_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AK Alaska SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ak_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">39900.00</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ak_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AK Alaska SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ak_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">41500.00</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ak_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AK Alaska SUTA Rate</field>
|
||||||
|
<field name="code">us_ak_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.780</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ak_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AK Alaska SUTA Rate</field>
|
||||||
|
<field name="code">us_ak_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.590</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ak_suta_ee_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AK Alaska SUTA Rate EE</field>
|
||||||
|
<field name="code">us_ak_suta_ee_rate</field>
|
||||||
|
<field name="parameter_value">0.500</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ak_suta_ee_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AK Alaska SUTA Rate EE</field>
|
||||||
|
<field name="code">us_ak_suta_ee_rate</field>
|
||||||
|
<field name="parameter_value">0.500</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ak_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Alaska - Department of Labor and Workforce Development (ADLWD) - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ak_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ak_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_ak_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
209
l10n_us_hr_payroll/data/state/al_alabama.xml
Normal file
209
l10n_us_hr_payroll/data/state/al_alabama.xml
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_al_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AL Alabama SUTA Wage Base</field>
|
||||||
|
<field name="code">us_al_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">8000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_al_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AL Alabama SUTA Wage Base</field>
|
||||||
|
<field name="code">us_al_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">8000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_al_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AL Alabama SUTA Rate</field>
|
||||||
|
<field name="code">us_al_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_al_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AL Alabama SUTA Rate</field>
|
||||||
|
<field name="code">us_al_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_al_sit_tax_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AL Alabama SIT Tax Rate</field>
|
||||||
|
<field name="code">us_al_sit_tax_rate</field>
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'0': [
|
||||||
|
( 500, 2),
|
||||||
|
( 3000, 4),
|
||||||
|
('inf', 5),
|
||||||
|
],
|
||||||
|
'M': [
|
||||||
|
( 1000, 2),
|
||||||
|
( 6000, 4),
|
||||||
|
('inf', 5),
|
||||||
|
],
|
||||||
|
}</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_al_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AL Alabama SIT Tax Rate</field>
|
||||||
|
<field name="code">us_al_sit_tax_rate</field>
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'0' : [
|
||||||
|
( 500, 2),
|
||||||
|
( 2500, 4),
|
||||||
|
('inf', 5),
|
||||||
|
],
|
||||||
|
'M': [
|
||||||
|
( 1000, 2),
|
||||||
|
( 5000, 4),
|
||||||
|
('inf', 5),
|
||||||
|
],
|
||||||
|
}</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<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.payroll.rate">
|
||||||
|
<field name="name">US AL Alabama Dependent Rate</field>
|
||||||
|
<field name="code">us_al_sit_dependent_rate</field>
|
||||||
|
<field name="parameter_value">[
|
||||||
|
( 1000, 20000),
|
||||||
|
( 500, 100000),
|
||||||
|
( 300, 'inf'),
|
||||||
|
]</field>
|
||||||
|
<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.payroll.rate">
|
||||||
|
<field name="name">US AL Alabama Dependent Rate</field>
|
||||||
|
<field name="code">us_al_sit_dependent_rate</field>
|
||||||
|
<field name="parameter_value">[
|
||||||
|
( 1000, 20000),
|
||||||
|
( 500, 100000),
|
||||||
|
( 300, 'inf'),
|
||||||
|
]</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<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.payroll.rate">
|
||||||
|
<field name="name">US AL Alabama Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_al_sit_standard_deduction_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US AL Alabama Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_al_sit_standard_deduction_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<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.payroll.rate">
|
||||||
|
<field name="name">US AL Alabama Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_al_sit_personal_exemption_rate</field>
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'0' : 0,
|
||||||
|
'S' : 1500,
|
||||||
|
'MS': 1500,
|
||||||
|
'M' : 3000,
|
||||||
|
'H' : 3000,
|
||||||
|
}</field>
|
||||||
|
<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.payroll.rate">
|
||||||
|
<field name="name">US AL Alabama Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_al_sit_personal_exemption_rate</field>
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'0' : 0,
|
||||||
|
'S' : 1500,
|
||||||
|
'MS': 1500,
|
||||||
|
'M' : 3000,
|
||||||
|
'H' : 3000,
|
||||||
|
}</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_al_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Alabama - Department of Economic Security (IDES) - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_al_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_al_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Alabama - Department of Revenue (IDOR) - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_al_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Alabama - Department of Revenue (IDOR) - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_al_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_al_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_al_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
141
l10n_us_hr_payroll/data/state/ar_arkansas.xml
Normal file
141
l10n_us_hr_payroll/data/state/ar_arkansas.xml
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ar_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AR Arkansas SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ar_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">10000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ar_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AR Arkansas SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ar_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">8000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ar_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AR Arkansas SUTA Rate</field>
|
||||||
|
<field name="code">us_ar_suta_rate</field>
|
||||||
|
<field name="parameter_value">3.2</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ar_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AR Arkansas SUTA Rate</field>
|
||||||
|
<field name="code">us_ar_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.9</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ar_sit_tax_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AR Arkansas SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ar_sit_tax_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US AR Arkansas SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ar_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ar_sit_standard_deduction_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AR Arkansas Allowances Rate</field>
|
||||||
|
<field name="code">us_ar_sit_standard_deduction_rate</field>
|
||||||
|
<field name="parameter_value">2200.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ar_sit_standard_deduction_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AR Arkansas Allowances Rate</field>
|
||||||
|
<field name="code">us_ar_sit_standard_deduction_rate</field>
|
||||||
|
<field name="parameter_value">2200.0</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ar_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Arkansas - Department of Workforce Solutions - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ar_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ar_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Arkansas - Department of Financial Administration - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ar_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Arkansas - Department of Financial Administration - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ar_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ar_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_ar_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
83
l10n_us_hr_payroll/data/state/az_arizona.xml
Normal file
83
l10n_us_hr_payroll/data/state/az_arizona.xml
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_az_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AZ Arizona SUTA Wage Base</field>
|
||||||
|
<field name="code">us_az_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">7000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_az_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AZ Arizona SUTA Wage Base</field>
|
||||||
|
<field name="code">us_az_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">7000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_az_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AZ Arizona SUTA Rate</field>
|
||||||
|
<field name="code">us_az_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_az_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US AZ Arizona SUTA Rate</field>
|
||||||
|
<field name="code">us_az_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.0</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_az_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Arizona - Department of Economic Security (ADES) - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_az_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_az_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Arizona - Department of Revenue (ADOR) - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_az_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Arizona - Department of Revenue (ADOR) - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_az_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_az_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_az_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
806
l10n_us_hr_payroll/data/state/ca_california.xml
Normal file
806
l10n_us_hr_payroll/data/state/ca_california.xml
Normal file
@@ -0,0 +1,806 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CA California SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ca_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">7000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ca_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CA California SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ca_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">7000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CA California SUTA Rate</field>
|
||||||
|
<field name="code">us_ca_suta_rate</field>
|
||||||
|
<field name="parameter_value">3.5</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ca_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CA California SUTA Rate</field>
|
||||||
|
<field name="code">us_ca_suta_rate</field>
|
||||||
|
<field name="parameter_value">3.4</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- ETT Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_suta_ett_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CA California SUTA ETT Rate</field>
|
||||||
|
<field name="code">us_ca_suta_ett_rate</field>
|
||||||
|
<field name="parameter_value">0.1</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ca_suta_ett_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CA California SUTA ETT Rate</field>
|
||||||
|
<field name="code">us_ca_suta_ett_rate</field>
|
||||||
|
<field name="parameter_value">0.1</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- SDI Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_suta_sdi_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CA California SUTA SDI Rate</field>
|
||||||
|
<field name="code">us_ca_suta_sdi_rate</field>
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ca_suta_sdi_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CA California SUTA SDI Rate</field>
|
||||||
|
<field name="code">us_ca_suta_sdi_rate</field>
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_sit_tax_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CA California SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ca_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ca_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CA California SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ca_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_sit_income_exemption_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CA California Low Income Exemption Rate</field>
|
||||||
|
<field name="code">us_ca_sit_income_exemption_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US CA California Low Income Exemption Rate</field>
|
||||||
|
<field name="code">us_ca_sit_income_exemption_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_sit_estimated_deduction_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CA California Estimated Deduction Rate</field>
|
||||||
|
<field name="code">us_ca_sit_estimated_deduction_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US CA California Estimated Deduction Rate</field>
|
||||||
|
<field name="code">us_ca_sit_estimated_deduction_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_sit_standard_deduction_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CA California Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_ca_sit_standard_deduction_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US CA California Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_ca_sit_standard_deduction_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ca_sit_exemption_allowance_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CA California Exemption Allowance Rate</field>
|
||||||
|
<field name="code">us_ca_sit_exemption_allowance_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US CA California Exemption Allowance Rate</field>
|
||||||
|
<field name="code">us_ca_sit_exemption_allowance_rate</field>
|
||||||
|
<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="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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ca_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US California - Department of Taxation (CA DE88) - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ca_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ca_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US California - Department of Taxation - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ca_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US California - Department of Taxation - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ca_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ca_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_ca_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
89
l10n_us_hr_payroll/data/state/co_colorado.xml
Normal file
89
l10n_us_hr_payroll/data/state/co_colorado.xml
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_co_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CO Colorado SUTA Wage Base</field>
|
||||||
|
<field name="code">us_co_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">13600.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_co_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CO Colorado SUTA Rate</field>
|
||||||
|
<field name="code">us_co_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.7</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_co_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CO Colorado SIT Tax Rate</field>
|
||||||
|
<field name="code">us_co_sit_tax_rate</field>
|
||||||
|
<field name="parameter_value">4.63</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_co_sit_exemption_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US CO Colorado SIT Exemption Rate</field>
|
||||||
|
<field name="code">us_co_sit_exemption_rate</field>
|
||||||
|
<field name="parameter_value">4000</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_co_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Colorado - Department of Labor and Employment - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_co_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_co_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Colorado - Division of Revenue - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_co_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Colorado - Division of Revenue - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_co_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_co_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_co_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
1224
l10n_us_hr_payroll/data/state/ct_connecticut.xml
Normal file
1224
l10n_us_hr_payroll/data/state/ct_connecticut.xml
Normal file
File diff suppressed because it is too large
Load Diff
107
l10n_us_hr_payroll/data/state/de_delaware.xml
Normal file
107
l10n_us_hr_payroll/data/state/de_delaware.xml
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_de_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US DE Delaware SUTA Wage Base</field>
|
||||||
|
<field name="code">us_de_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">16500.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_de_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US DE Delaware SUTA Rate</field>
|
||||||
|
<field name="code">us_de_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.50</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_de_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US DE Delaware SIT Tax Rate</field>
|
||||||
|
<field name="code">us_de_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_de_sit_standard_deduction_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US DE Delaware Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_de_sit_standard_deduction_rate</field>
|
||||||
|
<field name="parameter_value">3250</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_de_sit_personal_exemption_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US DE Delaware Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_de_sit_personal_exemption_rate</field>
|
||||||
|
<field name="parameter_value">110</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_de_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Delaware - Division of Unemployment Insurance - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_de_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_de_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Delaware - Division of Revenue - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_de_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Delaware - Division of Revenue - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_de_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_de_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_de_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -35,6 +35,7 @@
|
|||||||
<!-- Partners and Contribution Registers -->
|
<!-- Partners and Contribution Registers -->
|
||||||
<record id="res_partner_us_fl_dor" model="res.partner">
|
<record id="res_partner_us_fl_dor" model="res.partner">
|
||||||
<field name="name">US Florida - Department of Revenue</field>
|
<field name="name">US Florida - Department of Revenue</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="contrib_register_us_fl_dor" model="hr.contribution.register">
|
<record id="contrib_register_us_fl_dor" model="hr.contribution.register">
|
||||||
|
|||||||
@@ -38,53 +38,597 @@
|
|||||||
<field name="code">us_ga_sit_rate</field>
|
<field name="code">us_ga_sit_rate</field>
|
||||||
<field name="parameter_value">{
|
<field name="parameter_value">{
|
||||||
'married filing joint, both spouses working': {
|
'married filing joint, both spouses working': {
|
||||||
'weekly': ((9.50, 0.00, 1.00), (29.00, .10, 2.00), (48.00, .48, 3.00), (67.50, 1.06, 4.00), (96.00, 1.83, 5.00), ('inf', 3.27, 5.75)),
|
'weekly': (
|
||||||
'bi-weekly': ((19.00, 0.00, 1.00), (57.50, .19, 2.00), (96.00, .96, 3.00), (135.00, 2.12, 4.00), (192.00, 3.65, 5.00), ('inf', 6.54, 5.75)),
|
( 9.50, 0.00, 1.00),
|
||||||
'semi-monthly': ((21.00, 0.00, 1.00), (62.50, .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)),
|
(29.00, 0.10, 2.00),
|
||||||
'monthly': ((41.50, 0.00, 1.00), (125.50, .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)),
|
(48.00, 0.48, 3.00),
|
||||||
'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)),
|
(67.50, 1.06, 4.00),
|
||||||
'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)),
|
(96.00, 1.83, 5.00),
|
||||||
'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)),
|
('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': {
|
'married filing joint, one spouse working': {
|
||||||
'weekly': ((19.00, 0.00, 1.00), (57.50, .19, 2.00), (96.00, .96, 3.00), (135.00, 2.12, 4.00), (192.50, 3.65, 5.00), ('inf', 6.54, 5.75)),
|
'weekly': (
|
||||||
'bi-weekly': ((38.50, 0.00, 1.00), (115.00, .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)),
|
( 19.00, 0.00, 1.00),
|
||||||
'semi-monthly': ((41.50, 0.00, 1.00), (125.00, .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)),
|
( 57.50, 0.19, 2.00),
|
||||||
'monthly': ((83.00, 0.00, 1.00), (250.00, .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)),
|
( 96.00, 0.96, 3.00),
|
||||||
'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)),
|
(135.00, 2.12, 4.00),
|
||||||
'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)),
|
(192.50, 3.65, 5.00),
|
||||||
'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)),
|
( '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': {
|
'single': {
|
||||||
'weekly': ((14.50, 0.00, 1.00), (43.50, .14, 2.00), (72.00, .72, 3.00), (101.00, 1.59, 4.00), (135.00, 2.74, 5.00), ('inf', 4.42, 5.75)),
|
'weekly': (
|
||||||
'bi-weekly': ((29.00, 0.00, 1.00), (86.50, .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)),
|
( 14.50, 0.00, 1.00),
|
||||||
'semi-monthly': ((31.00, 0.00, 1.00), (93.50, .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)),
|
( 43.50, 0.14, 2.00),
|
||||||
'monthly': ((62.50, 0.00, 1.00), (187.00, .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)),
|
( 72.00, 0.72, 3.00),
|
||||||
'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)),
|
(101.00, 1.59, 4.00),
|
||||||
'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)),
|
(135.00, 2.74, 5.00),
|
||||||
'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)),
|
( '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': {
|
'head of household': {
|
||||||
'weekly': ((19.00, 0.00, 1.00), (57.50, .19, 2.00), (96.00, .96, 3.00), (135.00, 2.12, 4.00), (192.50, 3.65, 5.00), ('inf', 6.54, 5.75)),
|
'weekly': (
|
||||||
'bi-weekly': ((38.50, 0.00, 1.00), (115.00, .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)),
|
( 19.00, 0.00, 1.00),
|
||||||
'semi-monthly': ((41.50, 0.00, 1.00), (125.00, .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)),
|
( 57.50, 0.19, 2.00),
|
||||||
'monthly': ((83.00, 0.00, 1.00), (250.00, .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)),
|
( 96.00, 0.96, 3.00),
|
||||||
'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)),
|
(135.00, 2.12, 4.00),
|
||||||
'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)),
|
(192.50, 3.65, 5.00),
|
||||||
'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)),
|
( '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': {
|
'married filing separate': {
|
||||||
'weekly': ((9.50, 0.00, 1.00), (29.00, .10, 2.00), (48.00, .48, 3.00), (67.50, 1.06, 4.00), (96.00, 1.83, 5.00), ('inf', 3.27, 5.75)),
|
'weekly': (
|
||||||
'bi-weekly': ((19.00, 0.00, 1.00), (57.50, .19, 2.00), (96.00, .96, 3.00), (135.00, 2.12, 4.00), (192.00, 3.65, 5.00), ('inf', 6.54, 5.75)),
|
( 9.50, 0.00, 1.00),
|
||||||
'semi-monthly': ((21.00, 0.00, 1.00), (62.50, .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)),
|
(29.00, 0.10, 2.00),
|
||||||
'monthly': ((41.50, 0.00, 1.00), (125.50, .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)),
|
(48.00, 0.48, 3.00),
|
||||||
'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)),
|
(67.50, 1.06, 4.00),
|
||||||
'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)),
|
(96.00, 1.83, 5.00),
|
||||||
'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)),
|
('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>
|
||||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
</record>
|
</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.payroll.rate">
|
||||||
|
<field name="name">US GA Georgia SIT Rate Table</field>
|
||||||
|
<field name="code">us_ga_sit_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<data noupdate="1">
|
<data noupdate="1">
|
||||||
@@ -140,6 +684,60 @@
|
|||||||
}</field>
|
}</field>
|
||||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
</record>
|
</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.payroll.rate">
|
||||||
|
<field name="name">US GA Georgia SIT Personal Allowance</field>
|
||||||
|
<field name="code">us_ga_sit_personal_allowance</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<data noupdate="1">
|
<data noupdate="1">
|
||||||
@@ -157,6 +755,22 @@
|
|||||||
}</field>
|
}</field>
|
||||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
</record>
|
</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.payroll.rate">
|
||||||
|
<field name="name">US GA Georgia SIT Dependent Allowance Rate</field>
|
||||||
|
<field name="code">us_ga_sit_dependent_allowance_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<data noupdate="1">
|
<data noupdate="1">
|
||||||
@@ -212,11 +826,66 @@
|
|||||||
}</field>
|
}</field>
|
||||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
</record>
|
</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.payroll.rate">
|
||||||
|
<field name="name">US GA Georgia SIT Deduction</field>
|
||||||
|
<field name="code">us_ga_sit_deduction</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<!-- Partners and Contribution Registers -->
|
<!-- Partners and Contribution Registers -->
|
||||||
<record id="res_partner_us_ga_dor" model="res.partner">
|
<record id="res_partner_us_ga_dor" model="res.partner">
|
||||||
<field name="name">US Georgia - Department of Taxation - Unemployment Tax</field>
|
<field name="name">US Georgia - Department of Taxation - Unemployment Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="contrib_register_us_ga_dor" model="hr.contribution.register">
|
<record id="contrib_register_us_ga_dor" model="hr.contribution.register">
|
||||||
@@ -226,6 +895,7 @@
|
|||||||
|
|
||||||
<record id="res_partner_us_ga_dor_sit" model="res.partner">
|
<record id="res_partner_us_ga_dor_sit" model="res.partner">
|
||||||
<field name="name">US Georgia - Department of Taxation - Income Tax</field>
|
<field name="name">US Georgia - Department of Taxation - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="contrib_register_us_ga_dor_sit" model="hr.contribution.register">
|
<record id="contrib_register_us_ga_dor_sit" model="hr.contribution.register">
|
||||||
|
|||||||
177
l10n_us_hr_payroll/data/state/hi_hawaii.xml
Normal file
177
l10n_us_hr_payroll/data/state/hi_hawaii.xml
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_hi_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US HI Hawaii SUTA Wage Base</field>
|
||||||
|
<field name="code">us_hi_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">46800.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_hi_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US HI Hawaii SUTA Wage Base</field>
|
||||||
|
<field name="code">us_hi_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">48100.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_hi_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US HI Hawaii SUTA Rate</field>
|
||||||
|
<field name="code">us_hi_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.40</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_hi_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US HI Hawaii SUTA Rate</field>
|
||||||
|
<field name="code">us_hi_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.40</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_hi_sit_tax_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US HI Hawaii SIT Tax Rate</field>
|
||||||
|
<field name="code">us_hi_sit_tax_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US HI Hawaii SIT Tax Rate</field>
|
||||||
|
<field name="code">us_hi_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_hi_sit_personal_exemption_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US HI Hawaii Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_hi_sit_personal_exemption_rate</field>
|
||||||
|
<field name="parameter_value">1144</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_hi_sit_personal_exemption_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US HI Hawaii Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_hi_sit_personal_exemption_rate</field>
|
||||||
|
<field name="parameter_value">1144</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_hi_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Hawaii - Department of Labor and Industrial Relations - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_hi_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_hi_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Hawaii - Department of Taxation - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_hi_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Hawaii - Department of Taxation - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_hi_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_hi_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_hi_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
297
l10n_us_hr_payroll/data/state/ia_iowa.xml
Normal file
297
l10n_us_hr_payroll/data/state/ia_iowa.xml
Normal file
@@ -0,0 +1,297 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ia_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IA Iowa SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ia_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">30600.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ia_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IA Iowa SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ia_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">31600.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ia_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IA Iowa SUTA Rate</field>
|
||||||
|
<field name="code">us_ia_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ia_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IA Iowa SUTA Rate</field>
|
||||||
|
<field name="code">us_ia_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ia_sit_tax_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IA Iowa SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ia_sit_tax_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US IA Iowa SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ia_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ia_sit_standard_deduction_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IA Iowa Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_ia_sit_standard_deduction_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US IA Iowa Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_ia_sit_standard_deduction_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ia_sit_deduction_allowance_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IA Iowa Deduction Allowance Rate</field>
|
||||||
|
<field name="code">us_ia_sit_deduction_allowance_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US IA Iowa Deduction Allowance Rate</field>
|
||||||
|
<field name="code">us_ia_sit_deduction_allowance_rate</field>
|
||||||
|
<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="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 - Workforce Development - Unemployment Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ia_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Iowa - Workforce Development - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ia_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ia_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Iowa - Department of Revenue - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ia_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Iowa - Department of Revenue - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ia_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ia_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_ia_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
444
l10n_us_hr_payroll/data/state/id_idaho.xml
Normal file
444
l10n_us_hr_payroll/data/state/id_idaho.xml
Normal file
@@ -0,0 +1,444 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_id_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ID Idaho SUTA Wage Base</field>
|
||||||
|
<field name="code">us_id_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">40000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_id_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ID Idaho SUTA Wage Base</field>
|
||||||
|
<field name="code">us_id_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">41600.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_id_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ID Idaho SUTA Rate</field>
|
||||||
|
<field name="code">us_id_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_id_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ID Idaho SUTA Rate</field>
|
||||||
|
<field name="code">us_id_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_id_sit_tax_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ID Idaho SIT Tax Rate</field>
|
||||||
|
<field name="code">us_id_sit_tax_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US ID Idaho SIT Tax Rate</field>
|
||||||
|
<field name="code">us_id_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_id_sit_ictcat_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ID Idaho Child Tax Credit Allowance Rate</field>
|
||||||
|
<field name="code">us_id_sit_ictcat_rate</field>
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': 56.92,
|
||||||
|
'bi-weekly': 113.85,
|
||||||
|
'semi-monthly': 123.33,
|
||||||
|
'monthly': 246.67,
|
||||||
|
'annually': 2960.00,
|
||||||
|
}</field>
|
||||||
|
<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.payroll.rate">
|
||||||
|
<field name="name">US ID Idaho Child Tax Credit Allowance Rate</field>
|
||||||
|
<field name="code">us_id_sit_ictcat_rate</field>
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': 56.92,
|
||||||
|
'bi-weekly': 113.85,
|
||||||
|
'semi-monthly': 123.33,
|
||||||
|
'monthly': 246.67,
|
||||||
|
'annually': 2960.00,
|
||||||
|
}</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_id_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Idaho - Department of Labor (IDOL) - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_id_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_id_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Idaho - State Tax Commission (ISTC) - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_id_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Idaho - State Tax Commission (ISTC) - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_id_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_id_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_id_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
113
l10n_us_hr_payroll/data/state/il_illinois.xml
Normal file
113
l10n_us_hr_payroll/data/state/il_illinois.xml
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_il_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IL Illinois SUTA Wage Base</field>
|
||||||
|
<field name="code">us_il_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">12960.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_il_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IL Illinois SUTA Wage Base</field>
|
||||||
|
<field name="code">us_il_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">12740.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_il_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IL Illinois SUTA Rate</field>
|
||||||
|
<field name="code">us_il_suta_rate</field>
|
||||||
|
<field name="parameter_value">3.175</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_il_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IL Illinois SUTA Rate</field>
|
||||||
|
<field name="code">us_il_suta_rate</field>
|
||||||
|
<field name="parameter_value">3.125</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_il_sit_basic_allowances_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IL Illinois Basic Allowances Rate</field>
|
||||||
|
<field name="code">us_il_sit_basic_allowances_rate</field>
|
||||||
|
<field name="parameter_value">2275.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_il_sit_basic_allowances_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IL Illinois Basic Allowances Rate</field>
|
||||||
|
<field name="code">us_il_sit_basic_allowances_rate</field>
|
||||||
|
<field name="parameter_value">2325.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_il_sit_additional_allowances_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IL Illinois Additional Allowances Rate</field>
|
||||||
|
<field name="code">us_il_sit_additional_allowances_rate</field>
|
||||||
|
<field name="parameter_value">1000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_il_sit_additional_allowances_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IL Illinois Additional Allowances Rate</field>
|
||||||
|
<field name="code">us_il_sit_additional_allowances_rate</field>
|
||||||
|
<field name="parameter_value">1000.0</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_il_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Illinois - Department of Economic Security (IDES) - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_il_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_il_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Illinois - Department of Revenue (IDOR) - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_il_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Illinois - Department of Revenue (IDOR) - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_il_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_il_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_il_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
110
l10n_us_hr_payroll/data/state/in_indiana.xml
Normal file
110
l10n_us_hr_payroll/data/state/in_indiana.xml
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_in_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IN Indiana SUTA Wage Base</field>
|
||||||
|
<field name="code">us_in_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">9500.00</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_in_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IN Indiana SUTA Rate</field>
|
||||||
|
<field name="code">us_in_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.5</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- state income rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_in_suta_income_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IN Indiana SUTA Income Rate</field>
|
||||||
|
<field name="code">us_in_suta_income_rate</field>
|
||||||
|
<field name="parameter_value">3.23</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_in_sit_personal_exemption_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IN Indiana SIT Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_in_sit_personal_exemption_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_in_sit_dependent_exemption_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US IN Indiana SIT Dependent Exemption Rate</field>
|
||||||
|
<field name="code">us_in_sit_dependent_exemption_rate</field>
|
||||||
|
<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="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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_in_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Indiana - Department of Workforce Development - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_in_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_in_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Indiana - Department of Revenue - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_in_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Indiana - Department of Revenue - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_in_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_in_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_in_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
186
l10n_us_hr_payroll/data/state/ks_kansas.xml
Normal file
186
l10n_us_hr_payroll/data/state/ks_kansas.xml
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ks_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US KS Kansas SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ks_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">14000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ks_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US KS Kansas SUTA Rate</field>
|
||||||
|
<field name="code">us_ks_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Allowances -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ks_sit_allowances_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US KS Kansas Allowances Rate</field>
|
||||||
|
<field name="code">us_ks_sit_allowances_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Table from percentage table from https://www.ksrevenue.org/pdf/kw100.pdf -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ks_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US KS Kansas SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ks_sit_tax_rate</field>
|
||||||
|
<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="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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ks_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Kansas - Department of Labor - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ks_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ks_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Kansas - Department of Revenue - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ks_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Kansas - Department of Revenue - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ks_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ks_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_ks_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
91
l10n_us_hr_payroll/data/state/ky_kentucky.xml
Normal file
91
l10n_us_hr_payroll/data/state/ky_kentucky.xml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ky_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US KY Kentucky SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ky_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">10800.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ky_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US KY Kentucky SUTA Rate</field>
|
||||||
|
<field name="code">us_ky_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<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.payroll.rate">
|
||||||
|
<field name="name">US KY Kentucky Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_ky_sit_standard_deduction_rate</field>
|
||||||
|
<field name="parameter_value">2650</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- 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.payroll.rate">
|
||||||
|
<field name="name">US KY Kentucky SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ky_sit_tax_rate</field>
|
||||||
|
<field name="parameter_value">5.0</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ky_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Kentucky - Office of Unemployment Insurance - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ky_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ky_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Kentucky - Department of Revenue - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ky_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Kentucky - Department of Revenue - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ky_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ky_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_ky_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
148
l10n_us_hr_payroll/data/state/la_louisiana.xml
Normal file
148
l10n_us_hr_payroll/data/state/la_louisiana.xml
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_la_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US LA Louisiana SUTA Wage Base</field>
|
||||||
|
<field name="code">us_la_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">7700.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_la_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US LA Louisiana SUTA Wage Base</field>
|
||||||
|
<field name="code">us_la_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">7700.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_la_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US LA Louisiana SUTA Rate</field>
|
||||||
|
<field name="code">us_la_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.14</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_la_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US LA Louisiana SUTA Rate</field>
|
||||||
|
<field name="code">us_la_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.14</field>
|
||||||
|
<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. -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_la_sit_tax_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US LA Louisiana SIT Tax Rate</field>
|
||||||
|
<field name="code">us_la_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_la_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US LA Louisiana SIT Tax Rate</field>
|
||||||
|
<field name="code">us_la_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_la_sit_personal_exemption_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US LA Louisiana Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_la_sit_personal_exemption_rate</field>
|
||||||
|
<field name="parameter_value">4500</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_la_sit_personal_exemption_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US LA Louisiana Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_la_sit_personal_exemption_rate</field>
|
||||||
|
<field name="parameter_value">4500</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_la_sit_dependent_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US LA Louisiana Dependent Rate</field>
|
||||||
|
<field name="code">us_la_sit_dependent_rate</field>
|
||||||
|
<field name="parameter_value">1000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_la_sit_dependent_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US LA Louisiana Dependent Rate</field>
|
||||||
|
<field name="code">us_la_sit_dependent_rate</field>
|
||||||
|
<field name="parameter_value">1000.0</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_la_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Louisiana - Workforce Commission (LWC) - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_la_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_la_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Louisiana - Department of Revenue (LDOR) - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_la_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Louisiana - Department of Revenue (LDOR) - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_la_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_la_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_la_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
119
l10n_us_hr_payroll/data/state/me_maine.xml
Normal file
119
l10n_us_hr_payroll/data/state/me_maine.xml
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_me_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ME Maine SUTA Wage Base</field>
|
||||||
|
<field name="code">us_me_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">12000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_me_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ME Maine SUTA Rate</field>
|
||||||
|
<field name="code">us_me_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.92</field>
|
||||||
|
<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.-->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_me_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ME Maine SIT Tax Rate</field>
|
||||||
|
<field name="code">us_me_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_me_sit_standard_deduction_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ME Maine Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_me_sit_standard_deduction_rate</field>
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': {
|
||||||
|
( 82900, 9550),
|
||||||
|
(157900, 75000),
|
||||||
|
},
|
||||||
|
'married': {
|
||||||
|
(165800, 21950),
|
||||||
|
(315800, 150000),
|
||||||
|
},
|
||||||
|
}</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_me_sit_personal_exemption_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ME Maine Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_me_sit_personal_exemption_rate</field>
|
||||||
|
<field name="parameter_value">4300</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_me_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Maine - Department Of Labor | ReEmploy - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_me_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_me_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Maine - Department Of Revenue Services - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_me_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Maine - Department Of Revenue Services - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_me_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_me_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_me_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
96
l10n_us_hr_payroll/data/state/mi_michigan.xml
Normal file
96
l10n_us_hr_payroll/data/state/mi_michigan.xml
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mi_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MI Michigan SUTA Wage Base</field>
|
||||||
|
<field name="code">us_mi_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">9500.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mi_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MI Michigan SUTA Wage Base</field>
|
||||||
|
<field name="code">us_mi_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">9000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mi_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MI Michigan SUTA Rate</field>
|
||||||
|
<field name="code">us_mi_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mi_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MI Michigan SUTA Rate</field>
|
||||||
|
<field name="code">us_mi_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mi_sit_exemption_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MI Michigan Exemption Rate</field>
|
||||||
|
<field name="code">us_mi_sit_exemption_rate</field>
|
||||||
|
<field name="parameter_value">4400.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mi_sit_exemption_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MI Michigan Exemption Rate</field>
|
||||||
|
<field name="code">us_mi_sit_exemption_rate</field>
|
||||||
|
<field name="parameter_value">4750.0</field>
|
||||||
|
<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="contrib_register_us_mi_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Michigan - Unemployment Insurance Agency - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mi_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_mi_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Michigan - Department of Treasury - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_mi_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Michigan - Department of Treasury - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mi_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_mi_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_mi_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
141
l10n_us_hr_payroll/data/state/mn_minnesota.xml
Normal file
141
l10n_us_hr_payroll/data/state/mn_minnesota.xml
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mn_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MN Minnesota SUTA Wage Base</field>
|
||||||
|
<field name="code">us_mn_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">34000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mn_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MN Minnesota SUTA Wage Base</field>
|
||||||
|
<field name="code">us_mn_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">35000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mn_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MN Minnesota SUTA Rate</field>
|
||||||
|
<field name="code">us_mn_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.11</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mn_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MN Minnesota SUTA Rate</field>
|
||||||
|
<field name="code">us_mn_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.11</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mn_sit_tax_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MN Minnesota SIT Tax Rate</field>
|
||||||
|
<field name="code">us_mn_sit_tax_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US MN Minnesota SIT Tax Rate</field>
|
||||||
|
<field name="code">us_mn_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mn_sit_allowances_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MN Minnesota Allowances Rate</field>
|
||||||
|
<field name="code">us_mn_sit_allowances_rate</field>
|
||||||
|
<field name="parameter_value">4250.0</field>
|
||||||
|
<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.payroll.rate">
|
||||||
|
<field name="name">US MN Minnesota Allowances Rate</field>
|
||||||
|
<field name="code">us_mn_sit_allowances_rate</field>
|
||||||
|
<field name="parameter_value">4300.0</field>
|
||||||
|
<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="contrib_register_us_mn_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Minnesota - Unemployment Insurance Agency - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mn_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_mn_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Minnesota - Department of Treasury - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_mn_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Minnesota - Department of Treasury - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mn_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_mn_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_mn_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
147
l10n_us_hr_payroll/data/state/mo_missouri.xml
Normal file
147
l10n_us_hr_payroll/data/state/mo_missouri.xml
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mo_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MO Missouri SUTA Wage Base</field>
|
||||||
|
<field name="code">us_mo_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">12000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mo_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MO Missouri SUTA Wage Base</field>
|
||||||
|
<field name="code">us_mo_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">11500.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_mo_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MO Missouri SUTA Rate</field>
|
||||||
|
<field name="code">us_mo_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.376</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_mo_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MO Missouri SUTA Rate</field>
|
||||||
|
<field name="code">us_mo_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.376</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<!-- https://dor.mo.gov/forms/4282_2019.pdf -->
|
||||||
|
<record id="rule_parameter_us_mo_sit_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MO Missouri SIT Rate Table</field>
|
||||||
|
<field name="code">us_mo_sit_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US MO Missouri SIT Rate Table</field>
|
||||||
|
<field name="code">us_mo_sit_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<!-- https://dor.mo.gov/forms/4282_2019.pdf -->
|
||||||
|
<record id="rule_parameter_us_mo_sit_deduction_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MO Missouri SIT Deduction</field>
|
||||||
|
<field name="code">us_mo_sit_deduction</field>
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': 12400.0,
|
||||||
|
'married': 24800.0,
|
||||||
|
'head_of_household': 18650.0,
|
||||||
|
}</field>
|
||||||
|
<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.payroll.rate">
|
||||||
|
<field name="name">US MO Missouri SIT Deduction</field>
|
||||||
|
<field name="code">us_mo_sit_deduction</field>
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': 12400.0,
|
||||||
|
'married': 24800.0,
|
||||||
|
'head_of_household': 18650.0,
|
||||||
|
}</field>
|
||||||
|
<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="contrib_register_us_mo_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Missouri - Department of Taxation - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mo_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_mo_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Missouri - Department of Taxation - Income Tax</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="contrib_register_us_mo_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Missouri - Department of Taxation - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_mo_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_mo_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_mo_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -43,6 +43,8 @@
|
|||||||
]</field>
|
]</field>
|
||||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
</record>
|
</record>
|
||||||
|
<!-- https://www.dor.ms.gov/Documents/Computer%20Payroll%20Flowchart.pdf -->
|
||||||
|
<!-- Table D. -->
|
||||||
<record id="rule_parameter_us_ms_sit_rate_2020" model="hr.payroll.rate">
|
<record id="rule_parameter_us_ms_sit_rate_2020" model="hr.payroll.rate">
|
||||||
<field name="name">US MS Mississippi SIT Rate Table</field>
|
<field name="name">US MS Mississippi SIT Rate Table</field>
|
||||||
<field name="code">us_ms_sit_rate</field>
|
<field name="code">us_ms_sit_rate</field>
|
||||||
@@ -67,6 +69,19 @@
|
|||||||
}</field>
|
}</field>
|
||||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
</record>
|
</record>
|
||||||
|
<!-- https://www.dor.ms.gov/Documents/Computer%20Payroll%20Flowchart.pdf -->
|
||||||
|
<!-- Table C. -->
|
||||||
|
<record id="rule_parameter_us_ms_sit_deduction_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US MS Mississippi SIT Deduction</field>
|
||||||
|
<field name="code">us_ms_sit_deduction</field>
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'single': 2300.0,
|
||||||
|
'head_of_household': 3400.0,
|
||||||
|
'married_dual': 2300.0,
|
||||||
|
'married': 4600.0,
|
||||||
|
}</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<!-- Partners and Contribution Registers -->
|
<!-- Partners and Contribution Registers -->
|
||||||
|
|||||||
@@ -52,39 +52,78 @@
|
|||||||
<field name="name">US MT Montana SIT Rate Table</field>
|
<field name="name">US MT Montana SIT Rate Table</field>
|
||||||
<field name="code">us_mt_sit_rate</field>
|
<field name="code">us_mt_sit_rate</field>
|
||||||
<field name="parameter_value">{
|
<field name="parameter_value">{
|
||||||
'weekly': [
|
'weekly': (
|
||||||
( 135.00, 0.0, 1.80),
|
( 135.00, 0.0, 1.80),
|
||||||
( 288.00, 2.0, 4.40),
|
( 288.00, 2.0, 4.40),
|
||||||
( 2308.00, 9.0, 6.00),
|
( 2308.00, 9.0, 6.00),
|
||||||
( 'inf', 130.0, 6.60),
|
( 'inf', 130.0, 6.60),
|
||||||
],
|
),
|
||||||
'bi-weekly': [
|
'bi-weekly': (
|
||||||
( 269.00, 0.0, 1.80),
|
( 269.00, 0.0, 1.80),
|
||||||
( 577.00, 5.0, 4.40),
|
( 577.00, 5.0, 4.40),
|
||||||
( 4615.00, 18.0, 6.00),
|
( 4615.00, 18.0, 6.00),
|
||||||
( 'inf', 261.0, 6.60),
|
( 'inf', 261.0, 6.60),
|
||||||
],
|
),
|
||||||
'semi-monthly': [
|
'semi-monthly': (
|
||||||
( 292.00, 0.0, 1.80),
|
( 292.00, 0.0, 1.80),
|
||||||
( 625.00, 5.0, 4.40),
|
( 625.00, 5.0, 4.40),
|
||||||
( 5000.00, 20.0, 6.00),
|
( 5000.00, 20.0, 6.00),
|
||||||
( 'inf', 282.0, 6.60),
|
( 'inf', 282.0, 6.60),
|
||||||
],
|
),
|
||||||
'monthly': [
|
'monthly': (
|
||||||
( 583.00, 0.0, 1.80),
|
( 583.00, 0.0, 1.80),
|
||||||
( 1250.00, 11.0, 4.40),
|
( 1250.00, 11.0, 4.40),
|
||||||
( 10000.00, 40.0, 6.00),
|
( 10000.00, 40.0, 6.00),
|
||||||
( 'inf', 565.0, 6.60),
|
( 'inf', 565.0, 6.60),
|
||||||
],
|
),
|
||||||
'annually': [
|
'annually': (
|
||||||
( 7000.00, 0.0, 1.80),
|
( 7000.00, 0.0, 1.80),
|
||||||
( 15000.00, 126.0, 4.40),
|
( 15000.00, 126.0, 4.40),
|
||||||
( 120000.00, 478.0, 6.00),
|
( 120000.00, 478.0, 6.00),
|
||||||
( 'inf', 6778.0, 6.60),
|
( 'inf', 6778.0, 6.60),
|
||||||
],
|
),
|
||||||
}</field>
|
}</field>
|
||||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
</record>
|
</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.payroll.rate">
|
||||||
|
<field name="name">US MT Montana SIT Rate Table</field>
|
||||||
|
<field name="code">us_mt_sit_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<data noupdate="1">
|
<data noupdate="1">
|
||||||
@@ -100,6 +139,20 @@
|
|||||||
}</field>
|
}</field>
|
||||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
</record>
|
</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.payroll.rate">
|
||||||
|
<field name="name">US MT Montana SIT Exemption Rate Table</field>
|
||||||
|
<field name="code">us_mt_sit_exemption_rate</field>
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly': 37.0,
|
||||||
|
'bi-weekly': 73.0,
|
||||||
|
'semi-monthly': 79.0,
|
||||||
|
'monthly': 158.0,
|
||||||
|
'annually': 1900.0,
|
||||||
|
}</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<!-- Partners and Contribution Registers -->
|
<!-- Partners and Contribution Registers -->
|
||||||
|
|||||||
110
l10n_us_hr_payroll/data/state/nc_northcarolina.xml
Normal file
110
l10n_us_hr_payroll/data/state/nc_northcarolina.xml
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nc_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NC North Carolina SUTA Wage Base</field>
|
||||||
|
<field name="code">us_nc_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">24300.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_nc_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NC North Carolina SUTA Wage Base</field>
|
||||||
|
<field name="code">us_nc_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">25200.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nc_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NC North Carolina SUTA Rate</field>
|
||||||
|
<field name="code">us_nc_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_nc_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NC North Carolina SUTA Rate</field>
|
||||||
|
<field name="code">us_nc_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<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.payroll.rate">
|
||||||
|
<field name="name">US NC North Carolina Allowance Rate</field>
|
||||||
|
<field name="code">us_nc_sit_allowance_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US NC North Carolina Allowance Rate</field>
|
||||||
|
<field name="code">us_nc_sit_allowance_rate</field>
|
||||||
|
<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="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="contrib_register_us_nc_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US North Carolina - Department of Taxation - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nc_dor"/>
|
||||||
|
</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>
|
||||||
|
<record id="contrib_register_us_nc_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US North Carolina - Department of Taxation - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nc_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_nc_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_nc_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
272
l10n_us_hr_payroll/data/state/nd_north_dakota.xml
Normal file
272
l10n_us_hr_payroll/data/state/nd_north_dakota.xml
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nd_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ND North Dakota SUTA Wage Base</field>
|
||||||
|
<field name="code">us_nd_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">37900.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nd_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ND North Dakota SUTA Rate</field>
|
||||||
|
<field name="code">us_nd_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.02</field>
|
||||||
|
<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 -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nd_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ND North Dakota SIT Tax Rate</field>
|
||||||
|
<field name="code">us_nd_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nd_sit_allowances_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US ND North Dakota Allowances Rate</field>
|
||||||
|
<field name="code">us_nd_sit_allowances_rate</field>
|
||||||
|
<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="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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_nd_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US North Dakota - Office of State Tax Commissioner - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nd_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_nd_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US North Dakota - Taxpayer Access Point - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_nd_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US North Dakota - Taxpayer Access Point - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nd_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_nd_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_nd_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
230
l10n_us_hr_payroll/data/state/ne_nebraska.xml
Normal file
230
l10n_us_hr_payroll/data/state/ne_nebraska.xml
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ne_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NE Nebraska SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ne_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">9000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ne_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NE Nebraska SUTA Rate</field>
|
||||||
|
<field name="code">us_ne_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.25</field>
|
||||||
|
<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 -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ne_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NE Nebraska SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ne_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ne_sit_allowances_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NE Nebraska Allowances Rate</field>
|
||||||
|
<field name="code">us_ne_sit_allowances_rate</field>
|
||||||
|
<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="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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ne_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Nebraska - Nebraska Department of Labor - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ne_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ne_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Nebraska - Nebraska Department of Revenue - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ne_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Nebraska - Nebraska Department of Revenue - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ne_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ne_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_ne_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
47
l10n_us_hr_payroll/data/state/nh_new_hampshire.xml
Normal file
47
l10n_us_hr_payroll/data/state/nh_new_hampshire.xml
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nh_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NH New Hampshire SUTA Wage Base</field>
|
||||||
|
<field name="code">us_nh_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">14000.00</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nh_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NH New Hampshire SUTA Rate</field>
|
||||||
|
<field name="code">us_nh_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.2</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_nh_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US New Hampshire - Department of Employment Security - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nh_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_nh_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_us_nh_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
1016
l10n_us_hr_payroll/data/state/nj_newjersey.xml
Normal file
1016
l10n_us_hr_payroll/data/state/nj_newjersey.xml
Normal file
File diff suppressed because it is too large
Load Diff
297
l10n_us_hr_payroll/data/state/nm_new_mexico.xml
Normal file
297
l10n_us_hr_payroll/data/state/nm_new_mexico.xml
Normal file
@@ -0,0 +1,297 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nm_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NM New Mexico SUTA Wage Base</field>
|
||||||
|
<field name="code">us_nm_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">25800.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nm_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NM New Mexico SUTA Rate</field>
|
||||||
|
<field name="code">us_nm_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<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.payroll.rate">
|
||||||
|
<field name="name">US NM New Mexico SIT Tax Rate</field>
|
||||||
|
<field name="code">us_nm_sit_tax_rate</field>
|
||||||
|
<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="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="contrib_register_us_nm_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US New Mexico - Department of Workforce Solutions - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nm_dor"/>
|
||||||
|
</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>
|
||||||
|
<record id="contrib_register_us_nm_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US New Mexico - Department of Taxation and Revenue - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nm_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_nm_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_nm_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
49
l10n_us_hr_payroll/data/state/nv_nevada.xml
Normal file
49
l10n_us_hr_payroll/data/state/nv_nevada.xml
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nv_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NV Nevada SUTA Wage Base</field>
|
||||||
|
<field name="code">us_nv_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">32500.00</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_nv_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NV Nevada SUTA Rate</field>
|
||||||
|
<field name="code">us_nv_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.95</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_nv_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Nevada - Department of Employment, Training, and Rehabilitation, Employment Security Division - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_nv_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_nv_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_us_nv_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
420
l10n_us_hr_payroll/data/state/ny_new_york.xml
Normal file
420
l10n_us_hr_payroll/data/state/ny_new_york.xml
Normal file
@@ -0,0 +1,420 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ny_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NY New York SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ny_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">11400.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ny_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NY New York SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ny_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">11600.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ny_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NY New York SUTA Rate</field>
|
||||||
|
<field name="code">us_ny_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.5</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ny_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NY New York SUTA Rate</field>
|
||||||
|
<field name="code">us_ny_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.5</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ny_suta_rsf_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NY New York SUTA RSF Rate</field>
|
||||||
|
<field name="code">us_ny_suta_rsf_rate</field>
|
||||||
|
<field name="parameter_value">0.075</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ny_suta_rsf_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NY New York SUTA RSF Rate</field>
|
||||||
|
<field name="code">us_ny_suta_rsf_rate</field>
|
||||||
|
<field name="parameter_value">0.075</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ny_suta_mctmt_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NY New York SUTA MCTMT Rate</field>
|
||||||
|
<field name="code">us_ny_suta_mctmt_rate</field>
|
||||||
|
<field name="parameter_value">0.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ny_suta_mctmt_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NY New York SUTA MCTMT Rate</field>
|
||||||
|
<field name="code">us_ny_suta_mctmt_rate</field>
|
||||||
|
<field name="parameter_value">0.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ny_sit_tax_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NY New York SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ny_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ny_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NY New York SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ny_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ny_sit_over_10_exemption_rate_2019" model="hr.payroll.rate">
|
||||||
|
<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="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="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ny_sit_over_10_exemption_rate_2020" model="hr.payroll.rate">
|
||||||
|
<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="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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- Table A - Combined deduction and exemption allowance (Step 1) -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ny_sit_deduction_exemption_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NY New York Deduction Exemption Rate</field>
|
||||||
|
<field name="code">us_ny_sit_deduction_exemption_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_ny_sit_deduction_exemption_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US NY New York Deduction Exemption Rate</field>
|
||||||
|
<field name="code">us_ny_sit_deduction_exemption_rate</field>
|
||||||
|
<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="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="contrib_register_us_ny_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US New York - Department of Taxation and Finance - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ny_dor"/>
|
||||||
|
</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="contrib_register_us_ny_dor_rsf" model="hr.contribution.register">
|
||||||
|
<field name="name">US New York - Department of Taxation and Finance - Re-employment Service Fund</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ny_dor_rsf"/>
|
||||||
|
</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="contrib_register_us_ny_dor_mcmt" model="hr.contribution.register">
|
||||||
|
<field name="name">US New York - Department of Taxation and Finance - Metropolitan Commuter Transportation Mobility Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ny_dor_mcmt"/>
|
||||||
|
</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>
|
||||||
|
<record id="contrib_register_us_ny_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US New York - Department of Taxation and Finance - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ny_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ny_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_ny_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
294
l10n_us_hr_payroll/data/state/ok_oklahoma.xml
Normal file
294
l10n_us_hr_payroll/data/state/ok_oklahoma.xml
Normal file
@@ -0,0 +1,294 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ok_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US OK Oklahoma SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ok_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">18700.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ok_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US OK Oklahoma SUTA Rate</field>
|
||||||
|
<field name="code">us_ok_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.5</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- table from https://www.ok.gov/tax/documents/2020WHTables.pdf -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ok_sit_allowances_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US OK Oklahoma Allowances Rate</field>
|
||||||
|
<field name="code">us_ok_sit_allowances_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- table from https://www.ok.gov/tax/documents/2020WHTables.pdf -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ok_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US OK Oklahoma SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ok_sit_tax_rate</field>
|
||||||
|
<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="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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ok_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Oklahoma - Employment Security Commission - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ok_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ok_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Oklahoma - Tax Commission - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ok_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Oklahoma - Tax Commission - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ok_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ok_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_ok_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
135
l10n_us_hr_payroll/data/state/ri_rhode_island.xml
Normal file
135
l10n_us_hr_payroll/data/state/ri_rhode_island.xml
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ri_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US RI Rhode Island SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ri_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">24000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ri_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US RI Rhode Island SUTA Rate</field>
|
||||||
|
<field name="code">us_ri_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.06</field>
|
||||||
|
<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 -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ri_sit_exemption_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US RI Rhode Island Exemption Rate</field>
|
||||||
|
<field name="code">us_ri_sit_exemption_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ri_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US RI Rhode Island SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ri_sit_tax_rate</field>
|
||||||
|
<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="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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ri_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Rhode Island - Department of Labor and Training - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ri_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ri_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Rhode Island - Division of Taxations - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ri_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Rhode Island - Division of Taxations - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ri_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ri_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_ri_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
146
l10n_us_hr_payroll/data/state/sc_south_carolina.xml
Normal file
146
l10n_us_hr_payroll/data/state/sc_south_carolina.xml
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_sc_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US SC South Carolina SUTA Wage Base</field>
|
||||||
|
<field name="code">us_sc_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">14000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_sc_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US SC South Carolina SUTA Wage Base</field>
|
||||||
|
<field name="code">us_sc_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">14000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_sc_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US SC South Carolina SUTA Rate</field>
|
||||||
|
<field name="code">us_sc_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.09</field>
|
||||||
|
<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.payroll.rate">
|
||||||
|
<field name="name">US SC South Carolina SUTA Rate</field>
|
||||||
|
<field name="code">us_sc_suta_rate</field>
|
||||||
|
<field name="parameter_value">0.55</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_sc_sit_tax_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US SC South Carolina SIT Tax Rate</field>
|
||||||
|
<field name="code">us_sc_sit_tax_rate</field>
|
||||||
|
<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="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.payroll.rate">
|
||||||
|
<field name="name">US SC South Carolina SIT Tax Rate</field>
|
||||||
|
<field name="code">us_sc_sit_tax_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_sc_sit_personal_exemption_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US SC South Carolina Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_sc_sit_personal_exemption_rate</field>
|
||||||
|
<field name="parameter_value">2510</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_sc_sit_personal_exemption_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US SC South Carolina Personal Exemption Rate</field>
|
||||||
|
<field name="code">us_sc_sit_personal_exemption_rate</field>
|
||||||
|
<field name="parameter_value">2590</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_sc_sit_standard_deduction_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US SC South Carolina Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_sc_sit_standard_deduction_rate</field>
|
||||||
|
<field name="parameter_value">3470.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_sc_sit_standard_deduction_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US SC South Carolina Standard Deduction Rate</field>
|
||||||
|
<field name="code">us_sc_sit_standard_deduction_rate</field>
|
||||||
|
<field name="parameter_value">3820.0</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_sc_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US South Carolina - Department of Labor and Industrial Relations - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_sc_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
<record id="res_partner_us_sc_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US South Carolina - Department of Taxation - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_sc_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US South Carolina - Department of Taxation - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_sc_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_sc_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_sc_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
48
l10n_us_hr_payroll/data/state/sd_south_dakota.xml
Normal file
48
l10n_us_hr_payroll/data/state/sd_south_dakota.xml
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_sd_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US SD South Dakota SUTA Wage Base</field>
|
||||||
|
<field name="code">us_sd_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">15000.00</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_sd_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US SD South Dakota SUTA Rate</field>
|
||||||
|
<field name="code">us_sd_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.75</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_sd_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US South Dakota - Department of Labor - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_sd_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_sd_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_us_sd_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
48
l10n_us_hr_payroll/data/state/tn_tennessee.xml
Normal file
48
l10n_us_hr_payroll/data/state/tn_tennessee.xml
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_tn_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US TN Tennessee SUTA Wage Base</field>
|
||||||
|
<field name="code">us_tn_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">7000.00</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_tn_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US TN Tennessee SUTA Rate</field>
|
||||||
|
<field name="code">us_tn_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_tn_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Tennessee - Department of Revenue - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_tn_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_tn_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_us_tn_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
153
l10n_us_hr_payroll/data/state/ut_utah.xml
Normal file
153
l10n_us_hr_payroll/data/state/ut_utah.xml
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ut_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US UT Utah SUTA Wage Base</field>
|
||||||
|
<field name="code">us_ut_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">36600.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ut_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US UT Utah SUTA Rate</field>
|
||||||
|
<field name="code">us_ut_suta_rate</field>
|
||||||
|
<field name="parameter_value">0.1</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ut_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US UT Utah TAX Rate</field>
|
||||||
|
<field name="code">us_ut_tax_rate</field>
|
||||||
|
<field name="parameter_value">0.0495</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Table based on https://tax.utah.gov/forms/pubs/pub-14.pdf -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ut_sit_allowances_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US UT Utah Allowances Rate</field>
|
||||||
|
<field name="code">us_ut_sit_allowances_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- Table based on https://tax.utah.gov/forms/pubs/pub-14.pdf -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_ut_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US UT Utah SIT Tax Rate</field>
|
||||||
|
<field name="code">us_ut_sit_tax_rate</field>
|
||||||
|
<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="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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ut_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Utah - Employment Security Commission - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ut_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_ut_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Utah - Tax Commission - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_ut_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Utah - Tax Commission - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_ut_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_ut_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_ut_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
185
l10n_us_hr_payroll/data/state/vt_vermont.xml
Normal file
185
l10n_us_hr_payroll/data/state/vt_vermont.xml
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base from https://labor.vermont.gov/unemployment-insurance/ui-employers/quarterly-reporting-taxable-wage-information -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_vt_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US VT Vermont SUTA Wage Base</field>
|
||||||
|
<field name="code">us_vt_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">16100.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_vt_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US VT Vermont SUTA Rate</field>
|
||||||
|
<field name="code">us_vt_suta_rate</field>
|
||||||
|
<field name="parameter_value">1.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_vt_sit_allowances_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US VT Vermont Allowances Rate</field>
|
||||||
|
<field name="code">us_vt_sit_allowances_rate</field>
|
||||||
|
<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="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
<!-- Table based on https://tax.vermont.gov/sites/tax/files/documents/WithholdingInstructions.pdf-->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_vt_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US VT Vermont SIT Tax Rate</field>
|
||||||
|
<field name="code">us_vt_sit_tax_rate</field>
|
||||||
|
<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="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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_vt_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Vermont - Employment Security Commission - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_vt_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
<record id="res_partner_us_vt_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Vermont - Tax Commission - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_vt_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Vermont - Tax Commission - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_vt_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_vt_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_vt_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
109
l10n_us_hr_payroll/data/state/wi_wisconsin.xml
Normal file
109
l10n_us_hr_payroll/data/state/wi_wisconsin.xml
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wi_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US WI Wisconsin SUTA Wage Base</field>
|
||||||
|
<field name="code">us_wi_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">14000.00</field>
|
||||||
|
<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 -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wi_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US WI Wisconsin SUTA Rate</field>
|
||||||
|
<field name="code">us_wi_suta_rate</field>
|
||||||
|
<field name="parameter_value">3.05</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wi_sit_exemption_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US WI Wisconsin Exemption Rate</field>
|
||||||
|
<field name="code">us_wi_sit_exemption_rate</field>
|
||||||
|
<field name="parameter_value">22</field>
|
||||||
|
<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. -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wi_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US WI Wisconsin SIT Tax Rate</field>
|
||||||
|
<field name="code">us_wi_sit_tax_rate</field>
|
||||||
|
<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="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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_wi_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Wisconsin - Department of Workforce Development - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wi_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_wi_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US Wisconsin - Department of Revenue - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_wi_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US Wisconsin - Department of Revenue - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wi_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_wi_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_wi_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
209
l10n_us_hr_payroll/data/state/wv_west_virginia.xml
Normal file
209
l10n_us_hr_payroll/data/state/wv_west_virginia.xml
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wv_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US WV West Virginia SUTA Wage Base</field>
|
||||||
|
<field name="code">us_wv_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">12000.0</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wv_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US WV West Virginia SUTA Rate</field>
|
||||||
|
<field name="code">us_wv_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.7</field>
|
||||||
|
<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-->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wv_sit_exemption_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US WV West Virginia Exemption Rate</field>
|
||||||
|
<field name="code">us_wv_sit_exemption_rate</field>
|
||||||
|
<field name="parameter_value">{
|
||||||
|
'weekly' : 38.46,
|
||||||
|
'bi-weekly' : 76.92,
|
||||||
|
'semi-monthly': 83.33,
|
||||||
|
'monthly' : 166.67,
|
||||||
|
'annually': 2000.00,
|
||||||
|
}</field>
|
||||||
|
<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-->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wv_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US WV West Virginia SIT Tax Rate</field>
|
||||||
|
<field name="code">us_wv_sit_tax_rate</field>
|
||||||
|
<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="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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_wv_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US West Virginia - WorkForce - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wv_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_us_wv_dor_sit" model="res.partner">
|
||||||
|
<field name="name">US West Virginia - Department of Revenue - Income Tax</field>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_wv_dor_sit" model="hr.contribution.register">
|
||||||
|
<field name="name">US West Virginia - Department of Revenue - Income Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wv_dor_sit"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_wv_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_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="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="register_id" ref="contrib_register_us_wv_dor_sit"/>
|
||||||
|
<field name="appears_on_payslip" eval="True"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
60
l10n_us_hr_payroll/data/state/wy_wyoming.xml
Normal file
60
l10n_us_hr_payroll/data/state/wy_wyoming.xml
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<!-- Wage Base -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wy_suta_wage_base_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US WY Wyoming SUTA Wage Base</field>
|
||||||
|
<field name="code">us_wy_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">25400.00</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_wy_suta_wage_base_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US WY Wyoming SUTA Wage Base</field>
|
||||||
|
<field name="code">us_wy_suta_wage_base</field>
|
||||||
|
<field name="parameter_value">26400.00</field>
|
||||||
|
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<!-- Rate -->
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="rule_parameter_us_wy_suta_rate_2019" model="hr.payroll.rate">
|
||||||
|
<field name="name">US WY Wyoming SUTA Rate</field>
|
||||||
|
<field name="code">us_wy_suta_rate</field>
|
||||||
|
<field name="parameter_value">2.10</field>
|
||||||
|
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||||
|
</record>
|
||||||
|
<record id="rule_parameter_us_wy_suta_rate_2020" model="hr.payroll.rate">
|
||||||
|
<field name="name">US WY Wyoming SUTA Rate</field>
|
||||||
|
<field name="code">us_wy_suta_rate</field>
|
||||||
|
<field name="parameter_value">8.5</field>
|
||||||
|
<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>
|
||||||
|
<field name="supplier">1</field>
|
||||||
|
</record>
|
||||||
|
<record id="contrib_register_us_wy_dor" model="hr.contribution.register">
|
||||||
|
<field name="name">US Wyoming - Department of Workforce Services (WDWS) - Unemployment Tax</field>
|
||||||
|
<field name="partner_id" ref="res_partner_us_wy_dor"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<record id="hr_payroll_rule_er_us_wy_suta" model="hr.salary.rule">
|
||||||
|
<field name="sequence" eval="450"/>
|
||||||
|
<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="register_id" ref="contrib_register_us_wy_dor"/>
|
||||||
|
<field name="appears_on_payslip" eval="False"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -33,6 +33,28 @@ FIELDS_CONTRACT_TO_US_PAYROLL_FORMS_2020 = {
|
|||||||
'ga_g4_additional_allowances': 'ga_g4_sit_additional_allowances',
|
'ga_g4_additional_allowances': 'ga_g4_sit_additional_allowances',
|
||||||
'ga_g4_additional_wh': 'state_income_tax_additional_withholding',
|
'ga_g4_additional_wh': 'state_income_tax_additional_withholding',
|
||||||
|
|
||||||
|
'ia_w4_allowances': 'ia_w4_sit_allowances',
|
||||||
|
'ia_w4_additional_wh': 'state_income_tax_additional_withholding',
|
||||||
|
'ia_w4_tax_exempt': 'state_income_tax_exempt',
|
||||||
|
|
||||||
|
'id_w4_filing_status': 'id_w4_sit_filing_status',
|
||||||
|
'id_w4_allowances': 'id_w4_sit_allowances',
|
||||||
|
|
||||||
|
'il_w4_basic_allowances': 'il_w4_sit_basic_allowances',
|
||||||
|
'il_w4_additional_allowances': 'il_w4_sit_additional_allowances',
|
||||||
|
'il_w4_additional_wh': 'state_income_tax_additional_withholding',
|
||||||
|
|
||||||
|
'mi_w4_exemptions': 'mi_w4_sit_exemptions',
|
||||||
|
'mi_w4_tax_exempt': 'state_income_tax_exempt',
|
||||||
|
'mi_w4_additional_wh': 'state_income_tax_additional_withholding',
|
||||||
|
|
||||||
|
'mn_w4mn_filing_status': 'mn_w4mn_sit_filing_status',
|
||||||
|
'mn_w4mn_allowances': 'mn_w4mn_sit_allowances',
|
||||||
|
'mn_w4mn_additional_wh': 'state_income_tax_additional_withholding',
|
||||||
|
|
||||||
|
'mo_mow4_filing_status': 'mo_mow4_sit_filing_status',
|
||||||
|
'mo_mow4_additional_withholding': 'state_income_tax_additional_withholding',
|
||||||
|
|
||||||
'ms_89_350_filing_status': 'ms_89_350_sit_filing_status',
|
'ms_89_350_filing_status': 'ms_89_350_sit_filing_status',
|
||||||
'ms_89_350_exemption': 'ms_89_350_sit_exemption_value',
|
'ms_89_350_exemption': 'ms_89_350_sit_exemption_value',
|
||||||
'ms_89_350_additional_withholding': 'state_income_tax_additional_withholding',
|
'ms_89_350_additional_withholding': 'state_income_tax_additional_withholding',
|
||||||
@@ -41,6 +63,15 @@ FIELDS_CONTRACT_TO_US_PAYROLL_FORMS_2020 = {
|
|||||||
'mt_mw4_exemptions': 'mt_mw4_sit_exemptions',
|
'mt_mw4_exemptions': 'mt_mw4_sit_exemptions',
|
||||||
'mt_mw4_exempt': 'mt_mw4_sit_exempt',
|
'mt_mw4_exempt': 'mt_mw4_sit_exempt',
|
||||||
|
|
||||||
|
'nc_nc4_filing_status': 'nc_nc4_sit_filing_status',
|
||||||
|
'nc_nc4_allowances': 'nc_nc4_sit_allowances',
|
||||||
|
'nc_nc4_additional_wh': 'state_income_tax_additional_withholding',
|
||||||
|
|
||||||
|
'nj_njw4_filing_status': 'nj_njw4_sit_filing_status',
|
||||||
|
'nj_njw4_allowances': 'nj_njw4_sit_allowances',
|
||||||
|
'nj_njw4_rate_table': 'nj_njw4_sit_rate_table',
|
||||||
|
'nj_additional_withholding': 'state_income_tax_additional_withholding',
|
||||||
|
|
||||||
'oh_additional_withholding': 'state_income_tax_additional_withholding',
|
'oh_additional_withholding': 'state_income_tax_additional_withholding',
|
||||||
'oh_income_allowances': 'oh_it4_sit_exemptions',
|
'oh_income_allowances': 'oh_it4_sit_exemptions',
|
||||||
|
|
||||||
@@ -67,6 +98,44 @@ XMLIDS_TO_REMOVE_2020 = [
|
|||||||
'l10n_us_hr_payroll.hr_payroll_rules_futa_wages_2018',
|
'l10n_us_hr_payroll.hr_payroll_rules_futa_wages_2018',
|
||||||
'l10n_us_hr_payroll.hr_payroll_rules_fed_inc_withhold_2018_married',
|
'l10n_us_hr_payroll.hr_payroll_rules_fed_inc_withhold_2018_married',
|
||||||
# State
|
# State
|
||||||
|
'l10n_us_ak_hr_payroll.hr_payroll_ak_unemp_wages',
|
||||||
|
'l10n_us_ak_hr_payroll.hr_payroll_ak_unemp',
|
||||||
|
'l10n_us_ak_hr_payroll.hr_payroll_ak_unemp_ee',
|
||||||
|
'l10n_us_ak_hr_payroll.hr_payroll_rules_ak_unemp_wages',
|
||||||
|
|
||||||
|
'l10n_us_al_hr_payroll.hr_payroll_al_unemp_wages',
|
||||||
|
'l10n_us_al_hr_payroll.hr_payroll_al_unemp',
|
||||||
|
'l10n_us_al_hr_payroll.hr_payroll_al_income_withhold',
|
||||||
|
'l10n_us_al_hr_payroll.hr_payroll_rules_al_unemp_wages',
|
||||||
|
|
||||||
|
'l10n_us_ar_hr_payroll.hr_payroll_ar_unemp_wages',
|
||||||
|
'l10n_us_ar_hr_payroll.hr_payroll_ar_unemp',
|
||||||
|
'l10n_us_ar_hr_payroll.hr_payroll_ar_income_withhold',
|
||||||
|
'l10n_us_ar_hr_payroll.hr_payroll_rules_ar_unemp_wages',
|
||||||
|
|
||||||
|
'l10n_us_az_hr_payroll.hr_payroll_az_unemp_wages',
|
||||||
|
'l10n_us_az_hr_payroll.hr_payroll_az_unemp',
|
||||||
|
'l10n_us_az_hr_payroll.hr_payroll_az_income_withhold',
|
||||||
|
'l10n_us_az_hr_payroll.hr_payroll_rules_az_unemp_wages',
|
||||||
|
|
||||||
|
'l10n_us_ca_hr_payroll.res_partner_cador_ett',
|
||||||
|
'l10n_us_ca_hr_payroll.res_partner_cador_sdi',
|
||||||
|
'l10n_us_ca_hr_payroll.hr_payroll_ca_uit_wages',
|
||||||
|
'l10n_us_ca_hr_payroll.hr_payroll_ca_uit',
|
||||||
|
'l10n_us_ca_hr_payroll.hr_payroll_ca_ett_wages',
|
||||||
|
'l10n_us_ca_hr_payroll.hr_payroll_ca_ett',
|
||||||
|
'l10n_us_ca_hr_payroll.hr_payroll_ca_sdi_wages',
|
||||||
|
'l10n_us_ca_hr_payroll.hr_payroll_ca_sdi',
|
||||||
|
'l10n_us_ca_hr_payroll.hr_payroll_ca_income_withhold',
|
||||||
|
'l10n_us_ca_hr_payroll.hr_payroll_rules_ca_uit_wages_2018',
|
||||||
|
'l10n_us_ca_hr_payroll.hr_payroll_rules_ca_ett_wages_2018',
|
||||||
|
'l10n_us_ca_hr_payroll.hr_payroll_rules_ca_sdi_wages_2018',
|
||||||
|
|
||||||
|
'l10n_us_ct_hr_payroll.hr_payroll_ct_unemp_wages',
|
||||||
|
'l10n_us_ct_hr_payroll.hr_payroll_ct_unemp',
|
||||||
|
'l10n_us_ct_hr_payroll.hr_payroll_ct_income_withhold',
|
||||||
|
'l10n_us_ct_hr_payroll.hr_payroll_rules_ct_unemp_wages',
|
||||||
|
|
||||||
'l10n_us_fl_hr_payroll.hr_payroll_fl_unemp_wages',
|
'l10n_us_fl_hr_payroll.hr_payroll_fl_unemp_wages',
|
||||||
'l10n_us_fl_hr_payroll.hr_payroll_fl_unemp',
|
'l10n_us_fl_hr_payroll.hr_payroll_fl_unemp',
|
||||||
'l10n_us_fl_hr_payroll.hr_payroll_rules_fl_unemp_wages_2018',
|
'l10n_us_fl_hr_payroll.hr_payroll_rules_fl_unemp_wages_2018',
|
||||||
@@ -76,6 +145,36 @@ XMLIDS_TO_REMOVE_2020 = [
|
|||||||
'l10n_us_ga_hr_payroll.hr_payroll_ga_income_withhold',
|
'l10n_us_ga_hr_payroll.hr_payroll_ga_income_withhold',
|
||||||
'l10n_us_ga_hr_payroll.hr_payroll_rules_ga_unemp_wages',
|
'l10n_us_ga_hr_payroll.hr_payroll_rules_ga_unemp_wages',
|
||||||
|
|
||||||
|
'l10n_us_ia_hr_payroll.hr_payroll_ia_unemp_wages',
|
||||||
|
'l10n_us_ia_hr_payroll.hr_payroll_ia_unemp',
|
||||||
|
'l10n_us_ia_hr_payroll.hr_payroll_ia_income_withhold',
|
||||||
|
'l10n_us_ia_hr_payroll.hr_payroll_rules_ia_unemp_wages',
|
||||||
|
|
||||||
|
'l10n_us_id_hr_payroll.hr_payroll_id_unemp_wages',
|
||||||
|
'l10n_us_id_hr_payroll.hr_payroll_id_unemp',
|
||||||
|
'l10n_us_id_hr_payroll.hr_payroll_id_income_withhold',
|
||||||
|
'l10n_us_id_hr_payroll.hr_payroll_rules_id_unemp_wages',
|
||||||
|
|
||||||
|
'l10n_us_il_hr_payroll.hr_payroll_il_unemp_wages',
|
||||||
|
'l10n_us_il_hr_payroll.hr_payroll_il_unemp',
|
||||||
|
'l10n_us_il_hr_payroll.hr_payroll_il_income_withhold',
|
||||||
|
'l10n_us_il_hr_payroll.hr_payroll_rules_il_unemp_wages',
|
||||||
|
|
||||||
|
'l10n_us_mi_hr_payroll.hr_payroll_mi_unemp_wages',
|
||||||
|
'l10n_us_mi_hr_payroll.hr_payroll_mi_unemp',
|
||||||
|
'l10n_us_mi_hr_payroll.hr_payroll_mi_income_withhold',
|
||||||
|
'l10n_us_mi_hr_payroll.hr_payroll_rules_mi_unemp_wages',
|
||||||
|
|
||||||
|
'l10n_us_mn_hr_payroll.hr_payroll_mn_unemp_wages',
|
||||||
|
'l10n_us_mn_hr_payroll.hr_payroll_mn_unemp',
|
||||||
|
'l10n_us_mn_hr_payroll.hr_payroll_mn_income_withhold',
|
||||||
|
'l10n_us_mn_hr_payroll.hr_payroll_rules_mn_unemp_wages',
|
||||||
|
|
||||||
|
'l10n_us_mo_hr_payroll.hr_payroll_mo_unemp_wages',
|
||||||
|
'l10n_us_mo_hr_payroll.hr_payroll_mo_unemp',
|
||||||
|
'l10n_us_mo_hr_payroll.hr_payroll_mo_income_withhold',
|
||||||
|
'l10n_us_mo_hr_payroll.hr_payroll_rules_mo_unemp_wages_2018',
|
||||||
|
|
||||||
'l10n_us_ms_hr_payroll.hr_payroll_ms_unemp_wages',
|
'l10n_us_ms_hr_payroll.hr_payroll_ms_unemp_wages',
|
||||||
'l10n_us_ms_hr_payroll.hr_payroll_ms_unemp',
|
'l10n_us_ms_hr_payroll.hr_payroll_ms_unemp',
|
||||||
'l10n_us_ms_hr_payroll.hr_payroll_ms_income_withhold',
|
'l10n_us_ms_hr_payroll.hr_payroll_ms_income_withhold',
|
||||||
@@ -86,6 +185,38 @@ XMLIDS_TO_REMOVE_2020 = [
|
|||||||
'l10n_us_mt_hr_payroll.hr_payroll_mt_income_withhold',
|
'l10n_us_mt_hr_payroll.hr_payroll_mt_income_withhold',
|
||||||
'l10n_us_mt_hr_payroll.hr_payroll_rules_mt_unemp_wages',
|
'l10n_us_mt_hr_payroll.hr_payroll_rules_mt_unemp_wages',
|
||||||
|
|
||||||
|
'l10n_us_nc_hr_payroll.hr_payroll_nc_unemp_wages',
|
||||||
|
'l10n_us_nc_hr_payroll.hr_payroll_nc_unemp',
|
||||||
|
'l10n_us_nc_hr_payroll.hr_payroll_nc_income_withhold',
|
||||||
|
'l10n_us_nc_hr_payroll.hr_payroll_rules_nc_unemp_wages_2018',
|
||||||
|
|
||||||
|
'l10n_us_nj_hr_payroll.res_partner_njdor_unemp_company',
|
||||||
|
'l10n_us_nj_hr_payroll.res_partner_njdor_sdi_employee',
|
||||||
|
'l10n_us_nj_hr_payroll.res_partner_njdor_sdi_company',
|
||||||
|
'l10n_us_nj_hr_payroll.res_partner_njdor_fli',
|
||||||
|
'l10n_us_nj_hr_payroll.res_partner_njdor_wf',
|
||||||
|
'l10n_us_nj_hr_payroll.contrib_register_njdor_unemp_company',
|
||||||
|
'l10n_us_nj_hr_payroll.contrib_register_njdor_sdi_employee',
|
||||||
|
'l10n_us_nj_hr_payroll.contrib_register_njdor_sdi_company',
|
||||||
|
'l10n_us_nj_hr_payroll.contrib_register_njdor_fli',
|
||||||
|
'l10n_us_nj_hr_payroll.contrib_register_njdor_wf',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_nj_unemp_wages',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_nj_sdi_wages',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_nj_fli_wages',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_nj_wf_wages',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_nj_unemp_employee',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_nj_unemp_company',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_nj_sdi_company',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_nj_sdi_employee',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_nj_fli',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_nj_wf',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_nj_wf_company',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_nj_income_withhold',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_rules_nj_unemp_wages_2018',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_rules_nj_sdi_wages_2018',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_rules_nj_fli_wages_2018',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_rules_nj_wf_wages_2018',
|
||||||
|
|
||||||
'l10n_us_oh_hr_payroll.hr_payroll_oh_unemp_wages',
|
'l10n_us_oh_hr_payroll.hr_payroll_oh_unemp_wages',
|
||||||
'l10n_us_oh_hr_payroll.hr_payroll_oh_unemp',
|
'l10n_us_oh_hr_payroll.hr_payroll_oh_unemp',
|
||||||
'l10n_us_oh_hr_payroll.hr_payroll_oh_income_withhold',
|
'l10n_us_oh_hr_payroll.hr_payroll_oh_income_withhold',
|
||||||
@@ -100,6 +231,11 @@ XMLIDS_TO_REMOVE_2020 = [
|
|||||||
'l10n_us_pa_hr_payroll.hr_payroll_rules_pa_unemp_wages_2018',
|
'l10n_us_pa_hr_payroll.hr_payroll_rules_pa_unemp_wages_2018',
|
||||||
'l10n_us_pa_hr_payroll.hr_payroll_rules_pa_inc_withhold_add',
|
'l10n_us_pa_hr_payroll.hr_payroll_rules_pa_inc_withhold_add',
|
||||||
|
|
||||||
|
'l10n_us_sc_hr_payroll.hr_payroll_sc_unemp_wages',
|
||||||
|
'l10n_us_sc_hr_payroll.hr_payroll_sc_unemp',
|
||||||
|
'l10n_us_sc_hr_payroll.hr_payroll_sc_income_withhold',
|
||||||
|
'l10n_us_sc_hr_payroll.hr_payroll_rules_sc_unemp_wages',
|
||||||
|
|
||||||
'l10n_us_tx_hr_payroll.contrib_register_txdor',
|
'l10n_us_tx_hr_payroll.contrib_register_txdor',
|
||||||
'l10n_us_tx_hr_payroll.hr_payroll_tx_unemp_wages',
|
'l10n_us_tx_hr_payroll.hr_payroll_tx_unemp_wages',
|
||||||
'l10n_us_tx_hr_payroll.hr_payroll_tx_unemp',
|
'l10n_us_tx_hr_payroll.hr_payroll_tx_unemp',
|
||||||
@@ -118,6 +254,10 @@ XMLIDS_TO_REMOVE_2020 = [
|
|||||||
'l10n_us_wa_hr_payroll.hr_payroll_wa_lni_withhold',
|
'l10n_us_wa_hr_payroll.hr_payroll_wa_lni_withhold',
|
||||||
'l10n_us_wa_hr_payroll.hr_payroll_rules_wa_unemp_wages_2018',
|
'l10n_us_wa_hr_payroll.hr_payroll_rules_wa_unemp_wages_2018',
|
||||||
|
|
||||||
|
'l10n_us_wy_hr_payroll.hr_payroll_wy_unemp_wages',
|
||||||
|
'l10n_us_wy_hr_payroll.hr_payroll_wy_unemp',
|
||||||
|
'l10n_us_wy_hr_payroll.hr_payroll_rules_wy_unemp_wages'
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
XMLIDS_TO_RENAME_2020 = {
|
XMLIDS_TO_RENAME_2020 = {
|
||||||
@@ -134,6 +274,48 @@ XMLIDS_TO_RENAME_2020 = {
|
|||||||
'l10n_us_hr_payroll.hr_payroll_rules_fica_comp_m': 'l10n_us_hr_payroll.hr_payroll_rule_er_fed_941_m',
|
'l10n_us_hr_payroll.hr_payroll_rules_fica_comp_m': 'l10n_us_hr_payroll.hr_payroll_rule_er_fed_941_m',
|
||||||
'l10n_us_hr_payroll.hr_payroll_rules_fed_inc_withhold_2018_single': 'l10n_us_hr_payroll.hr_payroll_rule_ee_fed_941_fit',
|
'l10n_us_hr_payroll.hr_payroll_rules_fed_inc_withhold_2018_single': 'l10n_us_hr_payroll.hr_payroll_rule_ee_fed_941_fit',
|
||||||
# State
|
# State
|
||||||
|
'l10n_us_ak_hr_payroll.res_partner_ak_dlwd_unemp': 'l10n_us_hr_payroll.res_partner_us_ak_dor',
|
||||||
|
'l10n_us_ak_hr_payroll.contrib_register_ak_dlwd_unemp': 'l10n_us_hr_payroll.contrib_register_us_ak_dor',
|
||||||
|
'l10n_us_ak_hr_payroll.hr_payroll_rules_ak_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_ak_suta',
|
||||||
|
'l10n_us_ak_hr_payroll.hr_payroll_rules_ak_unemp_ee': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_ak_sit',
|
||||||
|
|
||||||
|
'l10n_us_al_hr_payroll.res_partner_al_dol_unemp': 'l10n_us_hr_payroll.res_partner_us_al_dor',
|
||||||
|
'l10n_us_al_hr_payroll.res_partner_al_dor_withhold': 'l10n_us_hr_payroll.res_partner_us_al_dor_sit',
|
||||||
|
'l10n_us_al_hr_payroll.contrib_register_al_dol_unemp': 'l10n_us_hr_payroll.contrib_register_us_al_dor',
|
||||||
|
'l10n_us_al_hr_payroll.contrib_register_al_dor_withhold': 'l10n_us_hr_payroll.contrib_register_us_al_dor_sit',
|
||||||
|
'l10n_us_al_hr_payroll.hr_payroll_rules_al_unemp': 'l10n_us_hr_payroll.hr_payroll_rules_az_unemp',
|
||||||
|
'l10n_us_al_hr_payroll.hr_payroll_rules_al_inc_withhold': 'l10n_us_hr_payroll.hr_payroll_rules_az_inc_withhold',
|
||||||
|
|
||||||
|
'l10n_us_ar_hr_payroll.res_partner_ar_dws_unemp': 'l10n_us_hr_payroll.res_partner_us_ar_dor',
|
||||||
|
'l10n_us_ar_hr_payroll.res_partner_ar_dfa_withhold': 'l10n_us_hr_payroll.res_partner_us_ar_dor_sit',
|
||||||
|
'l10n_us_ar_hr_payroll.contrib_register_ar_dws_unemp': 'l10n_us_hr_payroll.contrib_register_us_ar_dor',
|
||||||
|
'l10n_us_ar_hr_payroll.contrib_register_ar_dfa_withhold': 'l10n_us_hr_payroll.contrib_register_us_ar_dor_sit',
|
||||||
|
'l10n_us_ar_hr_payroll.hr_payroll_rules_ar_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_ar_suta',
|
||||||
|
'l10n_us_ar_hr_payroll.hr_payroll_rules_ar_inc_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_ar_sit',
|
||||||
|
|
||||||
|
'l10n_us_az_hr_payroll.res_partner_az_des_unemp': 'l10n_us_hr_payroll.res_partner_us_az_dor',
|
||||||
|
'l10n_us_az_hr_payroll.res_partner_az_dor_withhold': 'l10n_us_hr_payroll.res_partner_us_az_dor_sit',
|
||||||
|
'l10n_us_az_hr_payroll.contrib_register_az_des_unemp': 'l10n_us_hr_payroll.contrib_register_us_az_dor',
|
||||||
|
'l10n_us_az_hr_payroll.contrib_register_az_dor_withhold': 'l10n_us_hr_payroll.contrib_register_us_az_dor_sit',
|
||||||
|
'l10n_us_az_hr_payroll.hr_payroll_az_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_az_suta',
|
||||||
|
'l10n_us_az_hr_payroll.hr_payroll_az_income_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_az_sit',
|
||||||
|
|
||||||
|
'l10n_us_ca_hr_payroll.res_partner_cador_uit': 'l10n_us_hr_payroll.res_partner_us_ca_dor',
|
||||||
|
'l10n_us_ca_hr_payroll.res_partner_cador_withhold': 'l10n_us_hr_payroll.res_partner_us_ca_dor_sit',
|
||||||
|
'l10n_us_ca_hr_payroll.contrib_register_cador_uit': 'l10n_us_hr_payroll.contrib_register_us_ca_dor',
|
||||||
|
'l10n_us_ca_hr_payroll.contrib_register_cador_withhold': 'l10n_us_hr_payroll.contrib_register_us_ca_dor_sit',
|
||||||
|
'l10n_us_ca_hr_payroll.hr_payroll_rules_ca_uit_2018': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_ca_suta',
|
||||||
|
'l10n_us_ca_hr_payroll.hr_payroll_rules_ca_ett_2018': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_ca_ett_suta',
|
||||||
|
'l10n_us_ca_hr_payroll.hr_payroll_rules_ca_sdi_2018': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_ca_sdi_sit',
|
||||||
|
'l10n_us_ca_hr_payroll.hr_payroll_rules_ca_inc_withhold_2018': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_ca_sit',
|
||||||
|
|
||||||
|
'l10n_us_ct_hr_payroll.res_partner_ct_dol_unemp': 'l10n_us_hr_payroll.res_partner_us_ct_dor',
|
||||||
|
'l10n_us_ct_hr_payroll.res_partner_ct_drs_withhold': 'l10n_us_hr_payroll.res_partner_us_ct_dor_sit',
|
||||||
|
'l10n_us_ct_hr_payroll.contrib_register_ct_dol_unemp': 'l10n_us_hr_payroll.contrib_register_us_ct_dor',
|
||||||
|
'l10n_us_ct_hr_payroll.contrib_register_ct_drs_withhold': 'l10n_us_hr_payroll.contrib_register_us_ct_dor_sit',
|
||||||
|
'l10n_us_ct_hr_payroll.hr_payroll_rules_ct_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_ct_suta',
|
||||||
|
'l10n_us_ct_hr_payroll.hr_payroll_rules_ct_inc_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_ct_sit',
|
||||||
|
|
||||||
'l10n_us_fl_hr_payroll.hr_payroll_rules_fl_unemp_2018': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_fl_suta',
|
'l10n_us_fl_hr_payroll.hr_payroll_rules_fl_unemp_2018': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_fl_suta',
|
||||||
'l10n_us_fl_hr_payroll.res_partner_fldor': 'l10n_us_hr_payroll.res_partner_us_fl_dor',
|
'l10n_us_fl_hr_payroll.res_partner_fldor': 'l10n_us_hr_payroll.res_partner_us_fl_dor',
|
||||||
'l10n_us_fl_hr_payroll.contrib_register_fldor': 'l10n_us_hr_payroll.contrib_register_us_fl_dor',
|
'l10n_us_fl_hr_payroll.contrib_register_fldor': 'l10n_us_hr_payroll.contrib_register_us_fl_dor',
|
||||||
@@ -145,6 +327,48 @@ XMLIDS_TO_RENAME_2020 = {
|
|||||||
'l10n_us_ga_hr_payroll.hr_payroll_rules_ga_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_ga_suta',
|
'l10n_us_ga_hr_payroll.hr_payroll_rules_ga_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_ga_suta',
|
||||||
'l10n_us_ga_hr_payroll.hr_payroll_rules_ga_inc_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_ga_sit',
|
'l10n_us_ga_hr_payroll.hr_payroll_rules_ga_inc_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_ga_sit',
|
||||||
|
|
||||||
|
'l10n_us_ia_hr_payroll.res_partner_ia_wd_unemp': 'l10n_us_hr_payroll.res_partner_us_ia_dor',
|
||||||
|
'l10n_us_ia_hr_payroll.res_partner_ia_dor_withhold': 'l10n_us_hr_payroll.res_partner_us_ia_dor_sit',
|
||||||
|
'l10n_us_ia_hr_payroll.contrib_register_ia_wd_unemp': 'l10n_us_hr_payroll.contrib_register_us_ia_dor',
|
||||||
|
'l10n_us_ia_hr_payroll.contrib_register_ia_dor_withhold': 'l10n_us_hr_payroll.contrib_register_us_ia_dor_sit',
|
||||||
|
'l10n_us_ia_hr_payroll.hr_payroll_rules_ia_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_ia_suta',
|
||||||
|
'l10n_us_ia_hr_payroll.hr_payroll_rules_ia_inc_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_ia_sit',
|
||||||
|
|
||||||
|
'l10n_us_id_hr_payroll.res_partner_id_dol_unemp':'l10n_us_hr_payroll.res_partner_us_id_dor',
|
||||||
|
'l10n_us_id_hr_payroll.res_partner_id_stc_withhold': 'l10n_us_hr_payroll.res_partner_us_id_dor_sit',
|
||||||
|
'l10n_us_id_hr_payroll.contrib_register_id_dol_unemp': 'l10n_us_hr_payroll.contrib_register_us_id_dor',
|
||||||
|
'l10n_us_id_hr_payroll.contrib_register_id_stc_withhold': 'l10n_us_hr_payroll.contrib_register_us_id_dor_sit',
|
||||||
|
'l10n_us_id_hr_payroll.hr_payroll_rules_id_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_id_suta',
|
||||||
|
'l10n_us_id_hr_payroll.hr_payroll_rules_id_inc_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_id_sit',
|
||||||
|
|
||||||
|
'l10n_us_il_hr_payroll.res_partner_il_des_unemp': 'l10n_us_hr_payroll.res_partner_us_il_dor',
|
||||||
|
'l10n_us_il_hr_payroll.res_partner_il_dor_withhold': 'l10n_us_hr_payroll.res_partner_us_il_dor_sit',
|
||||||
|
'l10n_us_il_hr_payroll.contrib_register_il_des_unemp': 'l10n_us_hr_payroll.contrib_register_us_il_dor',
|
||||||
|
'l10n_us_il_hr_payroll.contrib_register_il_dor_withhold': 'l10n_us_hr_payroll.contrib_register_us_il_dor_sit',
|
||||||
|
'l10n_us_il_hr_payroll.hr_payroll_rules_il_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_il_suta',
|
||||||
|
'l10n_us_il_hr_payroll.hr_payroll_rules_il_inc_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_il_sit',
|
||||||
|
|
||||||
|
'l10n_us_mi_hr_payroll.res_partner_mi_uia_unemp': 'l10n_us_hr_payroll.res_partner_us_mi_dor',
|
||||||
|
'l10n_us_mi_hr_payroll.res_partner_mi_dot_withhold': 'l10n_us_hr_payroll.res_partner_us_mi_dor_sit',
|
||||||
|
'l10n_us_mi_hr_payroll.contrib_register_mi_uia_unemp': 'l10n_us_hr_payroll.contrib_register_us_mi_dor',
|
||||||
|
'l10n_us_mi_hr_payroll.contrib_register_mi_dot_withhold': 'l10n_us_hr_payroll.contrib_register_us_mi_dor_sit',
|
||||||
|
'l10n_us_mi_hr_payroll.hr_payroll_rules_mi_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_mi_suta',
|
||||||
|
'l10n_us_mi_hr_payroll.hr_payroll_rules_mi_inc_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_mi_sit',
|
||||||
|
|
||||||
|
'l10n_us_mn_hr_payrol.res_partner_mn_ui_unemp': 'l10n_us_hr_payroll.res_partner_us_mn_dor',
|
||||||
|
'l10n_us_mn_hr_payrol.res_partner_mn_dor_withhold': 'l10n_us_hr_payroll.res_partner_us_mn_dor_sit',
|
||||||
|
'l10n_us_mn_hr_payrol.contrib_register_mn_ui_unemp': 'l10n_us_hr_payroll.contrib_register_us_mn_dor',
|
||||||
|
'l10n_us_mn_hr_payrol.contrib_register_mn_dor_withhold': 'l10n_us_hr_payroll.contrib_register_us_mn_dor_sit',
|
||||||
|
'l10n_us_mn_hr_payrol.hr_payroll_rules_mn_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_mn_suta',
|
||||||
|
'l10n_us_mn_hr_payrol.hr_payroll_rules_mn_inc_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_mn_sit',
|
||||||
|
|
||||||
|
'l10n_us_mo_hr_payroll.res_partner_modor_unemp': 'l10n_us_hr_payroll.res_partner_us_mo_dor',
|
||||||
|
'l10n_us_mo_hr_payroll.res_partner_modor_withhold': 'l10n_us_hr_payroll.res_partner_us_mo_dor_sit',
|
||||||
|
'l10n_us_mo_hr_payroll.contrib_register_modor_unemp': 'l10n_us_hr_payroll.contrib_register_us_mo_dor',
|
||||||
|
'l10n_us_mo_hr_payroll.contrib_register_modor_withhold': 'l10n_us_hr_payroll.contrib_register_us_mo_dor_sit',
|
||||||
|
'l10n_us_mo_hr_payroll.hr_payroll_rules_mo_unemp_2018': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_mo_suta',
|
||||||
|
'l10n_us_mo_hr_payroll.hr_payroll_rules_mo_inc_withhold_2018': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_mo_sit',
|
||||||
|
|
||||||
'l10n_us_ms_hr_payroll.res_partner_msdor_unemp': 'l10n_us_hr_payroll.res_partner_us_ms_dor',
|
'l10n_us_ms_hr_payroll.res_partner_msdor_unemp': 'l10n_us_hr_payroll.res_partner_us_ms_dor',
|
||||||
'l10n_us_ms_hr_payroll.res_partner_msdor_withhold': 'l10n_us_hr_payroll.res_partner_us_ms_dor_sit',
|
'l10n_us_ms_hr_payroll.res_partner_msdor_withhold': 'l10n_us_hr_payroll.res_partner_us_ms_dor_sit',
|
||||||
'l10n_us_ms_hr_payroll.contrib_register_msdor_unemp': 'l10n_us_hr_payroll.contrib_register_us_ms_dor',
|
'l10n_us_ms_hr_payroll.contrib_register_msdor_unemp': 'l10n_us_hr_payroll.contrib_register_us_ms_dor',
|
||||||
@@ -159,6 +383,26 @@ XMLIDS_TO_RENAME_2020 = {
|
|||||||
'l10n_us_mt_hr_payroll.hr_payroll_rules_mt_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_mt_suta',
|
'l10n_us_mt_hr_payroll.hr_payroll_rules_mt_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_mt_suta',
|
||||||
'l10n_us_mt_hr_payroll.hr_payroll_rules_mt_inc_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_mt_sit',
|
'l10n_us_mt_hr_payroll.hr_payroll_rules_mt_inc_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_mt_sit',
|
||||||
|
|
||||||
|
'l10n_us_nc_hr_payroll.res_partner_ncdor_unemp':'l10n_us_hr_payroll.res_partner_us_nc_dor',
|
||||||
|
'l10n_us_nc_hr_payroll.res_partner_ncdor_withhold': 'l10n_us_hr_payroll.res_partner_us_nc_dor_sit',
|
||||||
|
'l10n_us_nc_hr_payroll.contrib_register_ncdor_unemp': 'l10n_us_hr_payroll.contrib_register_us_nc_dor',
|
||||||
|
'l10n_us_nc_hr_payroll.contrib_register_ncdor_withhold': 'l10n_us_hr_payroll.contrib_register_us_nc_dor_sit',
|
||||||
|
'l10n_us_nc_hr_payroll.hr_payroll_rules_nc_unemp_2018': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_nc_suta',
|
||||||
|
'l10n_us_nc_hr_payroll.hr_payroll_rules_nc_inc_withhold_2018': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_nc_sit',
|
||||||
|
|
||||||
|
'l10n_us_nj_hr_payroll.res_partner_njdor_unemp_employee': 'l10n_us_hr_payroll.res_partner_us_nj_dor',
|
||||||
|
'l10n_us_nj_hr_payroll.res_partner_njdor_withhold': 'l10n_us_hr_payroll.res_partner_us_nj_dor_sit',
|
||||||
|
'l10n_us_nj_hr_payroll.contrib_register_njdor_unemp_employee': 'l10n_us_hr_payroll.contrib_register_us_nj_dor',
|
||||||
|
'l10n_us_nj_hr_payroll.contrib_register_njdor_withhold': 'l10n_us_hr_payroll.contrib_register_us_nj_dor_sit',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_rules_nj_unemp_employee_2018': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_nj_suta',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_rules_nj_unemp_company_2018': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_nj_suta',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_rules_nj_sdi_employee_2018': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_nj_sdi',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_rules_nj_sdi_company_2018': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_nj_sdi',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_rules_nj_fli_2018': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_nj_fli',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_rules_nj_wf_2018': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_nj_wf',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_rules_nj_wf_er': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_nj_wf',
|
||||||
|
'l10n_us_nj_hr_payroll.hr_payroll_rules_nj_inc_withhold_2018': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_nj_sit',
|
||||||
|
|
||||||
'l10n_us_oh_hr_payroll.res_partner_ohdor_unemp': 'l10n_us_hr_payroll.res_partner_us_oh_dor',
|
'l10n_us_oh_hr_payroll.res_partner_ohdor_unemp': 'l10n_us_hr_payroll.res_partner_us_oh_dor',
|
||||||
'l10n_us_oh_hr_payroll.res_partner_ohdor_withhold': 'l10n_us_hr_payroll.res_partner_us_oh_dor_sit',
|
'l10n_us_oh_hr_payroll.res_partner_ohdor_withhold': 'l10n_us_hr_payroll.res_partner_us_oh_dor_sit',
|
||||||
'l10n_us_oh_hr_payroll.res_partner_ohdor_unemp': 'l10n_us_hr_payroll.res_partner_us_oh_dor',
|
'l10n_us_oh_hr_payroll.res_partner_ohdor_unemp': 'l10n_us_hr_payroll.res_partner_us_oh_dor',
|
||||||
@@ -174,6 +418,13 @@ XMLIDS_TO_RENAME_2020 = {
|
|||||||
'l10n_us_pa_hr_payroll.hr_payroll_rules_pa_unemp_company_2018': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_pa_suta',
|
'l10n_us_pa_hr_payroll.hr_payroll_rules_pa_unemp_company_2018': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_pa_suta',
|
||||||
'l10n_us_pa_hr_payroll.hr_payroll_rules_pa_inc_withhold_2018': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_pa_sit',
|
'l10n_us_pa_hr_payroll.hr_payroll_rules_pa_inc_withhold_2018': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_pa_sit',
|
||||||
|
|
||||||
|
'l10n_us_sc_hr_payroll.res_partner_sc_dew_unemp': 'l10n_us_hr.payroll.res_partner_us_sc_dor',
|
||||||
|
'l10n_us_sc_hr_payroll.res_partner_sc_dor_withhold': 'l10n_us_hr.payroll.res_partner_us_sc_dor_sit',
|
||||||
|
'l10n_us_sc_hr_payroll.contrib_register_sc_dew_unemp': 'l10n_us_hr.payroll.contrib_register_us_sc_dor',
|
||||||
|
'l10n_us_sc_hr_payroll.contrib_register_sc_dor_withhold': 'l10n_us_hr.payroll.contrib_register_us_sc_dor_sit',
|
||||||
|
'l10n_us_sc_hr_payroll.hr_payroll_rules_sc_unemp': 'l10n_us_hr.payroll.hr_payroll_rule_er_us_sc_suta',
|
||||||
|
'l10n_us_sc_hr_payroll.hr_payroll_rules_sc_inc_withhold': 'l10n_us_hr.payroll.hr_payroll_rule_ee_us_sc_sit',
|
||||||
|
|
||||||
'l10n_us_tx_hr_payroll.res_partner_txdor': 'l10n_us_hr_payroll.res_partner_us_tx_dor',
|
'l10n_us_tx_hr_payroll.res_partner_txdor': 'l10n_us_hr_payroll.res_partner_us_tx_dor',
|
||||||
'l10n_us_tx_hr_payroll.contrib_register_txdor': 'l10n_us_hr_payroll.contrib_register_us_tx_dor',
|
'l10n_us_tx_hr_payroll.contrib_register_txdor': 'l10n_us_hr_payroll.contrib_register_us_tx_dor',
|
||||||
'l10n_us_tx_hr_payroll.hr_payroll_rules_tx_unemp_2018': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_tx_suta',
|
'l10n_us_tx_hr_payroll.hr_payroll_rules_tx_unemp_2018': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_tx_suta',
|
||||||
@@ -195,12 +446,19 @@ XMLIDS_TO_RENAME_2020 = {
|
|||||||
'l10n_us_wa_hr_payroll.hr_payroll_rules_wa_lni_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_wa_lni',
|
'l10n_us_wa_hr_payroll.hr_payroll_rules_wa_lni_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_wa_lni',
|
||||||
'l10n_us_wa_hr_payroll.hr_payroll_rules_wa_lni': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_wa_lni',
|
'l10n_us_wa_hr_payroll.hr_payroll_rules_wa_lni': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_wa_lni',
|
||||||
|
|
||||||
|
'l10n_us_wy_hr_payroll.res_partner_wy_dws_unemp': 'l10n_us_hr_payroll.res_partner_us_wy_dor',
|
||||||
|
'l10n_us_wy_hr_payroll.contrib_register_wy_dws_unemp': 'l10n_us_hr_payroll.contrib_register_us_wy_dor',
|
||||||
|
'l10n_us_wy_hr_payroll.hr_payroll_rules_wy_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_wy_suta',
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
XMLIDS_COPY_ACCOUNTING_2020 = {
|
XMLIDS_COPY_ACCOUNTING_2020 = {
|
||||||
'l10n_us_hr_payroll.hr_payroll_rule_er_us_mt_suta': [
|
'l10n_us_hr_payroll.hr_payroll_rule_er_us_mt_suta': [
|
||||||
'l10n_us_hr_payroll.hr_payroll_rule_er_us_mt_suta_aft',
|
'l10n_us_hr_payroll.hr_payroll_rule_er_us_mt_suta_aft',
|
||||||
],
|
],
|
||||||
|
'l10n_us_hr_payroll.hr_payroll_rule_er_us_nj_wf': [
|
||||||
|
'l10n_us_hr_payroll.hr_payroll_rule_er_us_nj_fli',
|
||||||
|
],
|
||||||
'l10n_us_hr_payroll.hr_payroll_rule_er_us_wa_lni': [
|
'l10n_us_hr_payroll.hr_payroll_rule_er_us_wa_lni': [
|
||||||
'l10n_us_hr_payroll.hr_payroll_rule_er_us_wa_fml',
|
'l10n_us_hr_payroll.hr_payroll_rule_er_us_wa_fml',
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -3,4 +3,6 @@
|
|||||||
from . import hr_contract
|
from . import hr_contract
|
||||||
from . import hr_payslip
|
from . import hr_payslip
|
||||||
from . import hr_salary_rule
|
from . import hr_salary_rule
|
||||||
|
from . import res_config_settings
|
||||||
|
from . import update
|
||||||
from . import us_payroll_config
|
from . import us_payroll_config
|
||||||
|
|||||||
@@ -1,9 +1,53 @@
|
|||||||
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
# 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.dict.contract_id.external_wages
|
||||||
|
return ytd_wage
|
||||||
|
|
||||||
|
|
||||||
def er_us_940_futa(payslip, categories, worked_days, inputs):
|
def er_us_940_futa(payslip, categories, worked_days, inputs):
|
||||||
"""
|
"""
|
||||||
Returns FUTA eligible wage and rate.
|
Returns FUTA eligible wage and rate.
|
||||||
WAGE = GROSS + DED_FUTA_EXEMPT
|
|
||||||
:return: result, result_rate (wage, percent)
|
:return: result, result_rate (wage, percent)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -17,16 +61,14 @@ def er_us_940_futa(payslip, categories, worked_days, inputs):
|
|||||||
result_rate = -payslip.dict.rule_parameter('fed_940_futa_rate_normal')
|
result_rate = -payslip.dict.rule_parameter('fed_940_futa_rate_normal')
|
||||||
|
|
||||||
# Determine Wage
|
# Determine Wage
|
||||||
year = payslip.dict.get_year()
|
wage = futa_wage(payslip, categories)
|
||||||
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year+1) + '-01-01')
|
if not wage:
|
||||||
ytd_wage += payslip.sum_category('DED_FUTA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
|
return 0.0, 0.0
|
||||||
ytd_wage += payslip.dict.contract_id.external_wages
|
|
||||||
|
|
||||||
|
ytd_wage = futa_wage_ytd(payslip, categories)
|
||||||
wage_base = payslip.dict.rule_parameter('fed_940_futa_wage_base')
|
wage_base = payslip.dict.rule_parameter('fed_940_futa_wage_base')
|
||||||
remaining = wage_base - ytd_wage
|
remaining = wage_base - ytd_wage
|
||||||
|
|
||||||
wage = categories.GROSS + categories.DED_FUTA_EXEMPT
|
|
||||||
|
|
||||||
if remaining < 0.0:
|
if remaining < 0.0:
|
||||||
result = 0.0
|
result = 0.0
|
||||||
elif remaining < wage:
|
elif remaining < wage:
|
||||||
|
|||||||
@@ -4,10 +4,55 @@
|
|||||||
# _logger = logging.getLogger(__name__)
|
# _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):
|
def ee_us_941_fica_ss(payslip, categories, worked_days, inputs):
|
||||||
"""
|
"""
|
||||||
Returns FICA Social Security eligible wage and rate.
|
Returns FICA Social Security eligible wage and rate.
|
||||||
WAGE = GROSS + DED_FICA_EXEMPT
|
|
||||||
:return: result, result_rate (wage, percent)
|
:return: result, result_rate (wage, percent)
|
||||||
"""
|
"""
|
||||||
exempt = payslip.dict.contract_id.us_payroll_config_value('fed_941_fica_exempt')
|
exempt = payslip.dict.contract_id.us_payroll_config_value('fed_941_fica_exempt')
|
||||||
@@ -18,16 +63,14 @@ def ee_us_941_fica_ss(payslip, categories, worked_days, inputs):
|
|||||||
result_rate = -payslip.dict.rule_parameter('fed_941_fica_ss_rate')
|
result_rate = -payslip.dict.rule_parameter('fed_941_fica_ss_rate')
|
||||||
|
|
||||||
# Determine Wage
|
# Determine Wage
|
||||||
year = payslip.dict.get_year()
|
wage = fica_wage(payslip, categories)
|
||||||
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year+1) + '-01-01')
|
if not wage:
|
||||||
ytd_wage += payslip.sum_category('DED_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
|
return 0.0, 0.0
|
||||||
ytd_wage += payslip.dict.contract_id.external_wages
|
|
||||||
|
|
||||||
|
ytd_wage = fica_wage_ytd(payslip, categories)
|
||||||
wage_base = payslip.dict.rule_parameter('fed_941_fica_ss_wage_base')
|
wage_base = payslip.dict.rule_parameter('fed_941_fica_ss_wage_base')
|
||||||
remaining = wage_base - ytd_wage
|
remaining = wage_base - ytd_wage
|
||||||
|
|
||||||
wage = categories.GROSS + categories.DED_FICA_EXEMPT
|
|
||||||
|
|
||||||
if remaining < 0.0:
|
if remaining < 0.0:
|
||||||
result = 0.0
|
result = 0.0
|
||||||
elif remaining < wage:
|
elif remaining < wage:
|
||||||
@@ -44,7 +87,6 @@ er_us_941_fica_ss = ee_us_941_fica_ss
|
|||||||
def ee_us_941_fica_m(payslip, categories, worked_days, inputs):
|
def ee_us_941_fica_m(payslip, categories, worked_days, inputs):
|
||||||
"""
|
"""
|
||||||
Returns FICA Medicare eligible wage and rate.
|
Returns FICA Medicare eligible wage and rate.
|
||||||
WAGE = GROSS + DED_FICA_EXEMPT
|
|
||||||
:return: result, result_rate (wage, percent)
|
:return: result, result_rate (wage, percent)
|
||||||
"""
|
"""
|
||||||
exempt = payslip.dict.contract_id.us_payroll_config_value('fed_941_fica_exempt')
|
exempt = payslip.dict.contract_id.us_payroll_config_value('fed_941_fica_exempt')
|
||||||
@@ -55,16 +97,14 @@ def ee_us_941_fica_m(payslip, categories, worked_days, inputs):
|
|||||||
result_rate = -payslip.dict.rule_parameter('fed_941_fica_m_rate')
|
result_rate = -payslip.dict.rule_parameter('fed_941_fica_m_rate')
|
||||||
|
|
||||||
# Determine Wage
|
# Determine Wage
|
||||||
year = payslip.dict.get_year()
|
wage = fica_wage(payslip, categories)
|
||||||
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year+1) + '-01-01')
|
if not wage:
|
||||||
ytd_wage += payslip.sum_category('DED_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
|
return 0.0, 0.0
|
||||||
ytd_wage += payslip.dict.contract_id.external_wages
|
|
||||||
|
|
||||||
|
ytd_wage = fica_wage_ytd(payslip, categories)
|
||||||
wage_base = float(payslip.dict.rule_parameter('fed_941_fica_m_wage_base')) # inf
|
wage_base = float(payslip.dict.rule_parameter('fed_941_fica_m_wage_base')) # inf
|
||||||
remaining = wage_base - ytd_wage
|
remaining = wage_base - ytd_wage
|
||||||
|
|
||||||
wage = categories.GROSS + categories.DED_FICA_EXEMPT
|
|
||||||
|
|
||||||
if remaining < 0.0:
|
if remaining < 0.0:
|
||||||
result = 0.0
|
result = 0.0
|
||||||
elif remaining < wage:
|
elif remaining < wage:
|
||||||
@@ -81,8 +121,6 @@ er_us_941_fica_m = ee_us_941_fica_m
|
|||||||
def ee_us_941_fica_m_add(payslip, categories, worked_days, inputs):
|
def ee_us_941_fica_m_add(payslip, categories, worked_days, inputs):
|
||||||
"""
|
"""
|
||||||
Returns FICA Medicare Additional eligible wage and rate.
|
Returns FICA Medicare Additional eligible wage and rate.
|
||||||
Note that this wage is not capped like the above rules.
|
|
||||||
WAGE = GROSS - WAGE_FICA_EXEMPT
|
|
||||||
:return: result, result_rate (wage, percent)
|
:return: result, result_rate (wage, percent)
|
||||||
"""
|
"""
|
||||||
exempt = payslip.dict.contract_id.us_payroll_config_value('fed_941_fica_exempt')
|
exempt = payslip.dict.contract_id.us_payroll_config_value('fed_941_fica_exempt')
|
||||||
@@ -93,16 +131,14 @@ def ee_us_941_fica_m_add(payslip, categories, worked_days, inputs):
|
|||||||
result_rate = -payslip.dict.rule_parameter('fed_941_fica_m_add_rate')
|
result_rate = -payslip.dict.rule_parameter('fed_941_fica_m_add_rate')
|
||||||
|
|
||||||
# Determine Wage
|
# Determine Wage
|
||||||
year = payslip.dict.get_year()
|
wage = fica_wage(payslip, categories)
|
||||||
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year+1) + '-01-01')
|
if not wage:
|
||||||
ytd_wage += payslip.sum_category('DED_FICA_EXEMPT', str(year) + '-01-01', str(year+1) + '-01-01')
|
return 0.0, 0.0
|
||||||
ytd_wage += payslip.dict.contract_id.external_wages
|
|
||||||
|
|
||||||
|
ytd_wage = fica_wage_ytd(payslip, categories)
|
||||||
wage_start = payslip.dict.rule_parameter('fed_941_fica_m_add_wage_start')
|
wage_start = payslip.dict.rule_parameter('fed_941_fica_m_add_wage_start')
|
||||||
existing_wage = ytd_wage - wage_start
|
existing_wage = ytd_wage - wage_start
|
||||||
|
|
||||||
wage = categories.GROSS + categories.DED_FICA_EXEMPT
|
|
||||||
|
|
||||||
if existing_wage >= 0.0:
|
if existing_wage >= 0.0:
|
||||||
result = wage
|
result = wage
|
||||||
elif wage + existing_wage > 0.0:
|
elif wage + existing_wage > 0.0:
|
||||||
@@ -113,11 +149,54 @@ def ee_us_941_fica_m_add(payslip, categories, worked_days, inputs):
|
|||||||
return result, result_rate
|
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.dict.contract_id.external_wages
|
||||||
|
return ytd_wage
|
||||||
|
|
||||||
|
|
||||||
# Federal Income Tax
|
# Federal Income Tax
|
||||||
def ee_us_941_fit(payslip, categories, worked_days, inputs):
|
def ee_us_941_fit(payslip, categories, worked_days, inputs):
|
||||||
"""
|
"""
|
||||||
Returns Wage and rate that is computed given the amount to withhold.
|
Returns Wage and rate that is computed given the amount to withhold.
|
||||||
WAGE = GROSS + DED_FIT_EXEMPT
|
|
||||||
:return: result, result_rate (wage, percent)
|
:return: result, result_rate (wage, percent)
|
||||||
"""
|
"""
|
||||||
filing_status = payslip.dict.contract_id.us_payroll_config_value('fed_941_fit_w4_filing_status')
|
filing_status = payslip.dict.contract_id.us_payroll_config_value('fed_941_fit_w4_filing_status')
|
||||||
@@ -125,7 +204,10 @@ def ee_us_941_fit(payslip, categories, worked_days, inputs):
|
|||||||
return 0.0, 0.0
|
return 0.0, 0.0
|
||||||
|
|
||||||
schedule_pay = payslip.dict.contract_id.schedule_pay
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
wage = categories.GROSS + categories.DED_FIT_EXEMPT
|
wage = fit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
#_logger.warn('initial gross wage: ' + str(wage))
|
#_logger.warn('initial gross wage: ' + str(wage))
|
||||||
year = payslip.dict.get_year()
|
year = payslip.dict.get_year()
|
||||||
if year >= 2020:
|
if year >= 2020:
|
||||||
|
|||||||
@@ -14,13 +14,45 @@ from .federal.fed_941 import ee_us_941_fica_ss, \
|
|||||||
from .state.general import general_state_unemployment, \
|
from .state.general import general_state_unemployment, \
|
||||||
general_state_income_withholding, \
|
general_state_income_withholding, \
|
||||||
is_us_state
|
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.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.ms_mississippi import ms_mississippi_state_income_withholding
|
||||||
from .state.mt_montana import mt_montana_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.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.va_virginia import va_virginia_state_income_withholding
|
||||||
from .state.wa_washington import wa_washington_fml_er, \
|
from .state.wa_washington import wa_washington_fml_er, \
|
||||||
wa_washington_fml_ee
|
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):
|
class HRPayslip(models.Model):
|
||||||
@@ -53,13 +85,45 @@ class HRPayslip(models.Model):
|
|||||||
'general_state_unemployment': general_state_unemployment,
|
'general_state_unemployment': general_state_unemployment,
|
||||||
'general_state_income_withholding': general_state_income_withholding,
|
'general_state_income_withholding': general_state_income_withholding,
|
||||||
'is_us_state': is_us_state,
|
'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,
|
'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,
|
'ms_mississippi_state_income_withholding': ms_mississippi_state_income_withholding,
|
||||||
'mt_montana_state_income_withholding': mt_montana_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,
|
'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,
|
'va_virginia_state_income_withholding': va_virginia_state_income_withholding,
|
||||||
'wa_washington_fml_er': wa_washington_fml_er,
|
'wa_washington_fml_er': wa_washington_fml_er,
|
||||||
'wa_washington_fml_ee': wa_washington_fml_ee,
|
'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,
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_year(self):
|
def get_year(self):
|
||||||
@@ -82,34 +146,52 @@ class HRPayslip(models.Model):
|
|||||||
self.employee_id = employee_id
|
self.employee_id = employee_id
|
||||||
self.dict = dict
|
self.dict = dict
|
||||||
self.env = env
|
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):
|
def __getattr__(self, attr):
|
||||||
return attr in self.dict and self.dict.__getitem__(attr) or 0.0
|
return attr in self.dict and self.dict.__getitem__(attr) or 0.0
|
||||||
|
|
||||||
|
def _compile_browsable_query(self, sum_field):
|
||||||
|
pass
|
||||||
|
|
||||||
class InputLine(BrowsableObject):
|
class InputLine(BrowsableObject):
|
||||||
"""a class that will be used into the python code, mainly for usability purposes"""
|
"""a class that will be used into the python code, mainly for usability purposes"""
|
||||||
def sum(self, code, from_date, to_date=None):
|
|
||||||
if to_date is None:
|
def _compile_browsable_query(self, sum_field):
|
||||||
to_date = fields.Date.today()
|
self.__browsable_query = """
|
||||||
self.env.cr.execute("""
|
|
||||||
SELECT sum(amount) as sum
|
SELECT sum(amount) as sum
|
||||||
FROM hr_payslip as hp, hr_payslip_input as pi
|
FROM hr_payslip as hp, hr_payslip_input as pi
|
||||||
WHERE hp.employee_id = %s AND hp.state = 'done'
|
WHERE hp.employee_id = %s AND hp.state = 'done'
|
||||||
AND hp.date_from >= %s AND hp.date_to <= %s AND hp.id = pi.payslip_id AND pi.code = %s""",
|
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)
|
||||||
(self.employee_id, from_date, to_date, code))
|
|
||||||
|
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
|
return self.env.cr.fetchone()[0] or 0.0
|
||||||
|
|
||||||
class WorkedDays(BrowsableObject):
|
class WorkedDays(BrowsableObject):
|
||||||
"""a class that will be used into the python code, mainly for usability purposes"""
|
"""a class that will be used into the python code, mainly for usability purposes"""
|
||||||
def _sum(self, code, from_date, to_date=None):
|
|
||||||
if to_date is None:
|
def _compile_browsable_query(self, sum_field):
|
||||||
to_date = fields.Date.today()
|
self.__browsable_query = """
|
||||||
self.env.cr.execute("""
|
|
||||||
SELECT sum(number_of_days) as number_of_days, sum(number_of_hours) as number_of_hours
|
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
|
FROM hr_payslip as hp, hr_payslip_worked_days as pi
|
||||||
WHERE hp.employee_id = %s AND hp.state = 'done'
|
WHERE hp.employee_id = %s AND hp.state = 'done'
|
||||||
AND hp.date_from >= %s AND hp.date_to <= %s AND hp.id = pi.payslip_id AND pi.code = %s""",
|
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)
|
||||||
(self.employee_id, from_date, to_date, code))
|
|
||||||
|
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()
|
return self.env.cr.fetchone()
|
||||||
|
|
||||||
def sum(self, code, from_date, to_date=None):
|
def sum(self, code, from_date, to_date=None):
|
||||||
@@ -123,28 +205,64 @@ class HRPayslip(models.Model):
|
|||||||
class Payslips(BrowsableObject):
|
class Payslips(BrowsableObject):
|
||||||
"""a class that will be used into the python code, mainly for usability purposes"""
|
"""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):
|
def sum(self, code, from_date, to_date=None):
|
||||||
if to_date is None:
|
if to_date is None:
|
||||||
to_date = fields.Date.today()
|
to_date = fields.Date.today()
|
||||||
self.env.cr.execute("""SELECT sum(case when hp.credit_note = False then (pl.total) else (-pl.total) end)
|
self.env.cr.execute(self.__browsable_query_rule, (self.employee_id, from_date, to_date, code))
|
||||||
FROM hr_payslip as hp, hr_payslip_line as pl
|
|
||||||
WHERE hp.employee_id = %s AND hp.state = 'done'
|
|
||||||
AND hp.date_from >= %s AND hp.date_to <= %s AND hp.id = pl.slip_id AND pl.code = %s""",
|
|
||||||
(self.employee_id, from_date, to_date, code))
|
|
||||||
res = self.env.cr.fetchone()
|
res = self.env.cr.fetchone()
|
||||||
return res and res[0] or 0.0
|
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):
|
def sum_category(self, code, from_date, to_date=None):
|
||||||
# Hibou Backport
|
# Hibou Backport
|
||||||
if to_date is None:
|
if to_date is None:
|
||||||
to_date = fields.Date.today()
|
to_date = fields.Date.today()
|
||||||
|
|
||||||
self.env.cr.execute("""SELECT sum(case when hp.credit_note is not True then (pl.total) else (-pl.total) end)
|
# standard version
|
||||||
FROM hr_payslip as hp, hr_payslip_line as pl, hr_salary_rule_category as rc
|
# self.env.cr.execute(self.__browsable_query_category, (self.employee_id, from_date, to_date, code))
|
||||||
WHERE hp.employee_id = %s AND hp.state = 'done'
|
# recursive category version
|
||||||
AND hp.date_from >= %s AND hp.date_to <= %s AND hp.id = pl.slip_id
|
self.env.cr.execute(self.__browsable_query_category, (code, self.employee_id, from_date, to_date))
|
||||||
AND rc.id = pl.category_id AND rc.code = %s""",
|
|
||||||
(self.employee_id, from_date, to_date, code))
|
|
||||||
res = self.env.cr.fetchone()
|
res = self.env.cr.fetchone()
|
||||||
return res and res[0] or 0.0
|
return res and res[0] or 0.0
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
from odoo import api, fields, models, _
|
from odoo import api, fields, models, _
|
||||||
from odoo.tools.safe_eval import safe_eval
|
from odoo.tools.safe_eval import safe_eval
|
||||||
from odoo.exceptions import UserError
|
from odoo.exceptions import UserError
|
||||||
|
|||||||
24
l10n_us_hr_payroll/models/res_config_settings.py
Normal file
24
l10n_us_hr_payroll/models/res_config_settings.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# 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'
|
||||||
|
|
||||||
|
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')
|
||||||
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.dict.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.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_al_sit_tax_rate')
|
||||||
|
dependent_rate = payslip.dict.rule_parameter('us_al_sit_dependent_rate')
|
||||||
|
standard_deduction = payslip.dict.rule_parameter('us_al_sit_standard_deduction_rate').get(exemptions, 0.0)
|
||||||
|
personal_exemption = payslip.dict.rule_parameter('us_al_sit_personal_exemption_rate').get(exemptions, 0.0)
|
||||||
|
dependent = payslip.dict.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.dict.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.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
sit_tax_rate = payslip.dict.rule_parameter('us_ar_sit_tax_rate')
|
||||||
|
standard_deduction = payslip.dict.rule_parameter('us_ar_sit_standard_deduction_rate')
|
||||||
|
allowances = payslip.dict.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.dict.contract_id.schedule_pay
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
withholding_percent = payslip.dict.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.dict.contract_id.us_payroll_config_value('ca_de4_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
sit_allowances = payslip.dict.contract_id.us_payroll_config_value('ca_de4_sit_allowances')
|
||||||
|
additional_allowances = payslip.dict.contract_id.us_payroll_config_value('ca_de4_sit_additional_allowances')
|
||||||
|
low_income_exemption = payslip.dict.rule_parameter('us_ca_sit_income_exemption_rate')[schedule_pay]
|
||||||
|
estimated_deduction = payslip.dict.rule_parameter('us_ca_sit_estimated_deduction_rate')[schedule_pay]
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_ca_sit_tax_rate')[filing_status].get(schedule_pay)
|
||||||
|
standard_deduction = payslip.dict.rule_parameter('us_ca_sit_standard_deduction_rate')[schedule_pay]
|
||||||
|
exemption_allowances = payslip.dict.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.dict.contract_id.us_payroll_config_value('fed_941_fit_w4_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
state_exempt = payslip.dict.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.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
exemption_rate = payslip.dict.rule_parameter('us_co_sit_exemption_rate')
|
||||||
|
tax_rate = payslip.dict.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.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
withholding_code = payslip.dict.contract_id.us_payroll_config_value('ct_w4na_sit_code')
|
||||||
|
exemption_table = payslip.dict.rule_parameter('us_ct_sit_personal_exemption_rate').get(withholding_code, [('inf', 0.0)])
|
||||||
|
initial_tax_tbl = payslip.dict.rule_parameter('us_ct_sit_initial_tax_rate').get(withholding_code, [('inf', 0.0, 0.0)])
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_ct_sit_tax_rate').get(withholding_code, [('inf', 0.0)])
|
||||||
|
recapture_table = payslip.dict.rule_parameter('us_ct_sit_recapture_rate').get(withholding_code, [('inf', 0.0)])
|
||||||
|
decimal_table = payslip.dict.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.dict.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.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_de_sit_tax_rate')
|
||||||
|
personal_exemption = payslip.dict.rule_parameter('us_de_sit_personal_exemption_rate')
|
||||||
|
allowances = payslip.dict.contract_id.us_payroll_config_value('de_w4_sit_dependent')
|
||||||
|
standard_deduction = payslip.dict.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)
|
||||||
@@ -1,12 +1,11 @@
|
|||||||
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
from .general import _state_applies
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
def ga_georgia_state_income_withholding(payslip, categories, worked_days, inputs):
|
def ga_georgia_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
"""
|
"""
|
||||||
Returns SIT eligible wage and rate.
|
Returns SIT eligible wage and rate.
|
||||||
WAGE = GROSS + DED_FIT_EXEMPT
|
|
||||||
|
|
||||||
:return: result, result_rate (wage, percent)
|
:return: result, result_rate (wage, percent)
|
||||||
"""
|
"""
|
||||||
@@ -14,11 +13,14 @@ def ga_georgia_state_income_withholding(payslip, categories, worked_days, inputs
|
|||||||
if not _state_applies(payslip, state_code):
|
if not _state_applies(payslip, state_code):
|
||||||
return 0.0, 0.0
|
return 0.0, 0.0
|
||||||
ga_filing_status = payslip.dict.contract_id.us_payroll_config_value('ga_g4_sit_filing_status')
|
ga_filing_status = payslip.dict.contract_id.us_payroll_config_value('ga_g4_sit_filing_status')
|
||||||
if not ga_filing_status or ga_filing_status == 'exempt':
|
if not ga_filing_status:
|
||||||
return 0.0, 0.0
|
return 0.0, 0.0
|
||||||
|
|
||||||
# Determine Wage
|
# Determine Wage
|
||||||
wage = categories.GROSS + categories.DED_FIT_EXEMPT
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
schedule_pay = payslip.dict.contract_id.schedule_pay
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
dependent_allowances = payslip.dict.contract_id.us_payroll_config_value('ga_g4_sit_dependent_allowances')
|
dependent_allowances = payslip.dict.contract_id.us_payroll_config_value('ga_g4_sit_dependent_allowances')
|
||||||
@@ -27,10 +29,7 @@ def ga_georgia_state_income_withholding(payslip, categories, worked_days, inputs
|
|||||||
personal_allowance = payslip.dict.rule_parameter('us_ga_sit_personal_allowance').get(ga_filing_status, {}).get(schedule_pay)
|
personal_allowance = payslip.dict.rule_parameter('us_ga_sit_personal_allowance').get(ga_filing_status, {}).get(schedule_pay)
|
||||||
deduction = payslip.dict.rule_parameter('us_ga_sit_deduction').get(ga_filing_status, {}).get(schedule_pay)
|
deduction = payslip.dict.rule_parameter('us_ga_sit_deduction').get(ga_filing_status, {}).get(schedule_pay)
|
||||||
withholding_rate = payslip.dict.rule_parameter('us_ga_sit_rate').get(ga_filing_status, {}).get(schedule_pay)
|
withholding_rate = payslip.dict.rule_parameter('us_ga_sit_rate').get(ga_filing_status, {}).get(schedule_pay)
|
||||||
if not all((dependent_allowance_rate, personal_allowance, deduction, withholding_rate)) or wage == 0.0:
|
if not all((dependent_allowance_rate, personal_allowance, deduction, withholding_rate)):
|
||||||
return 0.0, 0.0
|
|
||||||
|
|
||||||
if wage == 0.0:
|
|
||||||
return 0.0, 0.0
|
return 0.0, 0.0
|
||||||
|
|
||||||
after_standard_deduction = wage - deduction
|
after_standard_deduction = wage - deduction
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
from odoo.exceptions import UserError
|
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
|
# import logging
|
||||||
# _logger = logging.getLogger(__name__)
|
# _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):
|
def _state_applies(payslip, state_code):
|
||||||
return state_code == payslip.dict.contract_id.us_payroll_config_value('state_code')
|
return state_code == payslip.dict.contract_id.us_payroll_config_value('state_code')
|
||||||
@@ -89,12 +96,12 @@ def general_state_unemployment(payslip, categories, worked_days, inputs, wage_ba
|
|||||||
return 0.0, 0.0
|
return 0.0, 0.0
|
||||||
|
|
||||||
# Determine Wage
|
# Determine Wage
|
||||||
year = payslip.dict.get_year()
|
wage = suta_wage(payslip, categories)
|
||||||
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year + 1) + '-01-01')
|
if not wage:
|
||||||
ytd_wage += payslip.sum_category('DED_FUTA_EXEMPT', str(year) + '-01-01', str(year + 1) + '-01-01')
|
return 0.0, 0.0
|
||||||
ytd_wage += payslip.dict.contract_id.external_wages
|
|
||||||
|
ytd_wage = suta_wage_ytd(payslip, categories)
|
||||||
|
|
||||||
wage = categories.GROSS + categories.DED_FUTA_EXEMPT
|
|
||||||
return _general_rate(payslip, wage, ytd_wage, wage_base=wage_base, wage_start=wage_start, rate=rate)
|
return _general_rate(payslip, wage, ytd_wage, wage_base=wage_base, wage_start=wage_start, rate=rate)
|
||||||
|
|
||||||
|
|
||||||
@@ -112,12 +119,8 @@ def general_state_income_withholding(payslip, categories, worked_days, inputs, w
|
|||||||
return 0.0, 0.0
|
return 0.0, 0.0
|
||||||
|
|
||||||
# Determine Wage
|
# Determine Wage
|
||||||
year = payslip.dict.get_year()
|
ytd_wage = sit_wage_ytd(payslip, categories)
|
||||||
ytd_wage = payslip.sum_category('GROSS', str(year) + '-01-01', str(year + 1) + '-01-01')
|
wage = sit_wage(payslip, categories)
|
||||||
ytd_wage += payslip.sum_category('DED_FIT_EXEMPT', str(year) + '-01-01', str(year + 1) + '-01-01')
|
|
||||||
ytd_wage += payslip.dict.contract_id.external_wages
|
|
||||||
|
|
||||||
wage = categories.GROSS + categories.DED_FIT_EXEMPT
|
|
||||||
result, result_rate = _general_rate(payslip, wage, ytd_wage, wage_base=wage_base, wage_start=wage_start, rate=rate)
|
result, result_rate = _general_rate(payslip, wage, ytd_wage, wage_base=wage_base, wage_start=wage_start, rate=rate)
|
||||||
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
if additional:
|
if additional:
|
||||||
|
|||||||
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.dict.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.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
allowances = payslip.dict.contract_id.us_payroll_config_value('hi_hw4_sit_allowances')
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_hi_sit_tax_rate')[filing_status]
|
||||||
|
personal_exemption = payslip.dict.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.dict.contract_id.schedule_pay
|
||||||
|
fed_withholding = categories.EE_US_941_FIT
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
allowances = payslip.dict.contract_id.us_payroll_config_value('ia_w4_sit_allowances')
|
||||||
|
standard_deduction = payslip.dict.rule_parameter('us_ia_sit_standard_deduction_rate')[schedule_pay]
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_ia_sit_tax_rate')[schedule_pay]
|
||||||
|
deduction_per_allowance = payslip.dict.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.dict.contract_id.us_payroll_config_value('id_w4_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
|
allowances = payslip.dict.contract_id.us_payroll_config_value('id_w4_sit_allowances')
|
||||||
|
ictcat_table = payslip.dict.rule_parameter('us_id_sit_ictcat_rate')[schedule_pay]
|
||||||
|
tax_table = payslip.dict.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.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
basic_allowances_rate = payslip.dict.rule_parameter('us_il_sit_basic_allowances_rate')
|
||||||
|
additional_allowances_rate = payslip.dict.rule_parameter('us_il_sit_additional_allowances_rate')
|
||||||
|
basic_allowances = payslip.dict.contract_id.us_payroll_config_value('il_w4_sit_basic_allowances')
|
||||||
|
additional_allowances = payslip.dict.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.dict.contract_id.schedule_pay
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
personal_exemption = payslip.dict.contract_id.us_payroll_config_value('in_w4_sit_personal_exemption')
|
||||||
|
personal_exemption_rate = payslip.dict.rule_parameter('us_in_sit_personal_exemption_rate')[schedule_pay][personal_exemption - 1]
|
||||||
|
dependent_exemption = payslip.dict.contract_id.us_payroll_config_value('in_w4_sit_dependent_exemption')
|
||||||
|
dependent_exemption_rate = payslip.dict.rule_parameter('us_in_sit_dependent_exemption_rate')[schedule_pay][dependent_exemption - 1]
|
||||||
|
income_tax_rate = payslip.dict.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.dict.contract_id.us_payroll_config_value('ks_k4_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
allowances = payslip.dict.contract_id.us_payroll_config_value('ks_k4_sit_allowances')
|
||||||
|
allowances_amt = payslip.dict.rule_parameter('us_ks_sit_allowances_rate')[schedule_pay]
|
||||||
|
tax_table = payslip.dict.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.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
tax_rate = payslip.dict.rule_parameter('us_ky_sit_tax_rate')
|
||||||
|
standard_deduction = payslip.dict.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.dict.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.dict.contract_id.us_payroll_config_value('la_l4_sit_exemptions')
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
dependent_exemptions = payslip.dict.contract_id.us_payroll_config_value('la_l4_sit_dependents')
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_la_sit_tax_rate')[filing_status]
|
||||||
|
exemption_rate = payslip.dict.rule_parameter('us_la_sit_personal_exemption_rate')
|
||||||
|
dependent_rate = payslip.dict.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.dict.contract_id.us_payroll_config_value('me_w4me_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
exempt = payslip.dict.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.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
allowances = payslip.dict.contract_id.us_payroll_config_value('me_w4me_sit_allowances')
|
||||||
|
tax_rate = payslip.dict.rule_parameter('us_me_sit_tax_rate')[filing_status]
|
||||||
|
personal_exemption = payslip.dict.rule_parameter('us_me_sit_personal_exemption_rate')
|
||||||
|
standard_deduction = payslip.dict.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.dict.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.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
exemption_rate = payslip.dict.rule_parameter('us_mi_sit_exemption_rate')
|
||||||
|
exemption = payslip.dict.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.dict.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.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
sit_tax_rate = payslip.dict.rule_parameter('us_mn_sit_tax_rate')[filing_status]
|
||||||
|
allowances_rate = payslip.dict.rule_parameter('us_mn_sit_allowances_rate')
|
||||||
|
allowances = payslip.dict.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.dict.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.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
sit_table = payslip.dict.rule_parameter('us_mo_sit_rate')
|
||||||
|
deduction = payslip.dict.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)
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
from .general import _state_applies
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
def ms_mississippi_state_income_withholding(payslip, categories, worked_days, inputs):
|
def ms_mississippi_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
@@ -19,8 +19,8 @@ def ms_mississippi_state_income_withholding(payslip, categories, worked_days, in
|
|||||||
return 0.0, 0.0
|
return 0.0, 0.0
|
||||||
|
|
||||||
# Determine Wage
|
# Determine Wage
|
||||||
wage = categories.GROSS + categories.DED_FIT_EXEMPT
|
wage = sit_wage(payslip, categories)
|
||||||
if wage == 0.0:
|
if not wage:
|
||||||
return 0.0, 0.0
|
return 0.0, 0.0
|
||||||
|
|
||||||
pay_periods = payslip.dict.get_pay_periods_in_year()
|
pay_periods = payslip.dict.get_pay_periods_in_year()
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
from .general import _state_applies
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
def mt_montana_state_income_withholding(payslip, categories, worked_days, inputs):
|
def mt_montana_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
@@ -18,13 +18,16 @@ def mt_montana_state_income_withholding(payslip, categories, worked_days, inputs
|
|||||||
return 0.0, 0.0
|
return 0.0, 0.0
|
||||||
|
|
||||||
# Determine Wage
|
# Determine Wage
|
||||||
wage = categories.GROSS + categories.DED_FIT_EXEMPT
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
schedule_pay = payslip.dict.contract_id.schedule_pay
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
exemptions = payslip.dict.contract_id.us_payroll_config_value('mt_mw4_sit_exemptions')
|
exemptions = payslip.dict.contract_id.us_payroll_config_value('mt_mw4_sit_exemptions')
|
||||||
exemption_rate = payslip.dict.rule_parameter('us_mt_sit_exemption_rate').get(schedule_pay)
|
exemption_rate = payslip.dict.rule_parameter('us_mt_sit_exemption_rate').get(schedule_pay)
|
||||||
withholding_rate = payslip.dict.rule_parameter('us_mt_sit_rate').get(schedule_pay)
|
withholding_rate = payslip.dict.rule_parameter('us_mt_sit_rate').get(schedule_pay)
|
||||||
if not exemption_rate or not withholding_rate or wage == 0.0:
|
if not exemption_rate or not withholding_rate:
|
||||||
return 0.0, 0.0
|
return 0.0, 0.0
|
||||||
|
|
||||||
adjusted_wage = wage - (exemption_rate * (exemptions or 0))
|
adjusted_wage = wage - (exemption_rate * (exemptions or 0))
|
||||||
|
|||||||
38
l10n_us_hr_payroll/models/state/nc_northcarolina.py
Normal file
38
l10n_us_hr_payroll/models/state/nc_northcarolina.py
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def nc_northcarolina_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 = 'NC'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.dict.contract_id.us_payroll_config_value('nc_nc4_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
|
||||||
|
|
||||||
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
allowances = payslip.dict.contract_id.us_payroll_config_value('nc_nc4_sit_allowances')
|
||||||
|
allowances_rate = payslip.dict.rule_parameter('us_nc_sit_allowance_rate').get(schedule_pay)['allowance']
|
||||||
|
deduction = payslip.dict.rule_parameter('us_nc_sit_allowance_rate').get(schedule_pay)['standard_deduction'] if filing_status != 'head_household' else payslip.dict.rule_parameter('us_nc_sit_allowance_rate').get(schedule_pay)['standard_deduction_hh']
|
||||||
|
|
||||||
|
taxable_wage = round((wage - (deduction + (allowances * allowances_rate))) * 0.0535)
|
||||||
|
withholding = 0.0
|
||||||
|
if taxable_wage < 0.0:
|
||||||
|
withholding -= taxable_wage
|
||||||
|
withholding = taxable_wage
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
45
l10n_us_hr_payroll/models/state/nd_north_dakota.py
Normal file
45
l10n_us_hr_payroll/models/state/nd_north_dakota.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 nd_north_dakota_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 = 'ND'
|
||||||
|
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.dict.contract_id.us_payroll_config_value('nd_w4_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
allowance = payslip.dict.contract_id.us_payroll_config_value('nd_w4_sit_allowances')
|
||||||
|
allowance_rate = payslip.dict.rule_parameter('us_nd_sit_allowances_rate')[schedule_pay]
|
||||||
|
tax_rate = payslip.dict.rule_parameter('us_nd_sit_tax_rate')[filing_status].get(schedule_pay)
|
||||||
|
|
||||||
|
taxable_income = wage - (allowance * allowance_rate)
|
||||||
|
withholding = 0.0
|
||||||
|
last = 0.0
|
||||||
|
for row in tax_rate:
|
||||||
|
amt, flat_fee, rate = row
|
||||||
|
if taxable_income < float(amt):
|
||||||
|
withholding = ((taxable_income - last) * (rate / 100)) + flat_fee
|
||||||
|
break
|
||||||
|
last = amt
|
||||||
|
|
||||||
|
withholding = round(withholding)
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
49
l10n_us_hr_payroll/models/state/ne_nebraska.py
Normal file
49
l10n_us_hr_payroll/models/state/ne_nebraska.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 ne_nebraska_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 = 'NE'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
personal_exempt = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_exempt')
|
||||||
|
if personal_exempt:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
# Determine Wage
|
||||||
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.dict.contract_id.us_payroll_config_value('ne_w4n_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
allowances = payslip.dict.contract_id.us_payroll_config_value('ne_w4n_sit_allowances')
|
||||||
|
tax_rate = payslip.dict.rule_parameter('us_ne_sit_tax_rate')[filing_status].get(schedule_pay)
|
||||||
|
sit_allowance = payslip.dict.rule_parameter('us_ne_sit_allowances_rate')[schedule_pay]
|
||||||
|
|
||||||
|
allowance_amt = allowances * sit_allowance
|
||||||
|
taxable_income = wage - allowance_amt
|
||||||
|
withholding = 0.0
|
||||||
|
last = 0.0
|
||||||
|
for row in tax_rate:
|
||||||
|
amt, flat_fee, rate = row
|
||||||
|
if taxable_income < float(amt):
|
||||||
|
withholding = ((taxable_income - last) * (rate / 100)) + flat_fee
|
||||||
|
break
|
||||||
|
last = amt
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
52
l10n_us_hr_payroll/models/state/nj_newjersey.py
Normal file
52
l10n_us_hr_payroll/models/state/nj_newjersey.py
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def nj_newjersey_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 = 'NJ'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.dict.contract_id.us_payroll_config_value('nj_njw4_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
|
||||||
|
|
||||||
|
allowances = payslip.dict.contract_id.us_payroll_config_value('nj_njw4_sit_allowances')
|
||||||
|
sit_rate_table_key = payslip.dict.contract_id.us_payroll_config_value('nj_njw4_sit_rate_table')
|
||||||
|
if not sit_rate_table_key and filing_status in ('single', 'married_joint'):
|
||||||
|
sit_rate_table_key = 'A'
|
||||||
|
elif not sit_rate_table_key:
|
||||||
|
sit_rate_table_key = 'B'
|
||||||
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
sit_table = payslip.dict.rule_parameter('us_nj_sit_rate')[sit_rate_table_key].get(schedule_pay)
|
||||||
|
allowance_value = payslip.dict.rule_parameter('us_nj_sit_allowance_rate')[schedule_pay]
|
||||||
|
if not allowances:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
gross_taxable_income = wage - (allowance_value * allowances)
|
||||||
|
withholding = 0.0
|
||||||
|
prior_wage_base = 0.0
|
||||||
|
for row in sit_table:
|
||||||
|
wage_base, base_amt, rate = row
|
||||||
|
wage_base = float(wage_base)
|
||||||
|
rate = rate / 100.0
|
||||||
|
if gross_taxable_income <= wage_base:
|
||||||
|
withholding = base_amt + ((gross_taxable_income - prior_wage_base) * rate)
|
||||||
|
break
|
||||||
|
prior_wage_base = wage_base
|
||||||
|
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
40
l10n_us_hr_payroll/models/state/nm_new_mexico.py
Normal file
40
l10n_us_hr_payroll/models/state/nm_new_mexico.py
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def nm_new_mexico_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'NM'
|
||||||
|
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.dict.contract_id.us_payroll_config_value('fed_941_fit_w4_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_nm_sit_tax_rate')[filing_status].get(schedule_pay)
|
||||||
|
|
||||||
|
taxable_income = wage
|
||||||
|
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 += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
54
l10n_us_hr_payroll/models/state/ny_new_york.py
Normal file
54
l10n_us_hr_payroll/models/state/ny_new_york.py
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def ny_new_york_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'NY'
|
||||||
|
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('ny_it2104_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')
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_ny_sit_tax_rate')[filing_status].get(schedule_pay)
|
||||||
|
allowances = payslip.contract_id.us_payroll_config_value('ny_it2104_sit_allowances')
|
||||||
|
over_10_deduction = payslip.dict.rule_parameter('us_ny_sit_over_10_exemption_rate')[schedule_pay]
|
||||||
|
deduction_exemption = payslip.dict.rule_parameter('us_ny_sit_deduction_exemption_rate')[filing_status].get(schedule_pay)
|
||||||
|
|
||||||
|
if allowances > 10:
|
||||||
|
if filing_status == 'single':
|
||||||
|
wage -= over_10_deduction[0] + over_10_deduction[2] * allowances
|
||||||
|
elif filing_status == 'married':
|
||||||
|
wage -= over_10_deduction[1] + over_10_deduction[2] * allowances
|
||||||
|
|
||||||
|
else:
|
||||||
|
if filing_status == 'single':
|
||||||
|
wage -= deduction_exemption[allowances]
|
||||||
|
elif filing_status == 'married':
|
||||||
|
wage -= deduction_exemption[allowances]
|
||||||
|
last = 0.0
|
||||||
|
withholding = 0.0
|
||||||
|
for row in tax_table:
|
||||||
|
amt, rate, flat_fee = row
|
||||||
|
if wage <= float(amt):
|
||||||
|
withholding = ((wage - last) * rate) + flat_fee
|
||||||
|
break
|
||||||
|
last = amt
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
from .general import _state_applies
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
def oh_ohio_state_income_withholding(payslip, categories, worked_days, inputs):
|
def oh_ohio_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
@@ -18,15 +18,16 @@ def oh_ohio_state_income_withholding(payslip, categories, worked_days, inputs):
|
|||||||
return 0.0, 0.0
|
return 0.0, 0.0
|
||||||
|
|
||||||
# Determine Wage
|
# Determine Wage
|
||||||
wage = categories.GROSS + categories.DED_FIT_EXEMPT
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
pay_periods = payslip.dict.get_pay_periods_in_year()
|
pay_periods = payslip.dict.get_pay_periods_in_year()
|
||||||
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
exemptions = payslip.dict.contract_id.us_payroll_config_value('oh_it4_sit_exemptions')
|
exemptions = payslip.dict.contract_id.us_payroll_config_value('oh_it4_sit_exemptions')
|
||||||
exemption_rate = payslip.dict.rule_parameter('us_oh_sit_exemption_rate')
|
exemption_rate = payslip.dict.rule_parameter('us_oh_sit_exemption_rate')
|
||||||
withholding_rate = payslip.dict.rule_parameter('us_oh_sit_rate')
|
withholding_rate = payslip.dict.rule_parameter('us_oh_sit_rate')
|
||||||
multiplier_rate = payslip.dict.rule_parameter('us_oh_sit_multiplier')
|
multiplier_rate = payslip.dict.rule_parameter('us_oh_sit_multiplier')
|
||||||
if wage == 0.0:
|
|
||||||
return 0.0, 0.0
|
|
||||||
|
|
||||||
taxable_wage = (wage * pay_periods) - (exemption_rate * (exemptions or 0))
|
taxable_wage = (wage * pay_periods) - (exemption_rate * (exemptions or 0))
|
||||||
withholding = 0.0
|
withholding = 0.0
|
||||||
|
|||||||
47
l10n_us_hr_payroll/models/state/ok_oklahoma.py
Normal file
47
l10n_us_hr_payroll/models/state/ok_oklahoma.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 ok_oklahoma_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'OK'
|
||||||
|
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
|
||||||
|
|
||||||
|
if payslip.dict.contract_id.us_payroll_config_value('state_income_tax_exempt'):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.dict.contract_id.us_payroll_config_value('ok_w4_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
allowances = payslip.dict.contract_id.us_payroll_config_value('ok_w4_sit_allowances')
|
||||||
|
allowances_amt = payslip.dict.rule_parameter('us_ok_sit_allowances_rate')[schedule_pay]
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_ok_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)
|
||||||
48
l10n_us_hr_payroll/models/state/ri_rhode_island.py
Normal file
48
l10n_us_hr_payroll/models/state/ri_rhode_island.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 ri_rhode_island_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'RI'
|
||||||
|
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
|
||||||
|
|
||||||
|
if payslip.dict.contract_id.us_payroll_config_value('state_income_tax_exempt'):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
allowances = payslip.dict.contract_id.us_payroll_config_value('ri_w4_sit_allowances')
|
||||||
|
exemption_rate = payslip.dict.rule_parameter('us_ri_sit_exemption_rate')[schedule_pay]
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_ri_sit_tax_rate')[schedule_pay]
|
||||||
|
|
||||||
|
exemption_amt = 0.0
|
||||||
|
for row in exemption_rate:
|
||||||
|
amt, flat_fee = row
|
||||||
|
if wage > amt:
|
||||||
|
exemption_amt = flat_fee
|
||||||
|
|
||||||
|
taxable_income = wage - (allowances * exemption_amt)
|
||||||
|
withholding = 0.0
|
||||||
|
last = 0.0
|
||||||
|
for row in tax_table:
|
||||||
|
amt, flat_fee, rate = row
|
||||||
|
if wage <= float(amt):
|
||||||
|
withholding = ((taxable_income - last) * (rate / 100)) + flat_fee
|
||||||
|
break
|
||||||
|
last = amt
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
50
l10n_us_hr_payroll/models/state/sc_south_carolina.py
Normal file
50
l10n_us_hr_payroll/models/state/sc_south_carolina.py
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def sc_south_carolina_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 = 'SC'
|
||||||
|
if not _state_applies(payslip, state_code):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
personal_exempt = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_exempt')
|
||||||
|
if personal_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.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
allowances = payslip.dict.contract_id.us_payroll_config_value('sc_w4_sit_allowances')
|
||||||
|
tax_rate = payslip.dict.rule_parameter('us_sc_sit_tax_rate')
|
||||||
|
personal_exemption = payslip.dict.rule_parameter('us_sc_sit_personal_exemption_rate')
|
||||||
|
deduction = payslip.dict.rule_parameter('us_sc_sit_standard_deduction_rate')
|
||||||
|
|
||||||
|
annual_wage = wage * pay_periods
|
||||||
|
personal_exemption_amt = allowances * personal_exemption
|
||||||
|
standard_deduction = 0.0
|
||||||
|
if allowances > 0:
|
||||||
|
if (annual_wage * 0.1) > deduction:
|
||||||
|
standard_deduction = deduction
|
||||||
|
else:
|
||||||
|
standard_deduction = annual_wage * (10 / 100)
|
||||||
|
taxable_income = annual_wage - personal_exemption_amt - standard_deduction
|
||||||
|
withholding = 0.0
|
||||||
|
last = 0.0
|
||||||
|
for cap, rate, flat_amt in tax_rate:
|
||||||
|
if float(cap) > taxable_income:
|
||||||
|
withholding = (taxable_income * (rate / 100.0) - flat_amt)
|
||||||
|
break
|
||||||
|
withholding /= pay_periods
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
39
l10n_us_hr_payroll/models/state/ut_utah.py
Normal file
39
l10n_us_hr_payroll/models/state/ut_utah.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
|
def ut_utah_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'UT'
|
||||||
|
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.dict.contract_id.us_payroll_config_value('ut_w4_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
tax_rate = payslip.dict.rule_parameter('us_ut_tax_rate')
|
||||||
|
allowances = payslip.dict.rule_parameter('us_ut_sit_allowances_rate')[filing_status].get(schedule_pay)
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_ut_sit_tax_rate')[filing_status].get(schedule_pay)
|
||||||
|
|
||||||
|
taxable_income = wage * tax_rate
|
||||||
|
withholding = 0.0
|
||||||
|
amt, rate = tax_table
|
||||||
|
withholding = taxable_income - (allowances - ((wage - amt) * (rate / 100)))
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding += additional
|
||||||
|
withholding = round(withholding)
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
from .general import _state_applies
|
from .general import _state_applies, sit_wage
|
||||||
|
|
||||||
|
|
||||||
def va_virginia_state_income_withholding(payslip, categories, worked_days, inputs):
|
def va_virginia_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
@@ -18,7 +18,10 @@ def va_virginia_state_income_withholding(payslip, categories, worked_days, input
|
|||||||
return 0.0, 0.0
|
return 0.0, 0.0
|
||||||
|
|
||||||
# Determine Wage
|
# Determine Wage
|
||||||
wage = categories.GROSS + categories.DED_FIT_EXEMPT
|
wage = sit_wage(payslip, categories)
|
||||||
|
if not wage:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
pay_periods = payslip.dict.get_pay_periods_in_year()
|
pay_periods = payslip.dict.get_pay_periods_in_year()
|
||||||
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
personal_exemptions = payslip.dict.contract_id.us_payroll_config_value('va_va4_sit_exemptions')
|
personal_exemptions = payslip.dict.contract_id.us_payroll_config_value('va_va4_sit_exemptions')
|
||||||
@@ -27,8 +30,6 @@ def va_virginia_state_income_withholding(payslip, categories, worked_days, input
|
|||||||
other_exemption_rate = payslip.dict.rule_parameter('us_va_sit_other_exemption_rate')
|
other_exemption_rate = payslip.dict.rule_parameter('us_va_sit_other_exemption_rate')
|
||||||
deduction = payslip.dict.rule_parameter('us_va_sit_deduction')
|
deduction = payslip.dict.rule_parameter('us_va_sit_deduction')
|
||||||
withholding_rate = payslip.dict.rule_parameter('us_va_sit_rate')
|
withholding_rate = payslip.dict.rule_parameter('us_va_sit_rate')
|
||||||
if wage == 0.0:
|
|
||||||
return 0.0, 0.0
|
|
||||||
|
|
||||||
taxable_wage = (wage * pay_periods) - (deduction + (personal_exemptions * personal_exemption_rate) + (other_exemptions * other_exemption_rate))
|
taxable_wage = (wage * pay_periods) - (deduction + (personal_exemptions * personal_exemption_rate) + (other_exemptions * other_exemption_rate))
|
||||||
withholding = 0.0
|
withholding = 0.0
|
||||||
|
|||||||
46
l10n_us_hr_payroll/models/state/vt_vermont.py
Normal file
46
l10n_us_hr_payroll/models/state/vt_vermont.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 vt_vermont_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'VT'
|
||||||
|
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
|
||||||
|
|
||||||
|
if payslip.dict.contract_id.us_payroll_config_value('state_income_tax_exempt'):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.dict.contract_id.us_payroll_config_value('vt_w4vt_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
allowances = payslip.dict.contract_id.us_payroll_config_value('vt_w4vt_sit_allowances')
|
||||||
|
allowance_amt = payslip.dict.rule_parameter('us_vt_sit_allowances_rate')[schedule_pay]
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_vt_sit_tax_rate')[filing_status].get(schedule_pay)
|
||||||
|
|
||||||
|
taxable_income = wage - (allowances * allowance_amt)
|
||||||
|
withholding = 0.0
|
||||||
|
last = 0.0
|
||||||
|
for row in tax_table:
|
||||||
|
amt, flat_fee, rate = row
|
||||||
|
if wage <= float(amt):
|
||||||
|
withholding = ((taxable_income - last) * (rate / 100)) + flat_fee
|
||||||
|
break
|
||||||
|
last = amt
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
47
l10n_us_hr_payroll/models/state/wi_wisconsin.py
Normal file
47
l10n_us_hr_payroll/models/state/wi_wisconsin.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 wi_wisconsin_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'WI'
|
||||||
|
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
|
||||||
|
|
||||||
|
if payslip.dict.contract_id.us_payroll_config_value('state_income_tax_exempt'):
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
filing_status = payslip.dict.contract_id.us_payroll_config_value('wi_wt4_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
pay_periods = payslip.dict.get_pay_periods_in_year()
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
exemptions = payslip.dict.contract_id.us_payroll_config_value('wi_wt4_sit_exemptions')
|
||||||
|
exemption_amt = payslip.dict.rule_parameter('us_wi_sit_exemption_rate')
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_wi_sit_tax_rate')[filing_status]
|
||||||
|
|
||||||
|
taxable_income = wage * pay_periods
|
||||||
|
withholding = 0.0
|
||||||
|
last = 0.0
|
||||||
|
for row in tax_table:
|
||||||
|
amt, rate, flat_fee = row
|
||||||
|
if taxable_income <= float(amt):
|
||||||
|
withholding = (((taxable_income - last) * (rate / 100)) + flat_fee) - (exemptions * exemption_amt)
|
||||||
|
break
|
||||||
|
last = amt
|
||||||
|
|
||||||
|
withholding = max(withholding, 0.0)
|
||||||
|
withholding /= pay_periods
|
||||||
|
withholding += additional
|
||||||
|
return wage, -((withholding / wage) * 100.0)
|
||||||
44
l10n_us_hr_payroll/models/state/wv_west_virginia.py
Normal file
44
l10n_us_hr_payroll/models/state/wv_west_virginia.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 wv_west_virginia_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||||
|
"""
|
||||||
|
Returns SIT eligible wage and rate.
|
||||||
|
|
||||||
|
:return: result, result_rate (wage, percent)
|
||||||
|
"""
|
||||||
|
state_code = 'WV'
|
||||||
|
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.dict.contract_id.us_payroll_config_value('wv_it104_sit_filing_status')
|
||||||
|
if not filing_status:
|
||||||
|
return 0.0, 0.0
|
||||||
|
|
||||||
|
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||||
|
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||||
|
exemptions = payslip.dict.contract_id.us_payroll_config_value('wv_it104_sit_exemptions')
|
||||||
|
exemption_amt = payslip.dict.rule_parameter('us_wv_sit_exemption_rate')[schedule_pay]
|
||||||
|
tax_table = payslip.dict.rule_parameter('us_wv_sit_tax_rate')[filing_status].get(schedule_pay)
|
||||||
|
|
||||||
|
taxable_income = wage - (exemptions * exemption_amt)
|
||||||
|
withholding = 0.0
|
||||||
|
last = 0.0
|
||||||
|
for row in tax_table:
|
||||||
|
amt, flat_fee, rate = row
|
||||||
|
if taxable_income <= 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)
|
||||||
26
l10n_us_hr_payroll/models/update.py
Normal file
26
l10n_us_hr_payroll/models/update.py
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class PublisherWarrantyContract(models.AbstractModel):
|
||||||
|
_inherit = 'publisher_warranty.contract'
|
||||||
|
|
||||||
|
def _get_hibou_modules(self):
|
||||||
|
modules = super(PublisherWarrantyContract, self)._get_hibou_modules()
|
||||||
|
try:
|
||||||
|
today_date = fields.Date.today()
|
||||||
|
last_thirty_date = today_date - datetime.timedelta(days=30)
|
||||||
|
today = fields.Date.to_string(today_date + datetime.timedelta(days=1)) # Dates vs Datetimes, pad out a day
|
||||||
|
last_thirty = fields.Date.to_string(last_thirty_date)
|
||||||
|
self.env.cr.execute(
|
||||||
|
'SELECT COUNT(DISTINCT(employee_id)) FROM hr_payslip WHERE create_date BETWEEN %s AND %s',
|
||||||
|
(last_thirty, today))
|
||||||
|
employee_count = self.env.cr.fetchone()[0] or 0
|
||||||
|
modules.update({
|
||||||
|
'l10n_us_hr_payroll': employee_count,
|
||||||
|
})
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
return modules
|
||||||
@@ -51,8 +51,48 @@ class HRContractUSPayrollConfig(models.Model):
|
|||||||
fed_941_fit_w4_additional_withholding = fields.Float(string='Federal W4 Additional Withholding [4(c)]',
|
fed_941_fit_w4_additional_withholding = fields.Float(string='Federal W4 Additional Withholding [4(c)]',
|
||||||
help='Form W4 (2020+) 4(c)')
|
help='Form W4 (2020+) 4(c)')
|
||||||
|
|
||||||
|
al_a4_sit_exemptions = fields.Selection([
|
||||||
|
('', '0'),
|
||||||
|
('S', 'S'),
|
||||||
|
('MS', 'MS'),
|
||||||
|
('M', 'M'),
|
||||||
|
('H', 'H'),
|
||||||
|
], string='Alabama A4 Withholding Exemptions', help='A4 1. 2. 3.')
|
||||||
|
al_a4_sit_dependents = fields.Integer(string='Alabama A4 Dependents', help='A4 4.')
|
||||||
|
|
||||||
|
ar_ar4ec_sit_allowances = fields.Integer(string='Arkansas AR4EC allowances', help='AR4EC 3.')
|
||||||
|
|
||||||
|
az_a4_sit_withholding_percentage = fields.Float(
|
||||||
|
string='Arizona A-4 Withholding Percentage',
|
||||||
|
help='A-4 1. (0.8 or 1.3 or 1.8 or 2.7 or 3.6 or 4.2 or 5.1 or 0 for exempt.')
|
||||||
|
|
||||||
|
ca_de4_sit_allowances = fields.Integer(string='California W-4 Allowances',
|
||||||
|
help='CA W-4 3.')
|
||||||
|
ca_de4_sit_additional_allowances = fields.Integer(string='California W-4 Additional Allowances',
|
||||||
|
help='CA W-4 4(c).')
|
||||||
|
ca_de4_sit_filing_status = fields.Selection([
|
||||||
|
('', 'Exempt'),
|
||||||
|
('single', 'Single or Married filing separately'),
|
||||||
|
('married', 'Married filing jointly'),
|
||||||
|
('head_household', 'Head of Household')
|
||||||
|
], string='California W-4 Filing Status', help='CA W-4 1(c).')
|
||||||
|
|
||||||
|
ct_w4na_sit_code = fields.Selection([
|
||||||
|
('a', 'A'),
|
||||||
|
('b', 'B'),
|
||||||
|
('c', 'C'),
|
||||||
|
('d', 'D'),
|
||||||
|
('f', 'F'),
|
||||||
|
], string='Connecticut CT-W4 Withholding Code', help='CT-W4 1.')
|
||||||
|
|
||||||
|
de_w4_sit_filing_status = fields.Selection([
|
||||||
|
('single', 'Single or Married filing separately'),
|
||||||
|
('married', 'Married filing jointly'),
|
||||||
|
], string='Delaware W-4 Marital Status', help='DE W-4 3.')
|
||||||
|
de_w4_sit_dependent = fields.Integer(string='Delaware W-4 Dependents', help='DE W-4 4.')
|
||||||
|
|
||||||
ga_g4_sit_filing_status = fields.Selection([
|
ga_g4_sit_filing_status = fields.Selection([
|
||||||
('exempt', 'Exempt'),
|
('', 'Exempt'),
|
||||||
('single', 'Single'),
|
('single', 'Single'),
|
||||||
('married filing joint, both spouses working', 'Married Filing Joint, both spouses working'),
|
('married filing joint, both spouses working', 'Married Filing Joint, both spouses working'),
|
||||||
('married filing joint, one spouse working', 'Married Filing Joint, one spouse working'),
|
('married filing joint, one spouse working', 'Married Filing Joint, one spouse working'),
|
||||||
@@ -64,6 +104,66 @@ class HRContractUSPayrollConfig(models.Model):
|
|||||||
ga_g4_sit_additional_allowances = fields.Integer(string='Georgia G-4 Additional Allowances',
|
ga_g4_sit_additional_allowances = fields.Integer(string='Georgia G-4 Additional Allowances',
|
||||||
help='G-4 5.')
|
help='G-4 5.')
|
||||||
|
|
||||||
|
hi_hw4_sit_filing_status = fields.Selection([
|
||||||
|
('', 'Exempt'),
|
||||||
|
('single', 'Single'),
|
||||||
|
('married', 'Married'),
|
||||||
|
('head_of_household', 'Head of Household'),
|
||||||
|
], string='Hawaii HW-4 Marital Status', help='HI HW-4 3.')
|
||||||
|
hi_hw4_sit_allowances = fields.Integer(string='Hawaii HW-4 Allowances', help='HI HW-4 4.')
|
||||||
|
|
||||||
|
ia_w4_sit_allowances = fields.Integer(string='Iowa W-4 allowances', help='IA W-4 6.')
|
||||||
|
|
||||||
|
id_w4_sit_filing_status = fields.Selection([
|
||||||
|
('single', 'Single'),
|
||||||
|
('married', 'Married'),
|
||||||
|
('head of household', 'Head of Household'),
|
||||||
|
], string='Idaho ID W-4 Withholding Status', help='ID W-4 A.B.C.')
|
||||||
|
id_w4_sit_allowances = fields.Integer(string='Idaho ID W-4 Allowances', help='ID W-4 1.')
|
||||||
|
|
||||||
|
il_w4_sit_basic_allowances = fields.Integer(string='Illinois IL-W-4 Number of Basic Allowances', help='IL-W-4 Step 1.')
|
||||||
|
il_w4_sit_additional_allowances = fields.Integer(string='Illinois IL-W-4 Number of Additional Allowances', help='IL-W-4 Step 2.')
|
||||||
|
|
||||||
|
in_w4_sit_personal_exemption = fields.Integer(string='Indiana In-W-4 Number of Personal Exemption', help='IN-W-4 5.')
|
||||||
|
in_w4_sit_dependent_exemption = fields.Integer(string='Indiana In-W-4 Number of Dependent Exemption', help='IN-W-4 6.')
|
||||||
|
|
||||||
|
ks_k4_sit_filing_status = fields.Selection([
|
||||||
|
('single', 'Single'),
|
||||||
|
('married', 'Joint'),
|
||||||
|
], string='Kansas K-4 Filing Status', help='KS K-4 3.')
|
||||||
|
ks_k4_sit_allowances = fields.Integer(string='Kansas KS K-4 Number of Allowances', help='KS K-4 Step 4.')
|
||||||
|
|
||||||
|
la_l4_sit_filing_status = fields.Selection([
|
||||||
|
('single', 'Single'),
|
||||||
|
('married', 'Married'),
|
||||||
|
], string='Louisiana LA L-4 Filing Status', help='LA L-4 3.')
|
||||||
|
la_l4_sit_exemptions = fields.Integer(string='Louisiana LA L-4 Number of Exemptions', help='LA L-4 6.')
|
||||||
|
la_l4_sit_dependents = fields.Integer(string='Louisiana LA L-4 Number of Dependents', help='LA L-4 7.')
|
||||||
|
|
||||||
|
me_w4me_sit_filing_status = fields.Selection([
|
||||||
|
('', 'Exempt'),
|
||||||
|
('single', 'Single or Head of Household'),
|
||||||
|
('married', 'Married'),
|
||||||
|
], string='Maine W-4ME Filing Status', help='ME W-4ME 3.')
|
||||||
|
me_w4me_sit_allowances = fields.Integer(string='Maine Allowances', help='W-4ME 4.')
|
||||||
|
|
||||||
|
mi_w4_sit_exemptions = fields.Integer(string='Michigan MI W-4 Exemptions', help='MI-W4 6.')
|
||||||
|
|
||||||
|
mn_w4mn_sit_filing_status = fields.Selection([
|
||||||
|
('', 'Exempt'),
|
||||||
|
('single', 'Single'),
|
||||||
|
('married', 'Married'),
|
||||||
|
], string='Minnesota W-4MN Marital Status', help='W-4MN')
|
||||||
|
mn_w4mn_sit_allowances = fields.Integer(string='Minnesota Allowances', help='W-4MN 1.')
|
||||||
|
|
||||||
|
mo_mow4_sit_filing_status = fields.Selection([
|
||||||
|
('', 'Exempt'),
|
||||||
|
('single', 'Single or Married Spouse Works or Married Filing Separate'),
|
||||||
|
('married', 'Married (Spouse does not work)'),
|
||||||
|
('head_of_household', 'Head of Household'),
|
||||||
|
], string='Missouri W-4 Filing Status', help='MO W-4 1.')
|
||||||
|
mo_mow4_sit_withholding = fields.Integer(string='Missouri MO W-4 Reduced Withholding', help='MO W-4 3.')
|
||||||
|
|
||||||
ms_89_350_sit_filing_status = fields.Selection([
|
ms_89_350_sit_filing_status = fields.Selection([
|
||||||
('', 'Exempt'),
|
('', 'Exempt'),
|
||||||
('single', 'Single'),
|
('single', 'Single'),
|
||||||
@@ -86,11 +186,93 @@ class HRContractUSPayrollConfig(models.Model):
|
|||||||
('montana_for_marriage', 'Montana for Marriage'),
|
('montana_for_marriage', 'Montana for Marriage'),
|
||||||
], string='Montana MW-4 Exempt from Withholding', help='MW-4 Section 2')
|
], string='Montana MW-4 Exempt from Withholding', help='MW-4 Section 2')
|
||||||
|
|
||||||
|
nc_nc4_sit_filing_status = fields.Selection([
|
||||||
|
('', 'Exempt'),
|
||||||
|
('single', 'Single'),
|
||||||
|
('married', 'Married'),
|
||||||
|
('head_household', 'Head of Household')
|
||||||
|
], string='North Carolina NC-4 Filing Status', help='NC-4')
|
||||||
|
nc_nc4_sit_allowances = fields.Integer(string='North Carolina NC-4 Allowances', help='NC-4 1.')
|
||||||
|
|
||||||
|
nd_w4_sit_filing_status = fields.Selection([
|
||||||
|
('', 'Exempt'),
|
||||||
|
('single', 'Single'),
|
||||||
|
('married', 'Married'),
|
||||||
|
('head_household', 'Head of Household')
|
||||||
|
], string='North Dakota ND W-4 Filing Status', help='ND W-4')
|
||||||
|
nd_w4_sit_allowances = fields.Integer(string='North Dakota ND W-4')
|
||||||
|
|
||||||
|
ne_w4n_sit_filing_status = fields.Selection([
|
||||||
|
('single', 'Single'),
|
||||||
|
('married', 'Married'),
|
||||||
|
], string='Nebraska NE W-4N Filing Status', help='NE W-4N')
|
||||||
|
ne_w4n_sit_allowances = fields.Integer(string='Nebraska NE W-4N Allowances', help='NE W-4N 1.')
|
||||||
|
|
||||||
|
nj_njw4_sit_filing_status = fields.Selection([
|
||||||
|
('', 'Exempt'),
|
||||||
|
('single', 'Single'),
|
||||||
|
('married_separate', 'Married/Civil Union partner Separate'),
|
||||||
|
('married_joint', 'Married/Civil Union Couple Joint'),
|
||||||
|
('widower', 'Widower/Surviving Civil Union Partner'),
|
||||||
|
('head_household', 'Head of Household')
|
||||||
|
], string='New Jersey NJ-W4 Filing Status', help='NJ-W4 2.')
|
||||||
|
nj_njw4_sit_allowances = fields.Integer(string='New Jersey NJ-W4 Allowances', help='NJ-W4 4.')
|
||||||
|
nj_njw4_sit_rate_table = fields.Selection([
|
||||||
|
('A', 'A'),
|
||||||
|
('B', 'B'),
|
||||||
|
('C', 'C'),
|
||||||
|
('D', 'D'),
|
||||||
|
('E', 'E')
|
||||||
|
], string='New Jersey Wage Chart Letter', help='NJ-W4. 3.')
|
||||||
|
|
||||||
|
ny_it2104_sit_filing_status = fields.Selection([
|
||||||
|
('', 'Exempt'),
|
||||||
|
('single', 'Single'),
|
||||||
|
('married', 'Married'),
|
||||||
|
], string='New York NY IT-2104 Filing Status', help='NY IT-2104')
|
||||||
|
ny_it2104_sit_allowances = fields.Integer(string="New York IT-2104 Allowances", help="NY IT-2104 1. 2.")
|
||||||
|
|
||||||
# Ohio will use generic SIT exempt and additional fields
|
# Ohio will use generic SIT exempt and additional fields
|
||||||
oh_it4_sit_exemptions = fields.Integer(string='Ohio IT-4 Exemptions',
|
oh_it4_sit_exemptions = fields.Integer(string='Ohio IT-4 Exemptions',
|
||||||
help='Line 4')
|
help='Line 4')
|
||||||
|
|
||||||
|
ok_w4_sit_filing_status = fields.Selection([
|
||||||
|
('single', 'Single'),
|
||||||
|
('married', 'Married'),
|
||||||
|
('head_household', 'Married, but withhold at higher Single rate')
|
||||||
|
], string='Oklahoma OK-W-4 Filing Status', help='OK-W-4')
|
||||||
|
ok_w4_sit_allowances = fields.Integer(string='Oklahoma OK-W-4 Allowances', help='OK-W-4 5.')
|
||||||
|
|
||||||
|
ri_w4_sit_allowances = fields.Integer(string='Rhode Island RI W-4 Allowances', help='RI W-4 1.')
|
||||||
|
|
||||||
|
sc_w4_sit_allowances = fields.Integer(string='South Carolina SC W-4 Allowances', help='SC W-4 5.')
|
||||||
|
|
||||||
|
ut_w4_sit_filing_status = fields.Selection([
|
||||||
|
('single', 'Single'),
|
||||||
|
('married', 'Married'),
|
||||||
|
('head_household', 'Head of Household')
|
||||||
|
], string='Utah UT W-4 Filing Status', help='UT W-4 C.')
|
||||||
|
|
||||||
|
vt_w4vt_sit_filing_status = fields.Selection([
|
||||||
|
('single', 'Single'),
|
||||||
|
('married', 'Married'),
|
||||||
|
], string='Vermont VT W-4VT Filing Status', help='VT W-4VT')
|
||||||
|
vt_w4vt_sit_allowances = fields.Integer(string='Vermont VT W-4VT Allowances', help='VT W-4VT 5.')
|
||||||
|
|
||||||
va_va4_sit_exemptions = fields.Integer(string='Virginia VA-4(P) Personal Exemptions',
|
va_va4_sit_exemptions = fields.Integer(string='Virginia VA-4(P) Personal Exemptions',
|
||||||
help='VA-4(P) 1(a)')
|
help='VA-4(P) 1(a)')
|
||||||
va_va4_sit_other_exemptions = fields.Integer(string='Virginia VA-4(P) Age & Blindness Exemptions',
|
va_va4_sit_other_exemptions = fields.Integer(string='Virginia VA-4(P) Age & Blindness Exemptions',
|
||||||
help='VA-4(P) 1(b)')
|
help='VA-4(P) 1(b)')
|
||||||
|
|
||||||
|
wi_wt4_sit_filing_status = fields.Selection([
|
||||||
|
('single', 'Single'),
|
||||||
|
('married', 'Married'),
|
||||||
|
], string='Wisconsin WT-4 Filing Status', help='WI WT-4')
|
||||||
|
wi_wt4_sit_exemptions = fields.Integer(string='Wisconsin Exemptions', help='WI WT-4 1.(d)')
|
||||||
|
|
||||||
|
wv_it104_sit_filing_status = fields.Selection([
|
||||||
|
('single', 'Single'),
|
||||||
|
('married', 'Married'),
|
||||||
|
('head_household', 'Head of Household')
|
||||||
|
], string='West Virginia WV/IT-104 Filing Status', help='WV WV/IT-104')
|
||||||
|
wv_it104_sit_exemptions = fields.Integer(string='West Virginia Exemptions', help='WV WV/IT-104 4.')
|
||||||
|
|||||||
@@ -1,32 +1,130 @@
|
|||||||
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
from . import common
|
from . import common
|
||||||
|
|
||||||
|
from . import test_special
|
||||||
|
|
||||||
from . import test_us_payslip_2019
|
from . import test_us_payslip_2019
|
||||||
from . import test_us_payslip_2020
|
from . import test_us_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_ak_alaska_payslip_2019
|
||||||
|
from . import test_us_ak_alaska_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_al_alabama_payslip_2019
|
||||||
|
from . import test_us_al_alabama_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_ar_arkansas_payslip_2019
|
||||||
|
from . import test_us_ar_arkansas_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_az_arizona_payslip_2019
|
||||||
|
from . import test_us_az_arizona_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_ca_california_payslip_2019
|
||||||
|
from . import test_us_ca_california_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_co_colorado_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_ct_connecticut_payslip_2019
|
||||||
|
from . import test_us_ct_connecticut_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_de_delaware_payslip_2020
|
||||||
|
|
||||||
from . import test_us_fl_florida_payslip_2019
|
from . import test_us_fl_florida_payslip_2019
|
||||||
from . import test_us_fl_florida_payslip_2020
|
from . import test_us_fl_florida_payslip_2020
|
||||||
|
|
||||||
from . import test_us_ga_georgia_payslip_2019
|
from . import test_us_ga_georgia_payslip_2019
|
||||||
from . import test_us_ga_georgia_payslip_2020
|
from . import test_us_ga_georgia_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_hi_hawaii_payslip_2019
|
||||||
|
from . import test_us_hi_hawaii_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_ia_iowa_payslip_2019
|
||||||
|
from . import test_us_ia_iowa_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_id_idaho_payslip_2019
|
||||||
|
from . import test_us_id_idaho_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_il_illinois_payslip_2019
|
||||||
|
from . import test_us_il_illinois_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_in_indiana_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_ky_kentucky_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_ks_kansas_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_la_louisiana_payslip_2019
|
||||||
|
from . import test_us_la_louisiana_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_me_maine_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_mi_michigan_payslip_2019
|
||||||
|
from . import test_us_mi_michigan_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_mn_minnesota_payslip_2019
|
||||||
|
from . import test_us_mn_minnesota_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_mo_missouri_payslip_2019
|
||||||
|
from . import test_us_mo_missouri_payslip_2020
|
||||||
|
|
||||||
from . import test_us_ms_mississippi_payslip_2019
|
from . import test_us_ms_mississippi_payslip_2019
|
||||||
from . import test_us_ms_mississippi_payslip_2020
|
from . import test_us_ms_mississippi_payslip_2020
|
||||||
|
|
||||||
from . import test_us_mt_montana_payslip_2019
|
from . import test_us_mt_montana_payslip_2019
|
||||||
from . import test_us_mt_montana_payslip_2020
|
from . import test_us_mt_montana_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_nc_northcarolina_payslip_2019
|
||||||
|
from . import test_us_nc_northcarolina_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_nd_north_dakota_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_ne_nebraska_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_nh_new_hampshire_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_nj_newjersey_payslip_2019
|
||||||
|
from . import test_us_nj_newjersey_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_nm_new_mexico_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_nv_nevada_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_ny_new_york_payslip_2019
|
||||||
|
from . import test_us_ny_new_york_payslip_2020
|
||||||
|
|
||||||
from . import test_us_oh_ohio_payslip_2019
|
from . import test_us_oh_ohio_payslip_2019
|
||||||
from . import test_us_oh_ohio_payslip_2020
|
from . import test_us_oh_ohio_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_ok_oklahoma_payslip_2020
|
||||||
|
|
||||||
from . import test_us_pa_pennsylvania_payslip_2019
|
from . import test_us_pa_pennsylvania_payslip_2019
|
||||||
from . import test_us_pa_pennsylvania_payslip_2020
|
from . import test_us_pa_pennsylvania_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_ri_rhode_island_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_sc_south_carolina_payslip_2019
|
||||||
|
from . import test_us_sc_south_carolina_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_sd_south_dakota_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_tn_tennessee_payslip_2020
|
||||||
|
|
||||||
from . import test_us_tx_texas_payslip_2019
|
from . import test_us_tx_texas_payslip_2019
|
||||||
from . import test_us_tx_texas_payslip_2020
|
from . import test_us_tx_texas_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_us_utah_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_vt_vermont_payslip_2020
|
||||||
|
|
||||||
from . import test_us_va_virginia_payslip_2019
|
from . import test_us_va_virginia_payslip_2019
|
||||||
from . import test_us_va_virginia_payslip_2020
|
from . import test_us_va_virginia_payslip_2020
|
||||||
|
|
||||||
from . import test_us_wa_washington_payslip_2019
|
from . import test_us_wa_washington_payslip_2019
|
||||||
from . import test_us_wa_washington_payslip_2020
|
from . import test_us_wa_washington_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_wv_west_virginia_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_wi_wisconsin_payslip_2020
|
||||||
|
|
||||||
|
from . import test_us_wy_wyoming_payslip_2019
|
||||||
|
from . import test_us_wy_wyoming_payslip_2020
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ class TestUsPayslip(common.TransactionCase):
|
|||||||
debug = False
|
debug = False
|
||||||
_logger = getLogger(__name__)
|
_logger = getLogger(__name__)
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestUsPayslip, self).setUp()
|
||||||
|
self.env['ir.config_parameter'].set_param('hr_payroll.payslip.sum_behavior', 'date_to')
|
||||||
|
|
||||||
float_info = sys_float_info
|
float_info = sys_float_info
|
||||||
|
|
||||||
def float_round(self, value, digits):
|
def float_round(self, value, digits):
|
||||||
@@ -154,15 +158,6 @@ class TestUsPayslip(common.TransactionCase):
|
|||||||
def assertPayrollAlmostEqual(self, first, second):
|
def assertPayrollAlmostEqual(self, first, second):
|
||||||
self.assertAlmostEqual(first, second, self.payroll_digits-1)
|
self.assertAlmostEqual(first, second, self.payroll_digits-1)
|
||||||
|
|
||||||
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')
|
|
||||||
|
|
||||||
payslip.compute_sheet()
|
|
||||||
|
|
||||||
def get_us_state(self, code, cache={}):
|
def get_us_state(self, code, cache={}):
|
||||||
country_key = 'US_COUNTRY'
|
country_key = 'US_COUNTRY'
|
||||||
if code in cache:
|
if code in cache:
|
||||||
@@ -177,7 +172,11 @@ class TestUsPayslip(common.TransactionCase):
|
|||||||
cache[code] = us_state
|
cache[code] = us_state
|
||||||
return us_state
|
return us_state
|
||||||
|
|
||||||
def _test_suta(self, category, state_code, rate, date, wage_base=None, **extra_contract):
|
def _test_suta(self, category, state_code, rate, date, wage_base=None, relaxed=False, **extra_contract):
|
||||||
|
if relaxed:
|
||||||
|
_assert = self.assertPayrollAlmostEqual
|
||||||
|
else:
|
||||||
|
_assert = self.assertPayrollEqual
|
||||||
if wage_base:
|
if wage_base:
|
||||||
# Slightly larger than 1/2 the wage_base
|
# Slightly larger than 1/2 the wage_base
|
||||||
wage = round(wage_base / 2.0) + 100.0
|
wage = round(wage_base / 2.0) + 100.0
|
||||||
@@ -200,18 +199,18 @@ class TestUsPayslip(common.TransactionCase):
|
|||||||
contract.us_payroll_config_id.fed_940_type = USHRContract.FUTA_TYPE_EXEMPT
|
contract.us_payroll_config_id.fed_940_type = USHRContract.FUTA_TYPE_EXEMPT
|
||||||
payslip.compute_sheet()
|
payslip.compute_sheet()
|
||||||
cats = self._getCategories(payslip)
|
cats = self._getCategories(payslip)
|
||||||
self.assertPayrollEqual(cats.get(category, 0.0), 0.0)
|
_assert(cats.get(category, 0.0), 0.0)
|
||||||
|
|
||||||
contract.us_payroll_config_id.fed_940_type = USHRContract.FUTA_TYPE_BASIC
|
contract.us_payroll_config_id.fed_940_type = USHRContract.FUTA_TYPE_BASIC
|
||||||
payslip.compute_sheet()
|
payslip.compute_sheet()
|
||||||
cats = self._getCategories(payslip)
|
cats = self._getCategories(payslip)
|
||||||
self.assertPayrollEqual(cats.get(category, 0.0), 0.0)
|
_assert(cats.get(category, 0.0), 0.0)
|
||||||
|
|
||||||
# Test Normal
|
# Test Normal
|
||||||
contract.us_payroll_config_id.fed_940_type = USHRContract.FUTA_TYPE_NORMAL
|
contract.us_payroll_config_id.fed_940_type = USHRContract.FUTA_TYPE_NORMAL
|
||||||
payslip.compute_sheet()
|
payslip.compute_sheet()
|
||||||
cats = self._getCategories(payslip)
|
cats = self._getCategories(payslip)
|
||||||
self.assertPayrollEqual(cats.get(category, 0.0), wage * rate)
|
_assert(cats.get(category, 0.0), wage * rate)
|
||||||
process_payslip(payslip)
|
process_payslip(payslip)
|
||||||
|
|
||||||
# Second Payslip
|
# Second Payslip
|
||||||
@@ -222,7 +221,7 @@ class TestUsPayslip(common.TransactionCase):
|
|||||||
if wage_base:
|
if wage_base:
|
||||||
remaining_unemp_wages = wage_base - wage
|
remaining_unemp_wages = wage_base - wage
|
||||||
self.assertTrue((remaining_unemp_wages * rate) <= 0.01) # less than 0.01 because rate is negative
|
self.assertTrue((remaining_unemp_wages * rate) <= 0.01) # less than 0.01 because rate is negative
|
||||||
self.assertPayrollEqual(cats.get(category, 0.0), remaining_unemp_wages * rate)
|
_assert(cats.get(category, 0.0), remaining_unemp_wages * rate)
|
||||||
|
|
||||||
# As if they were paid once already, so the first "two payslips" would remove all of the tax obligation
|
# As if they were paid once already, so the first "two payslips" would remove all of the tax obligation
|
||||||
# 1 wage - Payslip (confirmed)
|
# 1 wage - Payslip (confirmed)
|
||||||
@@ -231,12 +230,12 @@ class TestUsPayslip(common.TransactionCase):
|
|||||||
contract.external_wages = wage
|
contract.external_wages = wage
|
||||||
payslip.compute_sheet()
|
payslip.compute_sheet()
|
||||||
cats = self._getCategories(payslip)
|
cats = self._getCategories(payslip)
|
||||||
self.assertPayrollEqual(cats.get(category, 0.0), 0.0)
|
_assert(cats.get(category, 0.0), 0.0)
|
||||||
else:
|
else:
|
||||||
self.assertPayrollEqual(cats.get(category, 0.0), wage * rate)
|
_assert(cats.get(category, 0.0), wage * rate)
|
||||||
|
|
||||||
def _test_er_suta(self, state_code, rate, date, wage_base=None, **extra_contract):
|
def _test_er_suta(self, state_code, rate, date, wage_base=None, relaxed=False, **extra_contract):
|
||||||
self._test_suta('ER_US_SUTA', state_code, rate, date, wage_base=wage_base, **extra_contract)
|
self._test_suta('ER_US_SUTA', state_code, rate, date, wage_base=wage_base, relaxed=relaxed, **extra_contract)
|
||||||
|
|
||||||
def _test_ee_suta(self, state_code, rate, date, wage_base=None, **extra_contract):
|
def _test_ee_suta(self, state_code, rate, date, wage_base=None, relaxed=False, **extra_contract):
|
||||||
self._test_suta('EE_US_SUTA', state_code, rate, date, wage_base=wage_base, **extra_contract)
|
self._test_suta('EE_US_SUTA', state_code, rate, date, wage_base=wage_base, relaxed=relaxed, **extra_contract)
|
||||||
|
|||||||
119
l10n_us_hr_payroll/tests/test_special.py
Normal file
119
l10n_us_hr_payroll/tests/test_special.py
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
from .common import TestUsPayslip, process_payslip
|
||||||
|
|
||||||
|
|
||||||
|
class TestSpecial(TestUsPayslip):
|
||||||
|
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')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
|
||||||
|
def test_payslip_sum_behavior(self):
|
||||||
|
us_structure = self.env.ref('l10n_us_hr_payroll.structure_type_employee')
|
||||||
|
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,
|
||||||
|
'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
|
||||||
|
'''
|
||||||
|
})
|
||||||
|
us_structure.write({'rule_ids': [(4, test_rule.id, 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')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
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,
|
||||||
|
})
|
||||||
|
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
|
||||||
|
year = payslip.dict.get_year()
|
||||||
|
result += payslip.sum_category('ALW', str(year) + '-01-01', str(year+1) + '-01-01')
|
||||||
|
""",
|
||||||
|
'sequence': 101,
|
||||||
|
})
|
||||||
|
struct = self.env.ref('l10n_us_hr_payroll.structure_type_employee')
|
||||||
|
struct.rule_ids = test_special_alw + test_recursion
|
||||||
|
|
||||||
|
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)
|
||||||
61
l10n_us_hr_payroll/tests/test_us_ak_alaska_payslip_2019.py
Normal file
61
l10n_us_hr_payroll/tests/test_us_ak_alaska_payslip_2019.py
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .common import TestUsPayslip, process_payslip
|
||||||
|
|
||||||
|
|
||||||
|
class TestUsAKPayslip(TestUsPayslip):
|
||||||
|
# TAXES AND RATES
|
||||||
|
AK_UNEMP_MAX_WAGE = 39900.00
|
||||||
|
AK_UNEMP = -(1.780 / 100.0)
|
||||||
|
AK_UNEMP_EE = -(0.5 / 100.0)
|
||||||
|
|
||||||
|
def test_taxes_monthly_over_max(self):
|
||||||
|
salary = 50000.00
|
||||||
|
schedule_pay = 'monthly'
|
||||||
|
|
||||||
|
employee = self._createEmployee()
|
||||||
|
contract = self._createContract(employee,
|
||||||
|
wage=salary,
|
||||||
|
state_id=self.get_us_state('AK'),
|
||||||
|
state_income_tax_additional_withholding=0.0,
|
||||||
|
schedule_pay=schedule_pay)
|
||||||
|
|
||||||
|
self._log('2019 Alaska tax first payslip monthly:')
|
||||||
|
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
|
||||||
|
self.assertPayrollEqual(cats['ER_US_SUTA'], self.AK_UNEMP_MAX_WAGE * self.AK_UNEMP)
|
||||||
|
self.assertPayrollEqual(cats['EE_US_SUTA'], self.AK_UNEMP_MAX_WAGE * self.AK_UNEMP_EE)
|
||||||
|
|
||||||
|
process_payslip(payslip)
|
||||||
|
|
||||||
|
remaining_ak_unemp_wages = 0.00 # We already reached the maximum wage for unemployment insurance.
|
||||||
|
|
||||||
|
self._log('2019 Alaska tax second payslip monthly:')
|
||||||
|
payslip = self._createPayslip(employee, '2019-02-01', '2019-02-28')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
|
||||||
|
self.assertPayrollEqual(cats['ER_US_SUTA'], remaining_ak_unemp_wages * self.AK_UNEMP) # 0
|
||||||
|
|
||||||
|
def test_taxes_weekly_under_max(self):
|
||||||
|
salary = 5000.00
|
||||||
|
schedule_pay = 'weekly'
|
||||||
|
|
||||||
|
employee = self._createEmployee()
|
||||||
|
contract = self._createContract(employee,
|
||||||
|
wage=salary,
|
||||||
|
state_id=self.get_us_state('AK'),
|
||||||
|
state_income_tax_additional_withholding=0.0,
|
||||||
|
schedule_pay=schedule_pay)
|
||||||
|
|
||||||
|
self._log('2019 Alaska tax first payslip weekly:')
|
||||||
|
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
|
||||||
|
self.assertPayrollEqual(cats['ER_US_SUTA'], salary * self.AK_UNEMP)
|
||||||
|
self.assertPayrollEqual(cats['EE_US_SUTA'], salary * self.AK_UNEMP_EE)
|
||||||
|
|
||||||
|
process_payslip(payslip)
|
||||||
15
l10n_us_hr_payroll/tests/test_us_ak_alaska_payslip_2020.py
Normal file
15
l10n_us_hr_payroll/tests/test_us_ak_alaska_payslip_2020.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from datetime import date
|
||||||
|
from .common import TestUsPayslip
|
||||||
|
|
||||||
|
|
||||||
|
class TestUsAKPayslip(TestUsPayslip):
|
||||||
|
# TAXES AND RATES
|
||||||
|
AK_UNEMP_MAX_WAGE = 41500.00
|
||||||
|
AK_UNEMP = 1.590
|
||||||
|
AK_UNEMP_EE = 0.5
|
||||||
|
|
||||||
|
def test_2020_taxes(self):
|
||||||
|
self._test_er_suta('AK', self.AK_UNEMP, date(2020, 1, 1), wage_base=self.AK_UNEMP_MAX_WAGE)
|
||||||
|
self._test_ee_suta('AK', self.AK_UNEMP_EE, date(2020, 1, 1), wage_base=self.AK_UNEMP_MAX_WAGE)
|
||||||
264
l10n_us_hr_payroll/tests/test_us_al_alabama_payslip_2019.py
Normal file
264
l10n_us_hr_payroll/tests/test_us_al_alabama_payslip_2019.py
Normal file
@@ -0,0 +1,264 @@
|
|||||||
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from .common import TestUsPayslip, process_payslip
|
||||||
|
|
||||||
|
|
||||||
|
class TestUsALPayslip(TestUsPayslip):
|
||||||
|
# TAXES AND RATES
|
||||||
|
AL_UNEMP_MAX_WAGE = 8000.00
|
||||||
|
AL_UNEMP = -2.70 / 100.0
|
||||||
|
|
||||||
|
def test_taxes_weekly(self):
|
||||||
|
salary = 10000.00
|
||||||
|
schedule_pay = 'weekly'
|
||||||
|
dependents = 1
|
||||||
|
filing_status = 'S'
|
||||||
|
# see https://revenue.alabama.gov/wp-content/uploads/2019/01/whbooklet_0119.pdf for reference
|
||||||
|
# Hand Calculated Amount to Test
|
||||||
|
# Step 1 -> 10000.00 for wages per period , 52.0 for weekly -> 10000 * 52 -> 520000.0
|
||||||
|
# Step 2A -> standard deduction for highest wage bracket -> 2000. Subtract from yearly income
|
||||||
|
# 520000 - 2000 = 518000.0
|
||||||
|
# Step 2B -> Subtract Federal Income Tax in yearly form -> Our Fed withholding is -2999.66 * 52 = -155982.32
|
||||||
|
# -> 518000.0 - 155982.32 = 362017.68
|
||||||
|
# Step 2C -> Subtract the personal exemption -> 1500 for single filing_status
|
||||||
|
# -> 362017.68 - 1500 = 360517.68
|
||||||
|
# Step 2D -> Since income is so high, only 300$ per dependent -> 300$. Subtract
|
||||||
|
# -> 360517.68 - 300 = 360217.68
|
||||||
|
#
|
||||||
|
# Step 5 (after adding previous lines) -> Compute marginal taxes.
|
||||||
|
# (500 * (2.00 / 100)) + (2500 * (4.00 / 100)) + ((360217.68 - 500 - 2500) * (5.00 / 100)) -> 17970.884000000002
|
||||||
|
# Convert back to pay period
|
||||||
|
# wh = round(17970.884000000002, 2) -> 17970.88 / 52.0 -> 345.59
|
||||||
|
wh = -345.59
|
||||||
|
|
||||||
|
employee = self._createEmployee()
|
||||||
|
contract = self._createContract(employee,
|
||||||
|
wage=salary,
|
||||||
|
state_id=self.get_us_state('AL'),
|
||||||
|
al_a4_sit_exemptions=filing_status,
|
||||||
|
state_income_tax_additional_withholding=0.0,
|
||||||
|
state_income_tax_exempt=False,
|
||||||
|
al_a4_sit_dependents=dependents,
|
||||||
|
schedule_pay=schedule_pay)
|
||||||
|
|
||||||
|
self._log('2019 Alabama tax first payslip weekly:')
|
||||||
|
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
|
||||||
|
self.assertPayrollEqual(cats['EE_US_941_FIT'], -2999.66) # Hand Calculated.
|
||||||
|
self.assertPayrollEqual(cats['ER_US_SUTA'], self.AL_UNEMP_MAX_WAGE * self.AL_UNEMP)
|
||||||
|
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
|
||||||
|
|
||||||
|
process_payslip(payslip)
|
||||||
|
|
||||||
|
remaining_AL_UNEMP_wages = 0.00 # We already reached the maximum wage for unemployment insurance.
|
||||||
|
|
||||||
|
self._log('2019 Alabama tax second payslip weekly:')
|
||||||
|
payslip = self._createPayslip(employee, '2019-02-01', '2019-02-28')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
|
||||||
|
self.assertPayrollEqual(cats['ER_US_SUTA'], remaining_AL_UNEMP_wages * self.AL_UNEMP) # 0
|
||||||
|
|
||||||
|
def test_taxes_married_jointly(self):
|
||||||
|
salary = 10000.00
|
||||||
|
schedule_pay = 'weekly'
|
||||||
|
dependents = 1
|
||||||
|
filing_status = 'M'
|
||||||
|
|
||||||
|
# see https://revenue.alabama.gov/wp-content/uploads/2019/01/whbooklet_0119.pdf for reference
|
||||||
|
# Hand Calculated Amount to Test
|
||||||
|
# Step 1 -> 10000.00 for wages per period , 52.0 for weekly -> 10000 * 52 -> 520000.0
|
||||||
|
# Step 2A -> standard deduction for highest wage bracket -> 4000. Subtract from yearly income
|
||||||
|
# 520000 - 4000 = 516000.0
|
||||||
|
# Step 2B -> Subtract Federal Income Tax in yearly form -> Our Fed withholding is -2999.66 * 52 = -155982.32
|
||||||
|
# -> 516000.0 - 155982.32 = 360017.68
|
||||||
|
# Step 2C -> Subtract the personal exemption -> 3000 for married filing jointly.
|
||||||
|
# -> 360017.68 - 3000 = 357017.68
|
||||||
|
# Step 2D -> Since income is so high, only 300$ per dependent -> 300$. Subtract
|
||||||
|
# -> 357017.68 - 300 = 356717.68
|
||||||
|
#
|
||||||
|
# Step 5 (after adding previous lines) -> Compute marginal taxes.
|
||||||
|
# (1000 * (2.00 / 100)) + (5000 * (4.00 / 100)) + ((356717.68 - 1000 - 50000) * (5.00 / 100))
|
||||||
|
# -> 17755.884000000002
|
||||||
|
# Convert back to pay period
|
||||||
|
# wh = round(17755.884000000002, 2) -> 15505.88 / 52.0 -> 341.45923076923077
|
||||||
|
wh = -341.46
|
||||||
|
|
||||||
|
employee = self._createEmployee()
|
||||||
|
contract = self._createContract(employee,
|
||||||
|
wage=salary,
|
||||||
|
state_id=self.get_us_state('AL'),
|
||||||
|
al_a4_sit_exemptions=filing_status,
|
||||||
|
state_income_tax_additional_withholding=0.0,
|
||||||
|
state_income_tax_exempt=False,
|
||||||
|
al_a4_sit_dependents=dependents,
|
||||||
|
schedule_pay=schedule_pay)
|
||||||
|
|
||||||
|
self._log('2019 Alabama tax first payslip weekly:')
|
||||||
|
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
|
||||||
|
self.assertPayrollEqual(cats['EE_US_941_FIT'], -2999.66) # Hand Calculated.
|
||||||
|
self.assertPayrollEqual(cats['ER_US_SUTA'], self.AL_UNEMP_MAX_WAGE * self.AL_UNEMP)
|
||||||
|
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
|
||||||
|
|
||||||
|
process_payslip(payslip)
|
||||||
|
|
||||||
|
|
||||||
|
def test_taxes_semimonthly_filing_seperate(self):
|
||||||
|
salary = 20000.00
|
||||||
|
schedule_pay = 'monthly'
|
||||||
|
filing_status = 'MS'
|
||||||
|
dependents = 2
|
||||||
|
|
||||||
|
# see https://revenue.alabama.gov/wp-content/uploads/2019/01/whbooklet_0119.pdf for reference
|
||||||
|
# Hand Calculated Amount to Test
|
||||||
|
# Step 1 -> 10000.00 for wages per period , 12.0 for monthly -> 20000 * 12 -> 240000.00
|
||||||
|
# Step 2A -> standard deduction for highest wage bracket -> 2000. Subtract from yearly income
|
||||||
|
# 240000.00 - 2000 = 238000.00
|
||||||
|
# Step 2B -> Subtract Federal Income Tax in yearly form -> Our Fed withholding is -4821.99 * 12 = -57863.88
|
||||||
|
# -> 238000.00 - 57863.88 = 180136.12
|
||||||
|
# Step 2C -> Subtract the personal exemption -> 1500 for married filing separately
|
||||||
|
# -> 180136.12 - 1500 = 178636.12
|
||||||
|
# Step 2D -> Since income is so high, only 300$ per dependent -> 600. Subtract
|
||||||
|
# -> 178636.12 - 600 = 178036.12
|
||||||
|
#
|
||||||
|
# Step 5 (after adding previous lines) -> Compute marginal taxes.
|
||||||
|
# (500 * (2.00 / 100)) + (2500 * (4.00 / 100)) + ((178036.12 - 500 - 2500) * (5.00 / 100)) -> 8861.806
|
||||||
|
# Convert back to pay period
|
||||||
|
# wh = 8861.806 / 12.0 rounded -> 738.48
|
||||||
|
wh = -738.48
|
||||||
|
|
||||||
|
employee = self._createEmployee()
|
||||||
|
contract = self._createContract(employee,
|
||||||
|
wage=salary,
|
||||||
|
state_id=self.get_us_state('AL'),
|
||||||
|
al_a4_sit_exemptions=filing_status,
|
||||||
|
state_income_tax_additional_withholding=0.0,
|
||||||
|
state_income_tax_exempt=False,
|
||||||
|
al_a4_sit_dependents=dependents,
|
||||||
|
schedule_pay=schedule_pay)
|
||||||
|
|
||||||
|
self._log('2019 Alabama tax first payslip monthly:')
|
||||||
|
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
|
||||||
|
self.assertPayrollEqual(cats['EE_US_941_FIT'], -4822.00) # Hand Calculated.
|
||||||
|
self.assertPayrollEqual(cats['ER_US_SUTA'], self.AL_UNEMP_MAX_WAGE * self.AL_UNEMP)
|
||||||
|
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
|
||||||
|
|
||||||
|
process_payslip(payslip)
|
||||||
|
|
||||||
|
def test_tax_exempt(self):
|
||||||
|
salary = 5500.00
|
||||||
|
wh = 0
|
||||||
|
schedule_pay = 'weekly'
|
||||||
|
dependents = 2
|
||||||
|
|
||||||
|
employee = self._createEmployee()
|
||||||
|
contract = self._createContract(employee,
|
||||||
|
wage=salary,
|
||||||
|
state_id=self.get_us_state('AL'),
|
||||||
|
al_a4_sit_exemptions='',
|
||||||
|
state_income_tax_additional_withholding=0.0,
|
||||||
|
state_income_tax_exempt=True,
|
||||||
|
al_a4_sit_dependents=dependents,
|
||||||
|
schedule_pay=schedule_pay)
|
||||||
|
|
||||||
|
self._log('2019 Alabama tax first payslip exempt:')
|
||||||
|
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
|
||||||
|
self.assertPayrollEqual(cats['ER_US_SUTA'], salary * self.AL_UNEMP)
|
||||||
|
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), wh)
|
||||||
|
|
||||||
|
def test_additional_withholding(self):
|
||||||
|
salary = 5500.0
|
||||||
|
schedule_pay = 'weekly'
|
||||||
|
additional_wh = 40.0
|
||||||
|
dependents = 2
|
||||||
|
# filing status default is single
|
||||||
|
|
||||||
|
# see https://revenue.alabama.gov/wp-content/uploads/2019/01/whbooklet_0119.pdf for reference
|
||||||
|
# Hand Calculated Amount to Test
|
||||||
|
# Step 1 -> 5500.00 for wages per period , 52.0 for monthly -> 5500 * 52.0 -> 286000.0
|
||||||
|
# Step 2A -> standard deduction for highest wage bracket -> 2000. Subtract from yearly income
|
||||||
|
# 286000.0 - 2000 = 284000.0
|
||||||
|
# Step 2B -> Subtract Federal Income Tax in yearly form -> Our Fed withholding is -1422.4 * 52.0 = -73964.8
|
||||||
|
# -> 284000.0 - 73964.8 = 210035.2
|
||||||
|
# Step 2C -> Subtract the personal exemption -> 1500 for single
|
||||||
|
# -> 210035.2 - 1500 = 208535.2
|
||||||
|
# Step 2D -> Since income is so high, only 300$ per dependent -> 600. Subtract
|
||||||
|
# -> 208535.2 - 600 = 207935.2
|
||||||
|
#
|
||||||
|
# Step 5 (after adding previous lines) -> Compute marginal taxes.
|
||||||
|
# (500 * (2.00 / 100)) + (2500 * (4.00 / 100)) + ((207935.2 - 500 - 2500) * (5.00 / 100)) -> 10356.76
|
||||||
|
# Convert back to pay period
|
||||||
|
# wh = 10356.76 / 52.0 rounded -> 199.17
|
||||||
|
wh = -199.17
|
||||||
|
|
||||||
|
employee = self._createEmployee()
|
||||||
|
contract = self._createContract(employee,
|
||||||
|
wage=salary,
|
||||||
|
state_id=self.get_us_state('AL'),
|
||||||
|
al_a4_sit_exemptions='S',
|
||||||
|
state_income_tax_additional_withholding=40.0,
|
||||||
|
state_income_tax_exempt=False,
|
||||||
|
al_a4_sit_dependents=dependents,
|
||||||
|
schedule_pay=schedule_pay)
|
||||||
|
|
||||||
|
self._log('2019 Alabama tax first payslip additional withholding:')
|
||||||
|
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
|
||||||
|
self.assertPayrollEqual(cats['EE_US_941_FIT'], -1422.4) # Hand Calculated.
|
||||||
|
self.assertPayrollEqual(cats['ER_US_SUTA'], salary * self.AL_UNEMP)
|
||||||
|
self.assertPayrollEqual(cats['EE_US_SIT'], wh - additional_wh)
|
||||||
|
|
||||||
|
def test_personal_exemption(self):
|
||||||
|
salary = 5500.0
|
||||||
|
schedule_pay = 'weekly'
|
||||||
|
# filing status default is single
|
||||||
|
|
||||||
|
# see https://revenue.alabama.gov/wp-content/uploads/2019/01/whbooklet_0119.pdf for reference
|
||||||
|
# Hand Calculated Amount to Test
|
||||||
|
# Step 1 -> 5500.00 for wages per period , 52.0 for monthly -> 5500 * 52.0 -> 286000.0
|
||||||
|
# Step 2A -> standard deduction for highest wage bracket -> 2000. Subtract from yearly income
|
||||||
|
# 286000.0 - 2000 = 284000.0
|
||||||
|
# Step 2B -> Subtract Federal Income Tax in yearly form -> Our Fed withholding is -1422.4 * 52.0 = -73964.8
|
||||||
|
# -> 284000.0 - 73964.8 = 210035.2
|
||||||
|
# Step 2C -> Subtract the personal exemption -> 0 for personal exemptioon
|
||||||
|
# -> 210035.2 - 0 = 210035.2
|
||||||
|
# Step 2D -> Subtract per dependent. No dependents so 0
|
||||||
|
# -> 210035.2 - 0 = 210035.2
|
||||||
|
#
|
||||||
|
# Step 5 (after adding previous lines) -> Compute marginal taxes.
|
||||||
|
# (500 * (2.00 / 100)) + (2500 * (4.00 / 100)) + ((210035.2 - 500 - 2500) * (5.00 / 100)) -> 10461.76
|
||||||
|
# Convert back to pay period
|
||||||
|
# wh = 10461.76 / 52.0 rounded -> 201.19
|
||||||
|
wh = -199.74
|
||||||
|
|
||||||
|
employee = self._createEmployee()
|
||||||
|
contract = self._createContract(employee,
|
||||||
|
wage=salary,
|
||||||
|
state_id=self.get_us_state('AL'),
|
||||||
|
al_a4_sit_exemptions='S',
|
||||||
|
state_income_tax_additional_withholding=0.0,
|
||||||
|
state_income_tax_exempt=False,
|
||||||
|
al_a4_sit_dependents=0.0,
|
||||||
|
schedule_pay=schedule_pay)
|
||||||
|
|
||||||
|
self._log('2019 Alabama tax first payslip additional withholding:')
|
||||||
|
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
|
||||||
|
payslip.compute_sheet()
|
||||||
|
cats = self._getCategories(payslip)
|
||||||
|
|
||||||
|
self.assertPayrollEqual(cats['EE_US_941_FIT'], -1422.4) # Hand Calculated.
|
||||||
|
self.assertPayrollEqual(cats['ER_US_SUTA'], salary * self.AL_UNEMP)
|
||||||
|
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user