[ { "name": "1257L month 1 on 3,000 pounds: free pay 1,048.26, tax 20% of 1,951", "args": [ "1257L", "monthly", 1, { "minor": 300000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2026-04-28" ], "expect": { "tax": { "minor": 39020, "currency": "GBP" }, "taxToDate": { "minor": 39020, "currency": "GBP" }, "payToDate": { "minor": 300000, "currency": "GBP" }, "allowanceToDate": { "minor": 104826, "currency": "GBP" }, "taxablePay": { "minor": 195100, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "the same pay for a Scottish taxpayer runs through starter, basic and intermediate bands", "args": [ "S1257L", "monthly", 1, { "minor": 300000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2026-04-28" ], "expect": { "tax": { "minor": 39227, "currency": "GBP" }, "taxToDate": { "minor": 39227, "currency": "GBP" }, "payToDate": { "minor": 300000, "currency": "GBP" }, "allowanceToDate": { "minor": 104826, "currency": "GBP" }, "taxablePay": { "minor": 195100, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "a Welsh taxpayer pays the rest-of-UK rates", "args": [ "C1257L", "monthly", 1, { "minor": 300000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2026-04-28" ], "expect": { "tax": { "minor": 39020, "currency": "GBP" }, "taxToDate": { "minor": 39020, "currency": "GBP" }, "payToDate": { "minor": 300000, "currency": "GBP" }, "allowanceToDate": { "minor": 104826, "currency": "GBP" }, "taxablePay": { "minor": 195100, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "higher rate in month 1 uses the exact threshold of 3,141.6666", "args": [ "1257L", "monthly", 1, { "minor": 600000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2025-04-28" ], "expect": { "tax": { "minor": 135206, "currency": "GBP" }, "taxToDate": { "minor": 135206, "currency": "GBP" }, "payToDate": { "minor": 600000, "currency": "GBP" }, "allowanceToDate": { "minor": 104826, "currency": "GBP" }, "taxablePay": { "minor": 495100, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "additional rate on a weekly payroll", "args": [ "1257L", "weekly", 1, { "minor": 300000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2024-04-12" ], "expect": { "tax": { "minor": 97577, "currency": "GBP" }, "taxToDate": { "minor": 97577, "currency": "GBP" }, "payToDate": { "minor": 300000, "currency": "GBP" }, "allowanceToDate": { "minor": 24192, "currency": "GBP" }, "taxablePay": { "minor": 275800, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "month 12 of a 60,000 pound year settles to the annual tax", "args": [ "1257L", "monthly", 12, { "minor": 500000, "currency": "GBP" }, { "minor": 5500000, "currency": "GBP" }, { "minor": 1047000, "currency": "GBP" }, "2027-03-31" ], "expect": { "tax": { "minor": 95800, "currency": "GBP" }, "taxToDate": { "minor": 1142800, "currency": "GBP" }, "payToDate": { "minor": 6000000, "currency": "GBP" }, "allowanceToDate": { "minor": 1257912, "currency": "GBP" }, "taxablePay": { "minor": 4742000, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "a refund when pay stops: month 3 with no pay", "args": [ "1257L", "monthly", 3, { "minor": 0, "currency": "GBP" }, { "minor": 600000, "currency": "GBP" }, { "minor": 78040, "currency": "GBP" }, "2025-06-30" ], "expect": { "tax": { "minor": -20940, "currency": "GBP" }, "taxToDate": { "minor": 57100, "currency": "GBP" }, "payToDate": { "minor": 600000, "currency": "GBP" }, "allowanceToDate": { "minor": 314478, "currency": "GBP" }, "taxablePay": { "minor": 285500, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "K1000 month 1: the 50% overriding limit holds the deduction to 250 pounds", "args": [ "K1000", "monthly", 1, { "minor": 50000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2026-04-30" ], "expect": { "tax": { "minor": 25000, "currency": "GBP" }, "taxToDate": { "minor": 25000, "currency": "GBP" }, "payToDate": { "minor": 50000, "currency": "GBP" }, "allowanceToDate": { "minor": -83409, "currency": "GBP" }, "taxablePay": { "minor": 133400, "currency": "GBP" }, "cumulative": true, "limitApplied": true, "taxNotDeducted": { "minor": 1680, "currency": "GBP" } } }, { "name": "K1000 month 2 recovers what the limit held back", "args": [ "K1000", "monthly", 2, { "minor": 300000, "currency": "GBP" }, { "minor": 50000, "currency": "GBP" }, { "minor": 25000, "currency": "GBP" }, "2026-05-29" ], "expect": { "tax": { "minor": 78360, "currency": "GBP" }, "taxToDate": { "minor": 103360, "currency": "GBP" }, "payToDate": { "minor": 350000, "currency": "GBP" }, "allowanceToDate": { "minor": -166818, "currency": "GBP" }, "taxablePay": { "minor": 516800, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "a K code with negative pay deducts nothing: the limit is zero", "args": [ "K100", "monthly", 2, { "minor": -50000, "currency": "GBP" }, { "minor": 100000, "currency": "GBP" }, { "minor": 5000, "currency": "GBP" }, "2026-05-29" ], "expect": { "tax": { "minor": 0, "currency": "GBP" }, "taxToDate": { "minor": 5000, "currency": "GBP" }, "payToDate": { "minor": 50000, "currency": "GBP" }, "allowanceToDate": { "minor": -16818, "currency": "GBP" }, "taxablePay": { "minor": 66800, "currency": "GBP" }, "cumulative": true, "limitApplied": true, "taxNotDeducted": { "minor": 8360, "currency": "GBP" } } }, { "name": "BR taxes all pay, rounded down to the pound", "args": [ "BR", "monthly", 1, { "minor": 123456, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2026-04-30" ], "expect": { "tax": { "minor": 24680, "currency": "GBP" }, "taxToDate": { "minor": 24680, "currency": "GBP" }, "payToDate": { "minor": 123456, "currency": "GBP" }, "allowanceToDate": { "minor": 0, "currency": "GBP" }, "taxablePay": { "minor": 123400, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "BR on a week 1 basis ignores the year to date", "args": [ "BR W1", "weekly", 10, { "minor": 30099, "currency": "GBP" }, { "minor": 300000, "currency": "GBP" }, { "minor": 50000, "currency": "GBP" }, "2026-06-12" ], "expect": { "tax": { "minor": 6000, "currency": "GBP" }, "taxToDate": { "minor": 56000, "currency": "GBP" }, "payToDate": { "minor": 330099, "currency": "GBP" }, "allowanceToDate": { "minor": 0, "currency": "GBP" }, "taxablePay": { "minor": 30000, "currency": "GBP" }, "cumulative": false, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "D0 is 40% on everything in England", "args": [ "D0", "monthly", 1, { "minor": 200000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2026-04-30" ], "expect": { "tax": { "minor": 80000, "currency": "GBP" }, "taxToDate": { "minor": 80000, "currency": "GBP" }, "payToDate": { "minor": 200000, "currency": "GBP" }, "allowanceToDate": { "minor": 0, "currency": "GBP" }, "taxablePay": { "minor": 200000, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "SD0 is the 21% intermediate rate in Scotland", "args": [ "SD0", "monthly", 1, { "minor": 100050, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2026-04-30" ], "expect": { "tax": { "minor": 21000, "currency": "GBP" }, "taxToDate": { "minor": 21000, "currency": "GBP" }, "payToDate": { "minor": 100050, "currency": "GBP" }, "allowanceToDate": { "minor": 0, "currency": "GBP" }, "taxablePay": { "minor": 100000, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "SD3 is the 48% top rate from 2024-25", "args": [ "SD3", "monthly", 1, { "minor": 100000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2025-04-30" ], "expect": { "tax": { "minor": 48000, "currency": "GBP" }, "taxToDate": { "minor": 48000, "currency": "GBP" }, "payToDate": { "minor": 100000, "currency": "GBP" }, "allowanceToDate": { "minor": 0, "currency": "GBP" }, "taxablePay": { "minor": 100000, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "SD2 was the 47% top rate in 2023-24", "args": [ "SD2", "monthly", 1, { "minor": 100000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2023-04-28" ], "expect": { "tax": { "minor": 47000, "currency": "GBP" }, "taxToDate": { "minor": 47000, "currency": "GBP" }, "payToDate": { "minor": 100000, "currency": "GBP" }, "allowanceToDate": { "minor": 0, "currency": "GBP" }, "taxablePay": { "minor": 100000, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "NT on a cumulative basis refunds everything deducted so far", "args": [ "NT", "monthly", 4, { "minor": 200000, "currency": "GBP" }, { "minor": 600000, "currency": "GBP" }, { "minor": 60000, "currency": "GBP" }, "2026-07-31" ], "expect": { "tax": { "minor": -60000, "currency": "GBP" }, "taxToDate": { "minor": 0, "currency": "GBP" }, "payToDate": { "minor": 800000, "currency": "GBP" }, "allowanceToDate": { "minor": 0, "currency": "GBP" }, "taxablePay": { "minor": 0, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "0T on a week 1 basis: no allowance at all", "args": [ "0T W1", "weekly", 5, { "minor": 50000, "currency": "GBP" }, { "minor": 200000, "currency": "GBP" }, { "minor": 20000, "currency": "GBP" }, "2026-05-08" ], "expect": { "tax": { "minor": 10000, "currency": "GBP" }, "taxToDate": { "minor": 30000, "currency": "GBP" }, "payToDate": { "minor": 250000, "currency": "GBP" }, "allowanceToDate": { "minor": 0, "currency": "GBP" }, "taxablePay": { "minor": 50000, "currency": "GBP" }, "cumulative": false, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "week 53 is taxed non-cumulatively on the week 1 figures", "args": [ "1257L", "weekly", 53, { "minor": 50000, "currency": "GBP" }, { "minor": 2600000, "currency": "GBP" }, { "minor": 300000, "currency": "GBP" }, "2027-04-05" ], "expect": { "tax": { "minor": 5160, "currency": "GBP" }, "taxToDate": { "minor": 305160, "currency": "GBP" }, "payToDate": { "minor": 2650000, "currency": "GBP" }, "allowanceToDate": { "minor": 24192, "currency": "GBP" }, "taxablePay": { "minor": 25800, "currency": "GBP" }, "cumulative": false, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "fortnightly on a week 1 basis uses the week 2 figures", "args": [ "1257L W1", "fortnightly", 10, { "minor": 100000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2026-08-07" ], "expect": { "tax": { "minor": 10320, "currency": "GBP" }, "taxToDate": { "minor": 10320, "currency": "GBP" }, "payToDate": { "minor": 100000, "currency": "GBP" }, "allowanceToDate": { "minor": 48384, "currency": "GBP" }, "taxablePay": { "minor": 51600, "currency": "GBP" }, "cumulative": false, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "four-weekly, second payment in week 8", "args": [ "1257L", "four-weekly", 8, { "minor": 200000, "currency": "GBP" }, { "minor": 200000, "currency": "GBP" }, { "minor": 20640, "currency": "GBP" }, "2026-05-29" ], "expect": { "tax": { "minor": 20640, "currency": "GBP" }, "taxToDate": { "minor": 41280, "currency": "GBP" }, "payToDate": { "minor": 400000, "currency": "GBP" }, "allowanceToDate": { "minor": 193536, "currency": "GBP" }, "taxablePay": { "minor": 206400, "currency": "GBP" }, "cumulative": true, "limitApplied": false, "taxNotDeducted": { "minor": 0, "currency": "GBP" } } }, { "name": "SD3 did not exist in 2023-24", "args": [ "SD3", "monthly", 1, { "minor": 100000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2023-04-28" ], "expectError": "no SD3 rate for scotland" }, { "name": "a date before the bands on file", "args": [ "1257L", "monthly", 1, { "minor": 100000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2022-04-28" ], "expectError": "no income tax bands for rest-of-uk" }, { "name": "pay in euros is refused", "args": [ "1257L", "monthly", 1, { "minor": 100000, "currency": "EUR" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2026-04-28" ], "expectError": "payroll amounts must be in GBP" }, { "name": "there is no month 13", "args": [ "1257L", "monthly", 13, { "minor": 100000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2026-04-28" ], "expectError": "is not a tax period for monthly pay" }, { "name": "fortnightly pay has week 54, not week 53", "args": [ "1257L", "fortnightly", 53, { "minor": 100000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2027-04-05" ], "expectError": "is not a tax period for fortnightly pay" }, { "name": "an unrecognised code is refused", "args": [ "1257X9", "monthly", 1, { "minor": 100000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2026-04-28" ], "expectError": "unrecognised tax code" }, { "name": "a malformed date is refused", "args": [ "1257L", "monthly", 1, { "minor": 100000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "28/04/2026" ], "expectError": "ISO date" } ]