[ { "name": "standard rate today: 12% on a 100.00 net premium", "args": [ { "minor": 10000, "currency": "GBP" }, false, "standard", "2026-09-23", "half-up" ], "expect": { "net": { "minor": 10000, "currency": "GBP" }, "tax": { "minor": 1200, "currency": "GBP" }, "gross": { "minor": 11200, "currency": "GBP" }, "basisPoints": 1200, "band": "standard", "validFrom": "2017-06-01" } }, { "name": "taking 12% out of 112.00 gives 12.00 of tax, not 13.44", "args": [ { "minor": 11200, "currency": "GBP" }, true, "standard", "2026-09-23", "half-up" ], "expect": { "net": { "minor": 10000, "currency": "GBP" }, "tax": { "minor": 1200, "currency": "GBP" }, "gross": { "minor": 11200, "currency": "GBP" }, "basisPoints": 1200, "band": "standard", "validFrom": "2017-06-01" } }, { "name": "higher rate today: 20% on a 50.00 travel premium", "args": [ { "minor": 5000, "currency": "GBP" }, false, "higher", "2026-09-23", "half-up" ], "expect": { "net": { "minor": 5000, "currency": "GBP" }, "tax": { "minor": 1000, "currency": "GBP" }, "gross": { "minor": 6000, "currency": "GBP" }, "basisPoints": 2000, "band": "higher", "validFrom": "2011-01-04" } }, { "name": "first day of 12%: net of 250.00 gross is 223.21 (22321.43 rounds down)", "args": [ { "minor": 25000, "currency": "GBP" }, true, "standard", "2017-06-01", "half-up" ], "expect": { "net": { "minor": 22321, "currency": "GBP" }, "tax": { "minor": 2679, "currency": "GBP" }, "gross": { "minor": 25000, "currency": "GBP" }, "basisPoints": 1200, "band": "standard", "validFrom": "2017-06-01" } }, { "name": "last day of 10%: net of 250.00 gross is 227.27", "args": [ { "minor": 25000, "currency": "GBP" }, true, "standard", "2017-05-31", "half-up" ], "expect": { "net": { "minor": 22727, "currency": "GBP" }, "tax": { "minor": 2273, "currency": "GBP" }, "gross": { "minor": 25000, "currency": "GBP" }, "basisPoints": 1000, "band": "standard", "validFrom": "2016-10-01" } }, { "name": "9.5% on 199.99: 18.99905 rounds half-up to 19.00", "args": [ { "minor": 19999, "currency": "GBP" }, false, "standard", "2016-01-01", "half-up" ], "expect": { "net": { "minor": 19999, "currency": "GBP" }, "tax": { "minor": 1900, "currency": "GBP" }, "gross": { "minor": 21899, "currency": "GBP" }, "basisPoints": 950, "band": "standard", "validFrom": "2015-11-01" } }, { "name": "9.5% on 199.99 rounded down is 18.99", "args": [ { "minor": 19999, "currency": "GBP" }, false, "standard", "2016-01-01", "down" ], "expect": { "net": { "minor": 19999, "currency": "GBP" }, "tax": { "minor": 1899, "currency": "GBP" }, "gross": { "minor": 21898, "currency": "GBP" }, "basisPoints": 950, "band": "standard", "validFrom": "2015-11-01" } }, { "name": "higher rate on its last day at 17.5%", "args": [ { "minor": 8000, "currency": "GBP" }, false, "higher", "2011-01-03", "half-up" ], "expect": { "net": { "minor": 8000, "currency": "GBP" }, "tax": { "minor": 1400, "currency": "GBP" }, "gross": { "minor": 9400, "currency": "GBP" }, "basisPoints": 1750, "band": "higher", "validFrom": "1997-04-01" } }, { "name": "higher rate on the first day of 20%", "args": [ { "minor": 8000, "currency": "GBP" }, false, "higher", "2011-01-04", "half-up" ], "expect": { "net": { "minor": 8000, "currency": "GBP" }, "tax": { "minor": 1600, "currency": "GBP" }, "gross": { "minor": 9600, "currency": "GBP" }, "basisPoints": 2000, "band": "higher", "validFrom": "2011-01-04" } }, { "name": "standard 6% from 4 January 2011: 33.33 gives 2.00 (1.9998)", "args": [ { "minor": 3333, "currency": "GBP" }, false, "standard", "2011-01-04", "half-up" ], "expect": { "net": { "minor": 3333, "currency": "GBP" }, "tax": { "minor": 200, "currency": "GBP" }, "gross": { "minor": 3533, "currency": "GBP" }, "basisPoints": 600, "band": "standard", "validFrom": "2011-01-04" } }, { "name": "standard 5% on the day before 6%", "args": [ { "minor": 10500, "currency": "GBP" }, true, "standard", "2011-01-03", "half-up" ], "expect": { "net": { "minor": 10000, "currency": "GBP" }, "tax": { "minor": 500, "currency": "GBP" }, "gross": { "minor": 10500, "currency": "GBP" }, "basisPoints": 500, "band": "standard", "validFrom": "1999-07-01" } }, { "name": "introductory 2.5% in 1995", "args": [ { "minor": 10000, "currency": "GBP" }, false, "standard", "1995-06-01", "half-up" ], "expect": { "net": { "minor": 10000, "currency": "GBP" }, "tax": { "minor": 250, "currency": "GBP" }, "gross": { "minor": 10250, "currency": "GBP" }, "basisPoints": 250, "band": "standard", "validFrom": "1994-10-01" } }, { "name": "4% in 1998", "args": [ { "minor": 10000, "currency": "GBP" }, false, "standard", "1998-01-01", "half-up" ], "expect": { "net": { "minor": 10000, "currency": "GBP" }, "tax": { "minor": 400, "currency": "GBP" }, "gross": { "minor": 10400, "currency": "GBP" }, "basisPoints": 400, "band": "standard", "validFrom": "1997-04-01" } }, { "name": "the first day IPT existed", "args": [ { "minor": 4000, "currency": "GBP" }, false, "standard", "1994-10-01", "half-up" ], "expect": { "net": { "minor": 4000, "currency": "GBP" }, "tax": { "minor": 100, "currency": "GBP" }, "gross": { "minor": 4100, "currency": "GBP" }, "basisPoints": 250, "band": "standard", "validFrom": "1994-10-01" } }, { "name": "a return premium carries its IPT back: -33.33 at 12% is -4.00 of tax", "args": [ { "minor": -3333, "currency": "GBP" }, false, "standard", "2026-09-23", "half-up" ], "expect": { "net": { "minor": -3333, "currency": "GBP" }, "tax": { "minor": -400, "currency": "GBP" }, "gross": { "minor": -3733, "currency": "GBP" }, "basisPoints": 1200, "band": "standard", "validFrom": "2017-06-01" } }, { "name": "gross 1.00 at 12%: net 0.89, tax 0.11", "args": [ { "minor": 100, "currency": "GBP" }, true, "standard", "2026-09-23", "half-up" ], "expect": { "net": { "minor": 89, "currency": "GBP" }, "tax": { "minor": 11, "currency": "GBP" }, "gross": { "minor": 100, "currency": "GBP" }, "basisPoints": 1200, "band": "standard", "validFrom": "2017-06-01" } }, { "name": "a zero premium has no tax", "args": [ { "minor": 0, "currency": "GBP" }, false, "higher", "2026-09-23", "half-up" ], "expect": { "net": { "minor": 0, "currency": "GBP" }, "tax": { "minor": 0, "currency": "GBP" }, "gross": { "minor": 0, "currency": "GBP" }, "basisPoints": 2000, "band": "higher", "validFrom": "2011-01-04" } }, { "name": "no higher rate before 1 April 1997", "args": [ { "minor": 10000, "currency": "GBP" }, false, "higher", "1996-01-01", "half-up" ], "expectError": "no IPT rule for higher on 1996-01-01" }, { "name": "no IPT before 1 October 1994", "args": [ { "minor": 10000, "currency": "GBP" }, false, "standard", "1994-09-30", "half-up" ], "expectError": "no IPT rule for standard on 1994-09-30" }, { "name": "a malformed date is refused", "args": [ { "minor": 10000, "currency": "GBP" }, false, "standard", "23/09/2026", "half-up" ], "expectError": "onDate must be an ISO date" }, { "name": "an unknown band is refused", "args": [ { "minor": 10000, "currency": "GBP" }, false, "reduced", "2026-09-23", "half-up" ], "expectError": "unknown IPT band" }, {"name": "a date with a trailing newline is refused", "args": [{"minor": 10000, "currency": "GBP"}, false, "standard", "2026-09-23\n", "half-up"], "expectError": "onDate must be an ISO date"}, {"name": "a date in Arabic-Indic digits is refused", "args": [{"minor": 10000, "currency": "GBP"}, false, "standard", "٢٠٢٦-09-23", "half-up"], "expectError": "onDate must be an ISO date"} ]