ISO 20022 is a global standard for the financial industry that is used in payment systems in over 70 countries. There are over 200 initiatives globally to move financial messaging to ISO 20022 formats. In the coming years, it will be the de facto standard for high-value payment systems of all reserve currencies. This will provide greater interoperability, improved straight-through processing, efficient compliance processes, and richer Payment Data. ISO 20022 integration comes with several challenges, existing payment formats such as MT are loosely structured.

There is a strong global regulatory push to use structured party name and address information for payments. Typical high street banks in the UK will have 20-30 million customer records and hundreds of millions of beneficiary customer records stored in an unstructured format. Manually updating the records to structured addresses will require massive operational effort and cost; an automated approach will go a long way in making the transition manageable.

A piece of typical customer information in an older style ‘SWIFT MT 103’ message uses unstructured customer information from bank records.

Sample Unstructured Address in MT message

The equivalent ISO20022 payment message will require the Name and address information to be structured in line with the standards.

Sample structured address in ISO20022 pacs.008 message

The SWIFT Payment Market Practice guidelines state:

Market Practice Guideline #1: The global community should target November 2023 as the end-date for unstructured customer information payments, regardless of their format (ISO20022, FIN or native clearing).

What it does

The PayToolz payments toolkit is designed to simplify ISO 20022 integration. One of the big issues is the lack of structured content as the older style MT messages use unstructured content which has been built up over the last few decades. We have used machine learning and text processing to enrich bank details and geocoding APIs to structure addresses from unstructured text. A sample unstructured bank name and address has the address details provided as 3 free format lines.

Original message with unstructured bank address details

The bank details are enriched using PayToolz DSL/Rules Engine that makes a call out to’s Geocoding API: Enriched message with bank address structured using geocoding API

How we built it

We used scala to generate JVM bindings from the ISO 20022 XSD files, wrote a DSL in scala using type classes and code generation for easy access, used Monocle (Optics) for accessing and modifying deeply nested classes. API is published using Open API. The application is deployed to serverless infrastructure using Google Cloud Run providing scaling out on demand..

Challenges we ran into

ISO20022 uses deeply nested structures that are extremely difficult to update. There are multiple versions of the same messages in use, which requires any logic to be repeated many times. Reference data used to identify banks is proprietary and not freely available.

Accomplishments that we're proud of

We have an user friendly DSL and ability to structure messages unobtrusively. The integrated rules engine allows users to take control of their payment enrichment needs. We have combined our domain knowledge with technical know-how to create a solution that solves one of the financial industry’s most pressing issues.

What we learned

XML handling was more challenging than the machine learning, natural language processing and the API integration

What's next

  1. Support for country specific address structure e.g. US States.
  2. Validations to ensure full address has been mapped.
  3. Natural Language Processing support to identify names from combined name and address information.
  4. API to allow customers to find payee’s bank using the bank’s address and enrich with relevant banking identifiers.

Built With

Share this project: