[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs:configuration":3},{"versions":4,"version":26,"nav":28,"path":64,"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":65,"description":108,"html":109,"headings":110,"editUrl":178,"markdownUrl":179,"prev":180,"next":181},"This page describes config\u002Fquittio.php, the configuration file of the Laravel integration.","\u003Ch1 id=\"configuration\">Configuration\u003C\u002Fh1>\n\u003Cp>This page describes \u003Ccode>config\u002Fquittio.php\u003C\u002Fcode>, the configuration file of the Laravel integration. When you install Quittio, read \u003Ca href=\"#the-keys-you-set-first\">The keys you set first\u003C\u002Fa>: your company, your bank account and the defaults most applications change. The rest of the page is the reference of every key, in the order of the file.\u003C\u002Fp>\n\u003Cp>The terms used here (format, profile, BT numbers, rule codes) are explained in \u003Ca href=\"\u002Fdocs\u002Fconcepts\">E-invoicing basics\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"the-keys-you-set-first\">The keys you set first\u003Ca class=\"q-doc-anchor\" href=\"#the-keys-you-set-first\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Publish the file once:\u003C\u002Fp>\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\">php\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> artisan\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> quittio:install\u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">                              # config\u002Fquittio.php and the files of the country packs, with hints for the next steps\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FFA657\">php\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> artisan\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> vendor:publish\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --tag=quittio-config\u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">           # only config\u002Fquittio.php, without the hints\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>The options of the installer are described in \u003Ca href=\"\u002Fdocs\u002Fcommands#quittioinstall\">Artisan commands\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"your-company\">Your company\u003Ca class=\"q-doc-anchor\" href=\"#your-company\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Every invoice names the company that issues it: the \u003Cstrong>seller\u003C\u002Fstrong>. \u003Ccode>Quittio::invoice()\u003C\u002Fcode> takes the seller from the \u003Ccode>seller\u003C\u002Fcode> section, so you set it once:\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:#8B949E\">\u002F\u002F config\u002Fquittio.php\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#A5D6FF\">'seller'\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\">    'name'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\"> env\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'QUITTIO_SELLER_NAME'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">),                  \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F legal name of the company\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#A5D6FF\">    'vat_id'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\"> env\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'QUITTIO_SELLER_VAT_ID'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">),              \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F VAT identification number, e.g. DE123456789\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#A5D6FF\">    'tax_number'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\"> env\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'QUITTIO_SELLER_TAX_NUMBER'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">),      \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F tax number from the tax office, e.g. 21\u002F815\u002F08150\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#A5D6FF\">    'legal_registration'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'HRB 12345'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,                   \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F commercial register number\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#A5D6FF\">    'address'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#A5D6FF\">        'line1'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'Hauptstraße 1'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,                        \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F street and number\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#A5D6FF\">        'line2'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> null\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#A5D6FF\">        'postcode'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> '12345'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#A5D6FF\">        'city'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'Musterstadt'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#A5D6FF\">        'country'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'DE'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#E6EDF3\">    ],\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#A5D6FF\">    'contact'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'name'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'Max Muster'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'phone'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> '+49 30 1234567'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'email'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'billing@muster.de'\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\">    'electronic_address'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'value'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'billing@muster.de'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'scheme'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'EM'\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\">    'bank_accounts'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#E6EDF3\">        [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'iban'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'DE89370400440532013000'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'bic'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'COBADEFFXXX'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'name'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'Muster GmbH'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">],\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#E6EDF3\">    ],\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#A5D6FF\">    'small_business'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">bool\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">) \u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">env\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'QUITTIO_SELLER_SMALL_BUSINESS'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">false\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 identifiers and additional_legal_info: see the reference below\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>Name, VAT identification number, tax number and the small business setting can also come from the environment:\u003C\u002Fp>\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:#8B949E\"># .env\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">QUITTIO_SELLER_NAME\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"Muster GmbH\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">QUITTIO_SELLER_VAT_ID\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">DE123456789\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">QUITTIO_SELLER_TAX_NUMBER\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">21\u002F815\u002F08150\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">QUITTIO_SELLER_SMALL_BUSINESS\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">false\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>The rules of the formats require some of these values:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Every invoice needs the name. German invoices also need street, postcode and city.\u003C\u002Fli>\n\u003Cli>German invoices need the VAT identification number or the tax number.\u003C\u002Fli>\n\u003Cli>Without a VAT identification number, EN 16931 (the European standard for e-invoices) needs another identifier of the seller: \u003Ccode>identifiers\u003C\u002Fcode> (BT-29) or \u003Ccode>legal_registration\u003C\u002Fcode> (BT-30). Otherwise rendering fails with the rule BR-CO-26. This concerns, for example, a small business with a tax number only.\u003C\u002Fli>\n\u003Cli>XRechnung (the format for German public authorities) also needs the contact with name, phone and e-mail, and the electronic address. Peppol (an international network for delivering e-invoices) needs the electronic address as well.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>BT numbers are explained in \u003Ca href=\"\u002Fdocs\u002Fconcepts#en-16931-and-business-terms\">EN 16931 and business terms\u003C\u002Fa>, rule codes such as BR-CO-26 in \u003Ca href=\"\u002Fdocs\u002Fconcepts#rules-and-validation\">Rules and validation\u003C\u002Fa>. Every key of the section is listed in \u003Ca href=\"#seller\">Seller\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"your-bank-account\">Your bank account\u003Ca class=\"q-doc-anchor\" href=\"#your-bank-account\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>\u003Ccode>Quittio::invoice()\u003C\u002Fcode> puts the first entry of \u003Ccode>seller.bank_accounts\u003C\u002Fcode> that has an IBAN on every invoice, as payment by SEPA credit transfer. The PDF shows the IBAN and a payment QR code that banking apps can read (GiroCode in Germany). \u003Ccode>bic\u003C\u002Fcode> and \u003Ccode>name\u003C\u002Fcode> are optional. Further entries are ignored.\u003C\u002Fp>\n\u003Ch3 id=\"small-businesses\">Small businesses\u003Ca class=\"q-doc-anchor\" href=\"#small-businesses\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Set \u003Ccode>seller.small_business\u003C\u002Fcode> to \u003Ccode>true\u003C\u002Fcode> if you are a small business that charges no VAT (Kleinunternehmer, section 19 of the German VAT Act UStG). Invoices then carry no VAT. Lines without \u003Ccode>-&gt;vat()\u003C\u002Fcode> get the small business exemption with its legal note, and VAT on a line is rejected. See \u003Ca href=\"\u002Fdocs\u002Fcountry-packs#small-businesses\">Small businesses\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"defaults-you-may-change\">Defaults you may change\u003Ca class=\"q-doc-anchor\" href=\"#defaults-you-may-change\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>The \u003Ccode>defaults\u003C\u002Fcode> section sets what an invoice uses when it does not set a value itself. These are the ones applications change most often:\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Key\u003C\u002Fth>\n\u003Cth>Default\u003C\u002Fth>\n\u003Cth>Change it when\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>defaults.due_days\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>14\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Change it when\">Your invoices are due after another number of days. \u003Ccode>null\u003C\u002Fcode> = no due date unless the invoice sets one.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>defaults.vat\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode> (19 % for a German seller)\u003C\u002Ftd>\n\u003Ctd data-label=\"Change it when\">Most of your lines have another VAT rate, e.g. \u003Ccode>'de.reduced'\u003C\u002Fcode> (7 %) for a bookshop\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>defaults.format\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode> (automatic choice)\u003C\u002Ftd>\n\u003Ctd data-label=\"Change it when\">All your invoices need the same format, e.g. \u003Ccode>'xrechnung-cii'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>defaults.locale\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode> (German for a German seller)\u003C\u002Ftd>\n\u003Ctd data-label=\"Change it when\">Your invoices should be in another language, e.g. \u003Ccode>'en'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>All keys of the section are described in \u003Ca href=\"#defaults\">Defaults\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"design\">Design\u003Ca class=\"q-doc-anchor\" href=\"#design\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>The \u003Ccode>pdf\u003C\u002Fcode> section sets the look of the PDF: logo, colours, font and texts. For example \u003Ccode>'logo' =&gt; resource_path('images\u002Flogo.png')\u003C\u002Fcode> and \u003Ccode>'colors' =&gt; ['primary' =&gt; '#0f766e', …]\u003C\u002Fcode>. See \u003Ca href=\"#pdf-and-design\">PDF and design\u003C\u002Fa> and \u003Ca href=\"\u002Fdocs\u002Ftemplates\">Templates and design\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Check the design with the sample invoices. They use sample data, not your seller:\u003C\u002Fp>\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\">php\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> artisan\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> quittio:preview\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --scenario=simple\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>Then render a first invoice with your own data (\u003Ca href=\"\u002Fdocs\u002Fgetting-started#building-an-invoice\">Getting started\u003C\u002Fa>).\u003C\u002Fp>\n\u003Ch2 id=\"how-the-configuration-is-read\">How the configuration is read\u003Ca class=\"q-doc-anchor\" href=\"#how-the-configuration-is-read\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Without a published file, the package defaults apply. Laravel merges the package file with yours by top-level key. A section you leave out (for example \u003Ccode>preview\u003C\u002Fcode>) keeps the package defaults.\u003C\u002Fp>\n\u003Cp>Inside a section you keep, a missing key gets the value Quittio uses when nothing is set. For most keys that is the default listed on this page. These keys differ:\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Key left out\u003C\u002Fth>\n\u003Cth>Value\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>defaults.country\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Value\">none: the seller's country decides; without it the only installed country pack, else the generic EN 16931 rules\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>defaults.due_days\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Value\">none: no due date unless the invoice sets one\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.cache_path\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Value\">\u003Ccode>sys_get_temp_dir().'\u002Fquittio-mpdf'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>storage.disk\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Value\">the default disk of \u003Ccode>config\u002Ffilesystems.php\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>queue.queue\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Value\">the default queue of the connection\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>The manager (a singleton) builds the core from the configuration when it is used for the first time and keeps it as long as the \u003Ccode>quittio\u003C\u002Fcode> configuration stays the same. A value changed at runtime (in tests, or per tenant) makes the next call build the core again, without further steps:\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:#D2A8FF\">config\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">()\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">set\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'quittio.pdf.colors.primary'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'#0f766e'\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\">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>\u003Cspan style=\"color:#8B949E\">\u002F\u002F uses the new colour\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>Under Octane the manager reads the configuration of the current request, not that of the worker's first request. \u003Ccode>Quittio::flush()\u003C\u002Fcode> still forgets the built core, e.g. after a bound class changed.\u003C\u002Fp>\n\u003Cp>Some values are process-wide rather than per application: the translator bridge, the default VAT for lines without VAT, the snapshot upcasters and the registered base rates of the German pack. \u003Ccode>Quittio\\Core\\Quittio::resetState()\u003C\u002Fcode> forgets them; the service providers set them again when the application boots. The test trait \u003Ccode>InteractsWithQuittio\u003C\u002Fcode> calls it after each test (\u003Ca href=\"\u002Fdocs\u002Ftesting#assertions\">Testing\u003C\u002Fa>).\u003C\u002Fp>\n\u003Cp>Some keys are read at other times:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>seller\u003C\u002Fcode>, \u003Ccode>defaults.vat\u003C\u002Fcode>, \u003Ccode>storage.disk\u003C\u002Fcode> and \u003Ccode>queue\u003C\u002Fcode> are read on every call.\u003C\u002Fli>\n\u003Cli>\u003Ccode>preview\u003C\u002Fcode> and \u003Ccode>snapshots.upcasters\u003C\u002Fcode> are read when the application boots.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>A value of the wrong type fails with a \u003Ccode>ConfigurationException\u003C\u002Fcode> that names the key, e.g. \u003Ccode>quittio.pdf.pdfa must be a boolean.\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>The Managed layer has its own file, \u003Ccode>config\u002Fquittio-managed.php\u003C\u002Fcode>, with the database, issuers, archive, queue, numbering, corrections, delivery, audit log, retention and policies. Its keys are described in the \u003Ca href=\"\u002Fdocs\u002Fmanaged\">Managed layer\u003C\u002Fa>. Issuer profiles of the Managed layer replace the \u003Ccode>seller\u003C\u002Fcode> section below.\u003C\u002Fp>\n\u003Ch2 id=\"environment-variables\">Environment variables\u003Ca class=\"q-doc-anchor\" href=\"#environment-variables\" 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>Variable\u003C\u002Fth>\n\u003Cth>Key\u003C\u002Fth>\n\u003Cth>Default\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>QUITTIO_DEFAULT_COUNTRY\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>defaults.country\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">– (the only installed country pack)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>QUITTIO_SELLER_NAME\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>seller.name\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>QUITTIO_SELLER_VAT_ID\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>seller.vat_id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>QUITTIO_SELLER_TAX_NUMBER\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>seller.tax_number\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>QUITTIO_SELLER_SMALL_BUSINESS\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>seller.small_business\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>false\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>QUITTIO_DEFAULT_VAT\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>defaults.vat\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">– (standard rate of the seller's country)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>QUITTIO_VALIDATION_MODE\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>validation.mode\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>error\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>QUITTIO_VALIDATION_LOCALE\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>validation.locale\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">– (the language of the application)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>QUITTIO_MANDATORY_FIELD_GUARD\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>validation.mandatory_field_guard\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">– (\u003Ccode>exception\u003C\u002Fcode>, in production \u003Ccode>log\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>QUITTIO_KOSIT_URL\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>validation.drivers.kosit.url\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>http:\u002F\u002F127.0.0.1:8081\u003C\u002Fcode> (start the validator with \u003Ccode>-P 8081\u003C\u002Fcode>; its own default port is 8080)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>QUITTIO_CANCELLATION_STRATEGY\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>corrections.cancellation_strategy\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">– (country pack)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>QUITTIO_DECLARED_AMOUNTS\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>calculation.declared_amounts\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>keep\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>QUITTIO_STORAGE_DISK\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>storage.disk\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>local\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>QUITTIO_PREVIEW_ENABLED\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Key\">\u003Ccode>preview.enabled\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">– (local environment only)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>\u003Ccode>QUITTIO_PREVIEW_ENABLED\u003C\u002Fcode> must be \u003Ccode>true\u003C\u002Fcode> or \u003Ccode>false\u003C\u002Fcode>. Other values count as not set.\u003C\u002Fp>\n\u003Cp>Quittio 0.1.0 used shorter names for some variables: \u003Ccode>QUITTIO_COUNTRY\u003C\u002Fcode>, \u003Ccode>QUITTIO_VALIDATION\u003C\u002Fcode>, \u003Ccode>QUITTIO_GUARD\u003C\u002Fcode>, \u003Ccode>QUITTIO_DISK\u003C\u002Fcode> and \u003Ccode>QUITTIO_PREVIEW\u003C\u002Fcode>. They are still read when the new name is not set, until 1.0.\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>Values used when an invoice or a render call does not set them itself.\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>defaults.country\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>env('QUITTIO_DEFAULT_COUNTRY')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Country pack used when the seller has no country code (BT-40), e.g. \u003Ccode>'DE'\u003C\u002Fcode>. Normally the seller's country decides; \u003Ccode>-&gt;country()\u003C\u002Fcode> on a render call wins as well. \u003Ccode>null\u003C\u002Fcode> = the only installed country pack if there is exactly one (\u003Ccode>quittio\u002Fquittio\u003C\u002Fcode> installs Germany). Without an installed pack for the code, only the generic EN 16931 rules apply.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>defaults.profile\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Profile of the e-invoice XML, i.e. how much of EN 16931 it contains (\u003Ca href=\"\u002Fdocs\u002Fconcepts#profiles\">Profiles\u003C\u002Fa>), e.g. \u003Ccode>'en16931'\u003C\u002Fcode>, \u003Ccode>'extended'\u003C\u002Fcode>, \u003Ccode>'xrechnung'\u003C\u002Fcode>. It applies to every format that allows it, also to \u003Ccode>-&gt;format('zugferd')\u003C\u002Fcode> and to formats chosen by a country rule. Formats that do not allow it ignore it (e.g. \u003Ccode>basic\u003C\u002Fcode> for XRechnung or Peppol). \u003Ccode>null\u003C\u002Fcode> = the profile of the automatic choice or the format's default (\u003Ccode>zugferd\u003C\u002Fcode>, \u003Ccode>cii\u003C\u002Fcode>, \u003Ccode>ubl\u003C\u002Fcode>: \u003Ccode>en16931\u003C\u002Fcode>; \u003Ccode>xrechnung-cii\u003C\u002Fcode>, \u003Ccode>xrechnung-ubl\u003C\u002Fcode>: \u003Ccode>xrechnung\u003C\u002Fcode>; \u003Ccode>peppol\u003C\u002Fcode>: \u003Ccode>peppol\u003C\u002Fcode>). \u003Ccode>-&gt;profile()\u003C\u002Fcode> on a render call always wins. See \u003Ca href=\"\u002Fdocs\u002Fformats\">Formats and profiles\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>defaults.format\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Format of a render call without \u003Ccode>-&gt;format()\u003C\u002Fcode>. \u003Ccode>null\u003C\u002Fcode> or \u003Ccode>'auto'\u003C\u002Fcode> = automatic choice by the format resolver: XRechnung for public buyers with a Leitweg-ID (the routing ID of a German public buyer, see \u003Ca href=\"\u002Fdocs\u002Fconcepts#german-terms\">German terms\u003C\u002Fa>), PDF for consumers, ZUGFeRD for businesses (\u003Ca href=\"\u002Fdocs\u002Fformats#automatic-choice\">Automatic choice\u003C\u002Fa>). Keys: \u003Ccode>zugferd\u003C\u002Fcode> (PDF with embedded XML; aliases \u003Ccode>factur-x\u003C\u002Fcode>, \u003Ccode>facturx\u003C\u002Fcode>), \u003Ccode>xrechnung-cii\u003C\u002Fcode> (alias \u003Ccode>xrechnung\u003C\u002Fcode>), \u003Ccode>xrechnung-ubl\u003C\u002Fcode>, \u003Ccode>cii\u003C\u002Fcode>, \u003Ccode>ubl\u003C\u002Fcode>, \u003Ccode>peppol\u003C\u002Fcode>, \u003Ccode>pdf\u003C\u002Fcode>, \u003Ccode>html\u003C\u002Fcode>, \u003Ccode>json\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>defaults.locale\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Language of the invoice (labels, generated texts, number and date formats), e.g. \u003Ccode>'de'\u003C\u002Fcode> or \u003Ccode>'en'\u003C\u002Fcode>, when neither \u003Ccode>-&gt;locale()\u003C\u002Fcode> on the render call nor the invoice (\u003Ccode>InvoiceBuilder::locale()\u003C\u002Fcode>) sets one. \u003Ccode>null\u003C\u002Fcode> = the default of the seller's country pack (Germany: \u003Ccode>de\u003C\u002Fcode>).\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>defaults.due_days\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">int|numeric string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>14\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Due date (BT-9) = issue date + this number of days. It applies to invoices that set neither a due date nor payment terms (\u003Ccode>-&gt;dueInDays()\u003C\u002Fcode>), never to credit notes. \u003Ccode>null\u003C\u002Fcode> or \u003Ccode>''\u003C\u002Fcode> switches it off. Other values fail with a \u003Ccode>ConfigurationException\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>snapshots.document_upcasters\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">list\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">The same for stored documents: \u003Ccode>DocumentData::fromSnapshot()\u003C\u002Fcode> and queued \u003Ccode>RenderDocument\u003C\u002Fcode> jobs. Documents have their own versions (\u003Ccode>DocumentData::SNAPSHOT_VERSION\u003C\u002Fcode>).\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>defaults.vat\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>env('QUITTIO_DEFAULT_VAT')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Tax preset of invoice lines without \u003Ccode>-&gt;vat()\u003C\u002Fcode>, by key, e.g. \u003Ccode>'de.reduced'\u003C\u002Fcode> for a bookshop. \u003Ccode>null\u003C\u002Fcode> = the standard rate of the seller's country pack (Germany: \u003Ccode>de.standard\u003C\u002Fcode>). Invoices of small businesses (\u003Ccode>seller.small_business\u003C\u002Fcode>) use the small business preset of the pack (\u003Ccode>de.small_business\u003C\u002Fcode>). An unknown key fails with a \u003Ccode>ConfigurationException\u003C\u002Fcode> when a line needs the default. See \u003Ca href=\"\u002Fdocs\u002Fbuilding-invoices#default-vat\">Default VAT\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2 id=\"country-packs\">Country packs\u003Ca class=\"q-doc-anchor\" href=\"#country-packs\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>A country pack brings the tax presets, legal rules and texts of one country (\u003Ca href=\"\u002Fdocs\u002Fconcepts#how-quittio-works\">How Quittio works\u003C\u002Fa>). \u003Ccode>quittio\u002Fquittio\u003C\u002Fcode> includes the pack for Germany.\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:#8B949E\">    \u002F\u002F 'AT' => \\App\\Quittio\\CountryAT::class,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#8B949E\">    \u002F\u002F 'de' => ['base_rates' => ['2027-01-01' => '1.77']],\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>\u003Ccode>countries\u003C\u002Fcode> holds two kinds of entries: pack classes (strings) and the settings of a pack (arrays under the lower-case country code, see \u003Ca href=\"#settings-of-a-pack-quittiocountriescode\">Settings of a pack\u003C\u002Fa>).\u003C\u002Fp>\n\u003Cp>Country packs are found in three ways, and all of them are combined:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\n\u003Cp>\u003Cstrong>Package discovery\u003C\u002Fstrong>: a Composer package (or your root \u003Ccode>composer.json\u003C\u002Fcode>) lists its packs under \u003Ccode>extra.quittio.country-packs\u003C\u002Fcode>. \u003Ccode>quittio\u002Fcountry-de\u003C\u002Fcode> does this, so \u003Ccode>composer require quittio\u002Fcountry-de\u003C\u002Fcode> is enough.\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>json\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\">\"extra\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#7EE787\">    \"quittio\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#7EE787\">        \"country-packs\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"App\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">\\\\\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">\\\\\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">CountryAT\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\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>The result is kept in \u003Ccode>bootstrap\u002Fcache\u002Fquittio-countries.php\u003C\u002Fcode> until Composer rewrites \u003Ccode>vendor\u002Fcomposer\u002Finstalled.json\u003C\u002Fcode> or your \u003Ccode>composer.json\u003C\u002Fcode> changes, so requests do not read the package list. After editing \u003Ccode>extra.quittio.country-packs\u003C\u002Fcode> of the root \u003Ccode>composer.json\u003C\u002Fcode> by hand, the next request picks it up as well.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Configuration\u003C\u002Fstrong>: \u003Ccode>countries\u003C\u002Fcode> lists further pack classes. The array keys are ignored; the pack's \u003Ccode>code()\u003C\u002Fcode> counts. Classes are resolved through the container. Arrays are not pack classes but settings and are skipped here.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>At runtime\u003C\u002Fstrong>: \u003Ccode>Quittio::registerCountry(new CountryAT)\u003C\u002Fcode>, e.g. in a service provider. It wins over the other two for the same country code and survives \u003Ccode>Quittio::flush()\u003C\u002Fcode>.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Every pack must implement \u003Ccode>Quittio\\Core\\Countries\\CountryPack\u003C\u002Fcode>, otherwise building the core fails with a \u003Ccode>ConfigurationException\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>For the same country code the last one wins, in this order: discovered packs, then \u003Ccode>countries\u003C\u002Fcode>, then \u003Ccode>Quittio::registerCountry()\u003C\u002Fcode>. So a subclass of \u003Ccode>CountryDE\u003C\u002Fcode> listed in \u003Ccode>countries\u003C\u002Fcode> replaces the discovered \u003Ccode>CountryDE\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>\u003Ccode>php artisan quittio:countries\u003C\u002Fcode> and \u003Ccode>php artisan about\u003C\u002Fcode> list the active packs. To write your own pack, see \u003Ca href=\"\u002Fdocs\u002Fcountry-packs\">Country packs\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"settings-of-a-pack-quittiocountriescode\">Settings of a pack (\u003Ccode>quittio.countries.{code}\u003C\u002Fcode>)\u003Ca class=\"q-doc-anchor\" href=\"#settings-of-a-pack-quittiocountriescode\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>A pack with settings of its own keeps them under \u003Ccode>quittio.countries.{code}\u003C\u002Fcode>, with the lower-case country code: \u003Ccode>quittio.countries.de\u003C\u002Fcode> for Germany. Its service provider merges the defaults, so \u003Ccode>config('quittio.countries.de.base_rate_file')\u003C\u002Fcode> works without a published file. You set the keys in one of two places:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>The file of the pack\u003C\u002Fstrong>, \u003Ccode>config\u002Fquittio\u002Fcountries\u002F{code}.php\u003C\u002Fcode>. \u003Ccode>php artisan quittio:install\u003C\u002Fcode> publishes it for every installed pack, \u003Ccode>php artisan vendor:publish --tag=quittio-{code}-config\u003C\u002Fcode> (e.g. \u003Ccode>quittio-de-config\u003C\u002Fcode>) publishes it alone. Laravel loads files in subdirectories of \u003Ccode>config\u002F\u003C\u002Fcode> under the dotted path, so \u003Ccode>config\u002Fquittio\u002Fcountries\u002Fde.php\u003C\u002Fcode> becomes \u003Ccode>quittio.countries.de\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>A section in \u003Ccode>config\u002Fquittio.php\u003C\u002Fcode>\u003C\u002Fstrong>: \u003Ccode>'countries' =&gt; ['de' =&gt; ['base_rates' =&gt; […]]]\u003C\u002Fcode>. When the file of the pack exists as well, the file wins as a whole.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Keys you leave out keep the defaults of the pack. A pack class must not be listed under a lower-case code that holds settings (\u003Ccode>'de' =&gt; CountryDE::class\u003C\u002Fcode>): use the upper-case code or no key. A class listed under \u003Ccode>'de'\u003C\u002Fcode> by an older configuration is moved to a numeric key when the German pack registers.\u003C\u002Fp>\n\u003Ch3 id=\"country-pack-germany-quittiocountriesde\">Country pack Germany (\u003Ccode>quittio.countries.de\u003C\u002Fcode>)\u003Ca class=\"q-doc-anchor\" href=\"#country-pack-germany-quittiocountriesde\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>The German pack's settings are the base rate (Basiszinssatz) under section 247 of the German Civil Code (BGB). \u003Ccode>DefaultInterest\u003C\u002Fcode> needs it to calculate the statutory interest on late payments, e.g. for payment reminders (\u003Ca href=\"\u002Fdocs\u002Fdocuments#german-default-interest\">German default interest\u003C\u002Fa>). Publish the file with \u003Ccode>php artisan vendor:publish --tag=quittio-de-config\u003C\u002Fcode> (\u003Ccode>config\u002Fquittio\u002Fcountries\u002Fde.php\u003C\u002Fcode>) or let \u003Ccode>php artisan quittio:install\u003C\u002Fcode> do it.\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.de.base_rates\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">array\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Base rates in addition to the table shipped with Quittio: ISO date (1 January or 1 July) =&gt; percent, e.g. \u003Ccode>['2027-01-01' =&gt; '1.77']\u003C\u002Fcode>. They win over the file below.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>countries.de.base_rate_file\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>storage_path('app\u002Fquittio\u002Fbase-rates.json')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">JSON file written by \u003Ccode>php artisan quittio:base-rate:update\u003C\u002Fcode> with the rates of the Deutsche Bundesbank. \u003Ccode>null\u003C\u002Fcode> = not used.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>countries.de.prior_year_turnover_above_800k\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">bool\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>false\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Your total turnover of the previous year was above 800,000 EUR: other invoices for domestic business supplies of 2027 are no longer allowed (section 27 (38) UStG, \u003Ccode>DE-EINVOICE-01\u003C\u002Fcode>, \u003Ca href=\"\u002Fdocs\u002Fcountry-packs#e-invoice-obligation\">E-invoice obligation\u003C\u002Fa>).\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>countries.de.omit_vat_ids_for_category_o\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\">Invoices of category \u003Ccode>O\u003C\u002Fcode> only (not subject to VAT) leave out the VAT identifiers of seller and buyer when the seller's tax number is given (BR-O-02, \u003Ca href=\"\u002Fdocs\u002Fcountry-packs#vat-identifiers-on-invoices-of-category-o\">Category O\u003C\u002Fa>).\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>countries.de.consumer_default_notice\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\">Invoices for consumers get the notice on default after 30 days (section 286 (3) BGB, \u003Ca href=\"\u002Fdocs\u002Fcountry-packs#default-notice-for-consumers\">Default notice for consumers\u003C\u002Fa>). \u003Ccode>false\u003C\u002Fcode> = add it yourself with \u003Ccode>-&gt;de()-&gt;consumerDefaultNotice()\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>See \u003Ca href=\"\u002Fdocs\u002Fcountry-packs#base-rate-table\">Country packs: base rate table\u003C\u002Fa> and \u003Ca href=\"\u002Fdocs\u002Fcommands#quittiobase-rateupdate\">quittio:base-rate:update\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch4 id=\"the-old-file-configquittio-dephp\">The old file \u003Ccode>config\u002Fquittio-de.php\u003C\u002Fcode>\u003Ca class=\"q-doc-anchor\" href=\"#the-old-file-configquittio-dephp\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh4>\n\u003Cp>Up to 0.3 the German settings were a configuration of their own, \u003Ccode>quittio-de\u003C\u002Fcode> (\u003Ccode>config\u002Fquittio-de.php\u003C\u002Fcode>). It is deprecated and still read until 1.0:\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Situation\u003C\u002Fth>\n\u003Cth>Value used for a key\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>only \u003Ccode>config\u002Fquittio-de.php\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Value used for a key\">the key of \u003Ccode>quittio-de\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>only \u003Ccode>quittio.countries.de\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Value used for a key\">the key of \u003Ccode>quittio.countries.de\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>both set the key\u003C\u002Ftd>\n\u003Ctd data-label=\"Value used for a key\">\u003Ccode>quittio.countries.de\u003C\u002Fcode>, unless it still has the default of the pack: then \u003Ccode>quittio-de\u003C\u002Fcode>. A newly published \u003Ccode>config\u002Fquittio\u002Fcountries\u002Fde.php\u003C\u002Fcode> therefore does not hide the rates of the old file.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>neither\u003C\u002Ftd>\n\u003Ctd data-label=\"Value used for a key\">the default of the pack\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>The values are merged when the German service provider registers, so \u003Ccode>config('quittio.countries.de.…')\u003C\u002Fcode> returns the result; the old key is no longer filled with defaults. As long as \u003Ccode>quittio-de\u003C\u002Fcode> is set, every start of the application reports a deprecation (\u003Ccode>E_USER_DEPRECATED\u003C\u002Fcode>; Laravel writes it to the \u003Ccode>deprecations\u003C\u002Fcode> log channel when one is configured) that names the keys \u003Ccode>quittio.countries.de\u003C\u002Fcode> overrides.\u003C\u002Fp>\n\u003Cp>To migrate, publish the new file, move the values of \u003Ccode>config\u002Fquittio-de.php\u003C\u002Fcode> into it and delete the old file:\u003C\u002Fp>\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\">php\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> artisan\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> vendor:publish\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --tag=quittio-de-config\u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">   # config\u002Fquittio\u002Fcountries\u002Fde.php\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Ch2 id=\"seller\">Seller\u003Ca class=\"q-doc-anchor\" href=\"#seller\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Your company as it appears on every invoice. The section is used by \u003Ccode>Quittio::invoice()\u003C\u002Fcode>, the document methods (\u003Ccode>Quittio::quote()\u003C\u002Fcode> …), \u003Ccode>Seller::fromConfig()\u003C\u002Fcode> and \u003Ccode>Seller::apply()\u003C\u002Fcode> (see \u003Ca href=\"\u002Fdocs\u002Flaravel#seller-from-the-configuration\">Laravel integration\u003C\u002Fa>). With \u003Ccode>quittio\u002Fmanaged\u003C\u002Fcode>, issuer profiles replace it.\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>seller.name\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>env('QUITTIO_SELLER_NAME')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Legal name of the company (BT-27). Required.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.vat_id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>env('QUITTIO_SELLER_VAT_ID')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">VAT identification number with country prefix, e.g. \u003Ccode>'DE123456789'\u003C\u002Fcode> (BT-31)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.tax_number\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>env('QUITTIO_SELLER_TAX_NUMBER')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Tax number from the tax office, e.g. \u003Ccode>'21\u002F815\u002F08150'\u003C\u002Fcode> (BT-32). German invoices need the VAT identification number or the tax number.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.legal_registration\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Commercial register number, e.g. \u003Ccode>'HRB 12345'\u003C\u002Fcode> (legal registration identifier, BT-30)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.identifiers\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">list\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Further identifiers of the company (BT-29): \u003Ccode>['value' =&gt; '…', 'scheme' =&gt; null]\u003C\u002Fcode> (the scheme is optional) or plain strings, e.g. \u003Ccode>[['value' =&gt; '4000001000005', 'scheme' =&gt; '0088']]\u003C\u002Fcode> for a GLN (Global Location Number; \u003Ccode>0088\u003C\u002Fcode> is its code in the ISO 6523 list). Empty values are skipped. Without a VAT identification number, EN 16931 needs an identifier here or \u003Ccode>legal_registration\u003C\u002Fcode>, otherwise rendering fails with BR-CO-26.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.additional_legal_info\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Further legal information printed on the invoice (BT-33), e.g. the court of registration and the managing directors\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.address.line1\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Street and number (BT-35). Required on German invoices.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.address.line2\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Additional address line (BT-36)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.address.postcode\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Postcode (BT-38). Required on German invoices.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.address.city\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">City (BT-37). Required on German invoices.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.address.country\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Country code, ISO 3166-1 alpha-2 (BT-40), e.g. \u003Ccode>'DE'\u003C\u002Fcode>. It also selects the leading country pack. \u003Ccode>null\u003C\u002Fcode> = \u003Ccode>defaults.country\u003C\u002Fcode>, without it the code of the only installed country pack.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.contact.name\u003C\u002Fcode> \u002F \u003Ccode>.phone\u003C\u002Fcode> \u002F \u003Ccode>.email\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Contact person (BG-6), added only when at least one value is set. XRechnung requires name, phone and e-mail.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.electronic_address.value\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Electronic address of the seller (BT-34), added only when set. Required by XRechnung and Peppol.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.electronic_address.scheme\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'EM'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Scheme of the electronic address, a code of the EAS list (electronic address schemes): \u003Ccode>EM\u003C\u002Fcode> = e-mail address, \u003Ccode>9930\u003C\u002Fcode> = German VAT number (as Peppol participant ID). Peppol does not accept \u003Ccode>EM\u003C\u002Fcode> (\u003Ccode>PEPPOL-EN16931-CL008\u003C\u002Fcode>); set a participant ID such as \u003Ccode>9930\u003C\u002Fcode> when you send via Peppol\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.bank_accounts\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">list\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[['iban' =&gt; null, 'bic' =&gt; null, 'name' =&gt; null]]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Bank accounts. \u003Ccode>Quittio::invoice()\u003C\u002Fcode> (\u003Ccode>Seller::apply()\u003C\u002Fcode>) adds a SEPA credit transfer with the first entry whose \u003Ccode>iban\u003C\u002Fcode> is not empty: the PDF shows the IBAN and a payment QR code. \u003Ccode>bic\u003C\u002Fcode> and \u003Ccode>name\u003C\u002Fcode> are optional. The other entries are ignored.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller.small_business\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">bool\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>(bool) env('QUITTIO_SELLER_SMALL_BUSINESS', false)\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ccode>Quittio::invoice()\u003C\u002Fcode> (\u003Ccode>Seller::apply()\u003C\u002Fcode>) marks the invoice as an invoice of a small business (Germany: section 19 UStG, \u003Ccode>Meta::FLAG_SMALL_BUSINESS\u003C\u002Fcode>). Lines without \u003Ccode>-&gt;vat()\u003C\u002Fcode> get the small business preset of the country pack (Germany: \u003Ccode>VatPreset::SmallBusiness\u003C\u002Fcode>) with its legal note. Country packs reject VAT on the invoice; Germany also rejects the intra-community supply exemption, except for new vehicles.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2 id=\"pdf-and-design\">PDF and design\u003Ca class=\"q-doc-anchor\" href=\"#pdf-and-design\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>The look of the PDF and HTML output. The design of a single invoice and \u003Ccode>-&gt;presentation()\u003C\u002Fcode> on a render call override these values property by property.\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>pdf.renderer\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'mpdf'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">PDF engine: \u003Ccode>mpdf\u003C\u002Fcode> (bundled) or a name registered with \u003Ccode>Quittio::extend('renderer', …)\u003C\u002Fcode>. An unknown name fails with a \u003Ccode>ConfigurationException\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.template\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'quittio::templates.default.layout'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Blade view of the invoice layout. It is used for the template name \u003Ccode>default\u003C\u002Fcode>, i.e. for every render without \u003Ccode>-&gt;template()\u003C\u002Fcode> or \u003Ccode>Presentation::$template\u003C\u002Fcode>. Create your own copy of the default template with \u003Ccode>php artisan make:quittio-template\u003C\u002Fcode>, or name your own view.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.templates\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">list\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>['invoices.*']\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Further views that \u003Ccode>-&gt;template()\u003C\u002Fcode>, \u003Ccode>Presentation::$template\u003C\u002Fcode> or issuer branding may select, besides \u003Ccode>pdf.template\u003C\u002Fcode> and the shipped \u003Ccode>quittio::templates.*\u003C\u002Fcode> views. \u003Ccode>prefix*\u003C\u002Fcode> allows every view below a prefix (\u003Ccode>invoices.*\u003C\u002Fcode>, \u003Ccode>mytheme::*\u003C\u002Fcode>). Partials (\u003Ccode>.partials.\u003C\u002Fcode>) are never selectable. Views not listed are refused. A missing key means \u003Ccode>['invoices.*']\u003C\u002Fcode>, \u003Ccode>[]\u003C\u002Fcode> allows no further views. See \u003Ca href=\"\u002Fdocs\u002Flaravel#blade-templates\">Blade templates\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.layout\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Letter layout, i.e. the position of the address field: \u003Ccode>free\u003C\u002Fcode> (no norm), with the German pack also \u003Ccode>din5008a\u003C\u002Fcode> and \u003Ccode>din5008b\u003C\u002Fcode> (DIN 5008, the German standard for business letters). \u003Ccode>null\u003C\u002Fcode> = the default of the country pack (Germany: \u003Ccode>din5008b\u003C\u002Fcode>). An unknown layout fails with a \u003Ccode>ConfigurationException\u003C\u002Fcode>. See \u003Ca href=\"\u002Fdocs\u002Ftemplates#letter-layouts\">Letter layouts\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.paper\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Paper size, e.g. \u003Ccode>A4\u003C\u002Fcode>, \u003Ccode>Letter\u003C\u002Fcode>. \u003Ccode>null\u003C\u002Fcode> = the default of the country pack (Germany: A4). A size set here wins over the country default, also \u003Ccode>A4\u003C\u002Fcode>. The invoice presentation and \u003Ccode>-&gt;presentation()\u003C\u002Fcode> win over it.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.pdfa\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\">Create plain PDFs (format \u003Ccode>pdf\u003C\u002Fcode>, quotes, reminders and other documents) as PDF\u002FA-3b, the PDF standard for archiving. PDFs with embedded XML (ZUGFeRD\u002FFactur-X) are always PDF\u002FA-3b. PDFs with a watermark (drafts, previews) never are.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.font\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'geist'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Default font family (plain family name). Geist (Latin, Cyrillic) and Inter (also Greek) are bundled, see \u003Ca href=\"\u002Fdocs\u002Ftemplates#fonts\">Fonts\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.fonts\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">array\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Additional TrueType fonts for mPDF: lower-case family =&gt; \u003Ccode>['R' =&gt; 'Regular.ttf', 'B' =&gt; 'Bold.ttf', 'I' =&gt; 'Italic.ttf', 'BI' =&gt; 'BoldItalic.ttf']\u003C\u002Fcode>, files relative to \u003Ccode>pdf.font_directories\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.font_directories\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">list\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Directories mPDF searches for the font files of \u003Ccode>pdf.fonts\u003C\u002Fcode>. \u003Ccode>resources\u002Ffonts\u002Fquittio\u003C\u002Fcode> and its subdirectories are added after the configured directories when they exist, so fonts placed there need no entry here. (\u003Ccode>--tag=quittio-fonts\u003C\u002Fcode> publishes Geist, Inter and Liberation Sans there, to \u003Ccode>resources\u002Ffonts\u002Fquittio\u002Fgeist\u003C\u002Fcode>, \u003Ccode>…\u002Finter\u003C\u002Fcode> and \u003Ccode>…\u002Fliberation\u003C\u002Fcode>.) mPDF takes a file from the first directory that has it: these directories come before the bundled fonts and those of mPDF.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.logo\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Logo: absolute path, \u003Ccode>http(s)\u003C\u002Fcode> URL or data URI of a PNG, JPEG or SVG. At most 10 MB and 25 megapixels; URLs only from public hosts. For PDF\u002FA, logos are flattened to an RGB PNG; SVG logos then need the PHP extension \u003Ccode>imagick\u003C\u002Fcode>. Details in \u003Ca href=\"\u002Fdocs\u002Ftemplates#logos\">Templates and design\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.colors.primary\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'#2741d9'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Primary colour (hex): issuer name, title, gross total or amount due\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.colors.text\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'#15171c'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Text colour (hex)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.colors.muted\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'#5f6470'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Colour of secondary text (hex): labels, descriptions, sender line, footer\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.colors.secondary\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Accent colour (hex), e.g. section titles and the mark of highlighted lines (\u003Ccode>design.secondaryColor\u003C\u002Fcode> in templates). \u003Ccode>null\u003C\u002Fcode> = the primary colour.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.sender_line\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Small sender line above the address field. \u003Ccode>null\u003C\u002Fcode> = generated from the seller.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.footer_columns\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">list\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Footer columns, each a list of lines: \u003Ccode>[['Muster GmbH', 'Hauptstraße 1'], ['IBAN DE02 …']]\u003C\u002Fcode>. \u003Ccode>[]\u003C\u002Fcode> = footer generated from the seller data.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.texts.salutation\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Salutation above the intro text. \u003Ccode>null\u003C\u002Fcode> = none.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.texts.intro\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Text above the lines (Markdown, PDF only). \u003Ccode>null\u003C\u002Fcode> = none.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.texts.closing\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Text below the totals (Markdown, PDF only). \u003Ccode>null\u003C\u002Fcode> = none.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.show_item_numbers\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">bool\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>false\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Print the seller's item number (BT-155) next to the item name\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.markdown\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">bool\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>false\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Render line descriptions and notes as Markdown instead of plain text. It is off by default: the same texts are in the e-invoice XML, where formatting characters such as \u003Ccode>*\u003C\u002Fcode> or \u003Ccode>_\u003C\u002Fcode> stay visible and can change the displayed text.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.fold_marks\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\">Print fold and punch marks for window envelopes, at the left edge of the first page\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.payment_qr.type\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'auto'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Payment QR code in the PDF. \u003Ccode>auto\u003C\u002Fcode>: the generator below, otherwise the code of the country pack (Germany: GiroCode, the EPC QR code for banking apps). \u003Ccode>girocode\u003C\u002Fcode>: the EPC QR code. \u003Ccode>swiss-qr-bill\u003C\u002Fcode>: the generator below, otherwise the QR bill of the country pack Switzerland (\u003Ca href=\"\u002Fdocs\u002Fcountry-ch#qr-bill\">\u003Ccode>quittio\u002Fcountry-ch\u003C\u002Fcode>\u003C\u002Fa>); without either, rendering fails with a \u003Ccode>ConfigurationException\u003C\u002Fcode>. \u003Ccode>none\u003C\u002Fcode>: no code. Unknown values fail with a \u003Ccode>ConfigurationException\u003C\u002Fcode>. Refunds and self-billed invoices never get a code.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.payment_qr.generator\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">class-string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Class implementing \u003Ccode>Quittio\\Core\\Pdf\\Qr\\PaymentQrGenerator\u003C\u002Fcode>, resolved from the container. It is used for \u003Ccode>auto\u003C\u002Fcode> and \u003Ccode>swiss-qr-bill\u003C\u002Fcode> before the country pack's generator. Another class fails with a \u003Ccode>ConfigurationException\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.payment_qr.girocode_amount\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'due'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Amount in the GiroCode: \u003Ccode>due\u003C\u002Fcode> (amount due) or \u003Ccode>discounted\u003C\u002Fcode> (amount after the first cash discount; the PDF then notes until when it is valid)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.filename\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'{title}_{number}.{ext}'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">File name pattern of the results. Placeholders: \u003Ccode>{title}\u003C\u002Fcode> (document title in the language of the invoice, e.g. &quot;Rechnung&quot;, German for invoice), \u003Ccode>{number}\u003C\u002Fcode>, \u003Ccode>{date}\u003C\u002Fcode> (issue date, \u003Ccode>Y-m-d\u003C\u002Fcode>), \u003Ccode>{format}\u003C\u002Fcode> (format key; the document type for quotes and other documents), \u003Ccode>{ext}\u003C\u002Fcode> (\u003Ccode>pdf\u003C\u002Fcode>, \u003Ccode>xml\u003C\u002Fcode>, \u003Ccode>html\u003C\u002Fcode>, \u003Ccode>json\u003C\u002Fcode>). Title and number are reduced to letters, digits, \u003Ccode>.\u003C\u002Fcode>, \u003Ccode>_\u003C\u002Fcode> and \u003Ccode>-\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.cache_path\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>storage_path('framework\u002Fcache\u002Fquittio')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Temporary directory of mPDF. Prepared logos are cached in its \u003Ccode>logos\u003C\u002Fcode> subdirectory. \u003Ccode>null\u003C\u002Fcode> = \u003Ccode>sys_get_temp_dir().'\u002Fquittio-mpdf'\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.renderers.mpdf.simple_tables\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">bool\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>false\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">mPDF \u003Ccode>simpleTables\u003C\u002Fcode>: drops the borders of table cells and is not faster. Keep it off.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.renderers.mpdf.pdfa_auto\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">bool\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>false\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">mPDF \u003Ccode>PDFAauto\u003C\u002Fcode>: let mPDF correct PDF\u002FA errors itself instead of failing\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf.renderers.{name}\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">array\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">–\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Options passed to the factory of a renderer registered with \u003Ccode>Quittio::extend('renderer', '{name}', …)\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>The design keys (\u003Ccode>logo\u003C\u002Fcode>, \u003Ccode>colors\u003C\u002Fcode>, \u003Ccode>font\u003C\u002Fcode>, \u003Ccode>sender_line\u003C\u002Fcode>, \u003Ccode>layout\u003C\u002Fcode>, \u003Ccode>texts\u003C\u002Fcode>, \u003Ccode>footer_columns\u003C\u002Fcode>, \u003Ccode>show_item_numbers\u003C\u002Fcode>, \u003Ccode>payment_qr.type\u003C\u002Fcode>, \u003Ccode>paper\u003C\u002Fcode>) are design level 1 of \u003Ca href=\"\u002Fdocs\u002Ftemplates\">Templates and design\u003C\u002Fa>. The invoice presentation and \u003Ccode>-&gt;presentation()\u003C\u002Fcode> override them property by property.\u003C\u002Fp>\n\u003Ch2 id=\"validation\">Validation\u003Ca class=\"q-doc-anchor\" href=\"#validation\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Every invoice is checked before it is created: against EN 16931, the rules of the format (XRechnung, Peppol) and those of the country (Germany: UStG). See \u003Ca href=\"\u002Fdocs\u002Fconcepts#rules-and-validation\">Rules and validation\u003C\u002Fa> for the basics and \u003Ca href=\"\u002Fdocs\u002Fvalidation\">Validation\u003C\u002Fa> for the details.\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>validation.mode\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>env('QUITTIO_VALIDATION_MODE', 'error')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">What happens with errors. \u003Ccode>error\u003C\u002Fcode>: throw a \u003Ccode>ValidationException\u003C\u002Fcode>. \u003Ccode>warn\u003C\u002Fcode>: create the invoice anyway and attach the result (\u003Ccode>$result-&gt;validation()\u003C\u002Fcode>). \u003Ccode>off\u003C\u002Fcode>: no validation while rendering. Per call: \u003Ccode>-&gt;validate()\u003C\u002Fcode>, \u003Ccode>-&gt;validate(false)\u003C\u002Fcode>, \u003Ccode>-&gt;withoutValidation()\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.levels\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">list\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>['php', 'xsd']\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Checks that run while rendering and in \u003Ccode>validateFile()\u003C\u002Fcode>: \u003Ccode>php\u003C\u002Fcode> (rules of EN 16931, format and country; levels L1–L3 and L7), \u003Ccode>xsd\u003C\u002Fcode> (XML schema, L4), \u003Ccode>kosit\u003C\u002Fcode> (the official KoSIT validator for XRechnung and Peppol, needs Java; L5), \u003Ccode>verapdf\u003C\u002Fcode> (PDF\u002FA check, needs veraPDF; L6), or the name of a driver registered with \u003Ccode>Quittio::extend('validator', …)\u003C\u002Fcode>. Without \u003Ccode>php\u003C\u002Fcode>, the PHP rules do not run.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.block_on_warnings\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">bool\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>false\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">In mode \u003Ccode>error\u003C\u002Fcode>, warnings block like errors\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.locale\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>env('QUITTIO_VALIDATION_LOCALE')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Language of the validation messages and hints. \u003Ccode>null\u003C\u002Fcode> = the language of the application (\u003Ccode>app()-&gt;getLocale()\u003C\u002Fcode>), \u003Ccode>'invoice'\u003C\u002Fcode> = the language of the invoice, or a locale such as \u003Ccode>'de'\u003C\u002Fcode>. The invoice itself keeps its language.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.mandatory_field_guard\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>env('QUITTIO_MANDATORY_FIELD_GUARD')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Check that the PDF shows every legally required value (the template could leave one out): \u003Ccode>exception\u003C\u002Fcode>, \u003Ccode>log\u003C\u002Fcode> or \u003Ccode>off\u003C\u002Fcode>. \u003Ccode>null\u003C\u002Fcode> = \u003Ccode>exception\u003C\u002Fcode> outside production, \u003Ccode>log\u003C\u002Fcode> in production. See \u003Ca href=\"\u002Fdocs\u002Fvalidation#mandatory-field-guard\">Mandatory field guard\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.rules.disabled\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">list\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Codes of PHP rules to switch off, e.g. \u003Ccode>['DE-USTG-15']\u003C\u002Fcode>; a trailing \u003Ccode>*\u003C\u002Fcode> matches by prefix. See \u003Ca href=\"\u002Fdocs\u002Fvalidation#switching-rules-off-and-changing-their-severity\">Switching rules off\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.rules.severity\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">array\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Severity of the findings per code or prefix: \u003Ccode>error\u003C\u002Fcode>, \u003Ccode>warning\u003C\u002Fcode> or \u003Ccode>info\u003C\u002Fcode>, e.g. \u003Ccode>['DE-USTG-08' =&gt; 'warning']\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.rules.allow_official\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">bool\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>false\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ccode>true\u003C\u002Fcode> allows changing the official EN 16931 and Peppol rules (\u003Ccode>BR-…\u003C\u002Fcode>, \u003Ccode>PEPPOL-…\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.kosit.mode\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'daemon'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ccode>daemon\u003C\u002Fcode> (a running validator via HTTP, fast) or \u003Ccode>cli\u003C\u002Fcode> (one Java call per file)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.kosit.url\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>env('QUITTIO_KOSIT_URL', 'http:\u002F\u002F127.0.0.1:8081')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Address of the validator daemon. The validator listens on port 8080 unless started with \u003Ccode>-P 8081\u003C\u002Fcode> (or mapped, \u003Ccode>docker run -p 8081:8080\u003C\u002Fcode>). \u003Ccode>quittio:schemas:download\u003C\u002Fcode> prints a start command for the port of this URL.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.kosit.jar\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Validator JAR (mode \u003Ccode>cli\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.kosit.scenarios\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Scenario file of the main configuration (mode \u003Ccode>cli\u003C\u002Fcode>, e.g. XRechnung)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.kosit.repository\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Repository directory of the main configuration (mode \u003Ccode>cli\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.kosit.configurations\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">list\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Further scenario sets \u003Ccode>[['scenarios' =&gt; …, 'repository' =&gt; …]]\u003C\u002Fcode> (mode \u003Ccode>cli\u003C\u002Fcode>), e.g. Peppol BIS. \u003Ccode>quittio:schemas:download\u003C\u002Fcode> prints the values.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.kosit.java\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'java'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Java binary (mode \u003Ccode>cli\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.kosit.timeout\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">int\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>30\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Timeout in seconds\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.kosit.fail_on_unavailable\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>true\u003C\u002Fcode> = an unreachable validator is an error (\u003Ccode>KOSIT-UNAVAILABLE\u003C\u002Fcode>), \u003Ccode>false\u003C\u002Fcode> = a warning\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.verapdf.mode\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'cli'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ccode>cli\u003C\u002Fcode> (local \u003Ccode>verapdf\u003C\u002Fcode> binary) or \u003Ccode>docker\u003C\u002Fcode> (Docker image; the PDF is passed via stdin)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.verapdf.binary\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'verapdf'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">veraPDF binary (mode \u003Ccode>cli\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.verapdf.image\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'verapdf\u002Fcli'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Docker image (mode \u003Ccode>docker\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.verapdf.docker\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'docker'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Docker binary (mode \u003Ccode>docker\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.verapdf.timeout\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">int\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>120\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Timeout in seconds\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.verapdf.fail_on_unavailable\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>true\u003C\u002Fcode> = an unavailable veraPDF is an error, \u003Ccode>false\u003C\u002Fcode> = a warning\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.vies.enabled\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">bool\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>false\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Check VAT identification numbers online with VIES, the VAT number service of the EU (\u003Ccode>QUITTIO-VIES\u003C\u002Fcode>, \u003Ccode>QUITTIO-VIES-UNAVAILABLE\u003C\u002Fcode>). A \u003Ccode>Quittio\\Core\\Validation\\Plausibility\\VatIdVerifier\u003C\u002Fcode> bound in the container replaces the VIES client (e.g. in tests).\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.vies.cache_ttl\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">int\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>86400\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Seconds a VALID or INVALID answer is cached (in memory, per process)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.vies.timeout\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">int\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>5\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Timeout in seconds\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validation.drivers.{name}\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">array\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">–\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Options passed to the factory of a validator registered with \u003Ccode>Quittio::extend('validator', '{name}', …)\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>The KoSIT and veraPDF drivers run only when \u003Ccode>kosit\u003C\u002Fcode> and \u003Ccode>verapdf\u003C\u002Fcode> are listed in \u003Ccode>validation.levels\u003C\u002Fcode>. \u003Ccode>quittio:validate --kosit --verapdf\u003C\u002Fcode> adds them for one file, with the same settings. Levels, messages and the official validators: see \u003Ca href=\"\u002Fdocs\u002Fvalidation\">Validation\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"corrections\">Corrections\u003Ca class=\"q-doc-anchor\" href=\"#corrections\" 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>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>corrections.cancellation_strategy\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>env('QUITTIO_CANCELLATION_STRATEGY')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">How cancellations (\u003Ccode>$result-&gt;cancel()\u003C\u002Fcode>, \u003Ccode>Quittio::cancellation()\u003C\u002Fcode> and Managed cancellations) are written. \u003Ccode>credit_note\u003C\u002Fcode>: type code 381 with positive amounts. \u003Ccode>negative_invoice\u003C\u002Fcode>: type code 380 with negative amounts. \u003Ccode>null\u003C\u002Fcode> = the default of the country pack (Germany: \u003Ccode>credit_note\u003C\u002Fcode>; both are permitted). The \u003Ccode>strategy:\u003C\u002Fcode> argument wins. An unknown value fails with a \u003Ccode>ConfigurationException\u003C\u002Fcode>. See \u003Ca href=\"\u002Fdocs\u002Fbuilding-invoices#cancellations-and-corrections\">Cancellations and corrections\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2 id=\"calculation\">Calculation\u003Ca class=\"q-doc-anchor\" href=\"#calculation\" 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>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>calculation.declared_amounts\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>env('QUITTIO_DECLARED_AMOUNTS', 'keep')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">What happens with amounts another system declared and rounded differently, in invoices continued with \u003Ccode>Quittio::edit()\u003C\u002Fcode> or \u003Ccode>InvoiceBuilder::from()\u003C\u002Fcode> and in their cancellations. \u003Ccode>keep\u003C\u002Fcode>: keep them within the tolerances of EN 16931. \u003Ccode>recalculate\u003C\u002Fcode>: always recalculate. \u003Ccode>reject\u003C\u002Fcode>: throw a \u003Ccode>CalculationException\u003C\u002Fcode> when they are outside the tolerances. Replaced amounts are reported as \u003Ccode>QUITTIO-DECLARED-AMOUNTS\u003C\u002Fcode>. See \u003Ca href=\"\u002Fdocs\u002Fbuilding-invoices#declared-amounts\">Declared amounts\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>calculation.calculator\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Class of an own calculator (\u003Ccode>Quittio\\Core\\Calculation\\TotalsCalculator\u003C\u002Fcode>), resolved from the container. It calculates renders, cancellations, documents, read invoices and \u003Ccode>Quittio::edit()\u003C\u002Fcode>. \u003Ccode>null\u003C\u002Fcode> = the EN 16931 calculator with \u003Ccode>declared_amounts\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2 id=\"snapshots\">Snapshots\u003Ca class=\"q-doc-anchor\" href=\"#snapshots\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>A snapshot is an invoice stored as JSON together with the version of Quittio's data model. Queued render jobs and the Managed layer store invoices this way.\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>snapshots.upcasters\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">list\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Classes (resolved through the container) or instances implementing \u003Ccode>Quittio\\Core\\Serialization\\Snapshots\\SnapshotUpcaster\u003C\u002Fcode>. They bring stored snapshots of older data model versions up to date when they are read: \u003Ccode>InvoiceData::fromSnapshot()\u003C\u002Fcode>, queued \u003Ccode>RenderInvoice\u003C\u002Fcode> jobs and the invoices of the Managed layer. Only needed after an update that changes the data model. Other values fail with a \u003Ccode>ConfigurationException\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>An upcaster reads one version and returns the next one:\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\\Serialization\\Snapshots\\SnapshotUpcaster\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:#FF7B72\">final\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> class\u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\"> RenameReferenceField\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> implements\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> SnapshotUpcaster\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    public\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> function\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\"> from\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">()\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">:\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> int\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#E6EDF3\">    {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        return\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> 1\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;                                  \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F produces version 2\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\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:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    public\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> function\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\"> upcast\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">array\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> $snapshot)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">:\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> array\u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">  \u002F\u002F without the \"_version\" key\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#E6EDF3\">    {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#E6EDF3\">        $snapshot[\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'buyerReference'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">] \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">??=\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> $snapshot[\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'reference'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">] \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">??\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> null\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#79C0FF\">        unset\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">($snapshot[\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'reference'\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:10ch;text-indent:-10ch\">\u003Cspan style=\"color:#FF7B72\">        return\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> $snapshot;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\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\u003Ch2 id=\"reader\">Reader\u003Ca class=\"q-doc-anchor\" href=\"#reader\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Limits for reading incoming e-invoices, as protection against oversized files. They apply to \u003Ccode>Quittio::read()\u003C\u002Fcode>, \u003Ccode>readFile()\u003C\u002Fcode>, \u003Ccode>validateFile()\u003C\u002Fcode>, \u003Ccode>validatePath()\u003C\u002Fcode>, \u003Ccode>quittio:read\u003C\u002Fcode> and \u003Ccode>quittio:validate\u003C\u002Fcode>. See \u003Ca href=\"\u002Fdocs\u002Freading#limits-and-security\">Reading incoming invoices\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>reader.max_xml_bytes\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">int\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>10 * 1024 * 1024\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Largest XML file (bytes)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>reader.max_pdf_bytes\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">int\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>25 * 1024 * 1024\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Largest PDF file (bytes)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>reader.max_decompressed_bytes\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">int\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>50 * 1024 * 1024\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Largest decompressed content of the PDF streams (bytes)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2 id=\"format-resolver\">Format resolver\u003Ca class=\"q-doc-anchor\" href=\"#format-resolver\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>The format resolver makes the automatic choice of the format when a render call names none (\u003Ca href=\"\u002Fdocs\u002Fformats#automatic-choice\">Automatic choice\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>format_resolver.driver\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'default'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ccode>default\u003C\u002Fcode> (the built-in choice) or the name of a resolver registered with \u003Ccode>Quittio::extend('format_resolver', …)\u003C\u002Fcode>. The factory receives the whole \u003Ccode>format_resolver\u003C\u002Fcode> array. An unknown name fails with a \u003Ccode>ConfigurationException\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>format_resolver.peppol_lookup\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">class-string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Peppol lookup of the \u003Ccode>default\u003C\u002Fcode> resolver: an invokable class, resolved from the container, that receives the \u003Ccode>Quittio\\Core\\Data\\Party\\BuyerParty\u003C\u002Fcode> and returns \u003Ccode>true\u003C\u002Fcode> when the buyer receives invoices via Peppol (an international delivery network for e-invoices). The automatic choice then picks \u003Ccode>peppol\u003C\u002Fcode> for business buyers that no domestic country rule decided. See \u003Ca href=\"\u002Fdocs\u002Flaravel#peppol-lookup\">Peppol lookup\u003C\u002Fa>. At runtime a callable works as well. Anything else fails with a \u003Ccode>ConfigurationException\u003C\u002Fcode>. \u003Ccode>null\u003C\u002Fcode> = no lookup, the resolver never picks \u003Ccode>peppol\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>format_resolver.b2c_embed_xml\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">bool\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>false\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ccode>true\u003C\u002Fcode> = embed the e-invoice XML in CII syntax (\u003Ccode>factur-x.xml\u003C\u002Fcode>, profile from \u003Ccode>defaults.profile\u003C\u002Fcode>) also into plain PDFs (format \u003Ccode>pdf\u003C\u002Fcode>, e.g. the automatic choice for consumers). These PDFs are then PDF\u002FA-3b.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>format_resolver.auto_upgrade_profile\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\">When an invoice uses EXTENDED features (e.g. sub lines) and no profile was requested, CII formats switch to the profile EXTENDED, which has more fields than EN 16931. \u003Ccode>false\u003C\u002Fcode> = fail with a \u003Ccode>ConfigurationException\u003C\u002Fcode> instead.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Published files of earlier versions may contain a \u003Ccode>networks\u003C\u002Fcode> section (mail, Peppol, French platform). Nothing reads it, so remove it. The Peppol lookup above replaces \u003Ccode>networks.peppol\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2 id=\"storage-queue-and-preview\">Storage, queue and preview\u003Ca class=\"q-doc-anchor\" href=\"#storage-queue-and-preview\" 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>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>storage.disk\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>env('QUITTIO_STORAGE_DISK', 'local')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Filesystem disk (\u003Ccode>config\u002Ffilesystems.php\u003C\u002Fcode>, e.g. \u003Ccode>local\u003C\u002Fcode> or \u003Ccode>s3\u003C\u002Fcode>) of \u003Ccode>-&gt;save()\u003C\u002Fcode> on rendered results and of queued renders without a disk. \u003Ccode>null\u003C\u002Fcode> or \u003Ccode>''\u003C\u002Fcode> = the default disk of \u003Ccode>config\u002Ffilesystems.php\u003C\u002Fcode>. The archive of the Managed layer uses \u003Ccode>quittio-managed.disk\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>queue.connection\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Queue connection of \u003Ccode>-&gt;queue()\u003C\u002Fcode>. \u003Ccode>null\u003C\u002Fcode> = the default connection.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>queue.queue\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'quittio'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Queue name of \u003Ccode>-&gt;queue()\u003C\u002Fcode>. Workers must listen on it: \u003Ccode>php artisan queue:work --queue=quittio,default\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>queue.after_commit\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\">Inside a database transaction the job is dispatched after the commit, and not at all after a rollback. \u003Ccode>false\u003C\u002Fcode> = at once.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>preview.enabled\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">bool|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>env('QUITTIO_PREVIEW_ENABLED')\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ccode>true\u003C\u002Fcode> = register the browser preview of the sample invoices, \u003Ccode>false\u003C\u002Fcode> = never. \u003Ccode>null\u003C\u002Fcode> = only in the \u003Ccode>local\u003C\u002Fcode> environment. Never registered while routes are cached (\u003Ccode>route:cache\u003C\u002Fcode>).\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>preview.path\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'_quittio\u002Fpreview'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">URL prefix of the preview\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>preview.middleware\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">list\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>['web']\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Middleware of the preview routes, e.g. \u003Ccode>['web', 'auth']\u003C\u002Fcode> when you enable it outside \u003Ccode>local\u003C\u002Fcode>. Outside \u003Ccode>local\u003C\u002Fcode> the gate \u003Ccode>viewQuittioPreview\u003C\u002Fcode> must also allow the request (\u003Ca href=\"\u002Fdocs\u002Flaravel#preview-route\">Preview route\u003C\u002Fa>).\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>preview.throttle\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Type\">string|null\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>'30,1'\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Rate limit of the preview as \u003Ccode>attempts,minutes\u003C\u002Fcode> (Laravel's \u003Ccode>throttle\u003C\u002Fcode> middleware); \u003Ccode>null\u003C\u002Fcode> = none\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>See \u003Ca href=\"\u002Fdocs\u002Flaravel#saving-downloading-and-mailing\">Saving, downloading and mailing\u003C\u002Fa>, \u003Ca href=\"\u002Fdocs\u002Flaravel#queueing\">Queueing\u003C\u002Fa> and \u003Ca href=\"\u002Fdocs\u002Flaravel#preview-route\">Preview route\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"serializer-extensions\">Serializer extensions\u003Ca class=\"q-doc-anchor\" href=\"#serializer-extensions\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Ccode>serializers.{name}\u003C\u002Fcode> (not in the published file) holds the options passed to the factory of a serializer registered with \u003Ccode>Quittio::extend('serializer', '{name}', …)\u003C\u002Fcode>. Registered serializers are always used. They replace the built-in XML writer of their syntax (CII or UBL, see \u003Ca href=\"\u002Fdocs\u002Fconcepts#syntaxes-cii-and-ubl\">Syntaxes\u003C\u002Fa>).\u003C\u002Fp>\n\u003Ch2 id=\"without-laravel\">Without Laravel\u003Ca class=\"q-doc-anchor\" href=\"#without-laravel\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>The core takes the same settings as a \u003Ccode>Quittio\\Core\\Config\u003C\u002Fcode> object or as an array for \u003Ccode>Quittio::create()\u003C\u002Fcode> (\u003Ccode>Config::fromArray()\u003C\u002Fcode>). Some keys are shaped differently there, e.g. \u003Ccode>validation.levels\u003C\u002Fcode> as \u003Ccode>L1\u003C\u002Fcode> … \u003Ccode>L7\u003C\u002Fcode>, \u003Ccode>pdf.b2c_embed_xml\u003C\u002Fcode>, and \u003Ccode>format\u003C\u002Fcode> instead of \u003Ccode>defaults.format\u003C\u002Fcode>. See \u003Ca href=\"\u002Fdocs\u002Fgetting-started#without-laravel\">Getting started\u003C\u002Fa>, which maps every core key to its Laravel key.\u003C\u002Fp>\n",[111,115,119,122,125,128,131,134,137,140,141,144,147,150,153,154,157,160,163,166,169,172,175],{"id":112,"text":113,"level":114},"the-keys-you-set-first","The keys you set first",2,{"id":116,"text":117,"level":118},"your-company","Your company",3,{"id":120,"text":121,"level":118},"your-bank-account","Your bank account",{"id":123,"text":124,"level":118},"small-businesses","Small businesses",{"id":126,"text":127,"level":118},"defaults-you-may-change","Defaults you may change",{"id":129,"text":130,"level":118},"design","Design",{"id":132,"text":133,"level":114},"how-the-configuration-is-read","How the configuration is read",{"id":135,"text":136,"level":114},"environment-variables","Environment variables",{"id":138,"text":139,"level":114},"defaults","Defaults",{"id":73,"text":74,"level":114},{"id":142,"text":143,"level":118},"settings-of-a-pack-quittiocountriescode","Settings of a pack (quittio.countries.{code})",{"id":145,"text":146,"level":118},"country-pack-germany-quittiocountriesde","Country pack Germany (quittio.countries.de)",{"id":148,"text":149,"level":114},"seller","Seller",{"id":151,"text":152,"level":114},"pdf-and-design","PDF and design",{"id":49,"text":50,"level":114},{"id":155,"text":156,"level":114},"corrections","Corrections",{"id":158,"text":159,"level":114},"calculation","Calculation",{"id":161,"text":162,"level":114},"snapshots","Snapshots",{"id":164,"text":165,"level":114},"reader","Reader",{"id":167,"text":168,"level":114},"format-resolver","Format resolver",{"id":170,"text":171,"level":114},"storage-queue-and-preview","Storage, queue and preview",{"id":173,"text":174,"level":114},"serializer-extensions","Serializer extensions",{"id":176,"text":177,"level":114},"without-laravel","Without Laravel","https:\u002F\u002Fgithub.com\u002FQuittio\u002Fquittio\u002Fedit\u002Fmaster\u002Fdocs\u002Fconfiguration.md","\u002Fdocs\u002Fconfiguration.md",{"slug":61,"title":62},{"slug":67,"title":68}]