ZUGFeRD-/Factur-X-Konformität: das eingebettete EN 16931-Rechnungsprofil
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“Abgrenzungshinweis. NextPDF erzeugt das eingebettete XML-Profil; über die steuerliche und rechtliche Gültigkeit entscheidet die empfangende Behörde, nicht die Bibliothek.
ZUGFeRD / Factur-X ist eine hybride Rechnung: ein menschenlesbares PDF (ein PDF/A-3-Archivsubstrat) mit einer eingebetteten, maschinenlesbaren Cross-Industry-Invoice-XML (CII), die dem semantischen Datenmodell von EN 16931 folgt. NextPDF Core liefert den Embedder-Vertrag (NextPDF\Contracts\EInvoice); die konkrete Factur-X 1.08-Engine wird im Premium-Paket nextpdf/pro ausgeliefert. Die Bibliothek erzeugt das eingebettete XML und die PDF/A-3-Anhangsstruktur; über die steuerliche Gültigkeit entscheidet ein EN 16931 / Schematron-Validator – oder die empfangende Steuerbehörde.
Installation
Abschnitt betitelt „Installation“composer require nextpdf/core:^3 # EInvoice contracts onlycomposer require nextpdf/pro # Factur-X 1.08 embedder engineCore liefert EmbedderInterface, ProfileInterface, ProfileType, ValidatorInterface und ValidationResult in NextPDF\Contracts\EInvoice. Der Docblock des Interfaces sagt es ausdrücklich: Die Pro-Stufe (Factur-X 1.08-Byte-Rewrite-Engine) und die Enterprise-Stufe (PDF/A-managed-Builder) implementieren diesen Vertrag. Core allein bettet keine Rechnung ein – es definiert den byte-in/byte-out-Vertrag, den die Stufen erfüllen.
Konzeptioneller Überblick
Abschnitt betitelt „Konzeptioneller Überblick“NextPDF\Contracts\EInvoice\ProfileType ist der EN 16931-Konformitätsdiskriminator: MINIMUM, BASIC_WL, BASIC, EN16931, EXTENDED, XRECHNUNG. Die Methode isEn16931Conformant() kodiert die Regel direkt aus EN 16931-1. MINIMUM und BASIC_WL sind nicht EN 16931-konform (sie erfüllen weder die Kardinalität des BT-24-Spezifikationskennzeichens noch die Anforderung an Rechnungspositionen). BASIC, EN16931, EXTENDED, XRECHNUNG sind EN 16931-konform.
Der Embedder (EmbedderInterface) ist vertraglich verpflichtet:
- das gelieferte CII-XML über
XmlGuardzu parsen (XXE-sicher); - das Factur-X-XMP-Erweiterungsschema für das deklarierte Profil zu injizieren;
- das XML als eingebettete Datei mit der korrekten
AFRelationship(Data/Alternative) anzuhängen, sodass es vom PDF/A-3-Archivsubstrat (§6.7.5 Anforderungen an eingebettete Dateien –F/UF-Schlüssel) getragen wird.
NextPDF gibt diese Struktur aus. Es behauptet nicht, dass die Rechnung steuerlich gültig ist; diese Feststellung obliegt der empfangenden Behörde anhand der Geschäftsregeln aus EN 16931 §7 und etwaiger nationaler CIUS.
API-Oberfläche
Abschnitt betitelt „API-Oberfläche“| Symbol | Wirkung |
|---|---|
Contracts\EInvoice\EmbedderInterface | Byte-in/byte-out-Vertrag; Pro/Enterprise implementieren ihn. |
Contracts\EInvoice\ProfileType (Enum) | EN 16931-Profildiskriminator. |
ProfileType::isEn16931Conformant(): bool | False für MINIMUM/BASIC_WL; true für BASIC/EN16931/EXTENDED/XRECHNUNG. |
Contracts\EInvoice\ValidatorInterface | Validierungsvertrag, der ein ValidationResult der Regelverletzungen zurückgibt. |
Codebeispiel – Schnellstart
Abschnitt betitelt „Codebeispiel – Schnellstart“<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Contracts\EInvoice\ProfileType;
// Core: choose and check the profile before delegating embedding to Pro.$profile = ProfileType::EN16931;
if (!$profile->isEn16931Conformant()) { fwrite(STDERR, "Profile {$profile->value} is not EN 16931 conformant.\n"); exit(1);}
// The concrete embedder is provided by nextpdf/pro:// $embedder = /* the Factur-X embedder from nextpdf/pro; see the Premium docs */;// $pdfWithInvoice = $embedder->embed($basePdfBytes, $ciiXml, $options);echo "Profile {$profile->value} selected (embedding requires nextpdf/pro).\n";Codebeispiel – Produktion
Abschnitt betitelt „Codebeispiel – Produktion“Die Produktions-Pipeline (Pro-Stufe) bettet das CII-XML in eine PDF/A-3-Basis ein. Anschließend führt sie einen EN 16931-Schematron-Validator aus (oder übermittelt an die empfangende Behörde). Diesen Bericht behandelt sie als Gate. NextPDF gibt das eingebettete XML und den PDF/A-3-Anhang aus; über die steuerliche Gültigkeit entscheidet der Validator bzw. die Behörde. Core allein kann diese Pipeline nicht ausführen – nextpdf/pro wird für die Embedder-Engine benötigt.
Grenzfälle & Stolpersteine
Abschnitt betitelt „Grenzfälle & Stolpersteine“- Core hat nur Verträge. Ohne
nextpdf/progibt es keinen konkreten Embedder. Aufrufender Code muss sich auf das Interface stützen und kontrolliert degradieren, wenn die Pro-Implementierung fehlt. - MINIMUM / BASIC_WL sind nicht EN 16931.
isEn16931Conformant()liefert für diese Profile false; werben Sie nicht mit einer EN 16931-Rechnung, wenn Sie sie verwenden. - PDF/A-3-Substrat. Das eingebettete XML liegt in einem PDF/A-3-Archivcontainer vor; die
F/UF-Schlüssel der eingebetteten Datei (PDF/A §6.7.5) müssen vorhanden sein. - XML wird XXE-sicher geparst. Der Vertrag verlangt das Parsen über
XmlGuard; ein eigener Embedder darf keine XXE-Senke einführen. - Über die Gültigkeit urteilt nicht die Bibliothek. Eine strukturell korrekte Factur-X-Datei zu erzeugen ist keine Aussage darüber, dass die Steuerbehörde sie akzeptiert.
Performance
Abschnitt betitelt „Performance“Das Einbetten schreibt das PDF neu, um den XML-Anhang und das XMP-Erweiterungsschema hinzuzufügen. Planen Sie für eine typische Rechnung Wall-Zeit ≤ 1500 ms und Peak ≤ 128 MB ein.
Sicherheitshinweise
Abschnitt betitelt „Sicherheitshinweise“Das eingebettete XML wird XXE-sicher über XmlGuard geparst. Das Rechnungs-XML enthält von Natur aus kommerzielle PII (Parteien, Beträge) – es ist eingebettet, nicht verschlüsselt. Die Vertraulichkeit der Rechnung liegt in der Verantwortung des Integrators.
Datenresidenz & PII-Maßnahmen
Abschnitt betitelt „Datenresidenz & PII-Maßnahmen“Das Rechnungs-XML enthält PII zu Parteien und Finanzen. Das Einbetten läuft im Prozess; während des Einbettens verlassen keine Daten den Prozess. Die Übertragung an eine empfangende Behörde liegt außerhalb des Geltungsbereichs und fällt in die Verantwortung des Integrators für Datenresidenz.
Sichere Telemetrie & Log-Scrubbing
Abschnitt betitelt „Sichere Telemetrie & Log-Scrubbing“Protokollieren Sie niemals das CII-XML oder die eingebetteten PDF-Bytes – sie enthalten Rechnungs-PII. Protokollieren Sie nur den Profilnamen und ein strukturelles Urteil.
Bedrohungsmodell
Abschnitt betitelt „Bedrohungsmodell“Eine Factur-X-Datei ist nicht zugriffsgeschützt. Das eingebettete XML ist für jede Person lesbar, die Zugriff auf die Datei hat. Das Hybriddokument garantiert die Maschinenlesbarkeit der Rechnung, nicht ihre Vertraulichkeit oder ihre steuerliche Akzeptanz.
FIPS-Modus-Verhalten
Abschnitt betitelt „FIPS-Modus-Verhalten“Das Einbetten führt keine Kryptografie durch. Eine signierte Factur-X-Rechnung ist ein eigenes Anliegen der Signatur-Recipe und übernimmt das FIPS-Verhalten dieser Recipe; diese Seite trifft keine Signaturaussage.
Konformität
Abschnitt betitelt „Konformität“| Behauptung | Spezifikation | Klausel | reference_id |
|---|---|---|---|
| Eine EN 16931-Rechnung trägt die Geschäftsbegriffe des semantischen Datenmodells. | EN 16931-1 | §6.4 | |
| Die EN 16931-Compliance bemisst sich an der Geschäftsregel-Kardinalität, die eine konforme Rechnung erfüllen muss. | EN 16931-1 | §7 | |
| Das Factur-X EN 16931-Profil erfordert CII-XML-Geschäftsregelkonformität. | Factur-X 1.08 | EN 16931-Profil | |
| Das Factur-X EN 16931-Profil schreibt den erforderlichen Rechnungsinhalt vor. | Factur-X 1.08 | EN 16931-Profil | |
| Factur-X ist ein Hybrid: maschinenlesbares XML, eingebettet neben dem menschenlesbaren PDF. | Factur-X 1.08 | Basic | |
| Das eingebettete XML liegt in einem PDF/A-Archivsubstrat vor (F/UF-Schlüssel der eingebetteten Datei). | ISO 19005-4 | §6.7.5 |
Zitate sind Zeiger aus Klausel-ID und reference_id in den Verifikationskorpus. Es wird kein Normtext reproduziert; Klauseln werden in den Worten von NextPDF zusammengefasst.