Lumara
Advisory · France · 2026
Implementation Workbook

France PPF
e-Invoicing

The complete implementation guide for finance, tax, IT and ERP teams — built for the people who actually have to make this work.

10
Chapters
11
UAT Scenarios
16
RACI Items
12
RFP Criteria
Legal framework PA RFP scorecard ERP integration RACI matrix e-Reporting scope tool 90-day action plan
🇫🇷 AP AR Tax ✓ €111 ✓
What's inside
01
Executive Overview
CFO brief · Maturity model · Failure patterns
02
Legal Framework
Mandatory fields · Lifecycle statuses · Timeline
03
PA Architecture & Selection
Weighted RFP scorecard · Annuaire registration
04
Invoice Formats
Factur-X · UBL · CII · Annotated XML
05
ERP Integration
SAP · Oracle · D365 · UAT protocol
06
Accounting Systems
QuickBooks · Sage · NetSuite · API example
07
Master Data
SIRET audit · INSEE validation · Governance
08
Tax & e-Reporting
Scope tool · Frequencies · Foreign entities
09
Admin & Governance
RACI matrix · Supplier template · Calendar
10
90-Day Action Plan
3 phases · Interactive checklist · Go-live
Disclaimer

For informational and educational purposes only. Does not constitute legal or tax advice. Lumara Advisory accepts no liability for decisions or actions taken based on its contents. Always verify requirements at impots.gouv.fr before taking action.

© 2026 Lumara Advisory · lumara-consulting.com

01 · Overview
02 · Legal Framework
03 · PA Architecture
04 · Invoice Formats
05 · ERP Integration
06 · Accounting Systems
07 · Master Data
08 · Tax & e-Reporting
09 · Admin & Governance
10 · Action Plan
Chapter 01 · Start Here

Executive Overview — France PPF 2026

The operational guide for finance, tax, IT and ERP teams delivering France PPF compliance. Structured for practitioners — not introductory reading.

Effective: 1 September 2026 (GE & ETI) Authority: DGFiP Legal basis: Article 153, Loi de Finances 2020 · Décret n°2022-1299
For the CFO — one page
What this is

From 1 September 2026, every domestic B2B invoice involving a French-established entity must flow through a government-certified Plateforme Agréée in structured XML format. PDF invoices by email are no longer legally valid. The mandate is confirmed — the National Assembly rejected a postponement in April 2025.

Financial exposure

€15 per non-compliant invoice, capped at €15,000/year. €250 per missing e-report, same cap. DGFiP Director confirmed no automatic day-one penalties for good-faith efforts — but the legal obligation and audit risk begin 1 September 2026.

Decision required

Select and contract a certified PA. Assign a PPF compliance owner. Approve ERP integration budget. All require CFO or board authorisation.

Typical timeline

12–20 weeks for complex ERP environments. 6–10 weeks for simpler setups. Companies starting in Q3 2026 are on a very compressed schedule.

What fails most

Master data (SIRET gaps). Lifecycle status management. PA selected without ERP compatibility verified. Budget approved too late to test properly.

Compliance maturity model

Calibrate your current state honestly before working through this workbook. Most organisations engaging for the first time are at Level 2.

1
Unaware
No project, no owner, no PA shortlist, PDF invoicing still planned
2
Aware
Project acknowledged, owner named, PA evaluation started, SIRET unknown
3
In Progress
PA contracted, ERP integration underway, SIRET audit in progress
4
Testing
PA integrated, end-to-end testing underway, status management configured
5
Compliant
All invoice types tested, PA live, e-reporting running, monthly review in place
LEVELS 1–2
Non-compliance risk from Sep 2026
LEVEL 3
Timeline risk — testing not yet started
LEVEL 4
On track — edge cases remain
LEVEL 5
Enforcement-ready
What goes wrong — lessons from implementation
Failure 1 — PA selected before ERP compatibility was verified▾

The most frequent and costly error. A PA was selected based on commercial relationships. Integration revealed the connector was certified for S/4HANA, not ECC 6.0. Added 8–12 weeks to the timeline. Mitigation: require written confirmation of ERP version compatibility before shortlisting any PA.

Failure 2 — Payments team excluded from the project▾

Lifecycle status obligation — Paiement transmis and Paiement reçu — requires a data flow from treasury back through the PA. Discovered 6 weeks before go-live. For TVA sur encaissements entities, created direct VAT compliance risk. Mitigation: payments team must be in the project from week one.

Failure 3 — SIRET data quality assumed, not verified▾

Team assumed clean SIRET data from onboarding. Audit revealed 28% of French customer records had missing or invalid SIRETs. Data collection took 6 weeks. Mitigation: run the SIRET completeness audit in week one, not month three.

Failure 4 — E-reporting treated as post-go-live▾

Project scope defined as "e-invoicing." E-reporting was TBD. The B2C reporting pipeline was not built until after e-invoicing go-live. Mitigation: e-reporting must be in scope from project initiation with its own workstream and owner.

Failure 5 — Testing limited to standard invoices only▾

UAT covered the standard invoice and passed. Production revealed failures on credit notes, advance payment invoices, and zero-rated invoices. First month spent in exception management. Mitigation: UAT must cover every invoice type in your transaction profile.

Failure 6 — No compliance owner after go-live▾

Project team disbanded after go-live. A DGFiP query arrived 8 weeks later with a 10-day response window. Response was late. Mitigation: appoint a named PPF compliance owner before go-live with formal ongoing responsibilities documented.

Who is affected and from when
Company typeMust receiveMust issueE-reporting
Large enterprises (GE) — ≥5,000 employees or >€1.5B turnover1 Sep 20261 Sep 20261 Sep 2026
Mid-size enterprises (ETI) — 250–5,000 employees or €50M–€1.5B1 Sep 20261 Sep 20261 Sep 2026
SMEs & micro-enterprises — <250 employees or <€50M1 Sep 20261 Sep 20271 Sep 2027
Foreign companies — French VAT only — no establishmentNot requiredNot required1 Sep 2027
The receiving obligation — most misunderstood point

Every company must receive structured e-invoices from 1 September 2026 — regardless of size or issuance deadline. A 15-person SME whose issuance deadline is September 2027 must still receive and process structured invoices from large suppliers from September 2026. This requires PA registration, Annuaire listing, and AP system configuration — all before September 2026.

The five-corner model

France uses a decentralised architecture. Every invoice passes through certified Plateformes Agréées at each end, with the PPF as the central directory and DGFiP data concentrator. Click each node to learn more.

Supplier ERP
Generates invoice
→
Supplier PA
Validates + routes
→
PPF
Directory + hub
→
Buyer PA
Delivers + statuses
→
Buyer ERP
Processes + statuses

Click any node to learn more

Click on any step above to see what happens at that stage of the invoice journey.

Your notes — Chapter 1
Chapter 02 · Legal & Technical Foundation

Legal Framework — What the Law Actually Requires

France's mandate is grounded in Article 153 of the Loi de Finances 2020, refined through Décret n°2022-1299, AFNOR XP Z12-014 (May 2025), and DGFiP External Specification v3.1. This chapter covers what the law requires — not what vendors say it requires.

Legal basis: Article 153 LFI 2020 · Décret n°2022-1299Technical spec: AFNOR XP Z12-014 · PPF External Spec v3.1
Definitive timeline
DateEventImpact
2020Article 153, Loi de Finances 2020Legal mandate created
Oct 2024PPF scope reduced — no longer transmits invoicesAll invoices must go via PA. PPF = Annuaire + concentrator only.
Apr 2025National Assembly rejects postponement1 September 2026 confirmed definitively
May 2025AFNOR XP Z12-014 publishedMinimum technical standard for formats, profiles, statuses, business rules
Jul 2025PDP officially renamed PA (Plateforme Agréée)Terminology change only — same function
1 Sep 2026Phase 1 mandatory startAll companies must receive. Large & ETI must issue.
1 Sep 2027Phase 2 — SMEs and micro-enterprisesAll companies must issue e-invoices
Mandatory invoice fields
Seller and buyer identification▾

Seller SIRET — 14-digit establishment identifier. Not the SIREN (9 digits). Buyer SIRET — same requirement, registered in the PPF Annuaire. Seller VAT number — FR + 11 digits, active and valid at invoice date. Buyer VAT number — EU VAT number for intra-EU transactions. Legal names and addresses — as registered with the Registre du Commerce.

Invoice identification and classification▾

Invoice number — sequential, unique per series. Invoice type code — 380 (standard), 381 (credit note), 384 (corrected), 386 (prepayment), 389 (self-billing). Invoice date — ISO 8601 (YYYY-MM-DD). Currency code — ISO 4217. Transaction category — domestic B2B, intra-EU supply, export, self-billing, or other DGFiP flags.

Tax and VAT information▾

VAT rate per line — 20%, 10%, 5.5%, 2.1%, or 0% per line. VAT amount per rate — total VAT for each rate applied. Total excl. VAT, total VAT, total incl. VAT. VAT exemption reason — if zero-rated or exempt, the legal basis must be stated (e.g. Article 293B).

Payment information▾

Payment terms — due date and conditions. Maximum 60 days under LME. Payment method code — virement, prélèvement, chèque, carte etc. Bank account IBAN and BIC — required for bank transfer invoices. Late payment interest rate and €40 recovery fee — mandatory legal mention on every B2B invoice, required in structured data from September 2026.

Line item details▾

Description of goods or services — specific enough to identify the supply. Quantity and unit of measure. Unit price excl. VAT. Discounts and allowances — per line.

Invoice lifecycle statuses — mandatory
StatusMeaningSent byTimeframe
DéposéeInvoice deposited on supplier PASupplier PAAutomatic on submission
EnvoyéeTransmitted to buyer PASupplier PAAutomatic on routing
Mise à dispositionAvailable to buyerBuyer PAAutomatic on receipt
RejetéeRejected — format/content errorBuyer via PAOn decision
RefuséeRefused — commercial disputeBuyer via PAOn decision
ApprouvéeApproved for paymentBuyer via PAOn approval
Paiement transmisPayment initiatedBuyer via PAOn payment run
Paiement reçuPayment confirmed receivedSupplier via PAOn bank confirmation
ComptabiliséePosted in buyer accountsBuyer via PAOn ERP posting
Why status management matters for Tax

The DGFiP uses lifecycle statuses to validate VAT declarations — particularly payment statuses for companies on TVA sur les encaissements. Failure to send payment statuses creates discrepancies between DGFiP data and your VAT filings. This is a direct audit risk, not an operational nicety.

Your notes — Chapter 2
Chapter 03 · Platform Selection

PA Architecture — Choosing and Connecting Your Platform

Every company subject to the mandate must use a certified Plateforme Agréée. This chapter covers what a PA must do, how to evaluate one using a weighted scorecard, and how to complete Annuaire registration.

Approved PAs: 100+ provisionally or fully approved as of mid-2026Official list: impots.gouv.fr/portail/node/11929
What a certified PA must do
Invoice validation and format conversion▾

The PA must validate incoming invoices against the XSD schema (structural), Schematron business rules (BR-FR from AFNOR spec), and DGFiP G1/G6 validation rules. It must convert between accepted formats — Factur-X, UBL 2.1, and CII — on behalf of the sender or receiver.

Routing via the PPF Annuaire▾

The PA must look up the buyer's registered PA in the PPF Annuaire using the buyer's SIRET, then route the invoice to that PA. If buyer and seller are on different PAs, the two PAs must interoperate — a requirement enforced through the PPF interoperability framework.

Lifecycle status management▾

The PA must transmit all mandatory lifecycle statuses between buyer and seller PAs, and report relevant statuses to the DGFiP via the PPF concentrator — including both invoice statuses and payment statuses used by the DGFiP for VAT validation.

E-reporting transmission to DGFiP▾

For transactions not covered by e-invoicing (B2C, exports, cross-border services), the PA must transmit e-reporting data to the DGFiP via the PPF within the required timeframe. This is a separate obligation from e-invoicing and requires a separate data flow from your ERP to the PA.

Archiving and integrity▾

The PA must ensure integrity and traceability of all invoices — no alteration after transmission is possible. Many PAs offer 10-year certified archiving as an additional service. Confirm what is included in your contract and verify the retrieval SLA for tax audit scenarios.

PA selection — weighted RFP scorecard

Score each criterion 1–5 and multiply by the weight. A total above 300 indicates a strong candidate. Require all PAs to respond in writing.

CriterionWeightWhat to verifyScore (1–5)Weighted
DGFiP certification status×5Full certification (not provisional). Confirm on official DGFiP list. Ask for certificate number.______
ERP version compatibility×5Written confirmation for your exact ERP version — not "we support SAP."______
Format support×4Native Factur-X, UBL 2.1, and CII. Current schema version. Conversion capability.______
Lifecycle status management×4All 9 statuses including payment. API for buyer AP integration. Tested in sandbox.______
E-reporting capability×4Contract explicitly covers e-reporting. B2C aggregated, cross-border, payment data confirmed.______
Multi-country support×3Poland KSeF, Belgium PEPPOL, Germany — single platform vs multiple vendors.______
Network reach×3How many of your top 50 French suppliers are already on their network?______
Sandbox environment×3Full sandbox available before contract? Matches production behaviour?______
Archiving SLA×310-year compliant archiving. Retrieval SLA for tax audit. Accessible after leaving PA?______
Support SLA×3Response time for P1 production failure. Named account manager.______
Pricing transparency×2Per-invoice, per-entity, or flat fee at your exact volume. Annual increase caps.______
Financial stability×2Audited accounts. PA certification is non-transferable — PA failure means migration.______
Maximum score: 410 · Selection threshold: 300+

Criteria marked ×4 or ×5 are non-negotiable. A PA scoring below 3 on any ×5 criterion should be eliminated regardless of total score. Commercial relationships do not override technical fit.

PPF Annuaire registration — step by step
1

Confirm SIRET for each French entity

The SIRET is a 14-digit number — 9-digit SIREN + 5-digit NIC. Confirm each entity's SIRET at sirene.insee.fr before registration.

2

Select and contract your PA first

Registration links your SIRET to your PA's routing information. You must have a contracted PA before you can register in the Annuaire.

3

Register via the PPF portal

Access portail-facturation.dgfip.finances.gouv.fr. Required: SIRET, legal entity name, address, PA identifier, and e-invoicing routing addresses (both provided by your PA).

4

Confirm routing with your PA

Your PA provides specific routing identifiers to enter in the Annuaire. Verify these are correct — incorrect routing causes 100% of invoices to fail.

5

Test with a live counterparty

Once registered, test with at least one supplier in the voluntary pilot. Verify that an invoice from their PA reaches your PA correctly and appears in your AP system.

Your notes — Chapter 3
Chapter 04 · Technical Format

Invoice Formats — Factur-X, UBL, and CII

Three structured formats are accepted under the French mandate. All must conform to EN 16931 and the French socle minimal in AFNOR XP Z12-014. This chapter provides a complete, fully annotated example of each format using the same invoice — €5,000 excl. VAT at 20% — so you can compare field by field.

Format comparison
FormatTypeBest forERP supportHuman readable?
Factur-XHybrid — PDF/A-3 + embedded XML (CII syntax)Companies transitioning from PDF. Readable in any PDF viewer.SAP (add-on), Oracle (add-on), Chorus ProYes — PDF layer
UBL 2.1Pure XML — OASIS standardMulti-country: PEPPOL, Belgium, Netherlands, Spain. Pan-European default.SAP, Oracle, D365, NetSuite — nativeMachine only
UN/CEFACT CIIPure XML — UN standard (same syntax as Factur-X XML)German entities (XRechnung). SAP-native output. Cross-industry.SAP native, Oracle, some ERPs defaultMachine only
The same invoice in all three formats

All three examples below represent the same transaction: Acme France SAS (seller, SIRET 12345678912345) invoices Client SARL (buyer, SIRET 98765432198765) for consulting services — €5,000.00 excl. VAT, 20% VAT = €1,000.00, total €6,000.00. Invoice number INV-2026-00142, dated 1 September 2026, due 30 days.

Format 1 — Factur-X (CII XML embedded in PDF/A-3)

Factur-X embeds a CII XML file named factur-x.xml inside a PDF/A-3 container. The PDF is the human-readable version; the XML is the machine-readable structured data. Both are legally equivalent. The XML below is the embedded file — it uses UN/CEFACT Cross Industry Invoice (CII) syntax with Factur-X namespaces.

factur-x.xml — complete annotated example (EN16931 profile)

<?xml version="1.0" encoding="UTF-8"?>
<rsm:CrossIndustryInvoice
  xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
  xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
  xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">

  <!-- ① PROFILE — tells the PA which EN16931 profile to validate against -->
  <rsm:ExchangedDocumentContext>
    <ram:GuidelineSpecifiedDocumentContextParameter>
      <ram:ID>urn:factur-x.eu:1p0:en16931</ram:ID>
    </ram:GuidelineSpecifiedDocumentContextParameter>
  </rsm:ExchangedDocumentContext>

  <!-- ② INVOICE HEADER — number, type, date -->
  <rsm:ExchangedDocument>
    <ram:ID>INV-2026-00142</ram:ID>                     <!-- unique invoice number -->
    <ram:TypeCode>380</ram:TypeCode>                        <!-- 380=invoice · 381=credit note · 384=correction · 386=prepayment -->
    <ram:IssueDateTime>
      <udt:DateTimeString format="102">20260901</udt:DateTimeString>  <!-- format 102 = YYYYMMDD -->
    </ram:IssueDateTime>
  </rsm:ExchangedDocument>

  <rsm:SupplyChainTradeTransaction>

    <!-- ③ LINE ITEM -->
    <ram:IncludedSupplyChainTradeLineItem>
      <ram:AssociatedDocumentLineDocument>
        <ram:LineID>1</ram:LineID>
      </ram:AssociatedDocumentLineDocument>
      <ram:SpecifiedTradeProduct>
        <ram:Name>PPF Implementation Consulting — September 2026</ram:Name>
      </ram:SpecifiedTradeProduct>
      <ram:SpecifiedLineTradeAgreement>
        <ram:NetPriceProductTradePrice>
          <ram:ChargeAmount>5000.00</ram:ChargeAmount>       <!-- unit price excl. VAT -->
        </ram:NetPriceProductTradePrice>
      </ram:SpecifiedLineTradeAgreement>
      <ram:SpecifiedLineTradeDelivery>
        <ram:BilledQuantity unitCode="HUR">1</ram:BilledQuantity>   <!-- unitCode: HUR=hour · DAY=day · C62=unit -->
      </ram:SpecifiedLineTradeDelivery>
      <ram:SpecifiedLineTradeSettlement>
        <ram:ApplicableTradeTax>
          <ram:TypeCode>VAT</ram:TypeCode>
          <ram:CategoryCode>S</ram:CategoryCode>               <!-- S=standard · E=exempt · AE=reverse charge · Z=zero-rated -->
          <ram:RateApplicablePercent>20</ram:RateApplicablePercent>
        </ram:ApplicableTradeTax>
        <ram:SpecifiedTradeSettlementLineMonetarySummation>
          <ram:LineTotalAmount>5000.00</ram:LineTotalAmount>     <!-- line total excl. VAT -->
        </ram:SpecifiedTradeSettlementLineMonetarySummation>
      </ram:SpecifiedLineTradeSettlement>
    </ram:IncludedSupplyChainTradeLineItem>

    <!-- ④ TRADE AGREEMENT — seller and buyer -->
    <ram:ApplicableHeaderTradeAgreement>
      <ram:SellerTradeParty>
        <ram:ID schemeID="0002">12345678912345</ram:ID>           <!-- SIRET — schemeID 0002 = FR company registry -->
        <ram:Name>Acme France SAS</ram:Name>
        <ram:PostalTradeAddress>
          <ram:LineOne>12 rue de la Paix</ram:LineOne>
          <ram:PostcodeCode>75001</ram:PostcodeCode>
          <ram:CityName>Paris</ram:CityName>
          <ram:CountryID>FR</ram:CountryID>                   <!-- ISO 3166-1 alpha-2 -->
        </ram:PostalTradeAddress>
        <ram:SpecifiedTaxRegistration>
          <ram:ID schemeID="VA">FR12345678901</ram:ID>            <!-- VAT number — schemeID VA -->
        </ram:SpecifiedTaxRegistration>
      </ram:SellerTradeParty>
      <ram:BuyerTradeParty>
        <ram:ID schemeID="0002">98765432198765</ram:ID>           <!-- buyer SIRET -->
        <ram:Name>Client SARL</ram:Name>
        <ram:PostalTradeAddress>
          <ram:LineOne>45 avenue Victor Hugo</ram:LineOne>
          <ram:PostcodeCode>69001</ram:PostcodeCode>
          <ram:CityName>Lyon</ram:CityName>
          <ram:CountryID>FR</ram:CountryID>
        </ram:PostalTradeAddress>
        <ram:SpecifiedTaxRegistration>
          <ram:ID schemeID="VA">FR98765432109</ram:ID>
        </ram:SpecifiedTaxRegistration>
      </ram:BuyerTradeParty>
    </ram:ApplicableHeaderTradeAgreement>

    <!-- ⑤ DELIVERY -->
    <ram:ApplicableHeaderTradeDelivery>
      <ram:ActualDeliverySupplyChainEvent>
        <ram:OccurrenceDateTime>
          <udt:DateTimeString format="102">20260901</udt:DateTimeString>
        </ram:OccurrenceDateTime>
      </ram:ActualDeliverySupplyChainEvent>
    </ram:ApplicableHeaderTradeDelivery>

    <!-- ⑥ SETTLEMENT — VAT, payment terms, totals -->
    <ram:ApplicableHeaderTradeSettlement>
      <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>        <!-- ISO 4217 -->

      <!-- VAT breakdown per rate — mandatory for each applicable rate -->
      <ram:ApplicableTradeTax>
        <ram:CalculatedAmount>1000.00</ram:CalculatedAmount>           <!-- VAT amount for this rate -->
        <ram:TypeCode>VAT</ram:TypeCode>
        <ram:BasisAmount>5000.00</ram:BasisAmount>                  <!-- taxable base for this rate -->
        <ram:CategoryCode>S</ram:CategoryCode>
        <ram:RateApplicablePercent>20</ram:RateApplicablePercent>
      </ram:ApplicableTradeTax>

      <!-- Payment terms — mandatory under French commercial law -->
      <ram:SpecifiedTradePaymentTerms>
        <ram:Description>30 jours net. Taux des pénalités de retard : 3 fois le taux d'intérêt légal. Indemnité forfaitaire pour frais de recouvrement : 40 EUR.</ram:Description>
        <ram:DueDateDateTime>
          <udt:DateTimeString format="102">20261001</udt:DateTimeString>  <!-- due date -->
        </ram:DueDateDateTime>
      </ram:SpecifiedTradePaymentTerms>

      <!-- Monetary totals -->
      <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
        <ram:LineTotalAmount>5000.00</ram:LineTotalAmount>             <!-- sum of line totals excl. VAT -->
        <ram:TaxBasisTotalAmount>5000.00</ram:TaxBasisTotalAmount>         <!-- total taxable base -->
        <ram:TaxTotalAmount currencyID="EUR">1000.00</ram:TaxTotalAmount>  <!-- total VAT -->
        <ram:GrandTotalAmount>6000.00</ram:GrandTotalAmount>             <!-- total incl. VAT -->
        <ram:DuePayableAmount>6000.00</ram:DuePayableAmount>             <!-- amount due — after any prepayments -->
      </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
    </ram:ApplicableHeaderTradeSettlement>

  </rsm:SupplyChainTradeTransaction>
</rsm:CrossIndustryInvoice>
Factur-X PDF/A-3 embedding requirement

The XML above must be embedded in a PDF/A-3 file with the AFRelationship set to Alternative and the file attachment named exactly factur-x.xml. The PDF must be PDF/A-3 compliant — not merely PDF/A-1 or PDF/A-2. Generating this correctly requires a library such as pyfpdf, fpdf2, or Apache PDFBox. Most PA vendors handle the PDF/A-3 embedding automatically once you supply the XML.

Format 2 — UBL 2.1 (OASIS Universal Business Language)

UBL 2.1 is the format used in PEPPOL and across most European countries (Belgium, Netherlands, Spain, Denmark, Finland). It is a pure XML format — no PDF layer. If your company operates across multiple EU countries, UBL on PEPPOL BIS Billing 3.0 is the most interoperable choice. France accepts UBL with the customizationID pointing to the PEPPOL billing profile.

invoice.xml — UBL 2.1 complete annotated example (PEPPOL BIS Billing 3.0 / France)

<?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">

  <!-- ① PROFILE IDENTIFICATION -->
  <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>

  <!-- ② INVOICE HEADER -->
  <cbc:ID>INV-2026-00142</cbc:ID>                                      <!-- unique invoice number -->
  <cbc:IssueDate>2026-09-01</cbc:IssueDate>                            <!-- ISO 8601 date -->
  <cbc:DueDate>2026-10-01</cbc:DueDate>                                <!-- payment due date -->
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>                        <!-- 380=invoice · 381=credit note · 384=correction -->
  <cbc:Note>Taux pénalités retard : 3x taux légal. Indemnité recouvrement : 40 EUR.</cbc:Note>  <!-- mandatory FR legal mention -->
  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>

  <!-- ③ SELLER (AccountingSupplierParty) -->
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0002">12345678912345</cbc:EndpointID>    <!-- SIRET — schemeID 0002 = FR company -->
      <cac:PartyIdentification>
        <cbc:ID schemeID="0002">12345678912345</cbc:ID>               <!-- SIRET again in PartyIdentification -->
      </cac:PartyIdentification>
      <cac:PartyName><cbc:Name>Acme France SAS</cbc:Name></cac:PartyName>
      <cac:PostalAddress>
        <cbc:StreetName>12 rue de la Paix</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>FR12345678901</cbc:CompanyID>                  <!-- VAT number -->
        <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Acme France SAS</cbc:RegistrationName>
        <cbc:CompanyID schemeID="0002">12345678912345</cbc:CompanyID>    <!-- SIRET third time — required in PartyLegalEntity -->
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingSupplierParty>

  <!-- ④ BUYER (AccountingCustomerParty) -->
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0002">98765432198765</cbc:EndpointID>    <!-- buyer SIRET -->
      <cac:PartyName><cbc:Name>Client SARL</cbc:Name></cac:PartyName>
      <cac:PostalAddress>
        <cbc:StreetName>45 avenue Victor Hugo</cbc:StreetName>
        <cbc:CityName>Lyon</cbc:CityName>
        <cbc:PostalZone>69001</cbc:PostalZone>
        <cac:Country><cbc:IdentificationCode>FR</cbc:IdentificationCode></cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>FR98765432109</cbc:CompanyID>
        <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Client SARL</cbc:RegistrationName>
        <cbc:CompanyID schemeID="0002">98765432198765</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>

  <!-- ⑤ PAYMENT MEANS -->
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode>30</cbc:PaymentMeansCode>                    <!-- 30=bank transfer · 49=direct debit · 48=card -->
    <cac:PayeeFinancialAccount>
      <cbc:ID>FR7614508320001234567890143</cbc:ID>                  <!-- IBAN -->
      <cac:FinancialInstitutionBranch><cbc:ID>BNPAFRPPXXX</cbc:ID></cac:FinancialInstitutionBranch>  <!-- BIC -->
    </cac:PayeeFinancialAccount>
  </cac:PaymentMeans>

  <!-- ⑥ VAT TOTAL -->
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="EUR">1000.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="EUR">5000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="EUR">1000.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>                                            <!-- S=standard · E=exempt · AE=reverse charge -->
        <cbc:Percent>20</cbc:Percent>
        <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>

  <!-- ⑦ MONETARY TOTALS -->
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="EUR">5000.00</cbc:LineExtensionAmount>  <!-- sum of lines excl. VAT -->
    <cbc:TaxExclusiveAmount currencyID="EUR">5000.00</cbc:TaxExclusiveAmount>    <!-- total excl. VAT -->
    <cbc:TaxInclusiveAmount currencyID="EUR">6000.00</cbc:TaxInclusiveAmount>    <!-- total incl. VAT -->
    <cbc:PayableAmount currencyID="EUR">6000.00</cbc:PayableAmount>          <!-- amount due -->
  </cac:LegalMonetaryTotal>

  <!-- ⑧ LINE ITEM -->
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="HUR">1</cbc:InvoicedQuantity>             <!-- unitCode: HUR=hour · DAY=day · C62=unit (UN/ECE Rec 20) -->
    <cbc:LineExtensionAmount currencyID="EUR">5000.00</cbc:LineExtensionAmount>  <!-- line total excl. VAT -->
    <cac:Item>
      <cbc:Description>PPF Implementation Consulting — September 2026</cbc:Description>
      <cbc:Name>Consulting Services</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">5000.00</cbc:PriceAmount>              <!-- unit price excl. VAT -->
    </cac:Price>
  </cac:InvoiceLine>

</Invoice>
SIRET appears three times in UBL

UBL requires the SIRET in EndpointID, PartyIdentification/ID, and PartyLegalEntity/CompanyID — all with schemeID="0002". Missing any one of these three is a common PA validation failure. Your ERP or middleware must populate all three from the same SIRET source field.

Format 3 — UN/CEFACT CII (Cross Industry Invoice)

CII uses the same namespace and element structure as Factur-X, but is delivered as a standalone XML file — there is no PDF envelope. This is the format used in Germany's XRechnung, and it is what SAP natively generates from its Document Compliance module. Many PA vendors accept CII directly. The structure is identical to Factur-X XML; the difference is the profile ID and the absence of a PDF container.

invoice.xml — UN/CEFACT CII complete annotated example (EN16931)

<?xml version="1.0" encoding="UTF-8"?>
<rsm:CrossIndustryInvoice
  xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
  xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
  xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">

  <!-- ① PROFILE — CII uses urn:cen.eu:en16931:2017 (not the Factur-X urn) -->
  <rsm:ExchangedDocumentContext>
    <ram:BusinessProcessSpecifiedDocumentContextParameter>
      <ram:ID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</ram:ID>
    </ram:BusinessProcessSpecifiedDocumentContextParameter>
    <ram:GuidelineSpecifiedDocumentContextParameter>
      <ram:ID>urn:cen.eu:en16931:2017</ram:ID>                   <!-- CII profile — different from Factur-X -->
    </ram:GuidelineSpecifiedDocumentContextParameter>
  </rsm:ExchangedDocumentContext>

  <!-- ② INVOICE HEADER -->
  <rsm:ExchangedDocument>
    <ram:ID>INV-2026-00142</ram:ID>
    <ram:TypeCode>380</ram:TypeCode>
    <ram:IssueDateTime>
      <udt:DateTimeString format="102">20260901</udt:DateTimeString>
    </ram:IssueDateTime>
    <!-- Included note for French mandatory late payment mention -->
    <ram:IncludedNote>
      <ram:Content>Pénalités de retard : 3x le taux légal. Indemnité forfaitaire recouvrement : 40 EUR.</ram:Content>
    </ram:IncludedNote>
  </rsm:ExchangedDocument>

  <rsm:SupplyChainTradeTransaction>

    <!-- ③ LINE ITEM -->
    <ram:IncludedSupplyChainTradeLineItem>
      <ram:AssociatedDocumentLineDocument><ram:LineID>1</ram:LineID></ram:AssociatedDocumentLineDocument>
      <ram:SpecifiedTradeProduct>
        <ram:Name>PPF Implementation Consulting — September 2026</ram:Name>
      </ram:SpecifiedTradeProduct>
      <ram:SpecifiedLineTradeAgreement>
        <ram:NetPriceProductTradePrice>
          <ram:ChargeAmount>5000.00</ram:ChargeAmount>
        </ram:NetPriceProductTradePrice>
      </ram:SpecifiedLineTradeAgreement>
      <ram:SpecifiedLineTradeDelivery>
        <ram:BilledQuantity unitCode="HUR">1</ram:BilledQuantity>
      </ram:SpecifiedLineTradeDelivery>
      <ram:SpecifiedLineTradeSettlement>
        <ram:ApplicableTradeTax>
          <ram:TypeCode>VAT</ram:TypeCode>
          <ram:CategoryCode>S</ram:CategoryCode>
          <ram:RateApplicablePercent>20</ram:RateApplicablePercent>
        </ram:ApplicableTradeTax>
        <ram:SpecifiedTradeSettlementLineMonetarySummation>
          <ram:LineTotalAmount>5000.00</ram:LineTotalAmount>
        </ram:SpecifiedTradeSettlementLineMonetarySummation>
      </ram:SpecifiedLineTradeSettlement>
    </ram:IncludedSupplyChainTradeLineItem>

    <!-- ④ SELLER and BUYER -->
    <ram:ApplicableHeaderTradeAgreement>
      <ram:SellerTradeParty>
        <ram:ID schemeID="0002">12345678912345</ram:ID>              <!-- SIRET -->
        <ram:Name>Acme France SAS</ram:Name>
        <ram:SpecifiedLegalOrganization>
          <ram:ID schemeID="0002">12345678912345</ram:ID>          <!-- SIRET in legal org -->
        </ram:SpecifiedLegalOrganization>
        <ram:PostalTradeAddress>
          <ram:LineOne>12 rue de la Paix</ram:LineOne>
          <ram:PostcodeCode>75001</ram:PostcodeCode>
          <ram:CityName>Paris</ram:CityName>
          <ram:CountryID>FR</ram:CountryID>
        </ram:PostalTradeAddress>
        <ram:URIUniversalCommunication>
          <ram:URIID schemeID="0002">12345678912345</ram:URIID>       <!-- electronic routing address — SIRET again for PA routing -->
        </ram:URIUniversalCommunication>
        <ram:SpecifiedTaxRegistration>
          <ram:ID schemeID="VA">FR12345678901</ram:ID>              <!-- VAT number -->
        </ram:SpecifiedTaxRegistration>
      </ram:SellerTradeParty>
      <ram:BuyerTradeParty>
        <ram:ID schemeID="0002">98765432198765</ram:ID>              <!-- buyer SIRET -->
        <ram:Name>Client SARL</ram:Name>
        <ram:SpecifiedLegalOrganization>
          <ram:ID schemeID="0002">98765432198765</ram:ID>
        </ram:SpecifiedLegalOrganization>
        <ram:PostalTradeAddress>
          <ram:LineOne>45 avenue Victor Hugo</ram:LineOne>
          <ram:PostcodeCode>69001</ram:PostcodeCode>
          <ram:CityName>Lyon</ram:CityName>
          <ram:CountryID>FR</ram:CountryID>
        </ram:PostalTradeAddress>
        <ram:URIUniversalCommunication>
          <ram:URIID schemeID="0002">98765432198765</ram:URIID>       <!-- buyer PA routing address -->
        </ram:URIUniversalCommunication>
        <ram:SpecifiedTaxRegistration>
          <ram:ID schemeID="VA">FR98765432109</ram:ID>
        </ram:SpecifiedTaxRegistration>
      </ram:BuyerTradeParty>
    </ram:ApplicableHeaderTradeAgreement>

    <!-- ⑤ DELIVERY -->
    <ram:ApplicableHeaderTradeDelivery>
      <ram:ActualDeliverySupplyChainEvent>
        <ram:OccurrenceDateTime><udt:DateTimeString format="102">20260901</udt:DateTimeString></ram:OccurrenceDateTime>
      </ram:ActualDeliverySupplyChainEvent>
    </ram:ApplicableHeaderTradeDelivery>

    <!-- ⑥ SETTLEMENT — VAT breakdown, payment, totals -->
    <ram:ApplicableHeaderTradeSettlement>
      <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>

      <!-- VAT breakdown -->
      <ram:ApplicableTradeTax>
        <ram:CalculatedAmount>1000.00</ram:CalculatedAmount>
        <ram:TypeCode>VAT</ram:TypeCode>
        <ram:BasisAmount>5000.00</ram:BasisAmount>
        <ram:CategoryCode>S</ram:CategoryCode>
        <ram:RateApplicablePercent>20</ram:RateApplicablePercent>
      </ram:ApplicableTradeTax>

      <!-- Payment terms — mandatory under French commercial law -->
      <ram:SpecifiedTradePaymentTerms>
        <ram:Description>30 jours net. Pénalités : 3x taux légal. Indemnité forfaitaire : 40 EUR.</ram:Description>
        <ram:DueDateDateTime><udt:DateTimeString format="102">20261001</udt:DateTimeString></ram:DueDateDateTime>
      </ram:SpecifiedTradePaymentTerms>

      <!-- Bank details -->
      <ram:SpecifiedTradeSettlementPaymentMeans>
        <ram:TypeCode>30</ram:TypeCode>                                    <!-- 30=bank transfer -->
        <ram:PayeePartyCreditorFinancialAccount>
          <ram:IBANID>FR7614508320001234567890143</ram:IBANID>
        </ram:PayeePartyCreditorFinancialAccount>
        <ram:PayeeSpecifiedCreditorFinancialInstitution>
          <ram:BICID>BNPAFRPPXXX</ram:BICID>
        </ram:PayeeSpecifiedCreditorFinancialInstitution>
      </ram:SpecifiedTradeSettlementPaymentMeans>

      <!-- Monetary totals -->
      <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
        <ram:LineTotalAmount>5000.00</ram:LineTotalAmount>
        <ram:TaxBasisTotalAmount>5000.00</ram:TaxBasisTotalAmount>
        <ram:TaxTotalAmount currencyID="EUR">1000.00</ram:TaxTotalAmount>
        <ram:GrandTotalAmount>6000.00</ram:GrandTotalAmount>
        <ram:DuePayableAmount>6000.00</ram:DuePayableAmount>
      </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
    </ram:ApplicableHeaderTradeSettlement>

  </rsm:SupplyChainTradeTransaction>
</rsm:CrossIndustryInvoice>
CII vs Factur-X — the only meaningful differences

The XML syntax is identical. The differences are: (1) Profile URI — CII uses urn:cen.eu:en16931:2017, Factur-X uses urn:factur-x.eu:1p0:en16931. (2) Delivery container — CII is a standalone XML file; Factur-X embeds the same XML inside a PDF/A-3. (3) Routing element — CII uses ram:URIUniversalCommunication/ram:URIID for the electronic routing address (the SIRET for French PA routing), whereas Factur-X commonly omits this in favour of the ram:ID schemeID="0002". Some PAs require both.

Format selection guidance
Your situationRecommended formatWhy
Transitioning from PDF, AP team needs to see invoicesFactur-XPDF layer readable in any viewer. Same XML as CII underneath.
Operating across multiple EU countries (PEPPOL)UBL 2.1Single format for France, Belgium, Netherlands, Spain, Nordics.
SAP S/4HANA with Document ComplianceCIISAP's native output. No transformation required.
German parent company using XRechnungCIIXRechnung is CII with a German profile. Same file, different profile URI.
Mid-market system (QuickBooks, Sage, NetSuite)Factur-XEasiest to generate via PA connector or middleware. PDF output familiar.
Validation tools
Always validate before connecting to your PA

fnfe-mpe.org/validateur — the FNFE-MPE validator. Validates Factur-X, UBL, and CII against EN 16931 and French business rules (BR-FR). Free, no registration. PPF portal sandbox — portail-facturation.dgfip.finances.gouv.fr — test submission environment. Your PA's sandbox — every certified PA must provide one. Test all 11 UAT scenarios here before production. Validate during development, not just before go-live. A format error found in development costs hours. The same error found in production costs weeks.

Your notes — Chapter 4
Chapter 05 · Technical Integration

ERP Integration — SAP, Oracle, D365

Every PA vendor will say they integrate with your ERP. This chapter covers what that actually means for each major platform, the known gaps, and the mandatory UAT testing protocol before go-live.

SAP ECC 6.0 — three integration options
A

Third-party PA connector (recommended)

Most PA vendors provide an SAP ECC-compatible connector — an ABAP add-on intercepting the standard invoice output. Ask: "Do you have a certified connector for SAP ECC 6.0 and which enhancement package versions do you support?"

B

Middleware layer

An integration middleware (MuleSoft, SAP Integration Suite, Dell Boomi) extracts invoice data from SAP ECC, transforms it to the required format, and sends it to the PA API. More complex but gives vendor independence.

C

Migrate to S/4HANA

SAP's recommended path. SAP Document Compliance includes France-specific PA integration. But do not delay PPF compliance waiting for S/4HANA — September 2026 will not wait.

The ECC customisation problem

Most ECC instances have accumulated customisations since go-live. A PA connector that works in a standard ECC environment may fail against your specific document types, number range configurations, or custom VAT codes. Budget 4–8 weeks for ECC integration testing — not 4–8 days.

ERP platform overview
PlatformPPF approachEffort
SAP S/4HANASAP Document Compliance (DRC) with France content package + PA connectorMedium
Oracle Fusion CloudNative e-invoicing framework + PA REST API connectorMedium
Oracle EBS 12.2Middleware (Oracle Integration Cloud or third-party)High
Microsoft D365 FinanceElectronic Reporting (ER) framework + PA connector or Power AutomateMedium-High
SAP ECC 6.0Third-party PA connector or middlewareHigh
UAT testing protocol — mandatory before go-live

The following scenarios must all pass in the PA sandbox before production go-live is approved. Any scenario not tested is a known risk carried into production.

Test scenarioInvoice typeKey validationTested?Result
Standard domestic B2B — single VAT rateTypeCode 380SIRET, VAT amount, PA acceptance, status flow
Standard domestic B2B — multiple VAT ratesTypeCode 380VAT breakdown per rate, line-level assignment, G1/G6 rules
Credit note referencing originalTypeCode 381Original reference, negative amounts, PA routing
Corrected invoiceTypeCode 384Original reference, corrected values, buyer receives correction
Advance payment invoiceTypeCode 386Advance amount, settlement reference
Zero-rated / VAT exemptFV with exemption codeVAT category "E", exemption reason code and text
Reverse charge (autoliquidation)FV with AE codeVAT category "AE", 0% rate, legal reference
PA rejection — correction and resubmissionAnyError code received, correction applied, resubmission succeeds
Full lifecycle status cycle (AP side)AnyReceived → Approved → Paiement transmis → Paiement reçu
E-reporting — B2C aggregated dailyE-reportingAggregated by VAT rate, correct period, PA accepts
E-reporting — cross-border supplyE-reportingPer-transaction, buyer ID, correct period
Go / No-Go criteria

Production go-live must not be approved unless all scenarios above have passed in the PA sandbox, PA acceptance confirmations have been received for all test invoices, at least one full lifecycle status cycle has been completed end-to-end, and the rejection handling and resubmission process has been tested and documented.

Your notes — Chapter 5
Chapter 06 · Mid-Market Systems

Accounting Systems — QuickBooks, Sage, NetSuite

Mid-market accounting platforms do not natively support Factur-X or PA API submission. This chapter covers the recommended integration architecture with a detailed QuickBooks Online worked example.

Applies to: QuickBooks Online, QuickBooks Desktop, Sage 50/100/200, NetSuite, Xero
Recommended architecture
Integration pattern

Accounting system → Webhook/API → Transformation middleware → PA API → DGFiP
The middleware extracts invoice data via the accounting system API, transforms it to Factur-X XML, enriches it with SIRET and VAT data, and submits to the PA REST API. PA responses are written back to the accounting system as invoice notes or status tags.

QuickBooks is a billing system. A PA is compliance infrastructure. They were not designed to speak to each other — the integration layer is the solution, and it is more straightforward than it sounds.
Option A — PA-provided connector (simplest)
1

Check if your PA has a connector

Ask your PA: "Do you have a certified QuickBooks Online / Sage / NetSuite connector?" Several certified PAs have connectors through Zapier, Make, or as native app integrations. This is the fastest path — no code required.

2

Add SIRET as a custom field

Accounting platforms don't have a SIRET field by default. Add it as a custom field on the Customer record ("SIRET Number", text, 14 characters). Populate for every French B2B customer.

3

Configure submission trigger and field mapping

Set the connector to trigger on invoice approval (not creation). Map: invoice number → XML Invoice ID, customer SIRET → ram:ID schemeID="0002", VAT number → tax registration element, line amounts and VAT rates → line-level fields.

4

Test in PA sandbox before production

Run 10–20 test invoices through the PA sandbox. Verify: format validation passes, SIRET lookup succeeds in PPF Annuaire, VAT calculation is correct, PA response is received and logged.

Option B — Custom Python API integration

QuickBooks Online → Factur-X → PA submission (Python)

# Extract invoice from QBO API
GET https://quickbooks.api.intuit.com/v3/company/{realmId}/invoice/{id}
Authorization: Bearer {access_token}

# Python: transform and submit to PA
def qbo_to_facturx_and_submit(qbo_invoice, seller_config, pa_config):
    siret = next((f['StringValue'] for f in qbo_invoice.get('CustomField', [])
                  if f['Name'] == 'SIRET Number'), None)
    if not siret or len(siret) != 14:
        raise ValueError(f"Missing SIRET for invoice {qbo_invoice['Id']}")

    payload = {
        "invoiceFormat": "FACTURX_EN16931",
        "invoiceData": base64.b64encode(
            generate_facturx_xml(qbo_invoice, seller_config, siret)).decode(),
        "routing": { "buyerSiret": siret }
    }
    response = requests.post(
        f"{pa_config['api_url']}/invoices",
        json=payload,
        headers={"Authorization": f"Bearer {pa_config['api_key']}"}
    )
    return response.json()['invoiceId']
Your notes — Chapter 6
Chapter 07 · Data Quality

Master Data — SIRET, VAT Numbers, and the Data Debt Problem

Master data quality is the most common cause of e-invoicing go-live failures. A missing or incorrect SIRET causes every invoice to fail at the PA before reaching the buyer. There is no workaround — only correction of the source data.

SIRET validation — complete process
1

Run a completeness audit

Export all French customer and supplier records. Count how many have a SIRET. In a typical French B2B customer base, 20–40% of records have SIRET issues. The gap is your remediation scope.

2

Validate against INSEE SIRENE API

Use api.insee.fr to validate every SIRET in bulk. Check: does it exist? Is it active? Does the name and address match? Companies that have restructured may have a different current SIRET.

3

Collect missing SIRETs from counterparties

Frame it as: "To comply with the French e-invoicing mandate from 1 September 2026, we require your SIRET to route invoices correctly." Most counterparties respond quickly — this is their compliance problem too.

4

Verify your entities in the PPF Annuaire

Verify that your own entities are correctly registered and that key customers and suppliers are also registered. An invoice to a buyer not yet in the Annuaire cannot be routed.

5

Build ongoing governance

Integrate the INSEE SIRENE API into your CRM and procurement onboarding. Validate SIRET at point of record creation. One validation at creation is worth more than ten retroactive cleanses.

Master data checklist

SIRET audit completed for all French customers

Completeness report run, validated against INSEE SIRENE API, gaps contacted

SIRET audit completed for all French suppliers

Required for invoice matching and Annuaire routing

VAT numbers validated for all French trading partners

Active validation via VIES (ec.europa.eu/taxation_customs/vies)

All French entities registered in PPF Annuaire

Registration required before any e-invoice can be routed

All mandatory invoice fields mapped in ERP master data

SIRET, VAT number, payment terms, delivery address all populated

SIRET validation built into new customer/supplier onboarding

Prevents future data quality degradation — governance not just cleanse

Master data synchronised across CRM, ERP, and PA systems

Single source of truth for SIRET and VAT data established

Your notes — Chapter 7
Chapter 08 · Tax & Compliance

Tax Obligations and e-Reporting

The PPF mandate is fundamentally a tax initiative. Tax must own the outcome. This chapter covers e-reporting obligations in full — scope, frequencies, foreign entity rules, payment reporting — plus VAT implications, archiving, and the reconciliation control the DGFiP expects.

Legal basis e-reporting: Article 290 CGISep 2025 simplification: Line-item reporting removed for international flows
E-invoicing vs e-reporting — the key distinction
The key distinction

E-invoicing replaces the invoice document itself — the structured invoice flows through a PA to the buyer. E-reporting is a data transmission — you send transaction data to the DGFiP via your PA, but no invoice document is exchanged. A company can be subject to e-reporting without being subject to e-invoicing — and most companies are subject to both simultaneously.

E-reporting scope — is your entity in scope?
Entity typeE-invoicing?E-reporting?From
French-established companyYes — domestic B2BYes — B2C, exports, cross-border1 Sep 2026 (GE/ETI)
1 Sep 2027 (SME)
Foreign — French fixed establishmentYes — from establishmentYes — French-taxable transactions1 Sep 2026 (GE/ETI)
Foreign — French VAT number onlyNoYes — French-taxable B2B and B2C1 Sep 2027
Foreign — OSS/IOSS registeredNoNo — OSS/IOSS declarations substituteN/A
No French VAT nexusNoNoN/A
The overseas territories trap

French overseas departments (DOM) — Guadeloupe, Martinique, Réunion, Guyane, Mayotte — are within French VAT territory: e-invoicing scope. French overseas collectivities (COM) — French Polynesia, New Caledonia — are outside French VAT territory: e-reporting scope. Misclassifying DOM vs COM is one of the most common scope errors.

E-reporting frequencies and deadlines
VAT regimeTransaction dataPayment dataDeadlines
Régime réel normal mensuel (monthly filer)Every 10 daysMonthlyTransaction: by 10th, 20th, last day of month
Régime réel normal trimestriel (quarterly filer)MonthlyMonthlyBy last day of following month
Régime simplifié (RSI) (annual VAT return)MonthlyMonthlyBy last day of following month
Foreign company — French VAT onlyPer VAT filing frequencyMonthly where applicableAligned with VAT return deadlines
The 10-day cycle for monthly filers

Monthly VAT filers must submit e-reporting data three times per month. A manual monthly export will not meet this requirement. Your PA must receive transaction data from your ERP or POS system automatically at least every 10 days. If you are a monthly filer and have not built an automated e-reporting feed, this is a critical gap.

E-reporting scope decision tool

Map your transaction flows to obligations

FlowEst. monthly volumeObligationIn scope?
Domestic B2B sales to French companiesE-invoicing via PA
B2C sales to French consumersE-reporting (aggregated daily)
Sales to EU customers (intra-EU)E-reporting (per transaction)
Sales to non-EU customers (exports)E-reporting (simplified)
Cross-border services to non-French entitiesE-reporting (per transaction)
Intra-EU purchases (reverse charge)E-reporting as buyer
Transactions with DOM territoriesE-invoicing (French VAT scope)
Transactions with COM territoriesE-reporting (outside French VAT)
B2G transactions to French public administrationChorus Pro (unchanged)
Archiving — the 10-year obligation

All e-invoices — sent and received — must be archived for 10 years from the invoice date with guaranteed integrity. No modification is possible after archiving.

Who owns archiving in your organisation?

Archiving is a Tax obligation but routinely left as an IT default. Tax must define the archiving policy, confirm the 10-year retention period, verify the archive solution meets DGFiP integrity requirements, and document the retrieval process for a tax audit. If relying on your PA's archiving service, get the SLA in writing — specifically: what is the retrieval time for a specific invoice in a tax audit scenario? Is the archive accessible after you leave the PA?

VAT return implications
TVA sur les encaissements (cash-basis VAT)▾

If your French entity accounts for VAT on a cash basis, the payment status reporting obligation becomes tax-critical. The moment you report Paiement reçu, you create a VAT liability event the DGFiP can see. Missing or late payment status reporting creates a discrepancy between DGFiP data and your VAT filing — a direct audit trigger. Your PA must receive payment confirmation events from your treasury system automatically.

Late payment interest and the €40 recovery fee▾

French commercial law requires that invoices include the late payment interest rate and the flat-rate debt recovery cost (€40). These must appear in the structured invoice data from September 2026 — not only in the PDF rendering. Map them to the ram:SpecifiedTradePaymentTerms field in your ERP configuration.

Reverse charge (autoliquidation)▾

Reverse charge invoices must carry VAT category code "AE" with 0% rate and the legal reference (e.g. "Article 283-2 du CGI"). ERP tax code configurations rarely map cleanly to EN 16931 category codes without explicit work. Validation errors on reverse charge invoices are among the most common failures in PA testing.

Multi-rate invoices▾

France has four non-zero VAT rates: 20% (standard), 10% (intermediate), 5.5% (reduced), 2.1% (super-reduced). EN 16931 requires a separate VAT breakdown section per rate, and a separate line-level rate on every invoice line. Mixed-rate invoices with incorrectly aggregated VAT will pass schema validation but fail DGFiP G1/G6 business rule validation — a category of error only found in PA testing.

Your notes — Chapter 8
Chapter 09 · Governance

Administrative Requirements and Governance

Compliance is not a project — it is an ongoing state. This chapter covers the RACI matrix, administrative obligations, governance structures, supplier communication template, and the ongoing monitoring calendar.

RACI matrix — PPF programme ownership

R = Responsible (does the work) · A = Accountable (owns the outcome) · C = Consulted · I = Informed · Every row must have exactly one A.

ActivityCFOTaxFinance/APITProcurementPayments
PA selection and contractACCRCI
PPF Annuaire registrationIA/RCRII
ERP integration designICCA/RIC
SIRET master data auditICA/RRRI
Invoice format configurationICCA/RII
Lifecycle status managementICA/RRIR
Payment status e-reportingIACRIR
E-reporting pipelineIACRIC
UAT sign-off (Go/No-Go)ARRRIR
Supplier communicationICA/RIRI
Archiving policy and SLAIA/RCRII
DPA with PA (GDPR)ACICRI
Ongoing compliance monitoringIA/RRRIR
DGFiP query responseARCCII
Staff trainingICA/RCIR
Specification updates (PPF Ext. Spec)IAIRII
Mandatory administrative actions
1

Appoint a PPF Compliance Owner

Named individual in Tax or Finance with formal ongoing responsibility: monitoring PA performance, Annuaire maintenance, DGFiP queries, specification updates, staff training. Cannot be shared informally across teams.

2

Sign PA Data Processing Agreement (DPA)

Your PA processes personal and commercial data under GDPR. A DPA must be in place before processing begins. Confirm: data location (EU/France preferred), retention limits, and your right to audit.

3

Update T&Cs and contract templates

Commercial terms should reference e-invoicing: invoices issued in structured format via a certified PA, PDF invoices not accepted for B2B post-mandate, lifecycle status responses are part of the contractual process.

4

Train all teams that touch invoices

AP, AR, Tax, Payments, IT. Training is not a one-off — repeat for new staff and update as specifications evolve. Document the new process in writing before go-live.

5

Establish monthly compliance review

Monthly: PA rejection rates, unresolved exceptions, e-reporting status, archiving completeness, DGFiP communications. Present to CFO. Under a regime where DGFiP has real-time data, compliance monitoring must be a standing agenda item.

Supplier communication template

Template — notify French suppliers of e-invoicing requirements

Subject: France e-invoicing mandate — required changes from 1 September 2026


Dear [Supplier name],


France's mandatory B2B e-invoicing reform comes into effect from 1 September 2026. From this date, invoices must be transmitted through a government-certified Plateforme Agréée in structured format (Factur-X, UBL, or CII).


To ensure uninterrupted invoice processing, we require:
1. Your SIRET number (14-digit establishment identifier)
2. The name of your certified PA (Plateforme Agréée)
3. Confirmation of your planned go-live date


Our entity details: Company: [Your entity name] · SIRET: [Your SIRET] · PA: [Your PA name]


Please provide the above by [date]. PDF invoices sent by email will not be accepted as legally valid after your mandate date.


Kind regards, [Your name]

Ongoing compliance calendar
FrequencyTaskOwner
DailyMonitor PA rejection rate. Escalate if above 2% of daily volume.AP / IT
WeeklyReview unresolved exceptions. Confirm e-reporting submissions on schedule.AP Manager
MonthlyPA performance review. VAT filing vs PA data reconciliation. DGFiP correspondence. Archiving completeness.Tax / Finance
QuarterlyMaster data audit — SIRET and VAT re-validation. PA contract review. PPF External Spec updates.Compliance Owner
AnnuallyFull compliance audit. Staff training refresh. Contract template update. PA market review.CFO / Tax
Your notes — Chapter 9
Chapter 10 · Project Tracker

90-Day Action Plan

A structured plan from today to enforcement-ready. Tick each item as completed. Download as PDF to include your notes and completed items.

Phase 1 — Foundation (Days 1–30)

Contract a certified PA

Sign and execute PA contract. Confirm on DGFiP official approved list. Get sandbox credentials immediately.

Register all French entities in PPF Annuaire

Without Annuaire registration no invoice can be routed to or from your entities.

Complete SIRET audit — customers and suppliers

Completeness report, INSEE SIRENE validation, data collection campaign for gaps.

Run mandatory field gap analysis on ERP invoice output

Map every EN 16931 mandatory field against current ERP output. Document gaps and assign remediation.

Appoint PPF Compliance Owner

Named individual in Tax or Finance with formal ongoing responsibility documented.

Send supplier communication

Collect SIRETs and PA information from all French suppliers. Use the template from Chapter 9.

Confirm e-reporting scope for each entity

Use the scope decision tool in Chapter 8. Document obligations and reporting frequencies.

Phase 2 — Integration (Days 31–60)

Configure ERP to output compliant invoice format

Factur-X, UBL, or CII — all mandatory fields populated from ERP master data.

Connect ERP to PA API

Install PA connector or build API bridge. Confirm authentication and sandbox submissions working.

Configure AP system to receive structured invoices

PO matching, three-way match, approval workflow — all working from structured XML data.

Implement lifecycle status management including payment statuses

Configure automatic status responses. Payments team confirms payment event feed to PA.

Build e-reporting pipeline for B2C and cross-border transactions

Separate data feed to PA for e-reporting. Test with historical data before production.

Sign DPA with PA · Confirm archiving solution

DPA signed. Archiving policy documented. Retrieval process tested.

Phase 3 — Testing and Go-Live (Days 61–90)

Complete all 11 UAT scenarios from Chapter 5

Every invoice type tested in the PA sandbox. Go/No-Go criteria all met.

End-to-end pilot with real suppliers and customers

Real invoices, real data, real PAs. Confirm receipt, routing, status responses end-to-end.

Train all internal teams — AP, AR, Tax, Payments, IT

Formal training, documented process. Rejection handling procedures confirmed.

Go-live with monitoring plan in place

PA rejection rate dashboard live. Exception escalation process defined. Hypercare team identified.

Establish monthly compliance review cadence

First review scheduled. Compliance owner confirmed. Reporting to CFO agreed.

Company-specific notes and project plan
Need expert support?

Lumara Advisory runs structured France PPF Readiness Scans — covering all streams, your specific ERP landscape, and PA selection. Vendor-neutral: we receive no referral fees from any PA. Visit lumara-consulting.com to book a free 30-minute discovery call.

Full disclaimer and limitation of liability

This workbook is produced by Lumara Advisory and is provided solely for informational and educational purposes. It does not constitute legal, tax, accounting, or regulatory advice and does not create any professional relationship.

No liability: Lumara Advisory expressly disclaims all liability — direct, indirect, incidental, or consequential — for any loss, penalty, fine, or expense arising from use of or reliance on this workbook, including VAT penalties, compliance failures, missed deadlines, or incorrect system configurations.

Accuracy: All content is based on publicly available DGFiP specifications, AFNOR XP Z12-014, and PPF External Specification v3.1 as of the production date. Requirements change. Always verify at impots.gouv.fr and portail-facturation.dgfip.finances.gouv.fr.

Intellectual property: © 2026 Lumara Advisory. All rights reserved. Licensed for individual use by the purchaser only. Not for redistribution.