Functional Weave
Code in Rust

payroll.income-tax@1.0.0

vectors.json

18,091 bytes · view raw

[
 {
  "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"
 }
]