[
{
"name": "100,000 of work and 5,000 of materials on site, 5% retention, 70,000 paid before, standard-rated VAT, no CIS",
"args": [
{
"workDone": {
"minor": 10000000,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 500000,
"currency": "GBP"
},
"retentionBasisPoints": 500,
"stage": "interim",
"previouslyCertified": {
"minor": 7000000,
"currency": "GBP"
},
"cisStatus": null,
"cisMaterials": {
"minor": 0,
"currency": "GBP"
},
"vatCategory": "STANDARD",
"reverseCharge": false,
"valuationDate": "2026-09-23"
}
],
"expect": {
"grossValuation": {
"minor": 10500000,
"currency": "GBP"
},
"retention": {
"full": {
"minor": 525000,
"currency": "GBP"
},
"held": {
"minor": 525000,
"currency": "GBP"
},
"released": {
"minor": 0,
"currency": "GBP"
}
},
"netValuation": {
"minor": 9975000,
"currency": "GBP"
},
"previouslyCertified": {
"minor": 7000000,
"currency": "GBP"
},
"amountDue": {
"minor": 2975000,
"currency": "GBP"
},
"vat": {
"minor": 595000,
"currency": "GBP"
},
"vatBasisPoints": 2000,
"reverseChargeVat": {
"minor": 0,
"currency": "GBP"
},
"cis": null,
"amountPayable": {
"minor": 3570000,
"currency": "GBP"
}
}
},
{
"name": "the same valuation under the reverse charge and CIS: no VAT charged, 20% withheld from the labour only",
"args": [
{
"workDone": {
"minor": 10000000,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 500000,
"currency": "GBP"
},
"retentionBasisPoints": 500,
"stage": "interim",
"previouslyCertified": {
"minor": 7000000,
"currency": "GBP"
},
"cisStatus": "standard",
"cisMaterials": {
"minor": 975000,
"currency": "GBP"
},
"vatCategory": "STANDARD",
"reverseCharge": true,
"valuationDate": "2026-09-23"
}
],
"expect": {
"grossValuation": {
"minor": 10500000,
"currency": "GBP"
},
"retention": {
"full": {
"minor": 525000,
"currency": "GBP"
},
"held": {
"minor": 525000,
"currency": "GBP"
},
"released": {
"minor": 0,
"currency": "GBP"
}
},
"netValuation": {
"minor": 9975000,
"currency": "GBP"
},
"previouslyCertified": {
"minor": 7000000,
"currency": "GBP"
},
"amountDue": {
"minor": 2975000,
"currency": "GBP"
},
"vat": {
"minor": 0,
"currency": "GBP"
},
"vatBasisPoints": 2000,
"reverseChargeVat": {
"minor": 595000,
"currency": "GBP"
},
"cis": {
"payment": {
"minor": 2975000,
"currency": "GBP"
},
"materials": {
"minor": 975000,
"currency": "GBP"
},
"labour": {
"minor": 2000000,
"currency": "GBP"
},
"basisPoints": 2000,
"deduction": {
"minor": 400000,
"currency": "GBP"
},
"netPayment": {
"minor": 2575000,
"currency": "GBP"
}
},
"amountPayable": {
"minor": 2575000,
"currency": "GBP"
}
}
},
{
"name": "a subcontractor not registered for VAT or CIS: 30% of the whole amount due",
"args": [
{
"workDone": {
"minor": 1000000,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 0,
"currency": "GBP"
},
"retentionBasisPoints": 300,
"stage": "interim",
"previouslyCertified": {
"minor": 500000,
"currency": "GBP"
},
"cisStatus": "higher",
"cisMaterials": {
"minor": 0,
"currency": "GBP"
},
"vatCategory": null,
"reverseCharge": false,
"valuationDate": "2026-09-23"
}
],
"expect": {
"grossValuation": {
"minor": 1000000,
"currency": "GBP"
},
"retention": {
"full": {
"minor": 30000,
"currency": "GBP"
},
"held": {
"minor": 30000,
"currency": "GBP"
},
"released": {
"minor": 0,
"currency": "GBP"
}
},
"netValuation": {
"minor": 970000,
"currency": "GBP"
},
"previouslyCertified": {
"minor": 500000,
"currency": "GBP"
},
"amountDue": {
"minor": 470000,
"currency": "GBP"
},
"vat": {
"minor": 0,
"currency": "GBP"
},
"vatBasisPoints": 0,
"reverseChargeVat": {
"minor": 0,
"currency": "GBP"
},
"cis": {
"payment": {
"minor": 470000,
"currency": "GBP"
},
"materials": {
"minor": 0,
"currency": "GBP"
},
"labour": {
"minor": 470000,
"currency": "GBP"
},
"basisPoints": 3000,
"deduction": {
"minor": 141000,
"currency": "GBP"
},
"netPayment": {
"minor": 329000,
"currency": "GBP"
}
},
"amountPayable": {
"minor": 329000,
"currency": "GBP"
}
}
},
{
"name": "practical completion releases half the retention: the amount due is the released half",
"args": [
{
"workDone": {
"minor": 10000000,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 0,
"currency": "GBP"
},
"retentionBasisPoints": 500,
"stage": "practical-completion",
"previouslyCertified": {
"minor": 9500000,
"currency": "GBP"
},
"cisStatus": null,
"cisMaterials": {
"minor": 0,
"currency": "GBP"
},
"vatCategory": "STANDARD",
"reverseCharge": false,
"valuationDate": "2026-09-23"
}
],
"expect": {
"grossValuation": {
"minor": 10000000,
"currency": "GBP"
},
"retention": {
"full": {
"minor": 500000,
"currency": "GBP"
},
"held": {
"minor": 250000,
"currency": "GBP"
},
"released": {
"minor": 250000,
"currency": "GBP"
}
},
"netValuation": {
"minor": 9750000,
"currency": "GBP"
},
"previouslyCertified": {
"minor": 9500000,
"currency": "GBP"
},
"amountDue": {
"minor": 250000,
"currency": "GBP"
},
"vat": {
"minor": 50000,
"currency": "GBP"
},
"vatBasisPoints": 2000,
"reverseChargeVat": {
"minor": 0,
"currency": "GBP"
},
"cis": null,
"amountPayable": {
"minor": 300000,
"currency": "GBP"
}
}
},
{
"name": "the final valuation releases the rest; gross payment status withholds nothing",
"args": [
{
"workDone": {
"minor": 10000000,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 0,
"currency": "GBP"
},
"retentionBasisPoints": 500,
"stage": "final",
"previouslyCertified": {
"minor": 9750000,
"currency": "GBP"
},
"cisStatus": "gross",
"cisMaterials": {
"minor": 0,
"currency": "GBP"
},
"vatCategory": "STANDARD",
"reverseCharge": false,
"valuationDate": "2026-09-23"
}
],
"expect": {
"grossValuation": {
"minor": 10000000,
"currency": "GBP"
},
"retention": {
"full": {
"minor": 500000,
"currency": "GBP"
},
"held": {
"minor": 0,
"currency": "GBP"
},
"released": {
"minor": 500000,
"currency": "GBP"
}
},
"netValuation": {
"minor": 10000000,
"currency": "GBP"
},
"previouslyCertified": {
"minor": 9750000,
"currency": "GBP"
},
"amountDue": {
"minor": 250000,
"currency": "GBP"
},
"vat": {
"minor": 50000,
"currency": "GBP"
},
"vatBasisPoints": 2000,
"reverseChargeVat": {
"minor": 0,
"currency": "GBP"
},
"cis": {
"payment": {
"minor": 250000,
"currency": "GBP"
},
"materials": {
"minor": 0,
"currency": "GBP"
},
"labour": {
"minor": 250000,
"currency": "GBP"
},
"basisPoints": 0,
"deduction": {
"minor": 0,
"currency": "GBP"
},
"netPayment": {
"minor": 250000,
"currency": "GBP"
}
},
"amountPayable": {
"minor": 300000,
"currency": "GBP"
}
}
},
{
"name": "over-certified before: a negative amount due, with negative VAT, when there is no CIS",
"args": [
{
"workDone": {
"minor": 1000000,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 0,
"currency": "GBP"
},
"retentionBasisPoints": 500,
"stage": "interim",
"previouslyCertified": {
"minor": 1000000,
"currency": "GBP"
},
"cisStatus": null,
"cisMaterials": {
"minor": 0,
"currency": "GBP"
},
"vatCategory": "STANDARD",
"reverseCharge": false,
"valuationDate": "2026-09-23"
}
],
"expect": {
"grossValuation": {
"minor": 1000000,
"currency": "GBP"
},
"retention": {
"full": {
"minor": 50000,
"currency": "GBP"
},
"held": {
"minor": 50000,
"currency": "GBP"
},
"released": {
"minor": 0,
"currency": "GBP"
}
},
"netValuation": {
"minor": 950000,
"currency": "GBP"
},
"previouslyCertified": {
"minor": 1000000,
"currency": "GBP"
},
"amountDue": {
"minor": -50000,
"currency": "GBP"
},
"vat": {
"minor": -10000,
"currency": "GBP"
},
"vatBasisPoints": 2000,
"reverseChargeVat": {
"minor": 0,
"currency": "GBP"
},
"cis": null,
"amountPayable": {
"minor": -60000,
"currency": "GBP"
}
}
},
{
"name": "reduced-rated work: 5% of 11,975.30 is 598.765, VAT rounds half up to 598.77; CIS on the 10,000.00 labour",
"args": [
{
"workDone": {
"minor": 1234567,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 0,
"currency": "GBP"
},
"retentionBasisPoints": 300,
"stage": "interim",
"previouslyCertified": {
"minor": 0,
"currency": "GBP"
},
"cisStatus": "standard",
"cisMaterials": {
"minor": 197530,
"currency": "GBP"
},
"vatCategory": "REDUCED",
"reverseCharge": false,
"valuationDate": "2026-09-23"
}
],
"expect": {
"grossValuation": {
"minor": 1234567,
"currency": "GBP"
},
"retention": {
"full": {
"minor": 37037,
"currency": "GBP"
},
"held": {
"minor": 37037,
"currency": "GBP"
},
"released": {
"minor": 0,
"currency": "GBP"
}
},
"netValuation": {
"minor": 1197530,
"currency": "GBP"
},
"previouslyCertified": {
"minor": 0,
"currency": "GBP"
},
"amountDue": {
"minor": 1197530,
"currency": "GBP"
},
"vat": {
"minor": 59877,
"currency": "GBP"
},
"vatBasisPoints": 500,
"reverseChargeVat": {
"minor": 0,
"currency": "GBP"
},
"cis": {
"payment": {
"minor": 1197530,
"currency": "GBP"
},
"materials": {
"minor": 197530,
"currency": "GBP"
},
"labour": {
"minor": 1000000,
"currency": "GBP"
},
"basisPoints": 2000,
"deduction": {
"minor": 200000,
"currency": "GBP"
},
"netPayment": {
"minor": 997530,
"currency": "GBP"
}
},
"amountPayable": {
"minor": 1057407,
"currency": "GBP"
}
}
},
{
"name": "the CIS deduction rounds down: 20% of 123.48 is 24.696, withheld 24.69",
"args": [
{
"workDone": {
"minor": 12348,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 0,
"currency": "GBP"
},
"retentionBasisPoints": 0,
"stage": "interim",
"previouslyCertified": {
"minor": 0,
"currency": "GBP"
},
"cisStatus": "standard",
"cisMaterials": {
"minor": 0,
"currency": "GBP"
},
"vatCategory": null,
"reverseCharge": false,
"valuationDate": "2026-09-23"
}
],
"expect": {
"grossValuation": {
"minor": 12348,
"currency": "GBP"
},
"retention": {
"full": {
"minor": 0,
"currency": "GBP"
},
"held": {
"minor": 0,
"currency": "GBP"
},
"released": {
"minor": 0,
"currency": "GBP"
}
},
"netValuation": {
"minor": 12348,
"currency": "GBP"
},
"previouslyCertified": {
"minor": 0,
"currency": "GBP"
},
"amountDue": {
"minor": 12348,
"currency": "GBP"
},
"vat": {
"minor": 0,
"currency": "GBP"
},
"vatBasisPoints": 0,
"reverseChargeVat": {
"minor": 0,
"currency": "GBP"
},
"cis": {
"payment": {
"minor": 12348,
"currency": "GBP"
},
"materials": {
"minor": 0,
"currency": "GBP"
},
"labour": {
"minor": 12348,
"currency": "GBP"
},
"basisPoints": 2000,
"deduction": {
"minor": 2469,
"currency": "GBP"
},
"netPayment": {
"minor": 9879,
"currency": "GBP"
}
},
"amountPayable": {
"minor": 9879,
"currency": "GBP"
}
}
},
{
"name": "zero-rated work: VAT at 0%",
"args": [
{
"workDone": {
"minor": 500000,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 0,
"currency": "GBP"
},
"retentionBasisPoints": 500,
"stage": "interim",
"previouslyCertified": {
"minor": 0,
"currency": "GBP"
},
"cisStatus": null,
"cisMaterials": {
"minor": 0,
"currency": "GBP"
},
"vatCategory": "ZERO",
"reverseCharge": false,
"valuationDate": "2026-09-23"
}
],
"expect": {
"grossValuation": {
"minor": 500000,
"currency": "GBP"
},
"retention": {
"full": {
"minor": 25000,
"currency": "GBP"
},
"held": {
"minor": 25000,
"currency": "GBP"
},
"released": {
"minor": 0,
"currency": "GBP"
}
},
"netValuation": {
"minor": 475000,
"currency": "GBP"
},
"previouslyCertified": {
"minor": 0,
"currency": "GBP"
},
"amountDue": {
"minor": 475000,
"currency": "GBP"
},
"vat": {
"minor": 0,
"currency": "GBP"
},
"vatBasisPoints": 0,
"reverseChargeVat": {
"minor": 0,
"currency": "GBP"
},
"cis": null,
"amountPayable": {
"minor": 475000,
"currency": "GBP"
}
}
},
{
"name": "the rate on the valuation date: 17.5% in 2010",
"args": [
{
"workDone": {
"minor": 100000,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 0,
"currency": "GBP"
},
"retentionBasisPoints": 0,
"stage": "interim",
"previouslyCertified": {
"minor": 0,
"currency": "GBP"
},
"cisStatus": null,
"cisMaterials": {
"minor": 0,
"currency": "GBP"
},
"vatCategory": "STANDARD",
"reverseCharge": false,
"valuationDate": "2010-06-30"
}
],
"expect": {
"grossValuation": {
"minor": 100000,
"currency": "GBP"
},
"retention": {
"full": {
"minor": 0,
"currency": "GBP"
},
"held": {
"minor": 0,
"currency": "GBP"
},
"released": {
"minor": 0,
"currency": "GBP"
}
},
"netValuation": {
"minor": 100000,
"currency": "GBP"
},
"previouslyCertified": {
"minor": 0,
"currency": "GBP"
},
"amountDue": {
"minor": 100000,
"currency": "GBP"
},
"vat": {
"minor": 17500,
"currency": "GBP"
},
"vatBasisPoints": 1750,
"reverseChargeVat": {
"minor": 0,
"currency": "GBP"
},
"cis": null,
"amountPayable": {
"minor": 117500,
"currency": "GBP"
}
}
},
{
"name": "the reverse charge without a VAT category",
"args": [
{
"workDone": {
"minor": 100000,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 0,
"currency": "GBP"
},
"retentionBasisPoints": 0,
"stage": "interim",
"previouslyCertified": {
"minor": 0,
"currency": "GBP"
},
"cisStatus": null,
"cisMaterials": {
"minor": 0,
"currency": "GBP"
},
"vatCategory": null,
"reverseCharge": true,
"valuationDate": "2026-09-23"
}
],
"expectError": "the reverse charge needs a VAT category"
},
{
"name": "the reverse charge on zero-rated work",
"args": [
{
"workDone": {
"minor": 100000,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 0,
"currency": "GBP"
},
"retentionBasisPoints": 0,
"stage": "interim",
"previouslyCertified": {
"minor": 0,
"currency": "GBP"
},
"cisStatus": null,
"cisMaterials": {
"minor": 0,
"currency": "GBP"
},
"vatCategory": "ZERO",
"reverseCharge": true,
"valuationDate": "2026-09-23"
}
],
"expectError": "the reverse charge applies only to STANDARD or REDUCED supplies"
},
{
"name": "a negative amount due under CIS",
"args": [
{
"workDone": {
"minor": 1000000,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 0,
"currency": "GBP"
},
"retentionBasisPoints": 500,
"stage": "interim",
"previouslyCertified": {
"minor": 1000000,
"currency": "GBP"
},
"cisStatus": "standard",
"cisMaterials": {
"minor": 0,
"currency": "GBP"
},
"vatCategory": null,
"reverseCharge": false,
"valuationDate": "2026-09-23"
}
],
"expectError": "the amount due is negative (-50000)"
},
{
"name": "CIS materials above the amount due",
"args": [
{
"workDone": {
"minor": 100000,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 0,
"currency": "GBP"
},
"retentionBasisPoints": 0,
"stage": "interim",
"previouslyCertified": {
"minor": 0,
"currency": "GBP"
},
"cisStatus": "standard",
"cisMaterials": {
"minor": 100001,
"currency": "GBP"
},
"vatCategory": null,
"reverseCharge": false,
"valuationDate": "2026-09-23"
}
],
"expectError": "cannot exceed the payment"
},
{
"name": "materials on site in another currency",
"args": [
{
"workDone": {
"minor": 100000,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 100,
"currency": "EUR"
},
"retentionBasisPoints": 0,
"stage": "interim",
"previouslyCertified": {
"minor": 0,
"currency": "GBP"
},
"cisStatus": null,
"cisMaterials": {
"minor": 0,
"currency": "GBP"
},
"vatCategory": null,
"reverseCharge": false,
"valuationDate": "2026-09-23"
}
],
"expectError": "currency mismatch"
},
{
"name": "an unknown retention stage",
"args": [
{
"workDone": {
"minor": 100000,
"currency": "GBP"
},
"materialsOnSite": {
"minor": 0,
"currency": "GBP"
},
"retentionBasisPoints": 500,
"stage": "handover",
"previouslyCertified": {
"minor": 0,
"currency": "GBP"
},
"cisStatus": null,
"cisMaterials": {
"minor": 0,
"currency": "GBP"
},
"vatCategory": null,
"reverseCharge": false,
"valuationDate": "2026-09-23"
}
],
"expectError": "unknown retention stage \"handover\""
}
]