diff --git a/l10n_us_hr_payroll/data/state/vt_vermont.xml b/l10n_us_hr_payroll/data/state/vt_vermont.xml
index 74f1a491..9ee8c497 100644
--- a/l10n_us_hr_payroll/data/state/vt_vermont.xml
+++ b/l10n_us_hr_payroll/data/state/vt_vermont.xml
@@ -12,6 +12,11 @@
+
+ 14100.0
+
+
+
@@ -21,6 +26,7 @@
+
1.0
@@ -46,6 +52,19 @@
+
+
+ {
+ 'weekly' : 84.62,
+ 'bi-weekly' : 169.23,
+ 'semi-monthly': 183.33,
+ 'monthly' : 366.67,
+ 'quarterly' : 1100.00,
+ 'annually': 4400.00,
+ }
+
+
+
@@ -148,6 +167,101 @@
+
+
+ {
+ 'single': {
+ 'weekly': (
+ ( 61, 0.00, 0.00),
+ ( 849, 0.00, 3.35),
+ ( 1969, 26.40, 6.60),
+ ( 4041, 100.32, 7.60),
+ ('inf', 257.79, 8.75),
+ ),
+ 'bi-weekly': (
+ ( 122, 0.00, 0.00),
+ ( 1697, 0.00, 3.35),
+ ( 3938, 52.76, 6.60),
+ ( 8082, 200.67, 7.60),
+ ('inf', 515.61, 8.75),
+ ),
+ 'semi-monthly': (
+ ( 132, 0.00, 0.00),
+ ( 1839, 0.00, 3.35),
+ ( 4266, 57.18, 6.60),
+ ( 8755, 217.37, 7.60),
+ ('inf', 558.53, 8.75),
+ ),
+ 'monthly': (
+ ( 265, 0.00, 0.00),
+ ( 3677, 0.00, 3.35),
+ ( 8531, 114.30, 6.60),
+ (17510, 434.67, 7.60),
+ ('inf', 1117.07, 8.75),
+ ),
+ 'quarterly': (
+ ( 794, 0.00, 0.00),
+ (11031, 0.00, 3.35),
+ (25594, 342.94, 6.60),
+ (52531, 1304.10, 7.60),
+ ('inf', 3351.31, 8.75),
+ ),
+ 'annually': (
+ ( 3175, 0.00, 0.00),
+ ( 44125, 0.00, 3.35),
+ (102375, 1371.83, 6.60),
+ (210125, 5216.33, 7.60),
+ ( 'inf', 13405.33, 8.75),
+ ),
+ },
+ 'married': {
+ 'weekly': (
+ ( 183, 0.00, 0.00),
+ ( 1499, 0.00, 3.35),
+ ( 3363, 44.09, 6.60),
+ ( 5028, 167.11, 7.60),
+ ('inf', 293.65, 8.75),
+ ),
+ 'bi-weekly': (
+ ( 366, 0.00, 0.00),
+ ( 2997, 0.00, 3.35),
+ ( 6726, 88.14, 6.60),
+ (10057, 334.25, 7.60),
+ ('inf', 587.41, 8.75),
+ ),
+ 'semi-monthly': (
+ ( 397, 0.00, 0.00),
+ ( 3247, 0.00, 3.35),
+ ( 7286, 95.48, 6.60),
+ (10895, 362.05, 7.60),
+ ('inf', 636.33, 8.75),
+ ),
+ 'monthly': (
+ ( 794, 0.00, 0.00),
+ ( 6494, 0.00, 3.35),
+ (14573, 190.95, 6.60),
+ (21790, 724.16, 7.60),
+ ('inf', 1272.66, 8.75),
+ ),
+ 'quarterly': (
+ ( 2381, 0.00, 0.00),
+ (19481, 0.00, 3.35),
+ (43719, 572.85, 6.60),
+ (65719, 2172.56, 7.60),
+ ('inf', 3817.96, 8.75),
+ ),
+ 'annually': (
+ ( 9525, 0.00, 0.00),
+ ( 77925, 0.00, 3.35),
+ (174875, 2291.40, 6.60),
+ (261475, 8690.10, 7.60),
+ ( 'inf', 15271.70, 8.75),
+ ),
+ },
+ }
+
+
+
diff --git a/l10n_us_hr_payroll/tests/test_us_vt_vermont_payslip_2021.py b/l10n_us_hr_payroll/tests/test_us_vt_vermont_payslip_2021.py
new file mode 100755
index 00000000..67fb7a99
--- /dev/null
+++ b/l10n_us_hr_payroll/tests/test_us_vt_vermont_payslip_2021.py
@@ -0,0 +1,37 @@
+# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
+
+from datetime import date, timedelta
+from .common import TestUsPayslip
+
+
+class TestUsVTPayslip(TestUsPayslip):
+ ###
+ # 2021 Taxes and Rates
+ ###
+ VT_UNEMP_MAX_WAGE = 14100.0
+ VT_UNEMP = 1.0
+ # Calculation based on example https://tax.vermont.gov/sites/tax/files/documents/WithholdingInstructions.pdf
+
+ def _test_sit(self, wage, filing_status, allowances, additional_withholding, exempt, schedule_pay, date_start, expected_withholding):
+ employee = self._createEmployee()
+ contract = self._createContract(employee,
+ wage=wage,
+ state_id=self.get_us_state('VT'),
+ vt_w4vt_sit_filing_status=filing_status,
+ vt_w4vt_sit_allowances=allowances,
+ state_income_tax_additional_withholding=additional_withholding,
+ state_income_tax_exempt=exempt,
+ schedule_pay=schedule_pay)
+ payslip = self._createPayslip(employee, date_start, date_start + timedelta(days=7))
+ payslip.compute_sheet()
+ cats = self._getCategories(payslip)
+
+ self._log('Computed period tax: ' + str(expected_withholding))
+ self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), -expected_withholding)
+
+ def test_2021_taxes_example(self):
+ self._test_er_suta('VT', self.VT_UNEMP, date(2021, 1, 1), wage_base=self.VT_UNEMP_MAX_WAGE)
+ self._test_sit(1800, 'married', 2, 0, False, 'weekly', date(2021, 1, 1), 52.79)
+ self._test_sit(1800, 'married', 2, 10, False, 'weekly', date(2021, 1, 1), 62.79)
+ self._test_sit(1000, 'single', 1, 0, True, 'weekly', date(2021, 1, 1), 0.00)
+ self._test_sit(8000, 'single', 1, 10, False, 'bi-weekly', date(2021, 1, 1), 506.52)