Functional Weave
Code in Python

payroll.net-to-gross@1.0.2

vectors.json

14,650 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"
 },
 {
  "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"
 }
]