[IMP] l10n_us_hr_payroll: Release 2021 ported/patched from Odoo 13/14

This commit is contained in:
Jared Kipe
2021-02-22 13:26:06 -08:00
parent 6c95e4ebb4
commit 02d60e81f6
120 changed files with 4204 additions and 6187 deletions

View File

@@ -20,6 +20,12 @@
<field name="parameter_value">137700.0</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_941_fica_ss_wage_base_2021" model="hr.payroll.rate">
<field name="name">Federal 941 FICA Social Security Wage Base</field>
<field name="code">fed_941_fica_ss_wage_base</field>
<field name="parameter_value">142800.0</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
<!-- Rate -->
<record id="rule_parameter_941_fica_ss_rate_2016" model="hr.payroll.rate">

View File

@@ -2,21 +2,6 @@
<odoo>
<!-- Shared -->
<record id="rule_parameter_941_fit_allowance_2018" model="hr.payroll.rate">
<field name="name">Federal 941 FIT Allowance</field>
<field name="code">fed_941_fit_allowance</field>
<!-- Bogus 2018 -->
<field name="parameter_value">{
'weekly': 80.80,
'bi-weekly': 161.50,
'semi-monthly': 175.00,
'monthly': 350.00,
'quarterly': 1050.00,
'semi-annually': 2100.00,
'annually': 4200.00,
}</field>
<field name="date_from" eval="datetime(2018, 1, 1).date()"/>
</record>
<record id="rule_parameter_941_fit_allowance_2019" model="hr.payroll.rate">
<field name="name">Federal 941 FIT Allowance</field>
<field name="code">fed_941_fit_allowance</field>
@@ -39,35 +24,6 @@
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_941_fit_nra_additional_2018" model="hr.payroll.rate">
<field name="name">Federal 941 FIT NRA Additional</field>
<field name="code">fed_941_fit_nra_additional</field>
<!-- Bogus from 2018 -->
<field name="parameter_value">{
'weekly': 153.80,
'bi-weekly': 307.70,
'semi-monthly': 333.30,
'monthly': 666.70,
'quarterly': 2000.00,
'semi-annually': 4000.00,
'annually': 8000.00,
}</field>
<field name="date_from" eval="datetime(2018, 1, 1).date()"/>
</record>
<record id="rule_parameter_941_fit_nra_additional_2019" model="hr.payroll.rate">
<field name="name">Federal 941 FIT NRA Additional</field>
<field name="code">fed_941_fit_nra_additional</field>
<field name="parameter_value">{
'weekly': 153.80,
'bi-weekly': 307.70,
'semi-monthly': 333.30,
'monthly': 666.70,
'quarterly': 2000.00,
'semi-annually': 4000.00,
'annually': 8000.00,
}</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_941_fit_nra_additional_2020" model="hr.payroll.rate">
<field name="name">Federal 941 FIT NRA Additional</field>
<field name="code">fed_941_fit_nra_additional</field>
@@ -82,165 +38,22 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_941_fit_nra_additional_2021" model="hr.payroll.rate">
<field name="name">Federal 941 FIT NRA Additional</field>
<field name="code">fed_941_fit_nra_additional</field>
<field name="parameter_value">{
'weekly': 241.30,
'bi-weekly': 482.70,
'semi-monthly': 522.90,
'monthly': 1045.80,
'quarterly': 3137.50,
'semi-annually': 6275.00,
'annually': 12550.00,
}</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
<!-- Single and Married Single Rate -->
<record id="rule_parameter_941_fit_table_single_2018" model="hr.payroll.rate">
<field name="name">Federal 941 FIT Table Single</field>
<field name="code">fed_941_fit_table_single</field>
<!-- Bogus 2018 -->
<!-- But-not-over, $, % -->
<field name="parameter_value">{
'weekly': [
( 73.00, 0.00, 0),
( 260.00, 0.00, 10),
( 832.00, 18.70, 12),
( 1692.00, 87.34, 22),
( 3164.00, 276.54, 24),
( 3998.00, 629.82, 32),
( 9887.00, 896.70, 35),
( 'inf', 2957.85, 37),
],
'bi-weekly': [
( 146.00, 0.00, 0),
( 519.00, 0.00, 10),
( 1664.00, 37.30, 12),
( 3385.00, 174.70, 22),
( 6328.00, 553.32, 24),
( 7996.00, 1259.64, 32),
( 19773.00, 1793.40, 35),
( 'inf', 5915.35, 37),
],
'semi-monthly': [
( 158.00, 0.00, 0),
( 563.00, 0.00, 10),
( 1803.00, 40.50, 12),
( 3667.00, 189.30, 22),
( 6855.00, 599.38, 24),
( 8663.00, 1364.50, 32),
( 21421.00, 1943.06, 35),
( 'inf', 6408.36, 37),
],
'monthly': [
( 317.00, 0.00, 0),
( 1125.00, 0.00, 10),
( 3606.00, 80.80, 12),
( 7333.00, 378.52, 22),
( 13710.00, 1198.46, 24),
( 17325.00, 2728.94, 32),
( 42842.00, 3885.74, 35),
( 'inf', 12816.69, 37),
],
'quarterly': [
( 950.00, 0.00, 0),
( 3375.00, 0.00, 10),
( 10819.00, 242.50, 12),
( 22000.00, 1135.78, 22),
( 41131.00, 3595.60, 24),
( 51975.00, 8187.04, 32),
( 128525.00, 11657.12, 35),
( 'inf', 38449.62, 37),
],
'semi-annually': [
( 1900.00, 0.00, 0),
( 6750.00, 0.00, 10),
( 21638.00, 485.00, 12),
( 44000.00, 2271.56, 22),
( 82263.00, 7191.20, 24),
( 103950.00, 16374.32, 32),
( 257050.00, 23314.16, 35),
( 'inf', 76899.16, 37),
],
'annually': [
( 3800.00, 0.00, 0),
( 13500.00, 0.00, 10),
( 43275.00, 970.00, 12),
( 88000.00, 4543.00, 22),
( 164525.00, 14382.50, 24),
( 207900.00, 32748.50, 32),
( 514100.00, 46628.50, 35),
( 'inf', 153798.50, 37),
],
}</field>
<field name="date_from" eval="datetime(2018, 1, 1).date()"/>
</record>
<record id="rule_parameter_941_fit_table_single_2019" model="hr.payroll.rate">
<field name="name">Federal 941 FIT Table Single</field>
<field name="code">fed_941_fit_table_single</field>
<!-- But-not-over, $, % -->
<field name="parameter_value">{
'weekly': [
( 73.00, 0.00, 0),
( 260.00, 0.00, 10),
( 832.00, 18.70, 12),
( 1692.00, 87.34, 22),
( 3164.00, 276.54, 24),
( 3998.00, 629.82, 32),
( 9887.00, 896.70, 35),
( 'inf', 2957.85, 37),
],
'bi-weekly': [
( 146.00, 0.00, 0),
( 519.00, 0.00, 10),
( 1664.00, 37.30, 12),
( 3385.00, 174.70, 22),
( 6328.00, 553.32, 24),
( 7996.00, 1259.64, 32),
( 19773.00, 1793.40, 35),
( 'inf', 5915.35, 37),
],
'semi-monthly': [
( 158.00, 0.00, 0),
( 563.00, 0.00, 10),
( 1803.00, 40.50, 12),
( 3667.00, 189.30, 22),
( 6855.00, 599.38, 24),
( 8663.00, 1364.50, 32),
( 21421.00, 1943.06, 35),
( 'inf', 6408.36, 37),
],
'monthly': [
( 317.00, 0.00, 0),
( 1125.00, 0.00, 10),
( 3606.00, 80.80, 12),
( 7333.00, 378.52, 22),
( 13710.00, 1198.46, 24),
( 17325.00, 2728.94, 32),
( 42842.00, 3885.74, 35),
( 'inf', 12816.69, 37),
],
'quarterly': [
( 950.00, 0.00, 0),
( 3375.00, 0.00, 10),
( 10819.00, 242.50, 12),
( 22000.00, 1135.78, 22),
( 41131.00, 3595.60, 24),
( 51975.00, 8187.04, 32),
( 128525.00, 11657.12, 35),
( 'inf', 38449.62, 37),
],
'semi-annually': [
( 1900.00, 0.00, 0),
( 6750.00, 0.00, 10),
( 21638.00, 485.00, 12),
( 44000.00, 2271.56, 22),
( 82263.00, 7191.20, 24),
( 103950.00, 16374.32, 32),
( 257050.00, 23314.16, 35),
( 'inf', 76899.16, 37),
],
'annually': [
( 3800.00, 0.00, 0),
( 13500.00, 0.00, 10),
( 43275.00, 970.00, 12),
( 88000.00, 4543.00, 22),
( 164525.00, 14382.50, 24),
( 207900.00, 32748.50, 32),
( 514100.00, 46628.50, 35),
( 'inf', 153798.50, 37),
],
}</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_941_fit_table_single_2020" model="hr.payroll.rate">
<field name="name">Federal 941 FIT Table Single</field>
<field name="code">fed_941_fit_table_single</field>
@@ -270,165 +83,37 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_941_fit_table_single_2021" model="hr.payroll.rate">
<field name="name">Federal 941 FIT Table Single</field>
<field name="code">fed_941_fit_table_single</field>
<!-- Major changes in 2020 -->
<!-- Wage Threshold, Base Withholding Amount, Marginal Rate Over Threshold -->
<field name="parameter_value">{
'standard': [
( 0.00, 0.00, 0.00),
( 3950.00, 0.00, 0.10),
( 13900.00, 995.00, 0.12),
( 44475.00, 4664.00, 0.22),
( 90325.00, 14751.00, 0.24),
( 168875.00, 33603.00, 0.32),
( 213375.00, 47843.00, 0.35),
( 527550.00, 157804.25, 0.37),
],
'higher': [
( 0.00, 0.00, 0.00),
( 6275.00, 0.00, 0.10),
( 11250.00, 497.50, 0.12),
( 26538.00, 2332.00, 0.22),
( 49463.00, 7375.50, 0.24),
( 88738.00, 16801.50, 0.32),
( 110988.00, 23921.50, 0.35),
( 268075.00, 78902.13, 0.37),
],
}</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
<!-- Married -->
<record id="rule_parameter_941_fit_table_married_2018" model="hr.payroll.rate">
<field name="name">Federal 941 FIT Table Married</field>
<field name="code">fed_941_fit_table_married</field>
<!-- Bogus 2018 -->
<!-- But-not-over, $, % -->
<field name="parameter_value">{
'weekly': [
( 227.00, 0.00, 0),
( 600.00, 0.00, 10),
( 1745.00, 37.30, 12),
( 3465.00, 174.70, 22),
( 6409.00, 553.10, 24),
( 8077.00, 1259.66, 32),
( 12003.00, 1793.42, 35),
( 'inf', 3167.52, 37),
],
'bi-weekly': [
( 454.00, 0.00, 0),
( 1200.00, 0.00, 10),
( 3490.00, 74.60, 12),
( 6931.00, 349.40, 22),
( 12817.00, 1106.42, 24),
( 16154.00, 2519.06, 32),
( 24006.00, 3586.90, 35),
( 'inf', 6335.10, 37),
],
'semi-monthly': [
( 492.00, 0.00, 0),
( 1300.00, 0.00, 10),
( 3781.00, 80.80, 12),
( 7508.00, 378.52, 22),
( 13885.00, 1198.46, 24),
( 17500.00, 2728.94, 32),
( 26006.00, 3885.74, 35),
( 'inf', 6862.84, 37),
],
'monthly': [
( 983.00, 0.00, 0),
( 2600.00, 0.00, 10),
( 7563.00, 161.70, 12),
( 15017.00, 757.26, 22),
( 27771.00, 2397.14, 24),
( 35000.00, 5458.10, 32),
( 52013.00, 7771.38, 35),
( 'inf', 13725.93, 37),
],
'quarterly': [
( 2950.00, 0.00, 0),
( 7800.00, 0.00, 10),
( 22688.00, 485.00, 12),
( 45050.00, 2271.56, 22),
( 83313.00, 7191.20, 24),
( 105000.00, 16374.32, 32),
( 156038.00, 23314.16, 35),
( 'inf', 41177.46, 37),
],
'semi-annually': [
( 5900.00, 0.00, 0),
( 15600.00, 0.00, 10),
( 45375.00, 970.00, 12),
( 90100.00, 4543.00, 22),
( 166625.00, 14382.50, 24),
( 210000.00, 32748.50, 32),
( 312075.00, 46628.50, 35),
( 'inf', 82354.75, 37),
],
'annually': [
( 11800.00, 0.00, 0),
( 31200.00, 0.00, 10),
( 90750.00, 1940.00, 12),
( 180200.00, 9086.00, 22),
( 333250.00, 28765.00, 24),
( 420000.00, 65497.00, 32),
( 624150.00, 93257.00, 35),
( 'inf', 164709.50, 37),
],
}</field>
<field name="date_from" eval="datetime(2018, 1, 1).date()"/>
</record>
<record id="rule_parameter_941_fit_table_married_2019" model="hr.payroll.rate">
<field name="name">Federal 941 FIT Table Married</field>
<field name="code">fed_941_fit_table_married</field>
<!-- But-not-over, $, % -->
<field name="parameter_value">{
'weekly': [
( 227.00, 0.00, 0),
( 600.00, 0.00, 10),
( 1745.00, 37.30, 12),
( 3465.00, 174.70, 22),
( 6409.00, 553.10, 24),
( 8077.00, 1259.66, 32),
( 12003.00, 1793.42, 35),
( 'inf', 3167.52, 37),
],
'bi-weekly': [
( 454.00, 0.00, 0),
( 1200.00, 0.00, 10),
( 3490.00, 74.60, 12),
( 6931.00, 349.40, 22),
( 12817.00, 1106.42, 24),
( 16154.00, 2519.06, 32),
( 24006.00, 3586.90, 35),
( 'inf', 6335.10, 37),
],
'semi-monthly': [
( 492.00, 0.00, 0),
( 1300.00, 0.00, 10),
( 3781.00, 80.80, 12),
( 7508.00, 378.52, 22),
( 13885.00, 1198.46, 24),
( 17500.00, 2728.94, 32),
( 26006.00, 3885.74, 35),
( 'inf', 6862.84, 37),
],
'monthly': [
( 983.00, 0.00, 0),
( 2600.00, 0.00, 10),
( 7563.00, 161.70, 12),
( 15017.00, 757.26, 22),
( 27771.00, 2397.14, 24),
( 35000.00, 5458.10, 32),
( 52013.00, 7771.38, 35),
( 'inf', 13725.93, 37),
],
'quarterly': [
( 2950.00, 0.00, 0),
( 7800.00, 0.00, 10),
( 22688.00, 485.00, 12),
( 45050.00, 2271.56, 22),
( 83313.00, 7191.20, 24),
( 105000.00, 16374.32, 32),
( 156038.00, 23314.16, 35),
( 'inf', 41177.46, 37),
],
'semi-annually': [
( 5900.00, 0.00, 0),
( 15600.00, 0.00, 10),
( 45375.00, 970.00, 12),
( 90100.00, 4543.00, 22),
( 166625.00, 14382.50, 24),
( 210000.00, 32748.50, 32),
( 312075.00, 46628.50, 35),
( 'inf', 82354.75, 37),
],
'annually': [
( 11800.00, 0.00, 0),
( 31200.00, 0.00, 10),
( 90750.00, 1940.00, 12),
( 180200.00, 9086.00, 22),
( 333250.00, 28765.00, 24),
( 420000.00, 65497.00, 32),
( 624150.00, 93257.00, 35),
( 'inf', 164709.50, 37),
],
}</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_941_fit_table_married_2020" model="hr.payroll.rate">
<field name="name">Federal 941 FIT Table Married</field>
<field name="code">fed_941_fit_table_married</field>
@@ -458,6 +143,35 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_941_fit_table_married_2021" model="hr.payroll.rate">
<field name="name">Federal 941 FIT Table Married</field>
<field name="code">fed_941_fit_table_married</field>
<!-- Major changes in 2020 -->
<!-- Wage Threshold, Base Withholding Amount, Marginal Rate Over Threshold -->
<field name="parameter_value">{
'standard': [
( 0.00, 0.00, 0.00),
( 12200.00, 0.00, 0.10),
( 32100.00, 1990.00, 0.12),
( 93250.00, 9328.00, 0.22),
( 184950.00, 29502.00, 0.24),
( 342050.00, 67206.00, 0.32),
( 431050.00, 95686.00, 0.35),
( 640500.00, 168993.50, 0.37),
],
'higher': [
( 0.00, 0.00, 0.00),
( 12550.00, 0.00, 0.10),
( 22500.00, 995.00, 0.12),
( 53075.00, 4664.00, 0.22),
( 98925.00, 14751.00, 0.24),
( 177475.00, 33603.00, 0.32),
( 221975.00, 47843.00, 0.35),
( 326700.00, 84496.75, 0.37),
],
}</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
<record id="rule_parameter_941_fit_table_hh_2020" model="hr.payroll.rate">
<field name="name">Federal 941 FIT Table Head of Household</field>
@@ -488,5 +202,34 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_941_fit_table_hh_2021" model="hr.payroll.rate">
<field name="name">Federal 941 FIT Table Head of Household</field>
<field name="code">fed_941_fit_table_hh</field>
<!-- Major changes in 2020 -->
<!-- Wage Threshold, Base Withholding Amount, Marginal Rate Over Threshold -->
<field name="parameter_value">{
'standard': [
( 0.00, 0.00, 0.00),
( 10200.00, 0.00, 0.10),
( 24400.00, 1420.00, 0.12),
( 64400.00, 6220.00, 0.22),
( 96550.00, 13293.00, 0.24),
( 175100.00, 32145.00, 0.32),
( 219600.00, 46385.00, 0.35),
( 533800.00, 156355.50, 0.37),
],
'higher': [
( 0.00, 0.00, 0.00),
( 9400.00, 0.00, 0.10),
( 16500.00, 710.00, 0.12),
( 36500.00, 3110.00, 0.22),
( 52575.00, 6646.50, 0.24),
( 91950.00, 16072.50, 0.32),
( 114100.00, 23192.50, 0.35),
( 271200.00, 78177.50, 0.37),
],
}</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</odoo>

View File

@@ -2,49 +2,49 @@
<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>
<record id="rule_parameter_us_ak_suta_wage_base_2021" 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">43600.00</field>
<field name="date_from" eval="datetime(2021, 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>
<record id="rule_parameter_us_ak_suta_rate_2021" 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">2.570</field>
<field name="date_from" eval="datetime(2021, 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>
<record id="rule_parameter_us_ak_suta_ee_rate_2021" 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(2021, 1, 1).date()"/>
</record>
</data>
<!-- Partners and Contribution Registers -->

View File

@@ -2,12 +2,6 @@
<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>
@@ -18,12 +12,6 @@
<!-- 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>
@@ -33,23 +21,6 @@
</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>
@@ -70,18 +41,6 @@
</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">
@@ -99,20 +58,6 @@
<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>
@@ -128,20 +73,6 @@
</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">

View File

@@ -2,56 +2,37 @@
<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>
<record id="rule_parameter_us_ar_suta_wage_base_2021" 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(2021, 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>
<record id="rule_parameter_us_ar_suta_rate_2021" 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(2021, 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">
@@ -73,15 +54,28 @@
]</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ar_sit_tax_rate_2021" 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">[
( 4699, 0.0, 0.00),
( 9199, 2.0, 93.98),
( 13899, 3.0, 185.97),
( 22899, 3.4, 241.57),
( 38499, 5.0, 427.71),
( 82000, 5.9, 774.20),
( 83000, 5.9, 681.70),
( 84000, 5.9, 581.70),
( 85300, 5.9, 481.70),
( 86400, 5.9, 381.70),
( 87500, 5.9, 281.70),
( 'inf', 5.9, 241.70),
]</field>
<field name="date_from" eval="datetime(2021, 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>

View File

@@ -2,12 +2,6 @@
<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>
@@ -18,12 +12,6 @@
<!-- 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>
@@ -32,6 +20,8 @@
</record>
</data>
<!-- todo: income tax https://azdor.gov/forms/individual/form-140-x-y-tables-->
<!-- 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>

View File

@@ -2,12 +2,6 @@
<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>
@@ -18,12 +12,6 @@
<!-- 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>
@@ -34,12 +22,6 @@
<!-- 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>
@@ -50,286 +32,21 @@
<!-- 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>
<record id="rule_parameter_us_ca_suta_sdi_rate_2021" 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.2</field>
<field name="date_from" eval="datetime(2021, 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>
@@ -595,23 +312,274 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ca_sit_tax_rate_2021" 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': (
( 344, 0.0110, 0.00),
( 814, 0.0220, 3.78),
( 1050, 0.0440, 14.12),
( 1299, 0.0660, 24.50),
( 1535, 0.0880, 40.93),
( 7833, 0.1023, 61.70),
( 9400, 0.1133, 705.99),
(15667, 0.1243, 883.53),
(19231, 0.1353, 1662.52),
('inf', 0.1463, 2144.73),
),
'bi-weekly': (
( 688, 0.0110, 0.00),
( 1628, 0.0220, 7.57),
( 2100, 0.0440, 28.25),
( 2598, 0.0660, 49.02),
( 3070, 0.0880, 81.89),
(15666, 0.1023, 123.43),
(18800, 0.1133, 1412.00),
(31334, 0.1243, 1767.08),
(38462, 0.1353, 3325.06),
('inf', 0.1463, 4289.48),
),
'semi-monthly': (
( 745, 0.0110, 0.00),
( 1765, 0.0220, 8.20),
( 2275, 0.0440, 30.64),
( 2815, 0.0660, 53.08),
( 3326, 0.0880, 88.72),
(16972, 0.1023, 133.69),
(20367, 0.1133, 1529.68),
(33944, 0.1243, 1914.33),
(41667, 0.1353, 3601.95),
('inf', 0.1463, 4646.87),
),
'monthly': (
( 1490, 0.0110, 0.00),
( 3530, 0.0220, 16.39),
( 4550, 0.0440, 61.27),
( 5630, 0.0660, 106.15),
( 6652, 0.0880, 177.43),
(33944, 0.1023, 267.37),
(40734, 0.1133, 3059.34),
(67888, 0.1243, 3828.65),
(83334, 0.1353, 7203.89),
('inf', 0.1463, 9293.73),
),
'quarterly': (
( 4469, 0.0110, 0.00),
( 10588, 0.0220, 49.13),
( 13649, 0.0440, 183.78),
( 16892, 0.0660, 318.46),
( 19953, 0.0880, 532.50),
(101832, 0.1023, 801.87),
(122199, 0.1133, 9178.09),
(203665, 0.1243, 11485.67),
(250000, 0.1353, 21611.89),
( 'inf', 0.1463, 27881.02),
),
'semi-annual': (
( 8938, 0.0110, 0.00),
( 21176, 0.0220, 98.32),
( 27298, 0.0440, 367.56),
( 33784, 0.0660, 636.93),
( 39906, 0.0880, 1065.01),
(203664, 0.1023, 1603.75),
(244398, 0.1133, 18356.19),
(407330, 0.1243, 22971.35),
(500000, 0.1353, 43223.80),
( 'inf', 0.1463, 55762.05),
),
'annually': (
( 17876, 0.0110, 0.00),
( 42353, 0.0220, 196.64),
( 54597, 0.0440, 735.13),
( 67569, 0.0660, 1273.87),
( 79812, 0.0880, 2130.02),
( 407329, 0.1023, 3207.40),
( 488796, 0.1133, 36712.39),
( 814658, 0.1243, 45942.60),
(1000000, 0.1353, 86447.25),
( 'inf', 0.1463, 111524.02),
),
},
'married': {
'weekly': (
( 344, 0.0110, 0.00),
( 814, 0.0220, 3.78),
( 1286, 0.0440, 14.12),
( 1784, 0.0660, 34.89),
( 2256, 0.0880, 67.76),
(11520, 0.1023, 109.30),
(13824, 0.1133, 1057.01),
(19231, 0.1243, 1318.05),
(23039, 0.1353, 1990.14),
('inf', 0.1463, 2505.36),
),
'bi-weekly': (
( 688, 0.0110, 0.00),
( 1628, 0.0220, 7.57),
( 2572, 0.0440, 28.25),
( 3568, 0.0660, 69.79),
( 4512, 0.0880, 135.53),
(23040, 0.1023, 218.60),
(27648, 0.1133, 2114.01),
(38462, 0.1243, 2636.10),
(46078, 0.1353, 2398.28),
('inf', 0.1463, 5010.72),
),
'semi-monthly': (
( 744, 0.0110, 0.00),
( 1764, 0.0220, 8.18),
( 2786, 0.0440, 30.62),
( 3866, 0.0660, 75.59),
( 4886, 0.0880, 146.87),
(24960, 0.1023, 236.63),
(29950, 0.1133, 2290.20),
(41667, 0.1243, 2855.57),
(49918, 0.1353, 4311.99),
('inf', 0.1463, 5428.35),
),
'monthly': (
( 1488, 0.0110, 0.00),
( 3528, 0.0220, 16.37),
( 5572, 0.0440, 61.25),
( 7732, 0.0660, 151.19),
( 9772, 0.0880, 293.75),
(49920, 0.1023, 473.27),
(59900, 0.1133, 4580.41),
(83334, 0.1243, 5711.14),
(99836, 0.1353, 8623.99),
('inf', 0.1463, 10856.71),
),
'quarterly': (
( 4466, 0.0110, 0.00),
( 10588, 0.0220, 49.13),
( 16710, 0.0440, 183.81),
( 23198, 0.0660, 453.18),
( 29318, 0.0880, 881.39),
(149754, 0.1023, 1419.95),
(179704, 0.1133, 13740.55),
(250000, 0.1243, 17133.89),
(299506, 0.1353, 25871.68),
( 'inf', 0.1463, 32569.84),
),
'semi-annual': (
( 8932, 0.0110, 0.00),
( 21176, 0.0220, 98.25),
( 33420, 0.0440, 367.62),
( 46396, 0.0660, 906.36),
( 58636, 0.0880, 1762.78),
(299508, 0.1023, 2839.90),
(359408, 0.1133, 27481.11),
(500000, 0.1243, 34267.78),
(599012, 0.1353, 51743.37),
( 'inf', 0.1463, 65139.69),
),
'annually': (
( 17864, 0.0110, 0.00),
( 42350, 0.0220, 196.50),
( 66842, 0.0440, 735.19),
( 92788, 0.0660, 1812.84),
( 117268, 0.0880, 3525.28),
( 599016, 0.1023, 5679.52),
( 718814, 0.1133, 54962.34),
(1000000, 0.1243, 68535.45),
(1198024, 0.1353, 103486.87),
( 'inf', 0.1463, 130279.52),
),
},
'single': {
'weekly': (
( 172, 0.0110, 0.00),
( 407, 0.0220, 1.89),
( 643, 0.0440, 7.06),
( 892, 0.0660, 17.44),
( 1128, 0.0880, 33.87),
( 5760, 0.1023, 54.64),
( 6912, 0.1133, 528.49),
(11519, 0.1243, 659.01),
(19231, 0.1353, 1231.66),
('inf', 0.1463, 2275.09),
),
'bi-weekly': (
( 344, 0.0110, 0.00),
( 814, 0.0220, 3.78),
( 1286, 0.0440, 14.12),
( 1784, 0.0660, 34.89),
( 2256, 0.0880, 67.76),
(11520, 0.1023, 109.30),
(13824, 0.1133, 1057.01),
(23038, 0.1243, 1318.05),
(38462, 0.1353, 2463.35),
('inf', 0.1463, 4550.22),
),
'semi-monthly': (
( 372, 0.0110, 0.00),
( 882, 0.0220, 4.09),
( 1393, 0.0440, 15.31),
( 1933, 0.0660, 37.79),
( 2443, 0.0880, 73.43),
(12480, 0.1023, 118.31),
(14975, 0.1133, 1145.10),
(24959, 0.1243, 1427.78),
(41667, 0.1353, 2668.79),
('inf', 0.1463, 4929.38),
),
'monthly': (
( 744, 0.0110, 0.00),
( 1764, 0.0220, 8.18),
( 2786, 0.0440, 30.62),
( 3866, 0.0660, 75.59),
( 4886, 0.0880, 146.87),
(24960, 0.1023, 236.63),
(29950, 0.1133, 2290.20),
(49918, 0.1243, 2855.57),
(83334, 0.1353, 5337.59),
('inf', 0.1463, 9858.77),
),
'quarterly': (
( 2233, 0.0110, 0.00),
( 5294, 0.0220, 24.56),
( 8355, 0.0440, 91.90),
( 11599, 0.0660, 226.58),
( 14659, 0.0880, 440.68),
( 74877, 0.1023, 709.96),
( 89852, 0.1133, 6870.26),
(149753, 0.1243, 8566.93),
(250000, 0.1353, 16012.62),
( 'inf', 0.1463, 29576.04),
),
'semi-annual': (
( 4466, 0.0110, 0.00),
( 10588, 0.0220, 49.13),
( 16710, 0.0440, 183.81),
( 23198, 0.0660, 453.18),
( 29318, 0.0880, 881.39),
(149754, 0.1023, 1419.95),
(179704, 0.1133, 13740.55),
(299506, 0.1243, 17133.89),
(500000, 0.1353, 32025.28),
( 'inf', 0.1463, 59152.12),
),
'annually': (
( 8932, 0.0110, 0.00),
( 21175, 0.0220, 98.25),
( 33421, 0.0440, 367.60),
( 46394, 0.0660, 906.42),
( 58634, 0.0880, 1762.64),
( 299508, 0.1023, 2839.76),
( 359407, 0.1133, 27481.17),
( 599012, 0.1243, 34267.73),
(1000000, 0.1353, 64050.63),
( 'inf', 0.1463, 118304.31),
),
},
}</field>
<field name="date_from" eval="datetime(2021, 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">
@@ -628,23 +596,23 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ca_sit_income_exemption_rate_2021" 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': ( 294, 294, 587, 587),
'bi-weekly': ( 587, 587, 1174, 1174),
'semi-monthly': ( 636, 636, 1272, 1272),
'monthly': ( 1272, 1272, 2545, 2545),
'quarterly': ( 3817, 3817, 7634, 7634),
'semi-annual': ( 7634, 7634, 15267, 15267),
'annually': (15267, 15267, 30534, 30534),
}</field>
<field name="date_from" eval="datetime(2021, 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">
@@ -664,20 +632,6 @@
</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">
@@ -694,23 +648,25 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<!-- https://edd.ca.gov/pdf_pub_ctr/21methb.pdf -->
<!-- Table 3. Standard Deduction table -->
<record id="rule_parameter_us_ca_sit_standard_deduction_rate_2021" 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': ( 88, 88, 177, 177),
'bi-weekly': ( 177, 177, 354, 354),
'semi-monthly': ( 192, 192, 383, 383),
'monthly': ( 383, 383, 767, 767),
'quarterly': (1150, 1150, 2301, 2301),
'semi-annual': (2301, 2301, 4601, 4601),
'annually': (4601, 4601, 9202, 9202),
}</field>
<field name="date_from" eval="datetime(2021, 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">
@@ -727,6 +683,22 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<!-- https://edd.ca.gov/pdf_pub_ctr/21methb.pdf -->
<!-- Table 4. Exemption Allowance table -->
<record id="rule_parameter_us_ca_sit_exemption_allowance_rate_2021" 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.62, 5.25, 7.87, 10.49, 13.12, 15.74, 18.36, 20.98, 23.61, 26.23),
'bi-weekly': ( 5.25, 10.49, 15.74, 20.98, 26.23, 31.48, 36.72, 41.97, 47.22, 52.46),
'semi-monthly': ( 5.68, 11.37, 17.05, 22.73, 28.42, 34.10, 39.78, 45.47, 51.15, 56.83),
'monthly': ( 11.37, 22.73, 34.10, 45.47, 56.83, 68.20, 79.57, 90.93, 102.30, 113.67),
'quarterly': ( 34.10, 68.20, 102.30, 136.40, 170.50, 204.60, 238.70, 272.80, 306.90, 341.00),
'semi-annual': ( 68.20, 136.40, 204.60, 272.80, 341.00, 409.20, 477.40, 545.60, 613.80, 682.00),
'annually': (136.40, 272.80, 409.20, 545.60, 682.00, 818.40, 954.80, 1091.20, 1227.60, 1364.00),
}</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Partners and Contribution Registers -->

View File

@@ -2,12 +2,6 @@
<odoo>
<!-- Wage Base -->
<data noupdate="1">
<record id="rule_parameter_us_ct_suta_wage_base_2019" model="hr.payroll.rate">
<field name="name">US CT Connecticut SUTA Wage Base</field>
<field name="code">us_ct_suta_wage_base</field>
<field name="parameter_value">15000.0</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ct_suta_wage_base_2020" model="hr.payroll.rate">
<field name="name">US CT Connecticut SUTA Wage Base</field>
<field name="code">us_ct_suta_wage_base</field>
@@ -18,12 +12,6 @@
<!-- Rate -->
<data noupdate="1">
<record id="rule_parameter_us_ct_suta_rate_2019" model="hr.payroll.rate">
<field name="name">US CT Connecticut SUTA Rate</field>
<field name="code">us_ct_suta_rate</field>
<field name="parameter_value">3.4</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ct_suta_rate_2020" model="hr.payroll.rate">
<field name="name">US CT Connecticut SUTA Rate</field>
<field name="code">us_ct_suta_rate</field>
@@ -33,58 +21,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_ct_sit_initial_tax_rate_2019" model="hr.payroll.rate">
<field name="name">US CT Connecticut SIT Initial Tax Rate</field>
<field name="code">us_ct_sit_initial_tax_rate</field>
<field name="parameter_value">{
'a': [
( 10000, 0, 3.00),
( 50000, 300, 5.00),
(100000, 2300, 5.50),
(200000, 5050, 6.00),
(250000, 11050, 6.50),
(500000, 14300, 6.90),
( 'inf', 31550, 6.99),
],
'b': [
( 16000, 0, 3.00),
( 80000, 480, 5.00),
(160000, 3680, 5.50),
(320000, 8080, 6.00),
(400000, 17680, 6.50),
(800000, 22880, 6.90),
( 'inf', 50480, 6.99),
],
'c': [
( 20000, 0, 3.00),
( 100000, 600, 5.00),
( 200000, 4600, 5.50),
( 400000, 10100, 6.00),
( 500000, 22100, 6.50),
(1000000, 28600, 6.90),
( 'inf', 63100, 6.99),
],
'd': [
( 10000, 0, 3.00),
( 50000, 300, 5.00),
(100000, 2300, 5.50),
(200000, 5050, 6.00),
(250000, 11050, 6.50),
(500000, 14300, 6.90),
( 'inf', 31550, 6.99),
],
'f': [
( 10000, 0, 3.00),
( 50000, 300, 5.00),
(100000, 2300, 5.50),
(200000, 5050, 6.00),
(250000, 11050, 6.50),
(500000, 14300, 6.90),
( 'inf', 31550, 6.99),
],
}</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<!-- https://portal.ct.gov/-/media/DRS/Forms/2020/WTH/TPG-211_0320.pdf -->
<!-- Table B Initial Tax Calculation -->
<record id="rule_parameter_us_ct_sit_initial_tax_rate_2020" model="hr.payroll.rate">
@@ -142,79 +78,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_ct_sit_tax_rate_2019" model="hr.payroll.rate">
<field name="name">US CT Connecticut Tax Rate</field>
<field name="code">us_ct_sit_tax_rate</field>
<field name="parameter_value">{
'a': [
(50250, 0),
(52750, 20),
(55250, 40),
(57750, 60),
(60250, 80),
(62750, 100),
(65250, 120),
(67750, 140),
(70250, 160),
(72750, 180),
('inf', 200),
],
'b': [
( 78500, 0),
( 82500, 32),
( 86500, 64),
( 90500, 96),
( 94500, 128),
( 98500, 160),
(102500, 192),
(106500, 224),
(110500, 256),
(114500, 288),
( 'inf', 320),
],
'c': [
(100500, 0),
(105500, 40),
(110500, 80),
(115500, 120),
(120500, 160),
(125500, 200),
(130500, 240),
(135500, 280),
(140500, 320),
(145500, 360),
( 'inf', 400),
],
'd': [
(50250, 0),
(52750, 20),
(55250, 40),
(57750, 60),
(60250, 80),
(62750, 100),
(65250, 120),
(67750, 140),
(70250, 160),
(72750, 180),
('inf', 200),
],
'f': [
( 56500, 0),
( 61500, 20),
( 66500, 40),
( 71500, 60),
( 76500, 80),
( 81500, 100),
( 86500, 120),
( 91500, 140),
( 96500, 160),
(101500, 180),
( 'inf', 200),
],
}</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<!-- https://portal.ct.gov/-/media/DRS/Forms/2020/WTH/TPG-211_0320.pdf -->
<!-- Table C 3% -->
<record id="rule_parameter_us_ct_sit_tax_rate_2020" model="hr.payroll.rate">
@@ -293,133 +156,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_ct_sit_decimal_rate_2019" model="hr.payroll.rate">
<field name="name">US CT Connecticut Decimal Rate</field>
<field name="code">us_ct_sit_decimal_rate</field>
<field name="parameter_value">{
'a': [
(15000, 0.75),
(15500, 0.70),
(16000, 0.65),
(16500, 0.60),
(17000, 0.55),
(17500, 0.50),
(18000, 0.45),
(18500, 0.40),
(20000, 0.35),
(20500, 0.30),
(21000, 0.25),
(21500, 0.20),
(25000, 0.15),
(25500, 0.14),
(26000, 0.13),
(26500, 0.12),
(27000, 0.11),
(48000, 0.10),
(48500, 0.09),
(49000, 0.08),
(49500, 0.08),
(50000, 0.06),
(50500, 0.05),
(51000, 0.03),
(51500, 0.03),
(52000, 0.02),
(52500, 0.01),
('inf', 0.00),
],
'b': [
(24000, 0.75),
(24500, 0.70),
(25000, 0.65),
(25500, 0.60),
(26000, 0.55),
(26500, 0.50),
(27000, 0.45),
(27500, 0.40),
(34000, 0.35),
(34500, 0.30),
(35000, 0.25),
(35500, 0.20),
(44000, 0.15),
(44500, 0.14),
(45000, 0.13),
(45500, 0.12),
(46000, 0.11),
(74000, 0.10),
(74500, 0.09),
(75000, 0.08),
(75500, 0.08),
(76000, 0.06),
(76500, 0.05),
(77000, 0.03),
(77500, 0.03),
(78000, 0.02),
(78500, 0.01),
('inf', 0.00),
],
'c': [
(30000, 0.75),
(30500, 0.70),
(31000, 0.65),
(31500, 0.60),
(32000, 0.55),
(32500, 0.50),
(33000, 0.45),
(33500, 0.40),
(40000, 0.35),
(40500, 0.30),
(41000, 0.25),
(41500, 0.20),
(50000, 0.15),
(50500, 0.14),
(51000, 0.13),
(51500, 0.12),
(52000, 0.11),
(96000, 0.10),
(96500, 0.09),
(97000, 0.08),
(97500, 0.08),
(98000, 0.06),
(98500, 0.05),
(99000, 0.03),
(99500, 0.03),
(100000, 0.02),
(100500, 0.01),
('inf', 0.00),
],
'f': [
(18800, 0.75),
(19300, 0.70),
(19800, 0.65),
(20300, 0.60),
(20800, 0.55),
(21300, 0.50),
(21800, 0.45),
(22300, 0.40),
(25000, 0.35),
(25500, 0.30),
(26000, 0.25),
(26500, 0.20),
(31300, 0.15),
(31800, 0.14),
(32300, 0.13),
(32800, 0.12),
(33300, 0.11),
(60000, 0.10),
(60500, 0.09),
(61000, 0.08),
(61500, 0.08),
(62000, 0.06),
(62500, 0.05),
(63000, 0.03),
(63500, 0.03),
(64000, 0.02),
(64500, 0.01),
('inf', 0.00),
],
}</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<!-- https://portal.ct.gov/-/media/DRS/Forms/2020/WTH/TPG-211_0320.pdf -->
<!-- Table E Personal Tax Credits -->
<record id="rule_parameter_us_ct_sit_decimal_rate_2020" model="hr.payroll.rate">
@@ -991,95 +727,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_ct_sit_personal_exemption_rate_2019" model="hr.payroll.rate">
<field name="name">US CT Connecticut Personal Exemption Rate</field>
<field name="code">us_ct_sit_personal_exemption_rate</field>
<field name="parameter_value">{
'a' : [
(24000, 12000),
(25000, 11000),
(26000, 10000),
(27000, 9000),
(28000, 8000),
(29000, 7000),
(30000, 6000),
(31000, 5000),
(32000, 4000),
(33000, 3000),
(34000, 2000),
(35000, 1000),
('inf', 0),
],
'b' : [
(38000, 19000),
(39000, 18000),
(40000, 17000),
(41000, 16000),
(42000, 15000),
(43000, 14000),
(44000, 13000),
(45000, 12000),
(46000, 11000),
(47000, 10000),
(48000, 9000),
(49000, 8000),
(50000, 7000),
(51000, 6000),
(52000, 5000),
(53000, 4000),
(54000, 3000),
(55000, 2000),
(56000, 1000),
('inf', 0),
],
'c': [
(48000, 24000),
(49000, 23000),
(50000, 22000),
(51000, 21000),
(52000, 20000),
(53000, 19000),
(54000, 18000),
(55000, 17000),
(56000, 16000),
(57000, 15000),
(58000, 14000),
(59000, 13000),
(60000, 12000),
(61000, 11000),
(62000, 10000),
(63000, 9000),
(64000, 8000),
(65000, 7000),
(66000, 6000),
(67000, 5000),
(68000, 4000),
(69000, 3000),
(70000, 2000),
(71000, 1000),
('inf', 0),
],
'f' : [
(30000, 15000),
(31000, 14000),
(22000, 13000),
(33000, 12000),
(34000, 11000),
(35000, 10000),
(36000, 9000),
(37000, 8000),
(38000, 7000),
(39000, 6000),
(40000, 5000),
(41000, 4000),
(42000, 3000),
(43000, 2000),
(44000, 1000),
('inf', 0),
],
}</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<!-- https://portal.ct.gov/-/media/DRS/Forms/2020/WTH/TPG-211_0320.pdf -->
<!-- Table A Personal Exemptions -->
<record id="rule_parameter_us_ct_sit_personal_exemption_rate_2020" model="hr.payroll.rate">

View File

@@ -2,12 +2,6 @@
<odoo>
<!-- Wage Base -->
<data noupdate="1">
<record id="rule_parameter_us_fl_suta_wage_base_2019" model="hr.payroll.rate">
<field name="name">US FL Florida SUTA Wage Base</field>
<field name="code">us_fl_suta_wage_base</field>
<field name="parameter_value">7000.00</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_fl_suta_wage_base_2020" model="hr.payroll.rate">
<field name="name">US FL Florida SUTA Wage Base</field>
<field name="code">us_fl_suta_wage_base</field>
@@ -18,18 +12,18 @@
<!-- Rate -->
<data noupdate="1">
<record id="rule_parameter_us_fl_suta_rate_2019" model="hr.payroll.rate">
<field name="name">US FL Florida SUTA Rate</field>
<field name="code">us_fl_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_fl_suta_rate_2020" model="hr.payroll.rate">
<field name="name">US FL Florida SUTA Rate</field>
<field name="code">us_fl_suta_rate</field>
<field name="parameter_value">2.7</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_fl_suta_rate_2021" model="hr.payroll.rate">
<field name="name">US FL Florida SUTA Rate</field>
<field name="code">us_fl_suta_rate</field>
<field name="parameter_value">2.9</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Partners and Contribution Registers -->

View File

@@ -2,12 +2,6 @@
<odoo>
<!-- Wage Base -->
<data noupdate="1">
<record id="rule_parameter_us_ga_suta_wage_base_2019" model="hr.payroll.rate">
<field name="name">US GA Georgia SUTA Wage Base</field>
<field name="code">us_ga_suta_wage_base</field>
<field name="parameter_value">9500.00</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ga_suta_wage_base_2020" model="hr.payroll.rate">
<field name="name">US GA Georgia SUTA Wage Base</field>
<field name="code">us_ga_suta_wage_base</field>
@@ -18,12 +12,6 @@
<!-- Rate -->
<data noupdate="1">
<record id="rule_parameter_us_ga_suta_rate_2019" model="hr.payroll.rate">
<field name="name">US GA Georgia SUTA Rate</field>
<field name="code">us_ga_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_ga_suta_rate_2020" model="hr.payroll.rate">
<field name="name">US GA Georgia SUTA Rate</field>
<field name="code">us_ga_suta_rate</field>
@@ -33,303 +21,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_ga_sit_rate_2019" 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(2019, 1, 1).date()"/>
</record>
<!-- https://dor.georgia.gov/employers-tax-guide File 2020 -->
<!-- Table F, G ,H-->
<record id="rule_parameter_us_ga_sit_rate_2020" model="hr.payroll.rate">
@@ -632,58 +323,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_ga_sit_personal_allowance_2019" 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(2019, 1, 1).date()"/>
</record>
<!-- https://dor.georgia.gov/employers-tax-guide File 2020 -->
<!-- Table E Column 4. 5. 6.-->
<record id="rule_parameter_us_ga_sit_personal_allowance_2020" model="hr.payroll.rate">
@@ -741,20 +380,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_ga_sit_dependent_allowance_rate_2019" 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(2019, 1, 1).date()"/>
</record>
<!-- https://dor.georgia.gov/employers-tax-guide File 2020 -->
<!-- Table E Column 7.-->
<record id="rule_parameter_us_ga_sit_dependent_allowance_rate_2020" model="hr.payroll.rate">
@@ -774,58 +399,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_ga_sit_deduction_2019" 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(2019, 1, 1).date()"/>
</record>
<!-- https://dor.georgia.gov/employers-tax-guide File 2020 -->
<!-- Table E Column 1. 2. 3.-->
<record id="rule_parameter_us_ga_sit_deduction_2020" model="hr.payroll.rate">

View File

@@ -2,34 +2,34 @@
<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>
<record id="rule_parameter_us_hi_suta_wage_base_2021" 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">47400.0</field>
<field name="date_from" eval="datetime(2021, 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>
<record id="rule_parameter_us_hi_suta_rate_2021" 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">5.2</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<data noupdate="1">

View File

@@ -2,28 +2,22 @@
<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>
<record id="rule_parameter_us_ia_suta_wage_base_2021" 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">32400.0</field>
<field name="date_from" eval="datetime(2021, 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>
@@ -33,79 +27,6 @@
</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.-->
@@ -182,22 +103,71 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ia_sit_tax_rate_2021" 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">{
'weekly': (
( 32.23, 0.0033, 0.00),
( 64.46, 0.0067, 0.11),
( 128.92, 0.0225, 0.33),
( 290.08, 0.0414, 1.78),
( 483.46, 0.0563, 8.45),
( 644.62, 0.0596, 19.34),
( 966.92, 0.0625, 28.95),
(1450.38, 0.0744, 49.09),
( 'inf', 0.0853, 85.06),
),
'bi-weekly': (
( 64.46, 0.0033, 0.00),
( 128.92, 0.0067, 0.21),
( 257.85, 0.0225, 0.64),
( 580.15, 0.0414, 3.54),
( 966.92, 0.0563, 16.88),
(1289.23, 0.0596, 38.66),
(1933.85, 0.0625, 57.87),
(2900.77, 0.0744, 98.16),
( 'inf', 0.0853, 170.10),
),
'semi-monthly': (
( 69.83, 0.0033, 0.00),
( 139.67, 0.0067, 0.23),
( 279.33, 0.0225, 0.70),
( 628.50, 0.0414, 3.84),
(1047.50, 0.0563, 18.30),
(1396.67, 0.0596, 41.89),
(2095.00, 0.0625, 62.70),
(3142.50, 0.0744, 106.35),
( 'inf', 0.0853, 184.28),
),
'monthly': (
( 139.67, 0.0033, 0.00),
( 279.33, 0.0067, 0.46),
( 558.67, 0.0225, 1.40),
(1257.00, 0.0414, 7.69),
(2095.00, 0.0563, 36.60),
(2793.33, 0.0596, 83.78),
(4190.00, 0.0625, 125.40),
(6285.00, 0.0744, 212.69),
( 'inf', 0.0853, 368.56),
),
'annual': (
( 1676.00, 0.0033, 0.00),
( 3352.00, 0.0067, 5.53),
( 6704.00, 0.0225, 16.76),
(15084.00, 0.0414, 92.18),
(25140.00, 0.0563, 439.11),
(33520.00, 0.0596, 1005.26),
(50280.00, 0.0625, 1504.71),
(75420.00, 0.0744, 2552.21),
( 'inf', 0.0853, 4422.63),
),
}</field>
<field name="date_from" eval="datetime(2021, 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">
@@ -213,22 +183,21 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ia_sit_standard_deduction_rate_2021" 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">{
'weekly': ( 40.96, 100.77),
'bi-weekly': ( 81.92, 201.54),
'semi-monthly': ( 88.75, 218.33),
'monthly': ( 177.50, 436.67),
'annually': (2130.00, 5240.00),
}</field>
<field name="date_from" eval="datetime(2021, 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">

View File

@@ -2,28 +2,22 @@
<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>
<record id="rule_parameter_us_id_suta_wage_base_2021" 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">43000.0</field>
<field name="date_from" eval="datetime(2021, 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>
@@ -33,169 +27,6 @@
</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">
@@ -364,18 +195,6 @@
</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">

View File

@@ -2,58 +2,54 @@
<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>
<!-- https://www2.illinois.gov/ides/IDES%20Forms%20and%20Publications/UITaxRates.pdf -->
<record id="rule_parameter_us_il_suta_wage_base_2021" 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(2021, 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>
<!-- https://www2.illinois.gov/ides/IDES%20Forms%20and%20Publications/UITaxRates.pdf -->
<record id="rule_parameter_us_il_suta_rate_2021" 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(2021, 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>
<record id="rule_parameter_us_il_sit_basic_allowances_rate_2021" 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">2375.0</field>
<field name="date_from" eval="datetime(2021, 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>

View File

@@ -8,6 +8,12 @@
<field name="parameter_value">10800.0</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ky_suta_wage_base_2021" 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">11100.0</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Rate -->
@@ -28,6 +34,12 @@
<field name="parameter_value">2650</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ky_sit_standard_deduction_rate_2021" 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">2690</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Data from https://revenue.ky.gov/Forms/42A003(T)%20(12-2019)%202020%20Tax%20Tables.pdf -->

View File

@@ -2,12 +2,6 @@
<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>
@@ -18,38 +12,21 @@
<!-- 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>
<record id="rule_parameter_us_la_suta_rate_2021" 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.0</field>
<field name="date_from" eval="datetime(2021, 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>
@@ -67,15 +44,26 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_la_sit_tax_rate_2021" 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.00),
(50000.00, 4.00),
( 'inf', 6.00)
),
'married': (
( 25000.00, 2.00),
(100000.00, 4.00),
( 'inf', 6.00)
),
}</field>
<field name="date_from" eval="datetime(2021, 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>
@@ -85,12 +73,6 @@
</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>

View File

@@ -18,6 +18,12 @@
<field name="parameter_value">1.92</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_me_suta_rate_2021" 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">2.31</field>
<field name="date_from" eval="datetime(2021, 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">
@@ -38,6 +44,23 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_me_sit_tax_rate_2021" 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': (
( 22450, 0, 5.80),
( 53150, 1302, 6.75),
( 'inf', 3374, 7.15),
),
'married': (
( 44950, 0, 5.80),
( 106350, 2607, 6.75),
( 'inf', 6752, 7.15),
),
}</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<data noupdate="1">
@@ -56,6 +79,21 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_me_sit_standard_deduction_rate_2021" 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': {
( 83850, 9700),
(158850, 75000),
},
'married': {
(167700, 22250),
(317700, 150000),
},
}</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<data noupdate="1">

View File

@@ -2,28 +2,22 @@
<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>
<record id="rule_parameter_us_mi_suta_wage_base_2021" 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(2021, 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>
@@ -33,18 +27,18 @@
</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>
<record id="rule_parameter_us_mi_sit_exemption_rate_2021" 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">4900.0</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Partners and Contribution Registers -->

View File

@@ -2,12 +2,6 @@
<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>
@@ -18,12 +12,6 @@
<!-- 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>
@@ -33,25 +21,6 @@
</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">
@@ -73,15 +42,28 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_mn_sit_tax_rate_2021" 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': (
( 31055, 3825, 5.35, 0.00),
( 93265, 31055, 6.80, 1418.82),
(169865, 93265, 7.85, 5687.09),
( 'inf', 169865, 9.85, 11700.19),
),
'married': (
( 51810, 12000, 5.35, 0.00),
( 170140, 51810, 6.80, 2129.84),
( 288200, 170140, 7.85, 10176.28),
( 'inf', 288200, 9.85, 19443.99),
),
}</field>
<field name="date_from" eval="datetime(2021, 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">
@@ -90,6 +72,12 @@
<field name="parameter_value">4300.0</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_mn_sit_allowances_rate_2021" 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">4350.0</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Partners and Contribution Registers -->

View File

@@ -2,54 +2,37 @@
<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>
<record id="rule_parameter_us_mo_suta_wage_base_2021" 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">11000.0</field>
<field name="date_from" eval="datetime(2021, 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>
<record id="rule_parameter_us_mo_suta_rate_2021" 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.7</field>
<field name="date_from" eval="datetime(2021, 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">
@@ -68,20 +51,25 @@
]</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_mo_sit_rate_2021" 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">[
(1088.0, 1.5),
(1088.0, 2.0),
(1088.0, 2.5),
(1088.0, 3.0),
(1088.0, 3.5),
(1088.0, 4.0),
(1088.0, 4.5),
(1088.0, 5.0),
( 'inf', 5.4),
]</field>
<field name="date_from" eval="datetime(2021, 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">
@@ -94,6 +82,16 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_mo_sit_deduction_2021" 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': 12550.0,
'married': 25100.0,
'head_of_household': 18800.0,
}</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Partners and Contribution Registers -->

View File

@@ -2,12 +2,6 @@
<odoo>
<!-- Wage Base -->
<data noupdate="1">
<record id="rule_parameter_us_ms_suta_wage_base_2019" model="hr.payroll.rate">
<field name="name">US MS Mississippi SUTA Wage Base</field>
<field name="code">us_ms_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_ms_suta_wage_base_2020" model="hr.payroll.rate">
<field name="name">US MS Mississippi SUTA Wage Base</field>
<field name="code">us_ms_suta_wage_base</field>
@@ -18,31 +12,21 @@
<!-- Rate -->
<data noupdate="1">
<record id="rule_parameter_us_ms_suta_rate_2019" model="hr.payroll.rate">
<field name="name">US MS Mississippi SUTA Rate</field>
<field name="code">us_ms_suta_rate</field>
<field name="parameter_value">1.2</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ms_suta_rate_2020" model="hr.payroll.rate">
<field name="name">US MS Mississippi SUTA Rate</field>
<field name="code">us_ms_suta_rate</field>
<field name="parameter_value">1.2</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ms_suta_rate_2021" model="hr.payroll.rate">
<field name="name">US MS Mississippi SUTA Rate</field>
<field name="code">us_ms_suta_rate</field>
<field name="parameter_value">1.0</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<data noupdate="1">
<record id="rule_parameter_us_ms_sit_rate_2019" model="hr.payroll.rate">
<field name="name">US MS Mississippi SIT Rate Table</field>
<field name="code">us_ms_sit_rate</field>
<field name="parameter_value">[
( 10000.00, 290.0, 0.05),
( 5000.00, 90.0, 0.04),
( 2000.00, 0.0, 0.03),
]</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<!-- https://www.dor.ms.gov/Documents/Computer%20Payroll%20Flowchart.pdf -->
<!-- Table D. -->
<record id="rule_parameter_us_ms_sit_rate_2020" model="hr.payroll.rate">
@@ -55,20 +39,19 @@
]</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ms_sit_rate_2021" model="hr.payroll.rate">
<field name="name">US MS Mississippi SIT Rate Table</field>
<field name="code">us_ms_sit_rate</field>
<field name="parameter_value">[
( 10000.00, 230.0, 0.05),
( 5000.00, 30.0, 0.04),
( 3000.00, 0.0, 0.03),
]</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<data noupdate="1">
<record id="rule_parameter_us_ms_sit_deduction_2019" 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(2019, 1, 1).date()"/>
</record>
<!-- https://www.dor.ms.gov/Documents/Computer%20Payroll%20Flowchart.pdf -->
<!-- Table C. -->
<record id="rule_parameter_us_ms_sit_deduction_2020" model="hr.payroll.rate">

View File

@@ -2,28 +2,22 @@
<odoo>
<!-- Wage Base -->
<data noupdate="1">
<record id="rule_parameter_us_mt_suta_wage_base_2019" model="hr.payroll.rate">
<field name="name">US MT Montana SUTA Wage Base</field>
<field name="code">us_mt_suta_wage_base</field>
<field name="parameter_value">33000.00</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_mt_suta_wage_base_2020" model="hr.payroll.rate">
<field name="name">US MT Montana SUTA Wage Base</field>
<field name="code">us_mt_suta_wage_base</field>
<field name="parameter_value">34100.00</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_mt_suta_wage_base_2021" model="hr.payroll.rate">
<field name="name">US MT Montana SUTA Wage Base</field>
<field name="code">us_mt_suta_wage_base</field>
<field name="parameter_value">35300.00</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Rate -->
<data noupdate="1">
<record id="rule_parameter_us_mt_suta_rate_2019" model="hr.payroll.rate">
<field name="name">US MT Montana SUTA Rate (UI)</field>
<field name="code">us_mt_suta_rate</field>
<field name="parameter_value">1.18</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_mt_suta_rate_2020" model="hr.payroll.rate">
<field name="name">US MT Montana SUTA Rate (UI)</field>
<field name="code">us_mt_suta_rate</field>

View File

@@ -2,50 +2,37 @@
<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>
<record id="rule_parameter_us_nc_suta_wage_base_2021" 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">26000.0</field>
<field name="date_from" eval="datetime(2021, 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>
<record id="rule_parameter_us_nc_suta_rate_2021" 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(2021, 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">
@@ -59,6 +46,21 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<!-- https://files.nc.gov/ncdor/documents/files/2021-NC-30-Final.pdf -->
<!-- 'allowance': Get from Withholding Allowance Chart Page 19. -->
<!-- 'standard_deduction': Get from 'Percentage Method - Formula Tables' line 2 SD For single or married (Page. 16-18)-->
<!-- 'standard_deduction_hh': Also get from 'Percentage Method - Formula Tables' line 2 (SD Page. 16-18)-->
<record id="rule_parameter_us_nc_sit_allowance_rate_2021" 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(2021, 1, 1).date()"/>
</record>
</data>
<!-- Partners and Contribution Registers -->

View File

@@ -8,6 +8,12 @@
<field name="parameter_value">37900.0</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_nd_suta_wage_base_2021" 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">38500.0</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Rate -->
@@ -202,6 +208,187 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_nd_sit_tax_rate_2021" 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': (
( 121, 0.00, 0.00),
( 900, 0.00, 1.10),
( 2007, 8.57, 2.04),
( 4057, 31.15, 2.27),
( 8678, 77.69, 2.64),
('inf', 199.68, 2.90),
),
'bi-weekly': (
( 241, 0.00, 0.00),
( 1800, 0.00, 1.10),
( 4014, 17.15, 2.04),
( 8113, 62.31, 2.27),
( 17357, 155.36, 2.64),
( 'inf', 399.40, 2.90),
),
'semi-monthly': (
( 261, 0.00, 0.00),
( 1950, 0.00, 1.10),
( 4349, 18.58, 2.04),
( 8790, 67.52, 2.27),
( 18790, 168.33, 2.64),
( 'inf', 432.67, 2.90),
),
'monthly': (
( 523, 0.00, 0.00),
( 3900, 0.00, 1.10),
( 8698, 37.15, 2.04),
( 17579, 135.03, 2.27),
( 37606, 336.62, 2.64),
( 'inf', 865.34, 2.90),
),
'quarterly': (
( 1569, 0.00, 0.00),
( 11700, 0.00, 1.10),
( 26094, 111.44, 2.04),
( 52738, 405.08, 2.27),
( 112819, 1009.90, 2.64),
( 'inf', 2596.04, 2.90),
),
'semi-annual': (
( 3138, 0.00, 0.00),
( 23400, 0.00, 1.10),
( 52188, 222.88, 2.04),
( 105475, 810.16, 2.27),
( 225638, 2019.77, 2.64),
( 'inf', 5192.08, 2.90),
),
'annual': (
( 6275, 0.00, 0.00),
( 46800, 0.00, 1.10),
( 104375, 445.78, 2.04),
( 210950, 1620.31, 2.27),
( 451275, 4039.56, 2.64),
( 'inf', 10384.14, 2.90),
),
},
'married': {
'weekly': (
( 241, 0.00, 0.00),
( 892, 0.00, 1.10),
( 1814, 7.16, 2.04),
( 2637, 25.97, 2.27),
( 4520, 44.65, 2.64),
('inf', 94.36, 2.90),
),
'bi-weekly': (
( 483, 0.00, 0.00),
( 1785, 0.00, 1.10),
( 3628, 14.32, 2.04),
( 5274, 51.92, 2.27),
( 9040, 89.28, 2.64),
( 'inf', 188.71, 2.90),
),
'semi-monthly': (
( 523, 0.00, 0.00),
( 1933, 0.00, 1.10),
( 3930, 15.51, 2.04),
( 5714, 56.25, 2.27),
( 9794, 96.75, 2.64),
( 'inf', 204.46, 2.90),
),
'monthly': (
( 1046, 0.00, 0.00),
( 3867, 0.00, 1.10),
( 7860, 31.03, 2.04),
( 11427, 112.49, 2.27),
( 19588, 193.46, 2.64),
( 'inf', 408.91, 2.90),
),
'quarterly': (
( 3138, 0.00, 0.00),
( 11600, 0.00, 1.10),
( 23581, 93.08, 2.04),
( 34281, 337.49, 2.27),
( 58763, 580.38, 2.64),
( 'inf', 1226.71, 2.90),
),
'semi-annual': (
( 6275, 0.00, 0.00),
( 23200, 0.00, 1.10),
( 47163, 186.18, 2.04),
( 68563, 675.02, 2.27),
( 117525, 1160.80, 2.64),
( 'inf', 2453.40, 2.90),
),
'annual': (
( 12550, 0.00, 0.00),
( 46400, 0.00, 1.10),
( 94325, 372.35, 2.04),
( 137125, 1350.02, 2.27),
( 235050, 2321.58, 2.64),
( 'inf', 4906.80, 2.90),
),
},
'head_household':{
'weekly': (
( 121, 0.00, 0.00),
( 900, 0.00, 1.10),
( 2007, 8.57, 2.04),
( 4057, 31.15, 2.27),
( 8678, 77.69, 2.64),
('inf', 199.68, 2.90),
),
'bi-weekly': (
( 241, 0.00, 0.00),
( 1800, 0.00, 1.10),
( 4014, 17.15, 2.04),
( 8113, 62.31, 2.27),
( 17357, 155.36, 2.64),
( 'inf', 399.40, 2.90),
),
'semi-monthly': (
( 261, 0.00, 0.00),
( 1950, 0.00, 1.10),
( 4349, 18.58, 2.04),
( 8790, 67.52, 2.27),
( 18790, 168.33, 2.64),
( 'inf', 432.67, 2.90),
),
'monthly': (
( 523, 0.00, 0.00),
( 3900, 0.00, 1.10),
( 8698, 37.15, 2.04),
( 17579, 135.03, 2.27),
( 37606, 336.62, 2.64),
( 'inf', 865.34, 2.90),
),
'quarterly': (
( 1569, 0.00, 0.00),
( 11700, 0.00, 1.10),
( 26094, 111.44, 2.04),
( 52738, 405.08, 2.27),
( 112819, 1009.90, 2.64),
( 'inf', 2596.04, 2.90),
),
'semi-annual': (
( 3138, 0.00, 0.00),
( 23400, 0.00, 1.10),
( 52188, 222.88, 2.04),
( 105475, 810.16, 2.27),
( 225638, 2019.77, 2.64),
( 'inf', 5192.08, 2.90),
),
'annual': (
( 6275, 0.00, 0.00),
( 46800, 0.00, 1.10),
( 104375, 445.78, 2.04),
( 210950, 1620.31, 2.27),
( 451275, 4039.56, 2.64),
( 'inf', 10384.14, 2.90),
),
},
}</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<data noupdate="1">

View File

@@ -18,6 +18,12 @@
<field name="parameter_value">1.25</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ne_suta_rate_2021" 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">2.5</field>
<field name="date_from" eval="datetime(2021, 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 -->

View File

@@ -18,6 +18,12 @@
<field name="parameter_value">1.2</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_nh_suta_rate_2021" 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">2.7</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Partners and Contribution Registers -->

File diff suppressed because it is too large Load Diff

View File

@@ -8,6 +8,12 @@
<field name="parameter_value">25800.0</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_nm_suta_wage_base_2021" 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">27000.0</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Rate -->
@@ -245,6 +251,271 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_nm_sit_tax_rate_2021" 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': (
( 121, 0.00, 0.0),
( 226, 0.00, 1.7),
( 332, 1.80, 3.2),
( 428, 5.18, 4.7),
( 621, 9.70, 4.9),
( 928, 19.13, 4.9),
( 1371, 34.20, 4.9),
( 2525, 55.88, 4.9),
( 4159, 112.41, 4.9),
('inf', 192.51, 5.9),
),
'bi-weekly': (
( 241, 0.00, 0.0),
( 453, 0.00, 1.7),
( 664, 3.60, 3.2),
( 857, 10.37, 4.7),
( 1241, 19.40, 4.9),
( 1857, 38.25, 4.9),
( 2741, 68.40, 4.9),
( 5049, 111.75, 4.9),
( 8318, 224.83, 4.9),
('inf', 385.02, 5.9),
),
'semi-monthly': (
( 261, 0.00, 0.0),
( 491, 0.00, 1.7),
( 720, 3.90, 3.2),
( 928, 11.23, 4.7),
( 1345, 21.02, 4.9),
( 2011, 41.44, 4.9),
( 2970, 74.10, 4.9),
( 2470, 121.06, 4.9),
( 9011, 243.56, 4.9),
('inf', 417.10, 5.9),
),
'monthly': (
( 523, 0.00, 0.0),
( 981, 0.00, 1.7),
( 1440, 7.79, 3.2),
( 1856, 22.46, 4.7),
( 2690, 42.04, 4.9),
( 4023, 82.88, 4.9),
( 5940, 148.21, 4.9),
(10940, 242.13, 4.9),
(18023, 487.13, 4.9),
('inf', 834.21, 5.9),
),
'quarterly': (
( 1569, 0.00, 0.0),
( 2944, 0.00, 1.7),
( 4319, 23.38, 3.2),
( 5569, 67.38, 4.7),
( 8069, 126.13, 4.9),
( 12069, 248.63, 4.9),
( 17819, 444.63, 4.9),
( 32819, 726.38, 4.9),
( 54069, 1461.38, 4.9),
( 'inf', 2502.63, 5.9),
),
'semi-annual': (
( 3138, 0.00, 0.0),
( 5888, 0.00, 1.7),
( 8638, 46.75, 3.2),
( 11138, 134.75, 4.7),
( 16138, 252.25, 4.9),
( 24138, 497.25, 4.9),
( 35638, 889.25, 4.9),
( 65638, 1452.75, 4.9),
(108138, 2922.75, 4.9),
('inf' , 5005.25, 5.9),
),
'annually': (
( 6275, 0.00, 0.0),
( 11775, 0.00, 1.7),
( 17275, 93.50, 3.2),
( 22275, 269.50, 4.7),
( 32275, 504.50, 4.9),
( 48275, 994.50, 4.9),
( 71275, 1778.50, 4.9),
(131275, 2905.50, 4.9),
(216275, 5845.50, 4.9),
( 'inf', 10010.50, 5.9),
),
},
'married': {
'weekly': (
( 241, 0.00, 0.0),
( 395, 0.00, 1.7),
( 549, 2.62, 3.2),
( 703, 7.54, 4.7),
( 1011, 14.77, 4.9),
( 1472, 29.85, 4.9),
( 2164, 52.46, 4.9),
( 4088, 86.38, 4.9),
( 6299, 180.62, 4.9),
('inf', 288.98, 5.9),
),
'bi-weekly': (
( 483, 0.00, 0.0),
( 790, 0.00, 1.7),
( 1089, 5.23, 3.2),
( 1406, 15.08, 4.7),
( 2021, 29.54, 4.9),
( 2944, 59.69, 4.9),
( 4329, 104.92, 4.9),
( 8175, 172.77, 4.9),
(12598, 361.23, 4.9),
('inf', 577.96, 5.9),
),
'semi-monthly': (
( 523, 0.00, 0.0),
( 856, 0.00, 1.7),
( 1190, 5.67, 3.2),
( 1523, 16.33, 4.7),
( 2190, 32.00, 4.9),
( 3190, 64.67, 4.9),
( 4690, 113.67, 4.9),
( 8856, 187.17, 4.9),
(13648, 391.33, 4.9),
('inf', 626.13, 5.9),
),
'monthly': (
( 1046, 0.00, 0.0),
( 1713, 0.00, 1.7),
( 2379, 11.33, 3.2),
( 3046, 32.67, 4.7),
( 4379, 64.00, 4.9),
( 6379, 129.33, 4.9),
( 9379, 227.33, 4.9),
(17713, 374.33, 4.9),
(27296, 782.67, 4.9),
('inf', 1252.25, 5.9),
),
'quarterly': (
( 3138, 0.00, 0.0),
( 5138, 0.00, 1.7),
( 7138, 34.00, 3.2),
( 9138, 98.00, 4.7),
(13138, 192.00, 4.9),
(19138, 388.00, 4.9),
(28138, 682.00, 4.9),
(53138, 1123.00, 4.9),
(81888, 2348.00, 4.9),
('inf', 3756.75, 5.9),
),
'semi-annual': (
( 6275, 0.00, 0.0),
( 10275, 0.00, 1.7),
( 14275, 68.00, 3.2),
( 18275, 196.00, 4.7),
( 26275, 384.00, 4.9),
( 38275, 776.00, 4.9),
( 56275, 1364.00, 4.9),
(106275, 2246.00, 4.9),
(163775, 4696.00, 4.9),
( 'inf', 7513.50, 5.9),
),
'annually': (
( 12450, 0.00, 0.0),
( 20450, 0.00, 1.7),
( 28450, 136.00, 3.2),
( 36450, 392.00, 4.7),
( 52450, 768.00, 4.9),
( 76450, 1552.00, 4.9),
(112450, 2728.00, 4.9),
(212550, 4492.00, 4.9),
(327550, 9392.00, 4.9),
( 'inf', 15027.00, 5.9),
),
},
'married_as_single': {
'weekly': (
( 181, 0.00, 0.0),
( 335, 0.00, 1.7),
( 488, 2.62, 3.2),
( 642, 7.54, 4.7),
( 950, 14.77, 4.9),
( 1412, 29.85, 4.9),
( 2104, 52.46, 4.9),
( 2027, 86.38, 4.9),
( 6238, 180.62, 4.9),
('inf', 288.98, 5.9),
),
'bi-weekly': (
( 362, 0.00, 0.0),
( 669, 0.00, 1.7),
( 977, 5.23, 3.2),
( 1285, 15.08, 4.7),
( 1900, 29.54, 4.9),
( 2823, 59.69, 4.9),
( 4208, 104.92, 4.9),
( 8054, 172.77, 4.9),
(12477, 361.23, 4.9),
('inf', 577.96, 5.9),
),
'semi-monthly': (
( 392, 0.00, 0.0),
( 725, 0.00, 1.7),
( 1058, 5.67, 3.2),
( 1392, 16.33, 4.7),
( 2058, 32.00, 4.9),
( 3058, 64.67, 4.9),
( 4558, 113.67, 4.9),
( 8725, 187.17, 4.9),
(13517, 391.33, 4.9),
('inf', 626.13, 5.9),
),
'monthly': (
( 783, 0.00, 0.0),
( 1450, 0.00, 1.7),
( 2117, 11.33, 3.2),
( 2783, 32.67, 4.7),
( 4117, 64.00, 4.9),
( 6117, 129.33, 4.9),
( 9117, 227.33, 4.9),
(17450, 374.33, 4.9),
(27033, 782.67, 4.9),
('inf', 1252.25, 5.9),
),
'quarterly': (
( 2350, 0.00, 0.0),
( 4350, 0.00, 1.7),
( 6350, 34.00, 3.2),
( 8350, 98.00, 4.7),
( 12350, 192.00, 4.9),
( 18350, 388.00, 4.9),
( 27350, 682.00, 4.9),
( 52350, 1123.00, 4.9),
( 81100, 2348.00, 4.9),
( 'inf', 3756.75, 5.9),
),
'semi-annual': (
( 4700, 0.00, 0.0),
( 8700, 0.00, 1.7),
( 12700, 68.00, 3.2),
( 16700, 196.00, 4.7),
( 24700, 384.00, 4.9),
( 36700, 776.00, 4.9),
( 54700, 1364.00, 4.9),
(104700, 2246.00, 4.9),
(162200, 4696.00, 4.9),
( 'inf', 7513.50, 5.9),
),
'annually': (
( 9400, 0.00, 0.0),
( 17400, 0.00, 1.7),
( 25400, 136.00, 3.2),
( 33400, 392.00, 4.7),
( 49400, 768.00, 4.9),
( 73400, 1552.00, 4.9),
(109400, 2728.00, 4.9),
(209400, 4492.00, 4.9),
(324400, 9392.00, 4.9),
( 'inf', 15027.00, 5.9),
),
}
}</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>

View File

@@ -8,6 +8,12 @@
<field name="parameter_value">32500.00</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_nv_suta_wage_base_2021" 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">33400.00</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Rate -->

View File

@@ -2,18 +2,18 @@
<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>
<record id="rule_parameter_us_ny_suta_wage_base_2021" 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">11800.0</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Rate -->
@@ -63,27 +63,6 @@
</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>
@@ -255,21 +234,180 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ny_sit_tax_rate_2021" 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.0597, 20.04),
( 1862, 0.0633, 88.06),
( 2070, 0.0738, 107.73),
( 3032, 0.0788, 123.12),
( 4142, 0.0683, 198.88),
( 5104, 0.0959, 274.75),
(20722, 0.0735, 366.96),
(21684, 0.5208, 1514.90),
('inf', 0.0962, 2015.67),
),
'bi-weekly': (
( 327, 0.0400, 0.00),
( 450, 0.0450, 13.08),
( 535, 0.0525, 18.62),
( 823, 0.0590, 23.08),
( 3102, 0.0597, 40.08),
( 3723, 0.0633, 176.12),
( 4140, 0.0738, 215.46),
( 6063, 0.0788, 246.23),
( 8285, 0.0683, 397.77),
(10208, 0.0959, 549.50),
(41444, 0.0735, 733.92),
(43367, 0.5208, 3029.81),
('inf', 0.0962, 4031.45),
),
'semi-monthly': (
( 354, 0.0400, 0.00),
( 488, 0.0450, 14.17),
( 579, 0.0525, 20.17),
( 892, 0.0590, 25.00),
( 3360, 0.0597, 43.42),
( 4033, 0.0633, 190.79),
( 4485, 0.0738, 233.42),
( 6569, 0.0788, 266.75),
( 8975, 0.0683, 430.92),
(11058, 0.0959, 595.29),
(44898, 0.0735, 795.08),
(46981, 0.5208, 3282.29),
('inf', 0.0962, 4367.29),
),
'monthly': (
( 708, 0.0400, 0.00),
( 975, 0.0450, 28.33),
( 1158, 0.0525, 40.33),
( 1783, 0.0590, 50.00),
( 6721, 0.0597, 86.83),
( 8067, 0.0633, 381.58),
( 8971, 0.0738, 466.83),
(13138, 0.0788, 533.50),
(17950, 0.0683, 861.83),
(22117, 0.0959, 1190.58),
(89796, 0.0735, 1590.17),
(93963, 0.5208, 6564.58),
('inf', 0.0962, 8734.58),
),
'annually': (
( 8500, 0.0400, 0.00),
( 11700, 0.0450, 340.00),
( 13900, 0.0525, 484.00),
( 21400, 0.0590, 600.00),
( 80650, 0.0597, 1042.00),
( 96800, 0.0633, 4579.00),
( 107650, 0.0738, 5602.00),
( 157650, 0.0788, 6402.00),
( 215400, 0.0683, 10342.00),
( 265400, 0.0959, 14287.00),
(1077550, 0.0735, 19082.00),
(1127550, 0.5208, 78775.00),
( 'inf', 0.0962, 104815.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.0597, 20.04),
( 1862, 0.0633, 88.06),
( 2070, 0.0728, 107.73),
( 3032, 0.0778, 122.90),
( 4068, 0.0799, 197.71),
( 6215, 0.0683, 280.54),
( 7177, 0.1071, 427.19),
(20722, 0.0735, 530.17),
(41449, 0.0765, 1525.73),
(42411, 0.9454, 3111.35),
('inf', 0.0962, 4020.38),
),
'bi-weekly': (
( 327, 0.0400, 0.00),
( 450, 0.0450, 13.08),
( 535, 0.0525, 18.62),
( 823, 0.0590, 23.08),
( 3102, 0.0597, 40.08),
( 3723, 0.0633, 176.12),
( 4140, 0.0728, 215.46),
( 6063, 0.0778, 245.81),
( 8137, 0.0799, 395.42),
(12431, 0.0683, 561.08),
(14354, 0.1071, 854.38),
(41444, 0.0735, 1060.35),
(82898, 0.0765, 3051.46),
(84821, 0.9454, 6222.69),
('inf', 0.0962, 8040.77),
),
'semi-monthly': (
( 354, 0.0400, 0.00),
( 488, 0.0450, 14.17),
( 579, 0.0525, 20.17),
( 892, 0.0590, 25.00),
( 3360, 0.0597, 43.42),
( 4033, 0.0633, 190.79),
( 4485, 0.0728, 233.42),
( 6569, 0.0778, 266.29),
( 8815, 0.0799, 428.38),
(13467, 0.0683, 607.83),
(15550, 0.1071, 925.58),
(44898, 0.0735, 1148.71),
(89806, 0.0765, 3305.75),
(91890, 0.9454, 6741.25),
('inf', 0.0962, 8710.83),
),
'monthly': (
( 708, 0.0400, 0.00),
( 975, 0.0450, 28.33),
( 1158, 0.0525, 40.33),
( 1783, 0.0590, 50.00),
( 6721, 0.0597, 86.83),
( 8067, 0.0633, 381.58),
( 8971, 0.0728, 466.83),
( 13138, 0.0778, 532.58),
( 17629, 0.0799, 856.75),
( 26933, 0.0683, 1215.67),
( 31100, 0.1071, 1851.17),
( 89796, 0.0735, 2297.42),
(179613, 0.0765, 6611.50),
(183779, 0.9454, 13482.50),
( 'inf', 0.0962, 17421.67),
),
'annually': (
( 8500, 0.0400, 0.00),
( 11700, 0.0450, 340.00),
( 13900, 0.0525, 484.00),
( 21400, 0.0590, 600.00),
( 80650, 0.0597, 1042.00),
( 96800, 0.0633, 4579.00),
( 107650, 0.0728, 5602.00),
( 157650, 0.0778, 6391.00),
( 211550, 0.0799, 10281.00),
( 323200, 0.0683, 14588.00),
( 373200, 0.1071, 22214.00),
(1077550, 0.0735, 27569.00),
(2155350, 0.0765, 79338.00),
(2205350, 0.9454, 161790.00),
( 'inf', 0.0962, 209060.00),
),
}
}</field>
<field name="date_from" eval="datetime(2021, 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>
@@ -282,30 +420,21 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ny_sit_over_10_exemption_rate_2021" 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(2021, 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>

View File

@@ -2,12 +2,6 @@
<odoo>
<!-- Wage Base -->
<data noupdate="1">
<record id="rule_parameter_us_oh_suta_wage_base_2019" model="hr.payroll.rate">
<field name="name">US OH Ohio SUTA Wage Base</field>
<field name="code">us_oh_suta_wage_base</field>
<field name="parameter_value">9500.00</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_oh_suta_wage_base_2020" model="hr.payroll.rate">
<field name="name">US OH Ohio SUTA Wage Base</field>
<field name="code">us_oh_suta_wage_base</field>
@@ -18,12 +12,6 @@
<!-- Rate -->
<data noupdate="1">
<record id="rule_parameter_us_oh_suta_rate_2019" model="hr.payroll.rate">
<field name="name">US OH Ohio SUTA Rate</field>
<field name="code">us_oh_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_oh_suta_rate_2020" model="hr.payroll.rate">
<field name="name">US OH Ohio SUTA Rate</field>
<field name="code">us_oh_suta_rate</field>
@@ -33,23 +21,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_oh_sit_rate_2019" model="hr.payroll.rate">
<field name="name">US OH Ohio SIT Rate Table</field>
<field name="code">us_oh_sit_rate</field>
<!-- https://www.tax.ohio.gov/Portals/0/employer_withholding/2019%20tables/WTH_OptionalComputerFormula_2019.pdf -->
<!-- wage_less_than, base_amount, rate_over -->
<field name="parameter_value">[
( 5000.00, 0.0, 0.005),
( 10000.00, 25.0, 0.010),
( 15000.00, 75.0, 0.020),
( 20000.00, 175.0, 0.025),
( 40000.00, 300.0, 0.030),
( 80000.00, 900.0, 0.035),
( 100000.00, 2300.0, 0.040),
( 'inf', 3100.0, 0.050),
]</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_oh_sit_rate_2020" model="hr.payroll.rate">
<field name="name">US OH Ohio SIT Rate Table</field>
<field name="code">us_oh_sit_rate</field>
@@ -70,12 +41,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_oh_sit_exemption_rate_2019" model="hr.payroll.rate">
<field name="name">US OH Ohio SIT Exemption Rate</field>
<field name="code">us_oh_sit_exemption_rate</field>
<field name="parameter_value">650.0</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_oh_sit_exemption_rate_2020" model="hr.payroll.rate">
<field name="name">US OH Ohio SIT Exemption Rate</field>
<field name="code">us_oh_sit_exemption_rate</field>
@@ -85,12 +50,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_oh_sit_multiplier_2019" model="hr.payroll.rate">
<field name="name">US OH Ohio SIT Multiplier Value</field>
<field name="code">us_oh_sit_multiplier</field>
<field name="parameter_value">1.075</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_oh_sit_multiplier_2020" model="hr.payroll.rate">
<field name="name">US OH Ohio SIT Multiplier Value</field>
<field name="code">us_oh_sit_multiplier</field>

View File

@@ -8,6 +8,12 @@
<field name="parameter_value">18700.0</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ok_suta_wage_base_2021" 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">24000.0</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Rate -->
@@ -18,6 +24,12 @@
<field name="parameter_value">1.5</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ok_suta_rate_2021" 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.0</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- table from https://www.ok.gov/tax/documents/2020WHTables.pdf -->
<data noupdate="1">

View File

@@ -2,12 +2,6 @@
<odoo>
<!-- Wage Base -->
<data noupdate="1">
<record id="rule_parameter_us_pa_suta_wage_base_2019" model="hr.payroll.rate">
<field name="name">US PA Pennsylvania SUTA Wage Base (ER)</field>
<field name="code">us_pa_suta_wage_base</field>
<field name="parameter_value">10000.00</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_pa_suta_wage_base_2020" model="hr.payroll.rate">
<field name="name">US PA Pennsylvania SUTA Wage Base (ER)</field>
<field name="code">us_pa_suta_wage_base</field>
@@ -18,12 +12,6 @@
<!-- Rate -->
<data noupdate="1">
<record id="rule_parameter_us_pa_suta_rate_2019" model="hr.payroll.rate">
<field name="name">US PA Pennsylvania SUTA Rate</field>
<field name="code">us_pa_suta_rate</field>
<field name="parameter_value">3.6890</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_pa_suta_rate_2020" model="hr.payroll.rate">
<field name="name">US PA Pennsylvania SUTA Rate</field>
<field name="code">us_pa_suta_rate</field>
@@ -33,12 +21,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_pa_suta_ee_rate_2019" model="hr.payroll.rate">
<field name="name">US PA Pennsylvania SUTA Employee Rate</field>
<field name="code">us_pa_suta_ee_rate</field>
<field name="parameter_value">0.06</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_pa_suta_ee_rate_2020" model="hr.payroll.rate">
<field name="name">US PA Pennsylvania SUTA Employee Rate</field>
<field name="code">us_pa_suta_ee_rate</field>
@@ -48,12 +30,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_pa_sit_rate_2019" model="hr.payroll.rate">
<field name="name">US PA Pennsylvania SIT Rate</field>
<field name="code">us_pa_sit_rate</field>
<field name="parameter_value">3.07</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_pa_sit_rate_2020" model="hr.payroll.rate">
<field name="name">US PA Pennsylvania SIT Rate</field>
<field name="code">us_pa_sit_rate</field>

View File

@@ -36,6 +36,20 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ri_sit_exemption_rate_2021" 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), ( 4514.42, 0.00)),
'bi-weekly' : (( 0.00, 38.46), ( 9028.85, 0.00)),
'semi-monthly': (( 0.00, 41.67), ( 9781.25, 0.00)),
'monthly' : (( 0.00, 83.33), ( 19562.50, 0.00)),
'quarterly' : (( 0.00, 250.00), ( 58687.50, 0.00)),
'semi-annually': (( 0.00, 500.00), ( 117375.00, 0.00)),
'annually': (( 0.00, 1000.0), ( 234750.00, 0.00)),
}</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<data noupdate="1">
@@ -81,6 +95,48 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ri_sit_tax_rate_2021" 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': (
( 1273, 0.00, 3.75),
( 2895, 47.74, 4.75),
('inf', 124.79, 5.99),
),
'bi-weekly': (
( 2546, 0.00, 3.75),
( 5790, 95.48, 4.75),
('inf', 249.57, 5.99),
),
'semi-monthly': (
( 2758, 0.00, 3.75),
( 6273, 103.43, 4.75),
('inf', 270.39, 5.99),
),
'monthly': (
( 5517, 0.00, 3.75),
(12546, 206.89, 4.75),
('inf', 540.77, 5.99),
),
'quarterly': (
(16550, 0.00, 3.75),
(37638, 620.63, 4.75),
('inf', 1622.31, 5.99),
),
'semi-annually': (
(33100, 0.00, 3.75),
(75275, 1241.25, 4.75),
('inf', 3244.56, 5.99),
),
'annually': (
( 66200, 0.00, 3.75),
(150550, 2482.50, 4.75),
( 'inf', 6489.13, 5.99),
),
}</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Partners and Contribution Registers -->

View File

@@ -2,12 +2,6 @@
<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>
@@ -18,12 +12,6 @@
<!-- 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>
@@ -34,19 +22,6 @@
</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>
@@ -61,36 +36,49 @@
]</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_sc_sit_tax_rate_2021" 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">[
( 2800, 0.5, 0.0),
( 5610, 3.0, 70.00),
( 8410, 4.0, 126.10),
(11220, 5.0, 210.20),
(14030, 6.0, 322.40),
('inf', 7.0, 462.70),
]</field>
<field name="date_from" eval="datetime(2021, 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>
<record id="rule_parameter_us_sc_sit_personal_exemption_rate_2021" 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">2670</field>
<field name="date_from" eval="datetime(2021, 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>
<record id="rule_parameter_us_sc_sit_standard_deduction_rate_2021" 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">4200.0</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Partners and Contribution Registers -->

View File

@@ -2,12 +2,6 @@
<odoo>
<!-- Wage Base -->
<data noupdate="1">
<record id="rule_parameter_us_tx_suta_wage_base_2019" model="hr.payroll.rate">
<field name="name">US TX Texas SUTA Wage Base</field>
<field name="code">us_tx_suta_wage_base</field>
<field name="parameter_value">9000.0</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_tx_suta_wage_base_2020" model="hr.payroll.rate">
<field name="name">US TX Texas SUTA Wage Base</field>
<field name="code">us_tx_suta_wage_base</field>
@@ -18,12 +12,6 @@
<!-- Rate -->
<data noupdate="1">
<record id="rule_parameter_us_tx_suta_rate_2019" model="hr.payroll.rate">
<field name="name">US TX Texas SUTA Rate</field>
<field name="code">us_tx_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_tx_suta_rate_2020" model="hr.payroll.rate">
<field name="name">US TX Texas SUTA Rate</field>
<field name="code">us_tx_suta_rate</field>
@@ -33,12 +21,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_tx_suta_oa_rate_2019" model="hr.payroll.rate">
<field name="name">US TX Texas Obligation Assessment Rate</field>
<field name="code">us_tx_suta_oa_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_tx_suta_oa_rate_2020" model="hr.payroll.rate">
<field name="name">US TX Texas Obligation Assessment Rate</field>
<field name="code">us_tx_suta_oa_rate</field>
@@ -48,12 +30,6 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_tx_suta_etia_rate_2019" model="hr.payroll.rate">
<field name="name">US TX Texas Employment &amp; Training Investment Assessment Rate</field>
<field name="code">us_tx_suta_etia_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_tx_suta_etia_rate_2020" model="hr.payroll.rate">
<field name="name">US TX Texas Employment &amp; Training Investment Assessment Rate</field>
<field name="code">us_tx_suta_etia_rate</field>

View File

@@ -8,6 +8,12 @@
<field name="parameter_value">36600.0</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ut_suta_wage_base_2021" 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">38900.0</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Rate -->
@@ -18,6 +24,12 @@
<field name="parameter_value">0.1</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_ut_suta_rate_2021" 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.1052</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<data noupdate="1">

View File

@@ -2,12 +2,6 @@
<odoo>
<!-- Wage Base -->
<data noupdate="1">
<record id="rule_parameter_us_va_suta_wage_base_2019" model="hr.payroll.rate">
<field name="name">US VA Virginia SUTA Wage Base</field>
<field name="code">us_va_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_va_suta_wage_base_2020" model="hr.payroll.rate">
<field name="name">US VA Virginia SUTA Wage Base</field>
<field name="code">us_va_suta_wage_base</field>
@@ -18,18 +12,18 @@
<!-- Rate -->
<data noupdate="1">
<record id="rule_parameter_us_va_suta_rate_2019" model="hr.payroll.rate">
<field name="name">US VA Virginia SUTA Rate</field>
<field name="code">us_va_suta_rate</field>
<field name="parameter_value">2.51</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_va_suta_rate_2020" model="hr.payroll.rate">
<field name="name">US VA Virginia SUTA Rate</field>
<field name="code">us_va_suta_rate</field>
<field name="parameter_value">2.51</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_va_suta_rate_2021" model="hr.payroll.rate">
<field name="name">US VA Virginia SUTA Rate</field>
<field name="code">us_va_suta_rate</field>
<field name="parameter_value">2.5</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<data noupdate="1">

View File

@@ -8,6 +8,12 @@
<field name="parameter_value">16100.0</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_vt_suta_wage_base_2021" 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">14100.0</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Rate -->
@@ -34,6 +40,19 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_vt_sit_allowances_rate_2021" 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' : 84.62,
'bi-weekly' : 169.23,
'semi-monthly': 183.33,
'monthly' : 366.67,
'quarterly' : 1100.00,
'annually': 4400.00,
}</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Table based on https://tax.vermont.gov/sites/tax/files/documents/WithholdingInstructions.pdf-->
<data noupdate="1">
@@ -132,6 +151,101 @@
}</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_vt_sit_tax_rate_2021" 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': (
( 61, 0.00, 0.00),
( 849, 0.00, 3.35),
( 1969, 26.40, 6.60),
( 4041, 100.32, 7.60),
('inf', 257.79, 8.75),
),
'bi-weekly': (
( 122, 0.00, 0.00),
( 1697, 0.00, 3.35),
( 3938, 52.76, 6.60),
( 8082, 200.67, 7.60),
('inf', 515.61, 8.75),
),
'semi-monthly': (
( 132, 0.00, 0.00),
( 1839, 0.00, 3.35),
( 4266, 57.18, 6.60),
( 8755, 217.37, 7.60),
('inf', 558.53, 8.75),
),
'monthly': (
( 265, 0.00, 0.00),
( 3677, 0.00, 3.35),
( 8531, 114.30, 6.60),
(17510, 434.67, 7.60),
('inf', 1117.07, 8.75),
),
'quarterly': (
( 794, 0.00, 0.00),
(11031, 0.00, 3.35),
(25594, 342.94, 6.60),
(52531, 1304.10, 7.60),
('inf', 3351.31, 8.75),
),
'annually': (
( 3175, 0.00, 0.00),
( 44125, 0.00, 3.35),
(102375, 1371.83, 6.60),
(210125, 5216.33, 7.60),
( 'inf', 13405.33, 8.75),
),
},
'married': {
'weekly': (
( 183, 0.00, 0.00),
( 1499, 0.00, 3.35),
( 3363, 44.09, 6.60),
( 5028, 167.11, 7.60),
('inf', 293.65, 8.75),
),
'bi-weekly': (
( 366, 0.00, 0.00),
( 2997, 0.00, 3.35),
( 6726, 88.14, 6.60),
(10057, 334.25, 7.60),
('inf', 587.41, 8.75),
),
'semi-monthly': (
( 397, 0.00, 0.00),
( 3247, 0.00, 3.35),
( 7286, 95.48, 6.60),
(10895, 362.05, 7.60),
('inf', 636.33, 8.75),
),
'monthly': (
( 794, 0.00, 0.00),
( 6494, 0.00, 3.35),
(14573, 190.95, 6.60),
(21790, 724.16, 7.60),
('inf', 1272.66, 8.75),
),
'quarterly': (
( 2381, 0.00, 0.00),
(19481, 0.00, 3.35),
(43719, 572.85, 6.60),
(65719, 2172.56, 7.60),
('inf', 3817.96, 8.75),
),
'annually': (
( 9525, 0.00, 0.00),
( 77925, 0.00, 3.35),
(174875, 2291.40, 6.60),
(261475, 8690.10, 7.60),
( 'inf', 15271.70, 8.75),
),
},
}</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Partners and Contribution Registers -->

View File

@@ -2,58 +2,52 @@
<odoo>
<!-- Wage Base -->
<data noupdate="1">
<record id="rule_parameter_us_wa_suta_wage_base_2019" model="hr.payroll.rate">
<field name="name">US WA Washington SUTA Wage Base</field>
<field name="code">us_wa_suta_wage_base</field>
<field name="parameter_value">49800.0</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_suta_wage_base_2020" model="hr.payroll.rate">
<field name="name">US WA Washington SUTA Wage Base</field>
<field name="code">us_wa_suta_wage_base</field>
<field name="parameter_value">52700.00</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_suta_wage_base_2021" model="hr.payroll.rate">
<field name="name">US WA Washington SUTA Wage Base</field>
<field name="code">us_wa_suta_wage_base</field>
<field name="parameter_value">56500.0</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<data noupdate="1">
<record id="rule_parameter_us_wa_fml_wage_base_2019" model="hr.payroll.rate">
<field name="name">US WA Washington FML Wage Base</field>
<field name="code">us_wa_fml_wage_base</field>
<field name="parameter_value">132900.00</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_fml_wage_base_2020" model="hr.payroll.rate">
<field name="name">US WA Washington FML Wage Base</field>
<field name="code">us_wa_fml_wage_base</field>
<field name="parameter_value">137700.00</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_fml_wage_base_2021" model="hr.payroll.rate">
<field name="name">US WA Washington FML Wage Base</field>
<field name="code">us_wa_fml_wage_base</field>
<field name="parameter_value">142800.00</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Rate -->
<data noupdate="1">
<record id="rule_parameter_us_wa_suta_rate_2019" model="hr.payroll.rate">
<field name="name">US WA Washington SUTA Rate</field>
<field name="code">us_wa_suta_rate</field>
<field name="parameter_value">1.18</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_suta_rate_2020" model="hr.payroll.rate">
<field name="name">US WA Washington SUTA Rate</field>
<field name="code">us_wa_suta_rate</field>
<field name="parameter_value">1.0</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_suta_rate_2021" model="hr.payroll.rate">
<field name="name">US WA Washington SUTA Rate</field>
<field name="code">us_wa_suta_rate</field>
<field name="parameter_value">2.16</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<data noupdate="1">
<record id="rule_parameter_us_wa_fml_rate_2019" model="hr.payroll.rate">
<field name="name">US WA Washington FML Rate (Total)</field>
<field name="code">us_wa_fml_rate</field>
<field name="parameter_value">0.4</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_fml_rate_2020" model="hr.payroll.rate">
<field name="name">US WA Washington FML Rate (Total)</field>
<field name="code">us_wa_fml_rate</field>
@@ -63,33 +57,33 @@
</data>
<data noupdate="1">
<record id="rule_parameter_us_wa_fml_rate_ee_2019" model="hr.payroll.rate">
<field name="name">US WA Washington FML Rate (Employee)</field>
<field name="code">us_wa_fml_rate_ee</field>
<field name="parameter_value">66.33</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_fml_rate_ee_2020" model="hr.payroll.rate">
<field name="name">US WA Washington FML Rate (Employee)</field>
<field name="code">us_wa_fml_rate_ee</field>
<field name="parameter_value">66.33</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_fml_rate_ee_2021" model="hr.payroll.rate">
<field name="name">US WA Washington FML Rate (Employee)</field>
<field name="code">us_wa_fml_rate_ee</field>
<field name="parameter_value">63.33</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<data noupdate="1">
<record id="rule_parameter_us_wa_fml_rate_er_2019" model="hr.payroll.rate">
<field name="name">US WA Washington FML Rate (Employer)</field>
<field name="code">us_wa_fml_rate_er</field>
<field name="parameter_value">33.67</field>
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_fml_rate_er_2020" model="hr.payroll.rate">
<field name="name">US WA Washington FML Rate (Employer)</field>
<field name="code">us_wa_fml_rate_er</field>
<field name="parameter_value">33.67</field>
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
</record>
<record id="rule_parameter_us_wa_fml_rate_er_2021" model="hr.payroll.rate">
<field name="name">US WA Washington FML Rate (Employer)</field>
<field name="code">us_wa_fml_rate_er</field>
<field name="parameter_value">36.67</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Partners and Contribution Registers -->

View File

@@ -2,18 +2,18 @@
<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>
<record id="rule_parameter_us_wy_suta_wage_base_2021" 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">27300.00</field>
<field name="date_from" eval="datetime(2021, 1, 1).date()"/>
</record>
</data>
<!-- Rate -->

View File

@@ -38,7 +38,8 @@ def me_maine_state_income_withholding(payslip, categories, worked_days, inputs):
exemption_amt = allowances * personal_exemption
last = 0.0
standard_deduction_amt = 0.0
for row in standard_deduction:
for row in standard_deduction: #Standard_deduction is a set so looping through without giving it order isn't working
amt, flat_amt = row
if taxable_income < 82900:
standard_deduction_amt = flat_amt

View File

@@ -4,127 +4,146 @@ from . import common
from . import test_special
from . import test_us_payslip_2019
from . import test_us_payslip_2020
from . import test_us_payslip_2021
from . import test_us_ak_alaska_payslip_2019
from . import test_us_ak_alaska_payslip_2020
from . import test_us_ak_alaska_payslip_2021
from . import test_us_al_alabama_payslip_2019
from . import test_us_al_alabama_payslip_2020
from . import test_us_al_alabama_payslip_2021
from . import test_us_ar_arkansas_payslip_2019
from . import test_us_ar_arkansas_payslip_2020
from . import test_us_ar_arkansas_payslip_2021
from . import test_us_az_arizona_payslip_2019
from . import test_us_az_arizona_payslip_2020
from . import test_us_az_arizona_payslip_2021
from . import test_us_ca_california_payslip_2019
from . import test_us_ca_california_payslip_2020
from . import test_us_ca_california_payslip_2021
from . import test_us_co_colorado_payslip_2020
from . import test_us_co_colorado_payslip_2021
from . import test_us_ct_connecticut_payslip_2019
from . import test_us_ct_connecticut_payslip_2020
from . import test_us_ct_connecticut_payslip_2021
from . import test_us_de_delaware_payslip_2020
from . import test_us_de_delaware_payslip_2021
from . import test_us_fl_florida_payslip_2019
from . import test_us_fl_florida_payslip_2020
from . import test_us_fl_florida_payslip_2021
from . import test_us_ga_georgia_payslip_2019
from . import test_us_ga_georgia_payslip_2020
from . import test_us_ga_georgia_payslip_2021
from . import test_us_hi_hawaii_payslip_2019
from . import test_us_hi_hawaii_payslip_2020
from . import test_us_hi_hawaii_payslip_2021
from . import test_us_ia_iowa_payslip_2019
from . import test_us_ia_iowa_payslip_2020
from . import test_us_ia_iowa_payslip_2021
from . import test_us_id_idaho_payslip_2019
from . import test_us_id_idaho_payslip_2020
from . import test_us_id_idaho_payslip_2021
from . import test_us_il_illinois_payslip_2019
from . import test_us_il_illinois_payslip_2020
from . import test_us_il_illinois_payslip_2021
from . import test_us_in_indiana_payslip_2020
from . import test_us_in_indiana_payslip_2021
from . import test_us_ky_kentucky_payslip_2020
from . import test_us_ky_kentucky_payslip_2021
from . import test_us_ks_kansas_payslip_2020
from . import test_us_ks_kansas_payslip_2021
from . import test_us_la_louisiana_payslip_2019
from . import test_us_la_louisiana_payslip_2020
from . import test_us_la_louisiana_payslip_2021
from . import test_us_me_maine_payslip_2020
from . import test_us_me_maine_payslip_2021
from . import test_us_mi_michigan_payslip_2019
from . import test_us_mi_michigan_payslip_2020
from . import test_us_mi_michigan_payslip_2021
from . import test_us_mn_minnesota_payslip_2019
from . import test_us_mn_minnesota_payslip_2020
from . import test_us_mn_minnesota_payslip_2021
from . import test_us_mo_missouri_payslip_2019
from . import test_us_mo_missouri_payslip_2020
from . import test_us_mo_missouri_payslip_2021
from . import test_us_ms_mississippi_payslip_2019
from . import test_us_ms_mississippi_payslip_2020
from . import test_us_ms_mississippi_payslip_2021
from . import test_us_mt_montana_payslip_2019
from . import test_us_mt_montana_payslip_2020
from . import test_us_mt_montana_payslip_2021
from . import test_us_nc_northcarolina_payslip_2019
from . import test_us_nc_northcarolina_payslip_2020
from . import test_us_nc_northcarolina_payslip_2021
from . import test_us_nd_north_dakota_payslip_2020
from . import test_us_nd_north_dakota_payslip_2021
from . import test_us_ne_nebraska_payslip_2020
from . import test_us_ne_nebraska_payslip_2021
from . import test_us_nh_new_hampshire_payslip_2020
from . import test_us_nh_new_hampshire_payslip_2021
from . import test_us_nj_newjersey_payslip_2019
from . import test_us_nj_newjersey_payslip_2020
from . import test_us_nj_newjersey_payslip_2021
from . import test_us_nm_new_mexico_payslip_2020
from . import test_us_nm_new_mexico_payslip_2021
from . import test_us_nv_nevada_payslip_2020
from . import test_us_nv_nevada_payslip_2021
from . import test_us_ny_new_york_payslip_2019
from . import test_us_ny_new_york_payslip_2020
from . import test_us_ny_new_york_payslip_2021
from . import test_us_oh_ohio_payslip_2019
from . import test_us_oh_ohio_payslip_2020
from . import test_us_oh_ohio_payslip_2021
from . import test_us_ok_oklahoma_payslip_2020
from . import test_us_ok_oklahoma_payslip_2021
from . import test_us_pa_pennsylvania_payslip_2019
from . import test_us_pa_pennsylvania_payslip_2020
from . import test_us_pa_pennsylvania_payslip_2021
from . import test_us_ri_rhode_island_payslip_2020
from . import test_us_ri_rhode_island_payslip_2021
from . import test_us_sc_south_carolina_payslip_2019
from . import test_us_sc_south_carolina_payslip_2020
from . import test_us_sc_south_carolina_payslip_2021
from . import test_us_sd_south_dakota_payslip_2020
from . import test_us_sd_south_dakota_payslip_2021
from . import test_us_tn_tennessee_payslip_2020
from . import test_us_tn_tennessee_payslip_2021
from . import test_us_tx_texas_payslip_2019
from . import test_us_tx_texas_payslip_2020
from . import test_us_tx_texas_payslip_2021
from . import test_us_us_utah_payslip_2020
from . import test_us_us_utah_payslip_2021
from . import test_us_vt_vermont_payslip_2020
from . import test_us_vt_vermont_payslip_2021
from . import test_us_va_virginia_payslip_2019
from . import test_us_va_virginia_payslip_2020
from . import test_us_va_virginia_payslip_2021
from . import test_us_wa_washington_payslip_2019
from . import test_us_wa_washington_payslip_2020
from . import test_us_wa_washington_payslip_2021
from . import test_us_wv_west_virginia_payslip_2020
from . import test_us_wv_west_virginia_payslip_2021
from . import test_us_wi_wisconsin_payslip_2020
from . import test_us_wi_wisconsin_payslip_2021
from . import test_us_wy_wyoming_payslip_2019
from . import test_us_wy_wyoming_payslip_2020
from . import test_us_wy_wyoming_payslip_2021

View File

@@ -7,7 +7,7 @@ class TestSpecial(TestUsPayslip):
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 = self._createPayslip(employee, '2020-01-01', '2020-01-14')
payslip.compute_sheet()
def test_payslip_sum_behavior(self):
@@ -27,8 +27,8 @@ class TestSpecial(TestUsPayslip):
'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')
ytd_category = payslip.sum_category('test_sum_behavior', '2021-01-01', '2022-01-01')
ytd_rule = payslip.sum('test_sum_behavior', '2021-01-01', '2022-01-01')
result = 0.0
if ytd_category != ytd_rule:
# error
@@ -43,7 +43,7 @@ elif ytd_rule == 0.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 = self._createPayslip(employee, '2020-12-30', '2021-01-12')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertEqual(cats['test_sum_behavior'], 1.0)
@@ -52,7 +52,7 @@ elif ytd_rule == 0.0:
# 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 = self._createPayslip(employee, '2021-01-13', '2021-01-27')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertEqual(cats['test_sum_behavior'], 1.0)
@@ -60,7 +60,7 @@ elif ytd_rule == 0.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 = self._createPayslip(employee, '2021-01-13', '2021-01-27')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertEqual(cats['test_sum_behavior'], 0.0)
@@ -104,14 +104,14 @@ result += payslip.sum_category('ALW', str(year) + '-01-01', str(year+1) + '-01-0
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 = self._createPayslip(employee, '2021-01-01', '2021-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 = self._createPayslip(employee, '2021-01-15', '2021-01-27')
payslip.compute_sheet()
cats = self._getCategories(payslip)
rules = self._getRules(payslip)

View File

@@ -1,61 +0,0 @@
# 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)

View 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 = 43600.00
AK_UNEMP = 2.57
AK_UNEMP_EE = 0.5
def test_2021_taxes(self):
self._test_er_suta('AK', self.AK_UNEMP, date(2021, 1, 1), wage_base=self.AK_UNEMP_MAX_WAGE)
self._test_ee_suta('AK', self.AK_UNEMP_EE, date(2021, 1, 1), wage_base=self.AK_UNEMP_MAX_WAGE)

View File

@@ -1,264 +0,0 @@
# 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)

View File

@@ -0,0 +1,36 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsALPayslip(TestUsPayslip):
# Taxes and Rates
AL_UNEMP_MAX_WAGE = 8000.00
AL_UNEMP = 2.70
def _test_sit(self, wage, exempt, exemptions, additional_withholding, dependent, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('AL'),
al_a4_sit_exemptions=exempt,
state_income_tax_exempt=exemptions,
state_income_tax_additional_withholding=additional_withholding,
al_a4_sit_dependents=dependent,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('AL', self.AL_UNEMP, date(2021, 1, 1), wage_base=self.AL_UNEMP_MAX_WAGE)
self._test_sit(10000.0, 'S', False, 0.0, 1.0, 'weekly', date(2021, 1, 1), 349.37)
self._test_sit(850.0, 'M', False, 0.0, 2.0, 'weekly', date(2021, 1, 1), 30.00)
self._test_sit(5000.0, 'H', False, 0.0, 2.0, 'bi-weekly', date(2021, 1, 1), 191.33)
self._test_sit(20000.0, 'MS', False, 2.0, 0, 'monthly', date(2021, 1, 1), 758.86)
self._test_sit(5500.0, '', True, 2.0, 150, 'weekly', date(2021, 1, 1), 0.00)

View File

@@ -1,72 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsARPayslip(TestUsPayslip):
# https://www.dfa.arkansas.gov/images/uploads/incomeTaxOffice/whformula.pdf Calculation based on this file.
AR_UNEMP_MAX_WAGE = 10000.00
AR_UNEMP = -3.2 / 100.0
AR_INC_TAX = -0.0535
def test_taxes_monthly(self):
salary = 2127.0
schedule_pay = 'monthly'
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('AR'),
state_income_tax_additional_withholding=0.0,
ar_ar4ec_sit_allowances=2.0,
state_income_tax_exempt=False,
schedule_pay='monthly')
self._log('2019 Arkansas tax first payslip weekly:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
# Not exempt from rule 1 or rule 2 - unemployment wages., and actual unemployment.
self.assertPayrollEqual(cats['ER_US_SUTA'], salary * self.AR_UNEMP)
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_AR_UNEMP_wages = self.AR_UNEMP_MAX_WAGE - salary if (self.AR_UNEMP_MAX_WAGE - 2*salary < salary) else salary
# We reached the cap of 10000.0 in the first payslip.
self._log('2019 Arkansas 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_AR_UNEMP_wages * self.AR_UNEMP)
def test_additional_withholding(self):
salary = 5000.0
schedule_pay = 'monthly'
pay_periods = 12
allowances = 2
# TODO: comment on how it was calculated
test_ar_amt = 2598.60
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('AR'),
state_income_tax_additional_withholding=100.0,
ar_ar4ec_sit_allowances=2.0,
state_income_tax_exempt=False,
schedule_pay='monthly')
self._log('2019 Arkansas 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.AR_UNEMP)
# TODO: change to hand the test_ar_amt already be divided by pay periods
self.assertPayrollAlmostEqual(cats['EE_US_SIT'], -round(test_ar_amt / pay_periods) - 100)
process_payslip(payslip)

View File

@@ -0,0 +1,35 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsARPayslip(TestUsPayslip):
# Taxes and Rates
AR_UNEMP_MAX_WAGE = 10000.0
AR_UNEMP = 3.2
def _test_sit(self, wage, exemptions, allowances, additional_withholding, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('AR'),
state_income_tax_exempt=exemptions,
state_income_tax_additional_withholding=additional_withholding,
ar_ar4ec_sit_allowances=allowances,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('AR', self.AR_UNEMP, date(2021, 1, 1), wage_base=self.AR_UNEMP_MAX_WAGE)
self._test_sit(5000.0, True, 0.0, 0, 'monthly', date(2021, 1, 1), 0.0)
self._test_sit(5000.0, False, 0.0, 0, 'monthly', date(2021, 1, 1), 220.0)
self._test_sit(700.0, False, 0.0, 150, 'weekly', date(2021, 1, 1), 175.0)
self._test_sit(7000.0, False, 2.0, 0, 'semi-monthly', date(2021, 1, 1), 395.0)
self._test_sit(3000.0, False, 1.0, 0, 'bi-weekly', date(2021, 1, 1), 141.0)

View File

@@ -1,72 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsAZPayslip(TestUsPayslip):
# TAXES AND RATES
AZ_UNEMP_MAX_WAGE = 7000.00
AZ_UNEMP = -(2.00 / 100.0)
def test_taxes_with_additional_wh(self):
salary = 15000.00
schedule_pay = 'weekly'
withholding_percentage = 5.1
percent_wh = (5.10 / 100) # 5.1%
additional_wh = 12.50
wh_to_test = -((percent_wh * salary) + additional_wh)
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('AZ'),
state_income_tax_additional_withholding=12.50,
az_a4_sit_withholding_percentage=withholding_percentage,
schedule_pay=schedule_pay)
self._log('2019 Arizona 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'], self.AZ_UNEMP_MAX_WAGE * self.AZ_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh_to_test)
process_payslip(payslip)
remaining_AZ_UNEMP_wages = 0.0 # We already reached max unemployment wages.
self._log('2019 Arizona 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_AZ_UNEMP_wages * self.AZ_UNEMP)
def test_taxes_monthly(self):
salary = 1000.00
schedule_pay = 'monthly'
withholding_percentage = 2.7
percent_wh = (2.70 / 100) # 2.7%
additional_wh = 0.0
wh_to_test = -((percent_wh * salary) + additional_wh)
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('AZ'),
state_income_tax_additional_withholding=0.0,
az_a4_sit_withholding_percentage=withholding_percentage,
schedule_pay=schedule_pay)
self._log('2019 Arizona 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'], salary * self.AZ_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh_to_test)
process_payslip(payslip)

View File

@@ -0,0 +1,34 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsAZPayslip(TestUsPayslip):
# Taxes and Rates
AZ_UNEMP_MAX_WAGE = 7000.0
AZ_UNEMP = 2.0
def _test_sit(self, wage, additional_withholding, withholding_percent, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('AZ'),
state_income_tax_additional_withholding=additional_withholding,
az_a4_sit_withholding_percentage=withholding_percent,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('AZ', self.AZ_UNEMP, date(2021, 1, 1), wage_base=self.AZ_UNEMP_MAX_WAGE)
self._test_sit(1000.0, 0.0, 2.70, 'monthly', date(2021, 1, 1), 27.0)
self._test_sit(1000.0, 10.0, 2.70, 'monthly', date(2021, 1, 1), 37.0)
self._test_sit(15000.0, 0.0, 3.60, 'weekly', date(2021, 1, 1), 540.0)
self._test_sit(8000.0, 0.0, 4.20, 'semi-monthly', date(2021, 1, 1), 336.0)
self._test_sit(8000.0, 0.0, 0.00, 'semi-monthly', date(2021, 1, 1), 0.0)

View File

@@ -1,245 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsCAPayslip(TestUsPayslip):
###
# Taxes and Rates
###
CA_MAX_WAGE = 7000
CA_UIT = -3.5 / 100.0
CA_ETT = -0.1 / 100.0
CA_SDI = -1.0 / 100.0
# Examples from https://www.edd.ca.gov/pdf_pub_ctr/20methb.pdf
def test_example_a(self):
salary = 210
schedule_pay = 'weekly'
allowances = 1
additional_allowances = 0
wh = 0.00
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('CA'),
ca_de4_sit_filing_status='single',
state_income_tax_additional_withholding=0.0,
ca_de4_sit_allowances=allowances,
ca_de4_sit_additional_allowances=additional_allowances,
schedule_pay=schedule_pay)
self._log('2019 California tax first payslip:')
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.CA_UIT + self.CA_ETT))
self.assertPayrollEqual(cats['EE_US_SUTA'], salary * self.CA_SDI)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
def test_example_b(self):
salary = 1250
schedule_pay = 'bi-weekly'
allowances = 2
additional_allowances = 1
# Example B
subject_to_withholding = salary - 38
taxable_income = subject_to_withholding - 339
computed_tax = (taxable_income - 632) * 0.022 + 6.95 # 6.95 Marginal Amount
wh = computed_tax - 9.65 # two exemption allowances
wh = -wh
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('CA'),
ca_de4_sit_filing_status='married',
state_income_tax_additional_withholding=0.0,
ca_de4_sit_allowances=allowances,
ca_de4_sit_additional_allowances=additional_allowances,
schedule_pay=schedule_pay)
self._log('2019 California tax first payslip:')
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.CA_UIT + self.CA_ETT))
self.assertPayrollEqual(cats['EE_US_SUTA'], salary * self.CA_SDI)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
def test_example_c(self):
salary = 4100
schedule_pay = 'monthly'
allowances = 5
additional_allowances = 0.0
wh = -9.3
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('CA'),
ca_de4_sit_filing_status='married',
state_income_tax_additional_withholding=0.0,
ca_de4_sit_allowances=allowances,
ca_de4_sit_additional_allowances=additional_allowances,
schedule_pay=schedule_pay)
self._log('2019 California tax first payslip:')
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.CA_UIT + self.CA_ETT))
self.assertPayrollEqual(cats['EE_US_SUTA'], salary * self.CA_SDI)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_ca_uit_wages = self.CA_MAX_WAGE - salary if (self.CA_MAX_WAGE - 2 * salary < salary) \
else salary
self._log('2019 California tax second payslip:')
payslip = self._createPayslip(employee, '2019-02-01', '2019-02-28')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], round((remaining_ca_uit_wages * (self.CA_UIT + self.CA_ETT)), 2))
def test_example_d(self):
salary = 800
schedule_pay = 'weekly'
allowances = 3
additional_allowances = 0
wh = -3.18
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('CA'),
ca_de4_sit_filing_status='head_household',
state_income_tax_additional_withholding=0.0,
ca_de4_sit_allowances=allowances,
ca_de4_sit_additional_allowances=additional_allowances,
schedule_pay=schedule_pay)
self._log('2019 California tax first payslip:')
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.CA_UIT + self.CA_ETT))
self.assertPayrollEqual(cats['EE_US_SUTA'], salary * self.CA_SDI)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_ca_uit_wages = self.CA_MAX_WAGE - salary if (self.CA_MAX_WAGE - 2 * salary < salary) \
else salary
self._log('2019 California tax second payslip:')
payslip = self._createPayslip(employee, '2019-02-01', '2019-02-28')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], round((remaining_ca_uit_wages * (self.CA_UIT + self.CA_ETT)), 2))
def test_example_e(self):
salary = 1800
schedule_pay = 'semi-monthly'
allowances = 4
additional_allowances = 0
wh = -3.08
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('CA'),
ca_de4_sit_filing_status='married',
state_income_tax_additional_withholding=0.0,
ca_de4_sit_allowances=allowances,
ca_de4_sit_additional_allowances=additional_allowances,
schedule_pay=schedule_pay)
self._log('2019 California tax first payslip:')
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.CA_UIT + self.CA_ETT))
self.assertPayrollEqual(cats['EE_US_SUTA'], salary * self.CA_SDI)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_ca_uit_wages = self.CA_MAX_WAGE - salary if (self.CA_MAX_WAGE - 2 * salary < salary) \
else salary
self._log('2019 California tax second payslip:')
payslip = self._createPayslip(employee, '2019-02-01', '2019-02-28')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], round((remaining_ca_uit_wages * (self.CA_UIT + self.CA_ETT)), 2))
def test_example_f(self):
salary = 45000
schedule_pay = 'annually'
allowances = 4
additional_allowances = 0
wh = -113.85
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('CA'),
ca_de4_sit_filing_status='married',
state_income_tax_additional_withholding=0.0,
ca_de4_sit_allowances=allowances,
ca_de4_sit_additional_allowances=additional_allowances,
schedule_pay=schedule_pay)
self._log('2019 California tax first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], self.CA_MAX_WAGE * (self.CA_UIT + self.CA_ETT))
self.assertPayrollEqual(cats['EE_US_SUTA'], self.CA_MAX_WAGE * self.CA_SDI)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)

View File

@@ -0,0 +1,43 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsCAPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
CA_UNEMP_MAX_WAGE = 7000.0 # Note that this is used for SDI and FLI as well
CA_UIT = 3.4
CA_ETT = 0.1
CA_SDI = 1.2
def _test_sit(self, wage, filing_status, allowances, additional_allowances, additional_withholding, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('CA'),
ca_de4_sit_filing_status=filing_status,
ca_de4_sit_allowances=allowances,
ca_de4_sit_additional_allowances=additional_allowances,
state_income_tax_additional_withholding=additional_withholding,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollAlmostEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding if filing_status else 0.0)
def test_2021_taxes_example1(self):
combined_er_rate = self.CA_UIT + self.CA_ETT
self._test_er_suta('CA', combined_er_rate, date(2021, 1, 1), wage_base=self.CA_UNEMP_MAX_WAGE)
self._test_ee_suta('CA', self.CA_SDI, date(2021, 1, 1), wage_base=self.CA_UNEMP_MAX_WAGE, relaxed=True)
# these expected values come from examples in https://edd.ca.gov/pdf_pub_ctr/21methb.pdf
self._test_sit(210.0, 'single', 1, 0, 0, 'weekly', date(2021, 1, 1), 0.00)
self._test_sit(1250.0, 'married', 2, 1, 0, 'bi-weekly', date(2021, 1, 1), 0.82)
self._test_sit(4100.0, 'married', 5, 0, 0, 'monthly', date(2021, 1, 1), 0.13)
self._test_sit(800.0, 'head_household', 3, 0, 0, 'weekly', date(2021, 1, 1), 2.05)
self._test_sit(1800.0, 'married', 4, 0, 0, 'semi-monthly', date(2021, 1, 1), 0.24)
self._test_sit(45000.0, 'married', 4, 0, 0, 'annually', date(2021, 1, 1), 45.45)
self._test_sit(45000.0, 'married', 4, 0, 20.0, 'annually', date(2021, 1, 1), 65.45)
self._test_sit(6000.0, '', 4, 0, 20.0, 'annually', date(2021, 1, 1), 0.00)

View File

@@ -0,0 +1,37 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsCOPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
CO_UNEMP_MAX_WAGE = 13600.0
CO_UNEMP = 1.7
def _test_sit(self, wage, filing_status, additional_withholding, schedule_pay, date_start, expected_withholding, state_income_tax_exempt=False):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('CO'),
fed_941_fit_w4_filing_status=filing_status,
state_income_tax_additional_withholding=additional_withholding,
state_income_tax_exempt=state_income_tax_exempt,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('CO', self.CO_UNEMP, date(2021, 1, 1), wage_base=self.CO_UNEMP_MAX_WAGE)
self._test_sit(5000.0, 'married', 0.0, 'semi-monthly', date(2021, 1, 1), 216.07)
self._test_sit(800.0, 'single', 0.0, 'weekly', date(2021, 1, 1), 33.48)
self._test_sit(20000.0, 'married', 0.0, 'quarterly', date(2021, 1, 1), 833.4)
self._test_sit(20000.0, 'married', 10.0, 'quarterly', date(2021, 1, 1), 843.4)
self._test_sit(20000.0, 'married', 0.0, 'quarterly', date(2021, 1, 1), 0.0, True)
self._test_sit(800.0, '', 0.0, 'weekly', date(2021, 1, 1), 0.00)

View File

@@ -1,121 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsCTPayslip(TestUsPayslip):
# TAXES AND RATES
CT_UNEMP_MAX_WAGE = 15000.00
CT_UNEMP = -(3.40 / 100.0)
def test_taxes_weekly_with_additional_wh(self):
# Tax tables can be found here:
# https://portal.ct.gov/-/media/DRS/Publications/pubsip/2019/IP-2019(1).pdf?la=en
# Step 1 - Wages per period -> 10000.00
salary = 10000.00
# Step 2 and 3 - Annual wages -> 10000.00 * 52.0 -> 520000.0
schedule_pay = 'weekly'
# Step 4 Employee Withholding Code -> A
wh_code = 'a'
# Step 5 - Use annual wages and withholding code with table for exemption amount.
# exemption_amt = 0 since highest bracket.
# Step 6 - Subtract 5 from 3 for taxable income.
# taxable income = 520000.00 since we do not have an exemption.
# Step 7 - Determine initial amount from table
# initial = 31550 + ((6.99 / 100) * (520000.00 - 500000.00))
# 32948.0
# Step 8 - Determine the tax rate phase out add back from table.
# phase_out = 200
# Step 9 - Determine the recapture amount from table.
# Close to top, but not top. -> 2900
# Step 10 - Add Step 7, 8, 9
# 32948.0 + 200 + 2900.00 - > 36048.0
# Step 11 - Determine decimal amount from personal tax credits.
# We get no tax credit.
# Step 12 - Multiple Step 10 by 1.00 - Step 11
# 36048.0 * 1.00 = 36048.0
# Step 13 - Divide by the number of pay periods.
# 36048.0 / 52.0 = 693.23
# Step 14 & 15 & 16- Add / Subtract the additional or under withholding amount. Then Add this to the amount
# for withholding per period.
additional_wh = 12.50
# 693.23 + 12.50 ->
wh = -705.73
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('CT'),
ct_w4na_sit_code=wh_code,
state_income_tax_additional_withholding=additional_wh,
schedule_pay=schedule_pay)
self._log('2019 Connecticut 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.CT_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
remaining_CT_UNEMP_wages = 5000.00 # We already reached the maximum wage for unemployment insurance.
self._log('2019 Connecticut 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_CT_UNEMP_wages * self.CT_UNEMP)
def test_taxes_weekly_with_different_code(self):
# Tax tables can be found here:
# https://portal.ct.gov/-/media/DRS/Publications/pubsip/2019/IP-2019(1).pdf?la=en
# Step 1 - Wages per period -> 15000.00
salary = 15000.00
# Step 2 and 3 - Annual wages -> 15000.00 * 12.0 -> 180000.0
schedule_pay = 'monthly'
# Step 4 Employee Withholding Code -> B
wh_code = 'b'
# Step 5 - Use annual wages and withholding code with table for exemption amount.
# exemption_amt = 0 since highest bracket.
# Step 6 - Subtract 5 from 3 for taxable income.
# taxable income = 180000.0 since we do not have an exemption.
# Step 7 - Determine initial amount from table
# initial = 8080 + ((6.00 / 100) * (180000.0 - 160000))
# 9280.0
# Step 8 - Determine the tax rate phase out add back from table.
# phase_out = 320
# Step 9 - Determine the recapture amount from table.
# Bottom -> 0
# Step 10 - Add Step 7, 8, 9
# 9280.0 + 320 + 0 - > 9600.0
# Step 11 - Determine decimal amount from personal tax credits.
# We get no tax credit.
# Step 12 - Multiple Step 10 by 1.00 - Step 11
# 9600.0 * 1.00 = 9600.0
# Step 13 - Divide by the number of pay periods.
# 9600.0 / 12.0 = 800.0
# Step 14 & 15 & 16- Add / Subtract the additional or under withholding amount. Then Add this to the amount
# for withholding per period.
additional_wh = 15.00
# 800.0 + 15.00 ->
wh = -815.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('CT'),
ct_w4na_sit_code=wh_code,
state_income_tax_additional_withholding=additional_wh,
schedule_pay=schedule_pay)
self._log('2019 Connecticut 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.CT_UNEMP_MAX_WAGE * self.CT_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)

View File

@@ -0,0 +1,35 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsCTPayslip(TestUsPayslip):
# Taxes and Rates
CT_UNEMP_MAX_WAGE = 15000.0
CT_UNEMP = 3.2
def _test_sit(self, wage, withholding_code, additional_withholding, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('CT'),
ct_w4na_sit_code=withholding_code,
state_income_tax_additional_withholding=additional_withholding,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('CT', self.CT_UNEMP, date(2021, 1, 1), wage_base=self.CT_UNEMP_MAX_WAGE)
self._test_sit(10000.0, 'a', 0.0, 'weekly', date(2021, 1, 1), 693.23)
self._test_sit(12000.0, 'b', 15.0, 'bi-weekly', date(2021, 1, 1), 688.85)
self._test_sit(5000.0, 'f', 15.0, 'monthly', date(2021, 1, 1), 230.25)
self._test_sit(15000.0, 'c', 0.0, 'monthly', date(2021, 1, 1), 783.33)
self._test_sit(18000.0, 'b', 0.0, 'weekly', date(2021, 1, 1), 1254.35)
self._test_sit(500.0, 'd', 0.0, 'weekly', date(2021, 1, 1), 21.15)

View File

@@ -0,0 +1,36 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsDEPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
DE_UNEMP_MAX_WAGE = 16500.0
DE_UNEMP = 1.50
# Calculation based on section 17. https://revenue.delaware.gov/employers-guide-withholding-regulations-employers-duties/
def _test_sit(self, wage, filing_status, additional_withholding, dependents, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('DE'),
de_w4_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_withholding,
de_w4_sit_dependent=dependents,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('DE', self.DE_UNEMP, date(2021, 1, 1), wage_base=self.DE_UNEMP_MAX_WAGE)
self._test_sit(480.77, 'single', 0.0, 1.0, 'weekly', date(2021, 1, 1), 13.88)
self._test_sit(5000.0, 'single', 0.0, 2.0, 'monthly', date(2021, 1, 1), 211.93)
self._test_sit(5000.0, 'single', 10.0, 1.0, 'monthly', date(2021, 1, 1), 231.1)
self._test_sit(20000.0, 'married', 0.0, 3.0, 'quarterly', date(2021, 1, 1), 876.0)

View File

@@ -1,84 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
from odoo.addons.l10n_us_hr_payroll.models.hr_contract import USHRContract
class TestUsFlPayslip(TestUsPayslip):
###
# 2019 Taxes and Rates
###
FL_UNEMP_MAX_WAGE = 7000.0
FL_UNEMP = -2.7 / 100.0
def test_2019_taxes(self):
salary = 5000.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('FL'))
self._log('2019 Florida tax first payslip:')
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.FL_UNEMP)
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_fl_unemp_wages = self.FL_UNEMP_MAX_WAGE - salary if (self.FL_UNEMP_MAX_WAGE - 2*salary < salary) \
else salary
self._log('2019 Florida tax second payslip:')
payslip = self._createPayslip(employee, '2019-02-01', '2019-02-28')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], remaining_fl_unemp_wages * self.FL_UNEMP)
def test_2019_taxes_with_external(self):
salary = 5000.0
external_wages = 6000.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
external_wages=external_wages,
state_id=self.get_us_state('FL'))
self._log('2019 Forida_external tax first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], (self.FL_UNEMP_MAX_WAGE - external_wages) * self.FL_UNEMP)
def test_2019_taxes_with_state_exempt(self):
salary = 5000.0
external_wages = 6000.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
external_wages=external_wages,
futa_type=USHRContract.FUTA_TYPE_BASIC,
state_id=self.get_us_state('FL'))
self._log('2019 Forida_external tax first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats.get('ER_US_SUTA', 0.0), 0.0)

View File

@@ -0,0 +1,16 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date
from .common import TestUsPayslip
class TestUsFlPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
FL_UNEMP_MAX_WAGE = 7000.0
FL_UNEMP = 2.9
def test_2021_taxes(self):
# Only has state unemployment
self._test_er_suta('FL', self.FL_UNEMP, date(2021, 1, 1), wage_base=self.FL_UNEMP_MAX_WAGE)

View File

@@ -1,135 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsGAPayslip(TestUsPayslip):
# TAXES AND RATES
GA_UNEMP_MAX_WAGE = 9500.00
GA_UNEMP = -(2.70 / 100.0)
def test_taxes_weekly_single_with_additional_wh(self):
salary = 15000.00
schedule_pay = 'weekly'
allowances = 1
filing_status = 'single'
additional_wh = 12.50
# Hand Calculated Amount to Test
# Step 1 - Subtract standard deduction from wages. Std Deduct for single weekly is 88.50
# step1 = 15000.00 - 88.50 = 14911.5
# Step 2 - Subtract personal allowance from step1. Allowance for single weekly is 51.92
# step2 = step1 - 51.92 = 14859.58
# Step 3 - Subtract amount for dependents. Weekly dependent allowance is 57.50
# step3 = 14859.58 - 57.50 = 14802.08
# Step 4 -Determine wh amount from tables
# step4 = 4.42 + ((5.75 / 100.00) * (14802.08 - 135.00))
# Add additional_wh
# wh = 847.7771 + 12.50 = 860.2771
wh = -860.28
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('GA'),
ga_g4_sit_dependent_allowances=allowances,
ga_g4_sit_additional_allowances=0,
ga_g4_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_wh,
schedule_pay=schedule_pay)
self.assertEqual(contract.schedule_pay, 'weekly')
self._log('2019 Georgia 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'], self.GA_UNEMP_MAX_WAGE * self.GA_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
remaining_GA_UNEMP_wages = 0.0 # We already reached max unemployment wages.
self._log('2019 Georgia 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_GA_UNEMP_wages * self.GA_UNEMP)
def test_taxes_monthly_head_of_household(self):
salary = 25000.00
schedule_pay = 'monthly'
allowances = 2
filing_status = 'head of household'
additional_wh = 15.00
# Hand Calculated Amount to Test
# Step 1 - Subtract standard deduction from wages. Std Deduct for head of household monthly is 383.50
# step1 = 25000.00 - 383.50 = 24616.5
# Step 2 - Subtract personal allowance from step1. Allowance for head of household monthly is 225.00
# step2 = 24616.5 - 225.00 = 24391.5
# Step 3 - Subtract amount for dependents. Weekly dependent allowance is 250.00
# step3 = 24391.5 - (2 * 250.00) = 23891.5
# Step 4 - Determine wh amount from tables
# step4 = 28.33 + ((5.75 / 100.00) * (23891.5 - 833.00)) = 1354.19375
# Add additional_wh
# wh = 1354.19375 + 15.00 = 1369.19375
wh = -1369.19
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('GA'),
ga_g4_sit_dependent_allowances=allowances,
ga_g4_sit_additional_allowances=0,
ga_g4_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_wh,
schedule_pay=schedule_pay)
self.assertEqual(contract.schedule_pay, 'monthly')
self._log('2019 Georgia 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.GA_UNEMP_MAX_WAGE * self.GA_UNEMP)
self.assertPayrollAlmostEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
remaining_GA_UNEMP_wages = 0.0 # We already reached max unemployment wages.
self._log('2019 Georgia 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_GA_UNEMP_wages * self.GA_UNEMP)
def test_taxes_exempt(self):
salary = 25000.00
schedule_pay = 'monthly'
allowances = 2
filing_status = ''
additional_wh = 15.00
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('GA'),
ga_g4_sit_dependent_allowances=allowances,
ga_g4_sit_additional_allowances=0,
ga_g4_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_wh,
schedule_pay=schedule_pay)
self._log('2019 Georgia tax first payslip exempt:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats.get('EE_US_SIT', 0), 0)

View File

@@ -0,0 +1,39 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsGAPayslip(TestUsPayslip):
# TAXES AND RATES
GA_UNEMP_MAX_WAGE = 9500.00
GA_UNEMP = 2.70
# Example calculated based on https://dor.georgia.gov/employers-tax-guide 2021_employer tax gauide
def _test_sit(self, wage, filing_status, additional_withholding, dependent_allowances, additional_allowances,
schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('GA'),
ga_g4_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_withholding,
ga_g4_sit_dependent_allowances=dependent_allowances,
ga_g4_sit_additional_allowances=additional_allowances,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollAlmostEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('GA', self.GA_UNEMP, date(2021, 1, 1), wage_base=self.GA_UNEMP_MAX_WAGE)
self._test_sit(15000.0, 'single', 12.50, 1, 0, 'weekly', date(2021, 1, 1), 860.28)
self._test_sit(25000.0, 'head of household', 15.00, 2, 0, 'monthly', date(2021, 1, 1), 1369.19)
self._test_sit(425.0, 'married filing separate', 0.0, 1, 0, 'weekly', date(2021, 1, 1), 11.45)
self._test_sit(3000.0, 'single', 0.00, 1, 1, 'quarterly', date(2021, 1, 1), 0.0)
self._test_sit(2500.0, '', 0.00, 1, 1, 'quarterly', date(2021, 1, 1), 0.0)

View File

@@ -1,93 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsHIPayslip(TestUsPayslip):
# TAXES AND RATES
HI_UNEMP_MAX_WAGE = 46800.00
HI_UNEMP = -(2.40 / 100.0)
def test_taxes_single_weekly(self):
salary = 375.00
schedule_pay = 'weekly'
filing_status = 'single'
allowances = 3
wh_to_check = -15.3
# Taxable income = (wage * payperiod ) - (allownaces * personal_exemption)
# taxable_income = (375 * 52) - (3 * 1144) = 16068
# Last = row[0] = 692
# withholding = row[1] + ((row[2] / 100.0) * (taxable_income - last))
# withholding = 682 + ((6.80 / 100.0 ) * (16068 - 14400)) = 795.42
# wh_to_check = 795.42/52 = 15.3
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('HI'),
hi_hw4_sit_filing_status=filing_status,
state_income_tax_additional_withholding=0.0,
hi_hw4_sit_allowances=allowances,
schedule_pay=schedule_pay)
self._log('2019 Hawaii tax first payslip single:')
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.HI_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh_to_check)
process_payslip(payslip)
remaining_id_unemp_wages = self.HI_UNEMP_MAX_WAGE - salary if (self.HI_UNEMP_MAX_WAGE - 2*salary < salary) \
else salary
self._log('2019 Hawaii tax second payslip single:')
payslip = self._createPayslip(employee, '2019-02-01', '2019-02-28')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], remaining_id_unemp_wages * self.HI_UNEMP)
def test_taxes_married_monthly(self):
salary = 5000.00
schedule_pay = 'monthly'
filing_status = 'married'
allowances = 2
wh_to_check = -287.1
# Taxable income = (wage * payperiod ) - (allownaces * personal_exemption)
# taxable_income = (5000 * 12) - (2 * 1144) = 57712
# Last = row[0] = 48000
# withholding = row[1] + ((row[2] / 100.0) * (taxable_income - last))
# withholding = 2707 + ((7.70 / 100.0 ) * (57712 - 48000)) = 3445.112
# wh_to_check = 3445.112/52 = 287.092
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('HI'),
hi_hw4_sit_filing_status=filing_status,
state_income_tax_additional_withholding=0.0,
hi_hw4_sit_allowances=allowances,
schedule_pay=schedule_pay)
self._log('2019 Hawaii 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'], salary * self.HI_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh_to_check)
process_payslip(payslip)
remaining_id_unemp_wages = self.HI_UNEMP_MAX_WAGE - salary if (self.HI_UNEMP_MAX_WAGE - 2*salary < salary) \
else salary
self._log('2019 Hawaii 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_id_unemp_wages * self.HI_UNEMP)

View File

@@ -0,0 +1,37 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsHIPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
HI_UNEMP_MAX_WAGE = 47400.00
HI_UNEMP = 5.2
def _test_sit(self, wage, filing_status, additional_withholding, allowances, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('HI'),
hi_hw4_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_withholding,
hi_hw4_sit_allowances=allowances,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('HI', self.HI_UNEMP, date(2021, 1, 1), wage_base=self.HI_UNEMP_MAX_WAGE)
self._test_sit(375.0, 'single', 0.0, 3.0, 'weekly', date(2021, 1, 1), 15.3)
self._test_sit(5000.0, 'married', 0.0, 2.0, 'monthly', date(2021, 1, 1), 287.1)
self._test_sit(5000.0, 'married', 10.0, 2.0, 'monthly', date(2021, 1, 1), 297.1)
self._test_sit(50000.0, 'head_of_household', 0.0, 3.0, 'weekly', date(2021, 1, 1), 3933.65)
self._test_sit(750.0, 'single', 10.0, 3.0, 'bi-weekly', date(2021, 1, 1), 40.59)
self._test_sit(3000.0, '', 0.0, 3.0, 'weekly', date(2021, 1, 1), 0.00)

View File

@@ -1,152 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsIAPayslip(TestUsPayslip):
IA_UNEMP_MAX_WAGE = 30600
IA_UNEMP = -1.0 / 100.0
IA_INC_TAX = -0.0535
def test_taxes_weekly(self):
wages = 30000.00
schedule_pay = 'weekly'
allowances = 1
additional_wh = 0.00
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wages,
state_id=self.get_us_state('IA'),
state_income_tax_additional_withholding=additional_wh,
ia_w4_sit_allowances=allowances,
schedule_pay=schedule_pay)
self._log('2019 Iowa tax first payslip weekly:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
# T1 is the gross taxable wages for the pay period minus the Federal withholding amount. We add the federal
# withholding amount because it is calculated in the base US payroll module as a negative
# t1 = 30000 - (10399.66) = 19600.34
t1_to_test = wages + cats['EE_US_941_FIT']
self.assertPayrollAlmostEqual(t1_to_test, 19600.34)
# T2 is T1 minus our standard deduction which is a table of flat rates dependent on the number of allowances.
# In our case, we have a weekly period which on the table has a std deduct. of $32.50 for 0 or 1 allowances,
# and 80.00 of 2 or more allowances.
standard_deduction = 32.50 # The allowance tells us what standard_deduction amount to use.
# t2 = 19600.34 - 32.50 = 19567.84
t2_to_test = t1_to_test - standard_deduction
self.assertPayrollAlmostEqual(t2_to_test, 19567.84)
# T3 is T2 multiplied by the income rates in the large table plus a flat fee for that bracket.
# 1153.38 is the bracket floor. 8.53 is the rate, and 67.63 is the flat fee.
# t3 = 1638.38
t3_to_test = ((t2_to_test - 1153.38) * (8.53 / 100)) + 67.63
self.assertPayrollAlmostEqual(t3_to_test, 1638.38)
# T4 is T3 minus a flat amount determined by pay period * the number of deductions. For 2019, our weekly
# deduction amount per allowance is 0.77
# t4 = 1638.38 - 0.77 = 155.03
t4_to_test = t3_to_test - (0.77 * allowances)
self.assertPayrollAlmostEqual(t4_to_test, 1637.61)
# t5 is our T4 plus the additional withholding per period
# t5 = 1637.61 + 0.0
# Convert to negative as well.
t5_to_test = -t4_to_test - additional_wh
self.assertPayrollAlmostEqual(t5_to_test, -1637.61)
self.assertPayrollEqual(cats['ER_US_SUTA'], wages * self.IA_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], t5_to_test)
# Make a new payslip, this one will have maximums
remaining_IA_UNEMP_wages = self.IA_UNEMP_MAX_WAGE - wages if (self.IA_UNEMP_MAX_WAGE - 2*wages < wages) \
else wages
self._log('2019 Iowa 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'], wages * self.IA_UNEMP)
def test_taxes_biweekly(self):
wages = 3000.00
schedule_pay = 'bi-weekly'
allowances = 1
additional_wh = 0.00
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wages,
state_id=self.get_us_state('IA'),
state_income_tax_additional_withholding=additional_wh,
ia_w4_sit_allowances=allowances,
schedule_pay=schedule_pay)
self._log('2019 Iowa tax first payslip bi-weekly:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
# T1 is the gross taxable wages for the pay period minus the Federal withholding amount. We add the federal
# withholding amount because it is calculated in the base US payroll module as a negative
t1_to_test = wages + cats['EE_US_941_FIT']
# T2 is T1 minus our standard deduction which is a table of flat rates dependent on the number of allowances.
# In our case, we have a biweekly period which on the table has a std deduct. of $65.00 for 0 or 1 allowances,
# and $160.00 of 2 or more allowances.
standard_deduction = 65.00 # The allowance tells us what standard_deduction amount to use.
t2_to_test = t1_to_test - standard_deduction
# T3 is T2 multiplied by the income rates in the large table plus a flat fee for that bracket.
t3_to_test = ((t2_to_test - 2306.77) * (8.53 / 100)) + 135.28
# T4 is T3 minus a flat amount determined by pay period * the number of deductions. For 2019, our weekly
# deduction amount per allowance is 0.77
t4_to_test = t3_to_test - (1.54 * allowances)
# t5 is our T4 plus the additional withholding per period
t5_to_test = -t4_to_test - additional_wh
self.assertPayrollEqual(cats['ER_US_SUTA'], wages * self.IA_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], t5_to_test - additional_wh)
process_payslip(payslip)
def test_taxes_with_external_weekly(self):
wages = 2500.00
schedule_pay = 'weekly'
allowances = 1
additional_wh = 0.00
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wages,
state_id=self.get_us_state('IA'),
state_income_tax_additional_withholding=additional_wh,
ia_w4_sit_allowances=allowances,
schedule_pay=schedule_pay)
self._log('2019 Iowa external tax first payslip external weekly:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
# T1 is the gross taxable wages for the pay period minus the Federal withholding amount. We add the federal
# withholding amount because it is calculated in the base US payroll module as a negative
t1_to_test = wages + cats['EE_US_941_FIT']
# T2 is T1 minus our standard deduction which is a table of flat rates dependent on the number of allowances.
# In our case, we have a weekly period which on the table has a std deduct. of $32.50 for 0 or 1 allowances,
# and 80.00 of 2 or more allowances.
standard_deduction = 32.50 # The allowance tells us what standard_deduction amount to use.
t2_to_test = t1_to_test - standard_deduction
# T3 is T2 multiplied by the income rates in the large table plus a flat fee for that bracket.
t3_to_test = ((t2_to_test - 1153.38) * (8.53 / 100)) + 67.63
# T4 is T3 minus a flat amount determined by pay period * the number of deductions. For 2019, our weekly
# deduction amount per allowance is 0.77
t4_to_test = t3_to_test - (0.77 * allowances)
# t5 is our T4 plus the additional withholding per period
t5_to_test = -t4_to_test - additional_wh
self.assertPayrollEqual(cats['ER_US_SUTA'], wages * self.IA_UNEMP)
self.assertPayrollAlmostEqual(cats['EE_US_SIT'], t5_to_test)
process_payslip(payslip)

View File

@@ -0,0 +1,36 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsIAPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
IA_UNEMP_MAX_WAGE = 32400.0
IA_UNEMP = 1.0
def _test_sit(self, wage, exempt, additional_withholding, allowances, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('IA'),
state_income_tax_exempt=exempt,
state_income_tax_additional_withholding=additional_withholding,
ia_w4_sit_allowances=allowances,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollAlmostEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('IA', self.IA_UNEMP, date(2021, 1, 1), wage_base=self.IA_UNEMP_MAX_WAGE)
self._test_sit(2100.0, False, 0.0, 3.0, 'bi-weekly', date(2021, 1, 1), 79.31)
self._test_sit(3000.0, True, 10.0, 1.0, 'bi-weekly', date(2021, 1, 1), 0.00)
self._test_sit(300.0, False, 0.0, 1.0, 'weekly', date(2021, 1, 1), 6.14)
self._test_sit(5000.0, False, 0.0, 1.0, 'monthly', date(2021, 1, 1), 218.06)
self._test_sit(7500.0, False, 10.0, 2.0, 'semi-monthly', date(2021, 1, 1), 421.71)

View File

@@ -1,85 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsIDPayslip(TestUsPayslip):
# TAXES AND RATES
ID_UNEMP_MAX_WAGE = 40000.00
ID_UNEMP = -(1.00 / 100.0)
def test_taxes_single_biweekly(self):
salary = 1212.00
schedule_pay = 'bi-weekly'
filing_status = 'single'
allowances = 4
# SEE https://tax.idaho.gov/i-1026.cfm?seg=compute for example calculations
wh_to_check = -10.00
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('ID'),
id_w4_sit_filing_status=filing_status,
id_w4_sit_allowances=allowances,
schedule_pay=schedule_pay)
self._log('2019 Idaho tax first payslip single:')
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.ID_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh_to_check)
process_payslip(payslip)
remaining_id_unemp_wages = self.ID_UNEMP_MAX_WAGE - salary if (self.ID_UNEMP_MAX_WAGE - 2*salary < salary) \
else salary
self._log('2019 Idaho tax second payslip single:')
payslip = self._createPayslip(employee, '2019-02-01', '2019-02-28')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], remaining_id_unemp_wages * self.ID_UNEMP)
def test_taxes_married_monthly(self):
salary = 5000.00
schedule_pay = 'monthly'
filing_status = 'married'
allowances = 2
# ICTCAT says monthly allowances are 246.67
# we have 2 so 246.67 * 2 = 493.34
# 5000.00 - 493.34 = 4506.66
# Wh is 89$ plus 6.925% over 3959,00
# 126.92545499999999 - > 127.0
wh_to_check = -127.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('ID'),
id_w4_sit_filing_status=filing_status,
id_w4_sit_allowances=allowances,
schedule_pay=schedule_pay)
self._log('2019 Idaho 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'], salary * self.ID_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh_to_check)
process_payslip(payslip)
remaining_id_unemp_wages = self.ID_UNEMP_MAX_WAGE - salary if (self.ID_UNEMP_MAX_WAGE - 2*salary < salary) \
else salary
self._log('2019 Idaho 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_id_unemp_wages * self.ID_UNEMP)

View File

@@ -0,0 +1,35 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsIDPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
ID_UNEMP_MAX_WAGE = 43000.00
ID_UNEMP = 1.0
def _test_sit(self, wage, filing_status, allowances, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('ID'),
id_w4_sit_filing_status=filing_status,
id_w4_sit_allowances=allowances,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('ID', self.ID_UNEMP, date(2021, 1, 1), wage_base=self.ID_UNEMP_MAX_WAGE)
self._test_sit(1212.0, 'single', 4.0, 'bi-weekly', date(2021, 1, 1), 10.0)
self._test_sit(10000.0, 'married', 1.0, 'annually', date(2021, 1, 1), 0.0)
self._test_sit(52000.0, 'married', 4.0, 'monthly', date(2021, 1, 1), 3345.0)
self._test_sit(5000.0, 'head of household', 0.0, 'semi-monthly', date(2021, 1, 1), 300.0)
self._test_sit(5900.0, 'single', 5.0, 'weekly', date(2021, 1, 1), 367.0)

View File

@@ -1,71 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsILPayslip(TestUsPayslip):
# TAXES AND RATES
IL_UNEMP_MAX_WAGE = 12960.00
IL_UNEMP = -(3.175 / 100.0)
def test_taxes_monthly(self):
salary = 15000.00
schedule_pay = 'monthly'
basic_allowances = 1
additional_allowances = 1
flat_rate = (4.95 / 100)
wh_to_test = -(flat_rate * (salary - ((basic_allowances * 2275 + additional_allowances * 1000) / 12.0)))
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('IL'),
state_income_tax_additional_withholding=0.0,
il_w4_sit_basic_allowances=1.0,
il_w4_sit_additional_allowances=1.0,
schedule_pay='monthly')
self._log('2019 Illinois 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.IL_UNEMP_MAX_WAGE * self.IL_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh_to_test)
process_payslip(payslip)
remaining_IL_UNEMP_wages = 0.0 # We already reached max unemployment wages.
self._log('2019 Illinois 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_IL_UNEMP_wages * self.IL_UNEMP)
def test_taxes_with_additional_wh(self):
salary = 15000.00
schedule_pay = 'monthly'
basic_allowances = 1
additional_allowances = 1
additional_wh = 15.0
flat_rate = (4.95 / 100)
wh_to_test = -(flat_rate * (salary - ((basic_allowances * 2275 + additional_allowances * 1000) / 12.0)) + additional_wh)
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('IL'),
state_income_tax_additional_withholding=15.0,
il_w4_sit_basic_allowances=1.0,
il_w4_sit_additional_allowances=1.0,
schedule_pay='monthly')
self._log('2019 Illinois 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.IL_UNEMP_MAX_WAGE * self.IL_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh_to_test)

View File

@@ -0,0 +1,36 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsILPayslip(TestUsPayslip):
# Taxes and Rates
IL_UNEMP_MAX_WAGE = 12960.0
IL_UNEMP = 3.175
def _test_sit(self, wage, additional_withholding, basic_allowances, additional_allowances, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('IL'),
state_income_tax_additional_withholding=additional_withholding,
il_w4_sit_basic_allowances=basic_allowances,
il_w4_sit_additional_allowances=additional_allowances,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('IL', self.IL_UNEMP, date(2021, 1, 1), wage_base=self.IL_UNEMP_MAX_WAGE, relaxed=True)
self._test_sit(800.0, 0.0, 2, 2, 'weekly', date(2021, 1, 1), 33.17)
self._test_sit(800.0, 10.0, 2, 2, 'weekly', date(2021, 1, 1), 43.17)
self._test_sit(2500.0, 0.0, 1, 1, 'monthly', date(2021, 1, 1), 109.83)
self._test_sit(2500.0, 0.0, 0, 0, 'monthly', date(2021, 1, 1), 123.75)
self._test_sit(3000.0, 15.0, 0, 0, 'quarterly', date(2021, 1, 1), 163.50)

View File

@@ -0,0 +1,36 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsINPayslip(TestUsPayslip):
###
# 2020 Taxes and Rates
###
IN_UNEMP_MAX_WAGE = 9500.0
IN_UNEMP = 2.5
# Calculation based on https://www.in.gov/dor/files/dn01.pdf
def _test_sit(self, wage, additional_withholding, personal_exemption, dependent_exemption, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('IN'),
state_income_tax_additional_withholding=additional_withholding,
in_w4_sit_personal_exemption=personal_exemption,
in_w4_sit_dependent_exemption=dependent_exemption,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2020_taxes_example(self):
self._test_er_suta('IN', self.IN_UNEMP, date(2020, 1, 1), wage_base=self.IN_UNEMP_MAX_WAGE)
self._test_sit(800.0, 0.0, 5.0, 3.0, 'weekly', date(2020, 1, 1), 19.94)
self._test_sit(800.0, 10.0, 5.0, 3.0, 'weekly', date(2020, 1, 1), 29.94)
self._test_sit(9000.0, 0.0, 4.0, 3.0, 'monthly', date(2020, 1, 1), 267.82)
self._test_sit(10000.0, 0.0, 2.0, 2.0, 'bi-weekly', date(2020, 1, 1), 316.79)

View File

@@ -0,0 +1,36 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsKSPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
KS_UNEMP_MAX_WAGE = 14000.0
KS_UNEMP = 2.7
# Calculation based on example https://revenue.ky.gov/Forms/42A003(T)%20(12-2019)%202120%20Tax%20Tables.pdf
def _test_sit(self, wage, filing_status, allowances, additional_withholding, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('KS'),
ks_k4_sit_filing_status=filing_status,
ks_k4_sit_allowances=allowances,
state_income_tax_additional_withholding=additional_withholding,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollAlmostEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('KS', self.KS_UNEMP, date(2021, 1, 1), wage_base=self.KS_UNEMP_MAX_WAGE)
self._test_sit(6250, 'married', 2, 0, 'semi-monthly', date(2021, 1, 1), 290.00)
self._test_sit(5000, 'single', 1, 0, 'monthly', date(2021, 1, 1), 222.00)
self._test_sit(1500, 'married', 0, 0, 'bi-weekly', date(2021, 1, 1), 39.00)
self._test_sit(750, 'single', 2, 10, 'weekly', date(2021, 1, 1), 36.00)

View File

@@ -0,0 +1,36 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsKYPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
KY_UNEMP_MAX_WAGE = 11100.0
KY_UNEMP = 2.7
# Calculation based on example https://revenue.ky.gov/Forms/42A003(T)%20(12-2019)%202120%20Tax%20Tables.pdf
def _test_sit(self, wage, additional_withholding, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('KY'),
state_income_tax_additional_withholding=additional_withholding,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('KY', self.KY_UNEMP, date(2021, 1, 1), wage_base=self.KY_UNEMP_MAX_WAGE)
# page 8 of https://revenue.ky.gov/Software-Developer/Software%20Development%20Documents/2021%20Withholding%20Tax%20Tables%20-%20Computer%20Formual%2042A003(T)(12-20)(10-15-20%20DRAFT).pdf
self._test_sit(3020, 0.0, 'monthly', date(2021, 1, 1), 139.79)
self._test_sit(1500, 0.0, 'bi-weekly', date(2021, 1, 1), 69.83)
self._test_sit(1500, 10.0, 'bi-weekly', date(2021, 1, 1), 79.83)
self._test_sit(750, 00.0, 'weekly', date(2021, 1, 1), 34.91)
self._test_sit(7000, 0.0, 'semi-monthly', date(2021, 1, 1), 344.39)

View File

@@ -1,91 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsLAPayslip(TestUsPayslip):
# TAXES AND RATES
LA_UNEMP_MAX_WAGE = 7700.00
LA_UNEMP = -(1.14 / 100.0)
def test_taxes_single_weekly(self):
salary = 700.00
schedule_pay = 'weekly'
filing_status = 'single'
exemptions = 1
dependents = 2
additional_withholding = 0
# SEE http://revenue.louisiana.gov/TaxForms/1306(1_12)TF.pdf for example calculations
# wh_to test is 19.42
# Our algorithm correctly rounds whereas theirs does it prematurely.
wh_to_check = -19.43
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('LA'),
la_l4_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_withholding,
la_l4_sit_exemptions=exemptions,
la_l4_sit_dependents=dependents,
schedule_pay=schedule_pay)
self._log('2019 Louisiana 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.LA_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh_to_check)
process_payslip(payslip)
remaining_la_unemp_wages = self.LA_UNEMP_MAX_WAGE - salary if (self.LA_UNEMP_MAX_WAGE - 2*salary < salary) \
else salary
self._log('2019 Louisiana 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_la_unemp_wages * self.LA_UNEMP)
def test_taxes_married_biweekly(self):
salary = 4600.00
schedule_pay = 'bi-weekly'
filing_status = 'married'
exemptions = 2
dependents = 3
additional_withholding = 0
# SEE http://revenue.louisiana.gov/TaxForms/1306(1_12)TF.pdf for example calculations
# wh_to test is 157.12
wh_to_check = -157.12
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('LA'),
la_l4_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_withholding,
la_l4_sit_exemptions=exemptions,
la_l4_sit_dependents=dependents,
schedule_pay=schedule_pay)
self._log('2019 Louisiana tax first payslip bi-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.LA_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh_to_check)
process_payslip(payslip)
remaining_la_unemp_wages = self.LA_UNEMP_MAX_WAGE - salary if (self.LA_UNEMP_MAX_WAGE - 2*salary < salary) \
else salary
self._log('2019 Louisiana tax second payslip bi-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_la_unemp_wages * self.LA_UNEMP)

View File

@@ -0,0 +1,36 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsLAPayslip(TestUsPayslip):
###
# 2020 Taxes and Rates
###
LA_UNEMP_MAX_WAGE = 7700.0
LA_UNEMP = 1.14
# Calculation based on http://revenue.louisiana.gov/TaxForms/1306(1_12)TF.pdf
def _test_sit(self, wage, filing_status, additional_withholding, exemptions, dependents, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('LA'),
la_l4_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_withholding,
la_l4_sit_exemptions=exemptions,
la_l4_sit_dependents=dependents,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollAlmostEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2020_taxes_example(self):
self._test_er_suta('LA', self.LA_UNEMP, date(2020, 1, 1), wage_base=self.LA_UNEMP_MAX_WAGE)
self._test_sit(700.0, 'single', 0.0, 1.0, 2.0, 'weekly', date(2020, 1, 1), 19.43)
self._test_sit(4600.0, 'married', 0.0, 2.0, 3.0, 'bi-weekly', date(2020, 1, 1), 157.12)
self._test_sit(6000.0, 'single', 10.0, 2.0, 3.0, 'monthly', date(2020, 1, 1), 219.08)

View File

@@ -0,0 +1,42 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsMEPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
ME_UNEMP_MAX_WAGE = 12000.0
ME_UNEMP = 2.31
# Calculation based on this file page.6 and 7 https://www.maine.gov/revenue/forms/with/2021/20_WH_Tab&Instructions.pdf
def _test_sit(self, wage, filing_status, additional_withholding, exempt, allowances, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('ME'),
me_w4me_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_withholding,
state_income_tax_exempt=exempt,
me_w4me_sit_allowances=allowances,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollAlmostEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
# todo: not calculating correctly according to https://www.maine.gov/revenue/sites/maine.gov.revenue/files/inline-files/21_wh_tab_instr_1.pdf
# See examples on page 7
self._test_er_suta('ME', self.ME_UNEMP, date(2021, 1, 1), wage_base=self.ME_UNEMP_MAX_WAGE)
self._test_sit(300.0, 'single', 0.0, False, 2, 'weekly', date(2021, 1, 1), 0.0)
self._test_sit(1800.0, 'single', 0.0, False, 2, 'bi-weekly', date(2021, 1, 1), 6.00)
self._test_sit(4500.0, 'married', 0.0, True, 0, 'weekly', date(2021, 1, 1), 0.00)
self._test_sit(4500.0, 'married', 0.0, False, 2, 'monthly', date(2021, 1, 1), 113.00)
self._test_sit(4500.0, 'married', 10.0, False, 2, 'weekly', date(2021, 1, 1), 287.00)
self._test_sit(7000.0, '', 10.0, False, 2, 'weekly', date(2021, 1, 1), 0.00)

View File

@@ -1,194 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsMIPayslip(TestUsPayslip):
# Taxes and Rates
MI_UNEMP_MAX_WAGE = 9500.0
MI_UNEMP = - 2.7 / 100.0
MI_INC_TAX = - 4.25 / 100.0
ANNUAL_EXEMPTION_AMOUNT = 4400.00
PAY_PERIOD_DIVISOR = {
'weekly': 52.0,
'bi-weekly': 26.0,
'semi-monthly': 24.0,
'monthly': 12.0
}
def test_2019_taxes_weekly(self):
salary = 5000.0
schedule_pay = 'weekly'
exemptions = 1
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MI'),
state_income_tax_additional_withholding=0.0,
mi_w4_sit_exemptions=1.0,
schedule_pay='weekly')
allowance_amount = self.ANNUAL_EXEMPTION_AMOUNT / self.PAY_PERIOD_DIVISOR[schedule_pay]
wh = -((salary - (allowance_amount * exemptions)) * -self.MI_INC_TAX)
self._log('2019 Michigan 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.MI_UNEMP)
self.assertPayrollAlmostEqual(cats['EE_US_SIT'], wh)
#
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_MI_UNEMP_wages = self.MI_UNEMP_MAX_WAGE - salary if (self.MI_UNEMP_MAX_WAGE - 2*salary < salary) \
else salary
self._log('2019 Michigan 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_MI_UNEMP_wages * self.MI_UNEMP)
def test_2019_taxes_biweekly(self):
salary = 5000.0
schedule_pay = 'bi-weekly'
allowance_amount = self.ANNUAL_EXEMPTION_AMOUNT / self.PAY_PERIOD_DIVISOR[schedule_pay]
exemption = 2
wh = -((salary - (allowance_amount * exemption)) * -self.MI_INC_TAX)
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MI'),
state_income_tax_additional_withholding=0.0,
mi_w4_sit_exemptions=2.0,
schedule_pay='bi-weekly')
self._log('2019 Michigan tax first payslip bi-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.MI_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_MI_UNEMP_wages = self.MI_UNEMP_MAX_WAGE - salary if (self.MI_UNEMP_MAX_WAGE - 2*salary < salary) \
else salary
self._log('2019 Michigan tax second payslip bi-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_MI_UNEMP_wages * self.MI_UNEMP)
def test_2019_taxes_semimonthly(self):
salary = 5000.0
schedule_pay = 'semi-monthly'
allowance_amount = self.ANNUAL_EXEMPTION_AMOUNT / self.PAY_PERIOD_DIVISOR[schedule_pay]
exemption = 1
wh = -((salary - (allowance_amount * exemption)) * -self.MI_INC_TAX)
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MI'),
state_income_tax_additional_withholding=0.0,
mi_w4_sit_exemptions=1.0,
schedule_pay='semi-monthly')
self._log('2019 Michigan tax first payslip semi-monthly:')
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.MI_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_MI_UNEMP_wages = self.MI_UNEMP_MAX_WAGE - salary if (self.MI_UNEMP_MAX_WAGE - 2 * salary < salary) \
else salary
self._log('2019 Michigan tax second payslip semi-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_MI_UNEMP_wages * self.MI_UNEMP)
def test_2019_taxes_monthly(self):
salary = 5000.0
schedule_pay = 'monthly'
allowance_amount = self.ANNUAL_EXEMPTION_AMOUNT / self.PAY_PERIOD_DIVISOR[schedule_pay]
exemption = 1
wh = -((salary - (allowance_amount * exemption)) * -self.MI_INC_TAX)
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MI'),
state_income_tax_additional_withholding=0.0,
mi_w4_sit_exemptions=1.0,
schedule_pay='monthly')
self._log('2019 Michigan 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'], salary * self.MI_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_MI_UNEMP_wages = self.MI_UNEMP_MAX_WAGE - salary if (
self.MI_UNEMP_MAX_WAGE - (2 * salary) < salary) \
else salary
self._log('2019 Michigan 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_MI_UNEMP_wages * self.MI_UNEMP)
def test_additional_withholding(self):
salary = 5000.0
schedule_pay = 'weekly'
allowance_amount = 0.0
allowance_amount = self.ANNUAL_EXEMPTION_AMOUNT / self.PAY_PERIOD_DIVISOR[schedule_pay]
additional_wh = 40.0
exemption = 1
wh = -(((salary - (allowance_amount * exemption)) * -self.MI_INC_TAX) + additional_wh)
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MI'),
state_income_tax_additional_withholding=40.0,
mi_w4_sit_exemptions=1.0,
schedule_pay='weekly')
self._log('2019 Michigan tax first payslip with additional withholding:')
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.MI_UNEMP)
self.assertPayrollAlmostEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)

View File

@@ -0,0 +1,35 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsMIPayslip(TestUsPayslip):
# Taxes and Rates
MI_UNEMP_MAX_WAGE = 9500.0
MI_UNEMP = 2.7
def _test_sit(self, wage, exemptions, additional_withholding, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('MI'),
mi_w4_sit_exemptions=exemptions,
state_income_tax_additional_withholding=additional_withholding,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('MI', self.MI_UNEMP, date(2021, 1, 1), wage_base=self.MI_UNEMP_MAX_WAGE)
self._test_sit(750.0, 1, 100.0, 'weekly', date(2021, 1, 1), 127.87)
self._test_sit(1750.0, 1, 0.0, 'bi-weekly', date(2021, 1, 1), 66.37)
self._test_sit(5000.0, 1, 5.0, 'semi-monthly', date(2021, 1, 1), 208.83)
self._test_sit(8000.0, 1, 5.0, 'monthly', date(2021, 1, 1), 327.65)
self._test_sit(5000.0, 2, 0.0, 'monthly', date(2021, 1, 1), 177.79)

View File

@@ -1,159 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsMNPayslip(TestUsPayslip):
# TAXES AND RATES
MN_UNEMP_MAX_WAGE = 34000.0
MN_UNEMP = -1.11 / 100.0
def test_taxes_weekly(self):
salary = 30000.0
# Hand Calculated Amount to Test
# Step 1 -> 30000.00 for wages per period Step 2 -> 52.0 for weekly -> 30000 * 52 -> 1560000
# Step 3 -> allowances * 4250.0 -> 4250.00 in this case.
# Step 4 -> Step 2 - Step 3 -> 1560000 - 4250.00 -> 1555750
# Step 5 -> using chart -> we have last row -> ((1555750 - 166290) * (9.85 / 100)) + 11717.65 -> 148579.46
# Step 6 -> Convert back to pay period amount and round - > 2857.297 - > 2857.0
# wh = 2857.0
wh = -2857.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MN'),
mn_w4mn_sit_filing_status='single',
state_income_tax_additional_withholding=0.0,
mn_w4mn_sit_allowances=1.0,
schedule_pay='weekly')
self._log('2019 Minnesota 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.MN_UNEMP)
self.assertPayrollAlmostEqual(cats['EE_US_SIT'], wh) # Test numbers are off by 1 penny
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_MN_UNEMP_wages = self.MN_UNEMP_MAX_WAGE - salary if (self.MN_UNEMP_MAX_WAGE - 2*salary < salary) \
else salary
self._log('2019 Minnesota 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_MN_UNEMP_wages * self.MN_UNEMP)
def test_taxes_married(self):
salary = 5000.00
# Hand Calculated Amount to Test
# Step 1 -> 5000.0 for wages per period Step 2 -> 52.0 for weekly -> 5000 * 52 -> 260,000
# Step 3 -> allowances * 4250.0 -> 4250.00 in this case.
# Step 4 -> Step 2 - Step 3 -> 260,000 - 4250.00 -> 255750.0
# For step five we used the married section
# Step 5 -> using chart -> we have 2nd last row -> ((255750 - 163070) * (7.85 / 100)) + 10199.33 ->
# Step 6 -> Convert back to pay period amount and round
# wh = 336.0
wh = -336.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MN'),
mn_w4mn_sit_filing_status='married',
state_income_tax_additional_withholding=0.0,
mn_w4mn_sit_allowances=1.0,
schedule_pay='weekly')
self._log('2019 Minnesota tax first payslip married:')
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.MN_UNEMP)
self.assertPayrollAlmostEqual(cats['EE_US_SIT'], wh)
def test_taxes_semimonthly(self):
salary = 6500.00
# Hand Calculated Amount to Test
# Step 1 -> 6500.00 for wages per period Step 2 -> 24 for semi-monthly -> 6500.00 * 24 -> 156000.00
# Step 3 -> allowances * 4250.0 -> 4250.00 in this case.
# Step 4 -> Step 2 - Step 3 -> 156000.00 - 4250.00 -> 151750.0
# Step 5 -> using chart -> we have 2nd last row -> ((151750.0- 89510) * (7.85 / 100)) + 5690.42 -> 10576.26
# Step 6 -> Convert back to pay period amount and round
# wh = -441
wh = -441.00
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MN'),
mn_w4mn_sit_filing_status='single',
state_income_tax_additional_withholding=0.0,
mn_w4mn_sit_allowances=1.0,
schedule_pay='semi-monthly')
self._log('2019 Minnesota tax first payslip semimonthly:')
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.MN_UNEMP)
self.assertPayrollAlmostEqual(cats['EE_US_SIT'], wh)
def test_tax_exempt(self):
salary = 5500.00
wh = 0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MN'),
mn_w4mn_sit_filing_status='',
state_income_tax_additional_withholding=0.0,
mn_w4mn_sit_allowances=2.0,
schedule_pay='weekly')
self._log('2019 Minnesota 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.MN_UNEMP)
self.assertPayrollAlmostEqual(cats['EE_US_SIT'], wh)
def test_additional_withholding(self):
salary = 5500.0
# Hand Calculated Amount to Test
# Step 1 -> 5500 for wages per period Step 2 -> 52 for weekly -> 5500 * 52 -> 286000.00
# Step 3 -> allowances * 4250.0 -> 8500 in this case.
# Step 4 -> Step 2 - Step 3 -> 286000.00 - 8500 -> 277500
# Step 5 -> using chart -> we have last row -> ((277500- 166290) * (9.85 / 100)) + 11717.65 -> 22671.835
# Step 6 -> Convert back to pay period amount and round
# wh = -436.0
# Add additional_withholding
# wh = -436.0 + 40.0
wh = -476.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MN'),
mn_w4mn_sit_filing_status='single',
state_income_tax_additional_withholding=40.0,
mn_w4mn_sit_allowances=2.0,
schedule_pay='weekly')
self._log('2019 Minnesota 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['ER_US_SUTA'], salary * self.MN_UNEMP)
self.assertPayrollAlmostEqual(cats['EE_US_SIT'], wh)

View File

@@ -0,0 +1,36 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsMNPayslip(TestUsPayslip):
# TAXES AND RATES
MN_UNEMP_MAX_WAGE = 35000.0
MN_UNEMP = 1.11
def _test_sit(self, wage, filing_status, allowances, additional_withholding, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('MN'),
mn_w4mn_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_withholding,
mn_w4mn_sit_allowances=allowances,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('MN', self.MN_UNEMP, date(2021, 1, 1), wage_base=self.MN_UNEMP_MAX_WAGE)
self._test_sit(5000.0, 'single', 1.0, 0.0, 'weekly', date(2021, 1, 1), 388.0)
self._test_sit(30000.0, 'single', 1.0, 0.0, 'weekly', date(2021, 1, 1), 2850.0)
self._test_sit(5000.0, 'married', 1.0, 0.0, 'weekly', date(2021, 1, 1), 325.0)
self._test_sit(6500.0, 'single', 1.0, 0.0, 'semi-monthly', date(2021, 1, 1), 428.0)
self._test_sit(5500.0, '', 2.0, 0.0, 'weekly', date(2021, 1, 1), 0.0)
self._test_sit(5500.0, 'single', 2.0, 40.0, 'weekly', date(2021, 1, 1), 469.0)

View File

@@ -1,188 +0,0 @@
from datetime import date
from .common import TestUsPayslip
class TestUsMoPayslip(TestUsPayslip):
# Calculations from http://dor.mo.gov/forms/4282_2019.pdf
SALARY = 12000.0
MO_UNEMP = -2.376 / 100.0
TAX = [
(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),
(999999999.0, 5.4),
]
def test_2019_taxes_single(self):
# Payroll Period Monthly
salary = self.SALARY
pp = 12.0
gross_salary = salary * pp
spouse_employed = False
# Single
standard_deduction = 12400.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MO'),
mo_mow4_sit_filing_status='single',
state_income_tax_additional_withholding=0.0,
schedule_pay='monthly')
self._log('2019 Missouri tax single first payslip:')
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.MO_UNEMP)
mo_taxable_income = gross_salary - standard_deduction
self._log('%s = %s - %s -' % (mo_taxable_income, gross_salary, standard_deduction))
remaining_taxable_income = mo_taxable_income
tax = 0.0
for amt, rate in self.TAX:
amt = float(amt)
rate = rate / 100.0
self._log(str(amt) + ' : ' + str(rate) + ' : ' + str(remaining_taxable_income))
if (remaining_taxable_income - amt) > 0.0 or (remaining_taxable_income - amt) == 0.0:
tax += rate * amt
else:
tax += rate * remaining_taxable_income
break
remaining_taxable_income = remaining_taxable_income - amt
tax = -tax
self._log('Computed annual tax: ' + str(tax))
tax = tax / pp
tax = round(tax)
self._log('Computed period tax: ' + str(tax))
self.assertPayrollEqual(cats['EE_US_SIT'], tax)
def test_2019_spouse_not_employed(self):
# Payroll Period Semi-monthly
salary = self.SALARY
pp = 24.0
gross_salary = salary * pp
# Married
standard_deduction = 24800.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MO'),
mo_mow4_sit_filing_status='married',
state_income_tax_additional_withholding=0.0,
schedule_pay='semi-monthly')
self._log('2019 Missouri tax first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
mo_taxable_income = gross_salary - standard_deduction
self._log(mo_taxable_income)
remaining_taxable_income = mo_taxable_income
tax = 0.0
for amt, rate in self.TAX:
amt = float(amt)
rate = rate / 100.0
self._log(str(amt) + ' : ' + str(rate) + ' : ' + str(remaining_taxable_income))
if (remaining_taxable_income - amt) > 0.0 or (remaining_taxable_income - amt) == 0.0:
tax += rate * amt
else:
tax += rate * remaining_taxable_income
break
remaining_taxable_income = remaining_taxable_income - amt
tax = -tax
self._log('Computed annual tax: ' + str(tax))
tax = tax / pp
tax = round(tax)
self._log('Computed period tax: ' + str(tax))
self.assertPayrollEqual(cats['EE_US_SIT'], tax)
def test_2019_head_of_household(self):
# Payroll Period Weekly
salary = self.SALARY
# Payroll Period Weekly
salary = self.SALARY
pp = 52.0
gross_salary = salary * pp
# Single HoH
standard_deduction = 18650.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MO'),
mo_mow4_sit_filing_status='head_of_household',
state_income_tax_additional_withholding=0.0,
schedule_pay='weekly')
self._log('2019 Missouri tax first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
mo_taxable_income = gross_salary - standard_deduction
self._log(mo_taxable_income)
remaining_taxable_income = mo_taxable_income
tax = 0.0
for amt, rate in self.TAX:
amt = float(amt)
rate = rate / 100.0
self._log(str(amt) + ' : ' + str(rate) + ' : ' + str(remaining_taxable_income))
if (remaining_taxable_income - amt) > 0.0 or (remaining_taxable_income - amt) == 0.0:
tax += rate * amt
else:
tax += rate * remaining_taxable_income
break
remaining_taxable_income = remaining_taxable_income - amt
tax = -tax
self._log('Computed annual tax: ' + str(tax))
tax = tax / pp
tax = round(tax)
self._log('Computed period tax: ' + str(tax))
self.assertPayrollEqual(cats['EE_US_SIT'], tax)
def test_2019_underflow(self):
# Payroll Period Weekly
salary = 200.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MO'))
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['EE_US_SIT'], 0.0)

View File

@@ -0,0 +1,34 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsMoPayslip(TestUsPayslip):
# Calculations from http://dor.mo.gov/forms/4282_2021.pdf
MO_UNEMP_MAX_WAGE = 11000.0
MO_UNEMP = 2.7
def _test_sit(self, wage, filing_status, additional_withholding, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('MO'),
mo_mow4_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_withholding,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollAlmostEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('MO', self.MO_UNEMP, date(2021, 1, 1), wage_base=self.MO_UNEMP_MAX_WAGE)
self._test_sit(750.0, 'single', 0.0, 'weekly', date(2021, 1, 1), 24.00)
self._test_sit(2500.0, 'single', 5.0, 'bi-weekly', date(2021, 1, 1), 107.00)
self._test_sit(7000.0, 'married', 0.0, 'monthly', date(2021, 1, 1), 249.00)
self._test_sit(5000.0, 'married', 10.0, 'semi-monthly', date(2021, 1, 1), 216.00)
self._test_sit(6000.0, '', 0.0, 'monthly', date(2021, 1, 1), 0.00)

View File

@@ -1,94 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip
class TestUsMsPayslip(TestUsPayslip):
# Calculations from https://www.dor.ms.gov/Documents/Computer%20Payroll%20Accounting%201-2-19.pdf
MS_UNEMP = -1.2 / 100.0
def test_2019_taxes_one(self):
salary = 1250.0
ms_89_350_exemption = 11000.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MS'),
ms_89_350_sit_filing_status='head_of_household',
ms_89_350_sit_exemption_value=ms_89_350_exemption,
state_income_tax_additional_withholding=0.0,
schedule_pay='semi-monthly')
self._log('2019 Mississippi tax single first payslip:')
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.MS_UNEMP)
STDED = 3400.0 # Head of Household
AGP = salary * 24 # Semi-Monthly
TI = AGP - (ms_89_350_exemption + STDED)
self.assertPayrollEqual(TI, 15600.0)
TAX = ((TI - 10000) * 0.05) + 290 # Over 10,000
self.assertPayrollEqual(TAX, 570.0)
ms_withhold = round(TAX / 24) # Semi-Monthly
self.assertPayrollEqual(cats['EE_US_SIT'], -ms_withhold)
def test_2019_taxes_one_exempt(self):
salary = 1250.0
ms_89_350_exemption = 11000.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MS'),
ms_89_350_sit_filing_status='',
ms_89_350_sit_exemption_value=ms_89_350_exemption,
state_income_tax_additional_withholding=0.0,
schedule_pay='semi-monthly')
self._log('2019 Mississippi tax single first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), 0.0)
def test_2019_taxes_additional(self):
salary = 1250.0
ms_89_350_exemption = 11000.0
additional = 40.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MS'),
ms_89_350_sit_filing_status='head_of_household',
ms_89_350_sit_exemption_value=ms_89_350_exemption,
state_income_tax_additional_withholding=additional,
schedule_pay='semi-monthly')
self._log('2019 Mississippi tax single first payslip:')
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.MS_UNEMP)
STDED = 3400.0 # Head of Household
AGP = salary * 24 # Semi-Monthly
TI = AGP - (ms_89_350_exemption + STDED)
self.assertPayrollEqual(TI, 15600.0)
TAX = ((TI - 10000) * 0.05) + 290 # Over 10,000
self.assertPayrollEqual(TAX, 570.0)
ms_withhold = round(TAX / 24) # Semi-Monthly
self.assertPayrollEqual(cats['EE_US_SIT'], -ms_withhold + -additional)

View File

@@ -0,0 +1,35 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsMsPayslip(TestUsPayslip):
# Calculations from https://www.dor.ms.gov/Documents/Computer%20Payroll%20Flowchart.pdf
MS_UNEMP = 1.0
MS_UNEMP_MAX_WAGE = 14000.0
def _test_sit(self, wage, filing_status, additional_withholding, exemption, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('MS'),
ms_89_350_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_withholding,
ms_89_350_sit_exemption_value=exemption,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollAlmostEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('MS', self.MS_UNEMP, date(2021, 1, 1), wage_base=self.MS_UNEMP_MAX_WAGE)
self._test_sit(1250.0, 'head_of_household', 0.0, 11000, 'semi-monthly', date(2021, 1, 1), 21.00)
self._test_sit(500.0, '', 5.0, 0, 'bi-weekly', date(2021, 1, 1), 0.00)
self._test_sit(12000.0, 'single', 0.0, 11000, 'monthly', date(2021, 1, 1), 522.00)
self._test_sit(2500.0, 'married', 5.0, 500, 'bi-weekly', date(2021, 1, 1), 110.00)

View File

@@ -1,139 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsMtPayslip(TestUsPayslip):
# Calculations from https://app.mt.gov/myrevenue/Endpoint/DownloadPdf?yearId=705
MT_UNEMP = -1.18 / 100.0
MT_UNEMP_AFT = -0.13 / 100.0
def test_2019_taxes_one(self):
# Payroll Period Semi-Monthly example
salary = 550
mt_mw4_exemptions = 5
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MT'),
mt_mw4_sit_exemptions=mt_mw4_exemptions,
schedule_pay='semi-monthly')
self._log('2019 Montana tax single first payslip:')
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.MT_UNEMP + self.MT_UNEMP_AFT)) # New non-combined...
mt_taxable_income = salary - (79.0 * mt_mw4_exemptions)
mt_withhold = round(0 + (0.018 * (mt_taxable_income - 0)))
self.assertPayrollEqual(mt_taxable_income, 155.0)
self.assertPayrollEqual(mt_withhold, 3.0)
self.assertPayrollEqual(cats['EE_US_SIT'], -mt_withhold)
def test_2019_taxes_two(self):
# Payroll Period Bi-Weekly example
salary = 2950
mt_mw4_exemptions = 2
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MT'),
mt_mw4_sit_exemptions=mt_mw4_exemptions,
schedule_pay='bi-weekly')
self._log('2019 Montana tax single first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], round(salary * (self.MT_UNEMP + self.MT_UNEMP_AFT), 2))
# Note!!
# The example calculation uses A = 16 but the actual table describes this as A = 18
mt_taxable_income = salary - (73.0 * mt_mw4_exemptions)
mt_withhold = round(18 + (0.06 * (mt_taxable_income - 577)))
self.assertPayrollEqual(mt_taxable_income, 2804.0)
self.assertPayrollEqual(mt_withhold, 152.0)
self.assertPayrollEqual(cats['EE_US_SIT'], -mt_withhold)
def test_2019_taxes_three(self):
# Payroll Period Weekly example
salary = 135
mt_mw4_exemptions = 1
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MT'),
mt_mw4_sit_exemptions=mt_mw4_exemptions,
schedule_pay='weekly')
self._log('2019 Montana tax single first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], round(salary * (self.MT_UNEMP + self.MT_UNEMP_AFT), 2))
mt_taxable_income = salary - (37.0 * mt_mw4_exemptions)
mt_withhold = round(0 + (0.018 * (mt_taxable_income - 0)))
self.assertPayrollEqual(mt_taxable_income, 98.0)
self.assertPayrollEqual(mt_withhold, 2.0)
self.assertPayrollEqual(cats['EE_US_SIT'], -mt_withhold)
def test_2019_taxes_three_exempt(self):
# Payroll Period Weekly example
salary = 135
mt_mw4_exemptions = 1
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MT'),
mt_mw4_sit_exemptions=mt_mw4_exemptions,
mt_mw4_sit_exempt='reserve',
schedule_pay='weekly')
self._log('2019 Montana tax single first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), 0.0)
def test_2019_taxes_three_additional(self):
# Payroll Period Weekly example
salary = 135
mt_mw4_exemptions = 1
mt_mw4_additional_withholding = 20.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('MT'),
mt_mw4_sit_exemptions=mt_mw4_exemptions,
state_income_tax_additional_withholding=mt_mw4_additional_withholding,
schedule_pay='weekly')
self._log('2019 Montana tax single first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
mt_taxable_income = salary - (37.0 * mt_mw4_exemptions)
mt_withhold = round(0 + (0.018 * (mt_taxable_income - 0)))
self.assertPayrollEqual(mt_taxable_income, 98.0)
self.assertPayrollEqual(mt_withhold, 2.0)
self.assertPayrollEqual(cats['EE_US_SIT'], -mt_withhold + -mt_mw4_additional_withholding)

View File

@@ -0,0 +1,37 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsMtPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
MT_UNEMP_WAGE_MAX = 35300.0
MT_UNEMP = 1.18
MT_UNEMP_AFT = 0.13
# Calculations from https://app.mt.gov/myrevenue/Endpoint/DownloadPdf?yearId=705
def _test_sit(self, wage, additional_withholding, exemptions, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('MT'),
state_income_tax_additional_withholding=additional_withholding,
mt_mw4_sit_exemptions=exemptions,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_one(self):
combined_rate = self.MT_UNEMP + self.MT_UNEMP_AFT # Combined for test as they both go to the same category and have the same cap
self._test_er_suta('MT', combined_rate + .0001, date(2021, 1, 1), wage_base=self.MT_UNEMP_WAGE_MAX, relaxed=True)
self._test_sit(550.0, 0.0, 5.0, 'semi-monthly', date(2021, 1, 1), 3.0)
self._test_sit(2950.0, 10.0, 2.0, 'bi-weekly', date(2021, 1, 1), 162.0)
self._test_sit(5000.0, 0.0, 1.0, 'monthly', date(2021, 1, 1), 256.0)
self._test_sit(750.0, 0.0, 1.0, 'weekly', date(2021, 1, 1), 34.0)

View File

@@ -1,270 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsNCPayslip(TestUsPayslip):
###
# Taxes and Rates
###
NC_UNEMP_MAX_WAGE = 24300.0
NC_UNEMP = -1.0 / 100.0
NC_INC_TAX = -0.0535
def test_2019_taxes_weekly(self):
salary = 20000.0
# allowance_multiplier and Portion of Standard Deduction for weekly
allowance_multiplier = 48.08
PST = 192.31
exemption = 1
# Algorithm derived from percentage method in https://files.nc.gov/ncdor/documents/files/nc-30_book_web.pdf
wh = -round((salary - (PST + (allowance_multiplier * exemption))) * -self.NC_INC_TAX)
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('NC'),
nc_nc4_sit_filing_status='married',
state_income_tax_additional_withholding=0.0,
nc_nc4_sit_allowances=1.0,
schedule_pay='weekly')
self._log('2019 North Carolina 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_SIT'], wh)
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_NC_UNEMP_wages = self.NC_UNEMP_MAX_WAGE - salary if (self.NC_UNEMP_MAX_WAGE - 2*salary < salary) \
else salary
self._log('2019 North Carolina 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_NC_UNEMP_wages * self.NC_UNEMP)
def test_2019_taxes_with_external_weekly(self):
salary = 5000.0
schedule_pay = 'weekly'
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('NC'),
nc_nc4_sit_filing_status='married',
state_income_tax_additional_withholding=0.0,
nc_nc4_sit_allowances=1.0,
schedule_pay='weekly')
self._log('2019 NorthCarolina_external 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.NC_UNEMP)
def test_2019_taxes_biweekly(self):
salary = 5000.0
schedule_pay = 'bi-weekly'
# allowance_multiplier and Portion of Standard Deduction for weekly
allowance_multiplier = 96.15
PST = 384.62
allowances = 2
# Algorithm derived from percentage method in https://files.nc.gov/ncdor/documents/files/nc-30_book_web.pdf
wh = -round((salary - (PST + (allowance_multiplier * allowances))) * -self.NC_INC_TAX)
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('NC'),
nc_nc4_sit_filing_status='married',
state_income_tax_additional_withholding=0.0,
nc_nc4_sit_allowances=2.0,
schedule_pay='bi-weekly')
self._log('2019 North Carolina tax first payslip bi-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.NC_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_NC_UNEMP_wages = self.NC_UNEMP_MAX_WAGE - salary if (self.NC_UNEMP_MAX_WAGE - 2*salary < salary) \
else salary
self._log('2019 North Carolina tax second payslip bi-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_NC_UNEMP_wages * self.NC_UNEMP)
def test_2019_taxes_semimonthly(self):
salary = 4000.0
# allowance_multiplier and Portion of Standard Deduction for weekly
allowance_multiplier = 104.17
PST = 625.00
allowances = 1
# Algorithm derived from percentage method in https://files.nc.gov/ncdor/documents/files/nc-30_book_web.pdf
wh = -round((salary - (PST + (allowance_multiplier * allowances))) * -self.NC_INC_TAX)
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('NC'),
nc_nc4_sit_filing_status='head_household',
state_income_tax_additional_withholding=0.0,
nc_nc4_sit_allowances=1.0,
schedule_pay='semi-monthly')
self._log('2019 North Carolina tax first payslip:')
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.NC_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_NC_UNEMP_wages = self.NC_UNEMP_MAX_WAGE - salary if (self.NC_UNEMP_MAX_WAGE - 2 * salary < salary) \
else salary
self._log('2019 North Carolina tax second payslip:')
payslip = self._createPayslip(employee, '2019-02-01', '2019-02-28')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], remaining_NC_UNEMP_wages * self.NC_UNEMP)
def test_2019_taxes_monthly(self):
salary = 4000.0
schedule_pay = 'monthly'
# allowance_multiplier and Portion of Standard Deduction for weekly
allowance_multiplier = 208.33
PST = 833.33
allowances = 1
# Algorithm derived from percentage method in https://files.nc.gov/ncdor/documents/files/nc-30_book_web.pdf
wh = -round((salary - (PST + (allowance_multiplier * allowances))) * -self.NC_INC_TAX)
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('NC'),
nc_nc4_sit_filing_status='single',
state_income_tax_additional_withholding=0.0,
nc_nc4_sit_allowances=1.0,
schedule_pay='monthly')
self._log('2019 North Carolina tax first payslip:')
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.NC_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_NC_UNEMP_wages = self.NC_UNEMP_MAX_WAGE - salary if (
self.NC_UNEMP_MAX_WAGE - 2 * salary < salary) \
else salary
self._log('2019 North Carolina tax second payslip:')
payslip = self._createPayslip(employee, '2019-02-01', '2019-02-28')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], remaining_NC_UNEMP_wages * self.NC_UNEMP)
def test_additional_withholding(self):
salary = 4000.0
# allowance_multiplier and Portion of Standard Deduction for weekly
allowance_multiplier = 48.08
PST = 192.31
additional_wh = 40.0
#4000 - (168.27 + (48.08 * 1)
allowances = 1
# Algorithm derived from percentage method in https://files.nc.gov/ncdor/documents/files/nc-30_book_web.pdf
wh = -round(((salary - (PST + (allowance_multiplier * allowances))) * -self.NC_INC_TAX) + additional_wh)
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('NC'),
nc_nc4_sit_filing_status='married',
state_income_tax_additional_withholding=40.0,
nc_nc4_sit_allowances=1.0,
schedule_pay='weekly')
self._log('2019 North Carolina 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_SIT'], wh)
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_NC_UNEMP_wages = self.NC_UNEMP_MAX_WAGE - salary if (self.NC_UNEMP_MAX_WAGE - 2 * salary < salary) \
else salary
self._log('2019 North Carolina 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_NC_UNEMP_wages * self.NC_UNEMP)

View File

@@ -0,0 +1,39 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsNCPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
# Example based on https://files.nc.gov/ncdor/documents/files/2021-NC-30-Final.pdf page 19
NC_UNEMP_MAX_WAGE = 26000.0
NC_UNEMP = 1.0
# get NC_INC_TAX from 'Annualized Tax" line 8 in the example on page 19
NC_INC_TAX = 0.0535
def _test_sit(self, wage, filing_status, allowances, additional_withholding, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('NC'),
nc_nc4_sit_filing_status=filing_status,
nc_nc4_sit_allowances=allowances,
state_income_tax_additional_withholding=additional_withholding,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding if filing_status else 0.0)
def test_2021_taxes_example(self):
self._test_er_suta('NC', self.NC_UNEMP, date(2021, 1, 1), wage_base=self.NC_UNEMP_MAX_WAGE)
self._test_sit(20000.0, 'single', 1, 100.0, 'weekly', date(2021, 1, 1), 1156.0)
self._test_sit(5000.0, 'married', 1, 0.0, 'weekly', date(2021, 1, 1), 254.0)
self._test_sit(4000.0, 'head_household', 1, 5.0, 'semi-monthly', date(2021, 1, 1), 177.0)
self._test_sit(7000.0, '', 1, 5.0, 'monthly', date(2021, 1, 1), 0.0)

View File

@@ -0,0 +1,37 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsNDPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
ND_UNEMP_MAX_WAGE = 38500.0
ND_UNEMP = 1.02
# Calculation based on this file page.47 https://www.nd.gov/tax/data/upfiles/media/rates-and-instructions.pdf?20210110115917
def _test_sit(self, wage, filing_status, additional_withholding, allowances, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('ND'),
nd_w4_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_withholding,
nd_w4_sit_allowances=allowances,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollAlmostEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('ND', self.ND_UNEMP, date(2021, 1, 1), wage_base=self.ND_UNEMP_MAX_WAGE)
self._test_sit(700.0, 'single', 0.0, 0.0, 'weekly', date(2021, 1, 1), 6.0)
self._test_sit(5000.0, 'married', 0.0, 2.0, 'bi-weekly', date(2021, 1, 1), 76.0)
self._test_sit(25000.0, 'head_household', 0.0, 0.0, 'monthly', date(2021, 1, 1), 533.0)
self._test_sit(25000.0, 'head_household', 10.0, 2.0, 'monthly', date(2021, 1, 1), 524.0)
self._test_sit(3000.0, '', 10.0, 2.0, 'monthly', date(2021, 1, 1), 0.0)

View File

@@ -0,0 +1,38 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsNEPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
NE_UNEMP_MAX_WAGE = 9000.0
NE_UNEMP = 2.5
def _test_sit(self, wage, filing_status, exempt, additional_withholding, allowances, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('NE'),
ne_w4n_sit_filing_status=filing_status,
state_income_tax_exempt=exempt,
state_income_tax_additional_withholding=additional_withholding,
ne_w4n_sit_allowances=allowances,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollAlmostEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('NE', self.NE_UNEMP, date(2021, 1, 1), wage_base=self.NE_UNEMP_MAX_WAGE)
self._test_sit(750.0, 'single', False, 0.0, 2, 'weekly', date(2021, 1, 1), 27.53)
self._test_sit(9500.0, 'single', False, 0.0, 1, 'bi-weekly', date(2021, 1, 1), 612.63)
self._test_sit(10500.0, 'married', False, 0.0, 1, 'bi-weekly', date(2021, 1, 1), 659.85)
self._test_sit(9500.0, 'single', True, 0.0, 1, 'bi-weekly', date(2021, 1, 1), 0.0)
self._test_sit(10500.0, 'single', False, 10.0, 2, 'monthly', date(2021, 1, 1), 625.2)
self._test_sit(4000.0, 'single', False, 0.0, 1, 'monthly', date(2021, 1, 1), 179.44)

View File

@@ -0,0 +1,13 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date
from .common import TestUsPayslip
class TestUsNHPayslip(TestUsPayslip):
# TAXES AND RATES
NH_UNEMP_MAX_WAGE = 14000.00
NH_UNEMP = 2.7
def test_2021_taxes(self):
self._test_er_suta('NH', self.NH_UNEMP, date(2021, 1, 1), wage_base=self.NH_UNEMP_MAX_WAGE)

View File

@@ -1,128 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsNJPayslip(TestUsPayslip):
###
# 2019 Taxes and Rates
###
NJ_UNEMP_MAX_WAGE = 34400.0 # Note that this is used for SDI and FLI as well
ER_NJ_UNEMP = -2.6825 / 100.0
EE_NJ_UNEMP = -0.3825 / 100.0
ER_NJ_SDI = -0.5 / 100.0
EE_NJ_SDI = -0.17 / 100.0
ER_NJ_WF = -0.1175 / 100.0
EE_NJ_WF = -0.0425 / 100.0
ER_NJ_FLI = 0.0
EE_NJ_FLI = -0.08 / 100.0
# Examples found on page 24 of http://www.state.nj.us/treasury/taxation/pdf/current/njwt.pdf
def test_2019_taxes_example1(self):
salary = 300
# Tax Percentage Method for Single, taxable under $385
wh = -4.21
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('NJ'),
nj_njw4_sit_filing_status='single',
nj_njw4_sit_allowances=1,
state_income_tax_additional_withholding=0.0,
nj_njw4_sit_rate_table='A',
schedule_pay='weekly')
self._log('2019 New Jersey tax first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['EE_US_SUTA'], salary * (self.EE_NJ_UNEMP + self.EE_NJ_SDI + self.EE_NJ_WF + self.EE_NJ_FLI))
self.assertPayrollEqual(cats['ER_US_SUTA'], salary * (self.ER_NJ_UNEMP + self.ER_NJ_SDI + self.ER_NJ_WF + self.ER_NJ_FLI))
self.assertTrue(all((cats['EE_US_SUTA'], cats['ER_US_SUTA'])))
# self.assertPayrollEqual(cats['EE_US_NJ_SDI_SIT'], cats['EE_US_NJ_SDI_SIT'] * self.EE_NJ_SDI)
# self.assertPayrollEqual(cats['ER_US_NJ_SDI_SUTA'], cats['ER_US_NJ_SDI_SUTA'] * self.ER_NJ_SDI)
# self.assertPayrollEqual(cats['EE_US_NJ_FLI_SIT'], cats['EE_US_NJ_FLI_SIT'] * self.EE_NJ_FLI)
# self.assertPayrollEqual(cats['EE_US_NJ_WF_SIT'], cats['EE_US_NJ_WF_SIT'] * self.EE_NJ_WF)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
process_payslip(payslip)
# # Make a new payslip, this one will have maximums
#
remaining_nj_unemp_wages = self.NJ_UNEMP_MAX_WAGE - salary if (self.NJ_UNEMP_MAX_WAGE - 2 * salary < salary) \
else salary
self._log('2019 New Jersey tax second payslip:')
payslip = self._createPayslip(employee, '2019-02-01', '2019-02-28')
payslip.compute_sheet()
cats = self._getCategories(payslip)
# self.assertPayrollEqual(cats['WAGE_US_NJ_UNEMP'], remaining_nj_unemp_wages)
self.assertPayrollEqual(cats['ER_US_SUTA'], remaining_nj_unemp_wages * (self.ER_NJ_UNEMP + self.ER_NJ_SDI + self.ER_NJ_WF + self.ER_NJ_FLI))
self.assertPayrollEqual(cats['EE_US_SUTA'], remaining_nj_unemp_wages * (self.EE_NJ_UNEMP + self.EE_NJ_SDI + self.EE_NJ_WF + self.EE_NJ_FLI))
def test_2019_taxes_example2(self):
salary = 1400.00
# Tax Percentage Method for Single, taxable pay over $962, under $1346
wh = -27.58
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('NJ'),
nj_njw4_sit_filing_status='married_separate',
nj_njw4_sit_allowances=3,
state_income_tax_additional_withholding=0.0,
#nj_njw4_sit_rate_table='B',
schedule_pay='weekly')
self.assertEqual(contract.schedule_pay, 'weekly')
self._log('2019 New Jersey tax first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
def test_2019_taxes_to_the_limits(self):
salary = 30000.00
# Tax Percentage Method for Single, taxable pay over $18750, under 125000
wh = -1467.51
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('NJ'),
nj_njw4_sit_filing_status='married_joint',
nj_njw4_sit_allowances=3,
state_income_tax_additional_withholding=0.0,
# nj_njw4_sit_rate_table='B',
schedule_pay='quarterly')
self.assertEqual(contract.schedule_pay, 'quarterly')
self._log('2019 New Jersey tax first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-03-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)

View File

@@ -0,0 +1,51 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsNJPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
NJ_UNEMP_MAX_WAGE = 36200.0 # Note that this is used for SDI and FLI as well
ER_NJ_UNEMP = 2.6825
EE_NJ_UNEMP = 0.3825
ER_NJ_SDI = 0.5
EE_NJ_SDI = 0.47
ER_NJ_WF = 0.1175
EE_NJ_WF = 0.0425
ER_NJ_FLI = 0.0
EE_NJ_FLI = 0.28
def _test_sit(self, wage, filing_status, allowances, schedule_pay, date_start, expected_withholding, rate_table=False):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('NJ'),
nj_njw4_sit_filing_status=filing_status,
nj_njw4_sit_allowances=allowances,
state_income_tax_additional_withholding=0.0,
nj_njw4_sit_rate_table=rate_table,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollAlmostEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding if filing_status else 0.0)
def test_2021_taxes_example1(self):
combined_er_rate = self.ER_NJ_UNEMP + self.ER_NJ_FLI + self.ER_NJ_SDI + self.ER_NJ_WF
self._test_er_suta('NJ', combined_er_rate, date(2021, 1, 1), wage_base=self.NJ_UNEMP_MAX_WAGE, relaxed=True)
combined_ee_rate = self.EE_NJ_UNEMP + self.EE_NJ_FLI + self.EE_NJ_SDI + self.EE_NJ_WF
self._test_ee_suta('NJ', combined_ee_rate, date(2021, 1, 1), wage_base=self.NJ_UNEMP_MAX_WAGE, relaxed=True)
# these expected values come from https://www.state.nj.us/treasury/taxation/pdf/current/njwt.pdf
self._test_sit(300.0, 'single', 1, 'weekly', date(2021, 1, 1), 4.21)
self._test_sit(375.0, 'married_separate', 3, 'weekly', date(2021, 1, 1), 4.76)
self._test_sit(1400.0, 'head_household', 3, 'weekly', date(2021, 1, 1), 27.60)
self._test_sit(1400.0, '', 3, 'weekly', date(2021, 1, 1), 0.00)
self._test_sit(2500.0, 'single', 3, 'bi-weekly', date(2021, 1, 1), 82.66)
self._test_sit(15000.0, 'married_joint', 2, 'monthly', date(2021, 1, 1), 844.85)

View File

@@ -0,0 +1,36 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsNMPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
NM_UNEMP_MAX_WAGE = 27000.0
NM_UNEMP = 1.0
# Calculation based on section 17. 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+2021.pdf%22&response-content-type=application%2Fpdf&AWSAccessKeyId=AKIAJBI25DHBYGD7I7TA&Signature=feu%2F1oJvU6BciRfKcoR0iNxoVZE%3D&Expires=1585159702
def _test_sit(self, wage, filing_status, additional_withholding, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('NM'),
fed_941_fit_w4_filing_status=filing_status,
state_income_tax_additional_withholding=additional_withholding,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('NM', self.NM_UNEMP, date(2021, 1, 1), wage_base=self.NM_UNEMP_MAX_WAGE)
self._test_sit(1000.0, 'married', 0.0, 'weekly', date(2021, 1, 1), 29.32)
self._test_sit(1000.0, 'married', 10.0, 'weekly', date(2021, 1, 1), 39.32)
self._test_sit(25000.0, 'single', 0.0, 'bi-weekly', date(2021, 1, 1), 1369.25)
self._test_sit(25000.0, 'married_as_single', 0.0, 'monthly', date(2021, 1, 1), 1152.63)
self._test_sit(4400.0, '', 0.0, 'monthly', date(2021, 1, 1), 0.00)

View File

@@ -0,0 +1,16 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date
from .common import TestUsPayslip
class TestUsNVPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
NV_UNEMP_MAX_WAGE = 33400.0
NV_UNEMP = 2.95
def test_2021_taxes(self):
# Only has state unemployment
self._test_er_suta('NV', self.NV_UNEMP, date(2021, 1, 1), wage_base=self.NV_UNEMP_MAX_WAGE)

View File

@@ -0,0 +1,39 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsNYPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
NY_UNEMP_MAX_WAGE = 11800.0
NY_UNEMP = 2.5 #todo: update Feb 2021
NY_RSF = 0.075 #todo: update Feb 2021
NY_MCTMT = 0.0 #todo: update Feb 2021
def _test_sit(self, wage, filing_status, additional_withholding, allowances, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('NY'),
ny_it2104_sit_filing_status=filing_status,
state_income_tax_additional_withholding=additional_withholding,
ny_it2104_sit_allowances=allowances,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollAlmostEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2020_taxes_example(self):
combined_er_rate = self.NY_UNEMP + self.NY_RSF + self.NY_MCTMT
self._test_er_suta('NY', combined_er_rate, date(2021, 1, 1), wage_base=self.NY_UNEMP_MAX_WAGE, relaxed=True)
self._test_sit(400.0, 'single', 0.0, 3, 'weekly', date(2021, 1, 1), 8.20)
self._test_sit(10000.0, 'single', 0.0, 3, 'monthly', date(2021, 1, 1), 546.30)
self._test_sit(8000.0, 'married', 0.0, 5, 'monthly', date(2021, 1, 1), 394.24)
self._test_sit(4500.0, 'married', 10.0, 3, 'semi-monthly', date(2021, 1, 1), 244.21)
self._test_sit(50000.0, '', 0.0, 0, 'monthly', date(2021, 1, 1), 0.00)

View File

@@ -1,96 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
from odoo.addons.l10n_us_hr_payroll.models.hr_contract import USHRContract
class TestUsOhPayslip(TestUsPayslip):
###
# Taxes and Rates
###
OH_UNEMP_MAX_WAGE = 9500.0
OH_UNEMP = -2.7 / 100.0
def test_2019_taxes(self):
salary = 5000.0
# For formula here
# http://www.tax.ohio.gov/Portals/0/employer_withholding/August2015Rates/WTH_OptionalComputerFormula_073015.pdf
tw = salary * 12 # = 60000
wd = ((tw - 40000) * 0.035 + 900) / 12 * 1.075
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('OH'),
)
self._log('2019 Ohio tax first payslip:')
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.OH_UNEMP)
self.assertPayrollAlmostEqual(cats['EE_US_SIT'], -wd) # Off by 0.6 cents so it rounds off by a penny
#self.assertPayrollEqual(cats['EE_US_SIT'], -wd)
process_payslip(payslip)
# Make a new payslip, this one will have maximums
remaining_oh_unemp_wages = self.OH_UNEMP_MAX_WAGE - salary if (self.OH_UNEMP_MAX_WAGE - 2*salary < salary) \
else salary
self._log('2019 Ohio tax second payslip:')
payslip = self._createPayslip(employee, '2019-02-01', '2019-02-28')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], remaining_oh_unemp_wages * self.OH_UNEMP)
def test_2019_taxes_with_external(self):
salary = 5000.0
external_wages = 6000.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('OH'),
external_wages=external_wages,
)
self._log('2019 Ohio_external tax first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['ER_US_SUTA'], (self.OH_UNEMP_MAX_WAGE - external_wages) * self.OH_UNEMP)
def test_2019_taxes_with_state_exempt(self):
salary = 5000.0
external_wages = 6000.0
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('OH'),
external_wages=external_wages,
futa_type=USHRContract.FUTA_TYPE_BASIC)
self._log('2019 Ohio exempt tax first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
# FUTA_TYPE_BASIC
self.assertPayrollEqual(cats.get('ER_US_SUTA', 0.0), salary * 0.0)

View File

@@ -0,0 +1,108 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date
from .common import TestUsPayslip, process_payslip
class TestUsOhPayslip(TestUsPayslip):
###
# Taxes and Rates
###
OH_UNEMP_MAX_WAGE = 9000.0
OH_UNEMP = 2.7
def test_2021_taxes(self):
self._test_er_suta('OH', self.OH_UNEMP, date(2021, 1, 1), wage_base=self.OH_UNEMP_MAX_WAGE)
def _run_test_sit(self,
wage=0.0,
schedule_pay='monthly',
filing_status='single',
dependent_credit=0.0,
other_income=0.0,
deductions=0.0,
additional_withholding=0.0,
is_nonresident_alien=False,
state_income_tax_exempt=False,
state_income_tax_additional_withholding=0.0,
oh_it4_sit_exemptions=0,
expected=0.0,
):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
schedule_pay=schedule_pay,
fed_941_fit_w4_is_nonresident_alien=is_nonresident_alien,
fed_941_fit_w4_filing_status=filing_status,
fed_941_fit_w4_multiple_jobs_higher=False,
fed_941_fit_w4_dependent_credit=dependent_credit,
fed_941_fit_w4_other_income=other_income,
fed_941_fit_w4_deductions=deductions,
fed_941_fit_w4_additional_withholding=additional_withholding,
state_income_tax_exempt=state_income_tax_exempt,
state_income_tax_additional_withholding=state_income_tax_additional_withholding,
oh_it4_sit_exemptions=oh_it4_sit_exemptions,
state_id=self.get_us_state('OH'),
)
payslip = self._createPayslip(employee, '2021-01-01', '2021-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
# Instead of PayrollEqual after initial first round of testing.
self.assertPayrollAlmostEqual(cats.get('EE_US_SIT', 0.0), -expected)
return payslip
def test_2021_sit_1(self):
wage = 400.0
exemptions = 1
additional = 10.0
pay_periods = 12.0
annual_adjusted_wage = (wage * pay_periods) - (650.0 * exemptions)
self.assertPayrollEqual(4150.0, annual_adjusted_wage)
WD = ((annual_adjusted_wage * 0.005) / pay_periods) * 1.032
self.assertPayrollEqual(WD, 1.7845)
expected = WD + additional
self._run_test_sit(wage=wage,
schedule_pay='monthly',
state_income_tax_exempt=False,
state_income_tax_additional_withholding=additional,
oh_it4_sit_exemptions=exemptions,
expected=expected,
)
# the above agrees with online calculator to the penny 0.01
# below expected coming from calculator to 0.10
#
# semi-monthly
self._run_test_sit(wage=1200,
schedule_pay='semi-monthly',
state_income_tax_exempt=False,
state_income_tax_additional_withholding=20.0,
oh_it4_sit_exemptions=2,
expected=42.58,
)
# bi-weekly
self._run_test_sit(wage=3000,
schedule_pay='bi-weekly',
state_income_tax_exempt=False,
#state_income_tax_additional_withholding=0.0,
oh_it4_sit_exemptions=0,
expected=88.51,
)
# weekly
self._run_test_sit(wage=355,
schedule_pay='weekly',
state_income_tax_exempt=False,
# state_income_tax_additional_withholding=0.0,
oh_it4_sit_exemptions=1,
expected=4.87,
)
# Exempt!
self._run_test_sit(wage=355,
schedule_pay='weekly',
state_income_tax_exempt=True,
# state_income_tax_additional_withholding=0.0,
oh_it4_sit_exemptions=1,
expected=0.0,
)

View File

@@ -0,0 +1,38 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from datetime import date, timedelta
from .common import TestUsPayslip
class TestUsOKPayslip(TestUsPayslip):
###
# 2021 Taxes and Rates
###
OK_UNEMP_MAX_WAGE = 24000.0
OK_UNEMP = 1.0
# Calculation based on example https://www.ok.gov/tax/documents/2021WHTables.pdf
def _test_sit(self, wage, filing_status, allowances, additional_withholding, exempt, schedule_pay, date_start, expected_withholding):
employee = self._createEmployee()
contract = self._createContract(employee,
wage=wage,
state_id=self.get_us_state('OK'),
ok_w4_sit_filing_status=filing_status,
ok_w4_sit_allowances=allowances,
state_income_tax_additional_withholding=additional_withholding,
state_income_tax_exempt=exempt,
schedule_pay=schedule_pay)
payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
payslip.compute_sheet()
cats = self._getCategories(payslip)
self._log('Computed period tax: ' + str(expected_withholding))
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
def test_2021_taxes_example(self):
self._test_er_suta('OK', self.OK_UNEMP, date(2021, 1, 1), wage_base=self.OK_UNEMP_MAX_WAGE)
self._test_sit(1825, 'married', 2, 0, False, 'semi-monthly', date(2021, 1, 1), 46.00)
self._test_sit(1825, 'married', 2, 0, True, 'monthly', date(2021, 1, 1), 0.00)
self._test_sit(1000, 'single', 1, 0, False, 'weekly', date(2021, 1, 1), 39.00)
self._test_sit(1000, 'single', 1, 10, False, 'weekly', date(2021, 1, 1), 49.00)
self._test_sit(5000, 'head_household', 2, 10, False, 'monthly', date(2021, 1, 1), 210.00)

View File

@@ -1,33 +0,0 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from .common import TestUsPayslip, process_payslip
class TestUsPAPayslip(TestUsPayslip):
###
# Taxes and Rates
###
PA_UNEMP_MAX_WAGE = 10000.0
ER_PA_UNEMP = -3.6890 / 100.0
EE_PA_UNEMP = -0.06 / 100.0
PA_INC_WITHHOLD = 3.07
def test_2019_taxes(self):
salary = 4166.67
wh = -127.92
employee = self._createEmployee()
contract = self._createContract(employee,
wage=salary,
state_id=self.get_us_state('PA'))
self._log('2019 Pennsylvania tax first payslip:')
payslip = self._createPayslip(employee, '2019-01-01', '2019-01-31')
payslip.compute_sheet()
cats = self._getCategories(payslip)
self.assertPayrollEqual(cats['EE_US_SUTA'], cats['GROSS'] * self.EE_PA_UNEMP)
self.assertPayrollEqual(cats['ER_US_SUTA'], cats['GROSS'] * self.ER_PA_UNEMP)
self.assertPayrollEqual(cats['EE_US_SIT'], wh)

Some files were not shown because too many files have changed in this diff Show More