Functional Weave
Code in TypeScript

payroll.net-to-gross@1.0.0

vectors.json

6,588 bytes · view raw

[
 {
  "name": "grossing up the 3,000 pound payslip's net gives back 3,000",
  "args": [
   {
    "minor": 245364,
    "currency": "GBP"
   },
   {
    "gross": {
     "minor": 0,
     "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": "below the allowance and the threshold, gross equals net",
  "args": [
   {
    "minor": 100000,
    "currency": "GBP"
   },
   {
    "gross": {
     "minor": 0,
     "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": 100000,
    "currency": "GBP"
   },
   "pensionEmployee": {
    "minor": 0,
    "currency": "GBP"
   },
   "pensionEmployer": {
    "minor": 0,
    "currency": "GBP"
   },
   "taxablePay": {
    "minor": 100000,
    "currency": "GBP"
   },
   "tax": {
    "minor": 0,
    "currency": "GBP"
   },
   "employeeNi": {
    "minor": 0,
    "currency": "GBP"
   },
   "employerNi": {
    "minor": 8745,
    "currency": "GBP"
   },
   "studentLoan": {
    "minor": 0,
    "currency": "GBP"
   },
   "postgraduateLoan": {
    "minor": 0,
    "currency": "GBP"
   },
   "net": {
    "minor": 100000,
    "currency": "GBP"
   },
   "taxablePayToDate": {
    "minor": 100000,
    "currency": "GBP"
   },
   "taxToDate": {
    "minor": 0,
    "currency": "GBP"
   },
   "period": 1,
   "taxYear": "2026/27"
  }
 },
 {
  "name": "2,000 net needs 2,369.96, not the 2,369.26 an unrounded formula suggests",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   {
    "gross": {
     "minor": 0,
     "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": 236996,
    "currency": "GBP"
   },
   "pensionEmployee": {
    "minor": 0,
    "currency": "GBP"
   },
   "pensionEmployer": {
    "minor": 0,
    "currency": "GBP"
   },
   "taxablePay": {
    "minor": 236996,
    "currency": "GBP"
   },
   "tax": {
    "minor": 26420,
    "currency": "GBP"
   },
   "employeeNi": {
    "minor": 10576,
    "currency": "GBP"
   },
   "employerNi": {
    "minor": 29294,
    "currency": "GBP"
   },
   "studentLoan": {
    "minor": 0,
    "currency": "GBP"
   },
   "postgraduateLoan": {
    "minor": 0,
    "currency": "GBP"
   },
   "net": {
    "minor": 200000,
    "currency": "GBP"
   },
   "taxablePayToDate": {
    "minor": 236996,
    "currency": "GBP"
   },
   "taxToDate": {
    "minor": 26420,
    "currency": "GBP"
   },
   "period": 1,
   "taxYear": "2026/27"
  }
 },
 {
  "name": "a tax refund can reach the target with no gross pay at all",
  "args": [
   {
    "minor": 50000,
    "currency": "GBP"
   },
   {
    "gross": {
     "minor": 0,
     "currency": "GBP"
    },
    "frequency": "monthly",
    "payDate": "2026-07-28",
    "taxCode": "NT",
    "previousTaxablePayToDate": {
     "minor": 600000,
     "currency": "GBP"
    },
    "previousTaxToDate": {
     "minor": 60000,
     "currency": "GBP"
    },
    "niCategory": "A",
    "studentLoanPlans": [],
    "pension": null
   }
  ],
  "expect": {
   "gross": {
    "minor": 0,
    "currency": "GBP"
   },
   "pensionEmployee": {
    "minor": 0,
    "currency": "GBP"
   },
   "pensionEmployer": {
    "minor": 0,
    "currency": "GBP"
   },
   "taxablePay": {
    "minor": 0,
    "currency": "GBP"
   },
   "tax": {
    "minor": -60000,
    "currency": "GBP"
   },
   "employeeNi": {
    "minor": 0,
    "currency": "GBP"
   },
   "employerNi": {
    "minor": 0,
    "currency": "GBP"
   },
   "studentLoan": {
    "minor": 0,
    "currency": "GBP"
   },
   "postgraduateLoan": {
    "minor": 0,
    "currency": "GBP"
   },
   "net": {
    "minor": 60000,
    "currency": "GBP"
   },
   "taxablePayToDate": {
    "minor": 600000,
    "currency": "GBP"
   },
   "taxToDate": {
    "minor": 0,
    "currency": "GBP"
   },
   "period": 4,
   "taxYear": "2026/27"
  }
 },
 {
  "name": "a zero target is an error",
  "args": [
   {
    "minor": 0,
    "currency": "GBP"
   },
   {
    "gross": {
     "minor": 0,
     "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
   }
  ],
  "expectError": "targetNet must be more than zero"
 },
 {
  "name": "a target in euros is an error",
  "args": [
   {
    "minor": 100000,
    "currency": "EUR"
   },
   {
    "gross": {
     "minor": 0,
     "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
   }
  ],
  "expectError": "must be in GBP"
 }
]