Enterprise Edition
Validierung — Ausführliche Referenz
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“Das Validierungsmodul führt vorgefertigte, schreibgeschützte strukturelle Compliance-Richtlinien gegen rohe PDF-Bytes aus. Compliance::assess() wendet genau eine CompliancePolicy an und gibt einen ComplianceReport mit nach Schweregrad partitionierten Befunden und einem verpflichtenden rechtlichen Haftungsausschluss zurück. Richtlinien werden ausgeliefert für PDF/A-4 (plus die Varianten e und f), PAdES-Baseline-Struktur, ein eIDAS-Strukturprofil, LTV/DSS-Gesundheit, ZUGFeRD / Factur-X, FDA 21 CFR Part 11 und SEC Rule 17a-4 WORM-Archivierung. Jede Richtlinie ist eine reine Funktion: Bytes hinein, Befunde heraus. Die Validierung verändert das Dokument niemals und führt niemals eine kryptografische Verifizierung durch.
Verfügbarkeit & Lizenzierung
Abschnitt betitelt „Verfügbarkeit & Lizenzierung“Diese Funktion wird in NextPDF Enterprise (nextpdf/enterprise) ausgeliefert und wird mit einem Lizenzumschlag der Enterprise-Stufe aktiviert. Eine Bereitstellung ohne diese Berechtigung lädt die Klassen der Funktion nicht. Editionen vergleichen und eine Lizenz erwerben.
Die Validierungs-/Evidence-Oberfläche wird durch die Funktion enterprise.compliance.evidence lizenziert. Eine verweigerte Berechtigung verweigert die Funktion, anstatt stillschweigend zu degradieren.
| Stufe | Validierungsoberfläche |
|---|---|
| Core | In-Process-Byte-Stream-Validatoren und ein Grammatik-Abgleich; ein Ergebnis ohne Befunde ist ein geprüftes Ergebnis, kein Zertifikat. |
| Pro | In-Process-Validierung von EN 16931 / Factur-X / ZUGFeRD auf der E-Rechnungs-Ebene; keine vorgefertigten PDF/A-4-, PAdES-, LTV-, FDA- oder SEC-Richtlinien. |
| Enterprise | Vorgefertigte Strukturrichtlinien für PDF/A-4, PAdES, LTV, ZUGFeRD, FDA Part 11 und SEC 17a-4 mit einem einheitlichen Bericht (dieses Modul). |
Das externe Sidecar-Gateway von Enterprise Compliance ist ein separates, eigenständiges Modul.
Öffentliche API-Oberfläche
Abschnitt betitelt „Öffentliche API-Oberfläche“composer require nextpdf/enterprise:^3| Symbol | Parameter | Standardverhalten | Rückgabe | Wirft oder scheitert mit | Hinweise |
|---|---|---|---|---|---|
Compliance::__construct | ?ClockInterface $clock = null | Systemuhr, wenn keine Uhr injiziert wird | — | — | DI-freundliche Instanzform; die Uhr stempelt validatedAt |
Compliance::run | string $pdfData, CompliancePolicy $policy, array $context = [] | Wendet genau eine Richtlinie an und misst die Wall-Clock-Dauer | ComplianceReport | Reicht Ausnahmen benutzerdefinierter Richtlinien weiter; eingebaute Richtlinien sammeln Befunde, anstatt zu werfen | Instanzmethode |
Compliance::assess (static) | string $pdfData, CompliancePolicy $policy, array $context = [] | Konstruiert eine Standardinstanz und delegiert an run() | ComplianceReport | Wie run() | Konfigurationsfreier Schnellpfad |
Policies::pdfA4 / ::pdfA4e / ::pdfA4f (static) | — | PDF/A-4-Strukturrichtlinie gemäß ISO 19005-4:2020 | CompliancePolicy | — | e erlaubt 3D-/Rich-Media-Annotationen; f ergänzt Prüfungen von Beziehungen eingebetteter Dateien |
Policies::padesBaseline (static) | — | PAdES-B-B-Strukturprüfungen | CompliancePolicy | — | Nur Struktur; keine kryptografische Verifizierung |
Policies::eidasQualified (static) | — | PAdES-Strukturprüfungen unter einem eIDAS-gekennzeichneten Profil | CompliancePolicy | — | Die Qualifikation hängt vom TSP und dem qualifizierten Zertifikat ab |
Policies::ltvHealth (static) | — | DSS-Struktur-Gesundheitsprüfung | CompliancePolicy | — | DSS-Präsenz aus dem aktiven Objektgraphen aufgelöst, fail-closed |
Policies::zugferd (static) | string $profile = 'BASIC' | Normalisiert den Profil-Alias und erstellt den ZUGFeRD-Validator | CompliancePolicy | \ValueError (unbekanntes Profil) | Profile: MINIMUM, BASIC, BASIC_WL, EN16931, EXTENDED |
Policies::fdaPart11 (static) | — | FDA-21-CFR-Part-11-Strukturrichtlinie | CompliancePolicy | — | Sieben Strukturprüfungen, einschließlich der Integrität der Hash-Kette des Audit-Trails |
Policies::sec17a4 / ::sec17a4Compatible / ::sec17a4Structural / ::sec17a4PreSign (static) | — | SEC-17a-4-WORM-Richtlinie mit der genannten Strenge | CompliancePolicy | — | Strenge wird auf WormComplianceLevel abgebildet |
CompliancePolicy (interface) | — | Strategie-Vertrag für einen Standard | — | — | getName(), getIdentifier(), getStandardReference(), validate(); kundenseitig implementierbar |
ComplianceReport | Readonly-Wertobjekt | Befunde bei der Konstruktion nach Schweregrad partitioniert | — | — | passes(), fails(), totalFindings(), getDisclaimer(); öffentlich findings, errors, warnings, infos, policyName, policyId, standard, validatedAt, durationMs |
ComplianceFinding | Severity $severity, string $ruleId, string $message, string $clause = '', string $suggestion = '' | Ein Regelergebnis mit Klauselreferenz und Behebungshinweis | — | — | Statisch error() / warning() / info(); isError() |
Severity (enum) | 3 string-basierte Fälle | Error, Warning, Info | — | — | Nur Error lässt einen Bericht scheitern |
WormComplianceLevel (enum) | 4 string-basierte Fälle | Full, Compatible, Structural, PreSign | — | — | requiresSignature(), requiresDocMdp(), requiresLtv(), maxDocMdpLevel() |
PdfAPolicy, PadesValidator, LtvHealthCheck, ZugferdValidator, Sec17a4WormPolicy, Fda\FdaPart11Policy | Konstruktoren pro Klasse | Implementieren jeweils CompliancePolicy für einen Standard | list<ComplianceFinding> aus validate() | — | Zu beziehen über Policies; Sec17a4WormPolicy::getLevel() legt die konfigurierte Strenge offen |
Fda\FdaSigningIntent (enum) | 6 string-basierte Fälle | Authoring, Review, Approval, Certification, Verification, Rejection | — | — | toPdfReasonString() liefert die kanonische /Reason-Zeichenfolge |
Fda\FdaAuditEvent::__construct | DateTimeImmutable $timestamp, string $actor, FdaSigningIntent $action, string $documentHash, string $certificateSerial, string $previousEventHash = '' | Berechnet den SHA-256-Kettenhash bei der Konstruktion | — | InvalidArgumentException (Zeitstempel nicht UTC) | Öffentlich eventHash; toXmpRdf() serialisiert ein XMP-Listenelement |
Fda\FdaAuditTrail::addEvent | FdaAuditEvent $event | Hängt das Ereignis an, wenn seine Kettenverknüpfung mit dem Ende des Trails übereinstimmt | self | InvalidArgumentException (Hash-Kette unterbrochen) | Außerdem createEvent(), verifyChain(), getLastEventHash(), getEvents(), embedInMetadata() |
Fda\FdaSignatureEnforcer::configureSeedValue | FdaSigningIntent $intent, string $tsaUrl | Erstellt eine FDA-beschränkte Signatur-Seed-Value-Konfiguration | SeedValueConfig | — | Erfordert das FDA-Reason-Set, einen Zeitstempel und SHA-256 oder stärkere Digests |
Fda\FdaSignatureEnforcer::applyTo | SequentialSigner $signer, SigningStrategy $strategy, string $signerName, FdaSigningIntent $intent, string $tsaUrl, string $fieldName = '', ?string $reason = null | Fügt einem Pro-SequentialSigner einen FDA-beschränkten Signierer hinzu | SequentialSigner | — | Serialisiert die Einschränkungen in das erzeugte Signaturfeld |
namespace NextPDF\Enterprise\Validation;
final readonly class Compliance{ public function __construct(?ClockInterface $clock = null);
/** @param array<string, mixed> $context */ public function run(string $pdfData, CompliancePolicy $policy, array $context = []): ComplianceReport;
/** @param array<string, mixed> $context */ public static function assess(string $pdfData, CompliancePolicy $policy, array $context = []): ComplianceReport;}final class Policies{ public static function pdfA4(): CompliancePolicy; // also pdfA4e(), pdfA4f() public static function padesBaseline(): CompliancePolicy; public static function eidasQualified(): CompliancePolicy; public static function ltvHealth(): CompliancePolicy; public static function zugferd(string $profile = 'BASIC'): CompliancePolicy; public static function fdaPart11(): CompliancePolicy; public static function sec17a4(): CompliancePolicy; // also sec17a4Compatible(), sec17a4Structural(), sec17a4PreSign()}interface CompliancePolicy{ public function getName(): string;
public function getIdentifier(): string;
public function getStandardReference(): string;
/** * @param array<string, mixed> $context * @return list<ComplianceFinding> */ public function validate(string $pdfData, array $context = []): array;}
final readonly class ComplianceReport{ public const string LEGAL_DISCLAIMER;
public function passes(): bool;
public function fails(): bool;
public function totalFindings(): int;
public function getDisclaimer(): string;}Verhaltensvertrag
Abschnitt betitelt „Verhaltensvertrag“Compliance::assess() (statisch) und Compliance::run() (Instanz, mit einer injizierbaren Psr\Clock\ClockInterface) wenden genau eine Richtlinie an und geben einen ComplianceReport zurück. Extern beobachtbare Regeln:
- Rein schreibgeschützt. Jede
CompliancePolicy::validate()ist eine reine Funktion: Bytes hinein, Befunde heraus. Eine Richtlinie verändert PDF-Bytes niemals. Diese architektonische Invariante hält die Validierung getrennt von Auto-Fix und vom Evidence-Modul. - Schweregrad-Gate.
ComplianceReport::passes()ist nur dann wahr, wennerrors === []. Warnungen und Infos lassen einen Bericht niemals scheitern.fails()ist das Komplement. - Verpflichtender Haftungsausschluss.
ComplianceReport::getDisclaimer()gibt den konstanten Text des rechtlichen Haftungsausschlusses zurück. Seine Darstellung in nutzerseitiger Ausgabe wird vom Vertrag verlangt. - Berichtsherkunft. Der Bericht trägt den Richtliniennamen, den Bezeichner und die Standardreferenz aus der Richtlinie, den Validierungszeitstempel aus der injizierten oder der Systemuhr sowie die gemessene Dauer in Millisekunden.
- Sammeln, nicht abbrechen. Eingebaute Richtlinien führen alle zutreffenden Prüfungen aus und sammeln jeden Befund, anstatt beim ersten Fehler anzuhalten.
- Nur katalog-erreichbares DSS.
LtvHealthChecklöst die DSS-Präsenz aus dem aktiven Objektgraphen auf: aktiver Trailer, dann/Root-Katalog, dann/DSSund seine Unterschlüssel. Markerbytes, die in Kommentaren, Zeichenfolgen, verwaisten Objekten oder überholten Revisionen platziert sind, zählen nicht. Nicht parsebare Eingaben werden als kein DSS behandelt, sodass die Prüfung fail-closed ist. Die Prüfung ist strukturell; sie verifiziert eingebettete OCSP-/CRL-Daten nicht kryptografisch. - Strukturelle Signaturprüfungen.
Policies::padesBaseline()undPolicies::eidasQualified()validieren die PAdES-Struktur nur auf PDF-Ebene. Die Qualifikation unter eIDAS hängt vom TSP und vom qualifizierten Zertifikat ab, die außerhalb dieses Moduls liegen. - Richtlinien für regulierte Branchen sind strukturell.
FdaPart11Policyprüft das Vorhandensein der Signatur, die/Reason-Absicht, die/M-Signierzeit, die/Name-Identität, das Fehlen von JavaScript, den FDA-Audit-Trail-Namensraum und die Integrität der Hash-Kette.Sec17a4WormPolicyprüft bis zu 13 WORM-Regeln;WormComplianceLevelwählt die Strenge.Fullverlangt DocMDP-Level 1,Compatibleakzeptiert Level 2, undStructural/PreSignüberspringen die Signatur-, DocMDP- und DSS-Regeln. Keine der Richtlinien begründet rechtliche Compliance. - ZUGFeRD-Kontext.
Policies::zugferd()prüft stets die Anforderungen auf PDF-Ebene. Es validiert das Rechnungs-XML nur, wenn der Aufrufer['xml' => $xmlData]in$contextübergibt; andernfalls gibt es den Info-Befundzugferd-xml-skippedaus. - Manipulationssicherer Audit-Trail.
FdaAuditTrailist eine ausschließlich anfügende SHA-256-Hash-Kette.addEvent()weist eine unterbrochene Verknüpfung zurück,verifyChain()leitet jeden Hash neu ab, undembedInMetadata()schreibt den Trail in XMP unterhttp://ns.nextpdf.dev/fda/1.0/mit einem PDF/A-Erweiterungsschema.
Grenzfälle & Fehlermodi
Abschnitt betitelt „Grenzfälle & Fehlermodi“- Eine Nicht-PDF- oder leere Eingabe liefert in den eingebauten Richtlinien Fehlerbefunde statt einer Ausnahme. Prüfen Sie stets
passes()und stellen Sie den Haftungsausschluss dar. Policies::zugferd()normalisiert Profil-Aliasse (BASIC_WL,EN16931,EN_16931). Ein unbekanntes Profil löst zur Factory-Zeit\ValueErroraus, bevor irgendeine Validierung läuft.- Ein DSS mit CRLs, aber ohne OCSP-Antworten erfüllt die Prüfung des Revocation-Materials; der Befund vermerkt die akzeptable Alternative. Wenn keines von beiden vorhanden ist, ist dies ein Fehler.
- Ein fehlendes
/VRI-Dictionary oder/Certs-Array erzeugt Warnungen, keine Fehler; der Bericht kann dennoch bestehen. FdaAuditEventweist jeden Nicht-UTC-Zeitstempel bei der Konstruktion mitInvalidArgumentExceptionzurück.FdaAuditTrail::verifyChain()gibt bei jedem manipulierten oder umgeordneten Ereignis false zurück; es wirft niemals.- Benutzerdefinierte
CompliancePolicy-Implementierungen können ausvalidate()werfen;Compliance::run()fängt nicht ab, sodass solche Ausnahmen an den Aufrufer weitergereicht werden.
FIPS-Modus-Verhalten
Abschnitt betitelt „FIPS-Modus-Verhalten“Dieses Modul führt keine Signierung, keine kryptografische Verifizierung und keine Schlüsselverwahrung durch. Die Algorithmusrichtlinie im FIPS-Modus wird von den Modulen Security und Signature geregelt. FdaSignatureEnforcer-Seed-Values beschränken FDA-gebundene Signaturfelder auf die Digest-Methoden SHA-256, SHA-384 oder SHA-512.
Konformität
Abschnitt betitelt „Konformität“Diese Richtlinien prüfen strukturelle Attribute gegen die genannten Standards. Das Konformitätsurteil für ISO-/ETSI-Profile bleibt eine Eigenschaft der endgültigen Datei plus eines externen Validators.
| Verhalten | Referenz |
|---|---|
| Konformität wird gegen den Standard bestimmt, nicht gegen den Produzenten | ISO 19005-4:2020 §5.2 |
| Digitales Signatur-Dictionary / DSS für die Langzeitvalidierung | ISO 32000-2:2020 §12.8 |
DSS ist ein Dictionary, das vom DSS-Schlüssel des Dokumentkatalogs gehalten wird | ISO 32000-2:2020 §12.8.4.3 |
| PAdES-Baseline-Signaturstufen | ETSI EN 319 142-1 §5.4.3 |
| Semantisches Modell des EN-16931-Profils (unterstützende Referenz) | Factur-X 1.08 (EN 16931) |
Die Richtlinien für FDA 21 CFR Part 11 und SEC 17a-4 prüfen ausschließlich strukturelle Attribute; diese Vorschriften liegen außerhalb des Verifizierungskorpus und tragen keinen verifizierten Konformitätsanspruch. Die Klausel-Zeichenfolgen innerhalb von FDA-Befunden (zum Beispiel §11.50, §11.10(e)) sind vom Produkt ausgegebene Regelreferenzen. Die EN-16931-Zeile ist eine unterstützende Referenz unterhalb der Retrieval-Schwelle; sie ist kein harter Konformitätsanspruch. Die Unterstützung eines Standards ist keine Konformität mit ihm, und Konformität ist keine Zertifizierung — NextPDF besitzt keine Zertifizierung und gewährt keine. Diese Referenz ist kein Rechtsgutachten; konsultieren Sie Ihr Compliance-Team hinsichtlich der rechtlichen Hinlänglichkeit.
Entwicklungshinweise
Abschnitt betitelt „Entwicklungshinweise“- Die Validierung läuft in-process und lokal ohne Netzwerk-I/O. Eine Richtlinie kann die Eingabe nicht verändern.
- Behandeln Sie PDF-Bytes aus nicht vertrauenswürdigen Quellen als feindlich. Die eingebauten Richtlinien sind total über beliebige Bytes und sind fail-closed, wo die Struktur nicht aufgelöst werden kann.
- Stellen Sie
ComplianceReport::getDisclaimer()in jeder nutzerseitigen Darstellung eines Berichts dar. - Berichte und Befunde können personenbezogene Daten aus signierten Dokumenten und Audit-Trail-Metadaten enthalten (Signierernamen, Zertifikatsseriennummern). Der Betreiber verantwortet die Aufbewahrungs- und Minimierungskontrollen.
- Benutzerdefinierte Richtlinien implementieren
CompliancePolicy; halten SiegetIdentifier()über alle Richtlinien hinweg eindeutig für Serialisierung und Caching. - Dieses Modul betrifft kryptografische Funktionalität; behandeln Sie es in Ihrer eigenen Prüfung als sicherheitsrelevant.
- Interne Mechanismusdetails verbleiben in der internen Dokumentation des Quell-Repositorys und liegen außerhalb des Umfangs dieses Handbuchs.
Veröffentlichungsgrenze
Abschnitt betitelt „Veröffentlichungsgrenze“Diese Seite dokumentiert ausschließlich extern beobachtbares Verhalten und die unterstützte öffentliche API-Oberfläche. Interne Namensraumpfade, Hilfsklassen, Mechanismustabellen, Runbook-Dateinamen und Ticket-Präfixe liegen außerhalb des Umfangs.