From 067ba74ba3fc5971ca1cc1e3d9acfbb2b8275563 Mon Sep 17 00:00:00 2001 From: apardods Date: Tue, 26 Nov 2024 10:12:37 +0000 Subject: [PATCH 01/12] XInvoice Guide --- guides/de-fr-xinvoice.mdx | 120 ++++++++++++++++++++++++++++++++++++++ mint.json | 1 + 2 files changed, 121 insertions(+) create mode 100644 guides/de-fr-xinvoice.mdx diff --git a/guides/de-fr-xinvoice.mdx b/guides/de-fr-xinvoice.mdx new file mode 100644 index 0000000..29af522 --- /dev/null +++ b/guides/de-fr-xinvoice.mdx @@ -0,0 +1,120 @@ +--- +title: "Germany & France - X-Invoice" +description: Issue invoices in Germany (X-Rechnung & ZUGFeRD) and France (Factur-X) +--- + +## Introduction + +X-Invoice covers the German and French electronic invoice standards. Germany has two formats: X-Rechnung and ZUGFeRD, while France uses Factur-X. The integration is the same for both countries. + +## Prerequisites + +To convert invoices to X-Invoice format, ensure you have: + +- A valid API key and a basic understanding of the [workflow engine](guides/workflows) and [API](api-ref/introduction). +- An invoice with: + - Supplier details (company name and required identities). Check the [German](https://docs.gobl.org/regimes/de) and [French](https://docs.gobl.org/regimes/fr) regimes for specifics. + - Line items with name, price, and applicable taxes. + - It's recommended to manually set the `regime` field to `DE` or `FR`. + +## Setup + +To issue invoices, configure a workflow in the [Invopop Console](https://console.invopop.com) with the following steps: + +- **Sign Envelope**: The envelope must be signed before processing. This can also be done in the **Add Sequential Code** step, which handles the invoice number. +- **Convert to X-Invoice**: Generates the X-Invoice XML document. Configure the step to one of the following formats: + - `XRechnung CII`: German X-Rechnung (v3.0.2) in CII syntax (XML only). + - `XRechnung UBL`: German X-Rechnung (v3.0.2) in UBL syntax (XML only). + - `ZUGFeRD`: German ZUGFeRD (v2.3.2) in hybrid format (PDF with embedded XML). + - `Factur-X`: French Factur-X (v1.07.2) in hybrid format (PDF with embedded XML). +- **Generate PDF**: For ZUGFeRD and Factur-X formats, this step creates the PDF with the embedded XML. + + +Both X-Rechnung CII and UBL formats are fully compliant with the German standard; they contain the same data, just structured differently. + + +## Example Workflow + + + + +Copy and paste the following JSON while editing a Workflow in "developer" mode. This example adds support for setting states on silo entries, which we strongly recommend. + +```json Example X-Rechnung Workflow with States +{ + "name": "X-Rechnung", + "description": "Convert to X-Rechnung", + "steps": [ + { + "id": "bd7eb640-abd0-11ef-a013-91c68ca9f44b", + "name": "Set State", + "config": { + "state": "processing" + }, + "summary": "Set state to `processing`{.state .processing}", + "provider": "silo.state" + }, + { + "id": "c37c3860-abd0-11ef-a013-91c68ca9f44b", + "name": "Sign Envelope", + "provider": "silo.close" + }, + { + "id": "78504b10-abd0-11ef-a013-91c68ca9f44b", + "name": "Convert to XRechnung/Factur-X", + "next": [ + { + "status": "KO", + "step_id": "c94982c0-abd0-11ef-a013-91c68ca9f44b" + } + ], + "provider": "xinvoice.convert" + }, + { + "id": "7ad436d0-abd0-11ef-a013-91c68ca9f44b", + "name": "Generate PDF", + "config": { + "locale": "en", + "date_format": "%Y-%m-%d", + "logo_height": 40 + }, + "summary": "English", + "provider": "pdf" + }, + { + "id": "c6192a60-abd0-11ef-a013-91c68ca9f44b", + "name": "Set State", + "next": [ + { + "stop": true, + "status": "NA" + } + ], + "config": { + "state": "sent" + }, + "summary": "Set state to `sent`{.state .sent}", + "provider": "silo.state" + }, + { + "id": "c94982c0-abd0-11ef-a013-91c68ca9f44b", + "name": "Set State", + "config": { + "state": "error" + }, + "summary": "Set state to `error`{.state .error}", + "provider": "silo.state" + }, + { + "id": "d0a36090-abd0-11ef-a013-91c68ca9f44b", + "name": "Send a Slack Message", + "provider": "slack.message" + } + ] +} +``` + + + + +You can now generate invoices in the X-Invoice format via the API or console. For more details, visit the [GOBL docs](https://docs.gobl.org) and [XInvoice repo](https://github.com/invopop/xinvoice), or contact [Invopop Support](mailto:support@invopop.com). diff --git a/mint.json b/mint.json index cbe0c3b..7863c86 100644 --- a/mint.json +++ b/mint.json @@ -164,6 +164,7 @@ "guides/co-dian", "guides/it-sdi", "guides/pt-invoicexpress", + "guides/de-fr-xinvoice", "guides/chargebee" ] } From eefe19371cce71e878cbc6c6a9ad7ed0ad1e363a Mon Sep 17 00:00:00 2001 From: apardods Date: Fri, 6 Dec 2024 09:24:08 +0000 Subject: [PATCH 02/12] WIP: Adding changes --- guides/de-fr-xinvoice.mdx | 493 +++++++++++++++++++++++++++++++++++++- 1 file changed, 488 insertions(+), 5 deletions(-) diff --git a/guides/de-fr-xinvoice.mdx b/guides/de-fr-xinvoice.mdx index 29af522..8ff971d 100644 --- a/guides/de-fr-xinvoice.mdx +++ b/guides/de-fr-xinvoice.mdx @@ -5,7 +5,13 @@ description: Issue invoices in Germany (X-Rechnung & ZUGFeRD) and France (Factur ## Introduction -X-Invoice covers the German and French electronic invoice standards. Germany has two formats: X-Rechnung and ZUGFeRD, while France uses Factur-X. The integration is the same for both countries. +X-Invoice covers the German and French electronic invoice standards. The integration is the same for both countries. The supported standards are: + +- X-Rechnung: one of the two standards used in Germany. It consists on an XML file. It can be implemented using two different "syntaxes", CII and UBL. They both contain the same information, but include different field names. +- ZUGFeRD: the other standard used in Germany. It a hybrid format that consists on a PDF document with an embedded XML file. +- Factur-X: the standard used in France. It consists on a PDF document with an embedded XML file. It is worth noting that ZUGFeRD and Factur-X are a joint project between Germany and France, and their content is identical. + +In Germany, the law regarding e-invoicing indicates that the obligation falls on receiving invoices, not issuing them. Therefore, a compliant German merchant should be able to receive invoices X-Rechnung (both syntaxes) and ZUGFeRD. ## Prerequisites @@ -15,7 +21,6 @@ To convert invoices to X-Invoice format, ensure you have: - An invoice with: - Supplier details (company name and required identities). Check the [German](https://docs.gobl.org/regimes/de) and [French](https://docs.gobl.org/regimes/fr) regimes for specifics. - Line items with name, price, and applicable taxes. - - It's recommended to manually set the `regime` field to `DE` or `FR`. ## Setup @@ -29,9 +34,11 @@ To issue invoices, configure a workflow in the [Invopop Console](https://console - `Factur-X`: French Factur-X (v1.07.2) in hybrid format (PDF with embedded XML). - **Generate PDF**: For ZUGFeRD and Factur-X formats, this step creates the PDF with the embedded XML. - -Both X-Rechnung CII and UBL formats are fully compliant with the German standard; they contain the same data, just structured differently. - +## Running + +Invopop uses the [GOBL](https://gobl.org) library to process invoice conversions. Some example invoices are provided below, along with an example workflow to send the invoices to. We also recommend using the [GOBL Builder](https://build.gobl.org) to create your own invoices. + +Be sure to set the `regime` field to `DE` or `FR` in your invoices. This will add some extra validations to ensure the sent document is compliant. If you plan to issue X-Rechnung invoices, we also recommend using the X-Rechnung addon in GOBL, which includes further validations. ## Example Workflow @@ -118,3 +125,479 @@ Copy and paste the following JSON while editing a Workflow in "developer" mode. You can now generate invoices in the X-Invoice format via the API or console. For more details, visit the [GOBL docs](https://docs.gobl.org) and [XInvoice repo](https://github.com/invopop/xinvoice), or contact [Invopop Support](mailto:support@invopop.com). + +## Sample Invoices + + + +```json Regular B2B Invoice +{ + "$schema": "https://gobl.org/draft-0/bill/invoice", + "$regime": "DE", + "$addons": [ + "eu-en16931-v2017", + "de-xrechnung-v3" + ], + "uuid": "3aea7b56-59d8-4beb-90bd-f8f280d852a0", + "type": "standard", + "series": "SAMPLE", + "code": "001", + "issue_date": "2022-02-01", + "currency": "EUR", + "tax": { + "ext": { + "untdid-document-type": "380" + } + }, + "supplier": { + "name": "Provide One GmbH", + "tax_id": { + "country": "DE", + "code": "111111125" + }, + "addresses": [ + { + "num": "16", + "street": "Dietmar-Hopp-Allee", + "locality": "Walldorf", + "code": "69190", + "country": "DE" + } + ], + "emails": [ + { + "addr": "billing@example.com" + } + ] + }, + "customer": { + "name": "Sample Consumer", + "tax_id": { + "country": "DE", + "code": "282741168" + }, + "addresses": [ + { + "num": "25", + "street": "Werner-Heisenberg-Allee", + "locality": "München", + "code": "80939" + } + ], + "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", + "percent": "19%", + "ext": { + "untdid-tax-category": "S" + } + } + ], + "total": "1620.00" + } + ], + "payment": { + "instructions": { + "key": "credit-transfer+sepa", + "credit_transfer": [ + { + "iban": "DE89370400440532013000", + "name": "Random Bank Co." + } + ], + "ext": { + "untdid-payment-means": "58" + } + } + }, + "totals": { + "sum": "1620.00", + "total": "1620.00", + "taxes": { + "categories": [ + { + "code": "VAT", + "rates": [ + { + "key": "standard", + "ext": { + "untdid-tax-category": "S" + }, + "base": "1620.00", + "percent": "19%", + "amount": "307.80" + } + ], + "amount": "307.80" + } + ], + "sum": "307.80" + }, + "tax": "307.80", + "total_with_tax": "1927.80", + "payable": "1927.80" + } +} +``` + + + +```json Regular B2C Invoice +{ + "$schema": "https://gobl.org/draft-0/bill/invoice", + "$regime": "DE", + "$tags": [ + "simplified" + ], + "uuid": "3aea7b56-59d8-4beb-90bd-f8f280d852a0", + "type": "standard", + "series": "SAMPLE", + "code": "001", + "issue_date": "2022-02-01", + "currency": "EUR", + "tax": {}, + "supplier": { + "name": "Provide One GmbH", + "tax_id": { + "country": "DE" + }, + "addresses": [ + { + "num": "16", + "street": "Dietmar-Hopp-Allee", + "locality": "Walldorf", + "code": "69190", + "country": "DE" + } + ], + "emails": [ + { + "addr": "billing@example.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", + "percent": "19%" + } + ], + "total": "1620.00" + } + ], + "totals": { + "sum": "1620.00", + "total": "1620.00", + "taxes": { + "categories": [ + { + "code": "VAT", + "rates": [ + { + "key": "standard", + "base": "1620.00", + "percent": "19%", + "amount": "307.80" + } + ], + "amount": "307.80" + } + ], + "sum": "307.80" + }, + "tax": "307.80", + "total_with_tax": "1927.80", + "payable": "1927.80" + } +} +``` + + +```json +{ + "$schema": "https://gobl.org/draft-0/bill/invoice", + "$regime": "DE", + "$addons": [ + "eu-en16931-v2017" + ], + "uuid": "019231f1-9128-71fc-b0e2-820af3036d1b", + "type": "standard", + "series": "SAMPLE", + "code": "001", + "issue_date": "2024-02-13", + "currency": "EUR", + "supplier": { + "name": "Provide One GmbH", + "tax_id": { + "country": "DE", + "code": "111111125" + }, + "people": [ + { + "name": { + "given": "John", + "surname": "Doe" + } + } + ], + "addresses": [ + { + "num": "16", + "street": "Dietmar-Hopp-Allee", + "locality": "Walldorf", + "code": "69190", + "country": "DE" + } + ], + "emails": [ + { + "addr": "billing@example.com" + } + ], + "telephones": [ + { + "num": "+49100200300" + } + ] + }, + "customer": { + "name": "Sample Consumer", + "tax_id": { + "country": "DE", + "code": "282741168" + }, + "addresses": [ + { + "num": "25", + "street": "Werner-Heisenberg-Allee", + "locality": "München", + "code": "80939", + "country": "DE" + } + ], + "emails": [ + { + "addr": "email@sample.com" + } + ] + }, + "lines": [ + { + "i": 1, + "quantity": "20", + "item": { + "name": "Development services", + "price": "90.00", + "unit": "h" + }, + "sum": "1800.00", + "taxes": [ + { + "cat": "VAT", + "rate": "standard", + "percent": "19%" + } + ], + "total": "1800.00" + } + ], + "discounts": [ + { + "i": 1, + "amount": "10.00", + "taxes": [ + { + "cat": "VAT", + "rate": "standard", + "percent": "25%" + } + ], + "reason": "Promotion discount", + "ext": { + "untdid-allowance": "88" + } + } + ], + "charges": [ + { + "i": 1, + "amount": "11.00", + "taxes": [ + { + "cat": "VAT", + "rate": "standard", + "percent": "25%" + } + ], + "reason": "Freight", + "ext": { + "untdid-charge": "88" + } + } + ], + "ordering": { + "code": "PO4711", + "period": { + "start": "2013-03-10", + "end": "2013-04-10" + }, + "contracts": [ + { + "code": "2013-05" + } + ], + "receiving": [ + { + "code": "3544" + } + ], + "despatch": [ + { + "code": "5433" + } + ] + }, + "payment": { + "payee": { + "name": "Ebeneser Scrooge AS", + "identities": [ + { + "label": "CompanyID", + "code": "989823401" + }, + { + "label": "0088", + "code": "2298740918237" + } + ] + }, + "terms": { + "due_dates": [ + { + "date": "2013-07-20", + "amount": "2142.00", + "percent": "100%" + } + ], + "notes": "2 % discount if paid within 2 days\n Penalty percentage 10% from due date" + }, + "instructions": { + "key": "credit-transfer", + "ref": "0003434323213231", + "ext": { + "untdid-payment-means": "30" + }, + "credit_transfer": [ + { + "iban": "NO9386011117947", + "bic": "DNBANOKK" + } + ], + "direct_debit": { + "creditor": "987654321", + "account": "DE89370400440532013000", + "ref": "1234567890" + }, + "card": { + "last4": "1234", + "holder": "John Doe" + } + } + }, + "delivery": { + "receiver": { + "addresses": [ + { + "street": "Deliverystreet 2", + "street_extra": "Side door", + "locality": "DeliveryCity", + "region": "RegionD", + "code": "523427", + "country": "NO" + } + ] + }, + "identities": [ + { + "label": "0088", + "code": "6754238987643" + } + ], + "date": "2024-02-10" + }, + "tax": { + "ext": { + "untdid-document-type": "380" + } + }, + "totals": { + "sum": "1800.00", + "total": "1800.00", + "taxes": { + "categories": [ + { + "code": "VAT", + "rates": [ + { + "key": "standard", + "base": "1800.00", + "percent": "19%", + "amount": "342.00" + } + ], + "amount": "342.00" + } + ], + "sum": "342.00" + }, + "tax": "342.00", + "total_with_tax": "2142.00", + "payable": "2142.00" + } +} +``` + + + From d94c468a80a02a77ef97152d18d268878d173add Mon Sep 17 00:00:00 2001 From: apardods Date: Mon, 9 Dec 2024 11:58:55 +0000 Subject: [PATCH 03/12] Merge to single accordion --- guides/de-fr-xinvoice.mdx | 49 +++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/guides/de-fr-xinvoice.mdx b/guides/de-fr-xinvoice.mdx index 8ff971d..d50d851 100644 --- a/guides/de-fr-xinvoice.mdx +++ b/guides/de-fr-xinvoice.mdx @@ -38,7 +38,7 @@ To issue invoices, configure a workflow in the [Invopop Console](https://console Invopop uses the [GOBL](https://gobl.org) library to process invoice conversions. Some example invoices are provided below, along with an example workflow to send the invoices to. We also recommend using the [GOBL Builder](https://build.gobl.org) to create your own invoices. -Be sure to set the `regime` field to `DE` or `FR` in your invoices. This will add some extra validations to ensure the sent document is compliant. If you plan to issue X-Rechnung invoices, we also recommend using the X-Rechnung addon in GOBL, which includes further validations. +Be sure to set the `regime` field to `DE` or `FR` in your invoices. This will add some extra validations to ensure the sent document is compliant. If you plan to issue X-Rechnung invoices, we also recommend using the X-Rechnung addon in GOBL, which adds further validation based on [local rules](). ## Example Workflow @@ -124,12 +124,12 @@ Copy and paste the following JSON while editing a Workflow in "developer" mode. -You can now generate invoices in the X-Invoice format via the API or console. For more details, visit the [GOBL docs](https://docs.gobl.org) and [XInvoice repo](https://github.com/invopop/xinvoice), or contact [Invopop Support](mailto:support@invopop.com). +You can now generate invoices in the X-Invoice format via the API or console. For more details, visit the [GOBL docs](https://docs.gobl.org) and [XInvoice repo](https://github.com/invopop/gobl.xinvoice), or contact [Invopop Support](mailto:support@invopop.com). ## Sample Invoices - + ```json Regular B2B Invoice { "$schema": "https://gobl.org/draft-0/bill/invoice", @@ -263,9 +263,8 @@ You can now generate invoices in the X-Invoice format via the API or console. Fo } } ``` - - - +{/* + */} ```json Regular B2C Invoice { "$schema": "https://gobl.org/draft-0/bill/invoice", @@ -353,9 +352,9 @@ You can now generate invoices in the X-Invoice format via the API or console. Fo } } ``` - - -```json +{/* + */} +```json B2B Invoice with Additional Fields { "$schema": "https://gobl.org/draft-0/bill/invoice", "$regime": "DE", @@ -527,7 +526,7 @@ You can now generate invoices in the X-Invoice format via the API or console. Fo "key": "credit-transfer", "ref": "0003434323213231", "ext": { - "untdid-payment-means": "30" + "untdid-payment-means": "30" }, "credit_transfer": [ { @@ -536,33 +535,33 @@ You can now generate invoices in the X-Invoice format via the API or console. Fo } ], "direct_debit": { - "creditor": "987654321", - "account": "DE89370400440532013000", - "ref": "1234567890" + "creditor": "987654321", + "account": "DE89370400440532013000", + "ref": "1234567890" }, "card": { - "last4": "1234", - "holder": "John Doe" + "last4": "1234", + "holder": "John Doe" } } }, "delivery": { "receiver": { "addresses": [ - { - "street": "Deliverystreet 2", - "street_extra": "Side door", - "locality": "DeliveryCity", - "region": "RegionD", - "code": "523427", - "country": "NO" - } + { + "street": "Deliverystreet 2", + "street_extra": "Side door", + "locality": "DeliveryCity", + "region": "RegionD", + "code": "523427", + "country": "NO" + } ] }, "identities": [ { - "label": "0088", - "code": "6754238987643" + "label": "0088", + "code": "6754238987643" } ], "date": "2024-02-10" From 501d2752b975f98fa7f4b571ab64fe80b96bc863 Mon Sep 17 00:00:00 2001 From: apardods Date: Mon, 9 Dec 2024 12:40:36 +0000 Subject: [PATCH 04/12] Add syntax context --- guides/de-fr-xinvoice.mdx | 200 ++++++++++++++++++++------------------ 1 file changed, 103 insertions(+), 97 deletions(-) diff --git a/guides/de-fr-xinvoice.mdx b/guides/de-fr-xinvoice.mdx index d50d851..6c28f34 100644 --- a/guides/de-fr-xinvoice.mdx +++ b/guides/de-fr-xinvoice.mdx @@ -8,11 +8,17 @@ description: Issue invoices in Germany (X-Rechnung & ZUGFeRD) and France (Factur X-Invoice covers the German and French electronic invoice standards. The integration is the same for both countries. The supported standards are: - X-Rechnung: one of the two standards used in Germany. It consists on an XML file. It can be implemented using two different "syntaxes", CII and UBL. They both contain the same information, but include different field names. -- ZUGFeRD: the other standard used in Germany. It a hybrid format that consists on a PDF document with an embedded XML file. +- ZUGFeRD: the other standard used in Germany. It a hybrid format that consists on a PDF document with an embedded X-Rechnung file. The only supported syntax for this case is CII. - Factur-X: the standard used in France. It consists on a PDF document with an embedded XML file. It is worth noting that ZUGFeRD and Factur-X are a joint project between Germany and France, and their content is identical. In Germany, the law regarding e-invoicing indicates that the obligation falls on receiving invoices, not issuing them. Therefore, a compliant German merchant should be able to receive invoices X-Rechnung (both syntaxes) and ZUGFeRD. + + When referring to syntaxes, it is important to note that X-Rechnung, ZUGFeRD and Factur-X are all `semantic data models`. What this means is that they define the data that must be present in the invoice, but not the actual format of the data or the explicit name of the fields. + In the context of E-Invoicing in the EU, the core semantic data model is established by the [EN16931 standard](https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/EN+16931+compliance), which is the basis for the aforementioned standards. It defines a list of two approved syntaxes: UN/CEFACT Cross Industry Invoice + ([CII](https://unece.org/trade/documents/2023/10/executive-guide-einvoicing-cross-industry-invoice)) version 16B and OpenOasis Universal Business Language ([UBL](https://docs.oasis-open.org/ubl/UBL-2.1.html)) version 2.1. These are the syntaxes used by this integration. + + ## Prerequisites To convert invoices to X-Invoice format, ensure you have: @@ -36,101 +42,15 @@ To issue invoices, configure a workflow in the [Invopop Console](https://console ## Running -Invopop uses the [GOBL](https://gobl.org) library to process invoice conversions. Some example invoices are provided below, along with an example workflow to send the invoices to. We also recommend using the [GOBL Builder](https://build.gobl.org) to create your own invoices. - -Be sure to set the `regime` field to `DE` or `FR` in your invoices. This will add some extra validations to ensure the sent document is compliant. If you plan to issue X-Rechnung invoices, we also recommend using the X-Rechnung addon in GOBL, which adds further validation based on [local rules](). - -## Example Workflow - - - - -Copy and paste the following JSON while editing a Workflow in "developer" mode. This example adds support for setting states on silo entries, which we strongly recommend. - -```json Example X-Rechnung Workflow with States -{ - "name": "X-Rechnung", - "description": "Convert to X-Rechnung", - "steps": [ - { - "id": "bd7eb640-abd0-11ef-a013-91c68ca9f44b", - "name": "Set State", - "config": { - "state": "processing" - }, - "summary": "Set state to `processing`{.state .processing}", - "provider": "silo.state" - }, - { - "id": "c37c3860-abd0-11ef-a013-91c68ca9f44b", - "name": "Sign Envelope", - "provider": "silo.close" - }, - { - "id": "78504b10-abd0-11ef-a013-91c68ca9f44b", - "name": "Convert to XRechnung/Factur-X", - "next": [ - { - "status": "KO", - "step_id": "c94982c0-abd0-11ef-a013-91c68ca9f44b" - } - ], - "provider": "xinvoice.convert" - }, - { - "id": "7ad436d0-abd0-11ef-a013-91c68ca9f44b", - "name": "Generate PDF", - "config": { - "locale": "en", - "date_format": "%Y-%m-%d", - "logo_height": 40 - }, - "summary": "English", - "provider": "pdf" - }, - { - "id": "c6192a60-abd0-11ef-a013-91c68ca9f44b", - "name": "Set State", - "next": [ - { - "stop": true, - "status": "NA" - } - ], - "config": { - "state": "sent" - }, - "summary": "Set state to `sent`{.state .sent}", - "provider": "silo.state" - }, - { - "id": "c94982c0-abd0-11ef-a013-91c68ca9f44b", - "name": "Set State", - "config": { - "state": "error" - }, - "summary": "Set state to `error`{.state .error}", - "provider": "silo.state" - }, - { - "id": "d0a36090-abd0-11ef-a013-91c68ca9f44b", - "name": "Send a Slack Message", - "provider": "slack.message" - } - ] -} -``` - - - +Invopop uses the [GOBL](https://gobl.org) library to process conversions. Some example invoices are provided below, along with an example workflow to send the invoices to. We also recommend using the [GOBL Builder](https://build.gobl.org) to create your own invoices. -You can now generate invoices in the X-Invoice format via the API or console. For more details, visit the [GOBL docs](https://docs.gobl.org) and [XInvoice repo](https://github.com/invopop/gobl.xinvoice), or contact [Invopop Support](mailto:support@invopop.com). +Be sure to set the `regime` field to `DE` or `FR` in your invoices. This will add some extra validations to ensure the document is compliant. If you plan to issue X-Rechnung invoices, we also recommend using the X-Rechnung addon in GOBL, which adds further validation. ## Sample Invoices - -```json Regular B2B Invoice + +```json { "$schema": "https://gobl.org/draft-0/bill/invoice", "$regime": "DE", @@ -263,9 +183,9 @@ You can now generate invoices in the X-Invoice format via the API or console. Fo } } ``` -{/* - */} -```json Regular B2C Invoice + + +```json { "$schema": "https://gobl.org/draft-0/bill/invoice", "$regime": "DE", @@ -352,9 +272,9 @@ You can now generate invoices in the X-Invoice format via the API or console. Fo } } ``` -{/* - */} -```json B2B Invoice with Additional Fields + + +```json { "$schema": "https://gobl.org/draft-0/bill/invoice", "$regime": "DE", @@ -600,3 +520,89 @@ You can now generate invoices in the X-Invoice format via the API or console. Fo +## Example Workflow + + + + +Copy and paste the following JSON while editing a Workflow in "developer" mode. This example adds support for setting states on silo entries, which we strongly recommend. + +```json Example X-Rechnung Workflow with States +{ + "name": "X-Rechnung", + "description": "Convert to X-Rechnung", + "steps": [ + { + "id": "bd7eb640-abd0-11ef-a013-91c68ca9f44b", + "name": "Set State", + "config": { + "state": "processing" + }, + "summary": "Set state to `processing`{.state .processing}", + "provider": "silo.state" + }, + { + "id": "c37c3860-abd0-11ef-a013-91c68ca9f44b", + "name": "Sign Envelope", + "provider": "silo.close" + }, + { + "id": "78504b10-abd0-11ef-a013-91c68ca9f44b", + "name": "Convert to XRechnung/Factur-X", + "next": [ + { + "status": "KO", + "step_id": "c94982c0-abd0-11ef-a013-91c68ca9f44b" + } + ], + "provider": "xinvoice.convert" + }, + { + "id": "7ad436d0-abd0-11ef-a013-91c68ca9f44b", + "name": "Generate PDF", + "config": { + "locale": "en", + "date_format": "%Y-%m-%d", + "logo_height": 40 + }, + "summary": "English", + "provider": "pdf" + }, + { + "id": "c6192a60-abd0-11ef-a013-91c68ca9f44b", + "name": "Set State", + "next": [ + { + "stop": true, + "status": "NA" + } + ], + "config": { + "state": "sent" + }, + "summary": "Set state to `sent`{.state .sent}", + "provider": "silo.state" + }, + { + "id": "c94982c0-abd0-11ef-a013-91c68ca9f44b", + "name": "Set State", + "config": { + "state": "error" + }, + "summary": "Set state to `error`{.state .error}", + "provider": "silo.state" + }, + { + "id": "d0a36090-abd0-11ef-a013-91c68ca9f44b", + "name": "Send a Slack Message", + "provider": "slack.message" + } + ] +} +``` + + + +You can now generate invoices in the X-Invoice format via the API or console. For more details, visit the [GOBL docs](https://docs.gobl.org) and [XInvoice repo](https://github.com/invopop/gobl.xinvoice), or contact [Invopop Support](mailto:support@invopop.com). + + From 24c31bb95e2add9dfc0573718c2367f2fb8e47ad Mon Sep 17 00:00:00 2001 From: apardods Date: Mon, 9 Dec 2024 14:15:44 +0000 Subject: [PATCH 05/12] Fixed Tip --- guides/de-fr-xinvoice.mdx | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/guides/de-fr-xinvoice.mdx b/guides/de-fr-xinvoice.mdx index 6c28f34..37c56ca 100644 --- a/guides/de-fr-xinvoice.mdx +++ b/guides/de-fr-xinvoice.mdx @@ -7,16 +7,15 @@ description: Issue invoices in Germany (X-Rechnung & ZUGFeRD) and France (Factur X-Invoice covers the German and French electronic invoice standards. The integration is the same for both countries. The supported standards are: -- X-Rechnung: one of the two standards used in Germany. It consists on an XML file. It can be implemented using two different "syntaxes", CII and UBL. They both contain the same information, but include different field names. +- X-Rechnung: one of the two standards used in Germany. It consists on an XML file. It can be implemented using two different *syntaxes*, CII and UBL. They both contain the same information, but include different field names. - ZUGFeRD: the other standard used in Germany. It a hybrid format that consists on a PDF document with an embedded X-Rechnung file. The only supported syntax for this case is CII. - Factur-X: the standard used in France. It consists on a PDF document with an embedded XML file. It is worth noting that ZUGFeRD and Factur-X are a joint project between Germany and France, and their content is identical. -In Germany, the law regarding e-invoicing indicates that the obligation falls on receiving invoices, not issuing them. Therefore, a compliant German merchant should be able to receive invoices X-Rechnung (both syntaxes) and ZUGFeRD. - - When referring to syntaxes, it is important to note that X-Rechnung, ZUGFeRD and Factur-X are all `semantic data models`. What this means is that they define the data that must be present in the invoice, but not the actual format of the data or the explicit name of the fields. - In the context of E-Invoicing in the EU, the core semantic data model is established by the [EN16931 standard](https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/EN+16931+compliance), which is the basis for the aforementioned standards. It defines a list of two approved syntaxes: UN/CEFACT Cross Industry Invoice - ([CII](https://unece.org/trade/documents/2023/10/executive-guide-einvoicing-cross-industry-invoice)) version 16B and OpenOasis Universal Business Language ([UBL](https://docs.oasis-open.org/ubl/UBL-2.1.html)) version 2.1. These are the syntaxes used by this integration. + When referring to syntaxes, it is important to note that X-Rechnung, ZUGFeRD and Factur-X are all *semantic data models*. What this means is that they define the data that must be present in the invoice, but not the actual format of the data or the explicit name of the fields. + + The [EN16931 standard](https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/EN+16931+compliance) is the core data model for e-invoicing in the EU. It defines a list of two approved syntaxes: UN/CEFACT Cross Industry Invoice + ([CII](https://unece.org/trade/documents/2023/10/executive-guide-einvoicing-cross-industry-invoice)) and OpenOasis Universal Business Language ([UBL](https://docs.oasis-open.org/ubl/UBL-2.1.html)). These are the syntaxes used by this integration. ## Prerequisites @@ -34,10 +33,10 @@ To issue invoices, configure a workflow in the [Invopop Console](https://console - **Sign Envelope**: The envelope must be signed before processing. This can also be done in the **Add Sequential Code** step, which handles the invoice number. - **Convert to X-Invoice**: Generates the X-Invoice XML document. Configure the step to one of the following formats: - - `XRechnung CII`: German X-Rechnung (v3.0.2) in CII syntax (XML only). - - `XRechnung UBL`: German X-Rechnung (v3.0.2) in UBL syntax (XML only). - - `ZUGFeRD`: German ZUGFeRD (v2.3.2) in hybrid format (PDF with embedded XML). - - `Factur-X`: French Factur-X (v1.07.2) in hybrid format (PDF with embedded XML). + - **XRechnung CII**: German X-Rechnung (v3.0.2) in CII syntax (XML only). + - **XRechnung UBL**: German X-Rechnung (v3.0.2) in UBL syntax (XML only). + - **ZUGFeRD**: German ZUGFeRD (v2.3.2) in hybrid format (PDF with embedded XML). + - **Factur-X**: French Factur-X (v1.07.2) in hybrid format (PDF with embedded XML). - **Generate PDF**: For ZUGFeRD and Factur-X formats, this step creates the PDF with the embedded XML. ## Running From 40101f472e9f35e5d99365926b1ac7dc252453a3 Mon Sep 17 00:00:00 2001 From: apardods Date: Mon, 9 Dec 2024 14:25:32 +0000 Subject: [PATCH 06/12] Added Step Config --- guides/de-fr-xinvoice.mdx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/guides/de-fr-xinvoice.mdx b/guides/de-fr-xinvoice.mdx index 37c56ca..f393a96 100644 --- a/guides/de-fr-xinvoice.mdx +++ b/guides/de-fr-xinvoice.mdx @@ -188,6 +188,9 @@ Be sure to set the `regime` field to `DE` or `FR` in your invoices. This will ad { "$schema": "https://gobl.org/draft-0/bill/invoice", "$regime": "DE", + "$addons": [ + "eu-en16931-v2017", + ], "$tags": [ "simplified" ], @@ -197,7 +200,6 @@ Be sure to set the `regime` field to `DE` or `FR` in your invoices. This will ad "code": "001", "issue_date": "2022-02-01", "currency": "EUR", - "tax": {}, "supplier": { "name": "Provide One GmbH", "tax_id": { @@ -554,6 +556,9 @@ Copy and paste the following JSON while editing a Workflow in "developer" mode. "step_id": "c94982c0-abd0-11ef-a013-91c68ca9f44b" } ], + "config": { + "format": "xrechnung-cii", + }, "provider": "xinvoice.convert" }, { From 1dca2c4d1bbc48fc3fb8e6e268b3f4b96922e448 Mon Sep 17 00:00:00 2001 From: apardods Date: Tue, 10 Dec 2024 15:54:21 +0000 Subject: [PATCH 07/12] Style fixes --- guides/de-fr-xinvoice.mdx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/guides/de-fr-xinvoice.mdx b/guides/de-fr-xinvoice.mdx index f393a96..2e25b1a 100644 --- a/guides/de-fr-xinvoice.mdx +++ b/guides/de-fr-xinvoice.mdx @@ -14,8 +14,7 @@ X-Invoice covers the German and French electronic invoice standards. The integra When referring to syntaxes, it is important to note that X-Rechnung, ZUGFeRD and Factur-X are all *semantic data models*. What this means is that they define the data that must be present in the invoice, but not the actual format of the data or the explicit name of the fields. - The [EN16931 standard](https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/EN+16931+compliance) is the core data model for e-invoicing in the EU. It defines a list of two approved syntaxes: UN/CEFACT Cross Industry Invoice - ([CII](https://unece.org/trade/documents/2023/10/executive-guide-einvoicing-cross-industry-invoice)) and OpenOasis Universal Business Language ([UBL](https://docs.oasis-open.org/ubl/UBL-2.1.html)). These are the syntaxes used by this integration. + To implement the semantic models, there are two syntaxes approved by the EU: UN/CEFACT Cross Industry Invoice ([CII](https://unece.org/trade/documents/2023/10/executive-guide-einvoicing-cross-industry-invoice)) and OpenOasis Universal Business Language ([UBL](https://docs.oasis-open.org/ubl/UBL-2.1.html)). ## Prerequisites From 68a0245086eea96a7dbe9d0695d7029ba664f8f4 Mon Sep 17 00:00:00 2001 From: apardods Date: Tue, 10 Dec 2024 16:36:52 +0000 Subject: [PATCH 08/12] Make options bold --- guides/de-fr-xinvoice.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/guides/de-fr-xinvoice.mdx b/guides/de-fr-xinvoice.mdx index 2e25b1a..88f48c4 100644 --- a/guides/de-fr-xinvoice.mdx +++ b/guides/de-fr-xinvoice.mdx @@ -7,9 +7,9 @@ description: Issue invoices in Germany (X-Rechnung & ZUGFeRD) and France (Factur X-Invoice covers the German and French electronic invoice standards. The integration is the same for both countries. The supported standards are: -- X-Rechnung: one of the two standards used in Germany. It consists on an XML file. It can be implemented using two different *syntaxes*, CII and UBL. They both contain the same information, but include different field names. -- ZUGFeRD: the other standard used in Germany. It a hybrid format that consists on a PDF document with an embedded X-Rechnung file. The only supported syntax for this case is CII. -- Factur-X: the standard used in France. It consists on a PDF document with an embedded XML file. It is worth noting that ZUGFeRD and Factur-X are a joint project between Germany and France, and their content is identical. +- **X-Rechnung**: one of the two standards used in Germany. It consists on an XML file. It can be implemented using two different *syntaxes*, CII and UBL. They both contain the same information, but include different field names. +- **ZUGFeRD**: the other standard used in Germany. It a hybrid format that consists on a PDF document with an embedded X-Rechnung file. The only supported syntax for this case is CII. +- **Factur-X**: the standard used in France. It consists on a PDF document with an embedded XML file. It is worth noting that ZUGFeRD and Factur-X are a joint project between Germany and France, and their content is identical. When referring to syntaxes, it is important to note that X-Rechnung, ZUGFeRD and Factur-X are all *semantic data models*. What this means is that they define the data that must be present in the invoice, but not the actual format of the data or the explicit name of the fields. From 9f8a813b64c5ee5c1ab45699b6e7cba06b7284b3 Mon Sep 17 00:00:00 2001 From: apardods Date: Wed, 11 Dec 2024 16:45:11 +0000 Subject: [PATCH 09/12] fix --- mint.json | 3 +- package-lock.json | 586 ---------------------------------------------- package.json | 7 - 3 files changed, 2 insertions(+), 594 deletions(-) delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/mint.json b/mint.json index 95f24c0..a119298 100644 --- a/mint.json +++ b/mint.json @@ -166,7 +166,8 @@ "guides/it-sdi", "guides/pt-invoicexpress", "guides/de-fr-xinvoice", - "guides/chargebee" + "guides/chargebee", + "guides/related-docs" ] } ], diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 5cf6d8c..0000000 --- a/package-lock.json +++ /dev/null @@ -1,586 +0,0 @@ -{ - "name": "docs.invopop.com", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "add": "^2.0.6", - "sharp": "^0.33.4", - "yarn": "^1.22.22" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", - "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", - "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", - "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", - "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "macos": ">=11", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", - "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "macos": ">=10.13", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", - "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", - "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", - "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", - "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", - "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", - "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", - "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", - "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", - "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.31", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", - "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", - "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", - "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", - "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", - "cpu": [ - "wasm32" - ], - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.1.1" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", - "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", - "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/add": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz", - "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==" - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sharp": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", - "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", - "hasInstallScript": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.6.0" - }, - "engines": { - "libvips": ">=8.15.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.4", - "@img/sharp-darwin-x64": "0.33.4", - "@img/sharp-libvips-darwin-arm64": "1.0.2", - "@img/sharp-libvips-darwin-x64": "1.0.2", - "@img/sharp-libvips-linux-arm": "1.0.2", - "@img/sharp-libvips-linux-arm64": "1.0.2", - "@img/sharp-libvips-linux-s390x": "1.0.2", - "@img/sharp-libvips-linux-x64": "1.0.2", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", - "@img/sharp-libvips-linuxmusl-x64": "1.0.2", - "@img/sharp-linux-arm": "0.33.4", - "@img/sharp-linux-arm64": "0.33.4", - "@img/sharp-linux-s390x": "0.33.4", - "@img/sharp-linux-x64": "0.33.4", - "@img/sharp-linuxmusl-arm64": "0.33.4", - "@img/sharp-linuxmusl-x64": "0.33.4", - "@img/sharp-wasm32": "0.33.4", - "@img/sharp-win32-ia32": "0.33.4", - "@img/sharp-win32-x64": "0.33.4" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "optional": true - }, - "node_modules/yarn": { - "version": "1.22.22", - "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.22.tgz", - "integrity": "sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg==", - "hasInstallScript": true, - "bin": { - "yarn": "bin/yarn.js", - "yarnpkg": "bin/yarn.js" - }, - "engines": { - "node": ">=4.0.0" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index b790001..0000000 --- a/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "dependencies": { - "add": "^2.0.6", - "sharp": "^0.33.4", - "yarn": "^1.22.22" - } -} From 7f79da6eea4db58e7b54d8fc690f659297e4a206 Mon Sep 17 00:00:00 2001 From: apardods Date: Wed, 11 Dec 2024 17:02:07 +0000 Subject: [PATCH 10/12] Added Suggested Changes --- guides/de-fr-xinvoice.mdx | 182 ++++++------ package-lock.json | 587 -------------------------------------- 2 files changed, 94 insertions(+), 675 deletions(-) delete mode 100644 package-lock.json diff --git a/guides/de-fr-xinvoice.mdx b/guides/de-fr-xinvoice.mdx index 88f48c4..5473068 100644 --- a/guides/de-fr-xinvoice.mdx +++ b/guides/de-fr-xinvoice.mdx @@ -32,17 +32,96 @@ To issue invoices, configure a workflow in the [Invopop Console](https://console - **Sign Envelope**: The envelope must be signed before processing. This can also be done in the **Add Sequential Code** step, which handles the invoice number. - **Convert to X-Invoice**: Generates the X-Invoice XML document. Configure the step to one of the following formats: - - **XRechnung CII**: German X-Rechnung (v3.0.2) in CII syntax (XML only). - - **XRechnung UBL**: German X-Rechnung (v3.0.2) in UBL syntax (XML only). - - **ZUGFeRD**: German ZUGFeRD (v2.3.2) in hybrid format (PDF with embedded XML). - - **Factur-X**: French Factur-X (v1.07.2) in hybrid format (PDF with embedded XML). + - **XRechnung CII**: German X-Rechnung (v3) in CII syntax (XML only). + - **XRechnung UBL**: German X-Rechnung (v3) in UBL syntax (XML only). + - **ZUGFeRD**: German ZUGFeRD (v2.3) in hybrid format (PDF with embedded XML). + - **Factur-X**: French Factur-X (v1.07) in hybrid format (PDF with embedded XML). - **Generate PDF**: For ZUGFeRD and Factur-X formats, this step creates the PDF with the embedded XML. + + + +Copy and paste the following JSON while editing a Workflow in "developer" mode. This example adds support for setting states on silo entries, which we strongly recommend. + +```json Example X-Rechnung Workflow with States +{ + "name": "X-Rechnung", + "description": "Convert to X-Rechnung", + "steps": [ + { + "id": "bd7eb640-abd0-11ef-a013-91c68ca9f44b", + "name": "Set State", + "config": { + "state": "processing" + }, + "summary": "Set state to `processing`{.state .processing}", + "provider": "silo.state" + }, + { + "id": "c37c3860-abd0-11ef-a013-91c68ca9f44b", + "name": "Sign Envelope", + "provider": "silo.close" + }, + { + "id": "78504b10-abd0-11ef-a013-91c68ca9f44b", + "name": "Convert to XRechnung/Factur-X", + "next": [ + { + "status": "KO", + "step_id": "c94982c0-abd0-11ef-a013-91c68ca9f44b" + } + ], + "config": { + "format": "xrechnung-cii", + }, + "provider": "xinvoice.convert" + }, + { + "id": "7ad436d0-abd0-11ef-a013-91c68ca9f44b", + "name": "Generate PDF", + "config": { + "locale": "en", + "date_format": "%Y-%m-%d", + "logo_height": 40 + }, + "summary": "English", + "provider": "pdf" + }, + { + "id": "c6192a60-abd0-11ef-a013-91c68ca9f44b", + "name": "Set State", + "next": [ + { + "stop": true, + "status": "NA" + } + ], + "config": { + "state": "sent" + }, + "summary": "Set state to `sent`{.state .sent}", + "provider": "silo.state" + }, + { + "id": "c94982c0-abd0-11ef-a013-91c68ca9f44b", + "name": "Set State", + "config": { + "state": "error" + }, + "summary": "Set state to `error`{.state .error}", + "provider": "silo.state" + } + ] +} +``` + + + ## Running Invopop uses the [GOBL](https://gobl.org) library to process conversions. Some example invoices are provided below, along with an example workflow to send the invoices to. We also recommend using the [GOBL Builder](https://build.gobl.org) to create your own invoices. -Be sure to set the `regime` field to `DE` or `FR` in your invoices. This will add some extra validations to ensure the document is compliant. If you plan to issue X-Rechnung invoices, we also recommend using the X-Rechnung addon in GOBL, which adds further validation. +Be sure to set the `regime` field to `DE` or `FR` in your invoices. This will add some extra validations to ensure the document is compliant. If you plan to issue X-Rechnung invoices, we also recommend using the X-Rechnung addon in the invoice file (see example below), to add further validation. ## Sample Invoices @@ -520,92 +599,19 @@ Be sure to set the `regime` field to `DE` or `FR` in your invoices. This will ad -## Example Workflow +You can now generate invoices in the X-Invoice format via the API or console. For more details, visit the [GOBL docs](https://docs.gobl.org) and [XInvoice repo](https://github.com/invopop/gobl.xinvoice), or contact [Invopop Support](mailto:support@invopop.com). + +## FAQ - + +Both syntaxes are equally valid and contain the same information, so in the majority of cases you can choose either one. -Copy and paste the following JSON while editing a Workflow in "developer" mode. This example adds support for setting states on silo entries, which we strongly recommend. +If you plan on sending Invoices through the PEPPOL network, we recommend using UBL as it is the syntax supported by it. In any other case, it might be more convenient to use CII, as it is the syntax also supported by ZUGFeRD and Factur-X. + + +For ZUGFeRD and Factur-X PDFs, the XML file is embedded within the PDF itself. To extract and view it, you can use the `Attachments` section in Adobe Acrobat Reader. -```json Example X-Rechnung Workflow with States -{ - "name": "X-Rechnung", - "description": "Convert to X-Rechnung", - "steps": [ - { - "id": "bd7eb640-abd0-11ef-a013-91c68ca9f44b", - "name": "Set State", - "config": { - "state": "processing" - }, - "summary": "Set state to `processing`{.state .processing}", - "provider": "silo.state" - }, - { - "id": "c37c3860-abd0-11ef-a013-91c68ca9f44b", - "name": "Sign Envelope", - "provider": "silo.close" - }, - { - "id": "78504b10-abd0-11ef-a013-91c68ca9f44b", - "name": "Convert to XRechnung/Factur-X", - "next": [ - { - "status": "KO", - "step_id": "c94982c0-abd0-11ef-a013-91c68ca9f44b" - } - ], - "config": { - "format": "xrechnung-cii", - }, - "provider": "xinvoice.convert" - }, - { - "id": "7ad436d0-abd0-11ef-a013-91c68ca9f44b", - "name": "Generate PDF", - "config": { - "locale": "en", - "date_format": "%Y-%m-%d", - "logo_height": 40 - }, - "summary": "English", - "provider": "pdf" - }, - { - "id": "c6192a60-abd0-11ef-a013-91c68ca9f44b", - "name": "Set State", - "next": [ - { - "stop": true, - "status": "NA" - } - ], - "config": { - "state": "sent" - }, - "summary": "Set state to `sent`{.state .sent}", - "provider": "silo.state" - }, - { - "id": "c94982c0-abd0-11ef-a013-91c68ca9f44b", - "name": "Set State", - "config": { - "state": "error" - }, - "summary": "Set state to `error`{.state .error}", - "provider": "silo.state" - }, - { - "id": "d0a36090-abd0-11ef-a013-91c68ca9f44b", - "name": "Send a Slack Message", - "provider": "slack.message" - } - ] -} -``` +Alternatively, you can use specialized tools like the [SysTools PDF Extractor](https://www.systoolsgroup.com/pdf/extractor/) to extract the XML file. - -You can now generate invoices in the X-Invoice format via the API or console. For more details, visit the [GOBL docs](https://docs.gobl.org) and [XInvoice repo](https://github.com/invopop/gobl.xinvoice), or contact [Invopop Support](mailto:support@invopop.com). - - diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index a9ec6ad..0000000 --- a/package-lock.json +++ /dev/null @@ -1,587 +0,0 @@ -{ - "name": "docs.invopop.com", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "add": "^2.0.6", - "sharp": "^0.33.4", - "yarn": "^1.22.22" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", - "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", - "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", - "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", - "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "macos": ">=11", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", - "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "macos": ">=10.13", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", - "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", - "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", - "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", - "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", - "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", - "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", - "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", - "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", - "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.31", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", - "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", - "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", - "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", - "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", - "cpu": [ - "wasm32" - ], - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.1.1" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", - "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", - "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/add": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz", - "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==" - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sharp": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", - "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", - "hasInstallScript": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.6.0" - }, - "engines": { - "libvips": ">=8.15.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.4", - "@img/sharp-darwin-x64": "0.33.4", - "@img/sharp-libvips-darwin-arm64": "1.0.2", - "@img/sharp-libvips-darwin-x64": "1.0.2", - "@img/sharp-libvips-linux-arm": "1.0.2", - "@img/sharp-libvips-linux-arm64": "1.0.2", - "@img/sharp-libvips-linux-s390x": "1.0.2", - "@img/sharp-libvips-linux-x64": "1.0.2", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", - "@img/sharp-libvips-linuxmusl-x64": "1.0.2", - "@img/sharp-linux-arm": "0.33.4", - "@img/sharp-linux-arm64": "0.33.4", - "@img/sharp-linux-s390x": "0.33.4", - "@img/sharp-linux-x64": "0.33.4", - "@img/sharp-linuxmusl-arm64": "0.33.4", - "@img/sharp-linuxmusl-x64": "0.33.4", - "@img/sharp-wasm32": "0.33.4", - "@img/sharp-win32-ia32": "0.33.4", - "@img/sharp-win32-x64": "0.33.4" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "optional": true - }, - "node_modules/yarn": { - "version": "1.22.22", - "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.22.tgz", - "integrity": "sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg==", - "hasInstallScript": true, - "bin": { - "yarn": "bin/yarn.js", - "yarnpkg": "bin/yarn.js" - }, - "engines": { - "node": ">=4.0.0" - } - } - } -} - From 9e3c976e6c50d74c30327723fcda159ea070336c Mon Sep 17 00:00:00 2001 From: apardods Date: Wed, 11 Dec 2024 17:05:57 +0000 Subject: [PATCH 11/12] Wording --- guides/de-fr-xinvoice.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/guides/de-fr-xinvoice.mdx b/guides/de-fr-xinvoice.mdx index 5473068..a96179e 100644 --- a/guides/de-fr-xinvoice.mdx +++ b/guides/de-fr-xinvoice.mdx @@ -598,16 +598,16 @@ Be sure to set the `regime` field to `DE` or `FR` in your invoices. This will ad ``` - - -You can now generate invoices in the X-Invoice format via the API or console. For more details, visit the [GOBL docs](https://docs.gobl.org) and [XInvoice repo](https://github.com/invopop/gobl.xinvoice), or contact [Invopop Support](mailto:support@invopop.com). +You can now generate invoices in the X-Invoice format via the API or console. For more details, visit the [GOBL docs](https://docs.gobl.org) and [X-Invoice repo](https://github.com/invopop/gobl.xinvoice), or contact [Invopop Support](mailto:support@invopop.com). ## FAQ -Both syntaxes are equally valid and contain the same information, so in the majority of cases you can choose either one. +Both syntaxes are equally valid and contain the same information, so in the majority of cases the choice has no consequences. + +If you plan on sending Invoices through the PEPPOL network, we recommend using UBL as it is the supported format. -If you plan on sending Invoices through the PEPPOL network, we recommend using UBL as it is the syntax supported by it. In any other case, it might be more convenient to use CII, as it is the syntax also supported by ZUGFeRD and Factur-X. +If you plan on also issuing invoices in ZUGFeRD or Factur-X, it might be more convenient to use CII, as it is the syntax also supported by ZUGFeRD and Factur-X. For ZUGFeRD and Factur-X PDFs, the XML file is embedded within the PDF itself. To extract and view it, you can use the `Attachments` section in Adobe Acrobat Reader. From 10612aee33d201eb27b961956cf28fd58d3891ee Mon Sep 17 00:00:00 2001 From: apardods Date: Wed, 11 Dec 2024 17:07:48 +0000 Subject: [PATCH 12/12] Wording --- guides/de-fr-xinvoice.mdx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/guides/de-fr-xinvoice.mdx b/guides/de-fr-xinvoice.mdx index a96179e..f064385 100644 --- a/guides/de-fr-xinvoice.mdx +++ b/guides/de-fr-xinvoice.mdx @@ -602,12 +602,10 @@ You can now generate invoices in the X-Invoice format via the API or console. Fo ## FAQ - + Both syntaxes are equally valid and contain the same information, so in the majority of cases the choice has no consequences. -If you plan on sending Invoices through the PEPPOL network, we recommend using UBL as it is the supported format. - -If you plan on also issuing invoices in ZUGFeRD or Factur-X, it might be more convenient to use CII, as it is the syntax also supported by ZUGFeRD and Factur-X. +If you plan on sending Invoices through the PEPPOL network, we recommend using UBL as it is the supported format. If you plan on also issuing invoices in ZUGFeRD or Factur-X, it might be more convenient to use CII, as it is the syntax also supported by ZUGFeRD and Factur-X. For ZUGFeRD and Factur-X PDFs, the XML file is embedded within the PDF itself. To extract and view it, you can use the `Attachments` section in Adobe Acrobat Reader.