# Structured Communication (OGM/VCS)

> Source: https://docs.barcoder.ai/docs/standards/structured-communication
> research date 2026-10-06 · extracted at 2026-10-06
> Publisher: Barcoder — encyclopedia of QR, barcode and payment-code standards

Specifications:
- [Febelfin — AOS1 applied in Belgium to SCT, SCT Inst and SDD: Structured Remittance Information OGM-VCS (v1.2, 2017)](https://febelfin.be/media/pages/publicaties/2023/febelfin-standaarden-voor-online-bankieren/c4626c3d5a-1738925080/febelfin-aos-ogmvcs_0.pdf)
- [Febelfin — QR-code on invoice for credit transfer initiation, implementation guidelines v1.0 (2025)](https://febelfin.be/media/pages/publicaties/2023/febelfin-standaarden-voor-online-bankieren/93f44d7850-1744012292/febelfin-ig-qroninvoice.pdf)
- [Febelfin — Banking standards for internet banking for businesses](https://www.febelfin.be/en/banking-standards)

## Overview

The **Belgian structured communication** — Dutch *overschrijving met gestructureerde mededeling* (**OGM**), French *virement avec communication structurée* (**VCS**), jointly "OGM-VCS" — is Belgium's national standard for structured remittance information on credit transfers <sup>[1][1]</sup><sup>[6][6]</sup>. It is a **12-digit numeric reference** whose last two digits are a **modulo-97 check** over the first ten, written visually as `+++123/4567/89012+++`, and it lets a beneficiary's systems automatically match an incoming payment to the invoice or customer it settles <sup>[1][1]</sup><sup>[6][6]</sup>. It is defined and maintained by **Febelfin**, the Belgian Financial Sector Federation, as an Additional Optional Service (AOS) supported by banks in Belgium on SEPA payments <sup>[1][1]</sup><sup>[3][3]</sup>.

## History

Febelfin's specification states that the national standard "OGM-VCS" has been widely used for structured remittance information in Belgium "during decades" <sup>[1][1]</sup>. With the migration to SEPA, the Belgian banking community decided to keep it alive end-to-end: Febelfin's *Additional Optional Service 1 (AOS1)* document (final version 1.2, dated 27 July 2017) commits banks in Belgium to support "the continuity of this national standard 'OGM-VCS' from legacy payments to SEPA payments" for SEPA Credit Transfers (SCT), SEPA Instant Credit Transfers (SCT Inst) and SEPA Direct Debits (SDD) <sup>[1][1]</sup>. Dutch Wikipedia cites SEPAbelgium guidance from February 2013 on European transfer orders as its source for the format <sup>[6][6]</sup>.

In 2025 Febelfin published implementation guidelines (v1.0, dated 1 February 2025) for printing the EPC SEPA Credit Transfer QR code on invoices in Belgium, which require the structured communication in the QR's structured-reference field <sup>[2][2]</sup>.

## Technical specification

- **Electronic form:** exactly 12 digits, e.g. `010806817183` <sup>[1][1]</sup>.
- **Visual form:** `+++` 3 digits `/` 4 digits `/` 5 digits `+++`, e.g. `+++010/8068/17183+++` <sup>[1][1]</sup>. Three asterisks (`***`) are an accepted alternative delimiter to three plus signs <sup>[6][6]</sup><sup>[13][13]</sup>.
- **Data part:** the first 10 digits are free for the creditor to assign — typically a customer number or invoice number <sup>[6][6]</sup>.
- **Check digits:** the last 2 digits are the remainder of the first 10 digits (read as one integer) modulo 97; if the remainder is 0, the check digits are **97** <sup>[1][1]</sup><sup>[6][6]</sup>. Worked example from python-stdnum: `0108068171 mod 97 = 83`, giving `010806817183` <sup>[7][7]</sup>.
- **Validation:** banks in Belgium validate the check digits on interactive screen input; customers submitting bulk payments are "highly recommended" to validate them too; the clearing and settlement mechanism used by Belgian banks must support the AOS, and receiving banks must pass the reference to the beneficiary via (electronic) statements <sup>[1][1]</sup>.
- **ISO 20022 mapping:** carried in `RmtInf/Strd/CdtrRefInf` with `Tp/CdOrPrtry/Cd` = `SCOR` (StructuredCommunicationReference), `Tp/Issr` = `BBA` (The Belgian Bankers' and Stockbroking Firms' Association), and `Ref` = the 12 digits without delimiters <sup>[1][1]</sup>.

```xml
<CdtrRefInf>
  <Tp>
    <CdOrPrtry><Cd>SCOR</Cd></CdOrPrtry>
    <Issr>BBA</Issr>
  </Tp>
  <Ref>010806817183</Ref>
</CdtrRefInf>
```

- **In the EPC QR code:** [EPC QR / Stuzza](https://docs.barcoder.ai/docs/standards/epc-qr) (EPC069-12) offers either a structured remittance reference of up to 35 characters ("Creditor Reference (ISO 11649 RF Creditor Reference may be used)") or 140 characters of unstructured text, but not both <sup>[5][5]</sup>. Febelfin's Belgian guidelines replace that structured field's content with "Belgian Structured Communication in the format +++/123/1234/12345+++", and also specify Version 2 (BIC optional), a minimum size of 2 × 2 cm, and placement on the invoice rather than on the transfer form <sup>[2][2]</sup>.

## Use cases

- **Invoices:** the reference is generally pre-printed by the beneficiary, and appears in the communication box of the Belgian paper European transfer form <sup>[4][4]</sup>; it is the mandated structured reference for QR codes on Belgian invoices <sup>[2][2]</sup>.
- **SEPA direct debits and instant transfers:** supported end-to-end on SCT, SCT Inst and SDD <sup>[1][1]</sup>.
- **Pooled client accounts:** Bolero requires clients to put a *personal* structured communication on transfers to its shared client account; transfers without it cannot be processed automatically and are returned <sup>[16][16]</sup>.
- **ERP / accounting software:** Odoo's Belgian localisation generates references from the invoice ID or the partner's reference (e.g. partner reference "food buyer 654" → `+++000/0000/65472+++`) <sup>[11][11]</sup>; Dolibarr generates them from the invoice number, prefixing a two-digit invoice-type code (20 standard, 30 replacement, 40 credit note, 21 deposit) <sup>[12][12]</sup>.
- **Bank reporting:** receiving banks must return the reference to the beneficiary in electronic statements <sup>[1][1]</sup>; Febelfin publishes the CODA coded statement format and CAMT.053/054 guidelines used for that reporting <sup>[3][3]</sup>.

## Implementations

- **[python-stdnum](https://github.com/arthurdejong/python-stdnum)** — Python, ~599 stars, active 2026. Module `stdnum.be.ogm_vcs` (contributed by Cédric Krier, merged September 2025; shipped in release 2.2 on 4 January 2026) provides `validate`, `is_valid`, `compact`, `format` and `calc_check_digits` <sup>[7][7]</sup><sup>[8][8]</sup><sup>[10][10]</sup>.
- **[Odoo](https://github.com/odoo/odoo)** — Python, ~54.9k stars, active 2026. `l10n_be` computes `+++XXX/XXXX/XXXXX+++` references from invoice or partner IDs <sup>[11][11]</sup>.
- **[Dolibarr](https://github.com/Dolibarr/dolibarr)** — PHP, ~7.7k stars, active 2026. `dolBECalculateStructuredCommunication()` added October 2024, checksum fix August 2025 <sup>[12][12]</sup>.
- **[belgian-structured-communication](https://github.com/hapytex/belgian-structured-communication)** — Haskell (Hackage 0.2.0.0, January 2025) by Willem Van Onsem; parsers with optional checksum validation and a quasi-quoter, accepting `+` or `*` delimiters <sup>[13][13]</sup>.
- **[gestructureerde-mededeling](https://github.com/maartentibau/gestructureerde-mededeling)** — TypeScript/Angular generator, 6 stars, active 2026 <sup>[14][14]</sup>.
- **[Node-Belgian-VCS-OGM](https://github.com/stefanpante/Node-Belgian-VCS-OGM)** — JavaScript generation and validation, 8 stars, last commit 2015 <sup>[15][15]</sup>.

## Comparison

- **vs. [RF Creditor Reference (ISO 11649)](https://docs.barcoder.ai/docs/standards/rf-creditor-reference) (ISO 11649):** RF is an international, alphanumeric reference of at most 25 characters — `RF` + 2 check digits + up to 21 characters — introduced at the end of 2008 (SEPA rulebook 3.2) as "a standard that can be used instead of a country specific identifier" <sup>[9][9]</sup>. Both use modulo 97, but RF converts letters to numbers and checks the whole string, while OGM-VCS is purely numeric with a fixed 10+2 layout <sup>[1][1]</sup><sup>[9][9]</sup>. In ISO 20022, RF is marked with issuer `ISO`, OGM-VCS with code `SCOR` and issuer `BBA` <sup>[1][1]</sup><sup>[9][9]</sup>. The EPC QR guidelines cite RF as the example for the structured field <sup>[5][5]</sup>, but Febelfin requires the Belgian structured communication there for Belgian invoices <sup>[2][2]</sup>. Choose OGM-VCS for Belgian payers and Belgian bank reconciliation; RF where cross-border, alphanumeric references are needed.
- **vs. unstructured remittance text:** the EPC QR lets the payer receive either a structured reference or up to 140 characters of free text, not both <sup>[5][5]</sup>; the check digits are what allow Belgian banks to reject mistyped references at entry <sup>[1][1]</sup><sup>[6][6]</sup>.

## Fun facts

- Because a zero remainder is replaced by 97, the check digits can never be `00` <sup>[1][1]</sup>. Dutch Wikipedia notes the check-digit algorithm and digit count are the same as those of the classic 12-digit Belgian bank account number, which IBAN replaced in 2011 <sup>[6][6]</sup>.

## Status

**Active.** Febelfin currently lists the OGM-VCS AOS among its published banking standards <sup>[3][3]</sup>, its 2025 QR-on-invoice guidelines make it the structured reference in Belgian EPC QR codes (tied to EPC QR guidelines entering into force on 1 February 2026) <sup>[2][2]</sup>, and python-stdnum added support in January 2026 <sup>[8][8]</sup>. There is no announced successor; the international alternative is the RF creditor reference <sup>[9][9]</sup>.

## Sources

[1] [Additional Optional Service 1 (AOS1) applied in Belgium to SCT, SCT Inst and SDD — Structured Remittance Information "OGM-VCS"](https://febelfin.be/media/pages/publicaties/2023/febelfin-standaarden-voor-online-bankieren/c4626c3d5a-1738925080/febelfin-aos-ogmvcs_0.pdf) — Febelfin, v1.2 (2017), accessed 2026.
[2] [QR-code on invoice for credit transfer initiation — Implementation guidelines for printing on invoice](https://febelfin.be/media/pages/publicaties/2023/febelfin-standaarden-voor-online-bankieren/93f44d7850-1744012292/febelfin-ig-qroninvoice.pdf) — Febelfin, v1.0 (2025), accessed 2026.
[3] [Banking standards for internet banking for businesses](https://www.febelfin.be/en/banking-standards) — Febelfin, accessed 2026.
[4] [Tout sur le virement européen](https://febelfin.be/fr/publications/2022/tout-sur-le-virement-europeen) — Febelfin, 2022, accessed 2026.
[5] [EPC069-12 v3.0 Quick Response Code — Guidelines to Enable the Data Capture for the Initiation of a SEPA Credit Transfer](https://europeanpaymentscouncil.eu/sites/default/files/kb/file/2022-09/EPC069-12%20v3.0%20Quick%20Response%20Code%20-%20Guidelines%20to%20Enable%20the%20Data%20Capture%20for%20the%20Initiation%20of%20an%20SCT_0.pdf) — European Payments Council, 2022, accessed 2026.
[6] [Gestructureerde mededeling](https://nl.wikipedia.org/wiki/Gestructureerde_mededeling) — Wikipedia (nl), accessed 2026.
[7] [stdnum.be.ogm_vcs — Belgian OGM-VCS](https://arthurdejong.org/python-stdnum/doc/2.2/stdnum.be.ogm_vcs) — python-stdnum documentation, accessed 2026.
[8] [Release 2.2 of python-stdnum](https://lists.arthurdejong.org/python-stdnum-announce/2026/msg00000.html) — python-stdnum-announce, 2026, accessed 2026.
[9] [RF Creditor Reference](https://knowledge.xmldation.com/rf-creditor-reference) — XMLdation, accessed 2026.
[10] [arthurdejong/python-stdnum](https://github.com/arthurdejong/python-stdnum) — GitHub, accessed 2026.
[11] [odoo/odoo — addons/l10n_be/models/account_move.py](https://github.com/odoo/odoo/blob/20.0/addons/l10n_be/models/account_move.py) — GitHub, accessed 2026.
[12] [Dolibarr/dolibarr — htdocs/core/lib/functions_be.lib.php](https://github.com/Dolibarr/dolibarr/blob/develop/htdocs/core/lib/functions_be.lib.php) — GitHub, accessed 2026.
[13] [belgian-structured-communication](https://hackage.haskell.org/package/belgian-structured-communication) — Hackage, accessed 2026.
[14] [maartentibau/gestructureerde-mededeling](https://github.com/maartentibau/gestructureerde-mededeling) — GitHub, accessed 2026.
[15] [stefanpante/Node-Belgian-VCS-OGM](https://github.com/stefanpante/Node-Belgian-VCS-OGM) — GitHub, accessed 2026.
[16] [Communication structurée personnelle?](https://www.bolero.be/fr/support/questions-frequemment-posees/communication-structuree-personnelle) — Bolero, accessed 2026.

[1]: https://febelfin.be/media/pages/publicaties/2023/febelfin-standaarden-voor-online-bankieren/c4626c3d5a-1738925080/febelfin-aos-ogmvcs_0.pdf
[2]: https://febelfin.be/media/pages/publicaties/2023/febelfin-standaarden-voor-online-bankieren/93f44d7850-1744012292/febelfin-ig-qroninvoice.pdf
[3]: https://www.febelfin.be/en/banking-standards
[4]: https://febelfin.be/fr/publications/2022/tout-sur-le-virement-europeen
[5]: https://europeanpaymentscouncil.eu/sites/default/files/kb/file/2022-09/EPC069-12%20v3.0%20Quick%20Response%20Code%20-%20Guidelines%20to%20Enable%20the%20Data%20Capture%20for%20the%20Initiation%20of%20an%20SCT_0.pdf
[6]: https://nl.wikipedia.org/wiki/Gestructureerde_mededeling
[7]: https://arthurdejong.org/python-stdnum/doc/2.2/stdnum.be.ogm_vcs
[8]: https://lists.arthurdejong.org/python-stdnum-announce/2026/msg00000.html
[9]: https://knowledge.xmldation.com/rf-creditor-reference
[10]: https://github.com/arthurdejong/python-stdnum
[11]: https://github.com/odoo/odoo/blob/20.0/addons/l10n_be/models/account_move.py
[12]: https://github.com/Dolibarr/dolibarr/blob/develop/htdocs/core/lib/functions_be.lib.php
[13]: https://hackage.haskell.org/package/belgian-structured-communication
[14]: https://github.com/maartentibau/gestructureerde-mededeling
[15]: https://github.com/stefanpante/Node-Belgian-VCS-OGM
[16]: https://www.bolero.be/fr/support/questions-frequemment-posees/communication-structuree-personnelle

## Deployments

Found in the following country reports (grep across `reports/countries/`):

- **BE** — [BE-belgium.md](https://docs.barcoder.ai/docs/payments/BE)
