ZUGFeRD / Factur-X-conformiteit: het ingebedde factuurprofiel voor EN 16931
In één oogopslag
Sectie met titel “In één oogopslag”Afbakening. NextPDF produceert het ingebedde XML-profiel; de fiscale en juridische geldigheid wordt bepaald door de ontvangende instantie, niet door de bibliotheek.
ZUGFeRD / Factur-X is een hybride factuur: een voor mensen leesbare PDF (een PDF/A-3-archiveringssubstraat) met ingebedde, machineleesbare Cross-Industry-Invoice-XML (CII) die het semantische datamodel van EN 16931 volgt. NextPDF Core levert het embedder-contract (NextPDF\Contracts\EInvoice); de concrete Factur-X 1.08-engine wordt geleverd in het Premium-pakket nextpdf/pro. De bibliotheek produceert de ingebedde XML en de PDF/A-3-bijlagestructuur. Een EN 16931- / Schematron-validator of de ontvangende belastingdienst bepaalt de fiscale geldigheid.
Installatie
Sectie met titel “Installatie”composer require nextpdf/core:^3 # EInvoice contracts onlycomposer require nextpdf/pro # Factur-X 1.08 embedder engineCore levert EmbedderInterface, ProfileInterface, ProfileType, ValidatorInterface en ValidationResult in NextPDF\Contracts\EInvoice. Het interface-docblock is expliciet: het Pro-niveau (Factur-X 1.08-byte-rewrite-engine) en het Enterprise-niveau (PDF/A-managed builder) implementeren dit contract. Core bedt zelf geen factuur in. Het definieert het byte-in/byte-out-contract waaraan die niveaus voldoen.
Conceptueel overzicht
Sectie met titel “Conceptueel overzicht”NextPDF\Contracts\EInvoice\ProfileType is de discriminator voor EN 16931-conformiteit: MINIMUM, BASIC_WL, BASIC, EN16931, EXTENDED, XRECHNUNG. De methode isEn16931Conformant() codeert de regel rechtstreeks uit EN 16931-1. MINIMUM en BASIC_WL zijn niet EN 16931-conform (ze voldoen niet aan de BT-24-specification-identifier-kardinaliteit en de eis van regelitems). BASIC, EN16931, EXTENDED, XRECHNUNG zijn EN 16931-conform.
De embedder (EmbedderInterface) is contractueel verplicht om:
- de aangeleverde CII-XML te parsen via
XmlGuard(XXE-veilig); - het Factur-X-XMP-extensieschema voor het opgegeven profiel te injecteren;
- de XML als ingebed bestand bij te voegen met de juiste
AFRelationship(Data/Alternative), zodat het PDF/A-3-archiveringssubstraat (eisen voor ingebedde bestanden in §6.7.5 —F/UF-sleutels) de XML draagt.
NextPDF genereert deze structuur. Het stelt niet vast dat de factuur fiscaal geldig is. De ontvangende instantie maakt die bepaling op basis van de bedrijfsregels van EN 16931 §7 en eventuele nationale CIUS.
API-oppervlak
Sectie met titel “API-oppervlak”| Symbool | Effect |
|---|---|
Contracts\EInvoice\EmbedderInterface | Byte-in/byte-out-contract; Pro/Enterprise implementeren het. |
Contracts\EInvoice\ProfileType (enum) | Discriminator voor EN 16931-profielen. |
ProfileType::isEn16931Conformant(): bool | False voor MINIMUM/BASIC_WL; true voor BASIC/EN16931/EXTENDED/XRECHNUNG. |
Contracts\EInvoice\ValidatorInterface | Validatiecontract dat een ValidationResult met regelovertredingen retourneert. |
Codevoorbeeld — snelstart
Sectie met titel “Codevoorbeeld — snelstart”<?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";Codevoorbeeld — productie
Sectie met titel “Codevoorbeeld — productie”De productiepijplijn (Pro-niveau) bedt de CII-XML in een PDF/A-3-basis in. Vervolgens voert die pijplijn een EN 16931-Schematron-validator uit, of dient deze de factuur in bij de ontvangende instantie, en behandelt het rapport als de gate. NextPDF genereert de ingebedde XML en de PDF/A-3-bijlage; de validator of instantie bepaalt de fiscale geldigheid. Core kan deze pijplijn niet zelfstandig uitvoeren. nextpdf/pro is vereist voor de embedder-engine.
Randgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”- Core heeft alleen contracten. Zonder
nextpdf/prois er geen concrete embedder. Aanroepende code moet tegen de interface programmeren en duidelijk degraderen wanneer de Pro-implementatie ontbreekt. - MINIMUM / BASIC_WL zijn geen EN 16931.
isEn16931Conformant()retourneert false voor deze profielen; presenteer geen EN 16931-factuur wanneer je ze gebruikt. - PDF/A-3-substraat. De ingebedde XML gaat mee in een PDF/A-3-archiveringscontainer; de
F/UF-sleutels van het ingebedde bestand (PDF/A §6.7.5) moeten aanwezig zijn. - XML wordt XXE-veilig geparset. Het contract vereist parsing via
XmlGuard; een aangepaste embedder mag geen XXE-sink introduceren. - De bibliotheek beoordeelt de geldigheid niet. Het produceren van een structureel correct Factur-X-bestand betekent niet dat de belastingdienst het zal accepteren.
Prestaties
Sectie met titel “Prestaties”Inbedden herschrijft de PDF om de XML-bijlage en het XMP-extensieschema toe te voegen. Het budget is wandkloktijd ≤ 1500 ms en piekgeheugen ≤ 128 MB voor een typische factuur.
Beveiligingsnotities
Sectie met titel “Beveiligingsnotities”De ingebedde XML wordt XXE-veilig geparset via XmlGuard. De factuur-XML bevat commerciële persoonlijk identificeerbare informatie (PII), waaronder partijen en bedragen. Die XML is ingebed, niet versleuteld. De vertrouwelijkheid van de factuur is de verantwoordelijkheid van de integrator.
Dataresidentie en PII-mitigaties
Sectie met titel “Dataresidentie en PII-mitigaties”De factuur-XML draagt PII van partijen en financiële gegevens. Het inbedden gebeurt in-process; daarbij verlaten geen gegevens het proces. Verzending naar een ontvangende instantie valt buiten het bereik en blijft de verantwoordelijkheid van de integrator voor dataresidentie.
Veilige telemetrie en logschoning
Sectie met titel “Veilige telemetrie en logschoning”Log nooit de CII-XML of de ingebedde PDF-bytes — deze bevatten factuur-PII. Log alleen de profielnaam en een structurele beoordeling.
Dreigingsmodel
Sectie met titel “Dreigingsmodel”Een Factur-X-bestand heeft geen toegangscontrole. De ingebedde XML is leesbaar voor iedereen die het bestand heeft. De hybride vorm garandeert de machineleesbaarheid van de factuur, niet de vertrouwelijkheid of de fiscale aanvaarding ervan.
Gedrag in FIPS-modus
Sectie met titel “Gedrag in FIPS-modus”Inbedden voert geen cryptografie uit. Een ondertekende Factur-X-factuur is een afzonderlijke aangelegenheid van het signature-recipe en volgt de FIPS-houding van dat recipe. Deze pagina maakt geen claim over ondertekening.
Conformiteit
Sectie met titel “Conformiteit”| Claim | Specificatie | Clausule | reference_id |
|---|---|---|---|
| Een EN 16931-factuur bevat de bedrijfstermen van het semantische datamodel. | EN 16931-1 | §6.4 | |
| EN 16931-naleving wordt bepaald door de kardinaliteit van de bedrijfsregels waaraan een conforme factuur moet voldoen. | EN 16931-1 | §7 | |
| Het Factur-X EN 16931-profiel vereist conformiteit met de bedrijfsregels van de CII-XML. | Factur-X 1.08 | EN 16931 profile | |
| Het Factur-X EN 16931-profiel schrijft de vereiste factuurinhoud voor. | Factur-X 1.08 | EN 16931 profile | |
| Factur-X is een hybride: machineleesbare XML ingebed naast de door mensen leesbare PDF. | Factur-X 1.08 | Basic | |
| De ingebedde XML gaat mee in een PDF/A-archiveringssubstraat (F/UF-sleutels van het ingebedde bestand). | ISO 19005-4 | §6.7.5 |
Verwijzingen zijn aanwijzers met clause-id + reference_id naar het verificatiecorpus. Er wordt geen standaardtekst gereproduceerd; clausules worden samengevat in de bewoordingen van NextPDF.