ts-swiftmessageparser v2.0.1
Centrapay SWIFT Parser
SWIFT bank statement parser for JavaScript and Typescript (ES2015). Supports MT 940 Customer Statement Message and MT 942 Interim Transaction Report.
Installation
pnpm install stitch-swiftmessageparserUsage
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.txtAPI
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 or mt942) | 
| 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) | 
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'?'andDDis two digits'/TAG/value', whereTAGis 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.
2 years ago