Pro Edition
Compliance — Ausführliche Referenz
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“Das Compliance-Modul bündelt drei voneinander unabhängige Bereiche unter NextPDF\Pro\Compliance:
- Sprach-Tag-Reporting — eine strikte PDF/UA-2-
/Lang-Richtlinienfassade plus ein strukturierter, PSR-3-förmiger Reporter für Compliance-Ereignisse. - E-Rechnungs-Verarbeitung — Validierung von Factur-X 1.08 / ZUGFeRD 2.4 gegen das semantische Modell von EN 16931 sowie Erzeugung hybrider PDF/A-3-Dateien.
- Provenienz — Einbetten und Extrahieren aufruferseitig bereitgestellter C2PA-Manifest-Stores über einen angriffsgehärteten JUMBF-Parser; die Claim-Synthese bleibt auf Preview beschränkt.
Das Modul meldet, was es prüft. Es zertifiziert keine Dokumente und führt keine kryptografische Signierung durch.
Verfügbarkeit & Lizenzierung
Abschnitt betitelt „Verfügbarkeit & Lizenzierung“Diese Funktion ist Teil von NextPDF Pro (nextpdf/pro) und wird mit einer Lizenz der Pro-Stufe aktiviert. Eine Bereitstellung ohne diese Berechtigung lädt die Klassen der Funktion nicht. Editionen vergleichen und Lizenz erwerben.
Es gibt kein Lizenz-Flag je Feature. Dies ist eine Funktion der Pro-Edition. Der experimentelle C2PA-Claim-Builder erfordert zusätzlich ein explizites Opt-in über die Umgebung (siehe Sonderfälle & Fehlermodi).
Öffentliche API-Oberfläche
Abschnitt betitelt „Öffentliche API-Oberfläche“composer require nextpdf/pro:^3| Symbol | Parameter | Standardverhalten | Rückgabe | Löst aus oder scheitert mit | Hinweise |
|---|---|---|---|---|---|
LangComplianceReporter::warn() / ::error() | string $tag, string $reason, ?string $clauseReference = null | Gibt einen strukturierten JSON-Datensatz pro Sprach-Tag-Ereignis über den PSR-3-Logger aus | void | JsonException, wenn die JSON-Kodierung des Datensatzes fehlschlägt | warn = Ablehnung im Lax-Modus; error = Ablehnung im Strict-Modus |
LangComplianceReporter::reportException() | InvalidBcp47TagException $exception, string $severity = 'error' | Extrahiert Tag und Grund aus der Exception; delegiert an warn() oder error() | void | Wie oben | Komfortpfad |
LangComplianceReporter::buildRecord() | string $severity, string $tag, string $reason, ?string $clauseReference = null | Erstellt das Datensatz-Array ohne Logging | array | Löst nicht aus | Für eigene Senken wie JSON-Zusammenfassungen je Datei |
ConformancePolicy::default() | ?LoggerInterface $logger = null | Strikte UA-2-Richtlinie: fehlerhafte oder nicht registrierte /Lang-Tags werden abgelehnt | self | Löst nicht aus | Der Standard in v5.0 ist strikt |
ConformancePolicy::fromCore() | CoreConformancePolicy $core, ?LoggerInterface $logger = null | Umschließt eine bestehende Core-Richtlinie unverändert; keine Achse wird umgeschaltet | self | Löst nicht aus | Für die strikte Haltung default() bevorzugen |
ConformancePolicy::withStrictUa2() | bool $enabled | Gibt eine Kopie mit gesetzter Strict-Achse zurück; das Deaktivieren gibt einen PSR-3-notice aus | self | Löst nicht aus | Veraltetes Opt-out; Entfernungsziel 6.0.0 |
ConformancePolicy::isStrictUa2() / ::mode() | — | Liest die zugrunde liegende Core-Richtlinie | bool / ConformanceMode | Löst nicht aus | — |
EInvoiceValidator::validate() | string $pdfPath | Vollständige Pipeline: PDF/A-3-Wrapper-Prüfung, Anhang-Extraktion, Profilerkennung, EN-16931-Regeln, Schematron | EInvoiceValidationResult | EInvoiceException-Unterklasse bei E/A-Fehler, fehlerhafter PDF-Struktur oder Absturz des Werkzeugs | Eingefrorene SPI-Schnittstelle; eine wohlgeformte Nicht-E-Rechnungs-PDF liefert ein Ergebnis, löst nie aus |
EInvoiceXmlValidator::validate() | string $xmlPayload, ValidatorContext $context | Strukturelle Vorprüfung plus das tiefensemantische EN-16931-Regelkorpus über eine CII-Nutzlast | Vertrag ValidationResult | Löst bei ungültiger Eingabe nicht aus; die Ablehnung erscheint als fehlgeschlagenes Ergebnis mit Befunden | Konkreter tierübergreifender Validator; Eingabe über XmlGuard abgesichert |
EInvoiceValidationResult::isValid() | — | Nur wahr, wenn Wrapper, Anhang-Spezifikation, Profil und Syntax gelten und keine FATAL-Verletzung vorliegt | bool | Löst nicht aus | Eine leere Verletzungsliste allein bedeutet keine Gültigkeit |
EInvoiceValidationResult::notAnEInvoice() | — | Deterministisches Ergebnis mit ausschließlich null und false | self | Löst nicht aus | Factory für den Fall „keine hybride Rechnung“ |
EInvoiceProfile | string-basierte Enum | Fälle MINIMUM, BASIC_WL, BASIC, EN16931, EXTENDED, hinterlegt mit BT-24-URNs | — | — | isEn16931Conformant() ist false für MINIMUM und BASIC_WL |
EInvoiceSyntax | string-basierte Enum | Fälle UN_CEFACT_CII, UBL_INVOICE, UBL_CREDIT_NOTE | — | — | Nur CII ist isFacturXEligible(); UBL ist nur für den Validator |
BusinessRuleViolation | string $ruleId, BusinessRuleSeverity $severity, string $message, ?string $xpath = null, ?string $ramPath = null | Unveränderliches Verletzungs-DTO | — | — | Regel-ID-Familien BR-, BR-CO-, BR-CL-, BR-DEC-, BR-FXEXT- |
BusinessRuleSeverity | string-basierte Enum | FATAL macht die Rechnung ungültig; WARNING kennzeichnet ein Qualitätsproblem | — | — | Spiegelt die Schematron-Stufen von EN 16931 wider |
FacturXEmbedder::embed() | siehe Signatur-Fence | Hängt einen Embedded-File-Stream, eine Filespec und XMP an eine PDF/A-Quelle an; schreibt die xref neu | void | EInvoiceException bei fehlerhaftem XML, nicht lesbarer Quelle, fehlendem Katalog, Objekt-Stream- oder xref-Stream-Quelle oder Schreibfehler der Ausgabe | Die Quelldatei bleibt unversehrt |
FacturXEmbedderOptions::default() | — | /AFRelationship /Alternative, Dateiname factur-x.xml, Typ INVOICE, Version 1.0 | self | Löst nicht aus | Die Standardwerte erfüllen die deutsche Vorgabe und bleiben in Frankreich akzeptiert |
FacturXEmbedderOptions::withRelationship() / ::withFilename() | string | Gibt eine Kopie mit angewandter Überschreibung zurück | self | InvalidArgumentException außerhalb der Akzeptanzmengen | Beziehungen: Source, Data, Alternative; Dateinamen umfassen zugferd-invoice.xml und xrechnung.xml |
FacturXEmbedderOptions::withDocumentType() | string $documentType | Gibt eine Kopie mit der XMP-Dokumenttyp-Überschreibung zurück | self | Löst nicht aus | Werte werden nicht defensiv aufgezählt |
FacturXContractEmbedder::embed() | string $pdfBytes, string $xmlPayload, EmbedderOptions $options | Byte-in-, Byte-out-Adapter über FacturXEmbedder mittels kurzlebiger temporärer Dateien | string | EInvoiceException; das XRECHNUNG-Profil wird als Enterprise-only abgelehnt | Tierübergreifende EmbedderInterface-Implementierung |
C2paManifestEmbedder::embed() | string $pdfBytes, ManifestStore $store | Bettet die Byte-Serialisierung des Stores an der Profilposition ein | string | C2paException bei jedem Einbettungsfehler | Eingefrorene SPI-Schnittstelle; nur Bytes, keine E/A |
C2paManifestEmbedder::extract() | string $pdfBytes | Parst einen eingebetteten Store über den gehärteten JUMBF-Parser | ManifestStore|null | C2paException-Unterklasse, wenn ein Store vorhanden ist, aber eine Härtungsgrenze überschreitet | Null signalisiert Abwesenheit; Abwesenheit löst nie aus |
ManifestStore::fromBoxes() / ::empty() | list<JumbfBox> / — | Erstellt das unveränderliche Store-Wertobjekt | self | Löst nicht aus | Die Box-Reihenfolge ist tragend für die Round-Trip-Gleichheit |
ManifestStore::toBytes() / ::isEmpty() / ::size() | — | Serialisiert die Root-Boxen; ein leerer Store serialisiert zu einer leeren Zeichenkette | string / bool / int | Löst nicht aus | — |
JumbfBoxParser::parse() | string $bytes | Parst JUMBF-Boxen auf Root-Ebene unter harten Grenzen | list<JumbfBox> | MalformedJumbfException, JumbfBombException, JumbfCycleDetectedException, JumbfDepthExceededException | Grenzen: Tiefe 8, 64 MiB pro Box, 128 MiB gesamt, MAX_CHILDREN_PER_SUPERBOX 4096 |
JumbfBox::superbox() / ::leaf() | string $tbox, … | Erstellt eine validierte Box; toBytes() durchläuft den Round-Trip durch den Parser | self | MalformedJumbfException, wenn die TBox nicht exakt 4 Bytes umfasst | — |
C2paCapabilityStatus::current() / ::summary() | — | Meldet den Reifegrad der C2PA-Funktion, aktuell preview-draft | self / string | Löst nicht aus | Maschinell prüfbarer Preview-Marker |
Feature::PREVIEW_C2PA_DRAFT->isEnabled() | — | Liest bei jedem Aufruf die Prozessumgebung; nur das Literal '1' aktiviert | bool | Löst nicht aus | Umgebungsvariable NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT |
ExperimentalC2paEmbedder::buildManifestStore() | string $sourceBytes, string $producer | Erstellt einen an den Draft gepinnten Manifest-Store mit einer SHA-256-Hash-Binding-Claim-Assertion | ManifestStore | Der Konstruktor löst LogicException aus, wenn das Preview-Flag deaktiviert ist | Preview; Wire-Format an einen Draft-Snapshot gepinnt; keine Claim-Signatur erzeugt |
Einstiegspunkt-Signaturen, wortgetreu:
public static function default(?LoggerInterface $logger = null): selfpublic function withStrictUa2(bool $enabled): selfpublic function isStrictUa2(): boolpublic function validate(string $pdfPath): EInvoiceValidationResultpublic function embed( string $sourcePdfPath, string $xml, EInvoiceProfile $profile, string $outputPdfPath, ?FacturXEmbedderOptions $options = null,): voidpublic function embed(string $pdfBytes, ManifestStore $store): stringpublic function extract(string $pdfBytes): ?ManifestStoreVerhaltensvertrag
Abschnitt betitelt „Verhaltensvertrag“Sprach-Tag-Reporting. LangComplianceReporter gibt einen strukturierten JSON-Datensatz pro PDF/UA-2-Sprach-Tag-Ereignis aus. Jeder Datensatz trägt den festen Ereignis-Diskriminator, eine Schweregrad-Angabe (warn für eine Ablehnung im Lax-Modus, error für eine Ablehnung im Strict-Modus), den beanstandeten Tag wortgetreu, einen maschinenlesbaren Grund, die geparsten Tag-Komponenten (oder null, wenn der Tag die Formgrammatik nach RFC 5646 nicht erfüllt), eine Klauselreferenz zu ISO 14289-2 §8.4.4 sowie einen UTC-Zeitstempel mit Mikrosekunden. Das JSON reist als PSR-3-Nachrichtentext; nachgelagerte Senken parsen das Nachrichtenfeld direkt. ConformancePolicy ist die Premium-Fassade über der Core-Konformitätsrichtlinie. Ihr Standard wendet strikte UA-2-Sprachbehandlung an und lehnt einen fehlerhaften oder nicht registrierten Tag ab, der /Lang erreicht. Der Opt-out-Helfer withStrictUa2(false) kehrt zum alten Lax-Verhalten zurück und protokolliert einen PSR-3-Notice, wenn sich der effektive Wert tatsächlich ändert. NextPDF kennzeichnet diesen Helfer seit v5.0 als deprecated mit Entfernungsziel 6.0.0. Zur Migration: den Bestand mit composer pdfua2:audit-lang-tags <pdf-or-dir> auf fehlerhafte /Lang-Werte prüfen, sie korrigieren und dann den Opt-out-Aufruf entfernen.
E-Rechnungs-Verarbeitung. EInvoiceValidator ist der eingefrorene SPI-Vertrag für die Validierung hybrider PDFs: PDF/A-3-Wrapper-Prüfung, /AF-Anhang-Extraktion, Profilerkennung aus dem BT-24-Spezifikationskennzeichen, die EN-16931-Geschäftsregel-Engine und ein Schematron-Durchlauf. Eine wohlgeformte Nicht-Factur-X-PDF liefert EInvoiceValidationResult::notAnEInvoice() zurück, anstatt auszulösen; nur E/A-Fehler, fehlerhafte PDF-Struktur oder Werkzeugabstürze lösen eine EInvoiceException-Unterklasse aus. EInvoiceXmlValidator ist der konkrete tierübergreifende XML-Validator: Er sichert die Eingabe über den Core-XmlGuard, führt eine strukturelle Vorprüfung und das tiefensemantische EN-16931-Regelkorpus aus und schlägt fail-closed fehl — Engine-Fehler erscheinen als Error-Befunde, nie als stille Erfolge. FacturXEmbedder erweitert eine PDF/A-Quelle zu einer hybriden PDF/A-3: Er hängt einen Embedded-File-Stream, eine Filespec mit konfigurierbarer /AFRelationship und ein Factur-X-XMP-Erweiterungspaket an und schreibt anschließend die klassische Cross-Reference-Tabelle neu. Sowohl das Katalog-/AF-Array als auch der /Names /EmbeddedFiles-Namensbaum referenzieren den Anhang, sodass ältere ZUGFeRD-Reader ihn auflösen.
Provenienz. C2paManifestEmbedder bettet einen aufruferseitig bereitgestellten C2PA-Manifest-Store in eine PDF-Byte-Zeichenkette ein oder extrahiert einen. ManifestStore ist das unveränderliche Wertobjekt, das die Grenze überschreitet. Die Naht ist reine Bytes und herstellerneutral: Sie synthetisiert keine Claims, verarbeitet keine URI-Referenzen und löst keine Hash-Bindings auf, und sie führt keine Netzwerk- oder Dateisystem-E/A durch. extract() gibt bei einem Fehltreffer null zurück und ist auf PDFs ohne Store günstig. Jede nicht-null-Extraktion hat die Härtungsgrenzen des JumbfBoxParser bereits passiert.
Dieses Modul meldet, was es prüft. Es zertifiziert kein Dokument, macht es nicht rechtsverbindlich und garantiert nicht, dass eine Ausgabe eine Regelung erfüllt. Der E-Rechnungs-Validator ist kein Validator einer Steuerbehörde und schließt nationale Erweiterungen aus (zum Beispiel italienisches SDI, französisches Chorus Pro, deutsches XRechnung). Wie EN 16931-1 festhält, bleibt der Rechnungsaussteller dafür verantwortlich, die Regeln der einschlägigen Gesetzgebung einzuhalten. Die Unterstützung eines Standards ist keine Konformität mit ihm. Wenden Sie sich für die aufsichtsrechtliche Hinlänglichkeit an Ihr Compliance-Team.
Sonderfälle & Fehlermodi
Abschnitt betitelt „Sonderfälle & Fehlermodi“- Eine wohlgeformte Nicht-Factur-X-PDF liefert ein „keine E-Rechnung“-Ergebnis; sie löst nicht aus.
- Eine leere Geschäftsregel-Verletzungsliste bedeutet für sich genommen nicht, dass das Dokument gültig ist; Wrapper- und Anhang-Prüfungen gelten ebenfalls.
FacturXEmbedderschlägt fail-closed bei Quellen fehl, die komprimierte Objekt-Streams (/Type /ObjStm) oder Cross-Reference-Streams (/Type /XRef, hybrid/XRefStm) verwenden. Speichern Sie solche Quellen zunächst mit einer klassischen Cross-Reference-Tabelle neu.- XML-Nutzlasten werden über den Core-
XmlGuardabgesichert: DOCTYPE- oder Entity-Deklarationen, übergroße Eingaben und ungültiges UTF-8 werden auf dem Einbettungspfad mit einerEInvoiceExceptionabgelehnt oder auf dem Validator-Pfad als fehlgeschlagenes Ergebnis. FacturXContractEmbedderlehnt dasXRECHNUNG-Profil laut ab, anstatt es stillschweigend herabzustufen; die XRechnung-Erzeugung ist eine Enterprise-Funktion.C2paManifestEmbedder::extract()unterscheidet Abwesenheit (null) von Fehlerhaftigkeit (C2paException-Unterklasse, die die verletzte Invariante benennt: fehlerhafte Struktur, Größen- oder Anzahl-Bombe, Offset-Zyklus, Verschachtelungstiefe).- Die Konstruktion von
ExperimentalC2paEmbedderlöst eineLogicExceptionaus, sofern das Preview-Umgebungs-Flag nicht'1'ist. Sein Wire-Format ist an einen C2PA-Draft-Snapshot gepinnt und kann sich ohne Vorankündigung ändern; es erzeugt keine Claim-Signatur. Diese Funktion bleibt Preview, bis das C2PA-PDF-Profil eingefroren wird. - Das Lax-Opt-out für strikte UA-2 ist veraltet; migrieren Sie zum strikten Standard (siehe Verhaltensvertrag).
- Dieses Modul führt keine kryptografische Signierung durch. C2PA-Claim-Signierung und Schlüsselverwahrung liegen außerhalb des Geltungsbereichs; siehe das Security-Modul für das Signierverhalten im FIPS-Modus.
Konformität
Abschnitt betitelt „Konformität“| Verhalten | Referenz | Status |
|---|---|---|
Deklaration der natürlichen Sprache (/Lang) | ISO 14289-2:2024 §8.4.4 | Geprüft / gemeldet |
| Semantisches Kernmodell der Rechnung | EN 16931-1:2026 | Geprüft (Aussteller bleibt verantwortlich) |
| Zugeordnete Dateien / Embedded-File-Streams | ISO 32000-2:2020 §14.13.2 | Erzeugt (/AF, /EF, /Params) |
| Anhangbeziehung und Container-Regeln | Factur-X 1.08 §3.1, §6.2 | Erzeugt / geprüft (Standard /AFRelationship /Alternative) |
| C2PA-Manifest-Store / JUMBF | C2PA 2.1 §11.1 | Einbetten / Extrahieren unterstützt; Claim-Synthese Preview |
Dies dokumentiert die Spezifikationen, gegen die das Modul entwickelt wurde, und was es prüft oder erzeugt. Es ist keine Aussage über Zertifizierung oder aufsichtsrechtliche Hinlänglichkeit. NextPDF hält keine Zertifizierung für diese Standards.
Entwicklungshinweise
Abschnitt betitelt „Entwicklungshinweise“- Die Datensatzform des Reporters ist ein stabiler Vertrag; nachgelagerte Alerting-Regeln dürfen sich am festen Ereignis-Diskriminator festmachen.
- Das Deaktivieren von striktem UA-2 gibt nur dann einen telemetriesichtbaren Deprecation-Notice aus, wenn sich der effektive Wert ändert; das erneute Setzen des aktuellen Werts bleibt still.
- Der Factur-X-Embedder bewahrt die Quell-Bytes wortgetreu und hängt neue Objekte an; er zielt darauf ab, die PDF/A-3-Konformität zu erhalten, validiert aber nicht erneut. Leiten Sie die Ausgabe für eine harte Attestierung durch einen externen PDF/A-Validator.
- Die C2PA-Naht friert fünf Invarianten ein: keine Drittanbieter-Importe, reiner Byte-Vertrag, keine E/A, null-bei-Fehltreffer-Extraktion und keine Claim-Synthese in der stabilen Schicht.
- Die Grenzen des
JumbfBoxParsersind öffentliche Konstanten; bemessen Sie die Eingaben, die Sie akzeptieren, an ihnen, anstatt Grenzen neu abzuleiten.
Veröffentlichungsgrenze
Abschnitt betitelt „Veröffentlichungsgrenze“Diese Seite dokumentiert ausschließlich extern beobachtbares Verhalten und die unterstützte öffentliche API-Oberfläche. Interne Namespace-Pfade, Hilfsklassen, Mechanismus-Tabellen, Runbook-Dateinamen und Ticket-Präfixe liegen außerhalb des Geltungsbereichs.