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