mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
IMP l10n_us_hr_payroll Port l10n_us_ca_hr_payroll CA California including migration
This commit is contained in:
@@ -32,6 +32,7 @@ USA Payroll Rules.
|
||||
'data/state/al_alabama.xml',
|
||||
'data/state/ar_arkansas.xml',
|
||||
'data/state/az_arizona.xml',
|
||||
'data/state/ca_california.xml',
|
||||
'data/state/ct_connecticut.xml',
|
||||
'data/state/fl_florida.xml',
|
||||
'data/state/ga_georgia.xml',
|
||||
|
||||
@@ -28,6 +28,11 @@
|
||||
ref('hr_payroll_rule_er_us_az_suta'),
|
||||
ref('hr_payroll_rule_ee_us_az_sit'),
|
||||
|
||||
ref('hr_payroll_rule_er_us_ca_suta'),
|
||||
ref('hr_payroll_rule_er_us_ca_suta_ett'),
|
||||
ref('hr_payroll_rule_ee_us_ca_suta_sdi'),
|
||||
ref('hr_payroll_rule_ee_us_ca_sit'),
|
||||
|
||||
ref('hr_payroll_rule_er_us_ct_suta'),
|
||||
ref('hr_payroll_rule_ee_us_ct_sit'),
|
||||
|
||||
|
||||
336
l10n_us_hr_payroll/data/state/ca_california.xml
Normal file
336
l10n_us_hr_payroll/data/state/ca_california.xml
Normal file
@@ -0,0 +1,336 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<!-- Wage Base -->
|
||||
<data noupdate="1">
|
||||
<record id="rule_parameter_us_ca_suta_wage_base_2019" model="hr.payroll.rate">
|
||||
<field name="name">US CA California SUTA Wage Base</field>
|
||||
<field name="code">us_ca_suta_wage_base</field>
|
||||
<field name="parameter_value">7000.0</field>
|
||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||
</record>
|
||||
<record id="rule_parameter_us_ca_suta_wage_base_2020" model="hr.payroll.rate">
|
||||
<field name="name">US CA California SUTA Wage Base</field>
|
||||
<field name="code">us_ca_suta_wage_base</field>
|
||||
<field name="parameter_value">7000.0</field>
|
||||
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
<!-- Rate -->
|
||||
<data noupdate="1">
|
||||
<record id="rule_parameter_us_ca_suta_rate_2019" model="hr.payroll.rate">
|
||||
<field name="name">US CA California SUTA Rate</field>
|
||||
<field name="code">us_ca_suta_rate</field>
|
||||
<field name="parameter_value">3.5</field>
|
||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||
</record>
|
||||
<record id="rule_parameter_us_ca_suta_rate_2020" model="hr.payroll.rate">
|
||||
<field name="name">US CA California SUTA Rate</field>
|
||||
<field name="code">us_ca_suta_rate</field>
|
||||
<field name="parameter_value">3.4</field>
|
||||
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
<!-- ETT Rate -->
|
||||
<data noupdate="1">
|
||||
<record id="rule_parameter_us_ca_suta_ett_rate_2019" model="hr.payroll.rate">
|
||||
<field name="name">US CA California SUTA ETT Rate</field>
|
||||
<field name="code">us_ca_suta_ett_rate</field>
|
||||
<field name="parameter_value">0.1</field>
|
||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||
</record>
|
||||
<record id="rule_parameter_us_ca_suta_ett_rate_2020" model="hr.payroll.rate">
|
||||
<field name="name">US CA California SUTA ETT Rate</field>
|
||||
<field name="code">us_ca_suta_ett_rate</field>
|
||||
<field name="parameter_value">0.1</field>
|
||||
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
<!-- SDI Rate -->
|
||||
<data noupdate="1">
|
||||
<record id="rule_parameter_us_ca_suta_sdi_rate_2019" model="hr.payroll.rate">
|
||||
<field name="name">US CA California SUTA SDI Rate</field>
|
||||
<field name="code">us_ca_suta_sdi_rate</field>
|
||||
<field name="parameter_value">1.0</field>
|
||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||
</record>
|
||||
<record id="rule_parameter_us_ca_suta_sdi_rate_2020" model="hr.payroll.rate">
|
||||
<field name="name">US CA California SUTA SDI Rate</field>
|
||||
<field name="code">us_ca_suta_sdi_rate</field>
|
||||
<field name="parameter_value">1.0</field>
|
||||
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
<data noupdate="1">
|
||||
<record id="rule_parameter_us_ca_sit_tax_rate_2019" model="hr.payroll.rate">
|
||||
<field name="name">US CA California SIT Tax Rate</field>
|
||||
<field name="code">us_ca_sit_tax_rate</field>
|
||||
<field name="parameter_value">{
|
||||
'head_household': {
|
||||
'weekly': ((316, 0.011, 0.0), (750, 0.022, 3.48), (967, 0.044, 13.03), (1196, 0.066, 22.58), (1413, 0.088, 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.011, 0.0), (1500, 0.022, 6.95), (1934, 0.044, 26.05), (2392, 0.066, 45.15), (2826, 0.088, 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.011, 0.0), (1625, 0.022, 7.55), (2094, 0.044, 28.21), (2592, 0.066, 48.85), (3062, 0.088, 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.011, 0.0), (3250, 0.022, 15.09), (4188, 0.044, 56.41), (5184, 0.066, 97.68), (6124, 0.088, 163.42), (31250, 0.1023, 246.148), (37500, 0.1133, 2816.53), (62500, 0.1243, 3524.66), (83334, 0.1353, 6632.16), ('inf', 0.1463, 9451.00)),
|
||||
'quarterly': ((4114, 0.011, 0.0), (9748, 0.022, 45.25), (12566, 0.044, 169.20), (15552, 0.066, 293.19), (18369, 0.088, 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.011, 0.0), (19496, 0.022, 90.51), (25132, 0.044, 338.41), (31104, 0.066, 586.39), (36738, 0.088, 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.011, 0.0), (38991, 0.022, 181.03), (50264, 0.044, 676.78), (62206, 0.066, 1172.79), (73477, 0.088, 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.011, 0.0),(750, 0.022, 3.48),(1184, 0.044, 13.03),(1642, 0.066, 32.13), (2076, 0.088, 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.011, 0.0), (1500, 0.022, 6.95), (2368, 0.044, 26.05), (3284, 0.066, 64.24), (4152, 0.088, 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.011, 0.0), (1624, 0.022, 7.55), (2564, 0.044, 28.19), (3560, 0.066, 69.55), (4498, 0.088, 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.011, 0.0), (3248, 0.022, 15.09), (5128, 0.044, 56.36), (7120, 0.066, 139.08), (8996, 0.088, 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.011, 0.0), (9748, 0.022, 45.23), (15384, 0.044, 169.22), (21356, 0.066, 417.20), (26990, 0.088, 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.011, 0.0), (19496, 0.022, 90.46), (30768, 0.044, 338.44), (42712, 0.066, 834.41), (53980, 0.088, 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.011, 0.0), (38990, 0.022, 180.91), (61538, 0.044, 676.88), (85422, 0.066, 1668.99), (107960, 0.088, 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.011, 0.0), (375, 0.022, 1.74), (592, 0.044, 6.51), (821, 0.066, 16.06), (1038, 0.088, 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.011, 0.0), (750, 0.022, 3.48), (1184, 0.044, 13.03), (1642, 0.066, 32.13), (2076, 0.088, 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.011, 0.0), (812, 0.022, 3.77), (1282, 0.044, 14.09), (1780, 0.066, 34.77), (2249, 0.088, 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.011, 0.0), (1624, 0.022, 7.55), (2564, 0.044, 28.19), (3560, 0.066, 69.55), (4498, 0.088, 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.011, 0.0), (4874, 0.022, 22.62), (7692, 0.044, 84.62), (10678, 0.066, 208.61), (13495, 0.088, 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.011, 0.0), (9748, 0.022, 45.23), (15384, 0.044, 169.22), (21356, 0.066, 417.20), (26990, 0.088, 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.011, 0.0), (19495, 0.022, 90.45), (30769, 0.044, 338.43), (42711, 0.066, 834.49), (53980, 0.088, 1622.66), (275738, 0.1023, 2614.33), (330884, 0.1133, 25300.17), (551473, 0.1243, 31548.21), (1000000, 0.1353, 58967.42), ('inf', 0.1463, 119653.12)),
|
||||
},
|
||||
}</field>
|
||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||
</record>
|
||||
<record id="rule_parameter_us_ca_sit_tax_rate_2020" model="hr.payroll.rate">
|
||||
<field name="name">US CA California SIT Tax Rate</field>
|
||||
<field name="code">us_ca_sit_tax_rate</field>
|
||||
<field name="parameter_value">{
|
||||
'head_household': {
|
||||
'weekly': ((339, 0.011, 0.0), (803, 0.022, 3.73), (1035, 0.044, 13.93), (1281, 0.066, 24.15), (1514, 0.088, 40.39), (7725, 0.1023, 60.89), (9270, 0.1133, 696.28), (15450, 0.1243, 871.33), (19231, 0.1353, 1639.50), ('inf', 0.1463, 2151.07)),
|
||||
'bi-weekly': ((678, 0.011, 0.0), (1606, 0.022, 7.46), (2070, 0.044, 27.88), (2562, 0.066, 48.30), (3028, 0.088, 80.77), (15450, 0.1023, 121.78), (18540, 0.1133, 1392.55), (30900, 0.1243, 1742.65), (38462, 0.1353, 3279.00), ('inf', 0.1463, 4302.14)),
|
||||
'semi-monthly': ((735, 0.011, 0.0), (1740, 0.022, 8.09), (2243, 0.044, 30.20), (2777, 0.066, 52.33), (3280, 0.088, 87.57), (16738, 0.1023, 131.83), (20085, 0.1133, 1508.58), (33475, 0.1243, 1887.80), (41667, 0.1353, 3552.18), ('inf', 0.1463, 4660.56)),
|
||||
'monthly': ((1470, 0.011, 0.0), (3480, 0.022, 16.17), (4486, 0.044, 60.39), (5554, 0.066, 104.65), (6560, 0.088, 175.14), (33476, 0.1023, 263.67), (40170, 0.1133, 3017.18), (66950, 0.1243, 3775.61), (83334, 0.1353, 7104.36), ('inf', 0.1463, 9321.12)),
|
||||
'quarterly': ((4407, 0.011, 0.0), (10442, 0.022, 48.48), (13461, 0.044, 181.25), (16659, 0.066, 314.09), (19678, 0.088, 525.16), (100426, 0.1023, 790.83), (120512, 0.1133, 9051.35), (200853, 0.1243, 11327.09), (250000, 0.1353, 21313.48), ('inf', 0.1463, 27963.07)),
|
||||
'semi-annual': ((8814, 0.011, 0.0), (20884, 0.022, 96.95), (26922, 0.044, 362.49), (33318, 0.066, 628.16), (39356, 0.088, 1050.30), (200852, 0.1023, 1581.64), (241024, 0.1133, 18102.68), (401706, 0.1243, 22654.17), (500000, 0.1353, 42626.94), ('inf', 0.1463, 55926.12)),
|
||||
'annually': ((17629, 0.011, 0.0), (41768, 0.022, 193.92), (53843, 0.044, 724.98), (66636, 0.066, 1256.28), (78710, 0.088, 2100.62), (401705, 0.1023, 3163.13), (482047, 0.1133, 36205.52), (803410, 0.1243, 45308.27), (1000000, 0.1353, 85253.69), ('inf', 0.1463, 111852.32)),
|
||||
},
|
||||
'married': {
|
||||
'weekly': ((338, 0.011, 0.0),(804, 0.022, 3.72),(1268, 0.044, 13.97),(1760, 0.066, 34.39), (2224, 0.088, 66.86),(11360, 0.1023, 107.69),(13632, 0.1133, 1042.30),(19231, 0.1243, 1299.72),(22721, 0.1353, 1995.68),('inf', 0.1463, 2467.88)),
|
||||
'bi-weekly': ((676, 0.011, 0.0), (1608, 0.022, 7.44), (2536, 0.044, 27.94), (3520, 0.066, 68.77), (4448, 0.088, 124.70), (21212, 0.1023, 201.08), (25452, 0.1133, 1946.32), (38462, 0.1243, 2426.71), (42420, 0.1353, 4043.85), ('inf', 0.1463, 4579.37)),
|
||||
'semi-monthly': ((734, 0.011, 0.0), (1740, 0.022, 8.07), (2746, 0.044, 30.20), (3812, 0.066, 74.46), (4818, 0.088, 144.82), (24614, 0.1023, 233.35), (29538, 0.1133, 2258.48), (41667, 0.1243, 2816.37), (49229, 0.1353, 4324.00), ('inf', 0.1463, 5347.14)),
|
||||
'monthly': ((1468, 0.011, 0.0), (3480, 0.022, 16.15), (5492, 0.044, 60.41), (7624, 0.066, 148.94), (9636, 0.088, 2889.65), (49228, 0.1023, 466.71), (59076, 0.1133, 4516.97), (83334, 0.1243, 5632.75), (98458, 0.1353, 8648.02), ('inf', 0.1463, 10694.30)),
|
||||
'quarterly': ((4404, 0.011, 0.0), (10442, 0.022, 48.44), (16480, 0.044, 181.28), (22876, 0.066, 446.95), (28912, 0.088, 869.09), (147686, 0.1023, 1400.26), (177222, 0.1133, 13550.84), (250000, 0.1243, 16897.27), (295371, 0.1353, 25943.58), ('inf', 0.1463, 32082.28)),
|
||||
'semi-annual': ((8808, 0.011, 0.0), (20884, 0.022, 96.89), (32960, 0.044, 362.56), (45752, 0.066, 893.90), (57824, 0.088, 1738.17), (295372, 0.1023, 2800.51), (354444, 0.1133, 27101.67), (500000, 0.1243, 33794.53), (590742, 0.1353, 51887.14), ('inf', 0.1463, 64164.53)),
|
||||
'annually': ((17618, 0.011, 0.0), (41766, 0.022, 193.80), (65920, 0.044, 725.06), (91506, 0.066, 1787.84), (115648, 0.088, 3476.52), (590746, 0.1023, 5601.02), (708890, 0.1133, 54203.55), (1000000, 0.1243, 67589.27), (1181484, 0.1353, 103774.24), ('inf', 0.1463, 128329.03)),
|
||||
},
|
||||
'single': {
|
||||
'weekly': ((169, 0.011, 0.0), (402, 0.022, 1.86), (634, 0.044, 6.99), (880, 0.066, 17.20), (1112, 0.088, 33.44), (5680, 0.1023, 53.86), (6816, 0.1133, 521.17), (11360, 0.1243, 649.88), (19231, 0.1353, 1214.70), ('inf', 0.1463, 2279.65)),
|
||||
'bi-weekly': ((338, 0.011, 0.0), (804, 0.022, 3.72), (1268, 0.044, 13.97), (1760, 0.066, 34.39), (2224, 0.088, 66.86), (11360, 0.1023, 107.69), (13632, 0.1133, 1042.30), (22720, 0.1243, 1299.72), (38462, 0.1353, 2429.36), ('inf', 0.1463, 4559.25)),
|
||||
'semi-monthly': ((367, 0.011, 0.0), (870, 0.022, 4.04), (1373, 0.044, 15.11), (1906, 0.066, 37.24), (2409, 0.088, 72.42), (12307, 0.1023, 116.68), (14769, 0.1133, 1129.25), (24614, 0.1243, 1408.19), (41667, 0.1353, 2631.92),('inf', 0.1463, 4939.19)),
|
||||
'monthly': ((734, 0.011, 0.0), (1740, 0.022, 8.07), (2746, 0.044, 30.20), (3812, 0.066, 74.46), (4818, 0.088, 144.82), (24614, 0.1023, 233.35), (29538, 0.1133, 2258.48), (49228, 0.1243, 2816.37), (83334, 0.1353, 5263.84), ('inf', 0.1463, 9878.38)),
|
||||
'quarterly': ((2202, 0.011, 0.0), (5221, 0.022, 24.22), (8240, 0.044, 90.64), (11438, 0.066, 223.48), (14456, 0.088, 434.55), (73843, 0.1023, 700.13), (88611, 0.1133, 6775.42), (147686, 0.1243, 8448.63), (250000, 0.1353, 15791.65), ('inf', 0.1463, 29634.73)),
|
||||
'semi-annual': ((4404, 0.011, 0.0), (10442, 0.022, 48.44), (16480, 0.044, 181.28), (22876, 0.066, 446.95), (28912, 0.088, 869.09), (147686, 0.1023, 1400.26), (177222, 0.1133, 13550.84), (295372, 0.1243, 16897.27), (500000, 0.1353, 31583.32), ('inf', 0.1463, 59269.49)),
|
||||
'annually': ((8809, 0.011, 0.0), (20883, 0.022, 96.90), (32960, 0.044, 362.53), (45753, 0.066, 893.92), (57824, 0.088, 1738.26), (295373, 0.1023, 2800.51), (354445, 0.1133, 27101.77), (590742, 0.1243, 33794.63), (1000000, 0.1353, 63166.35), ('inf', 0.1463, 118538.96)),
|
||||
},
|
||||
}</field>
|
||||
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
<data noupdate="1">
|
||||
<record id="rule_parameter_us_ca_sit_income_exemption_rate_2019" model="hr.payroll.rate">
|
||||
<field name="name">US CA California Low Income Exemption Rate</field>
|
||||
<field name="code">us_ca_sit_income_exemption_rate</field>
|
||||
<field name="parameter_value">{
|
||||
'weekly': ( 280, 280, 561, 561),
|
||||
'bi-weekly': ( 561, 561, 1121, 1121),
|
||||
'semi-monthly': ( 607, 607, 1214, 1214),
|
||||
'monthly': ( 1214, 1214, 2429, 2429),
|
||||
'quarterly': ( 3643, 3643, 7287, 7287),
|
||||
'semi-annual': ( 7287, 7287, 14573, 14573),
|
||||
'annually': (14573, 14573, 29146, 29146),
|
||||
}</field>
|
||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||
</record>
|
||||
<record id="rule_parameter_us_ca_sit_income_exemption_rate_2020" model="hr.payroll.rate">
|
||||
<field name="name">US CA California Low Income Exemption Rate</field>
|
||||
<field name="code">us_ca_sit_income_exemption_rate</field>
|
||||
<field name="parameter_value">{
|
||||
'weekly': ( 289, 289, 579, 579),
|
||||
'bi-weekly': ( 579, 579, 1157, 1157),
|
||||
'semi-monthly': ( 627, 627, 1253, 1253),
|
||||
'monthly': ( 1254, 1254, 2507, 2507),
|
||||
'quarterly': ( 3761, 3761, 7521, 7521),
|
||||
'semi-annual': ( 7521, 7521, 15042, 15042),
|
||||
'annually': (15042, 15042, 30083, 30083),
|
||||
}</field>
|
||||
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
<data noupdate="1">
|
||||
<record id="rule_parameter_us_ca_sit_estimated_deduction_rate_2019" model="hr.payroll.rate">
|
||||
<field name="name">US CA California Estimated Deduction Rate</field>
|
||||
<field name="code">us_ca_sit_estimated_deduction_rate</field>
|
||||
<field name="parameter_value">{
|
||||
'weekly': ( 19, 38, 58, 77, 96, 115, 135, 154, 173, 192),
|
||||
'bi-weekly': ( 38, 77, 115, 154, 192, 231, 269, 308, 346, 385),
|
||||
'semi-monthly': ( 42, 83, 125, 167, 208, 250, 292, 333, 375, 417),
|
||||
'monthly': ( 83, 167, 250, 333, 417, 500, 583, 667, 750, 833),
|
||||
'quarterly': ( 250, 500, 750, 1000, 1250, 1500, 1750, 2000, 2250, 2500),
|
||||
'semi-annual': ( 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000),
|
||||
'annually': (1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000),
|
||||
}</field>
|
||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||
</record>
|
||||
<record id="rule_parameter_us_ca_sit_estimated_deduction_rate_2020" model="hr.payroll.rate">
|
||||
<field name="name">US CA California Estimated Deduction Rate</field>
|
||||
<field name="code">us_ca_sit_estimated_deduction_rate</field>
|
||||
<field name="parameter_value">{
|
||||
'weekly': ( 19, 38, 58, 77, 96, 115, 135, 154, 173, 192),
|
||||
'bi-weekly': ( 38, 77, 115, 154, 192, 231, 269, 308, 346, 385),
|
||||
'semi-monthly': ( 42, 83, 125, 167, 208, 250, 292, 333, 375, 417),
|
||||
'monthly': ( 83, 167, 250, 333, 417, 500, 583, 667, 750, 833),
|
||||
'quarterly': ( 250, 500, 750, 1000, 1250, 1500, 1750, 2000, 2250, 2500),
|
||||
'semi-annual': ( 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000),
|
||||
'annually': (1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000),
|
||||
}</field>
|
||||
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
<data noupdate="1">
|
||||
<record id="rule_parameter_us_ca_sit_standard_deduction_rate_2019" model="hr.payroll.rate">
|
||||
<field name="name">US CA California Standard Deduction Rate</field>
|
||||
<field name="code">us_ca_sit_standard_deduction_rate</field>
|
||||
<field name="parameter_value">{
|
||||
'weekly': ( 85, 85, 169, 169),
|
||||
'bi-weekly': ( 169, 169, 339, 339),
|
||||
'semi-monthly': ( 183, 183, 367, 367),
|
||||
'monthly': ( 367, 367, 734, 734),
|
||||
'quarterly': (1100, 1100, 2201, 2201),
|
||||
'semi-annual': (2201, 2201, 4401, 4401),
|
||||
'annually': (4401, 4401, 8802, 8802),
|
||||
}</field>
|
||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||
</record>
|
||||
<record id="rule_parameter_us_ca_sit_standard_deduction_rate_2020" model="hr.payroll.rate">
|
||||
<field name="name">US CA California Standard Deduction Rate</field>
|
||||
<field name="code">us_ca_sit_standard_deduction_rate</field>
|
||||
<field name="parameter_value">{
|
||||
'weekly': ( 87, 87, 175, 175),
|
||||
'bi-weekly': ( 175, 175, 349, 349),
|
||||
'semi-monthly': ( 189, 189, 378, 378),
|
||||
'monthly': ( 378, 378, 756, 756),
|
||||
'quarterly': (1134, 1134, 2269, 2269),
|
||||
'semi-annual': (2269, 2269, 4537, 4537),
|
||||
'annually': (4537, 4537, 9074, 9074),
|
||||
}</field>
|
||||
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
<data noupdate="1">
|
||||
<record id="rule_parameter_us_ca_sit_exemption_allowance_rate_2019" model="hr.payroll.rate">
|
||||
<field name="name">US CA California Exemption Allowance Rate</field>
|
||||
<field name="code">us_ca_sit_exemption_allowance_rate</field>
|
||||
<field name="parameter_value">{
|
||||
'weekly': ( 2.41, 4.82, 7.23, 9.65, 12.06, 14.47, 16.88, 19.29, 21.70, 24.12),
|
||||
'bi-weekly': ( 4.82, 9.65, 14.47, 19.29, 24.12, 28.94, 33.76, 38.58, 43.41, 48.23),
|
||||
'semi-monthly': ( 5.23, 10.45, 15.68, 20.90, 26.13, 31.35, 36.58, 41.80, 47.03, 52.25),
|
||||
'monthly': ( 10.45, 20.90, 31.35, 41.80, 52.25, 62.70, 73.15, 83.60, 94.05, 104.50),
|
||||
'quarterly': ( 31.35, 62.70, 94.05, 125.40, 156.75, 188.10, 219.45, 250.80, 282.15, 313.50),
|
||||
'semi-annual': ( 62.70, 125.40, 188.10, 250.80, 313.50, 376.20, 438.90, 501.60, 564.30, 627.00),
|
||||
'annually': (125.40, 250.80, 376.20, 501.60, 627.00, 752.40, 877.80, 1003.20, 1128.60, 1254.00),
|
||||
}</field>
|
||||
<field name="date_from" eval="datetime(2019, 1, 1).date()"/>
|
||||
</record>
|
||||
<record id="rule_parameter_us_ca_sit_exemption_allowance_rate_2020" model="hr.payroll.rate">
|
||||
<field name="name">US CA California Exemption Allowance Rate</field>
|
||||
<field name="code">us_ca_sit_exemption_allowance_rate</field>
|
||||
<field name="parameter_value">{
|
||||
'weekly': ( 2.58, 5.16, 7.74, 10.32, 12.90, 15.48, 18.07, 20.65, 23.23, 25.81),
|
||||
'bi-weekly': ( 5.16, 10.32, 15.48, 20.65, 25.81, 30.97, 36.13, 41.29, 46.45, 51.62),
|
||||
'semi-monthly': ( 5.59, 11.18, 16.78, 22.37, 27.96, 33.55, 39.14, 44.73, 50.33, 55.92),
|
||||
'monthly': ( 11.18, 22.37, 33.55, 44.73, 55.92, 67.10, 78.28, 89.47, 100.65, 111.83),
|
||||
'quarterly': ( 33.55, 67.10, 100.65, 134.20, 167.75, 201.30, 234.85, 268.40, 301.95, 335.50),
|
||||
'semi-annual': ( 67.10, 134.20, 201.30, 268.40, 335.50, 402.60, 469.70, 536.80, 603.90, 671.00),
|
||||
'annually': (134.20, 268.40, 402.60, 536.80, 671.00, 805.20, 939.40, 1073.60, 1207.80, 1342.00),
|
||||
}</field>
|
||||
<field name="date_from" eval="datetime(2020, 1, 1).date()"/>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
<!-- Partners and Contribution Registers -->
|
||||
<record id="res_partner_us_ca_dor" model="res.partner">
|
||||
<field name="name">US California - Department of Taxation (CA DE88) - Unemployment Tax</field>
|
||||
<field name="supplier">1</field>
|
||||
</record>
|
||||
<record id="contrib_register_us_ca_dor" model="hr.contribution.register">
|
||||
<field name="name">US California - Department of Taxation (CA DE88) - Unemployment Tax</field>
|
||||
<field name="partner_id" ref="res_partner_us_ca_dor"/>
|
||||
</record>
|
||||
|
||||
<record id="res_partner_us_ca_dor_sit" model="res.partner">
|
||||
<field name="name">US California - Department of Taxation - Income Tax</field>
|
||||
<field name="supplier">1</field>
|
||||
</record>
|
||||
<record id="contrib_register_us_ca_dor_sit" model="hr.contribution.register">
|
||||
<field name="name">US California - Department of Taxation - Income Tax</field>
|
||||
<field name="partner_id" ref="res_partner_us_ca_dor_sit"/>
|
||||
</record>
|
||||
|
||||
<!-- Categories -->
|
||||
|
||||
<!-- Rules -->
|
||||
<record id="hr_payroll_rule_er_us_ca_suta" model="hr.salary.rule">
|
||||
<field name="sequence" eval="450"/>
|
||||
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||
<field name="name">ER: US CA California State Unemployment</field>
|
||||
<field name="code">ER_US_CA_SUTA</field>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ca_suta_wage_base', rate='us_ca_suta_rate', state_code='CA')</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ca_suta_wage_base', rate='us_ca_suta_rate', state_code='CA')</field>
|
||||
<field name="register_id" ref="contrib_register_us_ca_dor"/>
|
||||
<field name="appears_on_payslip" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_payroll_rule_er_us_ca_suta_ett" model="hr.salary.rule">
|
||||
<field name="sequence" eval="451"/>
|
||||
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||
<field name="name">ER: US CA California State Employee Training Tax</field>
|
||||
<field name="code">ER_US_CA_SUTA_ETT</field>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ca_suta_wage_base', rate='us_ca_suta_ett_rate', state_code='CA')</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ca_suta_wage_base', rate='us_ca_suta_ett_rate', state_code='CA')</field>
|
||||
<field name="register_id" ref="contrib_register_us_ca_dor"/>
|
||||
<field name="appears_on_payslip" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_payroll_rule_ee_us_ca_suta_sdi" model="hr.salary.rule">
|
||||
<field name="sequence" eval="195"/>
|
||||
<field name="category_id" ref="hr_payroll_category_ee_us_suta"/>
|
||||
<field name="name">EE: US CA California State Disability Insurance</field>
|
||||
<field name="code">EE_US_CA_SUTA_SDI</field>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ca_suta_wage_base', rate='us_ca_suta_sdi_rate', state_code='CA')</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute">result, result_rate = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_ca_suta_wage_base', rate='us_ca_suta_sdi_rate', state_code='CA')</field>
|
||||
<field name="register_id" ref="contrib_register_us_ca_dor"/>
|
||||
<field name="appears_on_payslip" eval="True"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_payroll_rule_ee_us_ca_sit" model="hr.salary.rule">
|
||||
<field name="sequence" eval="195"/>
|
||||
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||
<field name="name">EE: US CA California State Income Tax Withholding</field>
|
||||
<field name="code">EE_US_CA_SIT</field>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result, _ = ca_california_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute">result, result_rate = ca_california_state_income_withholding(payslip, categories, worked_days, inputs)</field>
|
||||
<field name="register_id" ref="contrib_register_us_ca_dor_sit"/>
|
||||
<field name="appears_on_payslip" eval="True"/>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
@@ -21,6 +21,10 @@ FIELDS_CONTRACT_TO_US_PAYROLL_FORMS_2020 = {
|
||||
'az_a4_withholding_percentage': 'az_a4_sit_withholding_percentage',
|
||||
'az_a4_additional_withholding': 'state_income_tax_additional_withholding',
|
||||
|
||||
'ca_de4_allowances': 'ca_de4_sit_allowances',
|
||||
'ca_additional_allowances': 'ca_sit_additional_allowances',
|
||||
'ca_de4_filing_status': 'ca_de4_sit_filing_status',
|
||||
|
||||
'ct_w4na_code': 'ct_w4na_sit_code',
|
||||
'ct_w4na_wh_amount': 'state_income_tax_additional_withholding',
|
||||
|
||||
@@ -107,6 +111,19 @@ XMLIDS_TO_REMOVE_2020 = [
|
||||
'l10n_us_az_hr_payroll.hr_payroll_az_income_withhold',
|
||||
'l10n_us_az_hr_payroll.hr_payroll_rules_az_unemp_wages',
|
||||
|
||||
'l10n_us_ca_hr_payroll.res_partner_cador_ett',
|
||||
'l10n_us_ca_hr_payroll.res_partner_cador_sdi',
|
||||
'l10n_us_ca_hr_payroll.hr_payroll_ca_uit_wages',
|
||||
'l10n_us_ca_hr_payroll.hr_payroll_ca_uit',
|
||||
'l10n_us_ca_hr_payroll.hr_payroll_ca_ett_wages',
|
||||
'l10n_us_ca_hr_payroll.hr_payroll_ca_ett',
|
||||
'l10n_us_ca_hr_payroll.hr_payroll_ca_sdi_wages',
|
||||
'l10n_us_ca_hr_payroll.hr_payroll_ca_sdi',
|
||||
'l10n_us_ca_hr_payroll.hr_payroll_ca_income_withhold',
|
||||
'l10n_us_ca_hr_payroll.hr_payroll_rules_ca_uit_wages_2018',
|
||||
'l10n_us_ca_hr_payroll.hr_payroll_rules_ca_ett_wages_2018',
|
||||
'l10n_us_ca_hr_payroll.hr_payroll_rules_ca_sdi_wages_2018',
|
||||
|
||||
'l10n_us_ct_hr_payroll.hr_payroll_ct_unemp_wages',
|
||||
'l10n_us_ct_hr_payroll.hr_payroll_ct_unemp',
|
||||
'l10n_us_ct_hr_payroll.hr_payroll_ct_income_withhold',
|
||||
@@ -257,6 +274,15 @@ XMLIDS_TO_RENAME_2020 = {
|
||||
'l10n_us_az_hr_payroll.hr_payroll_az_unemp': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_az_suta',
|
||||
'l10n_us_az_hr_payroll.hr_payroll_az_income_withhold': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_az_sit',
|
||||
|
||||
'l10n_us_ca_hr_payroll.res_partner_cador_uit': 'l10n_us_hr_payroll.res_partner_us_ca_dor',
|
||||
'l10n_us_ca_hr_payroll.res_partner_cador_withhold': 'l10n_us_hr_payroll.res_partner_us_ca_dor_sit',
|
||||
'l10n_us_ca_hr_payroll.contrib_register_cador_uit': 'l10n_us_hr_payroll.contrib_register_us_ca_dor',
|
||||
'l10n_us_ca_hr_payroll.contrib_register_cador_withhold': 'l10n_us_hr_payroll.contrib_register_us_ca_dor_sit',
|
||||
'l10n_us_ca_hr_payroll.hr_payroll_rules_ca_uit_2018': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_ca_suta',
|
||||
'l10n_us_ca_hr_payroll.hr_payroll_rules_ca_ett_2018': 'l10n_us_hr_payroll.hr_payroll_rule_er_us_ca_ett_suta',
|
||||
'l10n_us_ca_hr_payroll.hr_payroll_rules_ca_sdi_2018': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_ca_sdi_sit',
|
||||
'l10n_us_ca_hr_payroll.hr_payroll_rules_ca_inc_withhold_2018': 'l10n_us_hr_payroll.hr_payroll_rule_ee_us_ca_sit',
|
||||
|
||||
'l10n_us_ct_hr_payroll.res_partner_ct_dol_unemp': 'l10n_us_hr_payroll.res_partner_us_ct_dor',
|
||||
'l10n_us_ct_hr_payroll.res_partner_ct_drs_withhold': 'l10n_us_hr_payroll.res_partner_us_ct_dor_sit',
|
||||
'l10n_us_ct_hr_payroll.contrib_register_ct_dol_unemp': 'l10n_us_hr_payroll.contrib_register_us_ct_dor',
|
||||
|
||||
@@ -17,6 +17,7 @@ from .state.general import general_state_unemployment, \
|
||||
from .state.al_alabama import al_alabama_state_income_withholding
|
||||
from .state.ar_arkansas import ar_arkansas_state_income_withholding
|
||||
from .state.az_arizona import az_arizona_state_income_withholding
|
||||
from .state.ca_california import ca_california_state_income_withholding
|
||||
from .state.ct_connecticut import ct_connecticut_state_income_withholding
|
||||
from .state.ga_georgia import ga_georgia_state_income_withholding
|
||||
from .state.il_illinois import il_illinois_state_income_withholding
|
||||
@@ -66,6 +67,7 @@ class HRPayslip(models.Model):
|
||||
'al_alabama_state_income_withholding': al_alabama_state_income_withholding,
|
||||
'ar_arkansas_state_income_withholding': ar_arkansas_state_income_withholding,
|
||||
'az_arizona_state_income_withholding': az_arizona_state_income_withholding,
|
||||
'ca_california_state_income_withholding': ca_california_state_income_withholding,
|
||||
'ct_connecticut_state_income_withholding': ct_connecticut_state_income_withholding,
|
||||
'ga_georgia_state_income_withholding': ga_georgia_state_income_withholding,
|
||||
'il_illinois_state_income_withholding': il_illinois_state_income_withholding,
|
||||
|
||||
98
l10n_us_hr_payroll/models/state/ca_california.py
Normal file
98
l10n_us_hr_payroll/models/state/ca_california.py
Normal file
@@ -0,0 +1,98 @@
|
||||
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||
|
||||
from .general import _state_applies, sit_wage
|
||||
|
||||
MAX_ALLOWANCES = 10
|
||||
|
||||
|
||||
def ca_california_state_income_withholding(payslip, categories, worked_days, inputs):
|
||||
"""
|
||||
Returns SIT eligible wage and rate.
|
||||
|
||||
:return: result, result_rate (wage, percent)
|
||||
"""
|
||||
|
||||
state_code = 'CA'
|
||||
if not _state_applies(payslip, state_code):
|
||||
return 0.0, 0.0
|
||||
|
||||
# Determine Wage
|
||||
wage = sit_wage(payslip, categories)
|
||||
if not wage:
|
||||
return 0.0, 0.0
|
||||
|
||||
filing_status = payslip.dict.contract_id.us_payroll_config_value('ca_de4_sit_filing_status')
|
||||
if not filing_status:
|
||||
return 0.0, 0.0
|
||||
|
||||
schedule_pay = payslip.dict.contract_id.schedule_pay
|
||||
additional = payslip.dict.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||
sit_allowances = payslip.dict.contract_id.us_payroll_config_value('ca_de4_sit_allowances')
|
||||
additional_allowances = payslip.dict.contract_id.us_payroll_config_value('ca_de4_sit_additional_allowances')
|
||||
low_income_exemption = payslip.dict.rule_parameter('us_ca_sit_income_exemption_rate')[schedule_pay]
|
||||
estimated_deduction = payslip.dict.rule_parameter('us_ca_sit_estimated_deduction_rate')[schedule_pay]
|
||||
tax_table = payslip.dict.rule_parameter('us_ca_sit_tax_rate')[filing_status].get(schedule_pay)
|
||||
standard_deduction = payslip.dict.rule_parameter('us_ca_sit_standard_deduction_rate')[schedule_pay]
|
||||
exemption_allowances = payslip.dict.rule_parameter('us_ca_sit_exemption_allowance_rate')[schedule_pay]
|
||||
|
||||
low_income = False
|
||||
if filing_status == 'head_household':
|
||||
_, _, _, income = low_income_exemption
|
||||
if wage <= income:
|
||||
low_income = True
|
||||
elif filing_status == 'married':
|
||||
if sit_allowances >= 2:
|
||||
_, _, income, _ = low_income_exemption
|
||||
if wage <= income:
|
||||
low_income = True
|
||||
else:
|
||||
_, income, _, _ = low_income_exemption
|
||||
if wage <= income:
|
||||
low_income = True
|
||||
else:
|
||||
income, _, _, _ = low_income_exemption
|
||||
if wage <= income:
|
||||
low_income = True
|
||||
|
||||
withholding = 0.0
|
||||
taxable_wage = wage
|
||||
if not low_income:
|
||||
allowance_index = max(additional_allowances - 1, 0)
|
||||
if additional_allowances > MAX_ALLOWANCES:
|
||||
deduction = (estimated_deduction[0] * additional_allowances)
|
||||
taxable_wage -= deduction
|
||||
elif additional_allowances > 0:
|
||||
deduction = estimated_deduction[allowance_index]
|
||||
taxable_wage -= deduction
|
||||
|
||||
if filing_status == 'head_household':
|
||||
_, _, _, deduction = standard_deduction
|
||||
taxable_wage -= deduction
|
||||
elif filing_status == 'married':
|
||||
if sit_allowances >= 2:
|
||||
_, _, deduction, _ = standard_deduction
|
||||
taxable_wage -= deduction
|
||||
else:
|
||||
_, deduction, _, _ = standard_deduction
|
||||
taxable_wage -= deduction
|
||||
else:
|
||||
deduction, _, _, _ = standard_deduction
|
||||
taxable_wage -= deduction
|
||||
|
||||
over = 0.0
|
||||
for row in tax_table:
|
||||
if taxable_wage <= row[0]:
|
||||
withholding = ((taxable_wage - over) * row[1]) + row[2]
|
||||
break
|
||||
over = row[0]
|
||||
|
||||
allowance_index = sit_allowances - 1
|
||||
if sit_allowances > MAX_ALLOWANCES:
|
||||
deduction = exemption_allowances[0] * sit_allowances
|
||||
withholding -= deduction
|
||||
elif sit_allowances > 0:
|
||||
deduction = exemption_allowances[allowance_index]
|
||||
withholding -= deduction
|
||||
|
||||
withholding += additional
|
||||
return wage, -((withholding / wage) * 100.0)
|
||||
@@ -66,6 +66,17 @@ class HRContractUSPayrollConfig(models.Model):
|
||||
string='Arizona A-4 Withholding Percentage',
|
||||
help='A-4 1. (0.8 or 1.3 or 1.8 or 2.7 or 3.6 or 4.2 or 5.1 or 0 for exempt.')
|
||||
|
||||
ca_de4_sit_allowances = fields.Integer(string='California W-4 Allowances',
|
||||
help='CA W-4 3.')
|
||||
ca_de4_sit_additional_allowances = fields.Integer(string='California W-4 Additional Allowances',
|
||||
help='CA W-4 4(c).')
|
||||
ca_de4_sit_filing_status = fields.Selection([
|
||||
('', 'Exempt'),
|
||||
('single', 'Single or Married filing separately'),
|
||||
('married', 'Married filing jointly'),
|
||||
('head_household', 'Head of Household')
|
||||
], string='California W-4 Filing Status', help='CA W-4 1(c).')
|
||||
|
||||
ct_w4na_sit_code = fields.Selection([
|
||||
('a', 'A'),
|
||||
('b', 'B'),
|
||||
|
||||
@@ -16,6 +16,9 @@ from . import test_us_ar_arkansas_payslip_2020
|
||||
from . import test_us_az_arizona_payslip_2019
|
||||
from . import test_us_az_arizona_payslip_2020
|
||||
|
||||
from . import test_us_ca_california_payslip_2019
|
||||
from . import test_us_ca_california_payslip_2020
|
||||
|
||||
from . import test_us_ct_connecticut_payslip_2019
|
||||
from . import test_us_ct_connecticut_payslip_2020
|
||||
|
||||
|
||||
245
l10n_us_hr_payroll/tests/test_us_ca_california_payslip_2019.py
Normal file
245
l10n_us_hr_payroll/tests/test_us_ca_california_payslip_2019.py
Normal file
@@ -0,0 +1,245 @@
|
||||
# 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)
|
||||
42
l10n_us_hr_payroll/tests/test_us_ca_california_payslip_2020.py
Executable file
42
l10n_us_hr_payroll/tests/test_us_ca_california_payslip_2020.py
Executable 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 TestUsCAPayslip(TestUsPayslip):
|
||||
###
|
||||
# 2020 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.0
|
||||
|
||||
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_2020_taxes_example1(self):
|
||||
combined_er_rate = self.CA_UIT + self.CA_ETT
|
||||
self._test_er_suta('CA', combined_er_rate, date(2020, 1, 1), wage_base=self.CA_UNEMP_MAX_WAGE)
|
||||
self._test_ee_suta('CA', self.CA_SDI, date(2020, 1, 1), wage_base=self.CA_UNEMP_MAX_WAGE, relaxed=True)
|
||||
# these expected values come from https://www.edd.ca.gov/pdf_pub_ctr/20methb.pdf
|
||||
self._test_sit(210.0, 'single', 1, 0, 0, 'weekly', date(2020, 1, 1), 0.00)
|
||||
self._test_sit(1250.0, 'married', 2, 1, 0, 'bi-weekly', date(2020, 1, 1), 1.23)
|
||||
self._test_sit(4100.0, 'married', 5, 0, 0, 'monthly', date(2020, 1, 1), 1.5)
|
||||
self._test_sit(800.0, 'head_household', 3, 0, 0, 'weekly', date(2020, 1, 1), 2.28)
|
||||
self._test_sit(1800.0, 'married', 4, 0, 0, 'semi-monthly', date(2020, 1, 1), 0.84)
|
||||
self._test_sit(45000.0, 'married', 4, 0, 0, 'annually', date(2020, 1, 1), 59.78)
|
||||
self._test_sit(45000.0, 'married', 4, 0, 20.0, 'annually', date(2020, 1, 1), 79.78)
|
||||
@@ -62,6 +62,13 @@
|
||||
<field name="az_a4_sit_withholding_percentage" string="Withholding Percentage 1."/>
|
||||
<field name="state_income_tax_additional_withholding" string="Additional Withholding 2."/>
|
||||
</group>
|
||||
<group name="state_ca_california" string="CA California" attrs="{'invisible':[('state_id', '!=', %(base.state_us_5)s)]}">
|
||||
<p colspan="2"><h3>Form W-4 - State Income Tax</h3></p>
|
||||
<field name="ca_de4_sit_filing_status" string="Filing Status 1(c)."/>
|
||||
<field name="ca_de4_sit_allowances" string="Allowances 3."/>
|
||||
<field name="ca_de4_sit_additional_allowances" string="Additional Allowances 4(c)."/>
|
||||
<field name="state_income_tax_additional_withholding" string="Additional Withholding 2."/>
|
||||
</group>
|
||||
<group name="state_ct_connecticut" string="CT Connecticut" attrs="{'invisible':[('state_id', '!=', %(base.state_us_7)s)]}">
|
||||
<p colspan="2"><h3>Form CT-W4 - State Income Tax</h3></p>
|
||||
<field name="ct_w4na_sit_code" string="Withholding Code 1."/>
|
||||
|
||||
Reference in New Issue
Block a user