Skip to main content

Online Bank Statements: Enable Banking

Import bank statements directly from the bank into Odoo using Enable Banking, a PSD2 licensed account information service provider (AISP).

This module extends the OCA framework module account_statement_import_online with the Enable Banking service, so bank journals pull their statements from the bank through the Enable Banking REST API using a read-only account information session (AIS) that the user authorizes with strong customer authentication (SCA) at the bank.

Features

  • PSD2 account information: the user authorizes read-only access to the bank account with the bank SCA flow; Odoo pulls the transactions afterwards, without the bank credentials ever touching Odoo.

  • One API fetch per pull: transactions are requested once for the whole window and paginated with continuation_key, respecting the background fetch limits that most banks apply.

  • Statements are split according to the configured statement creation mode (daily, weekly or monthly), reusing the standard framework.

  • Duplicate-safe: every transaction is imported once, based on its entry_reference.

  • Closing booked balance attached to the current statement when the bank provides it (GET /accounts/{id}/balances).

  • Session lifecycle: the authorization expiration is stored on the provider, a warning is shown 15 days in advance and a Reconnect button renews the authorization; the bank account is recovered automatically by matching the journal IBAN.

  • Rate limits (ASPSP_RATE_LIMIT_EXCEEDED) are logged on the provider and deferred to the next scheduled run instead of breaking the pull.

  • Full translation support (English, Spanish, Catalan).

Configuration

Requirements

  • The pyjwt Python library must be installed in the server (declared as external dependency of the module; the JWT is signed with RS256).

  • A public HTTPS URL for Odoo reachable by the browser that completes the bank authorization. Enable Banking validates the redirect URL against the registered list with an exact match, so web.base.url must hold the HTTPS URL of the instance: Odoo rewrites that parameter with the scheme of the last web request, so set web.base.url.freeze when the instance runs behind an HTTPS proxy. When the current request is already HTTPS the module builds the redirect URL from the request itself and does not depend on the parameter.

Register the Enable Banking application

  1. Create an account and sign in at the Enable Banking Control Panel.

  2. Register a new application in the desired environment (start with sandbox; restricted production for real bank accounts).

  3. Enable Banking asks for a certificate: use the default one offered by the control panel or upload your own self-signed certificate.

  4. The control panel shows the Application ID and lets you download the private key (PEM). Keep both.

  5. In the application settings, add this Odoo instance’s redirect URL: https://<your-odoo-domain>/enable_banking/response (no trailing slash). The exact value is shown in the provider form (Enable Banking Redirect URL field). Enable Banking validates it against the registered list with an exact match: if the callback URL is missing, the authorization is rejected with REDIRECT_URI_NOT_ALLOWED.

Configure the provider

  1. Open the bank journal (Accounting > Configuration > Bank Journals) and set Bank Statements Source to Online.

  2. Open its online bank statement provider and choose Enable Banking as Service.

  3. Fill in the Enable Banking group:

    • Application ID: value obtained when registering the application.

    • Private Key: PEM file downloaded when registering the application.

    • ASPSP Name: exact bank name as listed by Enable Banking (e.g. Caixa Guissona).

    • ASPSP Country: two-letter country code of the bank (e.g. ES).

    • PSU Type: Business for company accounts, Personal otherwise.

  4. Click Connect and complete the authorization in your bank; the account is linked when the bank redirects the browser back to Odoo.

Scheduled pull

Banks limit how many background fetches an application can make per day (many ASPSPs allow around 4). The pull interval defaults to 1 day; keep a daily (or slower) schedule. When the bank answers a rate limit error, the pull is logged on the provider and deferred to the next scheduled run.

When the authorization is about to expire (15 days warning is displayed), use Reconnect to renew it. The maximum consent validity depends on the bank and is usually 180 days.

De-duplication

Statement lines are de-duplicated with the transaction identifier the bank provides (entry_reference). Some banks do not return any identifier at all: for those, the module builds a deterministic digest of the transaction content, so pulling the same period twice does not duplicate the lines. Identical operations of the same pull are kept apart with an occurrence index, so repeated transactions are never dropped either.

Repairing a journal imported with an older version

A journal that already imported operations before this fallback existed keeps lines without identifier, and usually the same operation several times. The bundled script repairs it in place:

EB_DEDUPE_PROVIDER_ID=<provider id> odoo shell -d <db> --no-http < scripts/dedupe_statement_lines.py
  1. The first run is a dry run: it lists the repeated groups and how many lines would be deleted or identified, and it stops there.

  2. Add EB_DEDUPE_APPLY=1 to the same command to delete the extra copies and write the identifiers. The script reads the operations from Enable Banking through the module itself, so the identifiers it writes are exactly the ones the next pull expects.

  3. Start one pull afterwards to refresh the statement balances.

An operation can legitimately be repeated the same day with the same amount and reference, so a line is only deleted when the bank returns fewer copies than the journal holds. Lines whose operation the bank no longer returns are left untouched unless EB_DEDUPE_TRUST_CONTENT=1 is passed.

What the script never touches:

  • journals of other banks: only the journal of the provider passed in EB_DEDUPE_PROVIDER_ID is read, the rest of the database is never scanned;

  • lines outside the reviewed window (EB_DEDUPE_DAYS, 180 days by default), so older statements are not affected;

  • lines that already carry an identifier;

  • lines created by hand: they belong to no statement and are only counted in the report;

  • reconciled lines: they are never deleted, and when a group contains a reconciled copy that copy is the one kept and identified.

Usage

  1. Register the application and configure the provider as described above.

  2. Complete the authorization with Connect.

  3. Pull the history you need with Pull Online Bank Statement (banks usually offer up to ~90 days of history when first linking), then let the scheduled pull keep the journal up to date.

  4. Use Reconnect when the authorization approaches its expiration.

Known issues / Roadmap

  • The first pull window depends on the history the bank makes available through Enable Banking (commonly up to 90 days).

  • The authorization flow opens the bank in a new browser tab; make sure pop-up blockers do not interfere.

  • Banks that do not provide transaction identifiers rely on the content digest for de-duplication; if such a bank also changes the transaction data between two retrievals, a duplicated line may have to be deleted by hand.

Credits

Authors

  • SomIT Cooperatiu SCCL

Contributors

Maintainers

This module is built on top of the OCA modules of the bank-statement-import project.

Metadata

Release files for odoo-addon-account-statement-import-online-enable-banking 16.0.1.0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for odoo-addon-account-statement-import-online-enable-banking 16.0.1.0.1.2
File Size Uploaded
odoo_addon_account_statement_import_online_enable_banking-16.0.1.0.1.2.tar.gz 42.2 kB Details

Release files / odoo_addon_account_statement_import_online_enable_banking-16.0.1.0.1.2.tar.gz

Download URL odoo_addon_account_statement_import_online_enable_banking-16.0.1.0.1.2.tar.gz
Size 42.2 kB
Tags Source
SHA-256 checksum
How to use checksums
ab9b4dc9c88cfc3f0217be8c6162016400b3f86d7d3fa8923278282991ae8653
BLAKE2b-256 checksum
How to use checksums
bdb574bf966675590885ea2015875bbcebe13535421407dca618f5de713d9f32
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release history Release notifications | RSS feed

This release

16.0.1.0.1.2 This release

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page