The Python FinTech package
==========================
This package contains all the functionality that is required to work with
EBICS, SEPA and other financial technologies. The usage has been realised
as simple as possible but also as flexible as necessary.
Features
--------
- Support of EBICS versions 2.4, 2.5 and 3.0
- Support of EBICS websockets
- Obtain bank account statements (incl. CAMT and MT940 parser)
- Create and submit SEPA credit transfers (pain.001)
- Create and submit SEPA direct debits CORE/B2B (pain.008)
- Mostly full SEPA support (including special schemes for CH and IT)
- Automatic calculation of the lead time based on holidays and cut-off times
- Integrated mandate manager (beta)
- Plausibility check of IBAN and BIC
- Validation of payment orders against the SEPA Clearing Directory of the
German Central Bank
- Bankcode/Account to IBAN converter according to the rules of the German
Central Bank
- Currency converter
- DATEV converter (CSV and KNE)
The FinTech package provides you the possibility to manage all of your everyday
commercial banking activities such as credit transfers, direct debits or the
retrieval of bank account statements in a flexible and secure manner.
All modules can be used free of charge. Only the unlicensed version of the
EBICS module has few restrictions. The upload of SEPA documents is limited
to a maximum of five transactions and bank account statements can not be
retrieved for the last three days.
Examples
--------
Simple SEPA Credit Transfer (pain.001)
++++++++++++++++++++++++++++++++++++++
.. sourcecode:: python
import fintech
fintech.register()
from fintech.sepa import Account, SEPACreditTransfer
# Create the debtor account from an IBAN
debtor = Account('DE89370400440532013000', 'Max Mustermann')
# Create the creditor account from a tuple (IBAN, BIC)
creditor = Account(('AT611904300234573201', 'BKAUATWW'), 'Maria Musterfrau')
# Create a SEPACreditTransfer instance
sct = SEPACreditTransfer(debtor)
# Add the transaction
tx = sct.add_transaction(creditor, 10.00, 'Purpose')
# Render the SEPA document
print(sct.render())
Simple SEPA Direct Debit (pain.008)
+++++++++++++++++++++++++++++++++++
.. sourcecode:: python
import fintech
fintech.register()
from fintech.sepa import Account, SEPADirectDebit
# Create the creditor account from a tuple (ACCOUNT, BANKCODE)
creditor = Account(('532013000', '37040044'), 'Max Mustermann')
# Assign the creditor id
creditor.set_originator_id('DE98ZZZ09999999999')
# Create the debtor account from a tuple (IBAN, BIC)
debtor = Account(('AT611904300234573201', 'BKAUATWW'), 'Maria Musterfrau')
# For a SEPA direct debit a valid mandate is required
debtor.set_mandate(mref='M00123456', signed='2014-02-01', recurrent=True)
# Create a SEPADirectDebit instance of type CORE
sdd = SEPADirectDebit(creditor, 'CORE')
# Add the transaction
tx = sdd.add_transaction(debtor, 10.00, 'Purpose')
# Render the SEPA document
print(sdd.render())
EBICS
+++++
.. sourcecode:: python
import fintech
fintech.register()
from fintech.ebics import EbicsKeyRing, EbicsBank, EbicsUser, EbicsClient
keyring = EbicsKeyRing(keys='~/mykeys', passphrase='mysecret')
bank = EbicsBank(keyring=keyring, hostid='MYBANK', url='https://www.mybank.de/ebics')
user = EbicsUser(keyring=keyring, partnerid='CUSTOMER123', userid='USER1')
# Create new keys for this user
user.create_keys(keyversion='A006', bitlength=2048)
client = EbicsClient(bank, user)
# Send the public electronic signature key to the bank.
client.INI()
# Send the public authentication and encryption keys to the bank.
client.HIA()
# Create an INI-letter which must be printed and sent to the bank.
user.create_ini_letter(bankname='MyBank AG', path='~/ini_letter.pdf')
# After the account has been activated the public bank keys
# must be downloaded and checked for consistency.
print(client.HPB())
# Finally the bank keys must be activated.
bank.activate_keys()
# Download CAMT53 bank account statements
data = client.C53(
start='2019-02-01',
end='2019-02-07',
)
client.confirm_download()
Changelog
---------
v7.6.3 [2024-11-30]
- SEPA: Passing lowercase IBANs led to invalid XML.
- Fixed bug that could led to invalid timestamps and as a result to invalid XML,
introduced in v7.5.1 (one in a million cases, tests hit the jackpot!)
- Fixed a warning from cryptography 42+.
- Fixed broken binaries for Python 3.5 and 3.6.
- Improved API source code.
v7.6.2 [2024-11-19]
- SEPA: Added SDD scheme pain.008.001.08
- SEPA: Added SCT scheme pain.001.001.09
- SEPA: Added SCT scheme pain.001.001.09.ch.03 (CH)
- SEPA: Added CT scheme CBICrossBorderPaymentRequestLogMsg.00.01.01 (IT)
- SEPA: Added support for non-SEPA transfers
- SEPA: Added support for structured addresses
- EBICS: Added order types AXZ, XE3 and XE4
- EBICS: Added exception EbicsNoDataAvailable
- Added API source to allow code completion for IDEs
- Minor bug fixes.
v7.5.3 [2024-05-07]
- Added fallback URL for licensed user verification to ensure a failure-resistant usage.
v7.5.1 [2024-03-27]
- EBICS: Fixed bug with separate signature passphrase (H005).
- EBICS INI-letter: Try to get bank name by BIC.
- EBICS INI-letter: Added timezone to creation time.
v7.5.0 [2024-03-06]
- SEPA: Added scheme CBIPaymentRequest.00.04.01 (IT).
- EBICS: Check passphrases on keyring initialization.
- Minor bug fixes.
- Added support for Python 3.12
- Dropped support for Python 3.4
v7.4.3 [2023-09-14]
- Fixed runtime issue under Python 3.11 on MacOS.
v7.4.1 [2023-07-27]
- EBICS: Added preliminary verification of external signatures.
- EBICS: Skip transport signature if additional signers exist.
- EBICS: Deprecated EbicsUser.manual_approval (use class parameter "transport_only" instead)
- EBICS: Minor bug fixes.
v7.3.1 [2023-06-12]
- EBICS: Added separate signature passphrase.
- Added possibility to read license from file.
- Updated external code sets.
- Added support for Python 3.11
v7.2.10 [2023-03-18]
- SEPA: Added French classification
- SEPA: Fixed wrong position of CtgyPurp (CBI)
- SEPA: Fixed check of CUC codes (IT)
- EBICS: Added possibility to set accepted SSL ciphers
v7.2.9 [2022-11-29]
- Fixed some minor bugs.
v7.2.6 [2022-08-05]
- Replaced some deprecated functions.
v7.2.5 [2022-07-20]
- SEPA: Allow foreign IBANs with Account objects.
- EBICS: Strip incoming whitespaces on all text nodes.
- RPC: Apply defusedxml to prevent known XML attacks.
v7.2.4 [2022-06-18]
- EBICS: Added ASN1 DigestInfo to prehashed digest for external signatures.
- RPC: Added possibility to extend the RPC class.
v7.2.3 [2022-06-07]
- EBICS: Added support for multiple signatures.
- EBICS: Added warnings about unconfirmed downloads.
- SEPA: Added the possibility to set custom KREF ids.
- Added possibility to install the RPC server as OS service.
v7.1.0 [2022-02-23]
- Removed deprecated methods EbicsClient.CD1() and Account.set_creditor_id().
- Added binaries for Linux ARM64.
v7.0.6 [2022-02-14]
- EBICS: Added some Swiss order types.
- EBICS: Added support for EBICS websockets.
- SEPA: Reject amounts with more than two decimals.
- SEPA: Added support for Urgent Payments (URGP).
- Added revised version of the RPC server to the main package.
- Fixed issue with default User-Agent header rejected by some banks.
- Some bug fixes with EBICS 3.0
- Updated external code sets.
- Added support for Python 3.10
- Dropped support for Python 2.
v6.6.5 [2021-05-21]
- SEPACreditTransfer: Omit CdtrAgt if BIC is not specified.
v6.6.4 [2021-05-04]
- EBICS: HPB bugfix, create keys from certificate as fallback.
v6.6.2 [2021-03-16]
- CAMTParser: Fixed creditor/debtor assignment of reversed transactions.
- DATEV: Group files by booking year and financial year.
- DATEV: Reject amounts with more than two decimals.
v6.6.1 [2021-02-03]
- Added missing SEPA countries AD and VC
v6.6.0 [2021-01-29]
- Added support for Python 3.9
v6.5.2 [2020-12-06]
- SEPA: Fixed bug parsing CAMT messages without AmtDtls node.
- SEPA: Added SCL Card Clearing check to iban.check_bic().
v6.5.0 [2020-10-29]
- EBICS: Added date range parameters to some download methods.
- EBICS: Fixed missing TLS SNI support.
- Dropped support for Python <2.7.9
v6.4.4 [2020-10-13]
- EBICS: Added method EbicsBank.get_protocol_versions()
- Fixed issue with Python 3.8
v6.4.1 [2020-07-30]
- DATEV: Added support for divergent financial years.
v6.4.0 [2020-07-28]
- EBICS: Added support for external signatures.
- Added method LicenseManager.list_ebics_users()
v6.3.0 [2020-06-09]
- DATEV: Added DatevCSV version 710.
v6.2.0 [2020-04-29]
- SEPA: Added support for Instant Payments
- SEPA: Added method Account.is_sepa()
- SEPA: Fixed bug in Swiss SCT scheme versions
- EBICS: Fixed issue with self-signed certificates
- Fixed debugging issues
v6.1.1 [2019-12-24]
- SEPA: Fixed bug in CBI scheme (CBI unique code)
- SEPA: Added method Account.set_originator_id()
v6.1.0 [2019-12-19]
- Added support for Python 3.8
- Added currency of local account to SEPA documents
- Changed LicenseManager endpoint
v6.0.7 [2019-09-21]
- Added possibility to disable EBICS response verification.
v6.0.3 [2019-08-29]
- Fixed Distributed Signature bug with key version A006.
v6.0.2 [2019-06-28]
- Fixed creditor/debtor assignment of reversed transactions (CAMTParser).
- Correctly sign amounts if reversal flag is set (MT940 parser).
v6.0.1 [2019-06-18]
- EBICS: Implemented EBICS protocol version 3.0 (H005).
- EBICS: Dropped support for PyCrypto.
- EBICS: Removed depreciated factory function EbicsClientCompat.
- EBICS: API changes: Renamed first parameter of EbicsClient.HVU()
and EbicsClient.HVZ() from "ordertypes" to "filter".
- SEPA: Added Swiss scheme versions.
- SEPA: Added unstructured address attribute to Account.
- SEPA: Updated IBAN countries.
- DATEV: Added DatevCSV format.
- Updated External Code Sets
v5.3.1 [2019-04-27]
- SEPA: Fixed bug in CBI schemes
v5.3.0 [2019-04-09]
- EBICS: Fixed bug downloading large files
- SEPA: Added CBI schema for Italy
v5.2.1 [2019-03-03]
- Fixed bug using a proxy.
v5.2.0 [2018-07-31]
- Replaced the possibility to separate transactions with a method
to create new batches.
- Use INI letter path with user's home directory expanded.
v5.1.0 [2018-07-30]
- Added possibility to process single transactions in its own batch.
v5.0.3 [2018-05-22]
- Added FreeBSD binary
v5.0.2 [2018-04-03]
- Fixed an issue with IPython and Django
v5.0.1 [2018-03-29]
- Fixed VEU bug with suppress_no_data_error=True
- Some code improvements
v5.0.0 [2018-03-26]
- New packaging
- Old versions should be uninstalled before upgrading!
v4.4.1 [2018-03-09]
- Added some logging
v4.4.0 [2018-03-08]
- Added EbicsClient context manager (auto-confirm)
- Added EbicsClient property suppress_no_data_error
- Added some IBAN countries
- Fixed unverified SSL connections (Py>=2.7.9)
- Accept multiple NtryDtls nodes in CAMTDocument
v4.3.5 [2017-10-25]
- Fixed a SEPA date issue.
- MT940 parser: Accept all characters in purpose text even if defined as delimiter.
- Fixed a distributed signature bug.
v4.3.4 [2017-08-10]
- Added the fields *sum_credits* and *sum_debits* to the MT942 parser.
- Fixed the handling of invalid times (24:00:00) in CAMT documents.
- Added the possibility to specify custom order parameters for FDL/FUL.
- Added further support for SEPA structured references.
v4.3.3 [2017-06-06]
- Fixed a bug parsing CAMT52 documents.
- Made the user for EbicsClient optional.
- Fixed a bug in EbicsUser.create_ini_letter to correctly return bytes.
- Added silent parameter to method EbicsBank.activate_keys.
- Added the attributes reference_id and sequence_id to the CAMTDocument parser.
- Now parses the transaction classification also for DK in addition to ZKA.
v4.3.2 [2017-03-30]
- Minor bug fix parsing MT942 documents.
- Minor bug fix creating self-signed certificates.
- Fixed a problem with Python builts compiled without "--with-fpectl".
v4.3.1 [2017-02-06]
- Fixed a bug of Account.set_mandate with named arguments.
v4.3.0 [2017-01-19]
- PyOpenSSL is not longer required to support certificates.
- Removed direct debit type COR1 and adjusted mandate sequence types.
API changes:
- OLD: Account.set_mandate(mref, signed, first, last)
- NEW: Account.set_mandate(mref, signed, recurrent)
- OLD: SEPADirectDebit(account, 'COR1', ...)
- NEW: SEPADirectDebit(account, 'CORE', ...)
v4.2.4 [2017-01-17]
- Added a check for DigestMethod algorithm.
- Fixed a bug rejecting mandates signed more than three years ago.
- Fixed minor bug in mt940 parser.
v4.2.3 [2016-10-27]
- Fixed bug of wrong content type in EBICS module.
- Added support for EBICS uploads that are approved manually via accompanying document.
v4.2.2 [2016-05-05]
- Added timeout to EBICS requests.
- Made BIC optional for SEPA transactions.
- Added creditor id to InitgPty/OrgId for Spanish banks.
- Added postal address to SEPA documents.
- Added support for creditor reference numbers.
v4.2.1 [2015-08-20]
- Added a check of the unicode variant (UCS2, UCS4) to setup.py.
v4.2.0 [2015-08-17]
- Added the SEPA fields BREF, RREF, SQTP and RTCD to the MT940 parser.
- Added a dictionary of possible return codes to the SEPA module.
- Added the possibility to dynamically license additional EBICS users.
- Fixed an encoding bug of non-ascii error messages under Python 2.
- Fixed a bug swapping local and remote account for returned transactions
by the CAMT parser.
v4.1.1 [2015-04-24]
- Disabled output of license due to some difficulties with pip
v4.1.0 [2015-04-20]
- Added support for other currencies in addition to EUR.
- Added new Amount class with an integrated currency converter.
- Now the SEPATransaction property *amount* is of type Amount.
v4.0.0 [2015-04-14]
- Made the library Python 2/3 compatible.
- Added support for the cryptography package in addition to PyCrypto.
- Made the BIC optional for national transactions.
- Added the originator id to SEPA documents in GB and IE.
- Added a check to recognize transaction duplicates.
- Added a CAMT parser.
- Changed some attributes of SEPATransaction instances to be conform
with the new CAMT parser:
+ Removed the property *id*.
+ Removed the property *account*, instead use the method *get_account()*.
+ Renamed the property *due_date* to *date*.
+ Renamed the property *ext_purpose* to *purpose_code*.
+ Changed the property *purpose*, now it is a tuple of strings.
+ Changed the property *amout*, now debits are signed negative.
- Fixed the handling of invalid dates (eg. 2015-02-30) in MT940 and
CAMT parsers.
- Fixed a problem with the exception handling in IPython.
- Some code improvements and minor bug fixes.
v3.0.3 [2015-02-05]
- Fixed a bug in the XML to dictionary converter.
- Fixed a bug in the path handler of the EbicsKeyRing class.
v3.0.2 [2015-01-29]
- Fixed a bug handling bank keys with a small bit-length.
- Added some tolerance to the MT940 parser and collect unknown structured
fields.
v3.0.1 [2015-01-26]
- Renamed the package from *ebics* to *fintech* and the module *client* to
*ebics*.
- Splitted the functionality of the class *EbicsClient* into the classes
*EbicsClient*, *EbicsBank*, *EbicsUser* and *EbicsKeyRing*. Added the
new class factory *EbicsClientCompat* for backwards compatibility.
- Added basic support for EBICS protocol version 2.4 (H003).
- Added support for certificates.
- Added the order types FUL and FDL.
- Added a French and English version of the INI-letter.
- Added the order types PUB, HCA, HCS and H3K.
- Added a check of remote SSL certificates against trusted CAs.
- Fixed the broken functionality of distributed signatures.
- Added a much faster PBKDF2 implementation.
- Created a more tolerant MT940 parser.
- Changed the API of *SEPACreditTransfer* and *SEPADirectDebit* to be more
consistent and added support for different PAIN scheme versions.
- Several bug fixes.
v2.1.2 [2014-10-26]
- Fixed some bugs regarding the distributed signature
v2.1.1 [2014-10-26]
- Fixed a bug throwing an exception in an unregistered version of PyEBICS.
- Fixed bug of wrong *OrderParams* tag used by orders of the distributed
signature.
v2.1.0 [2014-09-29]
- Added some functionality based on the SCL Directory, published by the
German Central Bank.
v2.0.3 [2014-09-11]
- Fixed a bug refusing valid creditor ids.
- Added a test to check DATEV parameters for invalid arguments.
v2.0.2 [2014-09-05]
- Fixed a bug in some EBICS requests (missing parameter tag).
- Fixed a bug in the MT940 parser.
v2.0.1 [2014-08-18]
- Fixed a bug handling XML namespaces.
- Changed the behaviour of the flag *parsed* of some methods. Now a
structure of dictionaries is returned instead of an objectified XML
object.
- Changed the expected type of the *params* parameter. Now it must be
a dictionary instead of a list of tuples.
- Added support for distributed signatures (HVU, HVD, HVZ, HVT, HVE, HVS).
v1.3.0 [2014-07-29]
- Fixed a few minor bugs.
- Made the package available for Windows.
v1.2.0 [2014-05-23]
- Added new DATEV module.
- Fixed wrong XML position of UltmtCdtr node in SEPA documents.
- Changed the order of the (BANKCODE, ACCOUNT) tuple to (ACCOUNT, BANKCODE)
used by the Account initializer.
v1.1.25 [2014-02-22]
- Minor bug fix of the module loader.
v1.1.24 [2014-02-21]
- First public release.
Raw data
{
"_id": null,
"home_page": "https://www.joonis.de/fintech/",
"name": "fintech",
"maintainer": null,
"docs_url": null,
"requires_python": "!=3.5.3,<3.13,>=3.5",
"maintainer_email": null,
"keywords": "fintech, ebics, sepa, swift, mt940, camt, pain, iban, datev",
"author": "Thimo Kraemer",
"author_email": "thimo.kraemer@joonis.de",
"download_url": null,
"platform": null,
"description": "The Python FinTech package\n==========================\n\nThis package contains all the functionality that is required to work with\nEBICS, SEPA and other financial technologies. The usage has been realised\nas simple as possible but also as flexible as necessary.\n\nFeatures\n--------\n\n- Support of EBICS versions 2.4, 2.5 and 3.0\n- Support of EBICS websockets\n- Obtain bank account statements (incl. CAMT and MT940 parser)\n- Create and submit SEPA credit transfers (pain.001)\n- Create and submit SEPA direct debits CORE/B2B (pain.008)\n- Mostly full SEPA support (including special schemes for CH and IT)\n- Automatic calculation of the lead time based on holidays and cut-off times\n- Integrated mandate manager (beta)\n- Plausibility check of IBAN and BIC\n- Validation of payment orders against the SEPA Clearing Directory of the\n German Central Bank\n- Bankcode/Account to IBAN converter according to the rules of the German\n Central Bank\n- Currency converter\n- DATEV converter (CSV and KNE)\n\nThe FinTech package provides you the possibility to manage all of your everyday\ncommercial banking activities such as credit transfers, direct debits or the\nretrieval of bank account statements in a flexible and secure manner.\n\nAll modules can be used free of charge. Only the unlicensed version of the\nEBICS module has few restrictions. The upload of SEPA documents is limited\nto a maximum of five transactions and bank account statements can not be\nretrieved for the last three days.\n\nExamples\n--------\n\nSimple SEPA Credit Transfer (pain.001)\n++++++++++++++++++++++++++++++++++++++\n\n.. sourcecode:: python\n\n import fintech\n fintech.register()\n from fintech.sepa import Account, SEPACreditTransfer\n \n # Create the debtor account from an IBAN\n debtor = Account('DE89370400440532013000', 'Max Mustermann')\n # Create the creditor account from a tuple (IBAN, BIC)\n creditor = Account(('AT611904300234573201', 'BKAUATWW'), 'Maria Musterfrau')\n # Create a SEPACreditTransfer instance\n sct = SEPACreditTransfer(debtor)\n # Add the transaction\n tx = sct.add_transaction(creditor, 10.00, 'Purpose')\n # Render the SEPA document\n print(sct.render())\n \nSimple SEPA Direct Debit (pain.008)\n+++++++++++++++++++++++++++++++++++\n\n.. sourcecode:: python\n\n import fintech\n fintech.register()\n from fintech.sepa import Account, SEPADirectDebit\n \n # Create the creditor account from a tuple (ACCOUNT, BANKCODE)\n creditor = Account(('532013000', '37040044'), 'Max Mustermann')\n # Assign the creditor id\n creditor.set_originator_id('DE98ZZZ09999999999')\n # Create the debtor account from a tuple (IBAN, BIC)\n debtor = Account(('AT611904300234573201', 'BKAUATWW'), 'Maria Musterfrau')\n # For a SEPA direct debit a valid mandate is required\n debtor.set_mandate(mref='M00123456', signed='2014-02-01', recurrent=True)\n # Create a SEPADirectDebit instance of type CORE\n sdd = SEPADirectDebit(creditor, 'CORE')\n # Add the transaction\n tx = sdd.add_transaction(debtor, 10.00, 'Purpose')\n # Render the SEPA document\n print(sdd.render())\n\nEBICS\n+++++\n\n.. sourcecode:: python\n \n import fintech\n fintech.register()\n from fintech.ebics import EbicsKeyRing, EbicsBank, EbicsUser, EbicsClient\n \n keyring = EbicsKeyRing(keys='~/mykeys', passphrase='mysecret')\n bank = EbicsBank(keyring=keyring, hostid='MYBANK', url='https://www.mybank.de/ebics')\n user = EbicsUser(keyring=keyring, partnerid='CUSTOMER123', userid='USER1')\n # Create new keys for this user\n user.create_keys(keyversion='A006', bitlength=2048)\n \n client = EbicsClient(bank, user)\n # Send the public electronic signature key to the bank.\n client.INI()\n # Send the public authentication and encryption keys to the bank.\n client.HIA()\n \n # Create an INI-letter which must be printed and sent to the bank.\n user.create_ini_letter(bankname='MyBank AG', path='~/ini_letter.pdf')\n\n # After the account has been activated the public bank keys\n # must be downloaded and checked for consistency.\n print(client.HPB())\n \n # Finally the bank keys must be activated.\n bank.activate_keys()\n \n # Download CAMT53 bank account statements\n data = client.C53(\n start='2019-02-01',\n end='2019-02-07',\n )\n client.confirm_download()\n\n\nChangelog\n---------\n\nv7.6.3 [2024-11-30]\n - SEPA: Passing lowercase IBANs led to invalid XML.\n - Fixed bug that could led to invalid timestamps and as a result to invalid XML,\n introduced in v7.5.1 (one in a million cases, tests hit the jackpot!)\n - Fixed a warning from cryptography 42+.\n - Fixed broken binaries for Python 3.5 and 3.6.\n - Improved API source code.\n\nv7.6.2 [2024-11-19]\n - SEPA: Added SDD scheme pain.008.001.08\n - SEPA: Added SCT scheme pain.001.001.09\n - SEPA: Added SCT scheme pain.001.001.09.ch.03 (CH)\n - SEPA: Added CT scheme CBICrossBorderPaymentRequestLogMsg.00.01.01 (IT)\n - SEPA: Added support for non-SEPA transfers\n - SEPA: Added support for structured addresses\n - EBICS: Added order types AXZ, XE3 and XE4\n - EBICS: Added exception EbicsNoDataAvailable\n - Added API source to allow code completion for IDEs\n - Minor bug fixes.\n\nv7.5.3 [2024-05-07]\n - Added fallback URL for licensed user verification to ensure a failure-resistant usage.\n\nv7.5.1 [2024-03-27]\n - EBICS: Fixed bug with separate signature passphrase (H005).\n - EBICS INI-letter: Try to get bank name by BIC.\n - EBICS INI-letter: Added timezone to creation time.\n\nv7.5.0 [2024-03-06]\n - SEPA: Added scheme CBIPaymentRequest.00.04.01 (IT).\n - EBICS: Check passphrases on keyring initialization.\n - Minor bug fixes.\n - Added support for Python 3.12\n - Dropped support for Python 3.4\n\nv7.4.3 [2023-09-14]\n - Fixed runtime issue under Python 3.11 on MacOS.\n\nv7.4.1 [2023-07-27]\n - EBICS: Added preliminary verification of external signatures.\n - EBICS: Skip transport signature if additional signers exist.\n - EBICS: Deprecated EbicsUser.manual_approval (use class parameter \"transport_only\" instead)\n - EBICS: Minor bug fixes.\n\nv7.3.1 [2023-06-12]\n - EBICS: Added separate signature passphrase.\n - Added possibility to read license from file.\n - Updated external code sets.\n - Added support for Python 3.11\n\nv7.2.10 [2023-03-18]\n - SEPA: Added French classification\n - SEPA: Fixed wrong position of CtgyPurp (CBI)\n - SEPA: Fixed check of CUC codes (IT)\n - EBICS: Added possibility to set accepted SSL ciphers\n\nv7.2.9 [2022-11-29]\n - Fixed some minor bugs.\n\nv7.2.6 [2022-08-05]\n - Replaced some deprecated functions.\n\nv7.2.5 [2022-07-20]\n - SEPA: Allow foreign IBANs with Account objects.\n - EBICS: Strip incoming whitespaces on all text nodes.\n - RPC: Apply defusedxml to prevent known XML attacks.\n\nv7.2.4 [2022-06-18]\n - EBICS: Added ASN1 DigestInfo to prehashed digest for external signatures.\n - RPC: Added possibility to extend the RPC class.\n\nv7.2.3 [2022-06-07]\n - EBICS: Added support for multiple signatures.\n - EBICS: Added warnings about unconfirmed downloads.\n - SEPA: Added the possibility to set custom KREF ids.\n - Added possibility to install the RPC server as OS service.\n\nv7.1.0 [2022-02-23]\n - Removed deprecated methods EbicsClient.CD1() and Account.set_creditor_id().\n - Added binaries for Linux ARM64.\n\nv7.0.6 [2022-02-14]\n - EBICS: Added some Swiss order types.\n - EBICS: Added support for EBICS websockets.\n - SEPA: Reject amounts with more than two decimals.\n - SEPA: Added support for Urgent Payments (URGP).\n - Added revised version of the RPC server to the main package.\n - Fixed issue with default User-Agent header rejected by some banks.\n - Some bug fixes with EBICS 3.0\n - Updated external code sets.\n - Added support for Python 3.10\n - Dropped support for Python 2.\n\nv6.6.5 [2021-05-21]\n - SEPACreditTransfer: Omit CdtrAgt if BIC is not specified.\n\nv6.6.4 [2021-05-04]\n - EBICS: HPB bugfix, create keys from certificate as fallback.\n\nv6.6.2 [2021-03-16]\n - CAMTParser: Fixed creditor/debtor assignment of reversed transactions.\n - DATEV: Group files by booking year and financial year.\n - DATEV: Reject amounts with more than two decimals.\n\nv6.6.1 [2021-02-03]\n - Added missing SEPA countries AD and VC\n\nv6.6.0 [2021-01-29]\n - Added support for Python 3.9\n\nv6.5.2 [2020-12-06]\n - SEPA: Fixed bug parsing CAMT messages without AmtDtls node.\n - SEPA: Added SCL Card Clearing check to iban.check_bic().\n\nv6.5.0 [2020-10-29]\n - EBICS: Added date range parameters to some download methods.\n - EBICS: Fixed missing TLS SNI support.\n - Dropped support for Python <2.7.9\n\nv6.4.4 [2020-10-13]\n - EBICS: Added method EbicsBank.get_protocol_versions()\n - Fixed issue with Python 3.8\n\nv6.4.1 [2020-07-30]\n - DATEV: Added support for divergent financial years.\n\nv6.4.0 [2020-07-28]\n - EBICS: Added support for external signatures.\n - Added method LicenseManager.list_ebics_users()\n\nv6.3.0 [2020-06-09]\n - DATEV: Added DatevCSV version 710.\n\nv6.2.0 [2020-04-29]\n - SEPA: Added support for Instant Payments\n - SEPA: Added method Account.is_sepa()\n - SEPA: Fixed bug in Swiss SCT scheme versions\n - EBICS: Fixed issue with self-signed certificates\n - Fixed debugging issues\n\nv6.1.1 [2019-12-24]\n - SEPA: Fixed bug in CBI scheme (CBI unique code)\n - SEPA: Added method Account.set_originator_id()\n\nv6.1.0 [2019-12-19]\n - Added support for Python 3.8\n - Added currency of local account to SEPA documents\n - Changed LicenseManager endpoint\n\nv6.0.7 [2019-09-21]\n - Added possibility to disable EBICS response verification.\n\nv6.0.3 [2019-08-29]\n - Fixed Distributed Signature bug with key version A006.\n\nv6.0.2 [2019-06-28]\n - Fixed creditor/debtor assignment of reversed transactions (CAMTParser).\n - Correctly sign amounts if reversal flag is set (MT940 parser).\n\nv6.0.1 [2019-06-18]\n - EBICS: Implemented EBICS protocol version 3.0 (H005).\n - EBICS: Dropped support for PyCrypto.\n - EBICS: Removed depreciated factory function EbicsClientCompat.\n - EBICS: API changes: Renamed first parameter of EbicsClient.HVU()\n and EbicsClient.HVZ() from \"ordertypes\" to \"filter\".\n - SEPA: Added Swiss scheme versions.\n - SEPA: Added unstructured address attribute to Account.\n - SEPA: Updated IBAN countries.\n - DATEV: Added DatevCSV format.\n - Updated External Code Sets\n\nv5.3.1 [2019-04-27]\n - SEPA: Fixed bug in CBI schemes\n\nv5.3.0 [2019-04-09]\n - EBICS: Fixed bug downloading large files\n - SEPA: Added CBI schema for Italy\n\nv5.2.1 [2019-03-03]\n - Fixed bug using a proxy.\n\nv5.2.0 [2018-07-31]\n - Replaced the possibility to separate transactions with a method\n to create new batches.\n - Use INI letter path with user's home directory expanded.\n\nv5.1.0 [2018-07-30]\n - Added possibility to process single transactions in its own batch.\n\nv5.0.3 [2018-05-22]\n - Added FreeBSD binary\n\nv5.0.2 [2018-04-03]\n - Fixed an issue with IPython and Django\n\nv5.0.1 [2018-03-29]\n - Fixed VEU bug with suppress_no_data_error=True\n - Some code improvements\n\nv5.0.0 [2018-03-26]\n - New packaging\n - Old versions should be uninstalled before upgrading!\n\nv4.4.1 [2018-03-09]\n - Added some logging\n\nv4.4.0 [2018-03-08]\n - Added EbicsClient context manager (auto-confirm)\n - Added EbicsClient property suppress_no_data_error\n - Added some IBAN countries\n - Fixed unverified SSL connections (Py>=2.7.9)\n - Accept multiple NtryDtls nodes in CAMTDocument\n\nv4.3.5 [2017-10-25]\n - Fixed a SEPA date issue.\n - MT940 parser: Accept all characters in purpose text even if defined as delimiter.\n - Fixed a distributed signature bug.\n\nv4.3.4 [2017-08-10]\n - Added the fields *sum_credits* and *sum_debits* to the MT942 parser.\n - Fixed the handling of invalid times (24:00:00) in CAMT documents.\n - Added the possibility to specify custom order parameters for FDL/FUL.\n - Added further support for SEPA structured references.\n\nv4.3.3 [2017-06-06]\n - Fixed a bug parsing CAMT52 documents.\n - Made the user for EbicsClient optional.\n - Fixed a bug in EbicsUser.create_ini_letter to correctly return bytes.\n - Added silent parameter to method EbicsBank.activate_keys.\n - Added the attributes reference_id and sequence_id to the CAMTDocument parser.\n - Now parses the transaction classification also for DK in addition to ZKA.\n\nv4.3.2 [2017-03-30]\n - Minor bug fix parsing MT942 documents.\n - Minor bug fix creating self-signed certificates.\n - Fixed a problem with Python builts compiled without \"--with-fpectl\".\n\nv4.3.1 [2017-02-06]\n - Fixed a bug of Account.set_mandate with named arguments.\n\nv4.3.0 [2017-01-19]\n - PyOpenSSL is not longer required to support certificates.\n - Removed direct debit type COR1 and adjusted mandate sequence types.\n API changes:\n \n - OLD: Account.set_mandate(mref, signed, first, last)\n - NEW: Account.set_mandate(mref, signed, recurrent)\n - OLD: SEPADirectDebit(account, 'COR1', ...)\n - NEW: SEPADirectDebit(account, 'CORE', ...)\n\nv4.2.4 [2017-01-17]\n - Added a check for DigestMethod algorithm.\n - Fixed a bug rejecting mandates signed more than three years ago.\n - Fixed minor bug in mt940 parser.\n \nv4.2.3 [2016-10-27]\n - Fixed bug of wrong content type in EBICS module.\n - Added support for EBICS uploads that are approved manually via accompanying document.\n\nv4.2.2 [2016-05-05]\n - Added timeout to EBICS requests.\n - Made BIC optional for SEPA transactions.\n - Added creditor id to InitgPty/OrgId for Spanish banks.\n - Added postal address to SEPA documents.\n - Added support for creditor reference numbers.\n\nv4.2.1 [2015-08-20]\n - Added a check of the unicode variant (UCS2, UCS4) to setup.py.\n\nv4.2.0 [2015-08-17]\n - Added the SEPA fields BREF, RREF, SQTP and RTCD to the MT940 parser.\n - Added a dictionary of possible return codes to the SEPA module.\n - Added the possibility to dynamically license additional EBICS users.\n - Fixed an encoding bug of non-ascii error messages under Python 2.\n - Fixed a bug swapping local and remote account for returned transactions\n by the CAMT parser.\n\nv4.1.1 [2015-04-24]\n - Disabled output of license due to some difficulties with pip\n\nv4.1.0 [2015-04-20]\n - Added support for other currencies in addition to EUR.\n - Added new Amount class with an integrated currency converter.\n - Now the SEPATransaction property *amount* is of type Amount.\n\nv4.0.0 [2015-04-14]\n - Made the library Python 2/3 compatible.\n - Added support for the cryptography package in addition to PyCrypto.\n - Made the BIC optional for national transactions.\n - Added the originator id to SEPA documents in GB and IE.\n - Added a check to recognize transaction duplicates.\n - Added a CAMT parser.\n - Changed some attributes of SEPATransaction instances to be conform\n with the new CAMT parser:\n \n + Removed the property *id*.\n + Removed the property *account*, instead use the method *get_account()*.\n + Renamed the property *due_date* to *date*.\n + Renamed the property *ext_purpose* to *purpose_code*.\n + Changed the property *purpose*, now it is a tuple of strings.\n + Changed the property *amout*, now debits are signed negative.\n \n - Fixed the handling of invalid dates (eg. 2015-02-30) in MT940 and\n CAMT parsers.\n - Fixed a problem with the exception handling in IPython.\n - Some code improvements and minor bug fixes.\n\nv3.0.3 [2015-02-05]\n - Fixed a bug in the XML to dictionary converter.\n - Fixed a bug in the path handler of the EbicsKeyRing class.\n\nv3.0.2 [2015-01-29]\n - Fixed a bug handling bank keys with a small bit-length.\n - Added some tolerance to the MT940 parser and collect unknown structured\n fields.\n\nv3.0.1 [2015-01-26]\n - Renamed the package from *ebics* to *fintech* and the module *client* to\n *ebics*.\n - Splitted the functionality of the class *EbicsClient* into the classes\n *EbicsClient*, *EbicsBank*, *EbicsUser* and *EbicsKeyRing*. Added the\n new class factory *EbicsClientCompat* for backwards compatibility.\n - Added basic support for EBICS protocol version 2.4 (H003).\n - Added support for certificates.\n - Added the order types FUL and FDL.\n - Added a French and English version of the INI-letter.\n - Added the order types PUB, HCA, HCS and H3K.\n - Added a check of remote SSL certificates against trusted CAs.\n - Fixed the broken functionality of distributed signatures.\n - Added a much faster PBKDF2 implementation.\n - Created a more tolerant MT940 parser.\n - Changed the API of *SEPACreditTransfer* and *SEPADirectDebit* to be more\n consistent and added support for different PAIN scheme versions.\n - Several bug fixes.\n\nv2.1.2 [2014-10-26]\n - Fixed some bugs regarding the distributed signature\n\nv2.1.1 [2014-10-26]\n - Fixed a bug throwing an exception in an unregistered version of PyEBICS.\n - Fixed bug of wrong *OrderParams* tag used by orders of the distributed\n signature.\n\nv2.1.0 [2014-09-29]\n - Added some functionality based on the SCL Directory, published by the\n German Central Bank.\n\nv2.0.3 [2014-09-11]\n - Fixed a bug refusing valid creditor ids.\n - Added a test to check DATEV parameters for invalid arguments.\n\nv2.0.2 [2014-09-05]\n - Fixed a bug in some EBICS requests (missing parameter tag).\n - Fixed a bug in the MT940 parser.\n\nv2.0.1 [2014-08-18]\n - Fixed a bug handling XML namespaces.\n - Changed the behaviour of the flag *parsed* of some methods. Now a\n structure of dictionaries is returned instead of an objectified XML\n object.\n - Changed the expected type of the *params* parameter. Now it must be\n a dictionary instead of a list of tuples.\n - Added support for distributed signatures (HVU, HVD, HVZ, HVT, HVE, HVS).\n\nv1.3.0 [2014-07-29]\n - Fixed a few minor bugs.\n - Made the package available for Windows.\n\nv1.2.0 [2014-05-23]\n - Added new DATEV module.\n - Fixed wrong XML position of UltmtCdtr node in SEPA documents.\n - Changed the order of the (BANKCODE, ACCOUNT) tuple to (ACCOUNT, BANKCODE)\n used by the Account initializer.\n\nv1.1.25 [2014-02-22]\n - Minor bug fix of the module loader.\n\nv1.1.24 [2014-02-21]\n - First public release.\n",
"bugtrack_url": null,
"license": "https://www.joonis.de/fintech/license",
"summary": "The Python FinTech package (SEPA, EBICS & more)",
"version": "7.6.3",
"project_urls": {
"Homepage": "https://www.joonis.de/fintech/"
},
"split_keywords": [
"fintech",
" ebics",
" sepa",
" swift",
" mt940",
" camt",
" pain",
" iban",
" datev"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "9f14706d25058e6faed975197ae5d6a2408252e3eac1af46a313e318537d0972",
"md5": "c64208295a1985b538778b4b45cd0098",
"sha256": "e5867502388a7d2b10ab33d5cd3cd39314a166a30d433438669645892fa9fe02"
},
"downloads": -1,
"filename": "fintech-7.6.3-cp310-none-any.whl",
"has_sig": false,
"md5_digest": "c64208295a1985b538778b4b45cd0098",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "!=3.5.3,<3.13,>=3.5",
"size": 2283605,
"upload_time": "2024-11-30T09:22:45",
"upload_time_iso_8601": "2024-11-30T09:22:45.564714Z",
"url": "https://files.pythonhosted.org/packages/9f/14/706d25058e6faed975197ae5d6a2408252e3eac1af46a313e318537d0972/fintech-7.6.3-cp310-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4a47ba1919339f141e357addd91bd1849084756cf245d583b35035c1647d4a53",
"md5": "d77d6f9e45c1702831e60cbd24106689",
"sha256": "ddd10e437caadf2fc7ceeada6d2e0f50e94e7a4823f1eec4f5ed2e5e50ed38de"
},
"downloads": -1,
"filename": "fintech-7.6.3-cp311-none-any.whl",
"has_sig": false,
"md5_digest": "d77d6f9e45c1702831e60cbd24106689",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "!=3.5.3,<3.13,>=3.5",
"size": 2844366,
"upload_time": "2024-11-30T09:23:49",
"upload_time_iso_8601": "2024-11-30T09:23:49.976987Z",
"url": "https://files.pythonhosted.org/packages/4a/47/ba1919339f141e357addd91bd1849084756cf245d583b35035c1647d4a53/fintech-7.6.3-cp311-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b15b7248d18833986de579e36a20471661966ce46729648b9557af6d918f8d87",
"md5": "0cd3f392a6180fa8124fa41e024d25cf",
"sha256": "a97b59f55bcf27d83a7b10165952c739e3a94563e2d07be7120182131d422132"
},
"downloads": -1,
"filename": "fintech-7.6.3-cp312-none-any.whl",
"has_sig": false,
"md5_digest": "0cd3f392a6180fa8124fa41e024d25cf",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "!=3.5.3,<3.13,>=3.5",
"size": 2710854,
"upload_time": "2024-11-30T09:22:51",
"upload_time_iso_8601": "2024-11-30T09:22:51.395073Z",
"url": "https://files.pythonhosted.org/packages/b1/5b/7248d18833986de579e36a20471661966ce46729648b9557af6d918f8d87/fintech-7.6.3-cp312-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "29f566b036a34b80f6329843299ccb6375e49f662831768e7170dd500b244b8c",
"md5": "c28ae692ba60f4d0d818f51f4c9148f6",
"sha256": "23bff63b6052a7ff658bae2308c4334f7afaa56603d2588e12e384e0757bbd7e"
},
"downloads": -1,
"filename": "fintech-7.6.3-cp35-none-any.whl",
"has_sig": false,
"md5_digest": "c28ae692ba60f4d0d818f51f4c9148f6",
"packagetype": "bdist_wheel",
"python_version": "cp35",
"requires_python": "!=3.5.3,<3.13,>=3.5",
"size": 2332059,
"upload_time": "2024-11-30T09:24:18",
"upload_time_iso_8601": "2024-11-30T09:24:18.215200Z",
"url": "https://files.pythonhosted.org/packages/29/f5/66b036a34b80f6329843299ccb6375e49f662831768e7170dd500b244b8c/fintech-7.6.3-cp35-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3c894b90b4178a3ee1b18ca813ddc48e45b77e651b9820046e113566599d4518",
"md5": "b6b15153098184d5ba717bf583648be5",
"sha256": "78aca476e9d1074a05c1d975e8a75ce13170c55018350f149fbdbdfd705cd20e"
},
"downloads": -1,
"filename": "fintech-7.6.3-cp36-none-any.whl",
"has_sig": false,
"md5_digest": "b6b15153098184d5ba717bf583648be5",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": "!=3.5.3,<3.13,>=3.5",
"size": 2285487,
"upload_time": "2024-11-30T09:23:47",
"upload_time_iso_8601": "2024-11-30T09:23:47.608294Z",
"url": "https://files.pythonhosted.org/packages/3c/89/4b90b4178a3ee1b18ca813ddc48e45b77e651b9820046e113566599d4518/fintech-7.6.3-cp36-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c8cebcb1b43f5f75d5c3d40d3349478a64f5ab37e69eff4a1c462e64592f5ab6",
"md5": "17b84ac68f07a39b4aafd846edb3ac99",
"sha256": "64607aa629f81b4a97fd96eb4698a7ed08364d48c0cd887e69cabaee9c2a5921"
},
"downloads": -1,
"filename": "fintech-7.6.3-cp37-none-any.whl",
"has_sig": false,
"md5_digest": "17b84ac68f07a39b4aafd846edb3ac99",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": "!=3.5.3,<3.13,>=3.5",
"size": 2282775,
"upload_time": "2024-11-30T09:23:13",
"upload_time_iso_8601": "2024-11-30T09:23:13.618135Z",
"url": "https://files.pythonhosted.org/packages/c8/ce/bcb1b43f5f75d5c3d40d3349478a64f5ab37e69eff4a1c462e64592f5ab6/fintech-7.6.3-cp37-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "af9cdaedf09366107b31757bf4dc804165698a697a4fee4b649fe18678add1c8",
"md5": "25e64bad58ba2046738926384b44bed1",
"sha256": "96b2665345dc20b6d434e895899d2d840fa3087d9268e101046c3d664591eeae"
},
"downloads": -1,
"filename": "fintech-7.6.3-cp38-none-any.whl",
"has_sig": false,
"md5_digest": "25e64bad58ba2046738926384b44bed1",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "!=3.5.3,<3.13,>=3.5",
"size": 2285207,
"upload_time": "2024-11-30T09:24:41",
"upload_time_iso_8601": "2024-11-30T09:24:41.087697Z",
"url": "https://files.pythonhosted.org/packages/af/9c/daedf09366107b31757bf4dc804165698a697a4fee4b649fe18678add1c8/fintech-7.6.3-cp38-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6bbaba8683c7cd7603b5fa09d54e794a57fc79c65b2acc389cdca2bb33732497",
"md5": "8bc839b49ba69ebfb50668cac20c0890",
"sha256": "3dc595f1b9858ceb82d4729e127d7f52d3075373e3796c8254e24513beb7c4bd"
},
"downloads": -1,
"filename": "fintech-7.6.3-cp39-none-any.whl",
"has_sig": false,
"md5_digest": "8bc839b49ba69ebfb50668cac20c0890",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": "!=3.5.3,<3.13,>=3.5",
"size": 2284579,
"upload_time": "2024-11-30T09:23:44",
"upload_time_iso_8601": "2024-11-30T09:23:44.207928Z",
"url": "https://files.pythonhosted.org/packages/6b/ba/ba8683c7cd7603b5fa09d54e794a57fc79c65b2acc389cdca2bb33732497/fintech-7.6.3-cp39-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-30 09:22:45",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "fintech"
}