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