Facturen en e-facturatie
Spec: EN 16931-1:2026, BT-24 EN 16931-1:2026 BT-24 Spec: Factur-X 1.08 Factur-X 1.08 Spec: ISO 32000-2:2020, §14.13 ISO 32000-2:2020 §14.13 Evidence: Mixed evidence
In het kort
Sectie met titel “In het kort”Een moderne factuur bestaat uit twee documenten in één bestand: een pagina die een mens leest en een machineleesbare XML-payload die een belastingsysteem verwerkt. Deze pagina loopt het scenario van de hybride factuur door, van verplichting tot uitvoer: wat ZUGFeRD en Factur-X vereisen, hoe NextPDF de gestructureerde payload toevoegt en controleert, en waar naleving niet langer een taak van de engine is maar bij u ligt.
Waarom dit belangrijk is
Sectie met titel “Waarom dit belangrijk is”Verschillende rechtsgebieden verplichten inmiddels gestructureerde facturen voor facturatie tussen bedrijven of tussen bedrijven en de overheid. De valkuil is dat een hybride factuur er op het scherm perfect kan uitzien en toch wordt afgewezen. Die afwijzing gebeurt op basis van de ingesloten XML, niet op basis van de pixels. Als de specificatie-identifier ontbreekt in de gestructureerde payload, als deze het verkeerde profiel aangeeft of met de verkeerde relatie is toegevoegd, keurt het ontvangende platform de factuur af. Aan uw kant blijft de fout vaak onopgemerkt en komt deze pas dagen later aan het licht, terwijl de betaling blijft hangen.
Dit één keer goed doen, in de laag die het bestand produceert, is veel goedkoper dan het bij elke afgewezen factuur opnieuw te moeten ontdekken.
De korte versie
Sectie met titel “De korte versie”- Een conforme hybride factuur is een PDF/A-drager met een conforme XML-payload die als gekoppeld bestand is ingesloten. De metadata van de drager moeten het profiel aangeven.
- Het ene veld dat het vaakst over acceptatie beslist, is BT-24, de specificatie-identifier. Bedrijfsregel BR-1 van EN 16931 vereist dat elke factuur deze bevat. De waarde is een URN die het exacte profiel benoemt — bijvoorbeeld
urn:cen.eu:en16931:2017van het EN 16931-profiel (COMFORT). - De taak van NextPDF is het insluiten en structureel valideren van door de aanroeper aangeleverde XML. Het stelt de factuurinhoud niet zelf op en is geen validator van de belastingdienst.
- De uitgever blijft verantwoordelijk voor de juridische en fiscale juistheid. Een schoon validatieresultaat is één invoer voor die beslissing, geen certificaat.
Hoe NextPDF dit aanpakt
Sectie met titel “Hoe NextPDF dit aanpakt”NextPDF behandelt de gestructureerde factuur als een laagoverstijgend contract, niet als één losse functie. De core-engine definieert de interfaces — een embedder, een profielbeschrijving, een validator — en de Premium-laag levert de implementaties. Die scheiding is bewust gekozen. Het publieke oppervlak ligt vast in core, zodat aanroeppunten en tests het profiel en het resultaat op dezelfde manier benaderen, ongeacht de onderliggende laag.
De flow kent vier fasen. De volgorde is van belang, omdat elke fase afhangt van de voorgaande.
- Author the invoice XML You (or your ERP) produce a UN/CEFACT CII or Peppol UBL payload. NextPDF never synthesizes invoice content.
- Produce the PDF/A carrier A PDF/A-3 or PDF/A-4f document is the human-readable face and the conformant container the standard requires.
- Embed the payload The embedder attaches the XML as an associated file with the correct AFRelationship, and injects the Factur-X XMP profile declaration.
- Validate, then ship A structural pass checks the root, the required sections, and BT-24 against the declared profile before the file leaves your system.
Het embedder-contract is bytes-in, bytes-uit: er gaat een PDF/A-drager met een XML-payload in, en er komen hybride PDF-bytes uit. Voordat er iets wordt toegevoegd, wordt de XML verwerkt door een geharde guard die een DOCTYPE weigert, de invoeromvang begrenst en in XML 1.0 verboden controletekens afwijst. Daarmee worden XML External Entity- en Billion-Laughs-aanvallen bij de bron uitgesloten, omdat factuur-XML doorgaans van buiten uw vertrouwensgrens binnenkomt.
De profielbeschrijving beantwoordt de vier vragen die een downstream-systeem stelt: de canonieke profiel-URN, de te bevestigen BT-24-waarde, een stabiele naam voor logs en een laag-neutrale discriminant zodat pariteitstests resultaten kunnen groeperen. De beschrijving is expliciet over hiaten. Het ZUGFeRD MINIMUM-profiel bevat geen
BT-24-specificatie-identifier, en de beschrijving retourneert hiervoor null
in plaats van er een te verzinnen. Dat is ook de reden waarom MINIMUM en BASIC WL niet
EN 16931-conform zijn. De engine legt de werkelijke cardinaliteit vast in plaats van
deze te verbergen.
Wat het bewijs zegt
Sectie met titel “Wat het bewijs zegt”Het bovenstaande gedrag is op drie plaatsen verankerd; elke plaats levert een ander soort bewijs.
De standaard stelt de verplichting vast.
Spec: EN 16931-1:2026, BR-1 EN 16931-1:2026 BR-1 maakt de specificatie-
identifier verplicht op elke factuur. De technische bijlage van Factur-X
legt de URN-waarden per profiel vast, waaronder die voor het EN 16931-
profiel: urn:cen.eu:en16931:2017. De drager zelf is
een PDF-kwestie: Spec: ISO 32000-2:2020, §9 ISO 32000-2:2020 §9 merkt op dat
weergave het voorspelbaarst en betrouwbaarst is wanneer alle lettertypen zijn
ingesloten. Dat is direct relevant, omdat een factuur die
over tien jaar leesbaar moet zijn, niet afhankelijk kan zijn van de lettertypeomgeving van de lezer.
De code bevat het contract. Evidence: Code-backed De EmbedderInterface, ProfileInterface en ValidatorInterface in core zijn echte, laag-neutrale interfaces. ProfileType::isEn16931Conformant() legt de uitsluiting van MINIMUM / BASIC WL vast in het typesysteem. ValidationResult is een onveranderlijke DTO waarvan isValid de combinatie is van „geen foutbevinding” en „geen fatale regelschending”.
Het gedrag is op capabilityniveau gedocumenteerd voor de Premium-laag: Evidence: Standard-backed de embedder voegt door de aanroeper aangeleverde ZUGFeRD 2.4 / Factur-X 1.08 CII- of Peppol UBL-XML toe aan een PDF/A-4f- of PDF/A-3b- drager met de juiste relatie voor het gekoppelde bestand. De validator controleert het semantische model van EN 16931 en de BT-24-identifier. De Schematron-fase voert de CEN-regelsets uit die naar XSLT zijn gecompileerd. Niets daarvan genereert of corrigeert de factuurinhoud.
Praktijkvoorbeeld
Sectie met titel “Praktijkvoorbeeld”Het onderstaande voorbeeld illustreert het koppelvlak; het is geen kant-en-klare integratie om te kopiëren en plakken. De drageropbouw en de embedder komen uit de Premium-laag, en de XML is van u.
<?php
declare(strict_types=1);
use NextPDF\Contracts\EInvoice\ProfileType;use NextPDF\Contracts\EInvoice\ValidatorContext;use NextPDF\Contracts\EInvoice\ValidatorInterface;use NextPDF\Contracts\EInvoice\EmbedderInterface;use NextPDF\Contracts\EInvoice\EmbedderOptions;use Psr\Log\LoggerInterface;
/** * Validate first, embed second, never ship an invalid payload. * * @param non-empty-string $carrierPdf PDF/A-3 or PDF/A-4f carrier bytes * @param non-empty-string $ciiXml Caller-authored UN/CEFACT CII XML * * @return non-empty-string Hybrid invoice bytes, ready to deliver */function buildHybridInvoice( ValidatorInterface $validator, EmbedderInterface $embedder, LoggerInterface $logger, string $carrierPdf, string $ciiXml,): string { // STRICT mode: a missing BT-24 is a hard error, not a warning. $context = new ValidatorContext( profile: ProfileType::EN16931, strictMode: true, );
$result = $validator->validate($ciiXml, $context);
if (!$result->isValid) { foreach ($result->getErrors() as $finding) { $logger->error('invoice.structural_finding', [ 'message' => $finding->message, ]); }
// A failed structural check is your signal to stop, not to ship. throw new \RuntimeException('Invoice XML failed structural validation.'); }
$options = new EmbedderOptions(profile: ProfileType::EN16931);
return $embedder->embed($carrierPdf, $ciiXml, $options);}Het gaat om de volgorde. Validatie is goedkoop in vergelijking met een afgewezen factuur en een vertraagde betaling, dus die vindt plaats voordat de payload überhaupt wordt toegevoegd.
Veelvoorkomend misverstand
Sectie met titel “Veelvoorkomend misverstand”Het duurste misverstand is “NextPDF maakt mijn facturen conform.” Dat doet het niet. Deze pagina zegt dat onomwonden. De engine sluit XML in die u opstelt en controleert deze structureel. Een geslaagd structureel resultaat betekent dat de payload de vorm heeft die EN 16931 verwacht en het profiel aangeeft waar u om hebt gevraagd. Het betekent niet dat de factuur juridisch toereikend is, door de belastingdienst is goedgekeurd of gegarandeerd wordt geaccepteerd door welk clearingplatform dan ook. Nationale uitbreidingen en clearingtransporten vallen buiten de scope op engine-niveau. Zoals EN 16931-1 het zelf verwoordt, bevat het kernmodel de informatie die nodig is om naleving te ondersteunen. De uitgever is verantwoordelijk voor het voldoen aan de relevante wetgeving.
Een tweede, minder opvallende valkuil: een standaard ondersteunen is niet hetzelfde als eraan voldoen. Conformiteit is een eigenschap van het uiteindelijke bestand plus een validator, niet van de bibliotheek die het bestand heeft geproduceerd.
Limieten en grenzen
Sectie met titel “Limieten en grenzen”- NextPDF stelt geen factuurinhoud op en corrigeert deze niet. De aanroeper levert geldige XML aan en blijft de uitgever van de factuur. Een lege lijst met bevindingen maakt een niet-conforme payload niet conform.
- Gestructureerd insluiten en Schematron-validatie zijn capabilities van de Premium-laag. Core definieert de contracten; de implementaties vereisen het commerciële pakket. Zie de grens hieronder.
- De validator controleert uitsluitend het semantische model van EN 16931 en de ZUGFeRD-, Factur-X- of UBL-container. Het is geen validator van de belastingdienst. Het transport via SDI, Chorus Pro en XRechnung valt buiten de scope op transportniveau.
- De profielen MINIMUM en BASIC WL zijn niet EN 16931-conform en bevatten geen BT-24-specificatie-identifier — bewust, als weerspiegeling van de cardinaliteit van de standaard, niet als beperking van de engine.
- De Schematron-engine heeft
ext-xslnodig. Regelsets worden tijdens het bouwen gecompileerd. De runtime voert alleen de vooraf gecompileerde XSLT uit, waarbij het laden van bronnen via het netwerk en het bestandssysteem is uitgeschakeld. - Deze pagina beschrijft gedrag op capabilityniveau. Het garandeert geen acceptatie door enige specifieke autoriteit of enig specifiek platform.
| Edition | Availability |
|---|---|
| Core | Core definieert de contracten die de lagen overstijgen ( |
| Pro | Factur-X 1.08 CII-insluiting in een PDF/A-drager en de EN 16931-profielbeschrijvingen zijn beschikbaar. |
| Enterprise | Voegt Peppol BIS 3.0 UBL-insluiting toe, de XRechnung B2G CIUS, COMPAT/STRICT- XML-validatie en de in-process Schematron-regelengine. |
Gerelateerde documentatie
Sectie met titel “Gerelateerde documentatie”- Archivering en PDF/A — waarom de factuurdrager een PDF/A-bestand is en wat dat betekent voor leesbaarheid op de lange termijn.
- De beslisgids voor integratie — welk ecosysteempakket past bij een facturatiepipeline (generatie in een wachtrij, framework-bridge of Connect).
- NextPDF in productie beheren — hoe u validatiebevindingen en fouten observeert zodra facturen in grote aantallen worden verwerkt.
Verklarende woordenlijst
Sectie met titel “Verklarende woordenlijst”- Hybride factuur — één PDF-bestand dat zowel een door mensen leesbare pagina bevat als een machineleesbare, ingesloten XML-factuurpayload.
- ZUGFeRD / Factur-X — de Duitse en Franse benamingen voor dezelfde aanpak van de hybride factuur: een UN/CEFACT Cross Industry Invoice (CII) XML-payload die is ingesloten in een PDF/A-drager.
- EN 16931 — de Europese standaard die het semantische gegevensmodel van de kernelementen van een elektronische factuur definieert.
- BT-24 (specificatie-identifier) — de bedrijfsterm van EN 16931 waarvan de waarde een URN is die het exacte profiel benoemt waaraan de factuur voldoet. Vereist door bedrijfsregel BR-1.
- Profiel — ook wel conformiteitsniveau genoemd (MINIMUM, BASIC WL, BASIC, EN 16931, EXTENDED, XRECHNUNG). Bepaalt welke bedrijfstermen een factuur moet bevatten.
- Gekoppeld bestand — een bestand dat binnen een PDF is toegevoegd met een aangegeven relatie (AFRelationship) die beschrijft hoe het zich tot het zichtbare document verhoudt; het mechanisme dat de factuur-XML draagt.
- Schematron — een regeltaal die wordt gebruikt om de bedrijfsregels van EN 16931 uit te drukken. NextPDF voert de naar XSLT gecompileerde CEN-regelsets uit.