Home

Awesome

mt940-rs

GitHub Actions Workflow Docs Status codecov Crates.io license

A strict MT940 bank statement parser in Rust.

Features

Planned features

Library usage example

use mt940::parse_mt940;

fn main() {
    let input = "\
        :20:3996-11-11111111\r\n\
        :25:DABADKKK/111111-11111111\r\n\
        :28C:00001/001\r\n\
        :60F:C090924EUR54484,04\r\n\
        :61:0909250925DR583,92NMSC1110030403010139//1234\r\n\
        :86:11100304030101391234\r\n\
        Beneficiary name\r\n\
        Something else\r\n\
        :61:0910010930DR62,60NCHGcustomer id//bank id\r\n\
        :86:Fees according to advice\r\n\
        :62F:C090930EUR53126,94\r\n\
        :64:C090930EUR53189,31\r\n\
        \r\n";

    let input_parsed = parse_mt940(input).unwrap();
    assert_eq!(input_parsed[0].transaction_ref_no, "3996-11-11111111");
}

CLI usage example

cargo run --bin sta2json tests/data/mt940/full/danskebank/MT940_DK_Example.sta

Documentation

Documentation is here.

Performance

Time to parse the provided MT940_FI_Example.sta:

mt940-rs (this crate)mt940-js (NodeJS)mt-940 (Python)
Time for file0.054ms0.08ms1.15ms
Performance600000 lines per sec400000 lines per sec28000 lines per sec

Strictness

Some banks bank use weird derivates of MT940 that do not strictly follow the specification. In that case you should try to do some pre-processing either by yourself or using one of the provided sanitizers.

Resources and acknowledgements

Referencing proper docs is important because because banks seem to be somewhat lenient about their strictness in implementing MT940. Below I assembled a list of resources that I reference.

Other projects

iotafinance.com

Amazing interactive docs.

DanskeBank

They provide tons of good docs.

Bank Austria

Deutsche Bank

ABN AMRO

Westpac Banking

Societe Generale Srbija

Bank Millennium

DZ Bank

Handelsbanken

ING Bank

Kontopruef

Rabo Bank

SEPA for Corporates