mt940.tags module¶
The MT940 format is a standard for bank account statements. It is used by many banks in Europe and is based on the SWIFT MT940 format.
The MT940 tags are:
Tag |
Description |
---|---|
:13: |
Date/Time indication at which the report was created |
:20: |
Transaction Reference Number |
:21: |
Related Reference Number |
:25: |
Account Identification |
:28: |
Statement Number |
:34: |
The floor limit for debit and credit |
:60F: |
Opening Balance |
:60M: |
Intermediate Balance |
:60E: |
Closing Balance |
:61: |
Statement Line |
:62: |
Closing Balance |
:62M: |
Intermediate Closing Balance |
:62F: |
Final Closing Balance |
:64: |
Available Balance |
:65: |
Forward Available Balance |
:86: |
Transaction Information |
:90: |
Total number and amount of debit entries |
:NS: |
Bank specific Non-swift extensions containing extra information |
Format¶
Sources:
The pattern for the tags use the following syntax:
[] = optional
! = fixed length
a = Text
x = Alphanumeric, seems more like text actually. Can include special
characters (slashes) and whitespace as well as letters and numbers
d = Numeric separated by decimal (usually comma)
c = Code list value
n = Numeric
- class mt940.tags.AccountIdentification(*args, **kwargs)[source]¶
Bases:
Tag
Account identification
Pattern: 35x
- id = 25¶
- logger = <Logger mt940.tags.AccountIdentification (WARNING)>¶
- name = 'AccountIdentification'¶
- pattern = '(?P<account_identification>.{0,35})'¶
- slug = 'account_identification'¶
- class mt940.tags.AvailableBalance(*args, **kwargs)[source]¶
Bases:
BalanceBase
- id = 64¶
- logger = <Logger mt940.tags.AvailableBalance (WARNING)>¶
- name = 'AvailableBalance'¶
- slug = 'available_balance'¶
- class mt940.tags.BalanceBase(*args, **kwargs)[source]¶
Bases:
Tag
Balance base
Pattern: 1!a6!n3!a15d
- pattern = '^\n (?P<status>[DC]) # 1!a Debit/Credit\n (?P<year>\\d{2}) # 6!n Value Date (YYMMDD)\n (?P<month>\\d{2})\n (?P<day>\\d{2})\n (?P<currency>.{3}) # 3!a Currency\n (?P<amount>[0-9,]{0,16}) # 15d Amount (includes decimal sign, so 16)\n '¶
- class mt940.tags.ClosingBalance(*args, **kwargs)[source]¶
Bases:
BalanceBase
- id = 62¶
- logger = <Logger mt940.tags.ClosingBalance (WARNING)>¶
- name = 'ClosingBalance'¶
- slug = 'closing_balance'¶
- class mt940.tags.DateTimeIndication(*args, **kwargs)[source]¶
Bases:
Tag
Date/Time indication at which the report was created
Pattern: 6!n4!n1! x4!n
- id = 13¶
- logger = <Logger mt940.tags.DateTimeIndication (WARNING)>¶
- name = 'DateTimeIndication'¶
- pattern = '^\n (?P<year>\\d{2})\n (?P<month>\\d{2})\n (?P<day>\\d{2})\n (?P<hour>\\d{2})\n (?P<minute>\\d{2})\n (\\+(?P<offset>\\d{4})|)\n '¶
- slug = 'date_time_indication'¶
- class mt940.tags.FinalClosingBalance(*args, **kwargs)[source]¶
Bases:
ClosingBalance
- id = '62F'¶
- logger = <Logger mt940.tags.FinalClosingBalance (WARNING)>¶
- name = 'FinalClosingBalance'¶
- slug = 'final_closing_balance'¶
- class mt940.tags.FinalOpeningBalance(*args, **kwargs)[source]¶
Bases:
BalanceBase
- id = '60F'¶
- logger = <Logger mt940.tags.FinalOpeningBalance (WARNING)>¶
- name = 'FinalOpeningBalance'¶
- slug = 'final_opening_balance'¶
- class mt940.tags.FloorLimitIndicator(*args, **kwargs)[source]¶
Bases:
Tag
Floor limit indicator indicates the minimum value reported for debit and credit amounts
Pattern: :34F:GHSC0,00
- id = 34¶
- logger = <Logger mt940.tags.FloorLimitIndicator (WARNING)>¶
- name = 'FloorLimitIndicator'¶
- pattern = '^\n (?P<currency>[A-Z]{3}) # 3!a Currency\n (?P<status>[DC ]?) # 2a Debit/Credit Mark\n (?P<amount>[0-9,]{0,16}) # 15d Amount (includes decimal sign, so 16)\n $'¶
- slug = 'floor_limit_indicator'¶
- class mt940.tags.ForwardAvailableBalance(*args, **kwargs)[source]¶
Bases:
BalanceBase
- id = 65¶
- logger = <Logger mt940.tags.ForwardAvailableBalance (WARNING)>¶
- name = 'ForwardAvailableBalance'¶
- slug = 'forward_available_balance'¶
- class mt940.tags.IntermediateClosingBalance(*args, **kwargs)[source]¶
Bases:
ClosingBalance
- id = '62M'¶
- logger = <Logger mt940.tags.IntermediateClosingBalance (WARNING)>¶
- name = 'IntermediateClosingBalance'¶
- slug = 'intermediate_closing_balance'¶
- class mt940.tags.IntermediateOpeningBalance(*args, **kwargs)[source]¶
Bases:
BalanceBase
- id = '60M'¶
- logger = <Logger mt940.tags.IntermediateOpeningBalance (WARNING)>¶
- name = 'IntermediateOpeningBalance'¶
- slug = 'intermediate_opening_balance'¶
- class mt940.tags.NonSwift(*args, **kwargs)[source]¶
Bases:
Tag
Non-swift extension for MT940 containing extra information. The actual definition is not consistent between banks so the current implementation is a tad limited. Feel free to extend the implementation and create a pull request with a better version :)
It seems this could be anything so we’ll have to be flexible about it.
Pattern: 2!n35x | *x
- id = 'NS'¶
- logger = <Logger mt940.tags.NonSwift (WARNING)>¶
- name = 'NonSwift'¶
- pattern = '\n (?P<non_swift>\n (\n (\\d{2}.{0,})\n (\\n\\d{2}.{0,})*\n )|(\n [^\\n]*\n )\n )\n $'¶
- class scope(transactions, data=None)[source]¶
Bases:
Transaction
,Transactions
- slug = 'non_swift'¶
- sub_pattern = '\n (?P<ns_id>\\d{2})(?P<ns_data>.{0,})\n '¶
- sub_pattern_m = re.compile('\n (?P<ns_id>\\d{2})(?P<ns_data>.{0,})\n ', re.IGNORECASE|re.VERBOSE)¶
- class mt940.tags.OpeningBalance(*args, **kwargs)[source]¶
Bases:
BalanceBase
- id = 60¶
- logger = <Logger mt940.tags.OpeningBalance (WARNING)>¶
- name = 'OpeningBalance'¶
- slug = 'opening_balance'¶
- class mt940.tags.RelatedReference(*args, **kwargs)[source]¶
Bases:
Tag
Related reference
Pattern: 16x
- id = 21¶
- logger = <Logger mt940.tags.RelatedReference (WARNING)>¶
- name = 'RelatedReference'¶
- pattern = '(?P<related_reference>.{0,16})'¶
- slug = 'related_reference'¶
- class mt940.tags.Statement(*args, **kwargs)[source]¶
Bases:
Tag
The MT940 Tag 61 provides information about a single transaction that has taken place on the account. Each transaction is identified by a unique transaction reference number (Tag 20) and is described in the Statement Line (Tag 61).
Pattern: 6!n[4!n]2a[1!a]15d1!a3!c23x[//16x]
The fields are:
value_date: transaction date (YYMMDD)
entry_date: Optional 4-digit month value and 2-digit day value of the entry date (MMDD)
funds_code: Optional 1-character code indicating the funds type ( the third character of the currency code if needed)
amount: 15-digit value of the transaction amount, including commas for decimal separation
transaction_type: Optional 4-character transaction type identification code starting with a letter followed by alphanumeric characters and spaces
customer_reference: Optional 16-character customer reference, excluding any bank reference
bank_reference: Optional 23-character bank reference starting with “//”
supplementary_details: Optional 34-character supplementary details about the transaction.
The Tag 61 can occur multiple times within an MT940 file, with each occurrence representing a different transaction.
- id = 61¶
- logger = <Logger mt940.tags.Statement (WARNING)>¶
- name = 'Statement'¶
- pattern = "^\n (?P<year>\\d{2}) # 6!n Value Date (YYMMDD)\n (?P<month>\\d{2})\n (?P<day>\\d{2})\n (?P<entry_month>\\d{2})? # [4!n] Entry Date (MMDD)\n (?P<entry_day>\\d{2})?\n (?P<status>R?[DC]) # 2a Debit/Credit Mark\n (?P<funds_code>[A-Z])? # [1!a] Funds Code (3rd character of the currency\n # code, if needed)\n [\\n ]? # apparently some banks (sparkassen) incorporate newlines here\n # cuscal can also send a space here as well\n (?P<amount>[\\d,]{1,15}) # 15d Amount\n (?P<id>[A-Z][A-Z0-9 ]{3})? # 1!a3!c Transaction Type Identification Code\n # We need the (slow) repeating negative lookahead to search for // so we\n # don't acciddntly include the bank reference in the customer reference.\n (?P<customer_reference>((?!//)[^\\n]){0,16}) # 16x Customer Reference\n (//(?P<bank_reference>.{0,23}))? # [//23x] Bank Reference\n (\\n?(?P<extra_details>.{0,34}))? # [34x] Supplementary Details\n $"¶
- scope¶
alias of
Transaction
- slug = 'statement'¶
- class mt940.tags.StatementASNB(*args, **kwargs)[source]¶
Bases:
Statement
From: https://www.sepaforcorporates.com/swift-for-corporates
Pattern: 6!n[4!n]2a[1!a]15d1!a3!c16x[//16x] [34x]
But ASN bank puts the IBAN in the customer reference, which is acording to Wikipedia at most 34 characters.
So this is the new pattern:
Pattern: 6!n[4!n]2a[1!a]15d1!a3!c34x[//16x] [34x]
- pattern = '^\n (?P<year>\\d{2}) # 6!n Value Date (YYMMDD)\n (?P<month>\\d{2})\n (?P<day>\\d{2})\n (?P<entry_month>\\d{2})? # [4!n] Entry Date (MMDD)\n (?P<entry_day>\\d{2})?\n (?P<status>[A-Z]?[DC]) # 2a Debit/Credit Mark\n (?P<funds_code>[A-Z])? # [1!a] Funds Code (3rd character of the currency\n # code, if needed)\n \\n? # apparently some banks (sparkassen) incorporate newlines here\n (?P<amount>[\\d,]{1,15}) # 15d Amount\n (?P<id>[A-Z][A-Z0-9 ]{3})? # 1!a3!c Transaction Type Identification Code\n (?P<customer_reference>.{0,34}) # 34x Customer Reference\n (//(?P<bank_reference>.{0,16}))? # [//16x] Bank Reference\n (\\n?(?P<extra_details>.{0,34}))? # [34x] Supplementary Details\n $'¶
- class mt940.tags.StatementNumber(*args, **kwargs)[source]¶
Bases:
Tag
Statement number / sequence number
Pattern: 5n[/5n]
- id = 28¶
- logger = <Logger mt940.tags.StatementNumber (WARNING)>¶
- name = 'StatementNumber'¶
- pattern = '\n (?P<statement_number>\\d{1,5}) # 5n\n (?:/?(?P<sequence_number>\\d{1,5}))? # [/5n]\n $'¶
- slug = 'statement_number'¶
- class mt940.tags.SumCreditEntries(*args, **kwargs)[source]¶
Bases:
SumEntries
- id = '90C'¶
- logger = <Logger mt940.tags.SumCreditEntries (WARNING)>¶
- name = 'SumCreditEntries'¶
- slug = 'sum_credit_entries'¶
- status = 'C'¶
- class mt940.tags.SumDebitEntries(*args, **kwargs)[source]¶
Bases:
SumEntries
- id = '90D'¶
- logger = <Logger mt940.tags.SumDebitEntries (WARNING)>¶
- name = 'SumDebitEntries'¶
- slug = 'sum_debit_entries'¶
- status = 'D'¶
- class mt940.tags.SumEntries(*args, **kwargs)[source]¶
Bases:
Tag
Number and Sum of debit Entries
- id = 90¶
- logger = <Logger mt940.tags.SumEntries (WARNING)>¶
- name = 'SumEntries'¶
- pattern = '^\n (?P<number>\\d*)\n (?P<currency>.{3}) # 3!a Currency\n (?P<amount>[\\d,]{1,15}) # 15d Amount\n '¶
- slug = 'sum_entries'¶
- class mt940.tags.Tag(*args, **kwargs)[source]¶
Bases:
object
- RE_FLAGS = 98¶
- id = 0¶
- scope¶
alias of
Transactions
- class mt940.tags.Tags(value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]¶
Bases:
Enum
- ACCOUNT_IDENTIFICATION = <mt940.tags.AccountIdentification object>¶
- AVAILABLE_BALANCE = <mt940.tags.AvailableBalance object>¶
- CLOSING_BALANCE = <mt940.tags.ClosingBalance object>¶
- DATE_TIME_INDICATION = <mt940.tags.DateTimeIndication object>¶
- FINAL_CLOSING_BALANCE = <mt940.tags.FinalClosingBalance object>¶
- FINAL_OPENING_BALANCE = <mt940.tags.FinalOpeningBalance object>¶
- FLOOR_LIMIT_INDICATOR = <mt940.tags.FloorLimitIndicator object>¶
- FORWARD_AVAILABLE_BALANCE = <mt940.tags.ForwardAvailableBalance object>¶
- INTERMEDIATE_CLOSING_BALANCE = <mt940.tags.IntermediateClosingBalance object>¶
- INTERMEDIATE_OPENING_BALANCE = <mt940.tags.IntermediateOpeningBalance object>¶
- NON_SWIFT = <mt940.tags.NonSwift object>¶
- OPENING_BALANCE = <mt940.tags.OpeningBalance object>¶
- RELATED_REFERENCE = <mt940.tags.RelatedReference object>¶
- STATEMENT = <mt940.tags.Statement object>¶
- STATEMENT_NUMBER = <mt940.tags.StatementNumber object>¶
- SUM_CREDIT_ENTRIES = <mt940.tags.SumCreditEntries object>¶
- SUM_DEBIT_ENTRIES = <mt940.tags.SumDebitEntries object>¶
- SUM_ENTRIES = <mt940.tags.SumEntries object>¶
- TRANSACTION_DETAILS = <mt940.tags.TransactionDetails object>¶
- TRANSACTION_REFERENCE_NUMBER = <mt940.tags.TransactionReferenceNumber object>¶
- class mt940.tags.TransactionDetails(*args, **kwargs)[source]¶
Bases:
Tag
Transaction details
Pattern: 6x65x
- id = 86¶
- logger = <Logger mt940.tags.TransactionDetails (WARNING)>¶
- name = 'TransactionDetails'¶
- pattern = '\n (?P<transaction_details>(([\\s\\S]{0,65}\\r?\\n?){0,8}[\\s\\S]{0,65}))\n '¶
- scope¶
alias of
Transaction
- slug = 'transaction_details'¶
- class mt940.tags.TransactionReferenceNumber(*args, **kwargs)[source]¶
Bases:
Tag
Transaction reference number
Pattern: 16x
- id = 20¶
- logger = <Logger mt940.tags.TransactionReferenceNumber (WARNING)>¶
- name = 'TransactionReferenceNumber'¶
- pattern = '(?P<transaction_reference>.{0,16})'¶
- slug = 'transaction_reference_number'¶