Functional Weave
Code in Python

banking.faster-payments-limit@1.0.0

vectors.json

12,767 bytes · view raw

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