Functional Weave
Code in Rust

payroll.gross-to-net@1.0.1

vectors.json

8,606 bytes · view raw

[
 {
  "name": "3,000 pounds a month on 1257L, category A, nothing else",
  "args": [
   {
    "gross": {
     "minor": 300000,
     "currency": "GBP"
    },
    "frequency": "monthly",
    "payDate": "2026-04-28",
    "taxCode": "1257L",
    "previousTaxablePayToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "previousTaxToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "niCategory": "A",
    "studentLoanPlans": [],
    "pension": null
   }
  ],
  "expect": {
   "gross": {
    "minor": 300000,
    "currency": "GBP"
   },
   "pensionEmployee": {
    "minor": 0,
    "currency": "GBP"
   },
   "pensionEmployer": {
    "minor": 0,
    "currency": "GBP"
   },
   "taxablePay": {
    "minor": 300000,
    "currency": "GBP"
   },
   "tax": {
    "minor": 39020,
    "currency": "GBP"
   },
   "employeeNi": {
    "minor": 15616,
    "currency": "GBP"
   },
   "employerNi": {
    "minor": 38745,
    "currency": "GBP"
   },
   "studentLoan": {
    "minor": 0,
    "currency": "GBP"
   },
   "postgraduateLoan": {
    "minor": 0,
    "currency": "GBP"
   },
   "net": {
    "minor": 245364,
    "currency": "GBP"
   },
   "taxablePayToDate": {
    "minor": 300000,
    "currency": "GBP"
   },
   "taxToDate": {
    "minor": 39020,
    "currency": "GBP"
   },
   "period": 1,
   "taxYear": "2026/27"
  }
 },
 {
  "name": "relief at source pension at the minimums, plan 2 and a postgraduate loan",
  "args": [
   {
    "gross": {
     "minor": 300000,
     "currency": "GBP"
    },
    "frequency": "monthly",
    "payDate": "2026-04-28",
    "taxCode": "1257L",
    "previousTaxablePayToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "previousTaxToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "niCategory": "A",
    "studentLoanPlans": [
     "plan-2",
     "postgraduate"
    ],
    "pension": {
     "employeeBasisPoints": null,
     "employerBasisPoints": null,
     "earningsBasis": "qualifying-earnings",
     "arrangement": "relief-at-source"
    }
   }
  ],
  "expect": {
   "gross": {
    "minor": 300000,
    "currency": "GBP"
   },
   "pensionEmployee": {
    "minor": 9920,
    "currency": "GBP"
   },
   "pensionEmployer": {
    "minor": 7440,
    "currency": "GBP"
   },
   "taxablePay": {
    "minor": 300000,
    "currency": "GBP"
   },
   "tax": {
    "minor": 39020,
    "currency": "GBP"
   },
   "employeeNi": {
    "minor": 15616,
    "currency": "GBP"
   },
   "employerNi": {
    "minor": 38745,
    "currency": "GBP"
   },
   "studentLoan": {
    "minor": 4900,
    "currency": "GBP"
   },
   "postgraduateLoan": {
    "minor": 7500,
    "currency": "GBP"
   },
   "net": {
    "minor": 223044,
    "currency": "GBP"
   },
   "taxablePayToDate": {
    "minor": 300000,
    "currency": "GBP"
   },
   "taxToDate": {
    "minor": 39020,
    "currency": "GBP"
   },
   "period": 1,
   "taxYear": "2026/27"
  }
 },
 {
  "name": "a net pay arrangement comes off before tax but not before NI",
  "args": [
   {
    "gross": {
     "minor": 300000,
     "currency": "GBP"
    },
    "frequency": "monthly",
    "payDate": "2026-04-28",
    "taxCode": "1257L",
    "previousTaxablePayToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "previousTaxToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "niCategory": "A",
    "studentLoanPlans": [],
    "pension": {
     "employeeBasisPoints": 500,
     "employerBasisPoints": 300,
     "earningsBasis": "all-earnings",
     "arrangement": "net-pay"
    }
   }
  ],
  "expect": {
   "gross": {
    "minor": 300000,
    "currency": "GBP"
   },
   "pensionEmployee": {
    "minor": 15000,
    "currency": "GBP"
   },
   "pensionEmployer": {
    "minor": 9000,
    "currency": "GBP"
   },
   "taxablePay": {
    "minor": 285000,
    "currency": "GBP"
   },
   "tax": {
    "minor": 36020,
    "currency": "GBP"
   },
   "employeeNi": {
    "minor": 15616,
    "currency": "GBP"
   },
   "employerNi": {
    "minor": 38745,
    "currency": "GBP"
   },
   "studentLoan": {
    "minor": 0,
    "currency": "GBP"
   },
   "postgraduateLoan": {
    "minor": 0,
    "currency": "GBP"
   },
   "net": {
    "minor": 233364,
    "currency": "GBP"
   },
   "taxablePayToDate": {
    "minor": 285000,
    "currency": "GBP"
   },
   "taxToDate": {
    "minor": 36020,
    "currency": "GBP"
   },
   "period": 1,
   "taxYear": "2026/27"
  }
 },
 {
  "name": "a Scottish taxpayer with plans 1 and 2 repays once, at plan 1's lower threshold",
  "args": [
   {
    "gross": {
     "minor": 300000,
     "currency": "GBP"
    },
    "frequency": "monthly",
    "payDate": "2026-04-28",
    "taxCode": "S1257L",
    "previousTaxablePayToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "previousTaxToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "niCategory": "A",
    "studentLoanPlans": [
     "plan-2",
     "plan-1"
    ],
    "pension": null
   }
  ],
  "expect": {
   "gross": {
    "minor": 300000,
    "currency": "GBP"
   },
   "pensionEmployee": {
    "minor": 0,
    "currency": "GBP"
   },
   "pensionEmployer": {
    "minor": 0,
    "currency": "GBP"
   },
   "taxablePay": {
    "minor": 300000,
    "currency": "GBP"
   },
   "tax": {
    "minor": 39227,
    "currency": "GBP"
   },
   "employeeNi": {
    "minor": 15616,
    "currency": "GBP"
   },
   "employerNi": {
    "minor": 38745,
    "currency": "GBP"
   },
   "studentLoan": {
    "minor": 6800,
    "currency": "GBP"
   },
   "postgraduateLoan": {
    "minor": 0,
    "currency": "GBP"
   },
   "net": {
    "minor": 238357,
    "currency": "GBP"
   },
   "taxablePayToDate": {
    "minor": 300000,
    "currency": "GBP"
   },
   "taxToDate": {
    "minor": 39227,
    "currency": "GBP"
   },
   "period": 1,
   "taxYear": "2026/27"
  }
 },
 {
  "name": "weekly pay under the allowance and the primary threshold: only employer NI",
  "args": [
   {
    "gross": {
     "minor": 20000,
     "currency": "GBP"
    },
    "frequency": "weekly",
    "payDate": "2025-04-11",
    "taxCode": "1257L",
    "previousTaxablePayToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "previousTaxToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "niCategory": "A",
    "studentLoanPlans": [],
    "pension": null
   }
  ],
  "expect": {
   "gross": {
    "minor": 20000,
    "currency": "GBP"
   },
   "pensionEmployee": {
    "minor": 0,
    "currency": "GBP"
   },
   "pensionEmployer": {
    "minor": 0,
    "currency": "GBP"
   },
   "taxablePay": {
    "minor": 20000,
    "currency": "GBP"
   },
   "tax": {
    "minor": 0,
    "currency": "GBP"
   },
   "employeeNi": {
    "minor": 0,
    "currency": "GBP"
   },
   "employerNi": {
    "minor": 1560,
    "currency": "GBP"
   },
   "studentLoan": {
    "minor": 0,
    "currency": "GBP"
   },
   "postgraduateLoan": {
    "minor": 0,
    "currency": "GBP"
   },
   "net": {
    "minor": 20000,
    "currency": "GBP"
   },
   "taxablePayToDate": {
    "minor": 20000,
    "currency": "GBP"
   },
   "taxToDate": {
    "minor": 0,
    "currency": "GBP"
   },
   "period": 1,
   "taxYear": "2025/26"
  }
 },
 {
  "name": "a student loan plan listed twice is an error",
  "args": [
   {
    "gross": {
     "minor": 300000,
     "currency": "GBP"
    },
    "frequency": "monthly",
    "payDate": "2026-04-28",
    "taxCode": "1257L",
    "previousTaxablePayToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "previousTaxToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "niCategory": "A",
    "studentLoanPlans": [
     "plan-2",
     "plan-2"
    ],
    "pension": null
   }
  ],
  "expectError": "listed twice"
 },
 {
  "name": "gross pay in euros is an error",
  "args": [
   {
    "gross": {
     "minor": 300000,
     "currency": "EUR"
    },
    "frequency": "monthly",
    "payDate": "2026-04-28",
    "taxCode": "1257L",
    "previousTaxablePayToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "previousTaxToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "niCategory": "A",
    "studentLoanPlans": [],
    "pension": null
   }
  ],
  "expectError": "must be in GBP"
 },
 {
  "name": "a code HMRC does not issue is an error",
  "args": [
   {
    "gross": {
     "minor": 300000,
     "currency": "GBP"
    },
    "frequency": "monthly",
    "payDate": "2026-04-28",
    "taxCode": "1257Q",
    "previousTaxablePayToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "previousTaxToDate": {
     "minor": 0,
     "currency": "GBP"
    },
    "niCategory": "A",
    "studentLoanPlans": [],
    "pension": null
   }
  ],
  "expectError": "unrecognised tax code"
 }
]