Swiftly

2012

Testing a SWIFT gateway against the specification, not the vendor's documentation.

Product screens

01 / 04
Swiftly
Transaction generator: a dated sequence of messages with running balances.

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.

TagMT900MT910MT940MT942MT950
13DDate/Time Indication–––M–
20Transaction Reference NumberMMMMM
21Related ReferenceMMOO–
25Account IdentificationMMMMM
28CStatement Number/Sequence Number––MMM
32AValue Date, Currency Code, AmountMM–––
34FFloor Limit Indicator–––M–
50Ordering Customer–C–––
52Ordering InstitutionOC–––
56Intermediary–O–––
60AOpening Balance––M–M
61Statement Line––OOO
62AClosing Balance (Booked Funds)––M–M
64Closing Available Balance (Available Funds)––O–O
65Forward Available Balance––O––
86Information to Account Owner––CC–
72Sender to Receiver InformationOO–––
90DNumber and Sum of Entries (debit)–––O–
90CNumber and Sum of Entries (credit)–––O–
MMandatoryCConditionalOOptional–Not permitted

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

JavaSwingSWIFTSpecification testing

Data volumes & scale

  • 68 templates
  • 5 message types
  • 19 tags modelled
  • ~22,000 lines of Java