France — Chorus Pro: the historical B2G platform
Chorus Pro is the single state-run platform receiving B2G invoices in France, operated by AIFE since 2017. It today processes over 124 million invoices per year for 73,000 public entities.
History: 2017-2026
Chorus Pro is the heir of the Chorus project launched in 2009 to modernise the French State's financial chain (an SAP-ECC-equivalent for public accounting). The electronic invoicing component Chorus Pro started in 2017 according to a progressive schedule mandated by ordinance 2014-697:
- 1 January 2017: large enterprises (> 5,000 employees) invoicing the State. ~50,000 suppliers affected.
- 1 January 2018: mid-caps (250 to 5,000 employees). ~300,000 suppliers.
- 1 January 2019: SMEs (10 to 250 employees). ~1.5M suppliers.
- 1 January 2020: micro-businesses and self-employed. Universal B2G, ~6M suppliers total.
- 2023-2024: major technical overhaul with sunset of legacy EDIFACT INVOIC connectors (still accepted but to be phased out), move to CPP 2.x format.
- September 2026: functional switch to PPF — Chorus Pro is officially the French PPF for B2G flows (B2B flows go through private PDPs).
Scope and public entities
Public entities connected to Chorus Pro fall under eight major legal families:
| Family | Examples | 2024 volume |
|---|---|---|
| Central State | Ministries, deconcentrated services (DREAL, DRAC, etc.) | ~15,000 entities |
| Local authorities | Regions, departments, municipalities, EPCI | ~37,000 entities |
| National public bodies | Universities, EPA (CNRS, INRAE), agencies (ARS, Pôle emploi) | ~1,500 entities |
| Local public bodies | State-managed high schools and middle schools, CCAS | ~10,000 entities |
| Healthcare establishments | CHU, CH, public EHPAD | ~1,800 entities |
| Industrial public bodies (EPIC) | SNCF Réseau, RATP, Banque de France | ~50 entities |
| GIP (public-interest groupings) | GIP-RECIA, GIP-ARS | ~250 entities |
| Independent administrative authorities | CSA/ARCOM, ACPR, AMF, HATVP | ~30 entities |
Accepted formats and the CPP pivot
Chorus Pro accepts five input formats, listed by the order of 9 December 2016 and its subsequent amendments:
- CPP XML (Chorus Pro Pivot) — historical pivot format, AIFE-proprietary schema. Recommended for vendors with native Chorus Pro integration since it carries all B2G fields (legal commitment, service code, contract type).
- Factur-X — recommended for combined human/structured readability. See our Factur-X FNFE-MPE page.
- UBL 2.1 — PEPPOL BIS Billing 3.0 European syntax, EN 16931 conformant.
- UN/CEFACT CII 16B — pure XML Cross Industry Invoice.
- EDIFACT INVOIC D96A/D01B — legacy, still accepted but being phased out. See our INVOIC D96A page.
Whatever the input format, Chorus Pro systematically converts to the CPP pivot internally to distribute to the destination public entity's accounting system. Minimal CPP pivot example:
<?xml version="1.0" encoding="UTF-8"?>
<CPP xmlns="http://aife.economie.gouv.fr/chorus-pro/cpp/1.0">
<EnTete>
<NumeroFacture>F-2026-09142</NumeroFacture>
<DateFacturation>2026-09-15</DateFacturation>
<CodeDevise>EUR</CodeDevise>
<NumeroEngagementJuridique>EJ-2026-00876543</NumeroEngagementJuridique>
<NumeroBonDeCommande>BC-2026-00141</NumeroBonDeCommande>
<CodeService>CS-EDU-COMPTA-001</CodeService>
</EnTete>
<Cadre>
<IdentifiantStructure>11000201100044</IdentifiantStructure>
<TypeIdentifiant>SIRET</TypeIdentifiant>
<RaisonSociale>Ministere de l'Education nationale</RaisonSociale>
</Cadre>
<Fournisseur>
<IdentifiantStructure>80214579500024</IdentifiantStructure>
<TypeIdentifiant>SIRET</TypeIdentifiant>
<RaisonSociale>Atelier Numerique SAS</RaisonSociale>
</Fournisseur>
<Totaux>
<MontantHTTotal>10000.00</MontantHTTotal>
<MontantTVATotal>2000.00</MontantTVATotal>
<MontantTTCTotal>12000.00</MontantTTCTotal>
<MontantAPayer>12000.00</MontantAPayer>
</Totaux>
</CPP> B2G lifecycle: the 10 statuses
Decree 2016-1478 mandates tracking the invoice lifecycle with ten standardised statuses:
- SUBMITTED: invoice deposited on Chorus Pro (web, API, EDI).
- MADE_AVAILABLE: invoice made available to the destination public entity.
- ACKNOWLEDGED: the accounting officer or authoriser opened the invoice.
- SERVICE_COMPLETED: certification that the service/good was delivered (post-control).
- APPROVED: hierarchical validation (budget controller).
- PAYMENT_ORDERED: pay order forwarded to DGFiP via Chorus Cœur (spend chain).
- RECOVERY_ORDERED: the accounting post created the payment warrant.
- PAID: SEPA SCT transfer executed to the supplier.
- SUSPENDED: exceptional suspension (business dispute, request for supporting document).
- REJECTED: motivated rejection (decree 2016-1478 article 31, standardised reason code).
Example of a real timeline for an operating invoice deposited on 15 September, paid on 5 October (contractual 30-day payment delay met):
# Typical B2G invoice lifecycle on Chorus Pro
1. SUBMITTED [2026-09-15 09:30] issued by supplier, received by CPP
2. MADE_AVAILABLE [2026-09-15 09:32] visible to the destination public entity
3. ACKNOWLEDGED [2026-09-16 10:14] accounting officer opened it
4. SERVICE_COMPLETED [2026-09-22 14:48] service-completion certification (post-control)
5. APPROVED [2026-09-25 11:22] hierarchical validation (budget controller)
6. PAYMENT_ORDERED [2026-10-03 08:00] pay order forwarded to DGFiP
7. RECOVERY_ORDERED [2026-10-03 08:01] accounting post created the payment warrant
8. PAID [2026-10-05 15:30] SEPA SCT transfer executed
# 9. SUSPENDED [---] exceptional suspension (dispute)
# 10. REJECTED [---] motivated rejection (decree 2016-1478 art. 31) Special cases: public procurement, operating, investment
Three business cases require additional fields:
- Public procurement contracts — require the
MAFAB identifier (market-buyer-supplier-year-bank) for
purchase-order-based contracts, and the full contract number
for standard contracts. Field carried in
cbc:ContractDocumentReference/cbc:IDin UBL orNumeroMarchein CPP. - Operating invoices — the highest-volume flow (~80% of Chorus Pro traffic). Typically: rents, energy, office supplies, services. Standard lifecycle.
- Investment invoices — go through investment
accounting (account 20-23). Require a
TypeOperation = INVESTISSEMENTfield on the CPP side, and a multi-level validation cycle (authoriser + financial controller + receiver in local authorities).
Migration to PPF in 2026
The 2026 target architecture makes Chorus Pro the de-facto PPF for B2G flows. In practice:
- No mandatory migration: suppliers currently connected to Chorus Pro keep using the platform. B2G flows do not move to private PDPs.
- Chorus Pro acts as the receiving PDP for public
entities: in the central PPF directory (see
Central directory page),
SIRETs of public entities point to
PDP-ID = CPP-AIFE. Private issuing PDPs transmit to Chorus Pro via PEPPOL AS4. - Format convergence: new B2G flows post-2026 should favour Factur-X/UBL over the legacy CPP format. The CPP pivot remains accepted for existing vendors but no longer evolves (functional freeze).
- Shared directory: the public-entity directory (SIRET + Service Code) is still operated by AIFE and surfaced via the central PPF directory API.
Cross-links
- France — Mandate overview 2026/2027.
- France — Factur-X FNFE-MPE specification.
- France — CTC 5-corner model — articulation with PPF.
- France — PPF central directory — B2G service code resolution.
- Standards — EDIFACT INVOIC D96A — legacy format still accepted.
- Standards — PEPPOL — AS4 transport to Chorus Pro.
- Sources: AIFE — Chorus Pro documentation, Decree 2016-1478 of 2 November 2016, Order of 9 December 2016 (accepted formats), Ordinance 2014-697 of 26 June 2014, Chorus Pro portal.