ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.

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.
text coda-example-bnp-paribas-fortis.txt
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+++.

python ogm_compute.py
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. BE12ZZZ0473495177 for 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:

  1. 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.
  2. The debtor pays by SEPA SCT using the OGM displayed on the invoice.
  3. The creditor bank produces CODA which contains the OGM in line 3.
  4. 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

BankBICCODAcamt.053SCT Inst
BNP Paribas FortisGEBABEBBYesYesYes
KBC BankKREDBEBBYesYesYes
Belfius BankGKCCBEBBYesYesYes
ING BelgiumBBRUBEBBYesYesYes
Argenta SpaarbankARSPBE22YesYesYes
Crelan (formerly AXA Bank)NICABEBBYesYesYes
ABN AMRO BelgiumABNABE2AYesYesYes
Deutsche Bank BelgiumDEUTBEBEYesYesYes
Triodos Bank BelgiumTRIOBEBBYesYesYes
BPost BankBPOTBEB1YesLimitedYes

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).