[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs:country-fr":3},{"versions":4,"version":26,"nav":28,"path":85,"kind":106,"page":107},[5,10,13,16,18,20,22,24],{"name":6,"label":7,"prefix":8,"channel":9},"0.7","0.7 (latest)","","latest",{"name":11,"label":12,"prefix":11,"channel":11},"next","next (unreleased)",{"name":14,"label":14,"prefix":14,"channel":15},"0.6","old",{"name":17,"label":17,"prefix":17,"channel":15},"0.5",{"name":19,"label":19,"prefix":19,"channel":15},"0.4",{"name":21,"label":21,"prefix":21,"channel":15},"0.3",{"name":23,"label":23,"prefix":23,"channel":15},"0.2",{"name":25,"label":25,"prefix":25,"channel":15},"0.1",{"name":6,"label":7,"prefix":8,"channel":9,"base":27},"\u002Fdocs",[29,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,91,94,97,100,103],{"slug":30,"title":31,"preview":32},"index","Home",false,{"slug":34,"title":35,"preview":32},"getting-started","Getting started",{"slug":37,"title":38,"preview":32},"concepts","E-invoicing basics",{"slug":40,"title":41,"preview":32},"examples","Examples",{"slug":43,"title":44,"preview":32},"building-invoices","Building invoices",{"slug":46,"title":47,"preview":32},"formats","Formats and profiles",{"slug":49,"title":50,"preview":32},"validation","Validation",{"slug":52,"title":53,"preview":32},"templates","Templates and design",{"slug":55,"title":56,"preview":32},"documents","Quotes and other documents",{"slug":58,"title":59,"preview":32},"reading","Reading incoming invoices",{"slug":61,"title":62,"preview":32},"laravel","Laravel integration",{"slug":64,"title":65,"preview":32},"configuration","Configuration",{"slug":67,"title":68,"preview":32},"commands","Artisan commands",{"slug":70,"title":71,"preview":32},"testing","Testing",{"slug":73,"title":74,"preview":32},"country-packs","Country packs",{"slug":76,"title":77,"parent":74,"preview":32},"country-at","Austria",{"slug":79,"title":80,"parent":74,"preview":32},"country-be","Belgium",{"slug":82,"title":83,"parent":74,"preview":32},"country-ch","Switzerland",{"slug":85,"title":86,"parent":74,"preview":32},"country-fr","France",{"slug":88,"title":89,"preview":90},"managed","Managed layer (preview)",true,{"slug":92,"title":93,"preview":32},"troubleshooting","Troubleshooting",{"slug":95,"title":96,"preview":32},"faq","FAQ",{"slug":98,"title":99,"preview":32},"compatibility","Versioning and compatibility",{"slug":101,"title":102,"preview":32},"field-reference","Field reference",{"slug":104,"title":105,"preview":32},"ai","AI assistants","page",{"title":86,"description":108,"html":109,"headings":110,"editUrl":176,"markdownUrl":177,"prev":178,"next":179},"The French pack implements the mentions obligatoires of French invoices, i.e. the details an invoice must state. They come from the French Tax Code (Code général des impôts, CGI: art.","\u003Ch1 id=\"france-quittiocountry-fr\">France (\u003Ccode>quittio\u002Fcountry-fr\u003C\u002Fcode>)\u003C\u002Fh1>\n\u003Cblockquote class=\"q-doc-note\">\n\u003Cp>\u003Cstrong>Not reviewed by a tax adviser yet.\u003C\u002Fstrong> The legal wording, rules and defaults of this pack follow the law and the official sources as of October 2026, but have not been reviewed by a French tax adviser. Check the mentions and rates of your invoices before you rely on them. Quittio is no tax or legal advice; the business that issues an invoice remains responsible for it.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>The French pack implements the mentions obligatoires of French invoices, i.e. the details an invoice must state. They come from the French Tax Code (Code général des impôts, CGI: art. 242 nonies A of annex II), with the new mentions of the e-invoicing reform from 1 September 2026, and from the Commercial Code (Code de commerce) for invoices between businesses. The pack also covers the late payment penalties. Its class is \u003Ccode>Quittio\\Country\\FR\\CountryFR\u003C\u002Fcode> (code \u003Ccode>FR\u003C\u002Fcode>, translation namespace \u003Ccode>quittio-fr\u003C\u002Fcode>). It covers metropolitan France and Monaco. The overseas departments have VAT rates of their own, which are not modelled.\u003C\u002Fp>\n\u003Cp>The pack provides:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"#tax-presets\">tax presets\u003C\u002Fa> for the French rates, the franchise en base, autoliquidation (reverse charge), intra-community supplies, exports and the margin schemes;\u003C\u002Fli>\n\u003Cli>the \u003Ca href=\"#rules\">rules\u003C\u002Fa> \u003Ccode>FR-CGI-01\u003C\u002Fcode> to \u003Ccode>FR-CGI-09\u003C\u002Fcode>, \u003Ccode>FR-COM-01\u003C\u002Fcode> and \u003Ccode>FR-COM-02\u003C\u002Fcode>;\u003C\u002Fli>\n\u003Cli>the texts that cite the Code des impositions sur les biens et services (CIBS) instead of the CGI on invoices issued from 1 January 2027 (\u003Ca href=\"#from-the-cgi-to-the-cibs\">From the CGI to the CIBS\u003C\u002Fa>);\u003C\u002Fli>\n\u003Cli>Factur-X for domestic invoices between businesses (\u003Ca href=\"#format-choice\">Format choice\u003C\u002Fa>);\u003C\u002Fli>\n\u003Cli>the late payment mention and the mention of VAT on debits, added while rendering (\u003Ca href=\"#mentions-added-by-the-pack\">Mentions added by the pack\u003C\u002Fa>);\u003C\u002Fli>\n\u003Cli>the ECB rate table and the values for late payment penalties (\u003Ca href=\"#late-payment\">Late payment\u003C\u002Fa>);\u003C\u002Fli>\n\u003Cli>a SIREN and SIRET check (\u003Ca href=\"#siren-and-siret\">SIREN and SIRET\u003C\u002Fa>), defaults, correction titles (&quot;Avoir&quot;) and French and English texts.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>This page writes French legal references in their French form (&quot;art. 242 nonies A of annex II to the CGI&quot;, &quot;art. L441-10 Code de commerce&quot;). French terms such as avoir or autoliquidation are explained on first use.\u003C\u002Fp>\n\u003Ch2 id=\"installation\">Installation\u003Ca class=\"q-doc-anchor\" href=\"#installation\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>bash\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FFA657\">composer\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> require\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> quittio\u002Fcountry-fr\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>The pack is not part of \u003Ccode>quittio\u002Fquittio\u003C\u002Fcode>. Install it next to \u003Ccode>quittio\u002Fquittio\u003C\u002Fcode> or next to \u003Ccode>quittio\u002Fcore\u003C\u002Fcode>. It is developed in the monorepo \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FQuittio\u002Fquittio\u002Ftree\u002Fmaster\u002Fpackages\u002Fcountry-fr\">Quittio\u002Fquittio\u003C\u002Fa> and published as the read-only repository \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FQuittio\u002Fcountry-fr\">Quittio\u002Fcountry-fr\u003C\u002Fa>. Please open issues and pull requests in the monorepo.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Laravel.\u003C\u002Fstrong> The pack declares itself in its \u003Ccode>composer.json\u003C\u002Fcode> (\u003Ccode>extra.quittio.country-packs\u003C\u002Fcode>), so Laravel finds it after the installation. There is nothing to register. The pack has no service provider and no configuration file of its own; its one setting goes into \u003Ccode>config\u002Fquittio.php\u003C\u002Fcode> (\u003Ca href=\"#meta-flags-and-settings\">Meta flags and settings\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Without Laravel.\u003C\u002Fstrong> Pass \u003Ccode>new CountryFR\u003C\u002Fcode> to \u003Ccode>Quittio::create()\u003C\u002Fcode>, or register it later with \u003Ccode>registerCountry()\u003C\u002Fcode> (\u003Ca href=\"\u002Fdocs\u002Fcountry-packs#registering-packs\">Registering packs\u003C\u002Fa>):\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Country\\FR\\CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$quittio \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">create\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">([\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'country'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'FR'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">], [\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">new\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">]);\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>The presets, \u003Ccode>Siren\u003C\u002Fcode> and \u003Ccode>LegalTexts\u003C\u002Fcode> work without a \u003Ccode>Quittio\u003C\u002Fcode> instance: \u003Ccode>CountryFR::registerTranslations()\u003C\u002Fcode> registers the texts when they are first needed.\u003C\u002Fp>\n\u003Ch2 id=\"when-it-applies\">When it applies\u003Ca class=\"q-doc-anchor\" href=\"#when-it-applies\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>The pack leads every invoice whose seller is in France (seller country code \u003Ccode>FR\u003C\u002Fcode>, BT-40). It then checks the French rules, chooses the format, completes the invoice and provides the defaults: the French locale (unless the invoice or the configuration sets one), A4 paper and the EPC GiroCode. For an invoice from another country to a buyer in France, only the format rules of the pack apply, and the French format rule has no opinion on cross-border invoices. Details are in \u003Ca href=\"\u002Fdocs\u002Fcountry-packs#how-a-pack-is-selected\">How a pack is selected\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Monaco.\u003C\u002Fstrong> Monaco belongs to the French VAT territory (\u003Ca href=\"\u002Fdocs\u002Fcountry-packs#vatterritory\">\u003Ccode>VatTerritory\u003C\u002Fcode>\u003C\u002Fa>). A buyer in Monaco counts as a buyer in France for the rules and the format choice. The pack also leads the invoices of sellers with the country code \u003Ccode>MC\u003C\u002Fcode> (\u003Ca href=\"\u002Fdocs\u002Fcountry-packs#how-a-pack-is-selected\">How a pack is selected\u003C\u002Fa>). A business in Monaco has no SIREN: \u003Ccode>FR-CGI-01\u003C\u002Fcode> does not ask a seller in Monaco for one, and \u003Ccode>FR-CGI-08\u003C\u002Fcode> does not ask a buyer in Monaco for one.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Overseas departments.\u003C\u002Fstrong> Addresses in \u003Ccode>FR\u003C\u002Fcode> with a post code starting with \u003Ccode>97\u003C\u002Fcode> or \u003Ccode>98\u003C\u002Fcode> lie outside the French VAT territory in Quittio. A buyer there is no buyer &quot;in France&quot; for \u003Ccode>FR-CGI-08\u003C\u002Fcode> and the format rule, and the resolver treats the invoice as cross-border.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"common-tasks\">Common tasks\u003Ca class=\"q-doc-anchor\" href=\"#common-tasks\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>You want to\u003C\u002Fth>\n\u003Cth>Read\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Add the new mentions of the e-invoicing reform\u003C\u002Ftd>\n\u003Ctd data-label=\"Read\">\u003Ca href=\"#the-four-new-mentions\">The four new mentions\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Know which texts cite the CIBS from 2027\u003C\u002Ftd>\n\u003Ctd data-label=\"Read\">\u003Ca href=\"#from-the-cgi-to-the-cibs\">From the CGI to the CIBS\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Set the VAT rate or an exemption on a line\u003C\u002Ftd>\n\u003Ctd data-label=\"Read\">\u003Ca href=\"#tax-presets\">Tax presets\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Invoice as a small business without VAT (franchise en base)\u003C\u002Ftd>\n\u003Ctd data-label=\"Read\">\u003Ca href=\"#small-businesses-franchise-en-base\">Small businesses\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Invoice with reverse charge, an intra-community supply or an export\u003C\u002Ftd>\n\u003Ctd data-label=\"Read\">\u003Ca href=\"#reverse-charge-intra-community-supplies-and-exports\">Reverse charge, intra-community supplies and exports\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Look up a validation code such as \u003Ccode>FR-CGI-08\u003C\u002Fcode> or \u003Ccode>FR-COM-02\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Read\">\u003Ca href=\"#rules\">Rules\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Check or extract a SIREN\u003C\u002Ftd>\n\u003Ctd data-label=\"Read\">\u003Ca href=\"#siren-and-siret\">SIREN and SIRET\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Know which format Quittio picks\u003C\u002Ftd>\n\u003Ctd data-label=\"Read\">\u003Ca href=\"#format-choice\">Format choice\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Change or switch off the late payment mention\u003C\u002Ftd>\n\u003Ctd data-label=\"Read\">\u003Ca href=\"#mentions-added-by-the-pack\">Mentions added by the pack\u003C\u002Fa>, \u003Ca href=\"#meta-flags-and-settings\">Meta flags and settings\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Calculate late payment penalties for a reminder\u003C\u002Ftd>\n\u003Ctd data-label=\"Read\">\u003Ca href=\"#late-payment\">Late payment\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Cancel or correct an invoice (avoir)\u003C\u002Ftd>\n\u003Ctd data-label=\"Read\">\u003Ca href=\"#credit-notes-corrections-and-self-billing\">Credit notes, corrections and self-billing\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Change a text or add a language\u003C\u002Ftd>\n\u003Ctd data-label=\"Read\">\u003Ca href=\"#translations\">Translations\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>See a complete invoice\u003C\u002Ftd>\n\u003Ctd data-label=\"Read\">\u003Ca href=\"#complete-example\">Complete example\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2 id=\"e-invoicing-reform\">E-invoicing reform\u003Ca class=\"q-doc-anchor\" href=\"#e-invoicing-reform\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>All businesses receive e-invoices from 1 September 2026; large and mid-sized businesses issue them from that date, all others from 1 September 2027. They are exchanged through an approved platform (plateforme agréée) in Factur-X, UBL or CII. The pack chooses Factur-X for domestic invoices to businesses (\u003Ca href=\"#format-choice\">Format choice\u003C\u002Fa>). The connection to the platforms and e-reporting are not part of this pack, nor are the business rules of the French specifications (BR-FR-…); see \u003Ca href=\"#known-limitations\">Known limitations\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"the-four-new-mentions\">The four new mentions\u003Ca class=\"q-doc-anchor\" href=\"#the-four-new-mentions\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>From 1 September 2026 an invoice states four new mentions. The pack checks two of them, adds one and leaves one to you:\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Mention\u003C\u002Fth>\n\u003Cth>How to set it\u003C\u002Fth>\n\u003Cth>Checked by\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>The buyer's SIREN, for a business established in France\u003C\u002Ftd>\n\u003Ctd data-label=\"How to set it\">\u003Ccode>-&gt;legalRegistration('901234567', '0002')\u003C\u002Fcode> on the buyer (BT-47, scheme \u003Ccode>0002\u003C\u002Fcode> = SIREN)\u003C\u002Ftd>\n\u003Ctd data-label=\"Checked by\">\u003Ccode>FR-CGI-08\u003C\u002Fcode> (warning)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>The category of the operation: supply of goods, services or both\u003C\u002Ftd>\n\u003Ctd data-label=\"How to set it\">\u003Ccode>-&gt;businessProcess('B1')\u003C\u002Fcode> for goods, \u003Ccode>'S1'\u003C\u002Fcode> for services, \u003Ccode>'M1'\u003C\u002Fcode> for both (operation category, BT-23)\u003C\u002Ftd>\n\u003Ctd data-label=\"Checked by\">\u003Ccode>FR-CGI-09\u003C\u002Fcode> (warning)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>The delivery address, if it differs from the buyer's address\u003C\u002Ftd>\n\u003Ctd data-label=\"How to set it\">\u003Ccode>-&gt;deliverTo($name, $address)\u003C\u002Fcode> (deliver-to address, BG-15)\u003C\u002Ftd>\n\u003Ctd data-label=\"Checked by\">not checked\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>The option to pay VAT on debits (option pour le paiement de la taxe d'après les débits)\u003C\u002Ftd>\n\u003Ctd data-label=\"How to set it\">\u003Ccode>-&gt;flag(CountryFR::FLAG_VAT_ON_DEBITS)\u003C\u002Fcode>: the pack adds &quot;Option pour le paiement de la taxe d'après les débits&quot;\u003C\u002Ftd>\n\u003Ctd data-label=\"Checked by\">added by \u003Ccode>complete()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Builder\\InvoiceBuilder\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Data\\Party\\Address\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Country\\FR\\CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$builder \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> InvoiceBuilder\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">make\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#8B949E\">    \u002F\u002F number, dates, seller, lines …\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">businessProcess\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'M1'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)                                   \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F goods and services (BT-23)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">buyer\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">fn\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> ($b) => $b\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">name\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Boutique Exemple SARL'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">vatId\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'FR15901234567'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">legalRegistration\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'901234567'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'0002'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)              \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F SIREN of the buyer (BT-47)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">address\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'5 avenue de l\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">\\'\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">Opéra'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'75001'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Paris'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'FR'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">deliverTo\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Boutique Exemple SARL, entrepôt'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">new\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Address\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'FR'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'8 rue des Entrepôts'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">city\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Saint-Denis'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">postcode\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'93200'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">flag\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">FLAG_VAT_ON_DEBITS\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">);                    \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F the seller opted to pay VAT on debits\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cul>\n\u003Cli>The rules \u003Ccode>FR-CGI-08\u003C\u002Fcode> and \u003Ccode>FR-CGI-09\u003C\u002Fcode> apply to invoices with an issue date (BT-2) from 1 September 2026 (\u003Ccode>FrenchRules::REFORM_DATE\u003C\u002Fcode>) and not to consumers. They are warnings, so an invoice without these mentions still renders.\u003C\u002Fli>\n\u003Cli>The operation category is written to the XML as business process (BT-23), e.g. \u003Ccode>&lt;ram:ID&gt;S1&lt;\u002Fram:ID&gt;\u003C\u002Fcode> in Factur-X.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"from-the-cgi-to-the-cibs\">From the CGI to the CIBS\u003Ca class=\"q-doc-anchor\" href=\"#from-the-cgi-to-the-cibs\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>On 1 January 2027 the VAT rules of the CGI move into the Code des impositions sur les biens et services (CIBS); ordonnance n° 2026-671 of 27 July 2026 postponed the date from 1 September 2026. References to the CGI, also in the mentions of an invoice, remain accepted until 30 June 2028 (art. 46 II ordonnance n° 2025-1247, BOI-RES-TVA-000253). Art. 242 nonies A of annex II stays in the CGI; its 12° accepts the reference to the CGI, to the VAT Directive or any other mention of the exemption.\u003C\u002Fp>\n\u003Cp>On invoices issued from 1 January 2027 (\u003Ccode>VatPreset::CIBS_FROM\u003C\u002Fcode>), the pack replaces the texts of three presets by texts that cite the CIBS:\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Case\u003C\u002Fth>\n\u003Cth>Issued until 31 December 2026\u003C\u002Fth>\n\u003Cth>Issued from 1 January 2027\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>SmallBusiness\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Issued until 31 December 2026\">TVA non applicable, art. 293 B du CGI\u003C\u002Ftd>\n\u003Ctd data-label=\"Issued from 1 January 2027\">TVA non applicable, art. L. 233-3 du CIBS\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>IntraCommunitySupply\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Issued until 31 December 2026\">Exonération de TVA, article 262 ter I du CGI\u003C\u002Ftd>\n\u003Ctd data-label=\"Issued from 1 January 2027\">Exonération de TVA, article L. 213-12, 1° du CIBS\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Export\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Issued until 31 December 2026\">Exonération de TVA, article 262 I du CGI\u003C\u002Ftd>\n\u003Ctd data-label=\"Issued from 1 January 2027\">Exonération de TVA, article L. 213-12, 2° du CIBS\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>In English the texts read &quot;VAT not applicable, art. 293 B of the French Tax Code (CGI)&quot;, &quot;VAT exempt, article 262 ter I CGI&quot; and &quot;VAT exempt, article 262 I CGI&quot;, and from 2027 &quot;VAT not applicable, art. L. 233-3 of the French Code on Taxes on Goods and Services (CIBS)&quot;, &quot;VAT exempt, article L. 213-12, 1° CIBS&quot; and &quot;VAT exempt, article L. 213-12, 2° CIBS&quot;.\u003C\u002Fp>\n\u003Cp>Art. L. 213-12 CIBS states the exemptions of intra-European supplies (1°) and exports (2°); art. L. 213-13 and L. 213-14 set their conditions. Art. L. 233-3 defines the small business under the franchise. A decree or the BOFiP may still prescribe other wording.\u003C\u002Fp>\n\u003Cp>How the replacement works:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Where.\u003C\u002Fstrong> \u003Ccode>CountryFR::complete()\u003C\u002Fcode> replaces the texts. The render pipeline calls it for the leading pack in \u003Ccode>render()\u003C\u002Fcode>, \u003Ccode>check()\u003C\u002Fcode> and \u003Ccode>prepare()\u003C\u002Fcode>, before calculation and validation (\u003Ca href=\"\u002Fdocs\u002Fcountry-packs#the-countrypack-contract\">\u003Ccode>CompletesInvoices\u003C\u002Fcode>\u003C\u002Fa>). The data of the builder (\u003Ccode>$builder-&gt;build()\u003C\u002Fcode>) therefore still has the CGI texts. The rendered data (\u003Ccode>$result-&gt;data()\u003C\u002Fcode>, \u003Ccode>$prepared-&gt;data\u003C\u002Fcode>), the XML and the PDF have the CIBS texts.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>What.\u003C\u002Fstrong> The exemption reason of every line (sub lines included), of document level allowances and charges and of the VAT breakdown (BT-120).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>When.\u003C\u002Fstrong> The issue date (BT-2) decides, not the date of the supply. An invoice of 4 January 2027 for a delivery in December 2026 cites the CIBS.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Which texts.\u003C\u002Fstrong> Only texts that equal a CGI text of the three presets word for word, in one of the locales the pack ships (\u003Ccode>fr\u003C\u002Fcode>, \u003Ccode>en\u003C\u002Fcode>), with the translations in use. Texts of your own stay as they are, e.g. \u003Ccode>VatPreset::exempt('article 261-4-1° du CGI')\u003C\u002Fcode> or a changed wording. The comparison is by text, not by preset: a text of your own that equals one of the three texts exactly is replaced as well (\u003Ccode>VatPreset::exempt('article 262 I du CGI')\u003C\u002Fcode> gives the same text as \u003Ccode>Export\u003C\u002Fcode>). The texts of the other presets (Autoliquidation, the margin schemes, not taxable in France) do not change.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Ccode>VatPreset::exemptionReasonOn()\u003C\u002Fcode> returns the text for an issue date, e.g. to store or show it yourself:\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Support\\Date\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Country\\FR\\Tax\\VatPreset\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#79C0FF\">VatPreset\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Export\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">exemptionReason\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">();                             \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F \"Exonération de TVA, article 262 I du CGI\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#79C0FF\">VatPreset\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Export\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">exemptionReasonOn\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Date\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">of\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">2026\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">12\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">31\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">));      \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F \"Exonération de TVA, article 262 I du CGI\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#79C0FF\">VatPreset\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Export\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">exemptionReasonOn\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Date\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">of\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">2027\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">));        \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F \"Exonération de TVA, article L. 213-12, 2° du CIBS\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#79C0FF\">VatPreset\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Export\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">exemptionReasonOn\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Date\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">of\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">2027\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">4\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">), \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'en'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">);  \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F \"VAT exempt, article L. 213-12, 2° CIBS\"\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>For the other presets \u003Ccode>exemptionReasonOn()\u003C\u002Fcode> returns the same text as \u003Ccode>exemptionReason()\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2 id=\"tax-presets\">Tax presets\u003Ca class=\"q-doc-anchor\" href=\"#tax-presets\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>A tax preset is a ready-made VAT treatment for an invoice line. It sets the VAT category (BT-151) and the rate, and for the other categories also the exemption reason code (BT-121) and text (BT-120). Use a preset instead of a bare category and rate: the line then carries the wording the pack expects, and the rules recognise the case. The categories are the codes of EN 16931 (\u003Ca href=\"\u002Fdocs\u002Fbuilding-invoices#categories\">Categories\u003C\u002Fa>).\u003C\u002Fp>\n\u003Cp>\u003Ccode>Quittio\\Country\\FR\\Tax\\VatPreset\u003C\u002Fcode> is a string-backed enum that implements \u003Ccode>TaxPreset\u003C\u002Fcode>. Apply it per line:\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Builder\\InvoiceBuilder\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Enums\\UnitCode\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Country\\FR\\Tax\\VatPreset\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$builder \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> InvoiceBuilder\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">make\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">locale\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'fr'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">line\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Développement web'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">netPrice\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'90.00'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">quantity\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">10\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">unit\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">UnitCode\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Hour\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">vat\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">VatPreset\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Standard\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">line\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">fn\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> ($l) => $l\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">name\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Maintenance'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">netPrice\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'120.00'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">vat\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">VatPreset\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Intermediate\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#8B949E\">    \u002F\u002F an exemption without a case of its own: the legal reference as text\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">line\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Soins'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">netPrice\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'60.00'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">unit\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">UnitCode\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Piece\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">vat\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">VatPreset\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">exempt\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'article 261-4-1° du CGI'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">));\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Case\u003C\u002Fth>\n\u003Cth>Key\u003C\u002Fth>\n\u003Cth>Category\u003C\u002Fth>\n\u003Cth>Rate\u003C\u002Fth>\n\u003Cth>Code (BT-121)\u003C\u002Fth>\n\u003Cth>Text (BT-120), French\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Standard\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.standard\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>S\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">20\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">–\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Intermediate\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.intermediate\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>S\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">10\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">–\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Reduced\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.reduced\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>S\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">5.5\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">–\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Particular\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.particular\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>S\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">2.1\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">–\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>SmallBusiness\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.small_business\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>E\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">0\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">–\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">TVA non applicable, art. 293 B du CGI (CIBS from 2027)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>ReverseChargeDomestic\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.reverse_charge_domestic\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>AE\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">0\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">\u003Ccode>VATEX-EU-AE\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">Autoliquidation\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>ReverseChargeEu\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.reverse_charge_eu\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>AE\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">0\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">\u003Ccode>VATEX-EU-AE\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">Autoliquidation\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>IntraCommunitySupply\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.intra_community_supply\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>K\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">0\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">\u003Ccode>VATEX-EU-IC\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">Exonération de TVA, article 262 ter I du CGI (CIBS from 2027)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Export\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.export\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>G\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">0\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">\u003Ccode>VATEX-EU-G\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">Exonération de TVA, article 262 I du CGI (CIBS from 2027)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>NotTaxableInFrance\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.not_taxable\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>O\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">none\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">\u003Ccode>VATEX-EU-O\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">TVA non applicable en France (lieu de la prestation hors de France)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>MarginSecondHand\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.margin_second_hand\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>E\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">0\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">\u003Ccode>VATEX-EU-F\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">Régime particulier – Biens d'occasion\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>MarginArt\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.margin_art\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>E\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">0\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">\u003Ccode>VATEX-EU-I\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">Régime particulier – Objets d'art\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>MarginAntiques\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.margin_antiques\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>E\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">0\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">\u003Ccode>VATEX-EU-J\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">Régime particulier – Objets de collection et d'antiquité\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>TravelAgency\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.travel_agency\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>E\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">0\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">\u003Ccode>VATEX-EU-D\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">Régime particulier – Agences de voyages\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>VatPreset::exempt(string $paragraph, $code = null)\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>fr.exempt\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Category\">\u003Ccode>E\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Rate\">0\u003C\u002Ftd>\n\u003Ctd data-label=\"Code (BT-121)\">\u003Ccode>$code\u003C\u002Fcode> (enum, raw code or string)\u003C\u002Ftd>\n\u003Ctd data-label=\"Text (BT-120), French\">Exonération de TVA, \u003Ccode>$paragraph\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>The English texts are in \u003Ccode>resources\u002Flang\u002Fen\u002Ftax.php\u003C\u002Fcode>, e.g. &quot;Reverse charge (autoliquidation)&quot;, &quot;Not subject to French VAT (place of supply outside France)&quot;, &quot;Margin scheme – Second-hand goods&quot; and &quot;VAT exempt, :paragraph&quot;. The docblocks of the cases name the provisions behind them: art. 283-2 nonies CGI (domestic reverse charge, e.g. subcontracting in construction), art. 283-2 CGI and art. 196 VAT Directive (services to a business in another member state), art. 297 A CGI (margin schemes) and art. 266-1 e CGI (travel agencies).\u003C\u002Fp>\n\u003Cp>How presets behave:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Language.\u003C\u002Fstrong> The text is taken in the invoice locale (\u003Ccode>-&gt;locale()\u003C\u002Fcode> on the builder) when the line is built. The enum presets and \u003Ccode>VatPreset::exempt()\u003C\u002Fcode> (a \u003Ccode>Quittio\\Country\\FR\\Tax\\CustomVatPreset\u003C\u002Fcode>) use French when the invoice has no locale. Other locales without a text of their own fall back to English.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Rates.\u003C\u002Fstrong> The rates are fixed values; the pack keeps no table of earlier rates. \u003Ccode>Standard\u003C\u002Fcode>, \u003Ccode>Intermediate\u003C\u002Fcode>, \u003Ccode>Reduced\u003C\u002Fcode> and \u003Ccode>Particular\u003C\u002Fcode> carry no text, because EN 16931 forbids an exemption reason for category \u003Ccode>S\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Preset key.\u003C\u002Fstrong> The key stays on the line (\u003Ccode>$line-&gt;vat-&gt;presetKey\u003C\u002Fcode>). The small business detection of \u003Ccode>FR-CGI-02\u003C\u002Fcode> and \u003Ccode>FR-CGI-06\u003C\u002Fcode> relies on it.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>VAT breakdown and PDF.\u003C\u002Fstrong> Category, rate, code and text flow into the VAT breakdown (BG-23), as described in \u003Ca href=\"\u002Fdocs\u002Fbuilding-invoices#tax-presets\">Building invoices: tax presets\u003C\u002Fa>. The PDF lists the texts in its legal notes.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Default VAT.\u003C\u002Fstrong> Lines without \u003Ccode>vat:\u003C\u002Fcode> take the \u003Ca href=\"\u002Fdocs\u002Fbuilding-invoices#default-vat\">default VAT\u003C\u002Fa>. In Laravel that is \u003Ccode>VatPreset::Standard\u003C\u002Fcode> for a French seller (\u003Ccode>CountryDefaults::$vatPreset\u003C\u002Fcode>) unless \u003Ccode>quittio.defaults.vat\u003C\u002Fcode> names another preset, and \u003Ccode>VatPreset::SmallBusiness\u003C\u002Fcode> for a small business. Without Laravel, install \u003Ccode>CountryDefaultVat\u003C\u002Fcode> yourself.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Lookup by key\u003C\u002Fstrong>, e.g. from a database column: \u003Ccode>VatPreset::from('fr.standard')\u003C\u002Fcode>, \u003Ccode>VatPreset::fromKey($key)\u003C\u002Fcode> (null for keys of other packs), \u003Ccode>(new CountryFR)-&gt;taxPresets()-&gt;get('fr.standard')\u003C\u002Fcode> or, across all installed packs, \u003Ccode>$quittio-&gt;countries()-&gt;taxPreset('fr.standard')\u003C\u002Fcode>. \u003Ccode>fr.exempt\u003C\u002Fcode> is not part of the collection.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"small-businesses-franchise-en-base\">Small businesses (franchise en base)\u003Ca class=\"q-doc-anchor\" href=\"#small-businesses-franchise-en-base\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>A small business under the franchise en base (art. 293 B CGI) charges no VAT. Mark the invoice as a small business invoice and use \u003Ccode>VatPreset::SmallBusiness\u003C\u002Fcode> on every line:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Flag.\u003C\u002Fstrong> \u003Ccode>quittio.seller.small_business = true\u003C\u002Fcode> in Laravel (\u003Ca href=\"\u002Fdocs\u002Fconfiguration#small-businesses\">Configuration: small businesses\u003C\u002Fa>), or \u003Ccode>-&gt;flag(Meta::FLAG_SMALL_BUSINESS)\u003C\u002Fcode> on the builder. With the flag, lines without \u003Ccode>vat:\u003C\u002Fcode> get \u003Ccode>VatPreset::SmallBusiness\u003C\u002Fcode> from the default VAT.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Rules.\u003C\u002Fstrong> A small business invoice is one with the flag or with a line that uses \u003Ccode>VatPreset::SmallBusiness\u003C\u002Fcode> (\u003Ccode>FrenchRules::isSmallBusinessInvoice()\u003C\u002Fcode>). It needs no VAT number of the seller (\u003Ccode>FR-CGI-02\u003C\u002Fcode>), and any VAT amount in its breakdown is an error (\u003Ccode>FR-CGI-06\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>EN 16931.\u003C\u002Fstrong> The rule BR-E-02 of EN 16931 requires the seller's VAT identifier (BT-31), tax registration identifier (BT-32, \u003Ccode>-&gt;taxNumber()\u003C\u002Fcode>) or the VAT identifier of a tax representative (BT-63) on every invoice with category \u003Ccode>E\u003C\u002Fcode>. The pack fills in none of them, so a small business invoice without any of them fails with \u003Ccode>BR-E-02\u003C\u002Fcode>, also as plain PDF.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>From 2027\u003C\u002Fstrong> the text cites art. L. 233-3 CIBS (\u003Ca href=\"#from-the-cgi-to-the-cibs\">From the CGI to the CIBS\u003C\u002Fa>).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"reverse-charge-intra-community-supplies-and-exports\">Reverse charge, intra-community supplies and exports\u003Ca class=\"q-doc-anchor\" href=\"#reverse-charge-intra-community-supplies-and-exports\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Autoliquidation\u003C\u002Fstrong> (reverse charge, category \u003Ccode>AE\u003C\u002Fcode>): the buyer owes the VAT. Use \u003Ccode>ReverseChargeDomestic\u003C\u002Fcode> or \u003Ccode>ReverseChargeEu\u003C\u002Fcode>. Their texts contain &quot;Autoliquidation&quot; in both languages, which \u003Ccode>FR-CGI-04\u003C\u002Fcode> requires in the VAT breakdown. A category \u003Ccode>AE\u003C\u002Fcode> with a text of your own fails unless the text contains the word.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Intra-community supplies\u003C\u002Fstrong> (\u003Ccode>IntraCommunitySupply\u003C\u002Fcode>, category \u003Ccode>K\u003C\u002Fcode>) and \u003Cstrong>exports\u003C\u002Fstrong> (\u003Ccode>Export\u003C\u002Fcode>, category \u003Ccode>G\u003C\u002Fcode>): \u003Ccode>FR-CGI-05\u003C\u002Fcode> requires the reference to the provision as text; a code alone is not enough. The presets provide it.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Other exemptions\u003C\u002Fstrong>: \u003Ccode>VatPreset::exempt('article …')\u003C\u002Fcode> with the reference to the provision, and optionally a VATEX code as second argument.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>VAT identifiers.\u003C\u002Fstrong> The pack has no rule of its own for the buyer's VAT number. The EN 16931 rules of the categories apply (e.g. BR-AE-02, BR-IC-02).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"rules\">Rules\u003Ca class=\"q-doc-anchor\" href=\"#rules\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Ccode>Quittio\\Country\\FR\\Rules\\FrenchRules::all()\u003C\u002Fcode> (level L3) checks the mentions of a French invoice under art. 242 nonies A of annex II to the CGI and art. L441-9 Code de commerce. The rules apply to every invoice of a French seller, in every format including a plain PDF. Messages and hints are in French and English. Switch a rule off or change its severity with \u003Ccode>validation.rules\u003C\u002Fcode> (\u003Ca href=\"\u002Fdocs\u002Fvalidation#switching-rules-off-and-changing-their-severity\">Switching rules off\u003C\u002Fa>).\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Rule\u003C\u002Fth>\n\u003Cth>Severity (BT, path)\u003C\u002Fth>\n\u003Cth>Reported when\u003C\u002Fth>\n\u003Cth>Legal basis named\u003C\u002Fth>\n\u003Cth>Fix\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>FR-CGI-01\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Severity (BT, path)\">error (BT-30 \u003Ccode>seller.legalRegistration\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Reported when\">The seller (not in Monaco) has no legal registration identifier, or its value is neither a SIREN nor a SIRET with valid check digits (\u003Ccode>Siren::isSiren()\u003C\u002Fcode>, \u003Ccode>Siren::isSiret()\u003C\u002Fcode>). Spaces are ignored; the scheme is not checked.\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis named\">art. 242 nonies A annex II CGI, art. R123-237 Code de commerce\u003C\u002Ftd>\n\u003Ctd data-label=\"Fix\">\u003Ccode>-&gt;legalRegistration('812345676', '0002')\u003C\u002Fcode> on the seller, or a SIRET with scheme \u003Ccode>0009\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>FR-CGI-02\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Severity (BT, path)\">error (BT-31 \u003Ccode>seller.vatId\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Reported when\">Neither the seller nor its tax representative has a VAT number, and the invoice is no \u003Ca href=\"#small-businesses-franchise-en-base\">small business invoice\u003C\u002Fa>.\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis named\">art. 242 nonies A annex II CGI\u003C\u002Ftd>\n\u003Ctd data-label=\"Fix\">\u003Ccode>-&gt;vatId()\u003C\u002Fcode> on the seller.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>FR-CGI-03\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Severity (BT, path)\">error per missing field (BT-35, BT-38, BT-37 of the seller; BT-50, BT-53, BT-52 of the buyer)\u003C\u002Ftd>\n\u003Ctd data-label=\"Reported when\">Street (address line 1), post code or city of the seller or the buyer is empty, also for consumers.\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis named\">art. 242 nonies A annex II CGI\u003C\u002Ftd>\n\u003Ctd data-label=\"Fix\">Complete both addresses.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>FR-CGI-04\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Severity (BT, path)\">error per VAT row (BT-120 \u003Ccode>vatBreakdown[i].exemptionReason\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Reported when\">A VAT row of category \u003Ccode>AE\u003C\u002Fcode> whose exemption reason does not contain &quot;autoliquidation&quot; (case-insensitive).\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis named\">art. 242 nonies A annex II CGI\u003C\u002Ftd>\n\u003Ctd data-label=\"Fix\">\u003Ccode>VatPreset::ReverseChargeDomestic\u003C\u002Fcode> or \u003Ccode>ReverseChargeEu\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>FR-CGI-05\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Severity (BT, path)\">error per VAT row (BT-120 \u003Ccode>vatBreakdown[i].exemptionReason\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Reported when\">A VAT row of category \u003Ccode>E\u003C\u002Fcode>, \u003Ccode>K\u003C\u002Fcode> or \u003Ccode>G\u003C\u002Fcode> without exemption reason text, e.g. with a VATEX code only.\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis named\">art. 242 nonies A annex II CGI\u003C\u002Ftd>\n\u003Ctd data-label=\"Fix\">A preset, or \u003Ccode>VatPreset::exempt()\u003C\u002Fcode> with the reference.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>FR-CGI-06\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Severity (BT, path)\">error per VAT row (BT-117 \u003Ccode>vatBreakdown[i].taxAmount\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Reported when\">A small business invoice has a VAT row whose VAT amount is not zero.\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis named\">art. 293 B CGI; VAT shown is owed by reason of the invoice (art. 283-3 CGI)\u003C\u002Ftd>\n\u003Ctd data-label=\"Fix\">\u003Ccode>VatPreset::SmallBusiness\u003C\u002Fcode> on every line.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>FR-CGI-07\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Severity (BT, path)\">error (BT-22 \u003Ccode>notes\u003C\u002Fcode>); warning when the XML is written (option \u003Ccode>syntax\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Reported when\">A self-billed type code (389, 261, 527), and no note contains &quot;autofacturation&quot; or &quot;self-billing&quot; (case-insensitive).\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis named\">art. 242 nonies A annex II CGI\u003C\u002Ftd>\n\u003Ctd data-label=\"Fix\">Add the note, see \u003Ca href=\"#credit-notes-corrections-and-self-billing\">Self-billing\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>FR-CGI-08\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Severity (BT, path)\">warning (BT-47 \u003Ccode>buyer.legalRegistration\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Reported when\">Issue date from 1 September 2026, the buyer is no consumer, its address lies in France (not in Monaco, post codes \u003Ccode>97…\u003C\u002Fcode> and \u003Ccode>98…\u003C\u002Fcode> excluded), and its legal registration identifier yields no SIREN (\u003Ccode>Siren::of()\u003C\u002Fcode>: a SIREN, a SIRET or a French VAT number). The scheme is not checked.\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis named\">art. 242 nonies A annex II CGI\u003C\u002Ftd>\n\u003Ctd data-label=\"Fix\">\u003Ccode>-&gt;legalRegistration('901234567', '0002')\u003C\u002Fcode> on the buyer.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>FR-CGI-09\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Severity (BT, path)\">warning (BT-23 \u003Ccode>businessProcess\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Reported when\">Issue date from 1 September 2026, the buyer is no consumer (in France or abroad), and the business process (BT-23) is not one of \u003Ccode>FrenchRules::OPERATION_CATEGORIES\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis named\">art. 242 nonies A annex II CGI\u003C\u002Ftd>\n\u003Ctd data-label=\"Fix\">\u003Ccode>-&gt;businessProcess('S1')\u003C\u002Fcode> for services, \u003Ccode>'B1'\u003C\u002Fcode> for goods, \u003Ccode>'M1'\u003C\u002Fcode> for both.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>FR-COM-01\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Severity (BT, path)\">error (BT-9 \u003Ccode>dueDate\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Reported when\">The buyer is no consumer, the invoice is no credit note, and it has neither a due date (BT-9) nor a payment terms text (BT-20).\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis named\">art. L441-9 Code de commerce\u003C\u002Ftd>\n\u003Ctd data-label=\"Fix\">\u003Ccode>-&gt;dueDate()\u003C\u002Fcode> or \u003Ccode>-&gt;paymentTerms()\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>FR-COM-02\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Severity (BT, path)\">warning (BT-22 \u003Ccode>notes\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Reported when\">The buyer is no consumer, the invoice is no credit note, and neither a note nor the payment terms text contains &quot;pénalit&quot; or &quot;penalt&quot; (case-insensitive). The rule looks for this word only; it does not check the indemnity of 40 EUR or the discount.\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis named\">art. L441-9 Code de commerce\u003C\u002Ftd>\n\u003Ctd data-label=\"Fix\">Keep the \u003Ca href=\"#mentions-added-by-the-pack\">late payment mention\u003C\u002Fa> on, or write a note of your own.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cul>\n\u003Cli>\u003Cstrong>Operation categories.\u003C\u002Fstrong> \u003Ccode>FrenchRules::OPERATION_CATEGORIES\u003C\u002Fcode> holds the codes \u003Ccode>B1\u003C\u002Fcode>, \u003Ccode>S1\u003C\u002Fcode>, \u003Ccode>M1\u003C\u002Fcode>, \u003Ccode>B2\u003C\u002Fcode>, \u003Ccode>S2\u003C\u002Fcode>, \u003Ccode>M2\u003C\u002Fcode>, \u003Ccode>S3\u003C\u002Fcode>, \u003Ccode>B4\u003C\u002Fcode>, \u003Ccode>S4\u003C\u002Fcode>, \u003Ccode>M4\u003C\u002Fcode>, \u003Ccode>S5\u003C\u002Fcode>, \u003Ccode>S6\u003C\u002Fcode>, \u003Ccode>B7\u003C\u002Fcode> and \u003Ccode>S7\u003C\u002Fcode> of the French specifications (cadre de facturation). The messages and hints name \u003Ccode>B1\u003C\u002Fcode>, \u003Ccode>S1\u003C\u002Fcode> and \u003Ccode>M1\u003C\u002Fcode>; the pack does not explain the other codes.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Self-billing in XML.\u003C\u002Fstrong> \u003Ccode>FR-CGI-07\u003C\u002Fcode> is a warning when the run writes XML (Factur-X, CII, UBL), where the type code marks the invoice as self-billed, and an error for a plain PDF.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Credit notes.\u003C\u002Fstrong> \u003Ccode>FR-COM-01\u003C\u002Fcode> and \u003Ccode>FR-COM-02\u003C\u002Fcode> skip credit notes (avoirs).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Helpers used by the rules and available to you:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>FrenchRules::isSmallBusinessInvoice($invoice)\u003C\u002Fcode>: the flag \u003Ccode>small_business\u003C\u002Fcode> is set, or a line uses \u003Ccode>VatPreset::SmallBusiness\u003C\u002Fcode>;\u003C\u002Fli>\n\u003Cli>\u003Ccode>FrenchRules::inFrance($address)\u003C\u002Fcode>: the address lies in the French VAT territory (with Monaco, without the overseas departments);\u003C\u002Fli>\n\u003Cli>\u003Ccode>FrenchRules::REFORM_DATE\u003C\u002Fcode> (\u003Ccode>2026-09-01\u003C\u002Fcode>) and \u003Ccode>FrenchRules::OPERATION_CATEGORIES\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"siren-and-siret\">SIREN and SIRET\u003Ca class=\"q-doc-anchor\" href=\"#siren-and-siret\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>SIREN (nine digits) and SIRET (fourteen digits, starting with the SIREN) are the numbers of the French business register. Both end with a Luhn check digit. SIRET numbers of La Poste (SIREN 356000000) use a sum of digits instead, which \u003Ccode>Siren\u003C\u002Fcode> knows. Set the seller's number as legal registration identifier (BT-30) with scheme \u003Ccode>0002\u003C\u002Fcode> (SIREN) or \u003Ccode>0009\u003C\u002Fcode> (SIRET), and the buyer's SIREN as BT-47.\u003C\u002Fp>\n\u003Cp>\u003Ccode>Quittio\\Country\\FR\\Support\\Siren\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Method\u003C\u002Fth>\n\u003Cth>Returns\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Siren::isSiren(string $value): bool\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Returns\">nine digits with a valid check digit; other characters such as spaces are ignored\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Siren::isSiret(string $value): bool\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Returns\">fourteen digits with valid check digits of the SIRET and of its SIREN (La Poste: sum of digits)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Siren::of(?string $value): ?string\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Returns\">the SIREN of a SIREN, a SIRET or a French VAT number (\u003Ccode>FR\u003C\u002Fcode> + two check digits + SIREN), or null when none with a valid check digit can be read\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Country\\FR\\Support\\Siren\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#79C0FF\">Siren\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">isSiren\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'812 345 676'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">);       \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F true\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#79C0FF\">Siren\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">isSiret\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'81234567600017'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">);    \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F true\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#79C0FF\">Siren\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">of\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'FR19812345676'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">);          \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F \"812345676\", from a VAT number\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#79C0FF\">Siren\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">of\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'81234567600017'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">);         \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F \"812345676\", from a SIRET\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#79C0FF\">Siren\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">of\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'812345677'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">);              \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F null: wrong check digit\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>In a VAT number, \u003Ccode>Siren::of()\u003C\u002Fcode> checks the SIREN only, not the two check digits in front of it. For the VAT number checks of the core see \u003Ca href=\"\u002Fdocs\u002Fvalidation#vat-identifiers-and-vies\">VAT identifiers and VIES\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"format-choice\">Format choice\u003Ca class=\"q-doc-anchor\" href=\"#format-choice\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Without \u003Ccode>-&gt;format()\u003C\u002Fcode>, Quittio chooses the format for each invoice (\u003Ca href=\"\u002Fdocs\u002Fformats#automatic-choice\">Automatic choice\u003C\u002Fa>). \u003Ccode>Quittio\\Country\\FR\\Formats\\FrenchFormatRule\u003C\u002Fcode> returns a choice for domestic invoices between businesses and null (no opinion) otherwise:\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Condition\u003C\u002Fth>\n\u003Cth>Format\u003C\u002Fth>\n\u003Cth>Profile\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>The buyer is no consumer, and the addresses of seller and buyer lie in France (\u003Ccode>FrenchRules::inFrance()\u003C\u002Fcode>: Monaco included, post codes \u003Ccode>97…\u003C\u002Fcode> and \u003Ccode>98…\u003C\u002Fcode> excluded)\u003C\u002Ftd>\n\u003Ctd data-label=\"Format\">\u003Ccode>zugferd\u003C\u002Fcode> (Factur-X)\u003C\u002Ftd>\n\u003Ctd data-label=\"Profile\">\u003Ccode>en16931\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>otherwise\u003C\u002Ftd>\n\u003Ctd data-label=\"Format\">– (null)\u003C\u002Ftd>\n\u003Ctd data-label=\"Profile\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Factur-X and ZUGFeRD are the same standard: a PDF\u002FA-3 with the CII XML embedded (\u003Ca href=\"\u002Fdocs\u002Fformats#zugferd-and-factur-x\">ZUGFeRD and Factur-X\u003C\u002Fa>).\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Peppol.\u003C\u002Fstrong> The rule decides before the Peppol lookup of the resolver, so a domestic business invoice is Factur-X even when the buyer is reachable via Peppol.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Profile.\u003C\u002Fstrong> The rule asks for EN 16931 whatever profile is configured. When the invoice uses features of EXTENDED (e.g. sub lines), the resolver still upgrades it (\u003Ca href=\"\u002Fdocs\u002Fformats#upgrade-to-profile-extended\">Upgrade to profile EXTENDED\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Everything else\u003C\u002Fstrong> follows the general order of the resolver: consumers get \u003Ccode>pdf\u003C\u002Fcode>; a cross-border invoice within the EU VAT territory gets \u003Ccode>zugferd\u003C\u002Fcode> with the configured profile; an invoice to a buyer outside it (also in the overseas departments) gets \u003Ccode>pdf\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Explicit formats.\u003C\u002Fstrong> An explicit \u003Ccode>-&gt;format()\u003C\u002Fcode> or a configured \u003Ccode>quittio.defaults.format\u003C\u002Fcode> always wins, e.g. \u003Ccode>-&gt;format('ubl')\u003C\u002Fcode> or \u003Ccode>-&gt;format('cii')\u003C\u002Fcode> for a platform that expects UBL or CII.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Sending.\u003C\u002Fstrong> Quittio produces the file. Sending it through an approved platform is not part of this pack, and the pack does not check whether an invoice must be an e-invoice.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"mentions-added-by-the-pack\">Mentions added by the pack\u003Ca class=\"q-doc-anchor\" href=\"#mentions-added-by-the-pack\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Ccode>CountryFR\u003C\u002Fcode> implements \u003Ccode>CompletesInvoices\u003C\u002Fcode>. While rendering, \u003Ccode>complete()\u003C\u002Fcode> adds up to two notes (BT-22) to the invoice, after the notes it already has. Like the \u003Ca href=\"#from-the-cgi-to-the-cibs\">CIBS texts\u003C\u002Fa>, they appear in the rendered data, the XML and the PDF, not in the data of the builder.\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Note\u003C\u002Fth>\n\u003Cth>Subject code\u003C\u002Fth>\n\u003Cth>Added when\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Late payment mention\u003C\u002Ftd>\n\u003Ctd data-label=\"Subject code\">\u003Ccode>PMT\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Added when\">the buyer is no consumer, the invoice is no credit note, the setting \u003Ccode>payment_mentions\u003C\u002Fcode> is not \u003Ccode>false\u003C\u002Fcode>, and no note contains &quot;pénalit&quot; or &quot;penalt&quot; (case-insensitive)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>VAT on debits\u003C\u002Ftd>\n\u003Ctd data-label=\"Subject code\">\u003Ccode>TXD\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Added when\">the flag \u003Ccode>CountryFR::FLAG_VAT_ON_DEBITS\u003C\u002Fcode> is set, and no note contains &quot;débits&quot; or &quot;debits&quot;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>The late payment mention in French:\u003C\u002Fp>\n\u003Cblockquote class=\"q-doc-note\">\n\u003Cp>En cas de retard de paiement, des pénalités sont dues au taux de refinancement de la Banque centrale européenne majoré de 10 points, ainsi qu'une indemnité forfaitaire pour frais de recouvrement de 40 € (art. L441-10 du Code de commerce). Pas d'escompte pour paiement anticipé.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>And in English:\u003C\u002Fp>\n\u003Cblockquote class=\"q-doc-note\">\n\u003Cp>In case of late payment, penalties at the refinancing rate of the European Central Bank plus 10 points and a fixed indemnity of EUR 40 for recovery costs are due (art. L441-10 of the French Commercial Code). No discount for early payment.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cul>\n\u003Cli>\u003Cstrong>Language.\u003C\u002Fstrong> The language of the invoice locale (\u003Ccode>-&gt;locale()\u003C\u002Fcode> on the builder) if the pack ships it (\u003Ccode>fr\u003C\u002Fcode>, \u003Ccode>en\u003C\u002Fcode>), French otherwise and without a locale. A locale passed to the run (\u003Ccode>-&gt;locale()\u003C\u002Fcode> on the pending invoice) does not change the notes.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Your own wording.\u003C\u002Fstrong> A note of your own that contains &quot;pénalités&quot; (e.g. with an agreed rate or a discount) replaces the mention: the pack adds nothing, and \u003Ccode>FR-COM-02\u003C\u002Fcode> is satisfied. The pack does not look at the payment terms text; penalties stated only there do not stop the mention.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Switching it off.\u003C\u002Fstrong> \u003Ccode>payment_mentions = false\u003C\u002Fcode> in \u003Ccode>quittio.countries.fr\u003C\u002Fcode> (\u003Ca href=\"#meta-flags-and-settings\">Meta flags and settings\u003C\u002Fa>). Then state the penalties yourself, otherwise \u003Ccode>FR-COM-02\u003C\u002Fcode> warns.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>No duplicates.\u003C\u002Fstrong> Running \u003Ccode>complete()\u003C\u002Fcode> again on completed data adds nothing.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"late-payment\">Late payment\u003Ca class=\"q-doc-anchor\" href=\"#late-payment\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Art. L441-10 Code de commerce: the refinancing rate of the ECB on the first day of the half-year plus 10 points (12.40 % in the second half of 2026) and a fixed indemnity of 40 EUR. \u003Ccode>EcbRateTable\u003C\u002Fcode> holds the ECB rates from 2023; add later half-years with \u003Ccode>withRate()\u003C\u002Fcode>. Consumers owe the legal interest rate (art. 1231-6 Code civil). Its category depends on the creditor (art. L313-2 Code monétaire et financier): a business claims the rate for all other cases, 2.75 % in the second half of 2026 (\u003Ccode>b2cFixedRate\u003C\u002Fcode>; it changes every half-year), not the rate for creditors who are individuals (6.84 %).\u003C\u002Fp>\n\u003Cp>Quittio's documents do not apply these values by themselves: calculate the penalties with \u003Ccode>DefaultInterest\u003C\u002Fcode> and pass them to a payment reminder (\u003Ca href=\"\u002Fdocs\u002Fdocuments#payment-reminders\">Documents: payment reminders\u003C\u002Fa>).\u003C\u002Fp>\n\u003Cp>\u003Ccode>CountryFR::dunningLaw()\u003C\u002Fcode> (also as \u003Ccode>CountryFR::frenchDunningLaw()\u003C\u002Fcode>) returns these values (\u003Ca href=\"\u002Fdocs\u002Fcountry-packs#dunninglaw\">\u003Ccode>DunningLaw\u003C\u002Fcode>\u003C\u002Fa>):\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Value\u003C\u002Fth>\n\u003Cth>France\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Penalties for business debtors (\u003Ccode>b2bInterestPoints\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">ECB rate plus 10.00 points\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Interest for consumers (\u003Ccode>b2cFixedRate\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">2.75 % fixed, for the whole period\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Fixed indemnity for business debtors (\u003Ccode>b2bFlatRate\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">40.00 EUR\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Day count\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">365 days\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Consumer default (\u003Ccode>consumerDefaultAfterDays\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">none\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Reference rate (\u003Ccode>referenceRateName\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">&quot;Taux de refinancement de la BCE (art. L441-10 Code de commerce)&quot;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>\u003Ccode>CountryFR::referenceRates()\u003C\u002Fcode> returns a \u003Ccode>Quittio\\Country\\FR\\Dunning\\EcbRateTable\u003C\u002Fcode>, so \u003Ccode>DefaultInterest::forCountry(new CountryFR)\u003C\u002Fcode> works without further set-up:\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Method\u003C\u002Fth>\n\u003Cth>Result\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>__construct(array $rates = EcbRateTable::PUBLISHED)\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Result\">the rates by the first day of the half-year (ISO date =&gt; percent); \u003Ccode>PUBLISHED\u003C\u002Fcode> runs from 1 January 2023 to 1 July 2026 (2.40 %)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>withRate(string $from, string $rate): self\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Result\">a copy with the rate of one more half-year, e.g. \u003Ccode>withRate('2027-01-01', '…')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>rateOn(Date $date): BigDecimal\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Result\">the rate of the day\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>periods(Date $from, Date $until): array\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Result\">the periods of equal rate between the two dates (\u003Ccode>until\u003C\u002Fcode> exclusive)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validUntil(): Date\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Result\">the first day without a known rate: 1 January 2027 for the shipped table\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Days the table does not cover throw an \u003Ccode>InvalidArgumentException\u003C\u002Fcode> (&quot;No ECB reference rate is known after 2026-12-31. Add it with withRate().&quot;).\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Brick\\Money\\Money\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Documents\\DocumentBuilder\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Dunning\\DefaultInterest\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Support\\Date\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Country\\FR\\CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$interest \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> DefaultInterest\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">forCountry\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">new\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#8B949E\">\u002F\u002F invoice F-2026-00042 of 1,620.00 EUR, due on 4 November 2026:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#8B949E\">\u002F\u002F penalties from 5 November; 20 December is the first day without\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$charges \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> $interest\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">calculate\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Money\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">of\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'1620.00'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'EUR'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">), \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Date\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">parse\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'2026-11-05'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">), \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Date\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">parse\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'2026-12-20'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">));\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#8B949E\">\u002F\u002F one charge of 12.40 % (ECB rate 2.40 % + 10 points) over 45 days: 24.77 EUR\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$reminder \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> DocumentBuilder\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">paymentReminder\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">1\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">number\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'R-2026-0007'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">seller\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">fn\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> ($s) => $s\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">name\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Atelier Numérique SAS'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">vatId\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'FR19812345676'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">address\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'12 rue de la République'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'69002'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Lyon'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'FR'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">buyer\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">fn\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> ($b) => $b\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">name\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Boutique Exemple SARL'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">address\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'5 avenue de l\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">\\'\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">Opéra'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'75001'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Paris'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'FR'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">openItem\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'F-2026-00042'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'2026-10-05'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'1620.00'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">dueDate\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'2026-11-04'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">interestCharge\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">...\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">$charges)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">flatRate\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'F-2026-00042'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)                                \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F the fixed indemnity of 40.00 EUR for this invoice\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">build\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">();\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>For a period after the shipped table, add the rate and pass the table with the law:\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Brick\\Money\\Money\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Dunning\\DefaultInterest\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Support\\Date\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Country\\FR\\CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Country\\FR\\Dunning\\EcbRateTable\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$ecbRate \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> '2.40'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;   \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F placeholder: the rate the ECB applies on 1 January 2027\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$interest \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> DefaultInterest\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">((\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">new\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> EcbRateTable\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">withRate\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'2027-01-01'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, $ecbRate), \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">frenchDunningLaw\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">());\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$charges \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> $interest\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">calculate\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Money\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">of\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'1620.00'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'EUR'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">), \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Date\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">parse\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'2026-12-05'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">), \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Date\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">parse\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'2027-02-01'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">));\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cul>\n\u003Cli>\u003Cstrong>Descriptions.\u003C\u002Fstrong> \u003Ccode>DefaultInterest::forCountry()\u003C\u002Fcode> creates the charges without a description; the reminder then prints its default label (&quot;Default interest … p.a. …&quot;). Pass \u003Ccode>description:\u003C\u002Fcode> to \u003Ccode>interest()\u003C\u002Fcode> for a wording of your own.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Day count.\u003C\u002Fstrong> The pack counts on 365 days (\u003Ccode>InterestCharge::$dayCount\u003C\u002Fcode>); \u003Ccode>interestCharge()\u003C\u002Fcode> takes it over.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Consumers.\u003C\u002Fstrong> \u003Ccode>calculate(…, consumer: true)\u003C\u002Fcode> charges the fixed 2.75 % for the whole period, also for days in another half-year, and needs no ECB rate. For another half-year, pass a \u003Ccode>DunningLaw\u003C\u002Fcode> with the rate of that half-year as \u003Ccode>b2cFixedRate\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fixed indemnity.\u003C\u002Fstrong> \u003Ccode>$interest-&gt;flatRate()\u003C\u002Fcode> returns 40.00 EUR; \u003Ccode>DocumentBuilder::flatRate($claim)\u003C\u002Fcode> adds it once per claim and refuses it for consumers (\u003Ca href=\"\u002Fdocs\u002Fdocuments#payment-reminders\">Documents: payment reminders\u003C\u002Fa>).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"meta-flags-and-settings\">Meta flags and settings\u003Ca class=\"q-doc-anchor\" href=\"#meta-flags-and-settings\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Meta flags mark special cases on the invoice (\u003Ccode>InvoiceData::$meta-&gt;flags\u003C\u002Fcode>, set with \u003Ccode>-&gt;flag()\u003C\u002Fcode>):\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Constant\u003C\u002Fth>\n\u003Cth>Value\u003C\u002Fth>\n\u003Cth>Effect\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>CountryFR::FLAG_VAT_ON_DEBITS\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Value\">\u003Ccode>fr.vat_on_debits\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ccode>complete()\u003C\u002Fcode> adds &quot;Option pour le paiement de la taxe d'après les débits&quot; (\u003Ca href=\"#mentions-added-by-the-pack\">Mentions added by the pack\u003C\u002Fa>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Meta::FLAG_SMALL_BUSINESS\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Value\">\u003Ccode>small_business\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">small business invoice: no VAT number required (\u003Ccode>FR-CGI-02\u003C\u002Fcode>), no VAT allowed (\u003Ccode>FR-CGI-06\u003C\u002Fcode>), default VAT \u003Ccode>VatPreset::SmallBusiness\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Settings of the pack live under \u003Ccode>quittio.countries.fr\u003C\u002Fcode> (\u003Ca href=\"\u002Fdocs\u002Fconfiguration#settings-of-a-pack-quittiocountriescode\">Settings of a pack\u003C\u002Fa>):\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Key\u003C\u002Fth>\n\u003Cth>Type\u003C\u002Fth>\n\u003Cth>Default\u003C\u002Fth>\n\u003Cth>Effect\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>countries.fr.payment_mentions\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">bool\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>true\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ccode>false\u003C\u002Fcode> = no late payment mention on invoices between businesses\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>The pack ships no configuration file, so \u003Ccode>php artisan quittio:install\u003C\u002Fcode> publishes none. Set the key in \u003Ccode>config\u002Fquittio.php\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#A5D6FF\">'countries'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#A5D6FF\">    'fr'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'payment_mentions'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> false\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">],\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">],\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>Without Laravel, pass the same array to \u003Ccode>Quittio::create()\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Country\\FR\\CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$quittio \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">create\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">([\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'country'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'FR'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'countries'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'fr'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'payment_mentions'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> false\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">]]], [\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">new\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">]);\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>\u003Ccode>complete()\u003C\u002Fcode> receives these settings from the render pipeline. When you call \u003Ccode>(new CountryFR)-&gt;complete($invoice, $settings)\u003C\u002Fcode> yourself, pass them as second argument.\u003C\u002Fp>\n\u003Ch2 id=\"defaults\">Defaults\u003Ca class=\"q-doc-anchor\" href=\"#defaults\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>How \u003Ccode>CountryFR\u003C\u002Fcode> fills the \u003Ca href=\"\u002Fdocs\u002Fcountry-packs#the-countrypack-contract\">\u003Ccode>CountryPack\u003C\u002Fcode> contract\u003C\u002Fa>:\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Hook\u003C\u002Fth>\n\u003Cth>France\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>defaults()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">currency \u003Ccode>EUR\u003C\u002Fcode>, time zone \u003Ccode>Europe\u002FParis\u003C\u002Fcode>, locale \u003Ccode>fr\u003C\u002Fcode>, paper \u003Ccode>A4\u003C\u002Fcode>, letter layout \u003Ccode>free\u003C\u002Fcode>, profile \u003Ccode>en16931\u003C\u002Fcode>, payment QR \u003Ccode>girocode\u003C\u002Fcode>, default VAT presets \u003Ccode>fr.standard\u003C\u002Fcode> and \u003Ccode>fr.small_business\u003C\u002Fcode> (\u003Ca href=\"\u002Fdocs\u002Fcountry-packs#countrydefaults\">\u003Ccode>CountryDefaults\u003C\u002Fcode>\u003C\u002Fa>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>taxPresets()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">every case of \u003Ca href=\"#tax-presets\">\u003Ccode>VatPreset\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>rules()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">the \u003Ca href=\"#rules\">rules\u003C\u002Fa> \u003Ccode>FR-CGI-01\u003C\u002Fcode> to \u003Ccode>FR-CGI-09\u003C\u002Fcode>, \u003Ccode>FR-COM-01\u003C\u002Fcode>, \u003Ccode>FR-COM-02\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>buyerCountryRules()\u003C\u002Fcode>, \u003Ccode>profiles()\u003C\u002Fcode>, \u003Ccode>legalTexts()\u003C\u002Fcode>, \u003Ccode>letterLayouts()\u003C\u002Fcode>, \u003Ccode>exporters()\u003C\u002Fcode>, \u003Ccode>readers()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">none (defaults of \u003Ccode>AbstractCountryPack\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>formatRules()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">\u003Ca href=\"#format-choice\">\u003Ccode>FrenchFormatRule\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>mandatoryOutput()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">\u003Ca href=\"#mandatory-pdf-output\">mandatory PDF output\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>complete()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">\u003Ca href=\"#from-the-cgi-to-the-cibs\">CIBS texts\u003C\u002Fa> and \u003Ca href=\"#mentions-added-by-the-pack\">mentions\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>numberingRules()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">pattern \u003Ccode>F-{Y}-{seq:5}\u003C\u002Fcode>, reset \u003Ccode>yearly\u003C\u002Fcode>, resets \u003Ccode>never\u003C\u002Fcode> and \u003Ccode>yearly\u003C\u002Fcode>, gapless\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>retention()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">ten years from the end of the calendar year\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>dunningLaw()\u003C\u002Fcode>, \u003Ccode>referenceRates()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">\u003Ca href=\"#late-payment\">late payment values and ECB rates\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>correctionPolicy()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">\u003Ca href=\"#credit-notes-corrections-and-self-billing\">credit note, cancel and reissue, French titles\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>paymentQr()\u003C\u002Fcode>, \u003Ccode>addressFormatter()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">defaults: EPC GiroCode (\u003Ca href=\"\u002Fdocs\u002Ftemplates#payment-qr-codes\">Payment QR codes\u003C\u002Fa>), international address format\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>translationPath()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"France\">\u003Ccode>resources\u002Flang\u003C\u002Fcode> of the package\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cul>\n\u003Cli>\u003Cstrong>Numbering.\u003C\u002Fstrong> A unique number of a continuous chronological series (art. 242 nonies A annex II CGI). Unless the issuer or the configuration sets a pattern, the Managed layer numbers French invoices \u003Ccode>F-2026-00001\u003C\u002Fcode>, \u003Ccode>F-2026-00002\u003C\u002Fcode> … and resets the sequence every year; a monthly reset is rejected (\u003Ca href=\"\u002Fdocs\u002Fmanaged#numbering\">Managed: numbering\u003C\u002Fa>, \u003Ca href=\"\u002Fdocs\u002Fcountry-packs#numberingrules\">\u003Ccode>NumberingRules\u003C\u002Fcode>\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Retention.\u003C\u002Fstrong> Ten years (art. L123-22 Code de commerce). \u003Ccode>retention()\u003C\u002Fcode> returns \u003Ccode>new RetentionRule(10, fromEndOfCalendarYear: true)\u003C\u002Fcode>: an invoice issued on 5 October 2026 is kept until 31 December 2036. The Managed layer stores this date (\u003Ca href=\"\u002Fdocs\u002Fmanaged#retention-and-deletion\">Managed: retention and deletion\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Locale.\u003C\u002Fstrong> French is the last fallback of the render and validation locale, after the run option, the invoice locale and \u003Ccode>quittio.defaults.locale\u003C\u002Fcode> (\u003Ca href=\"\u002Fdocs\u002Ftemplates#translations-and-locales\">Translations and locales\u003C\u002Fa>). The core labels exist in French.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"credit-notes-corrections-and-self-billing\">Credit notes, corrections and self-billing\u003Ca class=\"q-doc-anchor\" href=\"#credit-notes-corrections-and-self-billing\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>\u003Ccode>CountryFR::correctionPolicy()\u003C\u002Fcode> sets how invoices of a French seller are cancelled and corrected (\u003Ca href=\"\u002Fdocs\u002Fbuilding-invoices#cancellations-and-corrections\">Building invoices: cancellations and corrections\u003C\u002Fa>):\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Cancellation strategy \u003Ccode>credit_note\u003C\u002Fcode>:\u003C\u002Fstrong> a cancellation is a credit note (avoir, type code 381) with positive amounts.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Correction strategy \u003Ccode>cancel_and_reissue\u003C\u002Fcode>:\u003C\u002Fstrong> the Managed layer corrects an invoice by cancelling it and issuing a new one.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Change them with \u003Ccode>quittio.corrections.cancellation_strategy\u003C\u002Fcode> and \u003Ccode>quittio-managed.correction.strategy\u003C\u002Fcode>. The policy sets these document titles:\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Kind\u003C\u002Fth>\n\u003Cth>French\u003C\u002Fth>\n\u003Cth>English\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>cancellation\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"French\">Avoir\u003C\u002Ftd>\n\u003Ctd data-label=\"English\">Credit note\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>correction\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"French\">Facture rectificative\u003C\u002Ftd>\n\u003Ctd data-label=\"English\">Corrected invoice\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>self_billed\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"French\">Autofacturation\u003C\u002Ftd>\n\u003Ctd data-label=\"English\">Self-billed invoice\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Other locales use the English titles. A cancellation of a self-billed invoice is titled &quot;Avoir&quot; as well; the pack defines no title for \u003Ccode>price_reduction\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>A self-billed invoice (autofacturation: the buyer issues the invoice in the seller's name) needs the mention &quot;Autofacturation&quot; in a note (\u003Ccode>FR-CGI-07\u003C\u002Fcode>). The title alone does not satisfy the rule. Add the note with the text of the pack:\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Builder\\InvoiceBuilder\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Enums\\InvoiceTypeCode\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Country\\FR\\Texts\\LegalTexts\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$builder \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> InvoiceBuilder\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">make\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">type\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">InvoiceTypeCode\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">SelfBilledInvoice\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">note\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">LegalTexts\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">text\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">LegalTexts\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">SELF_BILLING\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'fr'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">));   \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F \"Autofacturation\"\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Ch2 id=\"mandatory-pdf-output\">Mandatory PDF output\u003Ca class=\"q-doc-anchor\" href=\"#mandatory-pdf-output\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>After rendering, the mandatory field guard checks that the PDF shows certain values (\u003Ca href=\"\u002Fdocs\u002Ftemplates#mandatory-field-guard\">Templates: mandatory field guard\u003C\u002Fa>). \u003Ccode>CountryFR::mandatoryOutput()\u003C\u002Fcode> adds these French values to the base fields (\u003Ca href=\"\u002Fdocs\u002Fcountry-packs#mandatory-output\">Mandatory output\u003C\u002Fa>):\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Condition\u003C\u002Fth>\n\u003Cth>Access key\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003Cth>Legal basis\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>the seller has a legal registration identifier\u003C\u002Ftd>\n\u003Ctd data-label=\"Access key\">\u003Ccode>seller.legalRegistration|issuer.legalRegistration\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Description\">SIREN of the seller\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis\">art. R123-237 Code de commerce\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>the seller has a VAT number\u003C\u002Ftd>\n\u003Ctd data-label=\"Access key\">\u003Ccode>seller.vatId|taxRepresentative.vatId\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Description\">VAT number of the seller\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis\">art. 242 nonies A annexe II CGI\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>the buyer is no consumer and the invoice has a due date\u003C\u002Ftd>\n\u003Ctd data-label=\"Access key\">\u003Ccode>dueDate|paymentTerms.lines[*]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Description\">due date\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis\">art. L441-9 Code de commerce\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>each VAT row of category \u003Ccode>AE\u003C\u002Fcode>, \u003Ccode>K\u003C\u002Fcode>, \u003Ccode>G\u003C\u002Fcode> or \u003Ccode>E\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Access key\">\u003Ccode>vatRows[i].label\u003C\u002Fcode> or the legal note with its BT-120 text\u003C\u002Ftd>\n\u003Ctd data-label=\"Description\">reverse charge or exemption mention\u003C\u002Ftd>\n\u003Ctd data-label=\"Legal basis\">art. 242 nonies A annexe II CGI\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2 id=\"translations\">Translations\u003Ca class=\"q-doc-anchor\" href=\"#translations\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>The pack ships French and English texts in \u003Ccode>resources\u002Flang\u002F{fr,en}\u002F\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>rules.php\u003C\u002Fcode>: message and hint of every rule (\u003Ccode>FR-CGI-01\u003C\u002Fcode> to \u003Ccode>FR-CGI-09\u003C\u002Fcode>, \u003Ccode>FR-COM-01\u003C\u002Fcode>, \u003Ccode>FR-COM-02\u003C\u002Fcode>);\u003C\u002Fli>\n\u003Cli>\u003Ccode>tax.php\u003C\u002Fcode>: the exemption reason texts of the presets, \u003Ccode>fr.exempt\u003C\u002Fcode> for \u003Ccode>VatPreset::exempt()\u003C\u002Fcode> (placeholder \u003Ccode>:paragraph\u003C\u002Fcode>) and the CIBS texts (\u003Ccode>fr.small_business_cibs\u003C\u002Fcode>, \u003Ccode>fr.intra_community_supply_cibs\u003C\u002Fcode>, \u003Ccode>fr.export_cibs\u003C\u002Fcode>);\u003C\u002Fli>\n\u003Cli>\u003Ccode>legal.php\u003C\u002Fcode>: the late payment mention (\u003Ccode>late_payment\u003C\u002Fcode>), the mention of VAT on debits (\u003Ccode>vat_on_debits\u003C\u002Fcode>) and &quot;Autofacturation&quot; (\u003Ccode>self_billing\u003C\u002Fcode>), read through \u003Ccode>Quittio\\Country\\FR\\Texts\\LegalTexts::text($key, $locale)\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>They are registered as the namespace \u003Ccode>quittio-fr\u003C\u002Fcode> (e.g. \u003Ccode>quittio-fr::rules.FR-CGI-08.message\u003C\u002Fcode>). \u003Ccode>CountryFR::registerTranslations()\u003C\u002Fcode> registers them lazily, so presets work without a \u003Ccode>Quittio\u003C\u002Fcode> instance. \u003Ccode>CountryFR::locales()\u003C\u002Fcode> lists the locales the pack ships (\u003Ccode>en\u003C\u002Fcode>, \u003Ccode>fr\u003C\u002Fcode>). Fallbacks:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>rule messages and preset texts: English for other locales;\u003C\u002Fli>\n\u003Cli>legal texts (\u003Ccode>LegalTexts::text()\u003C\u002Fcode>): French for other languages;\u003C\u002Fli>\n\u003Cli>correction titles (defined in PHP): English for other locales.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>To change a text, override the key in your own file:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Laravel:\u003C\u002Fstrong> \u003Ccode>lang\u002Fvendor\u002Fquittio-fr\u002F{locale}\u002Frules.php\u003C\u002Fcode>, \u003Ccode>tax.php\u003C\u002Fcode> or \u003Ccode>legal.php\u003C\u002Fcode>, also for additional locales.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Without Laravel:\u003C\u002Fstrong> register a directory with \u003Ccode>{locale}\u002F{group}.php\u003C\u002Fcode> files after the pack's own. Keys you leave out keep the texts of the pack.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\I18n\\Translations\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Country\\FR\\CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#79C0FF\">CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">registerTranslations\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#79C0FF\">Translations\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">translator\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">()\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">addPath\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">__DIR__\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">.\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'\u002Flang'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">TRANSLATION_NAMESPACE\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">);   \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F e.g. lang\u002Ffr\u002Flegal.php\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>The CIBS replacement compares with the preset texts of the translations in use, so a changed CGI text is still replaced by its CIBS text from 2027. Rule messages follow the validation locale (\u003Ca href=\"\u002Fdocs\u002Fvalidation#messages-and-translations\">Messages and translations\u003C\u002Fa>).\u003C\u002Fp>\n\u003Ch2 id=\"known-limitations\">Known limitations\u003Ca class=\"q-doc-anchor\" href=\"#known-limitations\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>The legal wording, rules and defaults follow the law and the official sources of October 2026 and have not been reviewed by a French tax adviser. Later changes of the law need a new release.\u003C\u002Fli>\n\u003Cli>Connection to approved platforms, lifecycle statuses and e-reporting (planned as quittio\u002Ffr-platforms).\u003C\u002Fli>\n\u003Cli>The French business rules BR-FR-… (norm AFNOR XP Z12-012, external specifications of the DGFiP) and the FEC export (art. A47 A-1 LPF).\u003C\u002Fli>\n\u003Cli>Overseas rates: 8.5 %, 2.1 %, 1.75 % and 1.05 % in Guadeloupe, Martinique and La Réunion (art. 296 and 296 bis CGI); no VAT in Guyane and Mayotte (art. 294 CGI).\u003C\u002Fli>\n\u003Cli>ECB rates from 2027: \u003Ccode>EcbRateTable\u003C\u002Fcode> ends with the second half of 2026; add later half-years with \u003Ccode>withRate()\u003C\u002Fcode>. The consumer rate of 2.75 % is the one of the second half of 2026 and is not dated.\u003C\u002Fli>\n\u003Cli>The pack does not check whether an invoice must be an e-invoice, the delivery address of the reform, or the content of the late payment mention beyond the word &quot;pénalités&quot; (\u003Ccode>FR-COM-02\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>\u003Ccode>FR-CGI-01\u003C\u002Fcode> and \u003Ccode>FR-CGI-08\u003C\u002Fcode> check the number, not its scheme (\u003Ccode>0002\u003C\u002Fcode>, \u003Ccode>0009\u003C\u002Fcode>), and do not look the number up in the business register.\u003C\u002Fli>\n\u003Cli>The pack defines no buyer country rules, profiles, legal text catalog, exporters or readers.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"complete-example\">Complete example\u003Ca class=\"q-doc-anchor\" href=\"#complete-example\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>A web agency in Lyon invoices a shop in Paris for services in October 2026. Quittio chooses Factur-X (EN 16931), adds the late payment mention and validates the invoice with the French rules:\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Builder\\InvoiceBuilder\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Enums\\PaymentMeansCode\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Enums\\UnitCode\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Country\\FR\\CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Country\\FR\\Tax\\VatPreset\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$quittio \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">create\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">([\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'country'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'FR'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">], [\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">new\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> CountryFR\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">]);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$invoice \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> InvoiceBuilder\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">make\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">number\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'F-2026-00042'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">issueDate\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'2026-10-05'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">deliveryDate\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'2026-09-30'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">currency\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'EUR'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">locale\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'fr'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">businessProcess\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'S1'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)                                   \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F services (BT-23)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">seller\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">fn\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> ($s) => $s\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">name\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Atelier Numérique SAS'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">vatId\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'FR19812345676'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">legalRegistration\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'812345676'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'0002'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)              \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F SIREN of the seller (BT-30)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">address\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'12 rue de la République'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'69002'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Lyon'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'FR'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">contact\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Claire Martin'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'+33 4 72 00 00 00'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'factures@atelier-numerique.example'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">buyer\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">fn\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> ($b) => $b\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">name\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Boutique Exemple SARL'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">vatId\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'FR15901234567'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">legalRegistration\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'901234567'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'0002'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)              \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F SIREN of the buyer (BT-47)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">address\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'5 avenue de l\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">\\'\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">Opéra'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'75001'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Paris'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'FR'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">paymentTerms\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">fn\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> ($t) => $t\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">dueInDays\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">30\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">payment\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">PaymentMeansCode\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">SepaCreditTransfer\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">iban\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'FR1420041010050500013M02606'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">line\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Développement web'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">netPrice\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'90.00'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">quantity\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">10\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">unit\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">UnitCode\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Hour\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">vat\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">VatPreset\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Standard\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">line\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Formation des utilisateurs'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">netPrice\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'450.00'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">unit\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">UnitCode\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Day\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">vat\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">VatPreset\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Standard\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">build\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$result \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> $quittio\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">make\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">($invoice)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">render\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$result\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">format\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">();                  \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F \"zugferd\": Factur-X with the profile EN 16931\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$result\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">validation\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">()\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">errors\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">();    \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F []\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$result\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">data\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">()\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">notes;             \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F the late payment mention, added by the pack\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$result\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">save\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'F-2026-00042.pdf'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">);  \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F net 1,350.00 EUR, VAT 270.00 EUR, total 1,620.00 EUR\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>\u003Ccode>$quittio-&gt;make($invoice)-&gt;check()\u003C\u002Fcode> returns the same validation result without rendering the PDF (\u003Ca href=\"\u002Fdocs\u002Fvalidation#checking-without-rendering\">Checking without rendering\u003C\u002Fa>).\u003C\u002Fp>\n",[111,115,118,121,124,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173],{"id":112,"text":113,"level":114},"installation","Installation",2,{"id":116,"text":117,"level":114},"when-it-applies","When it applies",{"id":119,"text":120,"level":114},"common-tasks","Common tasks",{"id":122,"text":123,"level":114},"e-invoicing-reform","E-invoicing reform",{"id":125,"text":126,"level":127},"the-four-new-mentions","The four new mentions",3,{"id":129,"text":130,"level":114},"from-the-cgi-to-the-cibs","From the CGI to the CIBS",{"id":132,"text":133,"level":114},"tax-presets","Tax presets",{"id":135,"text":136,"level":127},"small-businesses-franchise-en-base","Small businesses (franchise en base)",{"id":138,"text":139,"level":127},"reverse-charge-intra-community-supplies-and-exports","Reverse charge, intra-community supplies and exports",{"id":141,"text":142,"level":114},"rules","Rules",{"id":144,"text":145,"level":114},"siren-and-siret","SIREN and SIRET",{"id":147,"text":148,"level":114},"format-choice","Format choice",{"id":150,"text":151,"level":114},"mentions-added-by-the-pack","Mentions added by the pack",{"id":153,"text":154,"level":114},"late-payment","Late payment",{"id":156,"text":157,"level":114},"meta-flags-and-settings","Meta flags and settings",{"id":159,"text":160,"level":114},"defaults","Defaults",{"id":162,"text":163,"level":127},"credit-notes-corrections-and-self-billing","Credit notes, corrections and self-billing",{"id":165,"text":166,"level":114},"mandatory-pdf-output","Mandatory PDF output",{"id":168,"text":169,"level":114},"translations","Translations",{"id":171,"text":172,"level":114},"known-limitations","Known limitations",{"id":174,"text":175,"level":114},"complete-example","Complete example","https:\u002F\u002Fgithub.com\u002FQuittio\u002Fquittio\u002Fedit\u002Fmaster\u002Fdocs\u002Fcountry-fr.md","\u002Fdocs\u002Fcountry-fr.md",{"slug":82,"title":83},{"slug":88,"title":89}]