Swiftly
Testing a SWIFT gateway against the specification, not the vendor's documentation.
Product screens
Overview
I built a generator of realistic SWIFT statement flows that exposed where Bottomline's gateway handling differed from the specification.
Problem statement
A SWIFT gateway at a tier-1 bank needed a steady stream of believable messages whose balances add up across days. Real messages were sensitive and impossible to replay on demand, and the vendor's documentation could not be taken as the source of truth.
Solution
Templates for every legal shape.
I created sixty-eight templates covering short and long BICs, different sending-party schemes, multi-line narratives, forward balances and statements split across messages.
A financial model underneath.
I modelled account histories to keep closing, available and ledger balances and uncleared funds consistent from day to day, so statements reconcile with the notifications before them.
Designed for non-developers.
I built designers for organising environments, users, accounts and scenarios, plus an execution view that plays each sequence in date order and writes gateway-ready files.
Documentation for the team.
I wrote the user guide, including an appendix that maps every SWIFT tag to every message type.
Specification matrix
Which tags does each message type allow? Mandatory, conditional, optional or not permitted. Choose a message type to focus the column.
| Tag | MT900 | MT910 | MT940 | MT942 | MT950 |
|---|---|---|---|---|---|
| 13DDate/Time Indication | – | – | – | M | – |
| 20Transaction Reference Number | M | M | M | M | M |
| 21Related Reference | M | M | O | O | – |
| 25Account Identification | M | M | M | M | M |
| 28CStatement Number/Sequence Number | – | – | M | M | M |
| 32AValue Date, Currency Code, Amount | M | M | – | – | – |
| 34FFloor Limit Indicator | – | – | – | M | – |
| 50Ordering Customer | – | C | – | – | – |
| 52Ordering Institution | O | C | – | – | – |
| 56Intermediary | – | O | – | – | – |
| 60AOpening Balance | – | – | M | – | M |
| 61Statement Line | – | – | O | O | O |
| 62AClosing Balance (Booked Funds) | – | – | M | – | M |
| 64Closing Available Balance (Available Funds) | – | – | O | – | O |
| 65Forward Available Balance | – | – | O | – | – |
| 86Information to Account Owner | – | – | C | C | – |
| 72Sender to Receiver Information | O | O | – | – | – |
| 90DNumber and Sum of Entries (debit) | – | – | – | O | – |
| 90CNumber and Sum of Entries (credit) | – | – | – | O | – |
Outcome
I built the tests from the SWIFT message specification rather than from the vendor's documentation. In 2012 that exposed places where the gateway's handling of the protocol differed from the specification, most visibly in optional and custom fields. The tool is about 22,000 lines of Java.
Technologies used
Data volumes & scale
- 68 templates
- 5 message types
- 19 tags modelled
- ~22,000 lines of Java
