[ { "name": "an ordinary payment within every limit", "args": [ { "minor": 50000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 2500000, "currency": "GBP" }, { "minor": 2500000, "currency": "GBP" }, "2026-09-23" ], "expect": { "decision": "allowed", "allowed": true, "schemeLimit": { "minor": 100000000, "currency": "GBP" }, "remainingToday": { "minor": 2500000, "currency": "GBP" } } }, { "name": "exactly the per-payment limit is allowed", "args": [ { "minor": 2500000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 2500000, "currency": "GBP" }, { "minor": 5000000, "currency": "GBP" }, "2026-09-23" ], "expect": { "decision": "allowed", "allowed": true, "schemeLimit": { "minor": 100000000, "currency": "GBP" }, "remainingToday": { "minor": 5000000, "currency": "GBP" } } }, { "name": "a penny over the per-payment limit", "args": [ { "minor": 2500001, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 2500000, "currency": "GBP" }, { "minor": 5000000, "currency": "GBP" }, "2026-09-23" ], "expect": { "decision": "over-transaction-limit", "allowed": false, "schemeLimit": { "minor": 100000000, "currency": "GBP" }, "remainingToday": { "minor": 5000000, "currency": "GBP" } } }, { "name": "exactly what is left of the daily limit is allowed", "args": [ { "minor": 1000000, "currency": "GBP" }, { "minor": 1500000, "currency": "GBP" }, { "minor": 2500000, "currency": "GBP" }, { "minor": 2500000, "currency": "GBP" }, "2026-09-23" ], "expect": { "decision": "allowed", "allowed": true, "schemeLimit": { "minor": 100000000, "currency": "GBP" }, "remainingToday": { "minor": 1000000, "currency": "GBP" } } }, { "name": "a penny over what is left today", "args": [ { "minor": 1000001, "currency": "GBP" }, { "minor": 1500000, "currency": "GBP" }, { "minor": 2500000, "currency": "GBP" }, { "minor": 2500000, "currency": "GBP" }, "2026-09-23" ], "expect": { "decision": "over-daily-limit", "allowed": false, "schemeLimit": { "minor": 100000000, "currency": "GBP" }, "remainingToday": { "minor": 1000000, "currency": "GBP" } } }, { "name": "already over the daily limit: nothing is left, never negative", "args": [ { "minor": 100, "currency": "GBP" }, { "minor": 3000000, "currency": "GBP" }, { "minor": 2500000, "currency": "GBP" }, { "minor": 2500000, "currency": "GBP" }, "2026-09-23" ], "expect": { "decision": "over-daily-limit", "allowed": false, "schemeLimit": { "minor": 100000000, "currency": "GBP" }, "remainingToday": { "minor": 0, "currency": "GBP" } } }, { "name": "the scheme maximum of one million pounds", "args": [ { "minor": 100000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 200000000, "currency": "GBP" }, { "minor": 200000000, "currency": "GBP" }, "2026-09-23" ], "expect": { "decision": "allowed", "allowed": true, "schemeLimit": { "minor": 100000000, "currency": "GBP" }, "remainingToday": { "minor": 200000000, "currency": "GBP" } } }, { "name": "over the scheme maximum even when the bank allows more", "args": [ { "minor": 100000001, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 200000000, "currency": "GBP" }, { "minor": 200000000, "currency": "GBP" }, "2026-09-23" ], "expect": { "decision": "over-scheme-limit", "allowed": false, "schemeLimit": { "minor": 100000000, "currency": "GBP" }, "remainingToday": { "minor": 200000000, "currency": "GBP" } } }, { "name": "the scheme limit is checked before the bank's own limits", "args": [ { "minor": 100000001, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 100, "currency": "GBP" }, { "minor": 100, "currency": "GBP" }, "2026-09-23" ], "expect": { "decision": "over-scheme-limit", "allowed": false, "schemeLimit": { "minor": 100000000, "currency": "GBP" }, "remainingToday": { "minor": 100, "currency": "GBP" } } }, { "name": "the per-payment limit is checked before the daily limit", "args": [ { "minor": 3000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 2500000, "currency": "GBP" }, { "minor": 1000000, "currency": "GBP" }, "2026-09-23" ], "expect": { "decision": "over-transaction-limit", "allowed": false, "schemeLimit": { "minor": 100000000, "currency": "GBP" }, "remainingToday": { "minor": 1000000, "currency": "GBP" } } }, { "name": "\u00a3300,000 was over the scheme limit in 2021", "args": [ { "minor": 30000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 100000000, "currency": "GBP" }, { "minor": 100000000, "currency": "GBP" }, "2021-06-01" ], "expect": { "decision": "over-scheme-limit", "allowed": false, "schemeLimit": { "minor": 25000000, "currency": "GBP" }, "remainingToday": { "minor": 100000000, "currency": "GBP" } } }, { "name": "the day before the \u00a31m limit", "args": [ { "minor": 30000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 100000000, "currency": "GBP" }, { "minor": 100000000, "currency": "GBP" }, "2022-02-09" ], "expect": { "decision": "over-scheme-limit", "allowed": false, "schemeLimit": { "minor": 25000000, "currency": "GBP" }, "remainingToday": { "minor": 100000000, "currency": "GBP" } } }, { "name": "the day the \u00a31m limit was announced", "args": [ { "minor": 30000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 100000000, "currency": "GBP" }, { "minor": 100000000, "currency": "GBP" }, "2022-02-10" ], "expect": { "decision": "allowed", "allowed": true, "schemeLimit": { "minor": 100000000, "currency": "GBP" }, "remainingToday": { "minor": 100000000, "currency": "GBP" } } }, { "name": "\u00a3250,000 from 10 November 2015", "args": [ { "minor": 25000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 100000000, "currency": "GBP" }, { "minor": 100000000, "currency": "GBP" }, "2015-11-10" ], "expect": { "decision": "allowed", "allowed": true, "schemeLimit": { "minor": 25000000, "currency": "GBP" }, "remainingToday": { "minor": 100000000, "currency": "GBP" } } }, { "name": "\u00a3100,000 the day before", "args": [ { "minor": 25000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 100000000, "currency": "GBP" }, { "minor": 100000000, "currency": "GBP" }, "2015-11-09" ], "expect": { "decision": "over-scheme-limit", "allowed": false, "schemeLimit": { "minor": 10000000, "currency": "GBP" }, "remainingToday": { "minor": 100000000, "currency": "GBP" } } }, { "name": "\u00a310,000 at launch", "args": [ { "minor": 1000001, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 100000000, "currency": "GBP" }, { "minor": 100000000, "currency": "GBP" }, "2008-05-27" ], "expect": { "decision": "over-scheme-limit", "allowed": false, "schemeLimit": { "minor": 1000000, "currency": "GBP" }, "remainingToday": { "minor": 100000000, "currency": "GBP" } } }, { "name": "a zero daily limit blocks everything", "args": [ { "minor": 1, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 2500000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, "2026-09-23" ], "expect": { "decision": "over-daily-limit", "allowed": false, "schemeLimit": { "minor": 100000000, "currency": "GBP" }, "remainingToday": { "minor": 0, "currency": "GBP" } } }, { "name": "before the scheme opened is an error", "args": [ { "minor": 100, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 100, "currency": "GBP" }, { "minor": 100, "currency": "GBP" }, "2008-05-26" ], "expectError": "no Faster Payments scheme limit on 2008-05-26" }, { "name": "a euro payment is an error", "args": [ { "minor": 100, "currency": "EUR" }, { "minor": 0, "currency": "GBP" }, { "minor": 100, "currency": "GBP" }, { "minor": 100, "currency": "GBP" }, "2026-09-23" ], "expectError": "Faster Payments is a sterling scheme" }, { "name": "a zero payment is an error", "args": [ { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 100, "currency": "GBP" }, { "minor": 100, "currency": "GBP" }, "2026-09-23" ], "expectError": "amount must be greater than zero" }, { "name": "a negative daily limit is an error", "args": [ { "minor": 100, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 100, "currency": "GBP" }, { "minor": -1, "currency": "GBP" }, "2026-09-23" ], "expectError": "must not be negative" }, { "name": "a malformed date is an error", "args": [ { "minor": 100, "currency": "GBP" }, { "minor": 0, "currency": "GBP" }, { "minor": 100, "currency": "GBP" }, { "minor": 100, "currency": "GBP" }, "23/09/2026" ], "expectError": "onDate must be an ISO date" } ]