Skip to content

Stitch-Money/swift-parser

 
 

Repository files navigation

SWIFT Parser

SWIFT bank statement parser for JavaScript and Typescript (ES2015). Supports MT 940 Customer Statement Message, MT 942 Interim Transaction Report, MT 900 Confirmation of Debit and MT 910 Confirmation of Credit.

Installation

pnpm install stitch-swiftmessageparser

Usage

import parser from "stitch-swiftmessageparser";
import * as fs from "fs";

const statements = parser.parse({
  type: "mt940",
  data: fs.readFileSync("./sample.txt", "utf8"),
});

statements.forEach((stmt) => {
  console.log("stmt", stmt);
  stmt.transactions.forEach((txn) => {
    console.log(txn.amount, txn.currency);
  });
});

CLI

This package also includes a CLI which parses a SWIFT file and outputs the result as JSON:

swift-parse -t mt942 my-statement.txt

API

parser.parse()

Parse a SWIFT statement document.

If parser.parse() is invoked with { validate: true } then MT940 statements are additionally validated for:

  • all strictly required tags
  • opening/closing balance currency is the same
  • opening balance + turnover = closing balance

Returns: Array<Statement>

Params:

Param Type Description
data string raw SWIFT message text
type string message format (mt940, mt942, mt900 or mt910)
validate boolean Optional perform additional semantic error checking

Statement

Field Type Description
transactionReference string tag 20 reference
relatedReference string tag 21 reference
accountIdentification string tag 25 own bank account identification
number.statement string tag 28 main statement number
number.sequence string tag 28 statement sub number (sequence)
number.section string tag 28 statement sub sub number (present on some banks)
statementDate Date tag 62 (MT940, day precision) or tag 13D (MT942, minute precision)
openingBalanceDate Date tag 60 statement opening date
closingBalanceDate Date tag 62 statement closing date
closingAvailableBalanceDate Date tag 64 closing available balance date, default = closing date
forwardAvailableBalanceDate Date tag 65 forward available balance date, default = closing available date
currency string statement currency (USD, EUR ...)
openingBalance BigNumber beginning balance of the statement (with sign, based on debit/credit mark)
closingBalance BigNumber ending balance of the statement (with sign, based on debit/credit mark)
closingAvailableBalance BigNumber tag 64 closing available balance, default = closing balance
forwardAvailableBalance BigNumber tag 65 forward available balance, default = closing available
informationToAccountOwner string additional statement level information
transactions array collection of transactions
messageBlocks object statement message blocks, if present (EXPERIMENTAL)
dateCurrencyAmount object tag 32A. This field specifies the value date, currency code and amount of the credit/debit.
orderingInstitution string tag 52A. This field identifies the financial institution which originated the transaction resulting in this credit.
intermediary string tag 56A.This field identifies the financial institution from which the Sender received the funds, when other than the ordering institution.
orderingCustomer string tag 50A. This field identifies the customer which originated the transaction resulting in this credit.
senderToReceiverInformation string tag 72. This field contains additional information for the Receiver.
intermediary string tag 56A. This field identifies the financial institution from which the Sender received the funds, when other than the ordering institution.

Transaction

Field Type Description
date Date transaction date
amount BigNumber transaction amount (with sign, Credit+, Debit-)
reversal Boolean transaction is a reversal
currency string transaction currency (copy of statement currency)
details string content of relevant 86 tag(s), may be multiline (\n separated)
transactionType string MT940 transaction type code (e.g. NTRF ...)
reference string payment reference field
entryDate Date entry date field
fundsCode string funds code field
bankReference string bank reference
extraDetails string extra details (supplementary details)
structuredDetails Object structured details if detected
nonSwift string content of NS tags associated with a transaction (after tags 61 or 86)

Structured Transaction Details

The transaction.structuredDetails attribute can be used to access structured data from statement transaction details (SWIFT "86" tag). The following structured detail formats are supported:

  • '<sep>DD', where <sep> can be '>' or '?' and DD is two digits
  • '/TAG/value', where TAG is 2 to 4 uppercase chars.

Example

>20some details >30more data
{
  "20": "some details",
  "30": "more data"
}

Example

/ORDP/Smith Corp
{
  "ORDP": "Smith Corp"
}

History

See Changelog

Legal

Copyright © 2015 Alexander Tsybulsky and other contributors. Copyright © 2020 Centrapay.

This software is licensed under Apache-2.0 License. Please see LICENSE for details.

Credits

Forked from a-fas/mt940. Originally inspired by WoLpH/mt940.

About

Swift financial message parser (MT940, MT942)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 96.5%
  • JavaScript 3.5%