[
{
"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"
},
{
"name": "a penny net is a penny gross",
"args": [
{
"minor": 1,
"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": 1,
"currency": "GBP"
},
"pensionEmployee": {
"minor": 0,
"currency": "GBP"
},
"pensionEmployer": {
"minor": 0,
"currency": "GBP"
},
"taxablePay": {
"minor": 1,
"currency": "GBP"
},
"tax": {
"minor": 0,
"currency": "GBP"
},
"employeeNi": {
"minor": 0,
"currency": "GBP"
},
"employerNi": {
"minor": 0,
"currency": "GBP"
},
"studentLoan": {
"minor": 0,
"currency": "GBP"
},
"postgraduateLoan": {
"minor": 0,
"currency": "GBP"
},
"net": {
"minor": 1,
"currency": "GBP"
},
"taxablePayToDate": {
"minor": 1,
"currency": "GBP"
},
"taxToDate": {
"minor": 0,
"currency": "GBP"
},
"period": 1,
"taxYear": "2026/27"
}
},
{
"name": "up to the primary threshold nothing is deducted: 1,048 net is 1,048 gross",
"args": [
{
"minor": 104800,
"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": 104800,
"currency": "GBP"
},
"pensionEmployee": {
"minor": 0,
"currency": "GBP"
},
"pensionEmployer": {
"minor": 0,
"currency": "GBP"
},
"taxablePay": {
"minor": 104800,
"currency": "GBP"
},
"tax": {
"minor": 0,
"currency": "GBP"
},
"employeeNi": {
"minor": 0,
"currency": "GBP"
},
"employerNi": {
"minor": 9465,
"currency": "GBP"
},
"studentLoan": {
"minor": 0,
"currency": "GBP"
},
"postgraduateLoan": {
"minor": 0,
"currency": "GBP"
},
"net": {
"minor": 104800,
"currency": "GBP"
},
"taxablePayToDate": {
"minor": 104800,
"currency": "GBP"
},
"taxToDate": {
"minor": 0,
"currency": "GBP"
},
"period": 1,
"taxYear": "2026/27"
}
},
{
"name": "1,500 net, with tax on whole pounds and NI to the penny",
"args": [
{
"minor": 150000,
"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": 167561,
"currency": "GBP"
},
"pensionEmployee": {
"minor": 0,
"currency": "GBP"
},
"pensionEmployer": {
"minor": 0,
"currency": "GBP"
},
"taxablePay": {
"minor": 167561,
"currency": "GBP"
},
"tax": {
"minor": 12540,
"currency": "GBP"
},
"employeeNi": {
"minor": 5021,
"currency": "GBP"
},
"employerNi": {
"minor": 18879,
"currency": "GBP"
},
"studentLoan": {
"minor": 0,
"currency": "GBP"
},
"postgraduateLoan": {
"minor": 0,
"currency": "GBP"
},
"net": {
"minor": 150000,
"currency": "GBP"
},
"taxablePayToDate": {
"minor": 167561,
"currency": "GBP"
},
"taxToDate": {
"minor": 12540,
"currency": "GBP"
},
"period": 1,
"taxYear": "2026/27"
}
},
{
"name": "3,000 net, still inside the basic rate band",
"args": [
{
"minor": 300000,
"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": 375887,
"currency": "GBP"
},
"pensionEmployee": {
"minor": 0,
"currency": "GBP"
},
"pensionEmployer": {
"minor": 0,
"currency": "GBP"
},
"taxablePay": {
"minor": 375887,
"currency": "GBP"
},
"tax": {
"minor": 54200,
"currency": "GBP"
},
"employeeNi": {
"minor": 21687,
"currency": "GBP"
},
"employerNi": {
"minor": 50128,
"currency": "GBP"
},
"studentLoan": {
"minor": 0,
"currency": "GBP"
},
"postgraduateLoan": {
"minor": 0,
"currency": "GBP"
},
"net": {
"minor": 300000,
"currency": "GBP"
},
"taxablePayToDate": {
"minor": 375887,
"currency": "GBP"
},
"taxToDate": {
"minor": 54200,
"currency": "GBP"
},
"period": 1,
"taxYear": "2026/27"
}
},
{
"name": "in month 2 the same net as month 1 needs 3,000.22, not 3,000.00, because tax rounds the year to date down to the pound",
"args": [
{
"minor": 245364,
"currency": "GBP"
},
{
"gross": {
"minor": 0,
"currency": "GBP"
},
"frequency": "monthly",
"payDate": "2026-05-28",
"taxCode": "1257L",
"previousTaxablePayToDate": {
"minor": 300000,
"currency": "GBP"
},
"previousTaxToDate": {
"minor": 39020,
"currency": "GBP"
},
"niCategory": "A",
"studentLoanPlans": [],
"pension": null
}
],
"expect": {
"gross": {
"minor": 300022,
"currency": "GBP"
},
"pensionEmployee": {
"minor": 0,
"currency": "GBP"
},
"pensionEmployer": {
"minor": 0,
"currency": "GBP"
},
"taxablePay": {
"minor": 300022,
"currency": "GBP"
},
"tax": {
"minor": 39040,
"currency": "GBP"
},
"employeeNi": {
"minor": 15618,
"currency": "GBP"
},
"employerNi": {
"minor": 38748,
"currency": "GBP"
},
"studentLoan": {
"minor": 0,
"currency": "GBP"
},
"postgraduateLoan": {
"minor": 0,
"currency": "GBP"
},
"net": {
"minor": 245364,
"currency": "GBP"
},
"taxablePayToDate": {
"minor": 600022,
"currency": "GBP"
},
"taxToDate": {
"minor": 78060,
"currency": "GBP"
},
"period": 2,
"taxYear": "2026/27"
}
},
{
"name": "a negative target is an error",
"args": [
{
"minor": -100,
"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 no gross up to 10 million pounds reaches is an error",
"args": [
{
"minor": 900000000,
"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": "no gross pay up to 1000000000 pence gives a net of 900000000 pence"
}
]