Validering af forretningsregler for e-faktura
HPDFEInvoiceValidator kombinerer validering af Factur-X- eller ZUGFeRD-container med eksplicit udvalgte, versionerede business-rule- og country-rule-sæt
Komplet gennemgået regeleksekvering
Biblioteket leveres med matchende `.sch`- og `_codedb.xml`-ressourcer til MINIMUM, BASIC WL, BASIC, EN 16931 og EXTENDED
XE2- og senere-motoren udfører den komplette gennemgåede XPath 2-overflade gennem sikker MSXML-parsing, deterministiske XPath 1-ækvivalenter og direkte evaluering af kvantorer, FLWOR-summer, casts, sekvenssammenligninger, eksterne kodelister, datomønstre og booleske indikatorværdier
EN 16931-profilen indeholder 618 kontroller, og hver kontrol behandles under hver valideringskørsel
Kombineret validering
var
Report: THPDFEInvoiceValidationReport;
begin
if not HPDFValidateEInvoice(PDF,
'Lib\resources\Schematron', Report) then
LogValidationFailure(Report);
end;
HPDFValidateEInvoice kalder først THotPDF.ValidateFacturXInvoice, udtrækker og identificerer faktura-XML'en, indlæser de profilspecifikke Schematron-ressourcer og udfører forretningsreglerne
En detekteret hybridfaktura fejler lukket, når XML-udtrækning, profildetektion, regelindlæsning, kodedatabaseindlæsning eller udtryksevaluering ikke kan fuldføres
Funktionen returnerer kun true, når containeren er gyldig, forretningsreglerne er evalueret, og der ikke er nogen fejl- eller advarselsfund tilbage
Profilregistry og valideringsomfang
THPDFEInvoiceRuleRegistry registrerer ét business-rule-lag og, når det er påkrævet, ét country-rule-lag pr. profil med et eksplicit ressourcenavn, regelversion og valgfri IHPDFESchematronEngine-implementering
Standard-registryet indeholder de fem leverede Factur-X-profiler og basis-EXTENDED-reglerne for de franske profiler EXTENDED-CTC-FR og EXTENDED-B2B-FR
De franske profiler kræver en yderligere country-rule-registrering, før ValidationComplete bliver true, og XRECHNUNG kræver både EN 16931 CII og tyske country rules
Ukendte profiler har ingen standardregler og falder aldrig tilbage til EXTENDED, og HPDFSchematronFileForProfile returnerer en tom streng for ukendte eller landespecifikke profiler
HPDFValidateEInvoiceWithRegistry bruger kalderens registry med PDF-containerkontrollen, mens HPDFValidateEInvoiceXML validerer eksplicitte XML-bytes og en profil uden at evaluere en PDF-container
Rapporten eksponerer ProfileSupported, CountryRulesRequired, CountryRulesEvaluated, ValidationComplete og ValidationNote, og dens RuleSets-array registrerer hver valgt ressource, version, scope, summary og fuldførelsesstatus
En fuldført regevaluering kan stadig indeholde forretningsregel-overtrædelser, så tjek det booleske resultat eller BusinessRuleViolations samt ValidationComplete
Disse API'er rapporterer business- og country-rule-dækning, mens XML Schema-validering, transportpolicyer og juridiske acceptbeslutninger forbliver uden for dette omfang
Officielle XRechnung CII-regler
HPDFEInvoiceSaxon leverer en valgfri Saxon HE-bro, der eksekverer de umodificerede kompilerede EN 16931 CII 1.3.16- og XRechnung 3.0.2 Schematron 2.6.0-stylesheets, der følger med i Lib/resources/Schematron/XRechnung
Ressourcerne kommer fra den officielle KoSIT validator-konfiguration dateret 31. august 2026, og ressourcens README registrerer deres oprindelse, licenser og hashes
Værten leverer Java-eksekverbaren og Saxon-klassestien eksplicit, og biblioteket starter transformationen uden en shell eller et synligt konsolvindue, håndhæver en timeout, parser SVRL-fund og fjerner sine midlertidige filer
En timeout på nul vælger 60 sekunder, værdier over 3.600.000 millisekunder afvises, diagnostikoutput er begrænset til 8 MiB, og kompilerede stylesheets og SVRL-rapporter er begrænset til 64 MiB før parsing eller indlæsning
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;
Konfigurér Saxon-klassestien med Saxon HE og dets påkrævede afhængigheder, og brug et separat registry- og engine-eksemplar pr. valideringstråd
Den valgfri bro kræver Delphi XE2 eller senere i Windows og en vært-leveret Java/Saxon-runtime, og ingen af runtimeerne downloades eller installeres af biblioteket
Manglende runtimes, forkert fakturasyntaks, forbudte DTD'er, timeout, fejlet transformation og misdannet SVRL-output giver eksplicit diagnostik om ufuldstændig validering
Officielle franske CTC-fakturaregler
HPDFRegisterFrenchCTCRules vælger det officielle profillag og det strict BR-FR-Flux2-country-lag fra FNFE-MPE-udgivelsen 1.4.0.04, publiceret 4. september 2026 til AFNOR XP Z12-012 version 1.4
Den officielle FNFE-MPE-udgivelse er publiceret under Apache 2.0 og linket fra FNFE-MPE-ressourcensiden, mens det inkluderede EN 16931 CII-stylesheet bevarer EUPL 1.2, og de oprindelige kompilerede stylesheets, Schematron-kilder, kodedatabaser, licenser, kildestier og hashes bevares under Lib/resources/Schematron/France
Til fisFacturX understøtter hjælperen BASIC WL, EN 16931 og EXTENDED med de publicerede Factur-X 1.09.2-regellag, og EXTENDED-CTC-FR-containerbetegnelsen bruger samme Factur-X EXTENDED-lag plus de franske country-kontroller
Til selvstændig fisCII understøtter den EN 16931 og det dedikerede EXTENDED-CTC-FR CII-lag, hvis restriktioner og guideline-identifikator adskiller sig fra det hybride Factur-X EXTENDED-lag
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);
Registreringen bevarer separate profil- og country-rule-versioner og gør det franske country-lag påkrævet for den valgte profil, inklusive EN 16931 og BASIC WL, når de eksplicit er registreret for Frankrig
Det strict publicerede nationale stylesheet bruges direkte uden at erstatte den separate kun-advarsels-variant eller nedgradere fund
Den fastlåste officielle pakke har ingen EXTENDED-B2B-FR-regelprofil, så hjælperen afviser det ældre navn i stedet for at behandle det som et automatisk certificeret alias
Succesfuld validering etablerer fuldførelse af disse publicerede faktura-business-rule-lag, mens XML Schema, CDAR-livscyklusbeskeder, e-reporting-dataudtræk, platformautorisering, transport og juridisk certificering forbliver separate omfang
Motor-API
Engine := HPDFCreateSchematronEngine;
if not Engine.Load(SchematronPath, ErrorText) then
raise Exception.Create(ErrorText);
Findings := Engine.Validate(XMLBytes);
Summary := Engine.LastSummary;
THPDFSchematronSummary rapporterer Profile, TotalRules, Evaluated, Skipped, EvaluationErrors, Violations, EngineAvailable og EngineNote
Skipped forbliver nul i XE2- og senere-motoren og er reserveret til Delphi 7-stubben eller ældre resultatdata
Fejldannede eller ikke-understøttede udtryk producerer eksplicitte fund med fejlalvor, øger EvaluationErrors og forsvinder aldrig som vellykkede kontroller
Factur-X XML-hælpefunktioner
Enheden HPDFFacturX leverer byte-niveau-hjælpere, der læser en Factur-X / ZUGFeRD-faktura-XML uden at bygge en DOM, så de kører på alle Delphi-versioner, biblioteket understøtter, og er sikre på udtrukne bytes fra ExtractFacturXXML
HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes) returnerer guideline-identifikatoren fra GuidelineSpecifiedDocumentContextParameter / ram:ID-elementet i et CII-dokument eller en tom streng, når den mangler
HPDFIsFacturXConformanceLevel(Value, FileName, Version) validerer et conformance level-navn og accepterer MINIMUM, BASIC WL, BASIC, EN 16931, EN16931, EXTENDED, EXTENDED-CTC-FR, EXTENDED-B2B-FR og XRECHNUNG; det ældre COMFORT-niveau kræver derudover ZUGFeRD 1.0-filnavnet ZUGFeRD-invoice.xml med version 1.0
HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName) krydstjekker den i XML'en fundne guideline mod den deklarerede conformance level, version og indlejrede filnavn
HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary) udfylder en THPDFFacturXInvoiceSummary-record ud fra faktura-XML'en og returnerer True, når i det mindste den primære faktura-XML kunne lokaliseres; selve summary-record-typen er deklareret i HPDFDoc ved siden af THPDFFacturXInvoiceInfo
Stabil diagnosticering og grænser
- Regelidentifikatorer parses fra Schematron-meddelelsestokenet, når det findes
- Manglende identifikatorer får deterministiske ordningstal for profil og assertion-eller-rapport
- Hvert fund bevarer sine oprindelige kontekst- og testudtryk
- Eksterne kodedatabasestier begrænses til navne på søskendefiler
- DTD-behandling og opløsning af eksterne XML-entiteter er deaktiveret
- Faktura-XML-input begrænses til 64 MiB
Tilgængelighed af værktøjskæde
Delphi XE2 og senere bruger den indbyggede MSXML-kompatibilitetsmotor
Delphi 7 bevarer de delte grænseflader og resultattyper, men returnerer diagnosticering for utilgængelig motor
Relaterede API'er
HPDFValidateEInvoiceHPDFValidateEInvoiceWithRegistryHPDFValidateEInvoiceXMLTHPDFEInvoiceRuleRegistryHPDFRegisterXRechnungRulesHPDFRegisterFrenchCTCRulesTHPDFFrenchInvoiceSyntaxHPDFCreateSchematronEngineHPDFSchematronFileForProfileIHPDFESchematronEngineTHPDFBusinessRuleResultTHPDFSchematronSummary- THotPDF.ValidateFacturXInvoice
- THotPDF.ExtractFacturXXML
Ikke-GUI-accept
Kør Tests/Delphi/Run-EInvoiceRuleTests.ps1 med eksplicitte JavaExecutable- og SaxonClassPath-værdier eller de tilsvarende HOTPDF_JAVA_EXE- og HOTPDF_SAXON_CLASSPATH-miljøvariabler
Standard-runneren kræver konfigurationen til den officielle regelmotor og kører både Win32 og Win64 med opstart af PDF-viewer undertrykt; -NativeOnly udelader bevidst officiel Saxon-eksekvering