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
- Regel-id's worden bij aanwezigheid uit het Schematron-berichttoken geparseerd
- Ontbrekende id's krijgen deterministische profiel- en bewering-of-rapportordinalen
- Elke bevinding behoudt zijn oorspronkelijke context- en testexpressies
- Externe codelijst-paden worden beperkt tot broer/zus-bestandsnamen
- DTD-verwerking en externe XML-entiteitsresolutie zijn uitgeschakeld
- Factuur-XML-invoer is beperkt tot 64 MiB
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
HPDFValidateEInvoiceHPDFValidateEInvoiceWithRegistryHPDFValidateEInvoiceXMLTHPDFEInvoiceRuleRegistryHPDFRegisterXRechnungRulesHPDFRegisterFrenchCTCRulesTHPDFFrenchInvoiceSyntaxHPDFCreateSchematronEngineHPDFSchematronFileForProfileIHPDFESchematronEngineTHPDFBusinessRuleResultTHPDFSchematronSummary- THotPDF.ValidateFacturXInvoice
- THotPDF.ExtractFacturXXML
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