Ga naar inhoud
getnextpdf.com

Pro editie

Compliance — Diepe referentie

De Compliance-module bundelt drie onafhankelijke oppervlakken onder NextPDF\Pro\Compliance:

  • Taaltag-rapportage — een strikte PDF/UA-2-/Lang-beleidsfacade plus een gestructureerde, PSR-3-gevormde compliance-event-reporter.
  • E-invoice-afhandeling — Factur-X 1.08- / ZUGFeRD 2.4-validatie tegen het EN 16931-semantische model, en hybride PDF/A-3-emissie.
  • Provenance — bed door de aanroeper geleverde C2PA-manifest-stores in en extraheer ze via een adversarieel-gehardende JUMBF-parser; claim-synthese blijft preview-gated.

De module rapporteert wat hij controleert. Het certificeert geen documenten en voert geen cryptografische ondertekening uit.

Deze capability wordt geleverd in NextPDF Pro (nextpdf/pro) en activeert met een Pro-tier-licentie-envelope. Een deployment zonder die entitlement laadt de klassen van de capability niet. Vergelijk edities en vraag een licentie aan.

Er bestaat geen licentievlag per functie. Dit is een Pro-editie-capability. De experimentele C2PA-claim-builder vereist daarnaast een expliciete omgevings-opt-in (zie Randgevallen en faalmodi).

Terminal window
composer require nextpdf/pro:^3
SymboolParametersStandaardgedragRetourneertWerpt of faalt metNotities
LangComplianceReporter::warn() / ::error()string $tag, string $reason, ?string $clauseReference = nullZendt één gestructureerde JSON-record per taaltag-gebeurtenis uit via de PSR-3-loggervoidJsonException als de record niet JSON-encodeerbaar iswarn = lax-mode-reject; error = strict-mode-reject
LangComplianceReporter::reportException()InvalidBcp47TagException $exception, string $severity = 'error'Haalt tag en reden uit de exceptie; delegeert naar warn() of error()voidZoals hierbovenGemakspad
LangComplianceReporter::buildRecord()string $severity, string $tag, string $reason, ?string $clauseReference = nullBouwt de record-array zonder te loggenarrayWerpt nietVoor eigen sinks zoals JSON-samenvattingen per bestand
ConformancePolicy::default()?LoggerInterface $logger = nullStrikt UA-2-beleid: misvormde of niet-geregistreerde /Lang-tags worden afgewezenselfWerpt nietDe v5.0-standaard is strikt
ConformancePolicy::fromCore()CoreConformancePolicy $core, ?LoggerInterface $logger = nullWikkelt een bestaand Core-beleid ongewijzigd; geen assen omgezetselfWerpt nietVerkies default() voor de strikte houding
ConformancePolicy::withStrictUa2()bool $enabledRetourneert een kopie met de strikte as gezet; uitschakelen zendt een PSR-3-notice uitselfWerpt nietDeprecated opt-out; verwijderdoel 6.0.0
ConformancePolicy::isStrictUa2() / ::mode()Leest het onderliggende Core-beleidbool / ConformanceModeWerpt niet
EInvoiceValidator::validate()string $pdfPathVolledige pijplijn: PDF/A-3-wrapper-controle, attachment-extractie, profieldetectie, EN 16931-regels, SchematronEInvoiceValidationResultEInvoiceException-subklasse bij I/O-fout, misvormde PDF-structuur of tooling-crashBevroren SPI-interface; een welgevormde niet-e-invoice-PDF retourneert een resultaat, werpt nooit
EInvoiceXmlValidator::validate()string $xmlPayload, ValidatorContext $contextStructurele pre-flight plus het EN 16931-diepsemantische regelcorpus over een CII-payloadcontract ValidationResultWerpt niet bij ongeldige invoer; afwijzing verschijnt als een gefaald resultaat met findingsConcrete cross-tier-validator; invoer gate’t via XmlGuard
EInvoiceValidationResult::isValid()Alleen true wanneer wrapper, attachment-spec, profiel en syntax kloppen en geen FATAL-overtreding bestaatboolWerpt nietEen lege overtredingslijst alleen is geen geldigheid
EInvoiceValidationResult::notAnEInvoice()Deterministisch resultaat met alles-null, alles-falseselfWerpt nietFactory voor het geval “geen hybride factuur”
EInvoiceProfilestring-backed enumCases MINIMUM, BASIC_WL, BASIC, EN16931, EXTENDED, gebaseerd op BT-24-URN’sisEn16931Conformant() is false voor MINIMUM en BASIC_WL
EInvoiceSyntaxstring-backed enumCases UN_CEFACT_CII, UBL_INVOICE, UBL_CREDIT_NOTEAlleen CII is isFacturXEligible(); UBL is validator-only
BusinessRuleViolationstring $ruleId, BusinessRuleSeverity $severity, string $message, ?string $xpath = null, ?string $ramPath = nullOnveranderlijke overtredings-DTORule-id-families BR-, BR-CO-, BR-CL-, BR-DEC-, BR-FXEXT-
BusinessRuleSeveritystring-backed enumFATAL maakt de factuur ongeldig; WARNING markeert een kwaliteitszorgSpiegelt de EN 16931-Schematron-niveaus
FacturXEmbedder::embed()zie signatuur-fenceVoegt een embedded-file-stream, filespec en XMP toe aan een PDF/A-bron; herschrijft de xrefvoidEInvoiceException bij misvormde XML, onleesbare bron, ontbrekende catalog, object-stream- of xref-stream-bron, of schrijffout van de uitvoerHet bronbestand blijft intact
FacturXEmbedderOptions::default()/AFRelationship /Alternative, bestandsnaam factur-x.xml, type INVOICE, versie 1.0selfWerpt nietStandaarden voldoen aan het Duitse mandaat en blijven geaccepteerd in Frankrijk
FacturXEmbedderOptions::withRelationship() / ::withFilename()stringRetourneert een kopie met de override toegepastselfInvalidArgumentException buiten de acceptatiesetsRelationships: Source, Data, Alternative; bestandsnamen omvatten zugferd-invoice.xml en xrechnung.xml
FacturXEmbedderOptions::withDocumentType()string $documentTypeRetourneert een kopie met de XMP-document-type-overrideselfWerpt nietWaarden worden niet defensief opgesomd
FacturXContractEmbedder::embed()string $pdfBytes, string $xmlPayload, EmbedderOptions $optionsByte-in, byte-uit-adapter over FacturXEmbedder via kortlevende tijdelijke bestandenstringEInvoiceException; het XRECHNUNG-profiel wordt afgewezen als Enterprise-onlyCross-tier-EmbedderInterface-implementatie
C2paManifestEmbedder::embed()string $pdfBytes, ManifestStore $storeBedt de byte-serialisatie van de store in op de profiellocatiestringC2paException bij elke embed-foutBevroren SPI-interface; alleen bytes, geen I/O
C2paManifestEmbedder::extract()string $pdfBytesParseert een ingebedde store via de gehardende JUMBF-parserManifestStore|nullC2paException-subklasse wanneer een store aanwezig is maar een hardening-cap overschrijdtNull signaleert afwezigheid; afwezigheid werpt nooit
ManifestStore::fromBoxes() / ::empty()list<JumbfBox> / —Bouwt het onveranderlijke store-value-objectselfWerpt nietBox-volgorde is bepalend voor round-trip-gelijkheid
ManifestStore::toBytes() / ::isEmpty() / ::size()Serialiseert de root-boxes; een lege store serialiseert naar een lege stringstring / bool / intWerpt niet
JumbfBoxParser::parse()string $bytesParseert root-level-JUMBF-boxes onder harde capslist<JumbfBox>MalformedJumbfException, JumbfBombException, JumbfCycleDetectedException, JumbfDepthExceededExceptionCaps: diepte 8, 64 MiB per box, 128 MiB totaal, MAX_CHILDREN_PER_SUPERBOX 4096
JumbfBox::superbox() / ::leaf()string $tbox, …Bouwt een gevalideerde box; toBytes() round-trips via de parserselfMalformedJumbfException wanneer de TBox niet precies 4 bytes is
C2paCapabilityStatus::current() / ::summary()Rapporteert de C2PA-capability-maturiteit, momenteel preview-draftself / stringWerpt nietMachine-checkbare preview-marker
Feature::PREVIEW_C2PA_DRAFT->isEnabled()Leest de proces-omgeving bij elke aanroep; alleen de letterlijke '1' schakelt inboolWerpt nietEnv-var NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT
ExperimentalC2paEmbedder::buildManifestStore()string $sourceBytes, string $producerBouwt een draft-gepinde manifest-store met één SHA-256-hash-binding-claim-assertionManifestStoreDe constructor werpt LogicException wanneer de preview-vlag uit staatPreview; wire-formaat gepind aan een draft-snapshot; geen claim-signature uitgezonden

Entry-point-signaturen, verbatim:

public static function default(?LoggerInterface $logger = null): self
public function withStrictUa2(bool $enabled): self
public function isStrictUa2(): bool
public function validate(string $pdfPath): EInvoiceValidationResult
public function embed(
string $sourcePdfPath,
string $xml,
EInvoiceProfile $profile,
string $outputPdfPath,
?FacturXEmbedderOptions $options = null,
): void
public function embed(string $pdfBytes, ManifestStore $store): string
public function extract(string $pdfBytes): ?ManifestStore

Taaltag-rapportage. LangComplianceReporter zendt één gestructureerde JSON-record per PDF/UA-2-taaltag-gebeurtenis uit. Elke record draagt de vaste event-discriminator, een severity (warn voor een lax-mode-reject, error voor een strict-mode-reject), de overtredende tag verbatim, een machine-readable reden, de geparseerde tagcomponenten (of null wanneer de tag niet aan de RFC 5646-vormgrammatica voldoet), een ISO 14289-2 §8.4.4-clausulereferentie en een UTC-tijdstempel met microseconden. De JSON reist als de PSR-3-berichttekst; downstream-sinks parseren het message-veld direct. ConformancePolicy is de Premium-facade over het Core-conformance-beleid. De standaard past strikte UA-2-taalafhandeling toe en wijst een misvormde of niet-geregistreerde tag af die /Lang bereikt. De opt-out-helper withStrictUa2(false) keert terug naar het legacy lax-gedrag en logt een PSR-3-notice wanneer de effectieve waarde daadwerkelijk verandert. NextPDF markeert die helper als deprecated sinds v5.0 met verwijderdoel 6.0.0. Om te migreren: audit het corpus op misvormde /Lang-waarden met composer pdfua2:audit-lang-tags <pdf-or-dir>, corrigeer ze en laat dan de opt-out-aanroep vallen.

E-invoice-afhandeling. EInvoiceValidator is het bevroren SPI-contract voor hybride-PDF-validatie: PDF/A-3-wrapper-controle, /AF-attachment-extractie, profieldetectie uit de BT-24-specificatie-identifier, de EN 16931-business-rule-engine en een Schematron-pass. Een welgevormde niet-Factur-X-PDF retourneert EInvoiceValidationResult::notAnEInvoice() in plaats van te werpen; alleen I/O-fouten, misvormde PDF-structuur of tooling-crashes werpen een EInvoiceException-subklasse. EInvoiceXmlValidator is de concrete cross-tier-XML-validator: hij gate’t invoer via de Core-XmlGuard, draait structurele pre-flight en het diepe EN 16931-semantische regelcorpus, en faalt gesloten — engine-fouten verschijnen als error-findings, nooit als stille passes. FacturXEmbedder verbouwt een PDF/A-bron tot een hybride PDF/A-3: hij voegt een embedded-file-stream toe, een filespec met een configureerbare /AFRelationship, en een Factur-X-XMP-extensiepakket, en herschrijft vervolgens de klassieke cross-reference-tabel. Zowel de catalog-/AF-array als de /Names /EmbeddedFiles-name tree verwijzen naar de attachment, zodat legacy-ZUGFeRD-lezers hem oplossen.

Provenance. C2paManifestEmbedder bedt een door de aanroeper geleverde C2PA-manifest-store in een PDF-bytestring in, of extraheert er een. ManifestStore is het onveranderlijke value-object dat de grens overschrijdt. De seam is alleen-bytes en vendor-neutraal: het synthetiseert geen claims, ingest geen URI-referenties en lost geen hash-bindings op, en het voert geen netwerk- of filesystem-I/O uit. extract() retourneert null bij een miss en is goedkoop op PDF’s zonder store. Elke niet-null-extractie is de JumbfBoxParser-hardening-caps al gepasseerd.

Deze module rapporteert wat hij controleert. Het certificeert geen document, maakt het niet juridisch bindend en garandeert niet dat enige uitvoer aan een regelgeving voldoet. De e-invoice-validator is geen belastingautoriteit-validator en sluit nationale extensies uit (bijvoorbeeld Italiaanse SDI, Franse Chorus Pro, Duitse XRechnung). Zoals EN 16931-1 stelt, blijft de factuur-uitgever verantwoordelijk voor het naleven van de regels van relevante wetgeving. Ondersteuning voor een standaard is geen conformiteit ermee. Raadpleeg je complianceteam voor regelgevende toereikendheid.

  • Een welgevormde niet-Factur-X-PDF retourneert een “not an e-invoice”-resultaat; het werpt niet.
  • Een lege business-rule-violation-lijst betekent op zichzelf niet dat het document geldig is; wrapper- en attachment-controles gelden ook.
  • FacturXEmbedder faalt gesloten op bronnen die gecomprimeerde object-streams (/Type /ObjStm) of cross-reference-streams (/Type /XRef, hybride /XRefStm) gebruiken. Sla zulke bronnen eerst opnieuw op met een klassieke cross-reference-tabel.
  • XML-payloads worden gegate via de Core-XmlGuard: DOCTYPE- of entity-declaraties, te grote invoer en ongeldige UTF-8 worden afgewezen met een EInvoiceException op het embed-pad, of een gefaald resultaat op het validator-pad.
  • FacturXContractEmbedder wijst het XRECHNUNG-profiel luid af in plaats van het stil te downgraden; XRechnung-emissie is een Enterprise-capability.
  • C2paManifestEmbedder::extract() onderscheidt afwezigheid (null) van misvorming (C2paException-subklasse die de geschonden invariant benoemt: misvormde structuur, size- of count-bomb, offset-cyclus, nesting-diepte).
  • Constructie van ExperimentalC2paEmbedder werpt een LogicException tenzij de preview-omgevingsvlag gelijk is aan '1'. Zijn wire-formaat is gepind aan een C2PA-draft-snapshot en kan zonder aankondiging veranderen; het zendt geen claim-signature uit. Deze capability blijft preview totdat het C2PA-PDF-profiel bevriest.
  • De strikte-UA-2-lax-opt-out is deprecated; migreer naar de strikte standaard (zie Gedragscontract).
  • Deze module voert geen cryptografische ondertekening uit. C2PA-claim-ondertekening en sleutelbewaring vallen buiten de scope; zie de Security-module voor FIPS-modus-ondertekeningsgedrag.
GedragReferentieStatus
Natuurlijke-taal-declaratie (/Lang)ISO 14289-2:2024 §8.4.4Gecontroleerd / gerapporteerd
Core-factuur-semantisch modelEN 16931-1:2026Gecontroleerd (uitgever blijft verantwoordelijk)
Geassocieerde bestanden / embedded-file-streamsISO 32000-2:2020 §14.13.2Uitgezonden (/AF, /EF, /Params)
Attachment-relatie en containerregelsFactur-X 1.08 §3.1, §6.2Uitgezonden / gecontroleerd (standaard /AFRelationship /Alternative)
C2PA-manifest-store / JUMBFC2PA 2.1 §11.1Embed / extract ondersteund; claim-synthese preview

Dit registreert de specificaties waartegen de module is gebouwd en wat hij controleert of uitzendt. Het is geen verklaring van certificering of regelgevende toereikendheid. NextPDF houdt geen certificering voor deze standaarden.

  • De record-vorm van de reporter is een stabiel contract; downstream-alerting-regels mogen pinnen tegen de vaste event-discriminator.
  • Het uitschakelen van strikte UA-2 zendt alleen een telemetrie-zichtbare deprecation-notice uit wanneer de effectieve waarde verandert; het opnieuw bevestigen van de huidige waarde is stil.
  • De Factur-X-embedder behoudt de bronbytes verbatim en voegt nieuwe objecten toe; hij streeft ernaar PDF/A-3-conformiteit te behouden maar hervalideert niet. Leid de uitvoer door een externe PDF/A-validator voor harde attestatie.
  • De C2PA-seam bevriest vijf invarianten: geen third-party-imports, alleen-bytes-contract, geen I/O, null-bij-miss-extractie, en geen claim-synthese in de stabiele laag.
  • De caps van JumbfBoxParser zijn publieke constanten; dimensioneer de invoer die je accepteert daartegen in plaats van limieten opnieuw af te leiden.

Deze pagina documenteert alleen extern waarneembaar gedrag en het ondersteunde publieke API-oppervlak. Interne namespace-paden, helper-klassen, mechanisme-tabellen, runbook-bestandsnamen en ticket-prefixen vallen buiten de scope.