mirror of
https://github.com/brain-tec/account_ebics.git
synced 2026-10-16 07:49:07 +00:00
267 lines
12 KiB
ReStructuredText
267 lines
12 KiB
ReStructuredText
======================
|
|
EBICS Banking Protocol
|
|
======================
|
|
|
|
**Exchange files directly with your banks from Odoo, with no portal and nobody logging in.**
|
|
|
|
EBICS, the Electronic Banking Internet Communication Standard, is the channel European
|
|
banks open to companies that want their software to talk to the bank. Bank statements are
|
|
downloaded on a schedule and payment files are uploaded from Odoo, authenticated by your
|
|
own cryptographic keys instead of a login page.
|
|
|
|
This module implements that protocol in Odoo. It is developed and maintained by
|
|
Noviat, and follows each new version of Odoo, which matters when a bank connection has to
|
|
survive your next migration.
|
|
|
|
If you are still working out whether EBICS is the right channel for you, we explain it
|
|
without the jargon, with screen recordings of the flow in Odoo, on
|
|
`noviat.com/ebics <https://www.noviat.com/ebics>`_.
|
|
|
|
.. image:: https://raw.githubusercontent.com/Noviat/account_ebics/16.0/account_ebics/static/description/ebics_flow.png
|
|
:alt: Statements come down as camt.053 or camt.052 files, payment files go up as pain.001 or pain.008, and your keys stay on your own server
|
|
:width: 100%
|
|
|
|
What you get
|
|
============
|
|
|
|
- **Statements that arrive on their own.** A scheduled task collects the files your bank
|
|
publishes, for every account, and processes them into bank statements.
|
|
- **Payments that leave the same way.** A payment batch or a payment order is uploaded to
|
|
the bank in the format the bank expects, without exporting a file and re-uploading it
|
|
somewhere else.
|
|
- **Several companies, one connection.** Keys are held per bank rather than per company:
|
|
when fifteen entities bank with the same institution, the bank sends a single daily file
|
|
carrying fifteen statements and the module puts each statement in the right company.
|
|
- **No bank credentials in Odoo.** The connection uses your own company keys, generated on
|
|
your side and kept on your server. Access to the EBICS configuration is a permission of
|
|
its own ('EBICS Manager'), separate from ordinary accounting rights.
|
|
- **A test mode, where your bank offers one.** French banks accept a test flag, so a file
|
|
can be submitted and validated before anything is switched to production. German and
|
|
Swiss banks generally do not: there the first payment is a real one, kept small and sent
|
|
to an account you control.
|
|
- **A trace of every exchange.** Each download and each upload is a record, with the file
|
|
it carried, the moment it happened and the user behind it.
|
|
|
|
**EBICS 2.4**, **EBICS 2.5** and **EBICS 3.0** are supported. EBICS 3.0, the current
|
|
specification since December 2022, names what is exchanged with BTF instead of the
|
|
country-specific order type codes of EBICS 2.x. Many banks still run 2.4 or 2.5 in parallel.
|
|
|
|
What travels over the link
|
|
==========================
|
|
|
|
- **Coming in:** camt.053 for the end of day statement, camt.052 for intraday movements
|
|
where the bank offers them, and national formats such as the French CFONB.
|
|
- **Going out:** pain.001 for credit transfers and pain.008 for direct debits, generated by
|
|
Odoo from your payment batches.
|
|
|
|
We do not process MT940 statements: the format carries bank and country specific variations,
|
|
and the Odoo community stopped maintaining a general parser for it after Odoo 10. Where a
|
|
bank publishes camt.053 alongside it, which is now the usual case, that is the format to use.
|
|
|
|
Which banks
|
|
===========
|
|
|
|
Any bank that publishes an EBICS access point can be connected. The standard is maintained by
|
|
EBICS SC, a company held by the German, French, Swiss and Austrian banking bodies
|
|
(DK, CFONB, SIX and PSA), and it is the standard corporate channel in those countries.
|
|
|
|
To check a specific bank before you start, joonis publishes a public directory at
|
|
`joonis.de/en/fintech/banks <https://www.joonis.de/en/fintech/banks/>`_. Enter a BIC and it
|
|
returns the SEPA services the bank offers, the EBICS versions it supports and its Host-ID.
|
|
|
|
A bank missing from that directory is not a no: it is joonis' own list, not an official
|
|
register. Ask your bank whether it publishes an EBICS access point.
|
|
|
|
What it costs
|
|
=============
|
|
|
|
**This module is free software**, published under LGPL-3. There is no licence fee, no
|
|
subscription and no per-connection charge from Noviat.
|
|
|
|
It does however rely on the `fintech <https://pypi.python.org/pypi/fintech>`_ library from
|
|
joonis, and that library requires a **commercial licence for production use**: as soon as
|
|
you upload SEPA files with more than five transactions, retrieve statements older than the
|
|
last three days, or use the distributed signature. The licence is contracted directly with
|
|
joonis, not with Noviat.
|
|
|
|
joonis charges a one-off setup fee plus a monthly fee per EBICS user id. Current pricing is
|
|
published on
|
|
`joonis.de <https://www.joonis.de/en/fintech/prices/>`_.
|
|
|
|
Your bank may also charge a subscription for the EBICS channel itself. It varies from one
|
|
bank to another and is billed by the bank, separately from anything on the Odoo side.
|
|
|
|
Requirements
|
|
============
|
|
|
|
The module depends on two Python libraries:
|
|
|
|
- `fintech <https://pypi.python.org/pypi/fintech>`_
|
|
- `cryptography <https://pypi.python.org/pypi/cryptography>`_
|
|
|
|
Because the connection needs a Python library and your key files on the server, it runs on
|
|
**Odoo.sh** or on an **on-premise** installation.
|
|
|
|
The EBICS test mode for uploads requires fintech 4.3.4 or higher for EBICS 2.x and fintech
|
|
7.2.7 or higher for EBICS 3.0. SWIFT 3SKey support requires fintech 6.4 or higher, and the signature passphrase
|
|
fintech 7.3.1 or higher.
|
|
|
|
Fintech licence
|
|
---------------
|
|
|
|
With a fintech licence, add its parameters to the ``[options]`` section of the Odoo server
|
|
configuration file:
|
|
|
|
- ``fintech_register_name``: the name of the licensee;
|
|
- ``fintech_register_keycode``: the keycode of the licensed version.
|
|
|
|
Example::
|
|
|
|
; fintech
|
|
fintech_register_name = MyCompany
|
|
fintech_register_keycode = AB1CD-E2FG-3H-IJ4K-5L
|
|
|
|
Companion modules
|
|
=================
|
|
|
|
From this repository:
|
|
|
|
- **EBICS - Odoo Enterprise Integration** (``account_ebics_oe``): required on Odoo
|
|
Enterprise; installed automatically.
|
|
- **EBICS - Bank Statement Import (OCA)** (``account_ebics_oca_statement_import``):
|
|
matches the statements processed with the OCA statement import to the right bank
|
|
journal; installed automatically with ``account_statement_import_file``.
|
|
- **EBICS - Scheduled File Import** (``account_ebics_batch``): downloads and processes the
|
|
files of every connection on a schedule.
|
|
- **EBICS - Batch Payments (Odoo Enterprise)** (``account_ebics_batch_payment``): uploads
|
|
the batch payments of the Odoo Enterprise ``account_batch_payment`` module.
|
|
- **EBICS - Payment Orders (OCA)** (``account_ebics_payment_order``): uploads the payment
|
|
orders of the OCA ``account_payment_order`` module
|
|
(`OCA/bank-payment <https://github.com/OCA/bank-payment>`_).
|
|
|
|
To process the downloaded statements, install the module of each format you receive:
|
|
|
|
- **camt.053, camt.052 and camt.054**: ``account_statement_import_camt``
|
|
(`OCA/bank-statement-import <https://github.com/OCA/bank-statement-import>`_). For
|
|
camt.053, the Odoo Enterprise ``account_bank_statement_import_camt`` works too.
|
|
- **French CFONB**: ``account_statement_import_fr_cfonb``
|
|
(`OCA/l10n-france <https://github.com/OCA/l10n-france>`_).
|
|
|
|
Recommended with several financial journals: ``account_usability``
|
|
(`OCA/account-financial-tools <https://github.com/OCA/account-financial-tools>`_), which adds
|
|
accounting menus such as a list of all bank statements, including those downloaded by the
|
|
scheduled import.
|
|
|
|
Getting your bank online
|
|
========================
|
|
|
|
The configuration on the Odoo side takes fifteen to thirty minutes. What sets the pace of a
|
|
project is the bank, and it is almost never for a technical reason:
|
|
|
|
- **The bank opens the access.** You receive the host ID, the address of the access point,
|
|
your partner and user identifiers, and a letter carrying the hash values of the bank's keys.
|
|
- **INI and HIA.** Odoo generates your key pairs for signature, authentication and encryption,
|
|
sends the public keys to the bank and produces the initialisation letters, which you print,
|
|
sign and send. The bank compares them by hand with the keys it received online.
|
|
- **HPB.** Once the bank has activated your access, you retrieve its public keys and compare
|
|
their hash values with the letter it sent you. That comparison is what makes the channel
|
|
trustworthy.
|
|
- **The first exchange.** Statements come down first. Payments follow, as a test file where
|
|
the bank supports the test flag, otherwise as a real transfer of a small amount.
|
|
|
|
Count in weeks per bank rather than days, and start the contract and the paperwork early.
|
|
|
|
Configuration
|
|
=============
|
|
|
|
The menus are those of Odoo Enterprise; on Odoo Community, the application is called
|
|
*Invoicing* instead of *Accounting*.
|
|
|
|
**Who may configure.** In *Settings > Users*, with the developer mode active, tick
|
|
**EBICS Manager** in the *Technical* section of the users who maintain the EBICS
|
|
configuration.
|
|
|
|
**File formats.** In *Accounting > Configuration > EBICS > EBICS File Formats*, check that the
|
|
formats you exchange with your banks are defined; the common ones are created at
|
|
installation. A missing format can be reported on
|
|
`GitHub <https://github.com/Noviat/account_ebics/issues>`_.
|
|
|
|
A download format can carry a **Download Process Method**, run by the *Process* button of a
|
|
downloaded file: ``camt.053``, ``camt.052``, ``camt.054`` and ``cfonb120``. Each needs the
|
|
module of its format (see Companion modules); Odoo tells you which one when it is missing.
|
|
|
|
**Bank connections.** In *Accounting > Configuration > EBICS > EBICS Configuration*, create one
|
|
connection per bank contract, with the identifiers your bank sent you.
|
|
|
|
.. image:: https://raw.githubusercontent.com/Noviat/account_ebics/16.0/account_ebics/static/description/ebics_download.png
|
|
:alt: A downloaded camt.053 statement file in Odoo, before processing
|
|
:width: 100%
|
|
|
|
Usage
|
|
=====
|
|
|
|
The **EBICS Processing** menu, in the top bar of the Accounting application, lists the
|
|
downloaded and uploaded files and offers manual downloads and uploads.
|
|
|
|
Downloaded files are processed into bank statements. Uploads are launched from the payment
|
|
batch or the payment order. For a payment order, the format comes from its payment mode;
|
|
for a batch payment, Odoo proposes the connection's upload format and you confirm it in
|
|
the upload window.
|
|
|
|
.. image:: https://raw.githubusercontent.com/Noviat/account_ebics/16.0/account_ebics/static/description/ebics_upload.png
|
|
:alt: Uploading a pain.001 SEPA credit transfer file over EBICS 3.0, with the test mode option
|
|
:width: 100%
|
|
|
|
Diagnostics
|
|
===========
|
|
|
|
To diagnose the connection with your bank, add this line to the Odoo server configuration
|
|
file::
|
|
|
|
log_handler = fintech.ebics:DEBUG
|
|
|
|
EBICS return codes
|
|
------------------
|
|
|
|
During an upload or a download, your bank may return an error code, for example::
|
|
|
|
EBICS Functional Error:
|
|
EBICS_NO_DOWNLOAD_DATA_AVAILABLE (code: 90005)
|
|
|
|
The codes are explained on `ebics.org <https://www.ebics.org>`_ and in the ``doc`` folder of
|
|
this module (``EBICS_Annex1_ReturnCodes``).
|
|
|
|
Electronic Distributed Signature (EDS)
|
|
--------------------------------------
|
|
|
|
Where your bank supports EBICS T, Odoo prepares the file and holds no signing credentials
|
|
at all: the payment is approved in your own signing application, which is what a segregation
|
|
of duties policy usually demands. Where it does not, which happens with German and Swiss
|
|
banks, the signing key sits on your Odoo server, and you can protect it with a separate
|
|
signature passphrase that is never stored and is asked for every signed transaction.
|
|
|
|
External signing apps include BankingVEU
|
|
(`Android <https://play.google.com/store/apps/details?id=subsembly.bankingveu>`_,
|
|
`iOS <https://apps.apple.com/de/app/bankingveu/id1578694190>`_).
|
|
|
|
Roadmap
|
|
=======
|
|
|
|
- Import externally generated keys and certificates (today only the 3SKey signature
|
|
certificate).
|
|
- Support the SWIFT 3SKey signing JavaScript library
|
|
(`SConnect <https://www2.swift.com/3skey/help/sconnect.html>`_).
|
|
|
|
Issues and pull requests are welcome on
|
|
`GitHub <https://github.com/Noviat/account_ebics>`_.
|
|
|
|
Credits
|
|
=======
|
|
|
|
This module is developed and maintained by `Noviat <https://www.noviat.com>`_, Odoo
|
|
integrator in Belgium, specialised in accounting and finance since 2009.
|
|
|
|
We implement it, we configure the connection with your banks and we support you through the
|
|
first cycles. If you want help getting a bank online, tell us which banks you use:
|
|
https://www.noviat.com/ebics
|