Skip to main content

France ๐Ÿ‡ซ๐Ÿ‡ท

Chorus Pro integration and upcoming B2B mandate for France.

Overviewโ€‹

AspectDetails
B2G MandateRequired since 2020 (via Chorus Pro)
B2B Mandate2026-2027 (phased)
CIUSFactur-X (EN16931 hybrid PDF/XML)
Primary Scheme0009 (SIRET)
Government PortalChorus Pro
Major B2B Mandate Coming

France is implementing mandatory B2B e-invoicing:

  • September 2026: Large enterprises
  • September 2027: SMEs and micro-enterprises

All B2B invoices must go through certified platforms (PDP).

Identifier Schemesโ€‹

SIRET (0009) โ€” Standardโ€‹

The 14-digit establishment identifier:

# Format: 14 digits (SIREN + NIC)
participant = {
"scheme": "0009",
"identifier": "12345678901234",
"name": "Exemple SARL",
"country": "FR"
}

Structure:

  • First 9 digits: SIREN (company ID)
  • Last 5 digits: NIC (establishment code)

Validation:

def validate_siret(siret: str) -> bool:
"""Validate French SIRET using Luhn algorithm."""
if len(siret) != 14 or not siret.isdigit():
return False

total = 0
for i, digit in enumerate(siret):
d = int(digit)
if i % 2 == 0:
d *= 2
if d > 9:
d -= 9
total += d
return total % 10 == 0

SIREN (0002)โ€‹

The 9-digit company identifier (less common):

participant = {
"scheme": "0002",
"identifier": "123456789",
"name": "Exemple SA",
"country": "FR"
}

VAT Number (9957)โ€‹

For cross-border B2B:

# Format: FR + 2 digits + 9 digits (SIREN)
participant = {
"scheme": "9957",
"identifier": "FR12123456789",
"name": "Exemple SAS",
"country": "FR"
}

Chorus Pro (B2G)โ€‹

Overviewโ€‹

All B2G invoices must go through Chorus Pro:

Supplier โ†’ GoRoute (Peppol) โ†’ AIFE/Chorus Pro โ†’ Government Entity

Chorus Pro Integrationโ€‹

GoRoute connects to Chorus Pro via Peppol for seamless delivery:

# Send to French government
response = requests.post(
"https://app.goroute.ai/peppol-api/api/v1/send",
headers={"X-API-Key": "your_api_key"},
json={
"sender": {
"scheme": "0009",
"identifier": "12345678901234"
},
"receiver": {
"scheme": "0009",
"identifier": "13002526500013" # Example ministry
},
"document": base64_encoded_invoice
}
)

Required Fields for Chorus Proโ€‹

<Invoice>
<!-- Service code (Code Service) - often required -->
<cbc:BuyerReference>CODE_SERVICE_12345</cbc:BuyerReference>

<!-- Engagement juridique (Commitment number) -->
<cac:OrderReference>
<cbc:ID>EJ-2024-00123</cbc:ID>
</cac:OrderReference>

<!-- SIRET of sender -->
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0009">12345678901234</cbc:EndpointID>
</cac:Party>
</cac:AccountingSupplierParty>

<!-- SIRET of government receiver -->
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0009">13002526500013</cbc:EndpointID>
</cac:Party>
</cac:AccountingCustomerParty>
</Invoice>

Service Codesโ€‹

Many French public entities require a "Code Service":

<cbc:BuyerReference>SERVICE_COMPTABILITE</cbc:BuyerReference>

Look up valid codes in the Annuaire Chorus Pro.

Factur-X Formatโ€‹

Factur-X is France's hybrid e-invoice format (PDF + embedded XML):

Profilesโ€‹

ProfileUse Case
MinimumBasic PDF, minimal data
Basic WLSimple invoices
BasicStandard B2B
EN16931Full EN16931 compliance
ExtendedMaximum data

GoRoute Factur-X Supportโ€‹

# Send Factur-X PDF with embedded XML
response = requests.post(
"https://app.goroute.ai/peppol-api/api/v1/send",
headers={"X-API-Key": "your_api_key"},
json={
"format": "factur-x",
"profile": "EN16931",
"sender": {...},
"receiver": {...},
"document": base64_facturx_pdf
}
)

VAT Requirementsโ€‹

French VAT Formatโ€‹

# French VAT: FR + 2 key digits + 9-digit SIREN
def validate_french_vat(vat: str) -> bool:
if not vat.startswith("FR"):
return False
if len(vat) != 13:
return False
key = vat[2:4]
siren = vat[4:]
if not siren.isdigit():
return False
return True

VAT Ratesโ€‹

CodeRateDescription
S20%Standard rate
AA10%Intermediate reduced
H5.5%Reduced (essential goods)
I2.1%Super-reduced
Z0%Zero rate
E0%Exempt

Example Invoiceโ€‹

<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">

<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>

<cbc:ID>FR-FACT-2024-00123</cbc:ID>
<cbc:IssueDate>2024-01-15</cbc:IssueDate>
<cbc:DueDate>2024-02-15</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>

<!-- Code Service for Chorus Pro -->
<cbc:BuyerReference>CODE_SERVICE_COMPTABILITE</cbc:BuyerReference>

<!-- French Seller -->
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0009">12345678901234</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Exemple SARL</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>123 Rue de la Rรฉpublique</cbc:StreetName>
<cbc:CityName>Paris</cbc:CityName>
<cbc:PostalZone>75001</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>FR</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>FR12123456789</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Exemple SARL</cbc:RegistrationName>
<cbc:CompanyID schemeID="0009">12345678901234</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>

<!-- French Government Buyer -->
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0009">13002526500013</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Ministรจre de l'ร‰conomie</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>139 Rue de Bercy</cbc:StreetName>
<cbc:CityName>Paris</cbc:CityName>
<cbc:PostalZone>75012</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>FR</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Ministรจre de l'ร‰conomie</cbc:RegistrationName>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingCustomerParty>

<cac:PaymentMeans>
<cbc:PaymentMeansCode>30</cbc:PaymentMeansCode>
<cac:PayeeFinancialAccount>
<cbc:ID>FR7630004000031234567890143</cbc:ID>
<cbc:Name>Exemple SARL</cbc:Name>
</cac:PayeeFinancialAccount>
</cac:PaymentMeans>

<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">20.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">100.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">20.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>

<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">100.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">120.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="EUR">120.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>

<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="HUR">10</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Services de conseil</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">10.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
</Invoice>

B2B Mandate Preparationโ€‹

Certified Platforms (PDP)โ€‹

Starting 2026, B2B invoices must go through:

  • Portail Public de Facturation (PPF) - Government platform
  • Plateformes de Dรฉmatรฉrialisation Partenaires (PDP) - Certified providers

GoRoute is positioned to integrate with these platforms.

Reporting Requirementsโ€‹

New e-reporting obligations:

  • E-invoicing: B2B domestic invoices
  • E-reporting: International B2B + B2C summary

Timelineโ€‹

DateRequirement
Sept 2026Large enterprises must send/receive
Sept 2027All businesses must send/receive

Resourcesโ€‹

Next Stepsโ€‹