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)