Financial EDI in Belgium — CODA, OGM, SEPA
Beyond the invoice, Belgian financial EDI rests on three national pillars: CODA (coded bank statements), OGM/VCS (modulo-97 structured communication) and SEPA with Belgian specifics. All interact with the PEPPOL-BIS 3.0 invoice of 1 January 2026 via the BT-83 PaymentID field.
CODA — Coded Statement of Account
The CODA (Coded Statement of Account) format is the Belgian equivalent of CAMT.053 ISO 20022, but 30 years older. Created by Febelfin (Belgian Banking and Stock Exchange Companies' Association) in 1991, it remains massively used in B2B despite ISO 20022 promotion.
- Format: fixed ASCII text, 128-character lines, structured by transaction types (0/1/2/3/4/8/9).
- Encoding: pure ASCII (no UTF-8). Accented characters replaced by their unaccented equivalents.
- Line 0 (Header): identifies the account, date, issuing bank, initial balance.
- Line 1 (Old balance): starting balance.
- Line 2 (Movement): each transaction. 8-digit Belgilux transaction code (stock exchange/transfer reference).
- Line 3 (Information): free communication + OGM/VCS if present. This is the line that contains the BT-83 for invoice reconciliation.
- Line 8 (New balance): final balance.
- Line 9 (Footer): totals and signature.
0000201020260519 00000000000 Statement 87 BNP PARIBAS FORTIS EUR0000000000000 0
12087BE68539007547034EUR000000010500050000026051900000000000000000ACME BELGIUM SA 00000 00000
21000100000000ACME-INV-2026-000412+++097/3300/57894+++0000000000000003000000000000026051901001
22000100000003 BLZ
23000100000003BE68539007547034EUR ACME BELGIUM SA SOL 00000
3100010000200001 00000000 0
8087BE68539007547034EUR00000000010505000260519 0
9 000000000000000000000000010500050000000000000 0
In this example: BNP Paribas Fortis sends Acme Belgium SA a CODA
statement for 19 May 2026 with a EUR 105.00 credit identified by
the structured communication +++097/3300/57894+++,
which exactly matches invoice ACME-INV-2026-000412.
OGM/VCS structured communications
The OGM (Overschrijving met Gestructureerde Mededeling, in Dutch)
or VCS (Virement avec Communication Structurée, in French) is
the Belgian standard for payment communications. It is a
12-digit code with modulo 97 checksum, formatted
+++NNN/NNNN/NNNCC+++.
def ogm_compute(digits10: str) -> str:
"""
Compute the Belgian structured communication (OGM /
Gestructureerde mededeling) from a 10-digit reference string.
Final format: +++NNN/NNNN/NNNCC+++ (12 characters total)
"""
base = int(digits10)
check = base % 97
if check == 0:
check = 97
full = digits10 + str(check).zfill(2)
return f"+++{full[:3]}/{full[3:7]}/{full[7:12]}+++"
def ogm_verify(s: str) -> bool:
"""Verify a structured communication is valid."""
digits = ''.join(c for c in s if c.isdigit())
if len(digits) != 12:
return False
base = int(digits[:10])
check = int(digits[10:])
expected = base % 97 or 97
return check == expected
print(ogm_compute("0973300578")) # +++097/3300/57894+++
print(ogm_verify("+++097/3300/57894+++")) # True - Display format:
+++097/3300/57894+++(3-4-5 digits separated by slashes, framed by triple plus). - Checksum: last 2 digits = (first 10 digits) modulo 97; if result = 0, then 97.
- Standard usage: invoice, subscription, contribution, reimbursement. Unique generation per invoice ID.
- Operational advantage: automatic invoice ↔ payment reconciliation without manual matching.
- ERP integration: SAP, Odoo, Sage, Exact, Yuki, WinBooks natively support OGM/VCS generators.
SEPA SCT and SDD Belgian specifics
Belgium fully participates in the SEPA (Single Euro Payments Area) zone since 1 February 2014 (end of transition from pain.001/003 to pain.001/008 ISO 20022). Specifics:
- SEPA Credit Transfer (SCT): standard 24h business day transfer. Pricing often free in B2C, paid in B2B (~EUR 0.10).
- SEPA Instant (SCT Inst): 10-second instant transfer 24/7/365, mainstream in Belgium since November 2021. Capped at EUR 100,000 per payment.
- SEPA Direct Debit Core (SDD CORE): consumer direct debit. Paper mandate or e-mandate via SignHub Belgium. Notification to the debtor minimum 14 days before debit.
- SEPA Direct Debit B2B (SDD B2B): VAT-VAT taxable person direct debit. 1 business day notification. No automatic refund (limited R-Message).
- Belgian Creditor ID: format
BE<check 2>ZZZ<BCE 10>. E.g.BE12ZZZ0473495177for Acme Belgium SA. - BIC mandatory: only for SEPA cross-border payments. Not mandatory for intra-BE payments (since 2016 SEPA Regulation art. 5).
ISO 20022 camt/pain in Belgium
Belgian banks have supported ISO 20022 XML formats alongside CODA for automated export/import since 2014:
- pain.001.001.03: credit transfer initiation (Customer Credit Transfer Initiation). Send format for multiple payment files.
- pain.008.001.02: direct debit initiation (Customer Direct Debit Initiation).
- camt.053.001.02: XML statement — ISO 20022 equivalent of CODA. Richer in metadata (BankToCustomerStatement).
- camt.054.001.02: movement notification (BankToCustomerDebitCreditNotification) — for intra-day updates.
- Pragmatic coexistence: most banks offer both CODA + camt.053. Accountants and accounting software vendors still prefer CODA (simpler parser, more compact size).
Integration with PEPPOL BT-83
The bridge between the PEPPOL-BIS 3.0 invoice and SEPA/CODA payment rests on two mechanisms:
- BT-83 PaymentID in the UBL contains the Belgian OGM/VCS. The sender AP ideally generates this OGM on the fly from the invoice ID.
- The debtor pays by SEPA SCT using the OGM displayed on the invoice.
- The creditor bank produces CODA which contains the OGM in line 3.
- The creditor ERP matches the CODA line with the PEPPOL invoice automatically via the shared OGM.
Result: an invoice → payment → reconciliation cycle fully automated, with no human intervention.
CODA-operating banks
| Bank | BIC | CODA | camt.053 | SCT Inst |
|---|---|---|---|---|
| BNP Paribas Fortis | GEBABEBB | Yes | Yes | Yes |
| KBC Bank | KREDBEBB | Yes | Yes | Yes |
| Belfius Bank | GKCCBEBB | Yes | Yes | Yes |
| ING Belgium | BBRUBEBB | Yes | Yes | Yes |
| Argenta Spaarbank | ARSPBE22 | Yes | Yes | Yes |
| Crelan (formerly AXA Bank) | NICABEBB | Yes | Yes | Yes |
| ABN AMRO Belgium | ABNABE2A | Yes | Yes | Yes |
| Deutsche Bank Belgium | DEUTBEBE | Yes | Yes | Yes |
| Triodos Bank Belgium | TRIOBEBB | Yes | Yes | Yes |
| BPost Bank | BPOTBEB1 | Yes | Limited | Yes |
All major Belgian banks publish their CODA format as automated download via Isabel 6 (Belgium multi-bank portal) or via their own business portal (BNP MyPortal, KBC Business Dashboard, Belfius Web Banking Pro).
Cross-links
- Belgium hub — full e-invoicing mandate
- Royal Decree of 20 March 2025
- PEPPOL-BIS 3.0 Belgium
- BCE/KBO — ICD 0208 identifier
- Belgian VAT regimes
- EDIFACT retail Belgium
- Febelfin — Belgian Financial Sector Federation
- National Bank of Belgium (NBB)
- Isabel 6 — BE multi-bank portal
- European Payments Council — SEPA