Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/svenstaro/mt940-rs
A MT940 parser in Rust
https://github.com/svenstaro/mt940-rs
bank fints hbci mt940 sepa statement strictness
Last synced: 3 days ago
JSON representation
A MT940 parser in Rust
- Host: GitHub
- URL: https://github.com/svenstaro/mt940-rs
- Owner: svenstaro
- License: mit
- Created: 2018-09-05T05:32:19.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-10-02T02:05:23.000Z (about 1 month ago)
- Last Synced: 2024-10-30T01:43:40.303Z (5 days ago)
- Topics: bank, fints, hbci, mt940, sepa, statement, strictness
- Language: Rust
- Homepage:
- Size: 302 KB
- Stars: 22
- Watchers: 3
- Forks: 7
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome-pest - mt940 - A MT940 parser in Rust. (Projects)
README
# mt940-rs
[![GitHub Actions Workflow](https://github.com/svenstaro/mt940-rs/workflows/Build/badge.svg)](https://github.com/svenstaro/mt940-rs/actions)
[![Docs Status](https://docs.rs/mt940/badge.svg)](https://docs.rs/mt940)
[![codecov](https://codecov.io/gh/svenstaro/mt940-rs/branch/master/graph/badge.svg)](https://codecov.io/gh/svenstaro/mt940-rs)
[![Crates.io](https://img.shields.io/crates/v/mt940.svg)](https://crates.io/crates/mt940)
[![license](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/svenstaro/mt940-rs/blob/master/LICENSE)**A strict MT940 bank statement parser in Rust.**
## Features
- Parse MT940 bank statements.
- Strict and well-researched.
- Super simple API and nice Rusty structs.
- Small commandline utility that allows for quick and easy conversion of MT940 statements to JSON.
- Well tested with many automated tests to find weird corner cases.
- [Pretty fast](#Performance).## Planned features
- MT941 support
- MT942 support## Library usage example
```rust
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
```sh
cargo run --bin sta2json tests/data/mt940/full/danskebank/MT940_DK_Example.sta
```## Documentation
Documentation is [here](https://docs.rs/mt940).
## Performance
Time to parse the provided `MT940_FI_Example.sta`:
| | mt940-rs (this crate) | mt940-js (NodeJS) | mt-940 (Python) |
|-------------|-----------------------|----------------------|----------------------|
| Time for file | 0.054ms | 0.08ms | 1.15ms |
| **Performance** | **600000 lines per sec** | 400000 lines per sec | 28000 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
- Lots of test data copied from https://github.com/WoLpH/mt940
### iotafinance.com
Amazing interactive docs.
- http://www.iotafinance.com/en/SWIFT-ISO15022-Message-types-in-category-9.html
### DanskeBank
They provide tons of good docs.
- https://danskebank.com/en-uk/ci/Products-Services/Transaction-Services/Online-Services/Integration-Services/Documents/Formats/FormatDescriptionSWIFT_MT940/MT940.pdf
- https://danskebank.com/en-uk/ci/Products-Services/Transaction-Services/Online-Services/Integration-Services/Documents/Formats/FormatDescriptionSWIFT_MT942/MT942.pdf
- https://danskebank.com/en-uk/ci/Products-Services/Transaction-Services/Online-Services/Integration-Services/Formats/Pages/SWIFT-formats.aspx
- https://www-2.danskebank.com/Link/ExtendedMT940/$file/Extended_MT940.pdf### Bank Austria
- https://www.bankaustria.at/files/MBS_MT940_V5107.pdf
### Deutsche Bank
- https://deutschebank.nl/nl/docs/MT94042_EN.pdf
### ABN AMRO
- https://www.abnamro.nl/nl/images/Generiek/PDFs/020_Zakelijk/03_OfficeNet/Formatenboek_MT94_(engels).pdf
- https://www.abnamro.nl/en/images/Generiek/PDFs/020_Zakelijk/04_Migratie/Derde_banken_Specificaties_EN.pdf### Westpac Banking
- https://quickstream.westpac.com.au/docs/quickrec/#mt940-file-format-specification
### Societe Generale Srbija
- https://web.archive.org/web/20160725042101/http://www.societegenerale.rs/fileadmin/template/main/pdf/SGS%20MT940.pdf### Bank Millennium
- https://www.bankmillennium.pl/documents/10184/128700/File_format_description_of_MT940_v20120309_1216901.pdf/d56bc65f-fa84-4d6c-b07c-9ca60381016b
### DZ Bank
- https://www.dzbank.de/content/dam/dzbank_de/de/home/produkte_services/Firmenkunden/PDF-Dokumente/transaction%20banking/elektronicBanking/SEPA-Belegungsregeln_MT940-DK_082016.~644b217ec96b35dfffcaf18dc2df800a.pdf
### Handelsbanken
- https://www.handelsbanken.se/shb/inet/icentsv.nsf/vlookuppics/a_filmformatbeskrivningar_fil_mt940_account_statement_20081212/$file/mt940_account_statement.pdf
### ING Bank
- https://www.ing.nl/media/ING_Format-Description-Structured-Unstructured-MT940-MT942-IBP-v5.2_tcm162-140454.pdf
### Kontopruef
- https://www.kontopruef.de/mt940s.shtml
### Rabo Bank
- https://www.rabobank.com/en/images/Format_Description_MT940%20_2.4_EN.pdf
### SEPA for Corporates
- http://www.sepaforcorporates.com/swift-for-corporates/account-statement-mt940-file-format-overview/
- http://www.sepaforcorporates.com/swift-for-corporates/list-mt940-transaction-type-identification-codes/
- http://www.sepaforcorporates.com/swift-for-corporates/quick-guide-swift-mt101-format/