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.

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 StateMinistries, deconcentrated services (DREAL, DRAC, etc.)~15,000 entities
Local authoritiesRegions, departments, municipalities, EPCI~37,000 entities
National public bodiesUniversities, EPA (CNRS, INRAE), agencies (ARS, Pôle emploi)~1,500 entities
Local public bodiesState-managed high schools and middle schools, CCAS~10,000 entities
Healthcare establishmentsCHU, 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 authoritiesCSA/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:

  1. 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).
  2. Factur-X — recommended for combined human/structured readability. See our Factur-X FNFE-MPE page.
  3. UBL 2.1 — PEPPOL BIS Billing 3.0 European syntax, EN 16931 conformant.
  4. UN/CEFACT CII 16B — pure XML Cross Industry Invoice.
  5. 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 chorus-pro-cpp.xml
<?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:

  1. SUBMITTED: invoice deposited on Chorus Pro (web, API, EDI).
  2. MADE_AVAILABLE: invoice made available to the destination public entity.
  3. ACKNOWLEDGED: the accounting officer or authoriser opened the invoice.
  4. SERVICE_COMPLETED: certification that the service/good was delivered (post-control).
  5. APPROVED: hierarchical validation (budget controller).
  6. PAYMENT_ORDERED: pay order forwarded to DGFiP via Chorus Cœur (spend chain).
  7. RECOVERY_ORDERED: the accounting post created the payment warrant.
  8. PAID: SEPA SCT transfer executed to the supplier.
  9. SUSPENDED: exceptional suspension (business dispute, request for supporting document).
  10. 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):

text lifecycle-timeline.txt
# 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:ID in UBL or NumeroMarche in 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 = INVESTISSEMENT field 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:

  1. No mandatory migration: suppliers currently connected to Chorus Pro keep using the platform. B2G flows do not move to private PDPs.
  2. 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.
  3. 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).
  4. Shared directory: the public-entity directory (SIRET + Service Code) is still operated by AIFE and surfaced via the central PPF directory API.