{"id":343944,"date":"2026-07-23T07:29:48","date_gmt":"2026-07-23T07:29:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/itdatex-e-invoice-output\/"},"modified":"2026-07-23T07:29:15","modified_gmt":"2026-07-23T07:29:15","slug":"itdatex-e-invoice-output","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/itdatex-e-invoice-output\/","author":23515351,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.0","stable_tag":"0.1.0","tested":"7.0.2","requires":"6.4","requires_php":"8.1","requires_plugins":null,"header_name":"itdatex E-Invoice Output","header_author":"!tdatex","header_description":"Erzeugt, validiert und stellt E-Rechnungen (XRechnung, ZUGFeRD, Factur-X) lokal in WordPress aus. Verarbeitung ohne Cloud-Upload.","assets_banners_color":"0a0f1a","last_updated":"2026-07-23 07:29:15","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wp.itdatex.support\/rechnungsausgang\/","header_author_uri":"https:\/\/wp.itdatex.support\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":31,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"itdatex","date":"2026-07-23 07:29:15"}},"upgrade_notice":{"0.1.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3619531,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3619531,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3619531,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3619531,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3619531,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3619531,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3619531,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3619531,"resolution":"4","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"The list view shows all issued invoices with date, due date, buyer, gross amount and validation status.","2":"The \"Neue Rechnung\" form has inline hints for every KoSIT-mandatory field (BT\/BR codes).","3":"The single-invoice view shows the generated file, header data, validation report and audit trail.","4":"The Settings page validates seller data against BR-DE-5 to BR-DE-28 on save (contact details, electronic address, VAT ID)."}},"plugin_section":[],"plugin_tags":[15149,247307,12480,263529,263530],"plugin_category":[45],"plugin_contributors":[272517],"plugin_business_model":[],"class_list":["post-343944","plugin","type-plugin","status-publish","hentry","plugin_tags-billing","plugin_tags-e-invoice","plugin_tags-invoice","plugin_tags-xrechnung","plugin_tags-zugferd","plugin_category-ecommerce","plugin_contributors-itdatex","plugin_committers-itdatex"],"banners":{"banner":"https:\/\/ps.w.org\/itdatex-e-invoice-output\/assets\/banner-772x250.png?rev=3619531","banner_2x":"https:\/\/ps.w.org\/itdatex-e-invoice-output\/assets\/banner-1544x500.png?rev=3619531","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/itdatex-e-invoice-output\/assets\/icon-128x128.png?rev=3619531","icon_2x":"https:\/\/ps.w.org\/itdatex-e-invoice-output\/assets\/icon-256x256.png?rev=3619531","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/itdatex-e-invoice-output\/assets\/screenshot-1.png?rev=3619531","caption":"The list view shows all issued invoices with date, due date, buyer, gross amount and validation status."},{"src":"https:\/\/ps.w.org\/itdatex-e-invoice-output\/assets\/screenshot-2.png?rev=3619531","caption":"The \"Neue Rechnung\" form has inline hints for every KoSIT-mandatory field (BT\/BR codes)."},{"src":"https:\/\/ps.w.org\/itdatex-e-invoice-output\/assets\/screenshot-3.png?rev=3619531","caption":"The single-invoice view shows the generated file, header data, validation report and audit trail."},{"src":"https:\/\/ps.w.org\/itdatex-e-invoice-output\/assets\/screenshot-4.png?rev=3619531","caption":"The Settings page validates seller data against BR-DE-5 to BR-DE-28 on save (contact details, electronic address, VAT ID)."}],"raw_content":"<!--section=description-->\n<p>Since 1 January 2025, German businesses must be able to receive electronic invoices under \u00a7 14 UStG. From 2027\/2028 onwards, the <em>issuing<\/em> side becomes mandatory too: B2B invoices must be sent as e-invoices (XRechnung or ZUGFeRD), not as PDFs or Word documents. <strong>itdatex E-Invoice Output<\/strong> generates these formats directly inside your WordPress installation.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li>Issues invoices in three formats:\n\n<ul>\n<li><strong>XRechnung 3.0.2 UBL<\/strong> \u2014 the standard B2G format used via Leitweg-ID<\/li>\n<li><strong>XRechnung 3.0.2 CII<\/strong> (UN\/CEFACT) \u2014 the EN 16931 syntax also used by ZUGFeRD and Factur-X<\/li>\n<li><strong>ZUGFeRD-PDF<\/strong> \u2014 a hybrid PDF\/A-3 with both a human-readable invoice and the embedded CII XML<\/li>\n<\/ul><\/li>\n<li>Pre-validates the generated XML against the EN 16931 XSD schema before saving<\/li>\n<li>Stores each issued invoice with a random filename in a protected upload directory and chains every file's SHA-256 with the previous one<\/li>\n<li>Provides an admin form with built-in checks for KoSIT-mandatory fields (BR-DE-*, R010\/R020 electronic address, BT-10 buyer reference, BR-DE-9 postal code, BR-DE-15 buyer reference)<\/li>\n<li>Catches SHA-256 duplicates: re-issuing the exact same draft returns the existing invoice id instead of creating a second row<\/li>\n<li>Logs every action (issue, download) in a dedicated audit table<\/li>\n<li>Ships a WP-CLI command <code>wp ausrg issue --from=draft.json [--format=cii]<\/code> for scripted issuing<\/li>\n<\/ul>\n\n<h4>KoSIT-validated output<\/h4>\n\n<p>The output of all three builders is accepted by the official KoSIT Validator using the XRechnung 3.0.2 \/ EN 16931 1.3.15 configuration. The plugin includes a test script (<code>tools\/e2e-validate.php<\/code>) that you can run against a local KoSIT Validator instance to verify this on your own server.<\/p>\n\n<h4>Privacy by design<\/h4>\n\n<p>The free version performs all generation locally on your own server. No invoice data leaves your WordPress installation. There is no telemetry, no automatic update check against a third party, no analytics, no external font or asset loading.<\/p>\n\n<p>A separate Pro version (sold via wp.itdatex.support, not part of this free plugin) adds optional cloud-assisted features \u2014 KoSIT deep validation via API, AI-based KoSIT-error explanations in plain German, e-mail dispatch \u2014 and is opt-in only.<\/p>\n\n<h4>GoBD-supporting, not GoBD-certified<\/h4>\n\n<p>The plugin supports GoBD-conformant processes through immutable storage, SHA-256 hash chaining and a complete audit trail. As with any tooling: software cannot be \"GoBD-certified\" \u2014 conformity is a property of <em>your<\/em> process. Consult your tax advisor.<\/p>\n\n<h4>Sister plugin<\/h4>\n\n<p>If you also need to <em>receive<\/em> incoming e-invoices, install <strong>itdatex E-Invoice Intake<\/strong> alongside this plugin. The two plugins share the same database schema and upload directory, so incoming and outgoing invoices live in the same hash chain. Either plugin works standalone; if both are installed, the order of activation does not matter.<\/p>\n\n<h4>Open source<\/h4>\n\n<p>The full source code is released under GPL-2.0-or-later. You can verify, audit and adapt the plugin yourself. Dependencies (<code>josemmo\/einvoicing<\/code> for UBL, <code>horstoeko\/zugferd<\/code> for CII\/ZUGFeRD-PDF, <code>setasign\/fpdf<\/code> for the PDF layout) are vendored with prefixed namespaces so they cannot conflict with other plugins in the same WordPress installation.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/itdatex-e-invoice-output\/<\/code>, or install via the Plugins screen.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Open <strong>Ausgangsrechnung \u2192 Einstellungen<\/strong> in the admin sidebar and fill in your seller data (company name, VAT ID, address, contact phone\/email, electronic address) and default payment terms (IBAN, BIC, payment text). All KoSIT-mandatory seller fields are validated on save.<\/li>\n<li>Use <strong>Ausgangsrechnung \u2192 Neue Rechnung<\/strong> to issue your first invoice.<\/li>\n<\/ol>\n\n<p>The plugin creates three database tables (<code>*_reing_invoices<\/code>, <code>*_reing_files<\/code>, <code>*_reing_audit_log<\/code>) and a protected upload directory under <code>wp-content\/uploads\/itdatex-e-invoice-{random}\/<\/code>. If the sister plugin \"itdatex E-Invoice Intake\" is already installed, the existing tables and upload directory are reused \u2014 no duplicate storage.<\/p>\n\n<p>On uninstall, <strong>invoice data and files are NOT deleted by default<\/strong> because of statutory retention requirements (8 to 10 years under German tax and commercial law).<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20format%20should%20i%20choose%3F\"><h3>Which format should I choose?<\/h3><\/dt>\n<dd><p>For <em>B2G<\/em> invoices to German authorities (Bund, L\u00e4nder, Kommunen): <strong>XRechnung UBL<\/strong> with a Leitweg-ID in the Buyer Reference. For <em>B2B<\/em> invoices: <strong>ZUGFeRD-PDF<\/strong> is the most polite choice \u2014 the recipient sees a normal PDF, machine-readable systems extract the XML. <strong>CII<\/strong> is useful when the recipient expects the EN 16931 CII payload without a PDF carrier (e.g. via PEPPOL).<\/p><\/dd>\n<dt id=\"what%20about%20kleinunternehmerregelung%20%28%C2%A7%2019%20ustg%29%20and%20reverse%20charge%3F\"><h3>What about Kleinunternehmerregelung (\u00a7 19 UStG) and reverse charge?<\/h3><\/dt>\n<dd><p>In the position editor, set the VAT category to <code>E<\/code> (exempt \u2014 Kleinunternehmer) or <code>AE<\/code> (reverse charge) and the VAT rate to 0. The plugin generates the correct EN-16931 tax breakdown.<\/p><\/dd>\n<dt id=\"why%20does%20the%20plugin%20demand%20a%20%22leitweg-id%22%20even%20for%20b2b%20invoices%3F\"><h3>Why does the plugin demand a \"Leitweg-ID\" even for B2B invoices?<\/h3><\/dt>\n<dd><p>It does not. The field is labelled \"Leitweg-ID \/ Buyer Reference\" because BT-10 (BR-DE-15) is XRechnung-mandatory but its content is up to you: in B2G that is the official Leitweg-ID; in B2B you can use a customer- or order-number. The plugin does <em>not<\/em> validate the format against the Leitweg pattern.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20anything%20to%20your%20server%3F\"><h3>Does the plugin send anything to your server?<\/h3><\/dt>\n<dd><p>The free version makes no external HTTP calls. All generation, validation and storage happens locally. You can verify this by inspecting the source \u2014 the only network code path would be the optional Pro upgrade, which is not part of this free plugin.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20plugin%20without%20the%20sister%20%22intake%22%20plugin%3F\"><h3>Can I use the plugin without the sister \"Intake\" plugin?<\/h3><\/dt>\n<dd><p>Yes. The plugin creates its own tables and upload directory on activation. If you later install the Intake plugin, both plugins share the existing schema \u2014 no migration needed.<\/p><\/dd>\n<dt id=\"how%20does%20the%20duplicate%20detection%20work%3F\"><h3>How does the duplicate detection work?<\/h3><\/dt>\n<dd><p>Every issued file is hashed (SHA-256) and compared against the file table. Re-running the same draft (same numbers, same VAT, same line items) produces an identical XML\/PDF byte sequence and triggers a duplicate response with the existing invoice id. This is intentional: invoice numbers should be re-used at the <em>invoice level<\/em>, not at the file level. To re-issue a corrected version, change at least one byte (e.g. the issue date or the buyer reference).<\/p><\/dd>\n<dt id=\"does%20this%20work%20behind%20nginx%3F\"><h3>Does this work behind nginx?<\/h3><\/dt>\n<dd><p>Yes. The protected upload directory uses both <code>.htaccess<\/code> (Apache\/LiteSpeed) and a randomized directory name so that path guessing fails. File downloads always go through a capability-and-nonce-checked endpoint, never via a direct URL.<\/p><\/dd>\n<dt id=\"how%20do%20i%20issue%20invoices%20from%20a%20script%3F\"><h3>How do I issue invoices from a script?<\/h3><\/dt>\n<dd><p>wp ausrg issue --from=draft.json --format=ubl|cii|zugferd-pdf reads a JSON draft and runs the same pipeline as the admin form. Useful for migrations from a different billing system. The seller data falls back to the plugin Settings if not present in the JSON.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release: UBL, CII and ZUGFeRD-PDF builders; admin form with KoSIT-mandatory field validation; seller-data settings; WP-CLI command; secure download endpoint; SHA-256 hash chain; audit log; standalone activation (own schema + upload dir, or shared with the sister Intake plugin).<\/li>\n<\/ul>","raw_excerpt":"Issue German e-invoices (XRechnung, ZUGFeRD, Factur-X) directly in WordPress \u2014 KoSIT-validated, generated locally, never sent to any cloud.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/343944","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=343944"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/itdatex"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=343944"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=343944"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=343944"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=343944"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=343944"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=343944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}