Validatie van e-factuur-bedrijfsregels

HPDFEInvoiceValidator combineert Factur-X- of ZUGFeRD-containervalidatie met expliciet geselecteerde, geversioneerde bedrijfsregel- en landregelsets

Volledige beoordeelde regeluitvoering

De bibliotheek levert bijpassende `.sch`- en `_codedb.xml`-bronnen voor MINIMUM, BASIC WL, BASIC, EN 16931 en EXTENDED

De XE2-en-later-engine voert de volledige beoordeelde XPath 2-oppervlakte uit via beveiligde MSXML-parsing, deterministische XPath 1-equivalenten en directe evaluatie voor kwantoren, FLWOR-sommen, casts, reeksvergelijkingen, externe codelijsten, datumpatronen en booleaanse indicatorwaarden

Het EN 16931-profiel bevat 618 controles en elke controle wordt tijdens elke validatierun verwerkt

Gecombineerde validatie

var
  Report: THPDFEInvoiceValidationReport;
begin
  if not HPDFValidateEInvoice(PDF,
    'Lib\resources\Schematron', Report) then
    LogValidationFailure(Report);
end;

HPDFValidateEInvoice roept eerst THotPDF.ValidateFacturXInvoice aan, extraheert en identificeert de factuur-XML, laadt de profielspecificke Schematron-bronnen en voert de bedrijfsregels uit

Een gedetecteerde hybride factuur faalt gesloten wanneer XML-extractie, profieldetectie, regelladen, codelijst-laden of expressie-evaluatie niet kan worden voltooid

De functie retourneert alleen true wanneer de container geldig is, de bedrijfsregels zijn geëvalueerd en er geen fout- of waarschuwingsbevinding resteert

Profielregistry en validatiebereik

THPDFEInvoiceRuleRegistry registreert per profiel één bedrijfsregellaag en, indien vereist, één landregellaag, met een expliciete resourcenaam, regelversie en optionele IHPDFESchematronEngine-implementatie

De defaultregistry bevat de vijf meegeleverde Factur-X-profielen en de basis-EXTENDED-regels voor de Franse profielen EXTENDED-CTC-FR en EXTENDED-B2B-FR

De Franse profielen vereisen een extra landregelregistratie voordat ValidationComplete true wordt, en XRECHNUNG vereist zowel EN 16931 CII als Duitse landregels

Onbekende profielen hebben geen defaultrules en vallen nooit terug op EXTENDED, en HPDFSchematronFileForProfile geeft een lege string terug voor onbekende of landspecifieke profielen

HPDFValidateEInvoiceWithRegistry gebruikt de registry van de aanroeper bij de PDF-containercontrole, terwijl HPDFValidateEInvoiceXML expliciete XML-bytes en een profiel valideert zonder een PDF-container te beoordelen

Het rapport stelt ProfileSupported, CountryRulesRequired, CountryRulesEvaluated, ValidationComplete en ValidationNote bloot, en zijn RuleSets-array legt per geselecteerde resource de versie, scope, samenvatting en voltooiingsstatus vast

Een voltooide regelevaluatie kan nog steeds bedrijfsregelovertredingen bevatten, dus controleer het booleaanse resultaat of BusinessRuleViolations naast ValidationComplete

Deze API's rapporteren bedrijfs- en landregeldekking, terwijl XML Schema-validatie, transportbeleid en juridische acceptatiebesluiten buiten dit bereik blijven

Officiële XRechnung CII-regels

HPDFEInvoiceSaxon levert een optionele Saxon HE-bridge die de ongewijzigde, gecompileerde EN 16931 CII 1.3.16- en XRechnung 3.0.2-Schematron 2.6.0-stylesheets uitvoert die in Lib/resources/Schematron/XRechnung worden meegeleverd

De resources komen uit de officiële KoSIT-validatorconfiguratie van 31 augustus 2026, en de resource-README legt hun herkomst, licenties en hashes vast

De host levert het Java-executable en Saxon-classpath expliciet aan, en de bibliotheek start de transformatie zonder shell of zichtbaar consolevenster, handhaaft een timeout, parseert SVRL-bevindingen en ruimt zijn tijdelijke bestanden op

Een timeout van nul staat voor 60 seconden, waarden boven 3.600.000 milliseconden worden geweigerd, diagnostische uitvoer is begrensd op 8 MiB, en gecompileerde stylesheets en SVRL-rapporten zijn begrensd op 64 MiB vóór parsen of laden

uses HPDFEInvoiceValidator, HPDFEInvoiceSaxon;

Registry := THPDFEInvoiceRuleRegistry.Create;
try
  Engine := HPDFCreateSaxonSchematronEngine(
    JavaExecutable, SaxonClassPath, 60000);
  HPDFRegisterXRechnungRules(Registry, Engine);
  Valid := HPDFValidateEInvoiceWithRegistry(PDF,
    'Lib\resources\Schematron', Registry, Report);
finally
  Registry.Free;
end;

Configureer het Saxon-classpath met Saxon HE en diens vereiste afhankelijkheden, en gebruik een eigen registry- en engine-instantie per validatiethread

De optionele bridge vereist Delphi XE2 of later op Windows en een door de host geleverde Java/Saxon-runtime, en geen van beide runtimes wordt door de bibliotheek gedownload of geïnstalleerd

Ontbrekende runtimes, verkeerde factuursyntax, verboden DTD's, timeout, mislukte transformatie en onjuist gevormde SVRL-uitvoer leveren expliciete onvolledige-validatiediagnostiek op

Officiële Franse CTC-factuurregels

HPDFRegisterFrenchCTCRules kiest de officiële profiellaag en de strikte BR-FR-Flux2-landregellaag uit FNFE-MPE-release 1.4.0.04, uitgegeven op 4 september 2026 voor AFNOR XP Z12-012 versie 1.4

De officiële FNFE-MPE-release is uitgegeven onder Apache 2.0 en gelinkt vanaf de FNFE-MPE-resourcepagina, de meegeleverde EN 16931 CII-stylesheet behoudt EUPL 1.2, en de originele gecompileerde stylesheets, Schematron-bronnen, codedatabases, licenties, bronpaden en hashes worden ongewijzigd bewaard onder Lib/resources/Schematron/France

Voor fisFacturX ondersteunt de helper BASIC WL, EN 16931 en EXTENDED via de gepubliceerde Factur-X 1.09.2-regellagen, en de EXTENDED-CTC-FR-containeraanduiding gebruikt dezelfde Factur-X EXTENDED-laag plus de Franse landcontroles

Voor zelfstandige fisCII ondersteunt hij EN 16931 en de aparte EXTENDED-CTC-FR-CII-laag, waarvan de beperkingen en guideline-identifier verschillen van de hybride Factur-X EXTENDED-laag

Engine := HPDFCreateSaxonSchematronEngine(
  JavaExecutable, SaxonClassPath, 60000);

HPDFRegisterFrenchCTCRules(Registry, 'EN 16931',
  Engine, fisFacturX);
Valid := HPDFValidateEInvoiceWithRegistry(PDF,
  'Lib\resources\Schematron', Registry, Report);

HPDFRegisterFrenchCTCRules(Registry, 'EXTENDED-CTC-FR',
  Engine, fisCII);
Valid := HPDFValidateEInvoiceXML(XMLBytes, 'EXTENDED-CTC-FR',
  'Lib\resources\Schematron', Registry, Report);

Registratie bewaart aparte profiel- en landregelversies en maakt de Franse landregellaag verplicht voor het geselecteerde profiel, inclusief EN 16931 en BASIC WL wanneer die expliciet voor Frankrijk zijn geregistreerd

De strikte gepubliceerde nationale stylesheet wordt direct gebruikt, zonder de aparte warning-only-variant te substitueren of bevindingen af te waarderen

Het gepinde officiële pakket heeft geen EXTENDED-B2B-FR-regelprofiel, dus de helper weigert die legacy-naam in plaats van die als automatisch gecertificeerde alias te behandelen

Een geslaagde validatie stelt de voltooiing van deze gepubliceerde factuur-bedrijfsregellagen vast, terwijl XML Schema, CDAR-lifecycleberichten, e-reporting-data-extractie, platformautorisatie, transport en juridische certificering aparte scopes blijven

Engine-API

Engine := HPDFCreateSchematronEngine;
if not Engine.Load(SchematronPath, ErrorText) then
  raise Exception.Create(ErrorText);

Findings := Engine.Validate(XMLBytes);
Summary := Engine.LastSummary;

THPDFSchematronSummary rapporteert Profile, TotalRules, Evaluated, Skipped, EvaluationErrors, Violations, EngineAvailable en EngineNote

Skipped blijft nul in de XE2-en-later-engine en is gereserveerd voor de Delphi 7-stub of verouderde resultaatdata

Onjuist gevormde of niet-ondersteunde expressies produceren expliciete bevindingen met foutprioriteit, verhogen EvaluationErrors en verdwijnen nooit als geslaagde controles

Factur-X-XML-hulpfuncties

De unit HPDFFacturX levert helpers op byteniveau die een Factur-X-/ZUGFeRD-factuur-XML lezen zonder een DOM op te bouwen, zodat ze op elke door de bibliotheek ondersteunde Delphi-versie draaien en veilig zijn op geëxtraheerde bytes uit ExtractFacturXXML

HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes) geeft de guideline-identifier terug uit het GuidelineSpecifiedDocumentContextParameter / ram:ID-element van een CII-document, of een lege string wanneer die ontbreekt

HPDFIsFacturXConformanceLevel(Value, FileName, Version) valideert een conformance level-naam en accepteert MINIMUM, BASIC WL, BASIC, EN 16931, EN16931, EXTENDED, EXTENDED-CTC-FR, EXTENDED-B2B-FR en XRECHNUNG; het legacy-niveau COMFORT vereist bovendien de ZUGFeRD 1.0-bestandsnaam ZUGFeRD-invoice.xml met versie 1.0

HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName) toetst de in de XML gevonden guideline af tegen het opgegeven conformance level, de versie en de ingebedde bestandsnaam

HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary) vult een THPDFFacturXInvoiceSummary-record vanuit de factuur-XML en geeft True terug zodra ten minste de primaire factuur-XML is gevonden; het summary-recordtype zelf is gedeclareerd in HPDFDoc naast THPDFFacturXInvoiceInfo

Stabiele diagnostiek en limieten

Toolchain-beschikbaarheid

Delphi XE2 en later gebruiken de ingebouwde MSXML-compatibiliteitsengine

Delphi 7 behoudt de gedeelde interfaces en resultaattypen, maar retourneert een niet-beschikbare-engine-diagnostiek

Gerelateerde API's

Niet-GUI-acceptatie

Draai Tests/Delphi/Run-EInvoiceRuleTests.ps1 met expliciete waarden voor JavaExecutable en SaxonClassPath, of de bijbehorende omgevingsvariabelen HOTPDF_JAVA_EXE en HOTPDF_SAXON_CLASSPATH

De defaultrunner vereist de engineconfiguratie met officiële regels en draait zowel Win32 als Win64 met onderdrukte PDF-viewer-start; -NativeOnly laat de officiële Saxon-uitvoering bewust weg