diff --git a/l10n_us_hr_payroll/data/state/ca_california.xml b/l10n_us_hr_payroll/data/state/ca_california.xml index 2a907b3a..062cd764 100644 --- a/l10n_us_hr_payroll/data/state/ca_california.xml +++ b/l10n_us_hr_payroll/data/state/ca_california.xml @@ -7,11 +7,8 @@ - - 7000.0 - - - + + 7000.0 @@ -26,11 +23,8 @@ - - 3.5 - - - + + 3.4 @@ -45,11 +39,8 @@ - - 0.1 - - - + + 0.1 @@ -64,16 +55,17 @@ - - 1.0 - - - + 1.0 + + 1.2 + + + @@ -82,270 +74,6 @@ - - { - '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), - ), - }, - } - - - @@ -612,6 +340,272 @@ + + + + { + '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), + ), + }, + } + + + @@ -620,19 +614,6 @@ - - { - '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), - } - - - @@ -648,6 +629,21 @@ + + + + { + '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), + } + + + @@ -656,21 +652,9 @@ - - { - '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), - } - - - + { 'weekly': ( 19, 38, 58, 77, 96, 115, 135, 154, 173, 192), @@ -692,19 +676,6 @@ - - { - '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), - } - - - @@ -720,6 +691,21 @@ + + + + { + '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), + } + + + @@ -728,19 +714,6 @@ - - { - '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), - } - - - @@ -756,6 +729,21 @@ + + + + { + '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), + } + + + diff --git a/l10n_us_hr_payroll/tests/test_us_ca_california_payslip_2019.py b/l10n_us_hr_payroll/tests/test_us_ca_california_payslip_2019.py deleted file mode 100644 index b9331fe3..00000000 --- a/l10n_us_hr_payroll/tests/test_us_ca_california_payslip_2019.py +++ /dev/null @@ -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) \ No newline at end of file diff --git a/l10n_us_hr_payroll/tests/test_us_ca_california_payslip_2021.py b/l10n_us_hr_payroll/tests/test_us_ca_california_payslip_2021.py new file mode 100755 index 00000000..5a0b8b7f --- /dev/null +++ b/l10n_us_hr_payroll/tests/test_us_ca_california_payslip_2021.py @@ -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)