Enterprise editie
Validation — Diepe referentie
In één oogopslag
Sectie met titel “In één oogopslag”De Validation-module voert kant-en-klare, read-only structurele compliance-policies uit tegen ruwe PDF-bytes. Compliance::assess() past precies één CompliancePolicy toe en retourneert een ComplianceReport met naar ernst gepartitioneerde bevindingen en een verplichte juridische disclaimer. Er worden policies geleverd voor PDF/A-4 (plus de e- en f-varianten), PAdES baseline-structuur, een eIDAS-structuurprofiel, LTV/DSS-gezondheid, ZUGFeRD / Factur-X, FDA 21 CFR Part 11 en SEC Rule 17a-4 WORM-archivering. Elke policy is een pure functie: bytes erin, bevindingen eruit. Validation wijzigt het document nooit en voert nooit cryptografische verificatie uit.
Beschikbaarheid en licentie
Sectie met titel “Beschikbaarheid en licentie”Deze capaciteit wordt geleverd in NextPDF Enterprise (nextpdf/enterprise) en wordt geactiveerd met een licentie-envelope op Enterprise-niveau. Een deployment zonder dat recht laadt de classes van de capaciteit niet. Vergelijk edities en vraag een licentie aan.
Het Validation/Evidence-oppervlak wordt gelicentieerd door de capaciteit enterprise.compliance.evidence. Een geweigerd recht weigert de functie in plaats van stilzwijgend te degraderen.
| Tier | Validation-oppervlak |
|---|---|
| Core | In-process byte-stream-validators en een grammaticakruiscontrole; een resultaat zonder bevindingen is een gecontroleerd resultaat, geen certificaat. |
| Pro | In-process EN 16931 / Factur-X / ZUGFeRD-validatie op de e-factuurlaag; geen kant-en-klare policies voor PDF/A-4, PAdES, LTV, FDA of SEC. |
| Enterprise | Kant-en-klare structurele policies voor PDF/A-4, PAdES, LTV, ZUGFeRD, FDA Part 11 en SEC 17a-4 met één gecombineerd rapport (deze module). |
De external-sidecar-gateway van Enterprise Compliance is een afzonderlijke, onderscheiden module.
Publiek API-oppervlak
Sectie met titel “Publiek API-oppervlak”composer require nextpdf/enterprise:^3| Symbool | Parameters | Standaardgedrag | Retourneert | Werpt of faalt met | Opmerkingen |
|---|---|---|---|---|---|
Compliance::__construct | ?ClockInterface $clock = null | Systeemklok wanneer er geen klok wordt geïnjecteerd | — | — | DI-vriendelijke instance-vorm; de klok stempelt validatedAt |
Compliance::run | string $pdfData, CompliancePolicy $policy, array $context = [] | Past precies één policy toe en meet de wall-clock-duur | ComplianceReport | Propageert exceptions van custom policies; ingebouwde policies verzamelen bevindingen in plaats van te werpen | Instance-methode |
Compliance::assess (static) | string $pdfData, CompliancePolicy $policy, array $context = [] | Construeert een default-instance en delegeert naar run() | ComplianceReport | Zoals bij run() | Fast path zonder configuratie |
Policies::pdfA4 / ::pdfA4e / ::pdfA4f (static) | — | PDF/A-4-structuurpolicy volgens ISO 19005-4:2020 | CompliancePolicy | — | e staat 3D/rich-media-annotaties toe; f voegt controles op ingebedde-bestandsrelaties toe |
Policies::padesBaseline (static) | — | PAdES B-B-structuurcontroles | CompliancePolicy | — | Alleen structuur; geen cryptografische verificatie |
Policies::eidasQualified (static) | — | PAdES-structuurcontroles onder een eIDAS-gelabeld profiel | CompliancePolicy | — | Kwalificatie is afhankelijk van de TSP en het gekwalificeerde certificaat |
Policies::ltvHealth (static) | — | Structurele gezondheidscontrole van de DSS | CompliancePolicy | — | DSS-aanwezigheid wordt bepaald uit de actieve objectgraaf, fail-closed |
Policies::zugferd (static) | string $profile = 'BASIC' | Normaliseert de profielalias en bouwt de ZUGFeRD-validator | CompliancePolicy | \ValueError (onbekend profiel) | Profielen: MINIMUM, BASIC, BASIC_WL, EN16931, EXTENDED |
Policies::fdaPart11 (static) | — | FDA 21 CFR Part 11-structuurpolicy | CompliancePolicy | — | Zeven structurele controles, waaronder integriteit van de audit-trail-hashketen |
Policies::sec17a4 / ::sec17a4Compatible / ::sec17a4Structural / ::sec17a4PreSign (static) | — | SEC 17a-4 WORM-policy op de genoemde striktheid | CompliancePolicy | — | Striktheid wordt gemapt op WormComplianceLevel |
CompliancePolicy (interface) | — | Strategy-contract voor één standaard | — | — | getName(), getIdentifier(), getStandardReference(), validate(); door klant implementeerbaar |
ComplianceReport | Readonly value-object | Bevindingen bij constructie gepartitioneerd naar ernst | — | — | passes(), fails(), totalFindings(), getDisclaimer(); publieke findings, errors, warnings, infos, policyName, policyId, standard, validatedAt, durationMs |
ComplianceFinding | Severity $severity, string $ruleId, string $message, string $clause = '', string $suggestion = '' | Eén regelresultaat met clausulereferentie en herstelhint | — | — | Static error() / warning() / info(); isError() |
Severity (enum) | 3 string-gebaseerde cases | Error, Warning, Info | — | — | Alleen Error laat een rapport falen |
WormComplianceLevel (enum) | 4 string-gebaseerde cases | Full, Compatible, Structural, PreSign | — | — | requiresSignature(), requiresDocMdp(), requiresLtv(), maxDocMdpLevel() |
PdfAPolicy, PadesValidator, LtvHealthCheck, ZugferdValidator, Sec17a4WormPolicy, Fda\FdaPart11Policy | Constructors per class | Implementeren elk CompliancePolicy voor één standaard | list<ComplianceFinding> uit validate() | — | Verkrijg via Policies; Sec17a4WormPolicy::getLevel() toont de geconfigureerde striktheid |
Fda\FdaSigningIntent (enum) | 6 string-gebaseerde cases | Authoring, Review, Approval, Certification, Verification, Rejection | — | — | toPdfReasonString() levert de canonieke /Reason-string op |
Fda\FdaAuditEvent::__construct | DateTimeImmutable $timestamp, string $actor, FdaSigningIntent $action, string $documentHash, string $certificateSerial, string $previousEventHash = '' | Berekent de SHA-256-ketenhash bij constructie | — | InvalidArgumentException (timestamp niet UTC) | Publieke eventHash; toXmpRdf() serialiseert één XMP-lijstitem |
Fda\FdaAuditTrail::addEvent | FdaAuditEvent $event | Voegt de event toe wanneer de ketenschakel overeenkomt met het staarteinde van de trail | self | InvalidArgumentException (hashketen verbroken) | Ook createEvent(), verifyChain(), getLastEventHash(), getEvents(), embedInMetadata() |
Fda\FdaSignatureEnforcer::configureSeedValue | FdaSigningIntent $intent, string $tsaUrl | Bouwt een FDA-beperkte seed-value-configuratie voor handtekeningen | SeedValueConfig | — | Vereist de FDA-redenenset, een timestamp en SHA-256- of sterkere digests |
Fda\FdaSignatureEnforcer::applyTo | SequentialSigner $signer, SigningStrategy $strategy, string $signerName, FdaSigningIntent $intent, string $tsaUrl, string $fieldName = '', ?string $reason = null | Voegt een FDA-beperkte ondertekenaar toe aan een Pro-SequentialSigner | SequentialSigner | — | Serialiseert de beperkingen in het geproduceerde handtekeningveld |
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;}Gedragscontract
Sectie met titel “Gedragscontract”Compliance::assess() (static) en Compliance::run() (instance, met een injecteerbare Psr\Clock\ClockInterface) passen precies één policy toe en retourneren een ComplianceReport. Extern waarneembare regels:
- Puur read-only. Elke
CompliancePolicy::validate()is een pure functie: bytes erin, bevindingen eruit. Een policy wijzigt nooit PDF-bytes. Deze architecturale invariant houdt validatie gescheiden van auto-fix en van de Evidence-module. - Ernst-gate.
ComplianceReport::passes()is alleen true wanneererrors === []. Waarschuwingen en infos laten een rapport nooit falen.fails()is het complement. - Verplichte disclaimer.
ComplianceReport::getDisclaimer()retourneert de constante juridische-disclaimertekst. Het tonen ervan in de uitvoer die de gebruiker te zien krijgt is vereist door het contract. - Rapportherkomst. Het rapport draagt de policynaam, identifier en standaardreferentie van de policy, de validatie-timestamp van de geïnjecteerde of systeemklok, en de gemeten duur in milliseconden.
- Verzamelen, niet afbreken. Ingebouwde policies voeren alle toepasselijke controles uit en verzamelen elke bevinding in plaats van te stoppen bij de eerste fout.
- Alleen via catalogus bereikbare DSS.
LtvHealthCheckbepaalt DSS-aanwezigheid uit de actieve objectgraaf: actieve trailer, dan de/Root-catalogus, dan/DSSen de subsleutels ervan. Markerbytes die zijn geplant in comments, strings, weesobjecten of vervangen revisies tellen niet mee. Niet-parseerbare invoer wordt behandeld als geen DSS, dus de controle faalt gesloten. De controle is structureel; hij verifieert ingebedde OCSP/CRL-gegevens niet cryptografisch. - Structurele handtekeningcontroles.
Policies::padesBaseline()enPolicies::eidasQualified()valideren de PAdES-structuur uitsluitend op PDF-niveau. Kwalificatie onder eIDAS is afhankelijk van de TSP en het gekwalificeerde certificaat, die buiten deze module vallen. - Beleidsregels voor gereguleerde sectoren zijn structureel.
FdaPart11Policycontroleert aanwezigheid van handtekening,/Reason-intentie,/M-ondertekeningstijd,/Name-identiteit, afwezigheid van JavaScript, de FDA-audit-trail-namespace en integriteit van de hashketen.Sec17a4WormPolicycontroleert tot 13 WORM-regels;WormComplianceLevelselecteert de striktheid.Fullvereist DocMDP-niveau 1,Compatibleaccepteert niveau 2, enStructural/PreSignslaan de regels voor handtekening, DocMDP en DSS over. Geen van beide policies stelt juridische naleving vast. - ZUGFeRD-context.
Policies::zugferd()controleert altijd de vereisten op PDF-niveau. Het valideert factuur-XML alleen wanneer de aanroeper['xml' => $xmlData]in$contextdoorgeeft; anders zendt het de info-bevindingzugferd-xml-skippeduit. - Manipulatie-aantoonbare audit trail.
FdaAuditTrailis een alleen-toevoegende SHA-256-hashketen.addEvent()weigert een verbroken schakel,verifyChain()leidt elke hash opnieuw af, enembedInMetadata()schrijft de trail in XMP onderhttp://ns.nextpdf.dev/fda/1.0/met een PDF/A-uitbreidingsschema.
Randgevallen en foutmodi
Sectie met titel “Randgevallen en foutmodi”- Een niet-PDF- of lege invoer levert in de ingebouwde policies foutbevindingen op in plaats van een exception. Controleer altijd
passes()en toon de disclaimer. Policies::zugferd()normaliseert profielaliassen (BASIC_WL,EN16931,EN_16931). Een onbekend profiel werpt\ValueErrorop factory-moment, voordat er enige validatie draait.- Een DSS met CRLs maar zonder OCSP-responses voldoet aan de controle op herroepingsmateriaal; de bevinding vermeldt het aanvaardbare alternatief. Geen van beide aanwezig is een fout.
- Een ontbrekend
/VRI-dictionary of/Certs-array levert waarschuwingen op, geen fouten; het rapport kan nog steeds slagen. FdaAuditEventweigert elke niet-UTC-timestamp metInvalidArgumentExceptionbij constructie.FdaAuditTrail::verifyChain()retourneert false bij elke gemanipuleerde of herordende event; het werpt nooit.- Custom
CompliancePolicy-implementaties mogen vanuitvalidate()werpen;Compliance::run()vangt niet, dus dergelijke exceptions propageren naar de aanroeper.
FIPS-modusgedrag
Sectie met titel “FIPS-modusgedrag”Deze module voert geen ondertekening, geen cryptografische verificatie en geen sleutelbeheer uit. Het FIPS-modus-algoritmebeleid wordt beheerd door de Security- en Signature-modules. FdaSignatureEnforcer-seed values beperken FDA-gebonden handtekeningvelden tot de digest-methoden SHA-256, SHA-384 of SHA-512.
Conformiteit
Sectie met titel “Conformiteit”Deze policies controleren structurele attributen aan de hand van de benoemde standaarden. Het conformiteitsoordeel voor ISO/ETSI-profielen blijft een eigenschap van het uiteindelijke bestand plus een externe validator.
| Gedrag | Referentie |
|---|---|
| Conformiteit bepaald ten opzichte van de standaard, niet de producent | ISO 19005-4:2020 §5.2 |
| Digitalehandtekening-dictionary / DSS voor validatie op lange termijn | ISO 32000-2:2020 §12.8 |
DSS is een dictionary die wordt gehouden door de DSS-sleutel van de documentcatalogus | ISO 32000-2:2020 §12.8.4.3 |
| PAdES baseline-handtekeningniveaus | ETSI EN 319 142-1 §5.4.3 |
| Semantisch model van het EN 16931-profiel (ondersteunende referentie) | Factur-X 1.08 (EN 16931) |
De policies voor FDA 21 CFR Part 11 en SEC 17a-4 controleren uitsluitend structurele attributen; die regelgeving valt buiten het verificatiecorpus en draagt geen geverifieerde conformiteitsclaim. De clausulestrings binnen FDA-bevindingen (bijvoorbeeld §11.50, §11.10(e)) zijn door het product uitgezonden regelreferenties. De EN 16931-rij is een ondersteunende referentie onder de ophaaldrempel; het is geen harde conformiteitsclaim. Ondersteuning van een standaard is geen conformiteit ermee, en conformiteit is geen certificering — NextPDF bezit geen certificering en verleent die ook niet. Deze referentie is geen juridisch oordeel; raadpleeg je complianceteam voor de juridische toereikendheid.
Ontwikkelaarsnotities
Sectie met titel “Ontwikkelaarsnotities”- Validation draait in-process en lokaal zonder netwerk-I/O. Een policy kan de invoer niet wijzigen.
- Behandel PDF-bytes uit niet-vertrouwde bronnen als vijandig. De ingebouwde policies zijn totaal over willekeurige bytes en falen gesloten waar de structuur niet kan worden bepaald.
- Toon
ComplianceReport::getDisclaimer()in elke weergave van een rapport die de gebruiker te zien krijgt. - Rapporten en bevindingen kunnen persoonsgegevens dragen uit ondertekende documenten en audit-trail-metadata (namen van ondertekenaars, certificaatserienummers). De operator is eigenaar van de bewaar- en minimalisatiecontroles.
- Custom policies implementeren
CompliancePolicy; houdgetIdentifier()uniek over alle policies voor serialisatie en caching. - Deze module betreft cryptografische functionaliteit; behandel hem in je eigen review als beveiligingsgevoelig.
- Interne mechanismedetails blijven in de interne documentatie van de bronrepository en vallen buiten de scope van deze handleiding.
Publicatiegrens
Sectie met titel “Publicatiegrens”Deze pagina documenteert uitsluitend extern waarneembaar gedrag en het ondersteunde publieke API-oppervlak. Interne namespace-paden, helper-classes, mechanismetabellen, runbook-bestandsnamen en ticketprefixen vallen buiten de scope.