> ## 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.

# ChorusPro France

> Submit B2G invoices to the French ChorusPro system.

<Tabs>
  <Tab title="Description">
    <Columns cols="2">
      <div class="flex flex-col grow items-center justify-center">
        <Card title="Chorus Pro France" icon="https://assets.invopop.com/apps/chroruspro/icon.svg" href="/guides/fr-chorus-pro" horizontal>
          View implementation guide ›
        </Card>
      </div>

      |           |                                |
      | --------- | ------------------------------ |
      | Developer | [Invopop](https://invopop.com) |
      | Category  | Government                     |
      | Scope     | B2G                            |
      | Country   | [France](/compliance/france)   |
    </Columns>

    Chorus Pro is a mandatory service provided by the French government for invoicing French public institutions. The platform allows businesses to upload invoices in multiple e-invoicing formats and track them throughout the French public administration process. All invoices to French public sector entities must be submitted through Chorus Pro.

    The platform supports various e-invoicing formats including [Cross Industry Invoice (CII)](https://unece.org/trade/uncefact/e-invoice), and implements the [European Norm 16931 (EN16931)](https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/European+Standard+and+Specifications) European standard for electronic invoicing with additional French-specific requirements.

    **Key Features**

    * **Workflow Automation:** Provides automated workflows for supplier registration and invoice submission to French public institutions through Chorus Pro.
    * **CII Format Generation:** Using the UN/CEFACT CII format with Chorus Pro V1 extensions ensures compliance with French B2G invoicing requirements.
    * **EN16931 Compliance:** Implements the European Norm 16931 standard with French-specific extensions including SIRET number validation and service codes for government departments.
    * **Supplier Registration:** Automated supplier registration workflow that generates unique registration links for suppliers to complete Chorus Pro authentication.
    * **Invoice Submission:** Direct submission of invoices to the Chorus Pro platform with CII XML generation and validation.
    * **Invoice Tracking:** Track invoice status using invoice identifiers (series plus code) in the Chorus Pro portal.
    * **Invoice Modification:** Supports modification and resubmission of invoices until they are accepted by the receiving French public institution.

    ## 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="What invoice formats does Chorus Pro support?">
        Chorus Pro primarily supports CII format based on EN16931. Invopop currently focuses on CII with plans to add additional formats in the future.
      </Accordion>

      <Accordion title="Do I need a SIRET number to use Chorus Pro?">
        French businesses need a SIRET number. Foreign businesses can use their local tax identifier, but should verify acceptance with the receiving French institution.
      </Accordion>

      <Accordion title="Can I modify invoices after sending to Chorus Pro?">
        Yes, you can modify and resubmit invoices until the receiving institution accepts them. Once accepted, invoices become locked and cannot be modified.
      </Accordion>

      <Accordion title="How do I find my invoice in Chorus Pro?">
        Use your GOBL invoice series and code combined as the invoice identifier in the Chorus Pro portal to locate your submitted invoices.
      </Accordion>

      <Accordion title="Are there file size limits for Chorus Pro invoices?">
        Chorus Pro has specific file size and format requirements. Invopop handles these automatically when generating CII XML files from your GOBL invoices.
      </Accordion>

      <Accordion title="What GOBL fields are required for Chorus Pro?">
        The recipient's SIRET (or equivalent identifier) plus a Chorus Pro service code where applicable. Invopop generates EN 16931 CII XML by default — UBL is also accepted by Chorus Pro.
      </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 [`oasis-ubl-v2`](https://docs.gobl.org/addons/oasis-ubl-v2) addon and the [Peppol app reference](/apps/peppol) for required fields, supported document types, and Participant ID schemes.
      </Accordion>
    </AccordionGroup>

    Registering supplier questions

    <AccordionGroup>
      <Accordion title="How do I onboard a new supplier in France?">
        For B2B PA flows: register the supplier via the France PA Register Party workflow (publishes the SIREN to the Annuaire and Peppol). For Chorus Pro: register the supplier with their SIRET on Chorus Pro's portal and link credentials in the Chorus Pro app.
      </Accordion>

      <Accordion title="How are supplier credentials stored in Invopop for France?">
        France PA does not require supplier-side certificates — Peppol uses Invopop's AP cert. Chorus Pro uses an OAuth token bound to the supplier's account; the token is encrypted at rest in Invopop.
      </Accordion>

      <Accordion title="What happens if my supplier registration fails?">
        Ensure the supplier has a valid Chorus Pro account and provided correct credentials. Contact support if registration workflow issues persist.
      </Accordion>

      <Accordion title="What credentials does Chorus Pro require to authenticate a supplier?">
        OAuth 2.0 client credentials issued by Chorus Pro after registration. Invopop stores the token encrypted; suppliers can revoke access at any time through Chorus Pro's portal.
      </Accordion>

      <Accordion title="How do I register for a Peppol inbox in Invopop?">
        Upload the company as a party (Console → Parties → Suppliers → + New Supplier, or via the Create an Entry API) with name, tax\_id, address, and email. Then run it through the party registration workflow — the contact will receive a registration wizard link to provide proof of ownership.

        Once approved, the party is registered on the Peppol network (SMP+SML+Peppol visibility by default with the `ubl-invoice` doc group) and ready to receive invoices.
      </Accordion>

      <Accordion title="I get 'XXXX:XXXXXXXXX is already registered' when registering a supplier — what now?">
        A supplier with that Participant ID already exists in your workspace. Either reuse the existing party or, if it really is a new entity, check whether it should be registered under an alternative scheme (for example Belgium's `9925` VAT scheme rather than the default `0208`).
      </Accordion>

      <Accordion title="How do I assign multiple inboxes to a single supplier?">
        Register them through different silo entries, even though they represent the same legal party. The supplier must upload proof of ownership for each inbox.
      </Accordion>

      <Accordion title="What are Participant IDs?">
        Unique identifiers for entities on the Peppol network, made up of two parts:

        * **Scheme** — identifies the type of identifier (e.g. `9920` for Spanish VAT, `0208` for Belgian KBO/BCE)
        * **Code** — the actual identification number

        Participant IDs are usually based on VAT numbers or local business identifiers, and Invopop can derive them automatically from a Tax ID. Some countries support multiple schemes — Belgium, for example, defaults to `0208` but some entities are only registered under `9925` (VAT). If you hit a "receiver not found" error, the recipient may be registered under an alternative scheme.
      </Accordion>

      <Accordion title="What visibility level should I set on my Peppol Party?">
        Peppol Party visibility determines what you can send and receive:

        * `smp` — SMP only, for testing
        * `smp+sml` — SMP and SML, useful when you only want to send
        * `smp+sml+peppol` — SMP, SML, and the Peppol Directory, recommended for both sending and receiving (and for being discoverable in the Directory)

        In general, use the highest visibility available.
      </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 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>

    Reporting questions

    <AccordionGroup>
      <Accordion title="How do I schedule periodic reports for France?">
        For TVA, file via DGFiP's portal — Invopop does not generate CA3 yet. For e-reporting (Flow 10): submit via your Plateforme Agréée — Invopop's e-reporting workflow batches transactions per period and submits to the PPF.
      </Accordion>

      <Accordion title="What format does France expect for periodic reports?">
        TVA: DGFiP's EDI-TVA XML schema. E-reporting Flow 10: a structured JSON/XML payload defined by the PPF specification (currently in beta). Invopop emits Flow 10 via the upcoming `fr-ctc-flow10-v1` GOBL addon.
      </Accordion>
    </AccordionGroup>

    More answers in our [France FAQ](/faq/france) section
  </Tab>

  <Tab title="Actions">
    <Card title="Send invoice to Chorus Pro" icon="https://assets.invopop.com/apps/chroruspro/icon.svg" horizontal>
      <div class="pop-count"><Icon icon="https://assets.invopop.com/icons/pops.svg" /> 3</div>
      Creates a flux with the generated file and sends it to Chorus Pro.
    </Card>

    <Card title="Register supplier with Chorus Pro" icon="https://assets.invopop.com/apps/chroruspro/icon.svg" horizontal>
      Register a supplier in Invopop to enable e-invoicing in Chorus Pro. A supplier must then provide a Technical Account.
    </Card>

    <Card title="Wait for Chorus Pro credentials" icon="https://assets.invopop.com/apps/chroruspro/icon.svg" horizontal>
      This step will wait until the user completes the form.
    </Card>
  </Tab>

  <Tab title="Workflows">
    <AccordionGroup>
      <Accordion title="Chorus Pro issue invoice">
        ```json Example Chorus Pro issue invoice workflow theme={"system"}
        {
            "name": "Chorus Pro issue invoice",
            "description": "Issue a B2G invoice through Chorus Pro using CII",
            "schema": "bill/invoice",
            "steps": [
                {
                    "id": "241c1b60-4cec-11f0-bcdc-61b84b5eeae8",
                    "name": "Set state",
                    "provider": "silo.state",
                    "summary": "Set state to `processing`{.state .processing}",
                    "config": {
                        "state": "processing"
                    }
                },
                {
                    "id": "0dba81f0-4ba1-11f0-a0a5-bbd7c9d8117a",
                    "name": "Sign envelope",
                    "provider": "silo.close"
                },
                {
                    "id": "3d048690-4ba1-11f0-a0a5-bbd7c9d8117a",
                    "name": "Generate CII document",
                    "provider": "cii.generate",
                    "summary": "Chorus Pro v1",
                    "config": {
                        "doc_type": "choruspro-v1"
                    }
                },
                {
                    "id": "2cd30490-4ba1-11f0-a0a5-bbd7c9d8117a",
                    "name": "Send invoice to Chorus Pro",
                    "provider": "chorus-pro.send"
                },
                {
                    "id": "282dac00-4cec-11f0-bcdc-61b84b5eeae8",
                    "name": "Set state",
                    "provider": "silo.state",
                    "summary": "Set state to `sent`{.state .sent}",
                    "config": {
                        "state": "sent"
                    }
                }
            ],
            "rescue": [
                {
                    "id": "2b9c6cf0-4cec-11f0-bcdc-61b84b5eeae8",
                    "name": "Set state",
                    "provider": "silo.state",
                    "summary": "Set state to `error`{.state .error}",
                    "config": {
                        "state": "error"
                    }
                }
            ]
        }
        ```
      </Accordion>

      <Accordion title="Chorus Pro register supplier">
        ```json Example Chorus Pro register supplier workflow theme={"system"}
        {
            "name": "Chorus Pro register supplier",
            "description": "Register a supplier with Chorus Pro",
            "schema": "org/party",
            "steps": [
                {
                    "id": "9ed27c40-4ced-11f0-bcdc-61b84b5eeae8",
                    "name": "Set state",
                    "provider": "silo.state",
                    "summary": "Set state to `processing`{.state .processing}",
                    "config": {
                        "state": "processing"
                    }
                },
                {
                    "id": "b8d3dc10-4ba3-11f0-a0a5-bbd7c9d8117a",
                    "name": "Register supplier with Chorus Pro",
                    "provider": "chorus-pro.register"
                },
                {
                    "id": "a3d43940-4ced-11f0-bcdc-61b84b5eeae8",
                    "name": "Set state",
                    "provider": "silo.state",
                    "summary": "Set state to `registered`{.state .registered}",
                    "config": {
                        "state": "registered"
                    }
                }
            ],
            "rescue": [
                {
                    "id": "a6c4f090-4ced-11f0-bcdc-61b84b5eeae8",
                    "name": "Set state",
                    "provider": "silo.state",
                    "summary": "Set state to `error`{.state .error}",
                    "config": {
                        "state": "error"
                    }
                }
            ]
        }
        ```
      </Accordion>
    </AccordionGroup>
  </Tab>

  <Tab title="Documents">
    <AccordionGroup>
      <Accordion title="Chorus Pro B2G Invoice">
        In this example, we're issuing a Chorus Pro invoice for business-to-government transactions in France. Chorus Pro is the mandatory platform for submitting invoices to French public sector entities.

        Notice:

        * the minimal version (`chorus-pro-b2g.min.mdx`) contains only the essential fields required to create the B2G invoice,
        * the [`fr-chorus-pro-v1`](https://docs.gobl.org/addons/fr-chorus-pro-v1) addon ensures the document will be validated using the Chorus Pro rules built into the [GOBL](https://docs.gobl.org) library,
        * the customer must be a French public sector entity with a valid SIRET number,
        * specific Chorus Pro extensions and identifiers are required for public procurement (such as service codes and commitment numbers),
        * there are no totals or calculations in the minimal version; all these will be calculated automatically when running `gobl build`,
        * the built version (`chorus-pro-b2g.mdx`) shows the normalized document with calculated totals, line item sums, TVA breakdowns, and automatically generated fields,
        * the invoice will be formatted according to Chorus Pro requirements and submitted through the platform, and,
        * all invoices to French public entities above €25,000 must be submitted through Chorus Pro.

        <CodeGroup>
          ```json Chorus Pro B2G Invoice theme={"system"}
          {
              "$schema": "https://gobl.org/draft-0/bill/invoice",
              "$regime": "FR",
              "$addons": [
                  "eu-en16931-v2017",
                  "fr-choruspro-v1"
              ],
              "uuid": "019783e7-33b1-7000-a1a5-6139e214b447",
              "type": "standard",
              "series": "SAMPLE",
              "code": "2345",
              "issue_date": "2025-06-18",
              "currency": "EUR",
              "supplier": {
                  "name": "Provide One Inc.",
                  "tax_id": {
                      "country": "FR",
                      "code": "43498927917"
                  },
                  "identities": [
                      {
                          "type": "SIRET",
                          "code": "49892791768734"
                      }
                  ],
                  "addresses": [
                      {
                          "num": "42",
                          "street": "Calle Pradillo",
                          "locality": "Madrid",
                          "region": "Madrid",
                          "code": "28002",
                          "country": "ES"
                      }
                  ],
                  "emails": [
                      {
                          "addr": "billing@example.com"
                      }
                  ]
              },
              "customer": {
                  "name": "Sample Consumer",
                  "tax_id": {
                      "country": "FR",
                      "code": "39356000000"
                  },
                  "identities": [
                      {
                          "type": "SIRET",
                          "code": "35600000012345"
                      }
                  ],
                  "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",
                              "rate": "standard"
                          }
                      ],
                      "total": "1620.00"
                  }
              ],
              "payment": {
                  "advances": [
                      {
                          "description": "Paid in full",
                          "percent": "100%",
                          "amount": "1944.00"
                      }
                  ],
                  "instructions": {
                      "key": "card"
                  }
              }
          }
          ```

          ```json Built version theme={"system"}
          {
          	"$schema": "https://gobl.org/draft-0/bill/invoice",
          	"$regime": "FR",
          	"$addons": [
          		"eu-en16931-v2017",
          		"fr-choruspro-v1"
          	],
          	"uuid": "019783e7-33b1-7000-a1a5-6139e214b447",
          	"type": "standard",
          	"series": "SAMPLE",
          	"code": "2345",
          	"issue_date": "2025-06-18",
          	"currency": "EUR",
          	"tax": {
          		"ext": {
          			"fr-choruspro-framework": "A1",
          			"untdid-document-type": "380"
          		}
          	},
          	"supplier": {
          		"name": "Provide One Inc.",
          		"tax_id": {
          			"country": "FR",
          			"code": "43498927917"
          		},
          		"identities": [
          			{
          				"type": "SIRET",
          				"code": "49892791768734"
          			}
          		],
          		"addresses": [
          			{
          				"num": "42",
          				"street": "Calle Pradillo",
          				"locality": "Madrid",
          				"region": "Madrid",
          				"code": "28002",
          				"country": "ES"
          			}
          		],
          		"emails": [
          			{
          				"addr": "billing@example.com"
          			}
          		],
          		"ext": {
          			"fr-choruspro-scheme": "1"
          		}
          	},
          	"customer": {
          		"name": "Sample Consumer",
          		"tax_id": {
          			"country": "FR",
          			"code": "39356000000"
          		},
          		"identities": [
          			{
          				"type": "SIRET",
          				"code": "35600000012345"
          			}
          		],
          		"addresses": [
          			{
          				"num": "1",
          				"street": "Rue Sundacsakn",
          				"locality": "Saint-Germain-En-Laye",
          				"code": "75050",
          				"country": "FR"
          			}
          		],
          		"emails": [
          			{
          				"addr": "email@sample.com"
          			}
          		],
          		"ext": {
          			"fr-choruspro-scheme": "1"
          		}
          	},
          	"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": {
          		"advances": [
          			{
          				"description": "Paid in full",
          				"percent": "100%",
          				"amount": "1944.00"
          			}
          		],
          		"instructions": {
          			"key": "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"
          	}
          }
          ```
        </CodeGroup>
      </Accordion>

      <Accordion title="Chorus Pro cross-border invoice (DE → FR)">
        A non-French supplier invoicing a French public sector entity through Chorus Pro. Chorus Pro accepts foreign suppliers — the customer's SIRET is what anchors the document to the right administration.

        Notice:

        * the supplier carries a DE tax ID and address, while the customer keeps its `SIRET` identity,
        * the `fr-choruspro-v1` add-on still applies — Chorus Pro routing rules are driven by the receiver, not the issuer,
        * VAT is reported as standard French VAT because the place of supply is France; cross-border reverse-charge cases would set the line tax accordingly.

        <CodeGroup>
          ```json Chorus Pro Cross-Border Invoice (DE → FR) theme={"system"}
          {
              "$schema": "https://gobl.org/draft-0/bill/invoice",
              "$regime": "FR",
              "$addons": [
                  "fr-choruspro-v1"
              ],
              "type": "standard",
              "series": "SAMPLE",
              "code": "001",
              "issue_date": "2022-02-01",
              "currency": "EUR",
              "supplier": {
                  "name": "Provide One Inc.",
                  "tax_id": {
                      "country": "DE",
                      "code": "111111125"
                  },
                  "addresses": [
                      {
                          "num": "42",
                          "street": "Berliner Strasse",
                          "locality": "Berlin",
                          "code": "10117",
                          "country": "DE"
                      }
                  ],
                  "emails": [
                      {
                          "addr": "billing@example.com"
                      }
                  ]
              },
              "customer": {
                  "name": "Sample Public Entity",
                  "tax_id": {
                      "country": "FR",
                      "code": "732829320"
                  },
                  "identities": [
                      {
                          "type": "SIRET",
                          "code": "73282932012345"
                      }
                  ],
                  "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": [
                          {
                              "percent": "10%",
                              "reason": "Special discount"
                          }
                      ],
                      "taxes": [
                          {
                              "cat": "VAT",
                              "rate": "standard"
                          }
                      ]
                  }
              ],
              "payment": {
                  "terms": {
                      "detail": "Please pay within 10 days"
                  }
              }
          }
          ```

          ```json Built version theme={"system"}
          {
          	"$schema": "https://gobl.org/draft-0/bill/invoice",
          	"$regime": "FR",
          	"$addons": [
          		"eu-en16931-v2017",
          		"fr-choruspro-v1"
          	],
          	"type": "standard",
          	"series": "SAMPLE",
          	"code": "001",
          	"issue_date": "2022-02-01",
          	"currency": "EUR",
          	"tax": {
          		"ext": {
          			"fr-choruspro-framework": "A1",
          			"untdid-document-type": "380"
          		}
          	},
          	"supplier": {
          		"name": "Provide One Inc.",
          		"tax_id": {
          			"country": "DE",
          			"code": "111111125"
          		},
          		"addresses": [
          			{
          				"num": "42",
          				"street": "Berliner Strasse",
          				"locality": "Berlin",
          				"code": "10117",
          				"country": "DE"
          			}
          		],
          		"emails": [
          			{
          				"addr": "billing@example.com"
          			}
          		],
          		"ext": {
          			"fr-choruspro-scheme": "2"
          		}
          	},
          	"customer": {
          		"name": "Sample Public Entity",
          		"tax_id": {
          			"country": "FR",
          			"code": "44732829320"
          		},
          		"identities": [
          			{
          				"type": "SIRET",
          				"code": "73282932012345",
          				"ext": {
          					"iso-scheme-id": "0009"
          				}
          			}
          		],
          		"addresses": [
          			{
          				"num": "1",
          				"street": "Rue Sundacsakn",
          				"locality": "Saint-Germain-En-Laye",
          				"code": "75050",
          				"country": "FR"
          			}
          		],
          		"emails": [
          			{
          				"addr": "email@sample.com"
          			}
          		],
          		"ext": {
          			"fr-choruspro-scheme": "1"
          		}
          	},
          	"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": {
          			"notes": "Please pay within 10 days"
          		}
          	},
          	"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"
          	}
          }
          ```
        </CodeGroup>
      </Accordion>
    </AccordionGroup>

    Copy and paste these documents into the [GOBL builder](https://build.gobl.org) in order to preview and verify them.
  </Tab>
</Tabs>

***

<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" /> [ChorusPro France](/apps/choruspro-france)                                                                                        |
    | Guides     | <Icon icon="book" /> [ChorusPro Guide](/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>

<Card title="Participate in our community" icon="square-question" href="https://community.invopop.com" arrow="true" horizontal>
  Ask and answer questions about Chorus Pro France →
</Card>
