> ## Documentation Index
> Fetch the complete documentation index at: https://docs.invopop.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Invoicing in France

> Send and receive B2B invoices over Peppol with automatic PPF reporting.

export const frPaSendInvoiceB2GWorkflow = {
  "name": "PPF send document (public sector)",
  "description": "Send an invoice via Chorus Pro or Peppol depending on the buyer, and record it with PPF",
  "app_id": "gov-fr",
  "country": "fr",
  "steps": [{
    "id": "067bc16d-c1a7-11f1-8390-4eb134dbe674",
    "name": "Set state",
    "provider": "silo.state",
    "summary": "Set state to `processing`{.state .processing}",
    "config": {
      "state": "processing"
    }
  }, {
    "id": "067e5b0d-c1a7-11f1-a890-4eb134dbe674",
    "name": "Sign envelope",
    "provider": "silo.close"
  }, {
    "id": "067e5bad-c1a7-11f1-a27a-4eb134dbe674",
    "name": "Document is an invoice?",
    "provider": "silo.if",
    "next": [{
      "status": "NA",
      "code": "true",
      "steps": [{
        "id": "067e5bf8-c1a7-11f1-a34e-4eb134dbe674",
        "name": "Generate UBL document",
        "provider": "ubl.generate",
        "summary": "Peppol France CIUS v1",
        "config": {
          "attach_invoice_pdf": false,
          "doc_type": "peppol-fr-cius",
          "private": false,
          "validate_ubl": false
        }
      }]
    }, {
      "status": "NA",
      "code": "false",
      "steps": [{
        "id": "067e5c2f-c1a7-11f1-a517-4eb134dbe674",
        "name": "Generate CDAR Status",
        "provider": "cii.generate",
        "summary": "France CTC Flow 6 CDAR (lifecycle status/payment)",
        "config": {
          "attach_invoice_pdf": false,
          "doc_type": "fr-ctc-cdar-flow6",
          "validate_cii": false
        }
      }]
    }],
    "config": {
      "expr": "doc['$schema'] endsWith 'bill/invoice'",
      "scope": "env"
    }
  }, {
    "id": "067e5c5e-c1a7-11f1-9b94-4eb134dbe674",
    "name": "Record outgoing document for e-invoicing",
    "provider": "gov-fr.directory.record.outgoing"
  }, {
    "id": "067e5ddf-c1a7-11f1-aff3-4eb134dbe674",
    "name": "Is B2G?",
    "provider": "gov-fr.chorus-pro.lookup",
    "summary": "Chorus Pro for a public buyer, Peppol otherwise",
    "next": [{
      "status": "NA",
      "code": "true",
      "steps": [{
        "id": "067e5daf-c1a7-11f1-a744-4eb134dbe674",
        "name": "Send to Chorus Pro",
        "provider": "gov-fr.chorus-pro.send",
        "summary": "Deliver to the public sphere"
      }, {
        "id": "067e5d67-c1a7-11f1-875f-4eb134dbe674",
        "name": "Forward document to PPF",
        "provider": "gov-fr.directory.forward"
      }]
    }, {
      "status": "NA",
      "code": "false",
      "steps": [{
        "id": "067e5c7f-c1a7-11f1-96f3-4eb134dbe674",
        "name": "Verify document can be sent",
        "provider": "peppol.validate.endpoint",
        "next": [{
          "code": "true",
          "steps": [{
            "id": "067e5ca2-c1a7-11f1-a3ed-4eb134dbe674",
            "name": "Send Peppol document",
            "provider": "peppol.send"
          }, {
            "id": "067e5cc1-c1a7-11f1-99dd-4eb134dbe674",
            "name": "Forward document to PPF",
            "provider": "gov-fr.directory.forward"
          }]
        }, {
          "code": "false",
          "steps": [{
            "id": "067e5ce6-c1a7-11f1-81bc-4eb134dbe674",
            "name": "Forward document to PPF",
            "provider": "gov-fr.directory.forward",
            "summary": "Forward to PPF (déposée – non transmise)",
            "config": {
              "not_transmitted": true
            }
          }]
        }]
      }]
    }]
  }, {
    "id": "067e5d0b-c1a7-11f1-af09-4eb134dbe674",
    "name": "Set state",
    "provider": "silo.state",
    "summary": "Set state to `completed`{.state .completed}",
    "config": {
      "state": "completed"
    }
  }],
  "rescue": [{
    "id": "067e6072-c1a7-11f1-ba65-4eb134dbe674",
    "name": "Set state",
    "provider": "silo.state",
    "summary": "Set state to `error`{.state .error}",
    "config": {
      "state": "error"
    }
  }]
};

export const frPaReceiveInvoiceWorkflow = {
  "name": "PPF receive document",
  "description": "Receive an invoice, status or payment via Peppol, run the PPF recording controls over invoices, and raise a 213 for the ones that fail",
  "steps": [{
    "id": "db61c3c0-0fb5-11f0-b078-9fc456829eca",
    "name": "Import Peppol document",
    "provider": "peppol.import",
    "next": [{
      "status": "NA",
      "code": "UBL",
      "steps": [{
        "id": "62e94570-8fdb-11f0-a8fb-61ec9e5a76ba",
        "name": "Import UBL document",
        "provider": "ubl.import"
      }]
    }, {
      "status": "NA",
      "code": "CII",
      "steps": [{
        "id": "6480ae50-8fdb-11f0-a8fb-61ec9e5a76ba",
        "name": "Import CII document",
        "provider": "cii.import"
      }]
    }, {
      "status": "NA",
      "code": "PDF",
      "steps": [{
        "id": "26ba4f80-1e2a-11f1-8bfb-2beaa1df60f0",
        "name": "Import Factur-X PDF",
        "provider": "cii.pdf.import"
      }]
    }],
    "notes": "Receives the Peppol document and returns the format in a code (UBL/CII/PDF)"
  }, {
    "id": "300f8fe6-c186-11f1-8514-9200076c507e",
    "name": "Record incoming document for e-invoicing",
    "provider": "gov-fr.directory.record.incoming",
    "summary": "Validate and record incoming document",
    "notes": "Runs the syntax, addressing and unicity controls over an invoice. One that passes is recorded as receiver; one that fails is rejected with a 213 handled by the configured rejection workflow. Statuses and payments are recorded without the invoice controls."
  }, {
    "id": "9c15ac60-7b8c-11f1-bf7f-e1e339678581",
    "name": "Document is invoice?",
    "provider": "silo.if",
    "next": [{
      "code": "true",
      "steps": [{
        "id": "ab7e1200-7b8c-11f1-bf7f-e1e339678581",
        "name": "Set Folder",
        "provider": "silo.folder",
        "next": [],
        "summary": "Set folder to `Invoices · Expenses`{.font-medium}",
        "config": {
          "folder": "expenses"
        }
      }]
    }],
    "summary": "",
    "config": {
      "expr": "$schema endsWith \"bill/invoice\"",
      "scope": "doc"
    },
    "notes": "Checks for bill/invoice document"
  }, {
    "id": "dd14a3e0-0fb5-11f0-b078-9fc456829eca",
    "name": "Set state",
    "provider": "silo.state",
    "summary": "Set state to `received`{.state .received}",
    "config": {
      "state": "received"
    }
  }],
  "rescue": [{
    "id": "e109d2e0-0fb5-11f0-b078-9fc456829eca",
    "name": "Set state",
    "provider": "silo.state",
    "summary": "Set state to `error`{.state .error}",
    "config": {
      "state": "error"
    }
  }]
};

export const frPaSendInvoiceWorkflow = {
  "name": "PPF send document",
  "description": "Send an invoice, status or payment via Peppol and record it with PPF",
  "steps": [{
    "id": "72bc5070-1a17-11f1-a82f-e740c226ef51",
    "name": "Set state",
    "provider": "silo.state",
    "summary": "Set state to `processing`{.state .processing}",
    "config": {
      "state": "processing"
    }
  }, {
    "id": "f5aaed10-13c9-11f1-98a6-7dfa4cb26122",
    "name": "Sign envelope",
    "provider": "silo.close"
  }, {
    "id": "bf2c86b0-8127-11f1-9e29-9d2d7ab31d21",
    "name": "Document is an invoice?",
    "provider": "silo.if",
    "next": [{
      "status": "NA",
      "code": "true",
      "steps": [{
        "id": "1b5850d0-13bf-11f1-bc3b-b99ec414b63d",
        "name": "Generate UBL document",
        "provider": "ubl.generate",
        "summary": "Peppol France CIUS v1",
        "config": {
          "attach_invoice_pdf": false,
          "doc_type": "peppol-fr-cius",
          "private": false,
          "validate_ubl": false
        }
      }]
    }, {
      "status": "NA",
      "code": "false",
      "steps": [{
        "id": "e30aa7b0-8127-11f1-9e29-9d2d7ab31d21",
        "name": "Generate CDAR Status",
        "provider": "cii.generate",
        "summary": "France CTC Flow 6 CDAR (lifecycle status/payment)",
        "config": {
          "attach_invoice_pdf": false,
          "doc_type": "fr-ctc-cdar-flow6",
          "validate_cii": false
        }
      }]
    }],
    "config": {
      "expr": "doc['$schema'] endsWith 'bill/invoice'",
      "scope": "env"
    }
  }, {
    "id": "f1e30fa0-13c9-11f1-98a6-7dfa4cb26122",
    "name": "Record outgoing document for e-invoicing",
    "provider": "gov-fr.directory.record.outgoing"
  }, {
    "id": "e7f2da30-9d6b-11f1-b2d5-9fc4b0622900",
    "name": "Verify document can be sent",
    "provider": "peppol.validate.endpoint",
    "next": [{
      "code": "true",
      "steps": [{
        "id": "062087a0-9d6c-11f1-b2d5-9fc4b0622900",
        "name": "Send Peppol document",
        "provider": "peppol.send"
      }, {
        "id": "ff644960-9d6b-11f1-b2d5-9fc4b0622900",
        "name": "Forward document to PPF",
        "provider": "gov-fr.directory.forward"
      }]
    }, {
      "code": "false",
      "steps": [{
        "id": "03120f20-9d6c-11f1-b2d5-9fc4b0622900",
        "name": "Forward document to PPF",
        "provider": "gov-fr.directory.forward",
        "summary": "Forward to PPF (déposée – non transmise)",
        "config": {
          "not_transmitted": true
        }
      }]
    }]
  }, {
    "id": "80a9d5e0-1a17-11f1-a82f-e740c226ef51",
    "name": "Set state",
    "provider": "silo.state",
    "summary": "Set state to `completed`{.state .completed}",
    "config": {
      "state": "completed"
    }
  }],
  "rescue": [{
    "id": "892a8070-1a17-11f1-a82f-e740c226ef51",
    "name": "Set state",
    "provider": "silo.state",
    "summary": "Set state to `error`{.state .error}",
    "config": {
      "state": "error"
    }
  }]
};

export const WorkflowDiagram = ({workflow}) => {
  const stateColors = {
    processing: "yellow",
    sent: "blue",
    received: "blue",
    registered: "green",
    completed: "green",
    error: "red"
  };
  const StateChip = ({state, label}) => <Badge size="sm" color={stateColors[state] || "gray"} icon="square-small" iconType="solid">
      {label.charAt(0).toUpperCase() + label.slice(1)}
    </Badge>;
  const providerIcons = {
    "silo.state": "https://silo.invopop.com/images/status.svg",
    "silo.close": "https://silo.invopop.com/images/check-badge.svg",
    "silo.if": "https://assets.invopop.com/apps/silo/if.svg",
    "silo.folder": "https://silo.invopop.com/images/folder.svg",
    "silo.modify": "https://silo.invopop.com/images/modify.svg",
    "silo.correct": "https://silo.invopop.com/images/replace.svg",
    "silo.sleep": "https://assets.invopop.com/icons/sleep.svg",
    silo: "https://assets.invopop.com/apps/silo/icon.svg",
    "sequence.enumerate": "https://sequence.invopop.com/images/enumerate.svg",
    "transform.job.create": "https://transform.invopop.com/images/jobs.svg",
    webhook: "https://webhook.invopop.com/icon.svg",
    lookup: "magnifying-glass",
    dropbox: "https://dropbox.invopop.com/icon.png",
    pdf: "https://pdf.invopop.com/file-pdf.svg",
    peppol: "https://assets.invopop.com/apps/peppol/icon.svg",
    ubl: "https://assets.invopop.com/apps/ubl/logo.svg",
    cii: "https://assets.invopop.com/apps/cii/logo.svg",
    "gov-dk": "https://assets.invopop.com/flags/dk.svg",
    "gov-fi": "https://assets.invopop.com/flags/fi.svg",
    "gov-fr": "https://assets.invopop.com/flags/fr.svg",
    "chorus-pro": "https://assets.invopop.com/apps/chroruspro/icon.svg",
    "gov-es": "https://assets.invopop.com/apps/gov-es/icon.svg",
    "gov-es.sii": "https://assets.invopop.com/apps/sii/icon.svg",
    "gov-es.ticketbai": "https://assets.invopop.com/apps/ticketbai/icon.svg",
    "gov-es.facturae": "https://assets.invopop.com/apps/facturae/icon.svg",
    verifactu: "https://assets.invopop.com/apps/verifactu/icon.svg",
    "gov-pl": "https://assets.invopop.com/apps/ksef/icon.svg",
    "gov-sa": "https://assets.invopop.com/apps/zatca/icon.svg",
    "gov-ar": "https://assets.invopop.com/apps/arca/icon.svg",
    "at-pt": "https://assets.invopop.com/apps/at-pt/icon.svg",
    "sat-mx": "https://assets.invopop.com/apps/sat-mexico/icon.svg",
    "sw-sapien": "https://assets.invopop.com/apps/sw-sapien/icon.svg",
    "sdi-it": "https://assets.invopop.com/apps/sdi-italy/icon.svg",
    "ticket-it": "https://assets.invopop.com/apps/agenzia-entrate/icon.svg",
    "nfe-br": "https://assets.invopop.com/apps/notas-fiscais-eletronicas-brazil/icon.svg",
    chargebee: "https://assets.invopop.com/apps/chargebee/icon.svg",
    stripe: "https://assets.invopop.com/apps/stripe/icon.svg",
    email: "https://assets.invopop.com/apps/email/icon.svg",
    cron: "https://assets.invopop.com/apps/cron/icon.svg",
    tables: "https://assets.invopop.com/apps/tables/icon.svg",
    ilyda: "https://assets.invopop.com/apps/ilyda/icon.svg",
    invoicexpress: "https://assets.invopop.com/apps/invoicexpress/icon.svg",
    plemsi: "https://assets.invopop.com/flags/co.svg"
  };
  const iconFor = provider => {
    const parts = (provider || "").split(".");
    for (let i = parts.length; i > 0; i--) {
      const url = providerIcons[parts.slice(0, i).join(".")];
      if (url) return url;
    }
    return null;
  };
  const StepIcon = ({provider}) => {
    const url = iconFor(provider);
    return <span title={provider} className="flex h-7 w-7 shrink-0 items-center justify-center rounded-md border border-gray-950/10 bg-white dark:border-white/10 dark:bg-white/5">
        {url && url.startsWith("http") ? <img src={url} alt="" className="h-4 w-4" /> : null}
        {url && !url.startsWith("http") ? <Icon icon={url} iconType="solid" size={14} /> : null}
      </span>;
  };
  const renderSummary = summary => {
    const nodes = [];
    const re = /`([^`]+)`(\{[^}]*\})?/g;
    let last = 0;
    let m;
    let k = 0;
    while ((m = re.exec(summary)) !== null) {
      if (m.index > last) nodes.push(summary.slice(last, m.index));
      const attrs = m[2] || "";
      if (attrs.indexOf(".state") >= 0) {
        const state = (attrs.match(/\.state\s+\.([\w-]+)/) || [])[1] || m[1];
        nodes.push(<StateChip key={k++} state={state} label={m[1]} />);
      } else if (attrs) {
        nodes.push(<span key={k++} className="text-sm font-medium text-gray-700 dark:text-gray-300">
            {m[1]}
          </span>);
      } else {
        nodes.push(<code key={k++} className="text-sm rounded bg-gray-100 px-1 font-mono text-sm dark:bg-white/10">
            {m[1]}
          </code>);
      }
      last = m.index + m[0].length;
    }
    if (last < summary.length) nodes.push(summary.slice(last));
    return nodes;
  };
  const NoteRow = ({text}) => <div className="mt-4 mb-1 font-mono text-sm leading-5 text-gray-400 dark:text-gray-500">{"// " + text}</div>;
  const renderSteps = (steps, counter) => (steps || []).map(step => {
    counter.n += 1;
    const n = counter.n;
    const branches = (step.next || []).filter(b => b.steps && b.steps.length > 0);
    return <div key={step.id || "step-" + n}>
          {step.notes ? <NoteRow text={step.notes} /> : null}
          <div className="mt-2.5 flex items-center">
            <span className="absolute left-0 w-10 text-center font-mono text-sm text-gray-400 select-none dark:text-gray-500">
              {n}
            </span>
            <div className="flex min-w-0 flex-1 items-center gap-2 rounded-xl border border-gray-950/5 bg-white px-2 py-2 dark:border-white/10 dark:bg-gray-900">
              <StepIcon provider={step.provider} />
              <span className="text-sm shrink-0 font-medium text-gray-900 dark:text-gray-100">{step.name}</span>
              {step.summary ? <span className="text-sm min-w-0 truncate text-gray-500 dark:text-gray-400">{renderSummary(step.summary)}</span> : null}
            </div>
          </div>
          {branches.length > 0 ? <div className="ml-5 border-l border-gray-200 -my-1 py-1 pl-6 dark:border-white/10">
              {branches.map((branch, bi) => <div key={branch.code || branch.status || bi}>
                  <div className="mt-4">
                    <span className="rounded-md bg-gray-200/70 px-2 py-1 font-mono text-sm text-gray-600 dark:bg-white/10 dark:text-gray-300">
                      {branch.code || branch.status}
                    </span>
                  </div>
                  {renderSteps(branch.steps, counter)}
                </div>)}
            </div> : null}
        </div>;
  });
  const counter = {
    n: 0
  };
  const wf = workflow || ({});
  return <div className="not-prose relative my-5 rounded-2xl border border-gray-950/5 bg-gray-50 py-3 pr-4 pb-5 pl-12 dark:border-white/10 dark:bg-white/[0.03]">
      {renderSteps(wf.steps, counter)}
      {wf.rescue && wf.rescue.length > 0 ? <div className="mt-6 border-t border-dashed border-gray-300 dark:border-white/10">
          <NoteRow text="If any step fails" />
          {renderSteps(wf.rescue, counter)}
        </div> : null}
    </div>;
};

The France PA invoicing flow covers regulated B2B exchanges where both parties are registered in the French Directory. All other scenarios are handled by the [e-reporting](/guides/fr-pa-reporting) (flux 10) flow.

This guide walks through how to implement e-invoicing obligations in France:

* [Workflows](#workflows): sending and receiving workflows for French documents (payments, statuses and invoices).
* [Sending](#sending): recording the invoice, generating the format, transmitting over Peppol, and forwarding the F1 copy to the PPF.
* [Receiving](#receiving): detecting the inbound format, importing it into GOBL, and recording it against your registered party — or rejecting it with a `213`.
* [Invoice formats](#invoice-formats): UBL, CII, and Factur-X and how to choose between them.
* [Public sector](#public-sector-b2g-and-g2b): invoices to public entities travel over Chorus Pro instead of Peppol, and public entities can now invoice you the same way.
* [Self-billing](#self-billing): how *autofacturation* maps onto the same send and receive workflows using the `self-billed` tag.
* [VAT-exempt invoices](#vat-exempt-invoices): why an invoice exempt under articles 261 to 261 E is recorded but never sent to the PPF.
* [Reading submitted invoices](#reading-submitted-invoices): follow every sent and received invoice, and its PPF state, from the France dashboard.
* [Example invoices](#example-invoices): minimal GOBL documents and their built versions, ready to paste into the GOBL builder.

## Workflows

These workflows are shared between invoice and [status documents](/guides/fr-pa-status). The same workflow processes the different schemas and will perform different actions depending on the document type.

### Sending

The send workflow records the invoice for compliance, generates the chosen format, transmits it to the receiver’s PA over Peppol, and forwards the F1 copy to the PPF. The mandatory `200` Déposée status is transmitted automatically alongside the F1.

The **PPF record document** step validates SIRENs and checks both parties against the Annuaire. Documents where either side is missing are rejected and should branch into the [reporting flow](/guides/fr-pa-reporting)  for non-regulated transactions.

It also sets aside invoices that fall outside the mandate — see [VAT-exempt invoices](#vat-exempt-invoices) below.

The **Forward document to PPF** step generates and transmits to the PPF the F1 copy of the invoice and its `200` Déposée status. When the step's **Deposited and not transmitted** toggle is enabled, the status carries the `NON_TRANSMISE` reason and reports a *déposée – non transmise* instead of the standard *déposée*. This should be used when the recipient has no active receiving address. Gate that branch on the Peppol [Validate endpoint](/guides/peppol#validating-the-customer-endpoint) action: when it returns `false`, the invoice can't be delivered over Peppol and the workflow should route into a forward step configured as not transmitted.

<Card iconType="duotone" title="PPF send invoice" icon="code-branch" href="https://console.invopop.com/redirect/workflows/new?template=fr-fr-pa-send-invoice" horizontal>
  Add to my workspace →
</Card>

<Tabs>
  <Tab title="Workflow">
    <WorkflowDiagram workflow={frPaSendInvoiceWorkflow} />
  </Tab>

  <Tab title="Code">
    ```json PPF send document workflow theme={"system"}
    {
        "name": "PPF send document",
        "description": "Send an invoice, status or payment via Peppol and record it with PPF",
        "steps": [
            {
                "id": "72bc5070-1a17-11f1-a82f-e740c226ef51",
                "name": "Set state",
                "provider": "silo.state",
                "summary": "Set state to `processing`{.state .processing}",
                "config": {
                    "state": "processing"
                }
            },
            {
                "id": "f5aaed10-13c9-11f1-98a6-7dfa4cb26122",
                "name": "Sign envelope",
                "provider": "silo.close"
            },
            {
                "id": "bf2c86b0-8127-11f1-9e29-9d2d7ab31d21",
                "name": "Document is an invoice?",
                "provider": "silo.if",
                "next": [
                    {
                        "status": "NA",
                        "code": "true",
                        "steps": [
                            {
                                "id": "1b5850d0-13bf-11f1-bc3b-b99ec414b63d",
                                "name": "Generate UBL document",
                                "provider": "ubl.generate",
                                "summary": "Peppol France CIUS v1",
                                "config": {
                                    "attach_invoice_pdf": false,
                                    "doc_type": "peppol-fr-cius",
                                    "private": false,
                                    "validate_ubl": false
                                }
                            }
                        ]
                    },
                    {
                        "status": "NA",
                        "code": "false",
                        "steps": [
                            {
                                "id": "e30aa7b0-8127-11f1-9e29-9d2d7ab31d21",
                                "name": "Generate CDAR Status",
                                "provider": "cii.generate",
                                "summary": "France CTC Flow 6 CDAR (lifecycle status/payment)",
                                "config": {
                                    "attach_invoice_pdf": false,
                                    "doc_type": "fr-ctc-cdar-flow6",
                                    "validate_cii": false
                                }
                            }
                        ]
                    }
                ],
                "config": {
                    "expr": "doc['$schema'] endsWith 'bill/invoice'",
                    "scope": "env"
                }
            },
            {
                "id": "f1e30fa0-13c9-11f1-98a6-7dfa4cb26122",
                "name": "Record outgoing document for e-invoicing",
                "provider": "gov-fr.directory.record.outgoing"
            },
            {
                "id": "e7f2da30-9d6b-11f1-b2d5-9fc4b0622900",
                "name": "Verify document can be sent",
                "provider": "peppol.validate.endpoint",
                "next": [
                    {
                        "code": "true",
                        "steps": [
                            {
                                "id": "062087a0-9d6c-11f1-b2d5-9fc4b0622900",
                                "name": "Send Peppol document",
                                "provider": "peppol.send"
                            },
                            {
                                "id": "ff644960-9d6b-11f1-b2d5-9fc4b0622900",
                                "name": "Forward document to PPF",
                                "provider": "gov-fr.directory.forward"
                            }
                        ]
                    },
                    {
                        "code": "false",
                        "steps": [
                            {
                                "id": "03120f20-9d6c-11f1-b2d5-9fc4b0622900",
                                "name": "Forward document to PPF",
                                "provider": "gov-fr.directory.forward",
                                "summary": "Forward to PPF (déposée – non transmise)",
                                "config": {
                                    "not_transmitted": true
                                }
                            }
                        ]
                    }
                ]
            },
            {
                "id": "80a9d5e0-1a17-11f1-a82f-e740c226ef51",
                "name": "Set state",
                "provider": "silo.state",
                "summary": "Set state to `completed`{.state .completed}",
                "config": {
                    "state": "completed"
                }
            }
        ],
        "rescue": [
            {
                "id": "892a8070-1a17-11f1-a82f-e740c226ef51",
                "name": "Set state",
                "provider": "silo.state",
                "summary": "Set state to `error`{.state .error}",
                "config": {
                    "state": "error"
                }
            }
        ]
    }
    ```
  </Tab>
</Tabs>

### Receiving

The receive workflow detects the inbound format, imports it into a GOBL document, and records it against your registered party. The same workflow handles UBL, CII, and Factur-X — the format-detection branch routes each payload to the correct importer.

Before an invoice arriving from another platform is recorded, it goes through a series of controls and is rejected if invalid. Only invoices are automatically validated and rejected; incoming lifecycle statuses are simply recorded.

An invoice that fails a control is not recorded. The workflow creates a silo entry holding a new <Badge color="gray">213</Badge> [*Rejetée*](/guides/fr-pa-status#issued-by-the-platform) under the motif of the control that turned the invoice down, and runs it through the rejection workflow.

Set that workflow once for the whole workspace in **Incoming Document Rejection Workflow**, under the France app's configuration. Selecting a **Rejection Workflow** directly on the receiving step overrides it, so a flow that needs its own can have one.

<Card iconType="duotone" title="PPF receive invoice" icon="code-branch" href="https://console.invopop.com/redirect/workflows/new?template=fr-fr-pa-receive-invoice" horizontal>
  Add to my workspace →
</Card>

<Tabs>
  <Tab title="Workflow">
    <WorkflowDiagram workflow={frPaReceiveInvoiceWorkflow} />
  </Tab>

  <Tab title="Code">
    ```json PPF receive document workflow theme={"system"}
    {
        "name": "PPF receive document",
        "description": "Receive an invoice, status or payment via Peppol, run the PPF recording controls over invoices, and raise a 213 for the ones that fail",
        "steps": [
            {
                "id": "db61c3c0-0fb5-11f0-b078-9fc456829eca",
                "name": "Import Peppol document",
                "provider": "peppol.import",
                "next": [
                    {
                        "status": "NA",
                        "code": "UBL",
                        "steps": [
                            {
                                "id": "62e94570-8fdb-11f0-a8fb-61ec9e5a76ba",
                                "name": "Import UBL document",
                                "provider": "ubl.import"
                            }
                        ]
                    },
                    {
                        "status": "NA",
                        "code": "CII",
                        "steps": [
                            {
                                "id": "6480ae50-8fdb-11f0-a8fb-61ec9e5a76ba",
                                "name": "Import CII document",
                                "provider": "cii.import"
                            }
                        ]
                    },
                    {
                        "status": "NA",
                        "code": "PDF",
                        "steps": [
                            {
                                "id": "26ba4f80-1e2a-11f1-8bfb-2beaa1df60f0",
                                "name": "Import Factur-X PDF",
                                "provider": "cii.pdf.import"
                            }
                        ]
                    }
                ],
                "notes": "Receives the Peppol document and returns the format in a code (UBL/CII/PDF)"
            },
            {
                "id": "300f8fe6-c186-11f1-8514-9200076c507e",
                "name": "Record incoming document for e-invoicing",
                "provider": "gov-fr.directory.record.incoming",
                "summary": "Validate and record incoming document",
                "notes": "Runs the syntax, addressing and unicity controls over an invoice. One that passes is recorded as receiver; one that fails is rejected with a 213 handled by the configured rejection workflow. Statuses and payments are recorded without the invoice controls."
            },
            {
                "id": "9c15ac60-7b8c-11f1-bf7f-e1e339678581",
                "name": "Document is invoice?",
                "provider": "silo.if",
                "next": [
                    {
                        "code": "true",
                        "steps": [
                            {
                                "id": "ab7e1200-7b8c-11f1-bf7f-e1e339678581",
                                "name": "Set Folder",
                                "provider": "silo.folder",
                                "next": [],
                                "summary": "Set folder to `Invoices · Expenses`{.font-medium}",
                                "config": {
                                    "folder": "expenses"
                                }
                            }
                        ]
                    }
                ],
                "summary": "",
                "config": {
                    "expr": "$schema endsWith \"bill/invoice\"",
                    "scope": "doc"
                },
                "notes": "Checks for bill/invoice document"
            },
            {
                "id": "dd14a3e0-0fb5-11f0-b078-9fc456829eca",
                "name": "Set state",
                "provider": "silo.state",
                "summary": "Set state to `received`{.state .received}",
                "config": {
                    "state": "received"
                }
            }
        ],
        "rescue": [
            {
                "id": "e109d2e0-0fb5-11f0-b078-9fc456829eca",
                "name": "Set state",
                "provider": "silo.state",
                "summary": "Set state to `error`{.state .error}",
                "config": {
                    "state": "error"
                }
            }
        ]
    }
    ```
  </Tab>
</Tabs>

### Public sector (B2G and G2B)

An invoice to a French public entity follows the same path as any other: it is recorded the same way, and its F1 copy and `200` Déposée status reach the PPF unchanged. Only delivery differs — it goes to **Chorus Pro** instead of Peppol.

You do not decide this yourself. The **Is B2G?** step answers it, reading what the record step already worked out — or, for an invoice that has not been recorded, looking the counterparty up in the Annuaire itself:

| Result | Meaning | Deliver with |
| - | - | - |
| `true` | the buyer is routed to Chorus Pro's public sphere | **Send to Chorus Pro** |
| `false` | everything else | **Send Peppol document** |

Branch on that result the same way you branch on [Directory lookup](/guides/fr-lookup). Keep it after the record step, which is where the answer comes from. Everything after it is shared: both paths forward to the PPF.

<Card iconType="duotone" title="PPF send invoice (public sector)" icon="code-branch" href="https://console.invopop.com/redirect/workflows/new?template=fr-fr-pa-send-invoice-b2g" horizontal>
  Add to my workspace →
</Card>

<Tabs>
  <Tab title="Workflow">
    <WorkflowDiagram workflow={frPaSendInvoiceB2GWorkflow} />
  </Tab>

  <Tab title="Code">
    ```json PPF send document (public sector) workflow theme={"system"}
    {
        "name": "PPF send document (public sector)",
        "description": "Send an invoice via Chorus Pro or Peppol depending on the buyer, and record it with PPF",
        "app_id": "gov-fr",
        "country": "fr",
        "steps": [
            {
                "id": "067bc16d-c1a7-11f1-8390-4eb134dbe674",
                "name": "Set state",
                "provider": "silo.state",
                "summary": "Set state to `processing`{.state .processing}",
                "config": {
                    "state": "processing"
                }
            },
            {
                "id": "067e5b0d-c1a7-11f1-a890-4eb134dbe674",
                "name": "Sign envelope",
                "provider": "silo.close"
            },
            {
                "id": "067e5bad-c1a7-11f1-a27a-4eb134dbe674",
                "name": "Document is an invoice?",
                "provider": "silo.if",
                "next": [
                    {
                        "status": "NA",
                        "code": "true",
                        "steps": [
                            {
                                "id": "067e5bf8-c1a7-11f1-a34e-4eb134dbe674",
                                "name": "Generate UBL document",
                                "provider": "ubl.generate",
                                "summary": "Peppol France CIUS v1",
                                "config": {
                                    "attach_invoice_pdf": false,
                                    "doc_type": "peppol-fr-cius",
                                    "private": false,
                                    "validate_ubl": false
                                }
                            }
                        ]
                    },
                    {
                        "status": "NA",
                        "code": "false",
                        "steps": [
                            {
                                "id": "067e5c2f-c1a7-11f1-a517-4eb134dbe674",
                                "name": "Generate CDAR Status",
                                "provider": "cii.generate",
                                "summary": "France CTC Flow 6 CDAR (lifecycle status/payment)",
                                "config": {
                                    "attach_invoice_pdf": false,
                                    "doc_type": "fr-ctc-cdar-flow6",
                                    "validate_cii": false
                                }
                            }
                        ]
                    }
                ],
                "config": {
                    "expr": "doc['$schema'] endsWith 'bill/invoice'",
                    "scope": "env"
                }
            },
            {
                "id": "067e5c5e-c1a7-11f1-9b94-4eb134dbe674",
                "name": "Record outgoing document for e-invoicing",
                "provider": "gov-fr.directory.record.outgoing"
            },
            {
                "id": "067e5ddf-c1a7-11f1-aff3-4eb134dbe674",
                "name": "Is B2G?",
                "provider": "gov-fr.chorus-pro.lookup",
                "summary": "Chorus Pro for a public buyer, Peppol otherwise",
                "next": [
                    {
                        "status": "NA",
                        "code": "true",
                        "steps": [
                            {
                                "id": "067e5daf-c1a7-11f1-a744-4eb134dbe674",
                                "name": "Send to Chorus Pro",
                                "provider": "gov-fr.chorus-pro.send",
                                "summary": "Deliver to the public sphere"
                            },
                            {
                                "id": "067e5d67-c1a7-11f1-875f-4eb134dbe674",
                                "name": "Forward document to PPF",
                                "provider": "gov-fr.directory.forward"
                            }
                        ]
                    },
                    {
                        "status": "NA",
                        "code": "false",
                        "steps": [
                            {
                                "id": "067e5c7f-c1a7-11f1-96f3-4eb134dbe674",
                                "name": "Verify document can be sent",
                                "provider": "peppol.validate.endpoint",
                                "next": [
                                    {
                                        "code": "true",
                                        "steps": [
                                            {
                                                "id": "067e5ca2-c1a7-11f1-a3ed-4eb134dbe674",
                                                "name": "Send Peppol document",
                                                "provider": "peppol.send"
                                            },
                                            {
                                                "id": "067e5cc1-c1a7-11f1-99dd-4eb134dbe674",
                                                "name": "Forward document to PPF",
                                                "provider": "gov-fr.directory.forward"
                                            }
                                        ]
                                    },
                                    {
                                        "code": "false",
                                        "steps": [
                                            {
                                                "id": "067e5ce6-c1a7-11f1-81bc-4eb134dbe674",
                                                "name": "Forward document to PPF",
                                                "provider": "gov-fr.directory.forward",
                                                "summary": "Forward to PPF (déposée – non transmise)",
                                                "config": {
                                                    "not_transmitted": true
                                                }
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                "id": "067e5d0b-c1a7-11f1-af09-4eb134dbe674",
                "name": "Set state",
                "provider": "silo.state",
                "summary": "Set state to `completed`{.state .completed}",
                "config": {
                    "state": "completed"
                }
            }
        ],
        "rescue": [
            {
                "id": "067e6072-c1a7-11f1-ba65-4eb134dbe674",
                "name": "Set state",
                "provider": "silo.state",
                "summary": "Set state to `error`{.state .error}",
                "config": {
                    "state": "error"
                }
            }
        ]
    }
    ```
  </Tab>
</Tabs>

<Note>
  Chorus Pro adds its own rules on top of the norm, and they apply only to public-sector invoices. The record step enforces them once an invoice is identified as `b2g` — invoice numbers of 20 characters or fewer, a SIRET alongside every SIREN, an IBAN of exactly 27 characters, and the length limits Chorus Pro places on names, notes and references. An invoice that breaks one is rejected at record rather than minutes later by Chorus Pro.
</Note>

#### Receiving from a public entity (G2B)

G2B is the same exchange in reverse: a French public entity issues an invoice to your business. It is new with the 2026 reform — public bodies previously had no route to invoice the private sector electronically.

The path differs from a B2B invoice in where it comes from, not in what you do with it:

1. The public entity submits the invoice to Chorus Pro, in UBL or Factur-X.
2. Chorus Pro delivers it to Invopop, addressed to the Annuaire line your party is registered under. That line is what decides which workspace receives it — so the party must be registered before any public entity can invoice it.
3. Invopop converts it to GOBL and starts your Chorus Pro workflow on it.
4. The invoice is recorded against your party, exactly as an inbound Peppol invoice would be.

From there it behaves like any other received invoice: it appears in the France dashboard, and you answer with [status updates](/guides/fr-pa-status) as the invoice is accepted, disputed or paid.

Two things are worth knowing. The lifecycle statuses you send back follow the AFNOR norm rather than Chorus Pro's own vocabulary — Chorus Pro translates its internal codes before they reach you, so `Rejetée` arrives as `210` and its own rejection motifs arrive as their AFNOR equivalents. And the workspace an invoice lands in is decided entirely by the Annuaire line it is addressed to, which is why registration is a prerequisite rather than a convenience.

### Invoice formats

The PA specification accepts five formats. In practice the three base formats below cover essentially all real-world traffic, and Invopop supports both sending and receiving on all three.

| Format | Notes |
| - | - |
| [UBL](/apps/oasis-ubl) | Peppol France CIUS — recommended default. Native Peppol format with the widest receiver support. |
| [CII](/apps/uncefact-cii) | UN/CEFACT XML, semantically equivalent to UBL. Common in cross-border and industrial contexts. |
| [Factur-X](/apps/uncefact-cii) | Hybrid PDF/A-3 with embedded CII. Identical to [ZUGFeRD](/guides/de-ubl) and aligned with EN 16931. |

Switching formats is a workflow configuration away rather than a data-model change. You author and validate one GOBL invoice, and the workflow's generation step produces whichever format the counterparty expects.

### Billing mode

Mandatory on every flux 2 and flux 10 B2B invoice and set in GOBL under `tax.ext.fr-ctc-billing-mode`. The prefix carries the nature of the operation: `B` goods (*biens*), `S` services, `M` mixed, plus a suffix for the payment context.

| Goods | Services | Mixed | Payment context |
| - | - | - | - |
| `B1` | `S1` | `M1` | Standard submission (*dépôt d'une facture*) |
| `B2` | `S2` | `M2` | Already-paid invoice |
| — | `S3` | — | Subcontracting with direct payment (B2G only) |
| `B4` | `S4` | `M4` | Final invoice after a down payment |
| — | `S5` | — | Subcontractor invoice |
| — | `S6` | — | Co-contractor invoice |
| `B7` | `S7` | — | VAT already collected via e-reporting |
| `B8` | `S8` | `M8` | Multi-vendor invoice |

The full list of billing-mode codes is documented in the [`fr-ctc-flow2-v1` addon reference](https://docs.gobl.org/addons/fr-ctc-flow2-v1).

Suffix `1` is the ordinary case — a plain invoice submitted for payment. Left unset, the add-on defaults the mode to `M1` (`M2` when fully paid) — pin the prefix that matches the nature of the operation, as the [example invoices](/guides/fr-pa-invoicing#example-invoices) do.

### VAT tax keys → UNTDID 5305

GOBL sets the `untdid-tax-category` (and `cef-vatex` exemption reason where one applies) from the tax key on each line — you pick the key, the add-on derives the codes:

| GOBL tax key | Category | Exemption reason | Use for |
| - | - | - | - |
| `standard` | `S` | — | Domestic VAT at 20% / 10% / 5.5% / 2.1% |
| `zero` | `Z` | — | Zero-rated supplies |
| `exempt` | `E` | per note | Exempt operations (Art. 261 CGI — cite the article in a note) |
| `reverse-charge` | `AE` | `VATEX-EU-AE` | Autoliquidation, e.g. building subcontracting |
| `intra-community` | `K` | `VATEX-EU-IC` | Intra-EU B2B supplies |
| `export` | `G` | `VATEX-EU-G` | Exports outside the EU |
| `outside-scope` | `O` | `VATEX-EU-O` | Operations outside the scope of VAT |

The full field-level rules (permitted document types, VAT percents, and party identifier schemes) are maintained in the add-on.

## Self-billing

In self-billing (*also called autofacturation*), the **customer**, rather than the supplier, creates and issues the invoice on the supplier's behalf. The buyer's platform acts as the sending PA and triggers the flow 1 reporting to the PPF, while the supplier's platform receives the invoice.

Invopop covers self-billing with the **same send and receive workflows described above**. The only difference is on the document, which carries the `self-billed` tag.

<Note>
  France does not treat self-billing as a document type of its own: it is a standard invoice with the `untdid-document-type` extension set to `389`. The [`fr-ctc-flow2-v1`](https://docs.gobl.org/addons/fr-ctc-flow2-v1#standard-self-billed) add-on derives that code from the `self-billed` tag automatically, so you never set it yourself.
</Note>

The parties keep their natural roles, the vendor remains the `supplier`, and the buyer the `customer`. When Invopop detects the tag, it acts on behalf of the customer and adjusts the flow automatically:

* The **customer**, rather than the supplier, is validated as the registered party.
* The invoice is delivered over Peppol to the **supplier's** PA.
* The invoice is recorded and forwarded to the PPF as a self-billed invoice.

France also requires the *autofacturation* note on the invoice, which appears as a `legal` note, as shown in the [example](#example-invoices) below.

### Step by step

How each step of the self-billing use case maps to an action in Invopop, on both the buyer (sending) and supplier (receiving) side. Statuses are built and exchanged as described in the [status guide](/guides/fr-pa-status).

| Step | Actor | In Invopop |
| - | - | - |
| 1 | Buyer | Creates a GOBL invoice tagged `self-billed`. |
| 2 | Buyer's PA | The buyer's [send workflow](#sending) generates the UBL, CII, or Factur-X document and transmits it as normal. The mandatory `200` Déposée status is emitted automatically once the PPF accepts flow 1. |
| 3 | Seller's PA | The seller's [receive workflow](#receiving) imports the invoice and records it, resolving the seller's registered party as the `supplier`. |
| 4 | Seller | Upon reception of payment, the seller builds a `bill.Payment` referencing the invoice, sends it to the customer and forwards it to the PPF. |
| 5 | Buyer | The buyer's receive workflow imports the inbound CDAR and records it against the invoice. |

## VAT-exempt invoices

The e-invoicing obligation in article 289 bis of the CGI does not cover transactions exempt from VAT under articles 261 to 261 E — insurance, medical care, education and the other exemptions in that range. Those invoices are outside the mandate and must not be deposited at the PPF, which rejects them outright.

Invopop recognises them and stops before sending. An invoice is treated as exempt when **both** of the following hold:

* every VAT category on the invoice is `E` (exempt) or `O` (outside scope), **and**
* the breakdown carries one of the `VATEX-FR-CGI261*` exemption codes in the `cef-vatex` extension.

When that happens:

* the invoice is **recorded** in your workspace as usual, so it stays on the France dashboard and in the silo;
* **no F1 copy** is sent to the PPF, and **no lifecycle status** is forwarded for it — neither the automatic *déposée* nor any status you record later, such as *Encaissée*. With no deposit, the PPF has nothing to record a status against;
* the PPF status column shows <Badge color="blue">Exempt</Badge>;
* the workflow completes successfully rather than failing.

<Note>
  Issue the invoice to your customer exactly as before. Being outside the e-invoicing mandate changes nothing about your ordinary invoicing obligations, including the mandatory mention of the legal basis for the exemption required by article 242 nonies A of Annex II to the CGI. In GOBL that text comes from a `tax.note` with category `VAT`; the `cef-vatex` extension alone only produces the code.
</Note>

An invoice that mixes exempt and taxable lines stays **inside** the mandate and is deposited normally — the rule only applies when the whole VAT breakdown is exempt. Exemptions under other articles are unaffected too: `VATEX-FR-FRANCHISE` (*franchise en base*, article 293 B) is deposited as usual.

E-reporting is a separate obligation and is not affected by this rule. If the transaction falls under [e-reporting](/guides/fr-pa-reporting) — a non-taxable customer, or a counterparty outside France — report it there as you normally would.

## Reading submitted invoices

The France dashboard's **E-Invoicing Flow 2** tab lists every invoice the workspace has sent or received, newest first. In the Console, open the **Apps** view, select the **France** app, and switch to the **E-Invoicing Flow 2** tab.

Each row shows the Invoice code, the Supplier and Customer SIREN, the PPF status of the mandatory F1 copy, the Role (Sender when you issued the invoice, Receiver when it arrived from a counterparty), the Silo entry that holds the invoice document, the Issue date, the Owner SIREN (the registered party the invoice belongs to), the document Type (standard, self-billed, corrected, credit note, …), and the Invoice ID.

The PPF status column tracks the copy forwarded to the tax authority:

| PPF status | Meaning |
| - | - |
| <Badge color="gray">Ready</Badge> | Recorded on the platform; nothing sent to the PPF yet. |
| <Badge color="orange">Pending</Badge> | Sent; awaiting the PPF business acknowledgement. |
| <Badge color="green">Accepted</Badge> | The PPF accepted the document. |
| <Badge color="red">Rejected</Badge> | The PPF rejected the document. |
| <Badge color="blue">Exempt</Badge> | Outside the mandate; nothing was sent, and nothing will be. |

<Note>
  Clicking the Invoice code looks up all associated statuses on the **E-Invoicing Flow 6** tab, filtered by the Invoice ID.
</Note>

Filter the table by **Supplier SIREN**, **Customer SIREN**, **Invoice code**, or **Invoice ID**.

## Example invoices

Each example below pairs a hand-authored minimal GOBL invoice with the built version produced by `gobl build`. Paste either into the [GOBL builder](https://build.gobl.org) to preview the document, or use the minimal version as a starting point for your own integration.

<AccordionGroup>
  <Accordion title="PA B2B invoice (domestic)">
    A regulated B2B invoice between two French parties, both registered in the Annuaire. The [`fr-ctc-flow2-v1`](https://docs.gobl.org/addons/fr-ctc-flow2-v1) add-on drives validation for the PA e-invoicing flow.

    Notice:

    * both parties carry a `SIREN` identity with `iso-scheme-id` `0002` and a `peppol` inbox under scheme `0225` so the workflow can route via Peppol,
    * `fr-ctc-billing-mode` `S1` marks the standard submission (*dépôt*) of a services invoice; `untdid-document-type` `380` confirms the commercial invoice type,
    * the `payment`, `payment-method`, and `payment-term` notes carry the French legal-mention text (penalty clauses, late-payment terms, early-payment discount), each tagged with the appropriate UNTDID 4451 subject code,
    * `ordering.code` records the customer's purchase order reference.

    <CodeGroup>
      ```json PA B2B Invoice theme={"system"}
      {
          "$schema": "https://gobl.org/draft-0/bill/invoice",
          "$regime": "FR",
          "$addons": [
              "fr-ctc-flow2-v1"
          ],
          "type": "standard",
          "series": "FAC",
          "code": "2024-00001",
          "issue_date": "2024-06-13",
          "currency": "EUR",
          "tax": {
              "ext": {
                  "fr-ctc-billing-mode": "S1",
                  "untdid-document-type": "380"
              }
          },
          "supplier": {
              "name": "Fournisseur Example SARL",
              "tax_id": {
                  "country": "FR",
                  "code": "732829320"
              },
              "identities": [
                  {
                      "type": "SIREN",
                      "code": "732829320",
                      "ext": {
                          "iso-scheme-id": "0002"
                      }
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "732829320"
                  }
              ],
              "addresses": [
                  {
                      "num": "123",
                      "street": "Rue de la Paix",
                      "locality": "Paris",
                      "code": "75001",
                      "country": "FR"
                  }
              ],
              "emails": [
                  {
                      "addr": "facturation@fournisseur.fr"
                  }
              ],
              "telephones": [
                  {
                      "num": "+33100200300"
                  }
              ]
          },
          "customer": {
              "name": "Client Example SAS",
              "tax_id": {
                  "country": "FR",
                  "code": "356000000"
              },
              "identities": [
                  {
                      "type": "SIREN",
                      "code": "356000000",
                      "ext": {
                          "iso-scheme-id": "0002"
                      }
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "356000000"
                  }
              ],
              "addresses": [
                  {
                      "num": "456",
                      "street": "Avenue des Champs-Elysees",
                      "locality": "Paris",
                      "code": "75008",
                      "country": "FR"
                  }
              ],
              "emails": [
                  {
                      "addr": "comptabilite@client.fr"
                  }
              ],
              "telephones": [
                  {
                      "num": "+33100200400"
                  }
              ]
          },
          "lines": [
              {
                  "quantity": "10",
                  "item": {
                      "name": "Services de conseil",
                      "price": "100.00",
                      "unit": "h"
                  },
                  "discounts": [
                      {
                          "percent": "10%",
                          "reason": "Remise fidelite"
                      }
                  ],
                  "taxes": [
                      {
                          "cat": "VAT",
                          "rate": "standard"
                      }
                  ]
              }
          ],
          "ordering": {
              "code": "PO-2024-001"
          },
          "notes": [
              {
                  "key": "payment",
                  "text": "Une penalite fixe de 40 EUR sera appliquee en cas de retard de paiement.",
                  "ext": {
                      "untdid-text-subject": "PMT"
                  }
              },
              {
                  "key": "payment-method",
                  "text": "Des penalites de retard s'appliquent conformement a nos conditions generales de vente.",
                  "ext": {
                      "untdid-text-subject": "PMD"
                  }
              },
              {
                  "key": "payment-term",
                  "text": "Aucun escompte n'est offert pour paiement anticipe.",
                  "ext": {
                      "untdid-text-subject": "AAB"
                  }
              }
          ],
          "payment": {
              "instructions": {
                  "key": "credit-transfer",
                  "credit_transfer": [
                      {
                          "iban": "FR7630006000011234567890189",
                          "name": "Fournisseur Example SARL"
                      }
                  ]
              },
              "terms": {
                  "detail": "Paiement a 30 jours"
              }
          }
      }
      ```

      ```json Built version theme={"system"}
      {
      	"$schema": "https://gobl.org/draft-0/bill/invoice",
      	"$regime": "FR",
      	"$addons": [
      		"eu-en16931-v2017",
      		"fr-ctc-flow2-v1"
      	],
      	"type": "standard",
      	"series": "FAC",
      	"code": "2024-00001",
      	"issue_date": "2024-06-13",
      	"currency": "EUR",
      	"tax": {
      		"rounding": "currency",
      		"ext": {
      			"fr-ctc-billing-mode": "S1",
      			"untdid-document-type": "380"
      		}
      	},
      	"supplier": {
      		"name": "Fournisseur Example SARL",
      		"tax_id": {
      			"country": "FR",
      			"code": "44732829320"
      		},
      		"identities": [
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "732829320",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:732829320"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "732829320"
      			}
      		],
      		"addresses": [
      			{
      				"num": "123",
      				"street": "Rue de la Paix",
      				"locality": "Paris",
      				"code": "75001",
      				"country": "FR"
      			}
      		],
      		"emails": [
      			{
      				"addr": "facturation@fournisseur.fr"
      			}
      		],
      		"telephones": [
      			{
      				"num": "+33100200300"
      			}
      		]
      	},
      	"customer": {
      		"name": "Client Example SAS",
      		"tax_id": {
      			"country": "FR",
      			"code": "39356000000"
      		},
      		"identities": [
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "356000000",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:356000000"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "356000000"
      			}
      		],
      		"addresses": [
      			{
      				"num": "456",
      				"street": "Avenue des Champs-Elysees",
      				"locality": "Paris",
      				"code": "75008",
      				"country": "FR"
      			}
      		],
      		"emails": [
      			{
      				"addr": "comptabilite@client.fr"
      			}
      		],
      		"telephones": [
      			{
      				"num": "+33100200400"
      			}
      		]
      	},
      	"lines": [
      		{
      			"i": 1,
      			"quantity": "10",
      			"item": {
      				"name": "Services de conseil",
      				"price": "100.00",
      				"unit": "h"
      			},
      			"sum": "1000.00",
      			"discounts": [
      				{
      					"reason": "Remise fidelite",
      					"percent": "10%",
      					"amount": "100.00"
      				}
      			],
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"rate": "general",
      					"percent": "20%",
      					"ext": {
      						"untdid-tax-category": "S"
      					}
      				}
      			],
      			"total": "900.00"
      		}
      	],
      	"ordering": {
      		"code": "PO-2024-001"
      	},
      	"payment": {
      		"terms": {
      			"notes": "Paiement a 30 jours"
      		},
      		"instructions": {
      			"key": "credit-transfer",
      			"credit_transfer": [
      				{
      					"iban": "FR7630006000011234567890189",
      					"name": "Fournisseur Example SARL"
      				}
      			],
      			"ext": {
      				"untdid-payment-means": "30"
      			}
      		}
      	},
      	"totals": {
      		"sum": "900.00",
      		"total": "900.00",
      		"taxes": {
      			"categories": [
      				{
      					"code": "VAT",
      					"rates": [
      						{
      							"key": "standard",
      							"ext": {
      								"untdid-tax-category": "S"
      							},
      							"base": "900.00",
      							"percent": "20%",
      							"amount": "180.00"
      						}
      					],
      					"amount": "180.00"
      				}
      			],
      			"sum": "180.00"
      		},
      		"tax": "180.00",
      		"total_with_tax": "1080.00",
      		"payable": "1080.00"
      	},
      	"notes": [
      		{
      			"key": "payment",
      			"text": "Une penalite fixe de 40 EUR sera appliquee en cas de retard de paiement.",
      			"ext": {
      				"untdid-text-subject": "PMT"
      			}
      		},
      		{
      			"key": "payment-method",
      			"text": "Des penalites de retard s'appliquent conformement a nos conditions generales de vente.",
      			"ext": {
      				"untdid-text-subject": "PMD"
      			}
      		},
      		{
      			"key": "payment-term",
      			"text": "Aucun escompte n'est offert pour paiement anticipe.",
      			"ext": {
      				"untdid-text-subject": "AAB"
      			}
      		}
      	]
      }
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="PA B2B invoice (building subcontracting, autoliquidation)">
    A domestic B2B invoice for construction works supplied by a subcontractor to a taxable main contractor. Because both parties are French, this stays in the PA e-invoicing flow ([`fr-ctc-flow2-v1`](https://docs.gobl.org/addons/fr-ctc-flow2-v1)) even though it carries no VAT — it is not e-reporting.

    Notice:

    * the VAT combo uses the `reverse-charge` key, which sets `untdid-tax-category` `AE` and produces a `0.00` VAT total, with no tax rate or amount on the line,
    * the `reverse-charge` note text is set explicitly to cite **article 283-2 nonies** (subcontracting); left to the regime default it would cite the generic article 283-1,
    * `fr-ctc-billing-mode` is `S1` — a plain services submission: the reverse charge is carried entirely by the VAT key and note. `S5` (subcontractor invoice) applies only to subcontracting with payment delegation (*paiement direct*), which is not the case here,
    * the reverse charge only applies where the customer is a taxable person — invoicing a non-taxable property owner would carry standard VAT instead.

    <CodeGroup>
      ```json PA B2B Reverse Charge Invoice (Subcontracting) theme={"system"}
      {
          "$schema": "https://gobl.org/draft-0/bill/invoice",
          "$regime": "FR",
          "$addons": [
              "fr-ctc-flow2-v1"
          ],
          "$tags": [
              "reverse-charge"
          ],
          "type": "standard",
          "series": "ST",
          "code": "2026-00001",
          "issue_date": "2026-09-15",
          "currency": "EUR",
          "tax": {
              "ext": {
                  "fr-ctc-billing-mode": "S1",
                  "untdid-document-type": "380"
              },
              "notes": [
                  {
                      "cat": "VAT",
                      "key": "reverse-charge",
                      "text": "Autoliquidation – TVA due par le preneur, article 283-2 nonies du CGI."
                  }
              ]
          },
          "supplier": {
              "name": "Plomberie Dupont SARL",
              "tax_id": {
                  "country": "FR",
                  "code": "303265045"
              },
              "identities": [
                  {
                      "type": "SIREN",
                      "code": "303265045",
                      "ext": {
                          "iso-scheme-id": "0002"
                      }
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "303265045"
                  }
              ],
              "addresses": [
                  {
                      "num": "12",
                      "street": "Rue des Artisans",
                      "locality": "Lyon",
                      "code": "69003",
                      "country": "FR"
                  }
              ]
          },
          "customer": {
              "name": "Bâtiment Martin SA",
              "tax_id": {
                  "country": "FR",
                  "code": "732829320"
              },
              "identities": [
                  {
                      "type": "SIREN",
                      "code": "732829320",
                      "ext": {
                          "iso-scheme-id": "0002"
                      }
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "732829320"
                  }
              ],
              "addresses": [
                  {
                      "num": "5",
                      "street": "Avenue de la Construction",
                      "locality": "Villeurbanne",
                      "code": "69100",
                      "country": "FR"
                  }
              ]
          },
          "payment": {
              "terms": {
                  "key": "due-date",
                  "due_dates": [
                      {
                          "date": "2026-10-15",
                          "amount": "10000.00"
                      }
                  ]
              },
              "instructions": {
                  "key": "credit-transfer",
                  "credit_transfer": [
                      {
                          "iban": "FR7630006000011234567890189"
                      }
                  ]
              }
          },
          "lines": [
              {
                  "quantity": "1",
                  "item": {
                      "name": "Travaux de plomberie en sous-traitance",
                      "price": "10000.00"
                  },
                  "taxes": [
                      {
                          "cat": "VAT",
                          "key": "reverse-charge"
                      }
                  ]
              }
          ]
      }
      ```

      ```json Built version theme={"system"}
      {
      	"$schema": "https://gobl.org/draft-0/bill/invoice",
      	"$regime": "FR",
      	"$addons": [
      		"eu-en16931-v2017",
      		"fr-ctc-flow2-v1"
      	],
      	"$tags": [
      		"reverse-charge"
      	],
      	"type": "standard",
      	"series": "ST",
      	"code": "2026-00001",
      	"issue_date": "2026-09-15",
      	"currency": "EUR",
      	"tax": {
      		"rounding": "currency",
      		"ext": {
      			"fr-ctc-billing-mode": "S1",
      			"untdid-document-type": "380"
      		},
      		"notes": [
      			{
      				"cat": "VAT",
      				"key": "reverse-charge",
      				"text": "Autoliquidation – TVA due par le preneur, article 283-2 nonies du CGI.",
      				"ext": {
      					"untdid-tax-category": "AE"
      				}
      			}
      		]
      	},
      	"supplier": {
      		"name": "Plomberie Dupont SARL",
      		"tax_id": {
      			"country": "FR",
      			"code": "40303265045"
      		},
      		"identities": [
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "303265045",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:303265045"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "303265045"
      			}
      		],
      		"addresses": [
      			{
      				"num": "12",
      				"street": "Rue des Artisans",
      				"locality": "Lyon",
      				"code": "69003",
      				"country": "FR"
      			}
      		]
      	},
      	"customer": {
      		"name": "Bâtiment Martin SA",
      		"tax_id": {
      			"country": "FR",
      			"code": "44732829320"
      		},
      		"identities": [
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "732829320",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:732829320"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "732829320"
      			}
      		],
      		"addresses": [
      			{
      				"num": "5",
      				"street": "Avenue de la Construction",
      				"locality": "Villeurbanne",
      				"code": "69100",
      				"country": "FR"
      			}
      		]
      	},
      	"lines": [
      		{
      			"i": 1,
      			"quantity": "1",
      			"item": {
      				"name": "Travaux de plomberie en sous-traitance",
      				"price": "10000.00",
      				"unit": "one"
      			},
      			"sum": "10000.00",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "reverse-charge",
      					"ext": {
      						"untdid-tax-category": "AE"
      					}
      				}
      			],
      			"total": "10000.00"
      		}
      	],
      	"payment": {
      		"terms": {
      			"key": "due-date",
      			"due_dates": [
      				{
      					"date": "2026-10-15",
      					"amount": "10000.00"
      				}
      			]
      		},
      		"instructions": {
      			"key": "credit-transfer",
      			"credit_transfer": [
      				{
      					"iban": "FR7630006000011234567890189"
      				}
      			],
      			"ext": {
      				"untdid-payment-means": "30"
      			}
      		}
      	},
      	"totals": {
      		"sum": "10000.00",
      		"total": "10000.00",
      		"taxes": {
      			"categories": [
      				{
      					"code": "VAT",
      					"rates": [
      						{
      							"key": "reverse-charge",
      							"ext": {
      								"untdid-tax-category": "AE"
      							},
      							"base": "10000.00",
      							"amount": "0.00"
      						}
      					],
      					"amount": "0.00"
      				}
      			],
      			"sum": "0.00"
      		},
      		"tax": "0.00",
      		"total_with_tax": "10000.00",
      		"payable": "10000.00"
      	},
      	"notes": [
      		{
      			"key": "payment",
      			"text": "Conditions de paiement selon les conditions générales de vente.",
      			"ext": {
      				"untdid-text-subject": "PMT"
      			}
      		},
      		{
      			"key": "payment-method",
      			"text": "Pénalités et indemnités de retard applicables conformément aux conditions générales de vente.",
      			"ext": {
      				"untdid-text-subject": "PMD"
      			}
      		},
      		{
      			"key": "payment-term",
      			"text": "Aucun escompte n'est accordé pour paiement anticipé.",
      			"ext": {
      				"untdid-text-subject": "AAB"
      			}
      		}
      	]
      }
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="PA B2B credit note">
    A credit note that partially cancels a previously issued PA invoice. The `preceding` array references the original invoice by series, code, and issue date.

    Notice:

    * `type` is `credit-note` and `untdid-document-type` is `381` (commercial credit note),
    * the `preceding` block makes the link to the original invoice explicit — required for PA matching at the PPF.

    <CodeGroup>
      ```json PA B2B Credit Note theme={"system"}
      {
          "$schema": "https://gobl.org/draft-0/bill/invoice",
          "$regime": "FR",
          "$addons": [
              "fr-ctc-flow2-v1"
          ],
          "type": "credit-note",
          "series": "AV",
          "code": "2024-001",
          "issue_date": "2024-06-20",
          "currency": "EUR",
          "tax": {
              "ext": {
                  "fr-ctc-billing-mode": "S1",
                  "untdid-document-type": "381"
              }
          },
          "preceding": [
              {
                  "type": "standard",
                  "series": "FAC",
                  "code": "2024-001",
                  "issue_date": "2024-06-13"
              }
          ],
          "supplier": {
              "name": "Fournisseur Example SARL",
              "tax_id": {
                  "country": "FR",
                  "code": "732829320"
              },
              "identities": [
                  {
                      "type": "SIREN",
                      "code": "732829320",
                      "ext": {
                          "iso-scheme-id": "0002"
                      }
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "732829320"
                  }
              ],
              "addresses": [
                  {
                      "num": "123",
                      "street": "Rue de la Paix",
                      "locality": "Paris",
                      "code": "75001",
                      "country": "FR"
                  }
              ],
              "emails": [
                  {
                      "addr": "facturation@fournisseur.fr"
                  }
              ]
          },
          "customer": {
              "name": "Client Example SAS",
              "tax_id": {
                  "country": "FR",
                  "code": "356000000"
              },
              "identities": [
                  {
                      "type": "SIREN",
                      "code": "356000000",
                      "ext": {
                          "iso-scheme-id": "0002"
                      }
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "356000000"
                  }
              ],
              "addresses": [
                  {
                      "num": "456",
                      "street": "Avenue des Champs-Elysees",
                      "locality": "Paris",
                      "code": "75008",
                      "country": "FR"
                  }
              ],
              "emails": [
                  {
                      "addr": "comptabilite@client.fr"
                  }
              ]
          },
          "lines": [
              {
                  "quantity": "2",
                  "item": {
                      "name": "Services de conseil - Annulation partielle",
                      "price": "100.00",
                      "unit": "h"
                  },
                  "taxes": [
                      {
                          "cat": "VAT",
                          "rate": "standard"
                      }
                  ]
              }
          ],
          "notes": [
              {
                  "key": "payment",
                  "text": "Une penalite fixe de 40 EUR sera appliquee en cas de retard de paiement.",
                  "ext": {
                      "untdid-text-subject": "PMT"
                  }
              },
              {
                  "key": "payment-method",
                  "text": "Des penalites de retard s'appliquent conformement a nos conditions generales de vente.",
                  "ext": {
                      "untdid-text-subject": "PMD"
                  }
              },
              {
                  "key": "payment-term",
                  "text": "Aucun escompte n'est offert pour paiement anticipe.",
                  "ext": {
                      "untdid-text-subject": "AAB"
                  }
              }
          ],
          "payment": {
              "instructions": {
                  "key": "credit-transfer",
                  "credit_transfer": [
                      {
                          "iban": "FR7630006000011234567890189",
                          "name": "Fournisseur Example SARL"
                      }
                  ]
              }
          }
      }
      ```

      ```json Built version theme={"system"}
      {
      	"$schema": "https://gobl.org/draft-0/bill/invoice",
      	"$regime": "FR",
      	"$addons": [
      		"eu-en16931-v2017",
      		"fr-ctc-flow2-v1"
      	],
      	"type": "credit-note",
      	"series": "AV",
      	"code": "2024-001",
      	"issue_date": "2024-06-20",
      	"currency": "EUR",
      	"preceding": [
      		{
      			"type": "standard",
      			"issue_date": "2024-06-13",
      			"series": "FAC",
      			"code": "2024-001"
      		}
      	],
      	"tax": {
      		"rounding": "currency",
      		"ext": {
      			"fr-ctc-billing-mode": "S1",
      			"untdid-document-type": "381"
      		}
      	},
      	"supplier": {
      		"name": "Fournisseur Example SARL",
      		"tax_id": {
      			"country": "FR",
      			"code": "44732829320"
      		},
      		"identities": [
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "732829320",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:732829320"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "732829320"
      			}
      		],
      		"addresses": [
      			{
      				"num": "123",
      				"street": "Rue de la Paix",
      				"locality": "Paris",
      				"code": "75001",
      				"country": "FR"
      			}
      		],
      		"emails": [
      			{
      				"addr": "facturation@fournisseur.fr"
      			}
      		]
      	},
      	"customer": {
      		"name": "Client Example SAS",
      		"tax_id": {
      			"country": "FR",
      			"code": "39356000000"
      		},
      		"identities": [
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "356000000",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:356000000"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "356000000"
      			}
      		],
      		"addresses": [
      			{
      				"num": "456",
      				"street": "Avenue des Champs-Elysees",
      				"locality": "Paris",
      				"code": "75008",
      				"country": "FR"
      			}
      		],
      		"emails": [
      			{
      				"addr": "comptabilite@client.fr"
      			}
      		]
      	},
      	"lines": [
      		{
      			"i": 1,
      			"quantity": "2",
      			"item": {
      				"name": "Services de conseil - Annulation partielle",
      				"price": "100.00",
      				"unit": "h"
      			},
      			"sum": "200.00",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"rate": "general",
      					"percent": "20%",
      					"ext": {
      						"untdid-tax-category": "S"
      					}
      				}
      			],
      			"total": "200.00"
      		}
      	],
      	"payment": {
      		"instructions": {
      			"key": "credit-transfer",
      			"credit_transfer": [
      				{
      					"iban": "FR7630006000011234567890189",
      					"name": "Fournisseur Example SARL"
      				}
      			],
      			"ext": {
      				"untdid-payment-means": "30"
      			}
      		}
      	},
      	"totals": {
      		"sum": "200.00",
      		"total": "200.00",
      		"taxes": {
      			"categories": [
      				{
      					"code": "VAT",
      					"rates": [
      						{
      							"key": "standard",
      							"ext": {
      								"untdid-tax-category": "S"
      							},
      							"base": "200.00",
      							"percent": "20%",
      							"amount": "40.00"
      						}
      					],
      					"amount": "40.00"
      				}
      			],
      			"sum": "40.00"
      		},
      		"tax": "40.00",
      		"total_with_tax": "240.00",
      		"payable": "240.00"
      	},
      	"notes": [
      		{
      			"key": "payment",
      			"text": "Une penalite fixe de 40 EUR sera appliquee en cas de retard de paiement.",
      			"ext": {
      				"untdid-text-subject": "PMT"
      			}
      		},
      		{
      			"key": "payment-method",
      			"text": "Des penalites de retard s'appliquent conformement a nos conditions generales de vente.",
      			"ext": {
      				"untdid-text-subject": "PMD"
      			}
      		},
      		{
      			"key": "payment-term",
      			"text": "Aucun escompte n'est offert pour paiement anticipe.",
      			"ext": {
      				"untdid-text-subject": "AAB"
      			}
      		}
      	]
      }
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="PA B2B advance payment invoice">
    An advance (down-payment) invoice — used when a payment is collected before the final goods or services are delivered.

    Notice:

    * the `prepayment` tag sets `untdid-document-type` to `386` (advance payment invoice),
    * no billing mode is set explicitly: the add-on defaults `fr-ctc-billing-mode` to `M1` (submission of a mixed invoice — here a service plus a good); the advance nature is carried by the document type, not the billing mode,
    * the final invoice issued at delivery normally references this advance to net it off the total.

    <CodeGroup>
      ```json PA B2B Advance Payment Invoice theme={"system"}
      {
          "$schema": "https://gobl.org/draft-0/bill/invoice",
          "$regime": "FR",
          "$addons": [
              "fr-ctc-flow2-v1"
          ],
          "$tags": [
              "prepayment"
          ],
          "type": "standard",
          "series": "FAC",
          "code": "2024-AV-001",
          "issue_date": "2024-06-01",
          "currency": "EUR",
          "supplier": {
              "name": "Fournisseur Example SARL",
              "tax_id": {
                  "country": "FR",
                  "code": "732829320"
              },
              "identities": [
                  {
                      "type": "SIREN",
                      "code": "732829320",
                      "ext": {
                          "iso-scheme-id": "0002"
                      }
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "732829320"
                  }
              ],
              "addresses": [
                  {
                      "num": "123",
                      "street": "Rue de la Paix",
                      "locality": "Paris",
                      "code": "75001",
                      "country": "FR"
                  }
              ],
              "emails": [
                  {
                      "addr": "facturation@fournisseur.fr"
                  }
              ]
          },
          "customer": {
              "name": "Client Example SAS",
              "tax_id": {
                  "country": "FR",
                  "code": "356000000"
              },
              "identities": [
                  {
                      "type": "SIREN",
                      "code": "356000000",
                      "ext": {
                          "iso-scheme-id": "0002"
                      }
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "356000000"
                  }
              ],
              "addresses": [
                  {
                      "num": "456",
                      "street": "Avenue des Champs-Elysees",
                      "locality": "Paris",
                      "code": "75008",
                      "country": "FR"
                  }
              ],
              "emails": [
                  {
                      "addr": "comptabilite@client.fr"
                  }
              ]
          },
          "lines": [
              {
                  "quantity": "1",
                  "item": {
                      "name": "Acompte - Projet de developpement",
                      "price": "5000.00"
                  },
                  "taxes": [
                      {
                          "cat": "VAT",
                          "rate": "standard"
                      }
                  ]
              },
              {
                  "quantity": "1",
                  "item": {
                      "name": "Acompte - Serveur de developpement (materiel)",
                      "price": "2000.00"
                  },
                  "taxes": [
                      {
                          "cat": "VAT",
                          "rate": "standard"
                      }
                  ]
              }
          ],
          "notes": [
              {
                  "key": "payment",
                  "text": "Une penalite fixe de 40 EUR sera appliquee en cas de retard de paiement.",
                  "ext": {
                      "untdid-text-subject": "PMT"
                  }
              },
              {
                  "key": "payment-method",
                  "text": "Des penalites de retard s'appliquent conformement a nos conditions generales de vente.",
                  "ext": {
                      "untdid-text-subject": "PMD"
                  }
              },
              {
                  "key": "payment-term",
                  "text": "Aucun escompte n'est offert pour paiement anticipe.",
                  "ext": {
                      "untdid-text-subject": "AAB"
                  }
              }
          ],
          "payment": {
              "instructions": {
                  "key": "credit-transfer",
                  "credit_transfer": [
                      {
                          "iban": "FR7630006000011234567890189",
                          "name": "Fournisseur Example SARL"
                      }
                  ]
              },
              "terms": {
                  "detail": "Paiement immediat"
              }
          }
      }
      ```

      ```json Built version theme={"system"}
      {
      	"$schema": "https://gobl.org/draft-0/bill/invoice",
      	"$regime": "FR",
      	"$addons": [
      		"eu-en16931-v2017",
      		"fr-ctc-flow2-v1"
      	],
      	"$tags": [
      		"prepayment"
      	],
      	"type": "standard",
      	"series": "FAC",
      	"code": "2024-AV-001",
      	"issue_date": "2024-06-01",
      	"currency": "EUR",
      	"tax": {
      		"rounding": "currency",
      		"ext": {
      			"fr-ctc-billing-mode": "M1",
      			"untdid-document-type": "386"
      		}
      	},
      	"supplier": {
      		"name": "Fournisseur Example SARL",
      		"tax_id": {
      			"country": "FR",
      			"code": "44732829320"
      		},
      		"identities": [
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "732829320",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:732829320"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "732829320"
      			}
      		],
      		"addresses": [
      			{
      				"num": "123",
      				"street": "Rue de la Paix",
      				"locality": "Paris",
      				"code": "75001",
      				"country": "FR"
      			}
      		],
      		"emails": [
      			{
      				"addr": "facturation@fournisseur.fr"
      			}
      		]
      	},
      	"customer": {
      		"name": "Client Example SAS",
      		"tax_id": {
      			"country": "FR",
      			"code": "39356000000"
      		},
      		"identities": [
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "356000000",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:356000000"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "356000000"
      			}
      		],
      		"addresses": [
      			{
      				"num": "456",
      				"street": "Avenue des Champs-Elysees",
      				"locality": "Paris",
      				"code": "75008",
      				"country": "FR"
      			}
      		],
      		"emails": [
      			{
      				"addr": "comptabilite@client.fr"
      			}
      		]
      	},
      	"lines": [
      		{
      			"i": 1,
      			"quantity": "1",
      			"item": {
      				"name": "Acompte - Projet de developpement",
      				"price": "5000.00",
      				"unit": "one"
      			},
      			"sum": "5000.00",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"rate": "general",
      					"percent": "20%",
      					"ext": {
      						"untdid-tax-category": "S"
      					}
      				}
      			],
      			"total": "5000.00"
      		},
      		{
      			"i": 2,
      			"quantity": "1",
      			"item": {
      				"name": "Acompte - Serveur de developpement (materiel)",
      				"price": "2000.00",
      				"unit": "one"
      			},
      			"sum": "2000.00",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"rate": "general",
      					"percent": "20%",
      					"ext": {
      						"untdid-tax-category": "S"
      					}
      				}
      			],
      			"total": "2000.00"
      		}
      	],
      	"payment": {
      		"terms": {
      			"notes": "Paiement immediat"
      		},
      		"instructions": {
      			"key": "credit-transfer",
      			"credit_transfer": [
      				{
      					"iban": "FR7630006000011234567890189",
      					"name": "Fournisseur Example SARL"
      				}
      			],
      			"ext": {
      				"untdid-payment-means": "30"
      			}
      		}
      	},
      	"totals": {
      		"sum": "7000.00",
      		"total": "7000.00",
      		"taxes": {
      			"categories": [
      				{
      					"code": "VAT",
      					"rates": [
      						{
      							"key": "standard",
      							"ext": {
      								"untdid-tax-category": "S"
      							},
      							"base": "7000.00",
      							"percent": "20%",
      							"amount": "1400.00"
      						}
      					],
      					"amount": "1400.00"
      				}
      			],
      			"sum": "1400.00"
      		},
      		"tax": "1400.00",
      		"total_with_tax": "8400.00",
      		"payable": "8400.00"
      	},
      	"notes": [
      		{
      			"key": "payment",
      			"text": "Une penalite fixe de 40 EUR sera appliquee en cas de retard de paiement.",
      			"ext": {
      				"untdid-text-subject": "PMT"
      			}
      		},
      		{
      			"key": "payment-method",
      			"text": "Des penalites de retard s'appliquent conformement a nos conditions generales de vente.",
      			"ext": {
      				"untdid-text-subject": "PMD"
      			}
      		},
      		{
      			"key": "payment-term",
      			"text": "Aucun escompte n'est offert pour paiement anticipe.",
      			"ext": {
      				"untdid-text-subject": "AAB"
      			}
      		}
      	]
      }
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="PA B2B final invoice (after down payment)">
    The final invoice that closes out the advance example above: the full contract is invoiced, and the down payment already billed (`FAC 2024-AV-001`) is netted off the total.

    Notice:

    * `fr-ctc-billing-mode` is pinned to `M4` (mixed, final invoice after down payment); left unset it would default back to `M1`,
    * flow 2 forbids advance-payment document types (386, 500, 503) on final invoices, so `untdid-document-type` stays `380` (BR-FR-CO-08),
    * `payment.advances` records the 8,400.00 already paid, referencing the advance invoice — `totals.due` comes out to the remaining 12,000.00,
    * the due-date payment terms cover only the outstanding balance.

    <CodeGroup>
      ```json PA B2B Final Invoice (After Advance) theme={"system"}
      {
          "$schema": "https://gobl.org/draft-0/bill/invoice",
          "$regime": "FR",
          "$addons": [
              "fr-ctc-flow2-v1"
          ],
          "type": "standard",
          "series": "FAC",
          "code": "2024-00107",
          "issue_date": "2024-07-15",
          "currency": "EUR",
          "supplier": {
              "name": "Fournisseur Example SARL",
              "tax_id": {
                  "country": "FR",
                  "code": "732829320"
              },
              "identities": [
                  {
                      "type": "SIREN",
                      "code": "732829320",
                      "ext": {
                          "iso-scheme-id": "0002"
                      }
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "732829320"
                  }
              ],
              "addresses": [
                  {
                      "num": "123",
                      "street": "Rue de la Paix",
                      "locality": "Paris",
                      "code": "75001",
                      "country": "FR"
                  }
              ],
              "emails": [
                  {
                      "addr": "facturation@fournisseur.fr"
                  }
              ]
          },
          "customer": {
              "name": "Client Example SAS",
              "tax_id": {
                  "country": "FR",
                  "code": "356000000"
              },
              "identities": [
                  {
                      "type": "SIREN",
                      "code": "356000000",
                      "ext": {
                          "iso-scheme-id": "0002"
                      }
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "356000000"
                  }
              ],
              "addresses": [
                  {
                      "num": "456",
                      "street": "Avenue des Champs-Elysees",
                      "locality": "Paris",
                      "code": "75008",
                      "country": "FR"
                  }
              ],
              "emails": [
                  {
                      "addr": "comptabilite@client.fr"
                  }
              ]
          },
          "lines": [
              {
                  "quantity": "1",
                  "item": {
                      "name": "Projet de developpement - prestation complete",
                      "price": "15000.00"
                  },
                  "taxes": [
                      {
                          "cat": "VAT",
                          "rate": "standard"
                      }
                  ]
              },
              {
                  "quantity": "1",
                  "item": {
                      "name": "Serveur de developpement (materiel)",
                      "price": "2000.00"
                  },
                  "taxes": [
                      {
                          "cat": "VAT",
                          "rate": "standard"
                      }
                  ]
              }
          ],
          "notes": [
              {
                  "key": "payment",
                  "text": "Une penalite fixe de 40 EUR sera appliquee en cas de retard de paiement.",
                  "ext": {
                      "untdid-text-subject": "PMT"
                  }
              },
              {
                  "key": "payment-method",
                  "text": "Des penalites de retard s'appliquent conformement a nos conditions generales de vente.",
                  "ext": {
                      "untdid-text-subject": "PMD"
                  }
              },
              {
                  "key": "payment-term",
                  "text": "Aucun escompte n'est offert pour paiement anticipe.",
                  "ext": {
                      "untdid-text-subject": "AAB"
                  }
              }
          ],
          "payment": {
              "instructions": {
                  "key": "credit-transfer",
                  "credit_transfer": [
                      {
                          "iban": "FR7630006000011234567890189",
                          "name": "Fournisseur Example SARL"
                      }
                  ]
              },
              "terms": {
                  "key": "due-date",
                  "due_dates": [
                      {
                          "date": "2024-08-15",
                          "amount": "12000.00"
                      }
                  ]
              },
              "advances": [
                  {
                      "description": "Acompte verse - facture FAC 2024-AV-001",
                      "amount": "8400.00"
                  }
              ]
          },
          "tax": {
              "ext": {
                  "fr-ctc-billing-mode": "M4"
              }
          }
      }
      ```

      ```json Built version theme={"system"}
      {
      	"$schema": "https://gobl.org/draft-0/bill/invoice",
      	"$regime": "FR",
      	"$addons": [
      		"eu-en16931-v2017",
      		"fr-ctc-flow2-v1"
      	],
      	"type": "standard",
      	"series": "FAC",
      	"code": "2024-00107",
      	"issue_date": "2024-07-15",
      	"currency": "EUR",
      	"tax": {
      		"rounding": "currency",
      		"ext": {
      			"fr-ctc-billing-mode": "M4",
      			"untdid-document-type": "380"
      		}
      	},
      	"supplier": {
      		"name": "Fournisseur Example SARL",
      		"tax_id": {
      			"country": "FR",
      			"code": "44732829320"
      		},
      		"identities": [
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "732829320",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:732829320"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "732829320"
      			}
      		],
      		"addresses": [
      			{
      				"num": "123",
      				"street": "Rue de la Paix",
      				"locality": "Paris",
      				"code": "75001",
      				"country": "FR"
      			}
      		],
      		"emails": [
      			{
      				"addr": "facturation@fournisseur.fr"
      			}
      		]
      	},
      	"customer": {
      		"name": "Client Example SAS",
      		"tax_id": {
      			"country": "FR",
      			"code": "39356000000"
      		},
      		"identities": [
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "356000000",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:356000000"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "356000000"
      			}
      		],
      		"addresses": [
      			{
      				"num": "456",
      				"street": "Avenue des Champs-Elysees",
      				"locality": "Paris",
      				"code": "75008",
      				"country": "FR"
      			}
      		],
      		"emails": [
      			{
      				"addr": "comptabilite@client.fr"
      			}
      		]
      	},
      	"lines": [
      		{
      			"i": 1,
      			"quantity": "1",
      			"item": {
      				"name": "Projet de developpement - prestation complete",
      				"price": "15000.00",
      				"unit": "one"
      			},
      			"sum": "15000.00",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"rate": "general",
      					"percent": "20%",
      					"ext": {
      						"untdid-tax-category": "S"
      					}
      				}
      			],
      			"total": "15000.00"
      		},
      		{
      			"i": 2,
      			"quantity": "1",
      			"item": {
      				"name": "Serveur de developpement (materiel)",
      				"price": "2000.00",
      				"unit": "one"
      			},
      			"sum": "2000.00",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"rate": "general",
      					"percent": "20%",
      					"ext": {
      						"untdid-tax-category": "S"
      					}
      				}
      			],
      			"total": "2000.00"
      		}
      	],
      	"payment": {
      		"terms": {
      			"key": "due-date",
      			"due_dates": [
      				{
      					"date": "2024-08-15",
      					"amount": "12000.00"
      				}
      			]
      		},
      		"advances": [
      			{
      				"description": "Acompte verse - facture FAC 2024-AV-001",
      				"amount": "8400.00"
      			}
      		],
      		"instructions": {
      			"key": "credit-transfer",
      			"credit_transfer": [
      				{
      					"iban": "FR7630006000011234567890189",
      					"name": "Fournisseur Example SARL"
      				}
      			],
      			"ext": {
      				"untdid-payment-means": "30"
      			}
      		}
      	},
      	"totals": {
      		"sum": "17000.00",
      		"total": "17000.00",
      		"taxes": {
      			"categories": [
      				{
      					"code": "VAT",
      					"rates": [
      						{
      							"key": "standard",
      							"ext": {
      								"untdid-tax-category": "S"
      							},
      							"base": "17000.00",
      							"percent": "20%",
      							"amount": "3400.00"
      						}
      					],
      					"amount": "3400.00"
      				}
      			],
      			"sum": "3400.00"
      		},
      		"tax": "3400.00",
      		"total_with_tax": "20400.00",
      		"payable": "20400.00",
      		"advance": "8400.00",
      		"due": "12000.00"
      	},
      	"notes": [
      		{
      			"key": "payment",
      			"text": "Une penalite fixe de 40 EUR sera appliquee en cas de retard de paiement.",
      			"ext": {
      				"untdid-text-subject": "PMT"
      			}
      		},
      		{
      			"key": "payment-method",
      			"text": "Des penalites de retard s'appliquent conformement a nos conditions generales de vente.",
      			"ext": {
      				"untdid-text-subject": "PMD"
      			}
      		},
      		{
      			"key": "payment-term",
      			"text": "Aucun escompte n'est offert pour paiement anticipe.",
      			"ext": {
      				"untdid-text-subject": "AAB"
      			}
      		}
      	]
      }
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="PA B2B invoice after a B2C sale (VAT already collected)">
    A restaurant cashes in a B2C sale — VAT is collected on the spot and reported through [e-reporting](/guides/fr-pa-reporting) — and the guest's company then asks for a proper invoice. That B2B invoice still travels the flux 2 e-invoicing flow, but must be marked so the VAT is not declared twice.

    Notice:

    * `fr-ctc-billing-mode` is pinned to `S7` (services, VAT already collected): the VAT was already reported with the B2C sale, so this invoice must not re-declare it. Left unset, the add-on would default to an already-paid mode and the VAT would be counted twice,
    * `B7` is the goods counterpart — e.g. retail goods sold over the counter and invoiced to a business afterwards,
    * the 100% advance records the on-site card payment, leaving `totals.due` at `0.00`,
    * restaurant meals carry the intermediate 10% VAT rate.

    <CodeGroup>
      ```json PA B2B Invoice After B2C Sale (VAT Collected) theme={"system"}
      {
          "$schema": "https://gobl.org/draft-0/bill/invoice",
          "$regime": "FR",
          "$addons": [
              "fr-ctc-flow2-v1"
          ],
          "type": "standard",
          "series": "FAC",
          "code": "2026-00318",
          "issue_date": "2026-09-18",
          "currency": "EUR",
          "tax": {
              "ext": {
                  "fr-ctc-billing-mode": "S7"
              }
          },
          "supplier": {
              "name": "Le Bistrot du Marché SARL",
              "tax_id": {
                  "country": "FR",
                  "code": "303265045"
              },
              "identities": [
                  {
                      "type": "SIREN",
                      "code": "303265045",
                      "ext": {
                          "iso-scheme-id": "0002"
                      }
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "303265045"
                  }
              ],
              "addresses": [
                  {
                      "num": "18",
                      "street": "Rue du Marché",
                      "locality": "Lyon",
                      "code": "69002",
                      "country": "FR"
                  }
              ]
          },
          "customer": {
              "name": "Conseil & Associés SAS",
              "tax_id": {
                  "country": "FR",
                  "code": "356000000"
              },
              "identities": [
                  {
                      "type": "SIREN",
                      "code": "356000000",
                      "ext": {
                          "iso-scheme-id": "0002"
                      }
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "356000000"
                  }
              ],
              "addresses": [
                  {
                      "num": "9",
                      "street": "Place Bellecour",
                      "locality": "Lyon",
                      "code": "69002",
                      "country": "FR"
                  }
              ]
          },
          "lines": [
              {
                  "quantity": "4",
                  "item": {
                      "name": "Repas d'affaires - menu du jour",
                      "price": "42.00"
                  },
                  "taxes": [
                      {
                          "cat": "VAT",
                          "rate": "intermediate"
                      }
                  ]
              }
          ],
          "payment": {
              "advances": [
                  {
                      "description": "Réglé sur place par carte bancaire",
                      "percent": "100%"
                  }
              ]
          }
      }
      ```

      ```json Built version theme={"system"}
      {
      	"$schema": "https://gobl.org/draft-0/bill/invoice",
      	"$regime": "FR",
      	"$addons": [
      		"eu-en16931-v2017",
      		"fr-ctc-flow2-v1"
      	],
      	"type": "standard",
      	"series": "FAC",
      	"code": "2026-00318",
      	"issue_date": "2026-09-18",
      	"currency": "EUR",
      	"tax": {
      		"rounding": "currency",
      		"ext": {
      			"fr-ctc-billing-mode": "S7",
      			"untdid-document-type": "380"
      		}
      	},
      	"supplier": {
      		"name": "Le Bistrot du Marché SARL",
      		"tax_id": {
      			"country": "FR",
      			"code": "40303265045"
      		},
      		"identities": [
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "303265045",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:303265045"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "303265045"
      			}
      		],
      		"addresses": [
      			{
      				"num": "18",
      				"street": "Rue du Marché",
      				"locality": "Lyon",
      				"code": "69002",
      				"country": "FR"
      			}
      		]
      	},
      	"customer": {
      		"name": "Conseil \u0026 Associés SAS",
      		"tax_id": {
      			"country": "FR",
      			"code": "39356000000"
      		},
      		"identities": [
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "356000000",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:356000000"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "356000000"
      			}
      		],
      		"addresses": [
      			{
      				"num": "9",
      				"street": "Place Bellecour",
      				"locality": "Lyon",
      				"code": "69002",
      				"country": "FR"
      			}
      		]
      	},
      	"lines": [
      		{
      			"i": 1,
      			"quantity": "4",
      			"item": {
      				"name": "Repas d'affaires - menu du jour",
      				"price": "42.00",
      				"unit": "one"
      			},
      			"sum": "168.00",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"rate": "intermediate",
      					"percent": "10%",
      					"ext": {
      						"untdid-tax-category": "S"
      					}
      				}
      			],
      			"total": "168.00"
      		}
      	],
      	"payment": {
      		"advances": [
      			{
      				"description": "Réglé sur place par carte bancaire",
      				"percent": "100%",
      				"amount": "184.80"
      			}
      		]
      	},
      	"totals": {
      		"sum": "168.00",
      		"total": "168.00",
      		"taxes": {
      			"categories": [
      				{
      					"code": "VAT",
      					"rates": [
      						{
      							"key": "standard",
      							"ext": {
      								"untdid-tax-category": "S"
      							},
      							"base": "168.00",
      							"percent": "10%",
      							"amount": "16.80"
      						}
      					],
      					"amount": "16.80"
      				}
      			],
      			"sum": "16.80"
      		},
      		"tax": "16.80",
      		"total_with_tax": "184.80",
      		"payable": "184.80",
      		"advance": "184.80",
      		"due": "0.00"
      	},
      	"notes": [
      		{
      			"key": "payment",
      			"text": "Conditions de paiement selon les conditions générales de vente.",
      			"ext": {
      				"untdid-text-subject": "PMT"
      			}
      		},
      		{
      			"key": "payment-method",
      			"text": "Pénalités et indemnités de retard applicables conformément aux conditions générales de vente.",
      			"ext": {
      				"untdid-text-subject": "PMD"
      			}
      		},
      		{
      			"key": "payment-term",
      			"text": "Aucun escompte n'est accordé pour paiement anticipé.",
      			"ext": {
      				"untdid-text-subject": "AAB"
      			}
      		}
      	]
      }
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="PA B2B self-billed invoice (autofacturation)">
    A domestic B2B invoice issued by the customer on behalf of the supplier under a self-billing (autofacturation) agreement. Self-billed invoices between two French parties still travel through the PA e-invoicing flow ([`fr-ctc-flow2-v1`](https://docs.gobl.org/addons/fr-ctc-flow2-v1)).

    Notice:

    * the `self-billed` tag sets `untdid-document-type` to `389` (self-billed invoice) — supplier and customer keep their real commercial roles, the tag records that the customer produced the document,
    * the PA validation flips the routing check on self-billed types: it is the **customer**, as issuer, that must carry the `0225` inbox matching its SIREN,
    * the `legal` note carries the mandatory *Autofacturation* mention, auto-tagged with `untdid-text-subject` `ABL`; the standard French payment mentions (PMT, PMD, AAB) are filled with regime defaults at build time,
    * the reduced 5.5% VAT rate applies to the foodstuffs being supplied.

    <CodeGroup>
      ```json PA B2B Self-Billed Invoice theme={"system"}
      {
          "$schema": "https://gobl.org/draft-0/bill/invoice",
          "$regime": "FR",
          "$addons": [
              "fr-ctc-flow2-v1"
          ],
          "$tags": [
              "self-billed"
          ],
          "type": "standard",
          "series": "AF",
          "code": "2026-00042",
          "issue_date": "2026-09-30",
          "currency": "EUR",
          "tax": {
              "ext": {
                  "fr-ctc-billing-mode": "B1"
              }
          },
          "supplier": {
              "name": "Ferme de la Vallée SARL",
              "tax_id": {
                  "country": "FR",
                  "code": "303265045"
              },
              "identities": [
                  {
                      "type": "SIREN",
                      "code": "303265045",
                      "ext": {
                          "iso-scheme-id": "0002"
                      }
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "303265045"
                  }
              ],
              "addresses": [
                  {
                      "num": "3",
                      "street": "Chemin des Vergers",
                      "locality": "Avignon",
                      "code": "84000",
                      "country": "FR"
                  }
              ]
          },
          "customer": {
              "name": "Grande Distribution SA",
              "tax_id": {
                  "country": "FR",
                  "code": "732829320"
              },
              "identities": [
                  {
                      "type": "SIREN",
                      "code": "732829320",
                      "ext": {
                          "iso-scheme-id": "0002"
                      }
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "732829320"
                  }
              ],
              "addresses": [
                  {
                      "num": "40",
                      "street": "Boulevard du Commerce",
                      "locality": "Paris",
                      "code": "75012",
                      "country": "FR"
                  }
              ]
          },
          "lines": [
              {
                  "quantity": "500",
                  "item": {
                      "name": "Légumes de saison - livraison septembre",
                      "price": "2.40",
                      "unit": "kg"
                  },
                  "taxes": [
                      {
                          "cat": "VAT",
                          "rate": "reduced"
                      }
                  ]
              }
          ],
          "notes": [
              {
                  "key": "legal",
                  "text": "Autofacturation - facture établie par le client au nom et pour le compte du fournisseur."
              }
          ],
          "payment": {
              "terms": {
                  "key": "due-date",
                  "due_dates": [
                      {
                          "date": "2026-10-30",
                          "amount": "1266.00"
                      }
                  ]
              },
              "instructions": {
                  "key": "credit-transfer",
                  "credit_transfer": [
                      {
                          "iban": "FR7630006000011234567890189"
                      }
                  ]
              }
          }
      }
      ```

      ```json Built version theme={"system"}
      {
      	"$schema": "https://gobl.org/draft-0/bill/invoice",
      	"$regime": "FR",
      	"$addons": [
      		"eu-en16931-v2017",
      		"fr-ctc-flow2-v1"
      	],
      	"$tags": [
      		"self-billed"
      	],
      	"type": "standard",
      	"series": "AF",
      	"code": "2026-00042",
      	"issue_date": "2026-09-30",
      	"currency": "EUR",
      	"tax": {
      		"rounding": "currency",
      		"ext": {
      			"fr-ctc-billing-mode": "B1",
      			"untdid-document-type": "389"
      		}
      	},
      	"supplier": {
      		"name": "Ferme de la Vallée SARL",
      		"tax_id": {
      			"country": "FR",
      			"code": "40303265045"
      		},
      		"identities": [
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "303265045",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:303265045"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "303265045"
      			}
      		],
      		"addresses": [
      			{
      				"num": "3",
      				"street": "Chemin des Vergers",
      				"locality": "Avignon",
      				"code": "84000",
      				"country": "FR"
      			}
      		]
      	},
      	"customer": {
      		"name": "Grande Distribution SA",
      		"tax_id": {
      			"country": "FR",
      			"code": "44732829320"
      		},
      		"identities": [
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "732829320",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:732829320"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "732829320"
      			}
      		],
      		"addresses": [
      			{
      				"num": "40",
      				"street": "Boulevard du Commerce",
      				"locality": "Paris",
      				"code": "75012",
      				"country": "FR"
      			}
      		]
      	},
      	"lines": [
      		{
      			"i": 1,
      			"quantity": "500",
      			"item": {
      				"name": "Légumes de saison - livraison septembre",
      				"price": "2.40",
      				"unit": "kg"
      			},
      			"sum": "1200.00",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"rate": "reduced",
      					"percent": "5.5%",
      					"ext": {
      						"untdid-tax-category": "S"
      					}
      				}
      			],
      			"total": "1200.00"
      		}
      	],
      	"payment": {
      		"terms": {
      			"key": "due-date",
      			"due_dates": [
      				{
      					"date": "2026-10-30",
      					"amount": "1266.00"
      				}
      			]
      		},
      		"instructions": {
      			"key": "credit-transfer",
      			"credit_transfer": [
      				{
      					"iban": "FR7630006000011234567890189"
      				}
      			],
      			"ext": {
      				"untdid-payment-means": "30"
      			}
      		}
      	},
      	"totals": {
      		"sum": "1200.00",
      		"total": "1200.00",
      		"taxes": {
      			"categories": [
      				{
      					"code": "VAT",
      					"rates": [
      						{
      							"key": "standard",
      							"ext": {
      								"untdid-tax-category": "S"
      							},
      							"base": "1200.00",
      							"percent": "5.5%",
      							"amount": "66.00"
      						}
      					],
      					"amount": "66.00"
      				}
      			],
      			"sum": "66.00"
      		},
      		"tax": "66.00",
      		"total_with_tax": "1266.00",
      		"payable": "1266.00"
      	},
      	"notes": [
      		{
      			"key": "legal",
      			"text": "Autofacturation - facture établie par le client au nom et pour le compte du fournisseur.",
      			"ext": {
      				"untdid-text-subject": "ABL"
      			}
      		},
      		{
      			"key": "payment",
      			"text": "Conditions de paiement selon les conditions générales de vente.",
      			"ext": {
      				"untdid-text-subject": "PMT"
      			}
      		},
      		{
      			"key": "payment-method",
      			"text": "Pénalités et indemnités de retard applicables conformément aux conditions générales de vente.",
      			"ext": {
      				"untdid-text-subject": "PMD"
      			}
      		},
      		{
      			"key": "payment-term",
      			"text": "Aucun escompte n'est accordé pour paiement anticipé.",
      			"ext": {
      				"untdid-text-subject": "AAB"
      			}
      		}
      	]
      }
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="Factur-X B2B invoice">
    A domestic B2B invoice destined for Factur-X output — a human-readable PDF with the UN/CEFACT CII XML embedded (the French implementation of the same specification as ZUGFeRD). It combines the [`fr-facturx-v1`](https://docs.gobl.org/addons/fr-facturx-v1) add-on for the Factur-X format with [`fr-ctc-flow2-v1`](https://docs.gobl.org/addons/fr-ctc-flow2-v1), so the same document is also valid for the PA e-invoicing flow.

    Notice:

    * the two add-ons compose: `fr-facturx-v1` drives the Factur-X output while `fr-ctc-flow2-v1` applies the PA validation; the `eu-en16931-v2017` profile they share is added automatically as a dependency,
    * each party declares only a `SIRET` identity — at build time the regime derives the legal `SIREN` identity (`iso-scheme-id` `0002`) from it, next to the `0225` Peppol inboxes required for PA routing,
    * `fr-ctc-billing-mode` is `S2` (services, already paid) because the 100% advance settles the invoice at issue; that mode requires payment terms whose due dates cover the total, leaving `totals.due` at `0.00`,
    * the French payment mentions (PMT, PMD, AAB) are filled with regime defaults at build time.

    <CodeGroup>
      ```json Factur-X B2B invoice theme={"system"}
      {
          "$schema": "https://gobl.org/draft-0/bill/invoice",
          "$regime": "FR",
          "$addons": [
              "fr-ctc-flow2-v1",
              "fr-facturx-v1"
          ],
          "type": "standard",
          "series": "SAMPLE",
          "code": "2345",
          "issue_date": "2025-06-18",
          "currency": "EUR",
          "tax": {
              "ext": {
                  "fr-ctc-billing-mode": "S2"
              }
          },
          "supplier": {
              "name": "Provide One SARL",
              "tax_id": {
                  "country": "FR",
                  "code": "43498927917"
              },
              "identities": [
                  {
                      "type": "SIRET",
                      "code": "49892791768734"
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "498927917"
                  }
              ],
              "addresses": [
                  {
                      "num": "42",
                      "street": "Avenue des Ternes",
                      "locality": "Paris",
                      "code": "75017",
                      "country": "FR"
                  }
              ],
              "emails": [
                  {
                      "addr": "billing@example.com"
                  }
              ]
          },
          "customer": {
              "name": "Sample Consumer SAS",
              "tax_id": {
                  "country": "FR",
                  "code": "39356000000"
              },
              "identities": [
                  {
                      "type": "SIRET",
                      "code": "35600000012345"
                  }
              ],
              "inboxes": [
                  {
                      "key": "peppol",
                      "scheme": "0225",
                      "code": "356000000"
                  }
              ],
              "addresses": [
                  {
                      "num": "1",
                      "street": "Rue Sundacsakn",
                      "locality": "Saint-Germain-En-Laye",
                      "code": "75050",
                      "country": "FR"
                  }
              ],
              "emails": [
                  {
                      "addr": "email@sample.com"
                  }
              ]
          },
          "lines": [
              {
                  "quantity": "20",
                  "item": {
                      "name": "Development services",
                      "price": "90.00",
                      "unit": "h"
                  },
                  "discounts": [
                      {
                          "reason": "Special discount",
                          "percent": "10%"
                      }
                  ],
                  "taxes": [
                      {
                          "cat": "VAT",
                          "rate": "standard"
                      }
                  ]
              }
          ],
          "payment": {
              "advances": [
                  {
                      "description": "Paid in full",
                      "percent": "100%"
                  }
              ],
              "terms": {
                  "key": "due-date",
                  "due_dates": [
                      {
                          "date": "2025-06-18",
                          "amount": "1944.00"
                      }
                  ]
              },
              "instructions": {
                  "key": "card",
                  "card": {}
              }
          }
      }
      ```

      ```json Built version theme={"system"}
      {
      	"$schema": "https://gobl.org/draft-0/bill/invoice",
      	"$regime": "FR",
      	"$addons": [
      		"eu-en16931-v2017",
      		"fr-ctc-flow2-v1",
      		"fr-facturx-v1"
      	],
      	"type": "standard",
      	"series": "SAMPLE",
      	"code": "2345",
      	"issue_date": "2025-06-18",
      	"currency": "EUR",
      	"tax": {
      		"rounding": "currency",
      		"ext": {
      			"fr-ctc-billing-mode": "S2",
      			"untdid-document-type": "380"
      		}
      	},
      	"supplier": {
      		"name": "Provide One SARL",
      		"tax_id": {
      			"country": "FR",
      			"code": "43498927917"
      		},
      		"identities": [
      			{
      				"type": "SIRET",
      				"code": "49892791768734",
      				"ext": {
      					"iso-scheme-id": "0009"
      				}
      			},
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "498927917",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:498927917"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "498927917"
      			}
      		],
      		"addresses": [
      			{
      				"num": "42",
      				"street": "Avenue des Ternes",
      				"locality": "Paris",
      				"code": "75017",
      				"country": "FR"
      			}
      		],
      		"emails": [
      			{
      				"addr": "billing@example.com"
      			}
      		]
      	},
      	"customer": {
      		"name": "Sample Consumer SAS",
      		"tax_id": {
      			"country": "FR",
      			"code": "39356000000"
      		},
      		"identities": [
      			{
      				"type": "SIRET",
      				"code": "35600000012345",
      				"ext": {
      					"iso-scheme-id": "0009"
      				}
      			},
      			{
      				"scope": "legal",
      				"type": "SIREN",
      				"code": "356000000",
      				"ext": {
      					"iso-scheme-id": "0002"
      				}
      			}
      		],
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0225:356000000"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0225",
      				"code": "356000000"
      			}
      		],
      		"addresses": [
      			{
      				"num": "1",
      				"street": "Rue Sundacsakn",
      				"locality": "Saint-Germain-En-Laye",
      				"code": "75050",
      				"country": "FR"
      			}
      		],
      		"emails": [
      			{
      				"addr": "email@sample.com"
      			}
      		]
      	},
      	"lines": [
      		{
      			"i": 1,
      			"quantity": "20",
      			"item": {
      				"name": "Development services",
      				"price": "90.00",
      				"unit": "h"
      			},
      			"sum": "1800.00",
      			"discounts": [
      				{
      					"reason": "Special discount",
      					"percent": "10%",
      					"amount": "180.00"
      				}
      			],
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"rate": "general",
      					"percent": "20%",
      					"ext": {
      						"untdid-tax-category": "S"
      					}
      				}
      			],
      			"total": "1620.00"
      		}
      	],
      	"payment": {
      		"terms": {
      			"key": "due-date",
      			"due_dates": [
      				{
      					"date": "2025-06-18",
      					"amount": "1944.00"
      				}
      			]
      		},
      		"advances": [
      			{
      				"description": "Paid in full",
      				"percent": "100%",
      				"amount": "1944.00"
      			}
      		],
      		"instructions": {
      			"key": "card",
      			"card": {},
      			"ext": {
      				"untdid-payment-means": "48"
      			}
      		}
      	},
      	"totals": {
      		"sum": "1620.00",
      		"total": "1620.00",
      		"taxes": {
      			"categories": [
      				{
      					"code": "VAT",
      					"rates": [
      						{
      							"key": "standard",
      							"ext": {
      								"untdid-tax-category": "S"
      							},
      							"base": "1620.00",
      							"percent": "20%",
      							"amount": "324.00"
      						}
      					],
      					"amount": "324.00"
      				}
      			],
      			"sum": "324.00"
      		},
      		"tax": "324.00",
      		"total_with_tax": "1944.00",
      		"payable": "1944.00",
      		"advance": "1944.00",
      		"due": "0.00"
      	},
      	"notes": [
      		{
      			"key": "payment",
      			"text": "Conditions de paiement selon les conditions générales de vente.",
      			"ext": {
      				"untdid-text-subject": "PMT"
      			}
      		},
      		{
      			"key": "payment-method",
      			"text": "Pénalités et indemnités de retard applicables conformément aux conditions générales de vente.",
      			"ext": {
      				"untdid-text-subject": "PMD"
      			}
      		},
      		{
      			"key": "payment-term",
      			"text": "Aucun escompte n'est accordé pour paiement anticipé.",
      			"ext": {
      				"untdid-text-subject": "AAB"
      			}
      		}
      	]
      }
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

## FAQ

Invoicing questions

<AccordionGroup>
  <Accordion title="How do I configure my workspace for French invoicing?">
    Two channels depending on the recipient: B2G uses Chorus Pro (CII format); B2B from September 2026 uses the Plateforme Agréée model (UBL, CII, or Factur-X via Peppol). Invopop is an approved PA — install the France PA app for B2B and the Chorus Pro app for B2G.
  </Accordion>

  <Accordion title="How can I view an XML attached to a PDF?">
    In Factur-X PDFs, the XML file is embedded within the PDF itself. To extract and view it, use the `Attachments` section in Adobe Acrobat Reader, or a tool like the [SysTools PDF Extractor](https://www.systoolsgroup.com/pdf/extractor/).
  </Accordion>

  <Accordion title="Is Invopop ready for the September 2026 mandate?">
    Invopop is an [officially approved Plateforme Agréée](https://www.impots.gouv.fr/je-consulte-la-liste-des-plateformes-agreees) under the DGFiP mandate. Registration, invoicing, and lifecycle status are available today; e-reporting (Flow 10) is in active development. See the [PA hub readiness matrix](/guides/fr-pa) for the current state.
  </Accordion>

  <Accordion title="What GOBL addons are required for France PA?">
    The base [FR tax regime](https://docs.gobl.org/regimes/fr) plus the EN 16931 profile. For Peppol delivery, `peppol-bis-v3`. The forthcoming `fr-ctc-flow10-v1` addon covers e-reporting payloads — separate from the e-invoicing flow.
  </Accordion>

  <Accordion title="Is a self-billed invoice a different document type in France?">
    No. Most Peppol countries treat self-billing as a document type of its own, but France models it as a **standard invoice** with the `untdid-document-type` extension set to `389`. In GOBL you never set the code yourself: add the `self-billed` tag and the [`fr-ctc-flow2-v1`](https://docs.gobl.org/addons/fr-ctc-flow2-v1#standard-self-billed) add-on applies it automatically. See [Self-billing](/guides/fr-pa-invoicing#self-billing) for the full flow.
  </Accordion>

  <Accordion title="Why was my VAT-exempt invoice never sent to the PPF?">
    Transactions exempt under articles 261 to 261 E of the CGI — insurance, medical care, education and the rest of that range — sit outside the e-invoicing mandate, and the PPF rejects them if you deposit one. When an invoice's whole VAT breakdown is exempt and carries a `VATEX-FR-CGI261*` code, Invopop records it but sends no F1 and raises no lifecycle status, and the dashboard shows it as <Badge color="blue">Exempt</Badge>. Keep issuing the invoice to your customer as usual. An invoice that mixes exempt and taxable lines is still sent normally, and so is `VATEX-FR-FRANCHISE`. See [VAT-exempt invoices](/guides/fr-pa-invoicing#vat-exempt-invoices).
  </Accordion>

  <Accordion title="How many pops does a B2B e-invoice through France PA cost?">
    Each invoice or lifecycle status sent through France PA costs **5 pops**: 1 pop for the conversion to UBL/CII, 2 pops to send it over Peppol, 1 pop to forward it to the PPF, and 1 pop for the silo entry. See [Pops & pricing](/get-started/pricing) for how pops work.
  </Accordion>

  <Accordion title="What does the record document step check against the Annuaire?">
    Before an invoice is recorded, the **PPF record document** step looks up both the supplier and the customer SIREN in the Annuaire. What each party must satisfy depends on the workflow's role:

    | Role | Annuaire state | Outcome |
    | - | - | - |
    | Both | The SIREN has no effective entry | **Rejected** |
    | Receiving | The SIREN has at least one effective entry | **Accepted** |
    | Sending | The SIREN's only entry is the PPF's default line (matricule `9998`) | **Accepted** |
    | Sending | The party's `0225` peppol endpoint matches one of the SIREN's entries | **Accepted** |
    | Sending | The party's `0225` peppol endpoint matches none of the SIREN's entries | **Rejected** |

    Sandbox invoices skip the Annuaire check entirely.
  </Accordion>

  <Accordion title="What should I do if the customer isn't registered in the Annuaire?">
    Don't block the sale. An exchange where only one party has an
    effective Annuaire entry is a
    [non-regulated flow](/guides/fr-pa#key-concepts): it leaves
    e-invoicing (flux 2) and is covered by
    [e-reporting](/guides/fr-pa-reporting) (flux 10) instead.

    In practice:

    * Run a [Directory lookup](/guides/fr-lookup) against the
      customer's SIREN before you generate the invoice — ideally in a
      separate validation workflow run against customer data, so you
      can prompt them to fix their registration ahead of time.
    * If the SIREN has no effective entry, route the invoice through
      your reporting workflow rather than the PA send workflow.
    * If it slips through, the send workflow degrades rather than
      failing: the **Verify document can be sent** step branches and
      forwards the invoice to the PPF as *déposée – non transmise*.

    A missing entry is common and not necessarily an error. A SIREN
    visible in the public
    [annuaire-entreprises](https://annuaire-entreprises.data.gouv.fr)
    registry is not the same as an effective entry in the DGFiP
    Annuaire, which only covers entities in scope of the mandate. It
    can also be absent because the buyer hasn't yet appointed a PA, or
    because their tax records don't match.
  </Accordion>

  <Accordion title="Should I check the Annuaire at order time or at invoice time?">
    Both, for different reasons. A lookup at order or onboarding time
    is a data-quality check: it lets you warn the customer and get
    their SIREN or PA sorted before invoicing. A lookup at invoice
    time is the one that decides the flow, because registrations are
    added and withdrawn continuously and a party found at checkout may
    no longer be routable days later (and vice versa).

    Treat the early result as advisory, resolve again at generation,
    and store the resolved electronic address on the transaction —
    the routing address isn't always the bare SIREN. See
    [Directory lookup](/guides/fr-lookup).
  </Accordion>

  <Accordion title="What should we do if the customer doesn't belong to the Peppol network?">
    In countries where Peppol is the standard but not mandatory, you may still need to issue an e-invoice when the recipient isn't on the network. Both parties can agree on an alternative transfer method, but the invoice must still be EN16931 compliant.

    Recommended approach:

    * Set up a separate workflow that generates the XML without the send-Peppol-document step
    * Or reuse your existing workflow without the customer Peppol ID — the send step is automatically skipped
    * Fetch the generated XML and deliver it through the agreed channel, typically email
  </Accordion>

  <Accordion title="How do I handle B2C invoices in Peppol?">
    B2C invoices typically lack the structured customer information required for Peppol delivery, and most consumers don't have inboxes. Use a conditional workflow:

    1. Add an **If/Else** step that checks for a customer inbox using `count(customer.inboxes, true) > 0`.
    2. On the `false` branch, generate a PDF and email it to the customer, then stop the flow.

    This routes B2B invoices through Peppol while keeping a smooth path for consumers.
  </Accordion>

  <Accordion title="How do I handle 'Receiver Not Found' errors?">
    If a job fails with `KO` and `receiver not found in the peppol network`, treat it like an invalid email address — the recipient simply isn't reachable on Peppol. Add the **Lookup Participant ID** step (ideally in a separate validation workflow run against customer data) so you catch missing IDs before generating the invoice.
  </Accordion>

  <Accordion title="Should I set the `$regime` field when using Peppol?">
    No. The regime is automatically derived from the supplier's settings, which is the recommended approach for Peppol — leave it unset on the document.
  </Accordion>

  <Accordion title="Where do I find Peppol GOBL documentation?">
    See the [`eu-en16931-v2017`](https://docs.gobl.org/addons/eu-en16931-v2017) addon for the field and validation rules Peppol BIS Billing 3.0 builds on, and the [Peppol app reference](/apps/peppol) for supported document types and Participant ID schemes.
  </Accordion>
</AccordionGroup>

Receiving questions

<AccordionGroup>
  <Accordion title="How do I import received invoices in France?">
    Register the recipient with Invopop as their Plateforme Agréée. Inbound documents (UBL, CII, Factur-X) are converted to GOBL and stored in the Expenses folder. Chorus Pro inbound flow is separate and routes via the Chorus Pro app.
  </Accordion>

  <Accordion title="How does Invopop convert received French invoices into GOBL?">
    UBL via [`gobl.peppol`](https://github.com/invopop/gobl.peppol); CII and Factur-X via [`gobl.cii`](https://github.com/invopop/gobl.cii). The original structured XML (or PDF/A-3 with embedded XML) is preserved as a silo entry attachment.
  </Accordion>

  <Accordion title="How do I import received invoices via France PA?">
    Register the recipient via Invopop as their PA. Inbound UBL/CII/Factur-X documents are routed to the configured Import workflow and become GOBL silo entries. Lifecycle status updates (CDAR) feed back to the issuer through the same channel.
  </Accordion>

  <Accordion title="What format do received France PA invoices arrive in?">
    UBL, CII, or Factur-X (PDF with embedded CII XML), all conforming to EN 16931 and the French CTC profile. Invopop preserves the original and exposes the GOBL conversion.
  </Accordion>

  <Accordion title="Can I receive invoices at more than one platform (PDP) for the same company?">
    Yes. A single company can be reachable at several destinations by registering different routing identifiers (electronic addresses) in the Annuaire — one per PDP or inbox. Invoices addressed to a given identifier are delivered to the platform registered against it, so you can route some invoices to Invopop and others to a different PDP (for example a travel-and-expense tool) for the same SIREN.

    The Annuaire supports several address formats that map to increasingly granular destinations within the same company:

    * `SIREN` — the company as a whole.
    * `SIREN_SIRET` — a specific establishment.
    * `SIREN_SIRET_ROUTINGCODE` — a site, department, or workflow within an establishment.
    * `SIREN_SUFFIX` — a custom routing suffix.

    Give each PDP or inbox a distinct identifier and share the matching address with each issuer, so their invoices reach the intended destination. You can [look up an electronic address](/guides/fr-lookup) in the Annuaire to confirm where it currently routes.
  </Accordion>

  <Accordion title="What is checked before a received invoice is recorded?">
    An invoice arriving from another platform goes through three controls, run in the order the PPF applies them:

    * **Syntax** — the invoice XML against the Flux 2 schematron for its syntax.
    * **Addressing** — both parties carry a SIREN registered in the Annuaire, the transport addresses belong to the parties the invoice names, and the invoice is addressed to a party registered in your workspace.
    * **Unicity** — the invoice is not already recorded for this party, number and year.

    An invoice that passes every control is recorded on the receiving side. Only invoices are validated this way; incoming lifecycle statuses are simply recorded.
  </Accordion>

  <Accordion title="What reason does a rejected invoice come back with?">
    Each control rejects under its own CDAR motif, carried on the [`213` Rejetée](/guides/fr-pa-status#issued-by-the-platform) status returned to the platform that sent the invoice:

    * `REJ_SEMAN` — *rejet pour erreur sémantique*, when the invoice fails the Flux 2 schematron.
    * `ADR_ERR` — *adresse de facturation électronique erronée*, when the addressing control fails.
    * `REJ_UNI` — *rejet sur contrôle unicité*, when the invoice is already recorded.
  </Accordion>

  <Accordion title="How do I import received invoices via Peppol?">
    Register the recipient as a Peppol participant with Invopop as their Access Point. Incoming documents are routed through your configured Import workflow, which converts the UBL or CII payload to GOBL and stores the entry in the Expenses folder.
  </Accordion>

  <Accordion title="Can I remove UBL or CII from the 'Peppol receive invoice' workflow if I only use one format?">
    Yes. Either format can be removed based on your needs. The default template includes both for comprehensiveness, but if you're certain you'll only receive invoices in one syntax, dropping the other simplifies the workflow and reduces the apps you need to activate.
  </Accordion>

  <Accordion title="How are incoming Peppol documents converted into GOBL?">
    The Import workflow's UBL and CII parser steps map the inbound XML into a GOBL invoice. From there you can route it to webhooks, Google Drive, accounting integrations, or any other destination — the GOBL representation is the single source of truth for downstream processing.
  </Accordion>
</AccordionGroup>

More Q\&A available in our [France FAQ](/faq/france) section

***

<AccordionGroup>
  <Accordion title="🇫🇷 Invopop resources for France">
    | | |
    | - | - |
    | Compliance | <Icon icon="https://assets.invopop.com/flags/fr.svg" /> [Invoicing compliance in France](/compliance/france)<br /> <Icon icon="timeline" /> [Compliance timeline](/timelines/france) |
    | Apps | <Icon icon="https://assets.invopop.com/flags/fr.svg" /> [France](/apps/france)<br /><Icon icon="https://assets.invopop.com/apps/peppol/icon.svg" /> [Peppol](/apps/peppol)<br /><Icon icon="https://assets.invopop.com/apps/chroruspro/icon.svg" /> [Chorus Pro France](/apps/choruspro-france) |
    | Guides | <Icon icon="book" /> Chorus Pro — [Supplier registration](/guides/fr-chorus-pro-supplier) · [Issuing invoices](/guides/fr-chorus-pro)<br /><Icon icon="book" /> [PA Guide](/guides/fr-pa) — [Registration](/guides/fr-pa-registration) · [Invoicing](/guides/fr-pa-invoicing) · [Status](/guides/fr-pa-status) · [Reporting](/guides/fr-pa-reporting) |
    | FAQ | <Icon icon="square-question" /> [France FAQ](/faq/france) |
    | GOBL | <Icon icon="https://assets.invopop.com/icons/gobl.svg" />  [France Tax Regime](https://docs.gobl.org/regimes/fr)<br /> <Icon icon="https://assets.invopop.com/icons/gobl.svg" /> [Chorus Pro Addon](https://docs.gobl.org/addons/fr-choruspro-v1)<br /> <Icon icon="https://assets.invopop.com/icons/gobl.svg" /> [French Factur-X Addon](https://docs.gobl.org/addons/fr-facturx-v1) |
    | GitHub | <Icon icon="github" /> [gobl.xinvoice](https://github.com/invopop/gobl.xinvoice) |
  </Accordion>
</AccordionGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.