Forretningsregel-validering for e-faktura
HPDFEInvoiceValidator kombinerer Factur-X- eller ZUGFeRD-beholder-validering med eksplisitt valgte, versjonerte sett av forretningsregler og landsregler
Fullstendig gjennomgått regelutførelse
Biblioteket leverer samsvarende `.sch`- og `_codedb.xml`-ressurser for MINIMUM, BASIC WL, BASIC, EN 16931 og EXTENDED
XE2+-motoren utfører den fullstendige gjennomgåtte XPath 2-overflaten gjennom sikker MSXML-parsing, deterministiske XPath 1-ekvivalenter og direkte evaluering for kvantifiserere, FLWOR-sum, kaster, sekvens-sammenligninger, eksterne kodelister, datomønstre og boolske indikatorverdier
EN 16931-profilen inneholder 618 kontroller, og hver kontroll behandles under hver valideringskjøring
Kombinert validering
var
Report: THPDFEInvoiceValidationReport;
begin
if not HPDFValidateEInvoice(PDF,
'Lib\resources\Schematron', Report) then
LogValidationFailure(Report);
end;
HPDFValidateEInvoice kaller først THotPDF.ValidateFacturXInvoice, henter ut og identifiserer faktura-XML-en, laster de profilspesifikke Schematron-ressursene og utfører forretningsreglene
En detektert hybridfaktura mislykkes lukket når XML-uthenting, profildeteksjon, regellasting, kodedatabase-lasting eller uttrykksevaluering ikke kan fullføres
Funksjonen returnerer bare ekte når beholderen er gyldig, forretningsregler ble evaluert og ingen feil- eller advarselsfunn gjenstår
Profilregister og valideringsomfang
THPDFEInvoiceRuleRegistry registrerer ett forretningsregellag og, når det kreves, ett landsregellag per profil, med eksplisitt ressursnavn, regelversjon og valgfri IHPDFESchematronEngine-implementasjon
Standardregisteret inneholder de fem medfølgende Factur-X-profilene og basis-EXTENDED-reglene for de franske profilene EXTENDED-CTC-FR og EXTENDED-B2B-FR
De franske profilene krever en ekstra landsregel-registrering før ValidationComplete blir sann, og XRECHNUNG krever både EN 16931 CII og tyske landsregler
Ukjente profiler har ingen standardregler og faller aldri tilbake til EXTENDED, og HPDFSchematronFileForProfile returnerer en tom streng for ukjente eller landsspesifikke profiler
HPDFValidateEInvoiceWithRegistry bruker oppkallerens register sammen med PDF-beholdersjekken, mens HPDFValidateEInvoiceXML validerer eksplisitte XML-byte og en profil uten å vurdere en PDF-beholder
Rapporten eksponerer ProfileSupported, CountryRulesRequired, CountryRulesEvaluated, ValidationComplete og ValidationNote, og RuleSets-arrayen registrerer hver valgt ressurs, versjon, omfang, oppsummering og fullføringsstatus
En fullført regelsvurdering kan fortsatt inneholde forretningsregelbrudd, så sjekk det boolske resultatet eller BusinessRuleViolations i tillegg til ValidationComplete
Disse API-ene rapporterer dekning av forretnings- og landsregler, mens XML Schema-validering, transportpolicyer og juridiske akseptbeslutninger forblir utenfor dette omfanget
Offisielle XRechnung CII-regler
HPDFEInvoiceSaxon leverer en valgfri Saxon HE-bro som kjører de umodifiserte, kompilerte Schematron 2.6.0-stilarkene EN 16931 CII 1.3.16 og XRechnung 3.0.2 som følger med i Lib/resources/Schematron/XRechnung
Ressursene kommer fra den offisielle KoSIT validator-konfigurasjonen datert 31. august 2026, og ressursenes README dokumenterer opprinnelse, lisenser og hash-verdier
Verten oppgir Java-kjørbar fil og Saxon class path eksplisitt, og biblioteket starter transformasjonen uten skall eller synlig konsollvindu, håndhever tidsavbrudd, parser SVRL-funn og fjerner sine midlertidige filer
Null som tidsavbrudd velger 60 sekunder, verdier over 3 600 000 millisekunder avvises, diagnostikk-utdata takseres til 8 MiB, og kompilerte stilark og SVRL-rapporter takseres til 64 MiB før parsing eller lasting
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;
Konfigurer Saxon class path med Saxon HE og dets nødvendige avhengigheter, og bruk separate register- og motorinstanser per valideringstråd
Den valgfrie broen krever Delphi XE2 eller nyere på Windows og et vert-levert Java/Saxon-kjøretidsmiljø, og ingen av dem lastes ned eller installeres av biblioteket
Manglende kjøretidsmiljøer, feil fakturasyntaks, forbudte DTD-er, tidsavbrudd, mislykket transformasjon og feilformet SVRL-utdata produserer eksplisitt diagnostikk om ufullstendig validering
Offisielle franske CTC-fakturaregler
HPDFRegisterFrenchCTCRules velger det offisielle profillaget og det strenge BR-FR-Flux2-landslaget fra FNFE-MPE-utgivelsen 1.4.0.04, publisert 4. september 2026 for AFNOR XP Z12-012 versjon 1.4
Den offisielle FNFE-MPE-utgivelsen er publisert under Apache 2.0 og lenket fra FNFE-MPEs ressurside, mens det medfølgende EN 16931 CII-stilarket beholder EUPL 1.2, og de opprinnelige kompilerte stilarkene, Schematron-kildene, kodedatabasene, lisensene, kildestinene og hash-verdiene bevares under Lib/resources/Schematron/France
For fisFacturX støtter hjelperen BASIC WL, EN 16931 og EXTENDED med de publiserte Factur-X 1.09.2-regellagene, og EXTENDED-CTC-FR-containerbetegnelsen bruker samme Factur-X EXTENDED-lag pluss de franske landskontrollene
For frittstående fisCII støtter den EN 16931 og det dedikerte EXTENDED-CTC-FR CII-laget, hvis restriksjoner og retningslinjeidentifikator skiller seg fra det hybride Factur-X EXTENDED-laget
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 beholder separate profil- og landsregelversjoner og gjør det franske landslaget påkrevd for den valgte profilen, inkludert EN 16931 og BASIC WL når de eksplisitt registreres for Frankrike
Det strenge, publiserte nasjonale stilarket brukes direkte, uten å bytte inn den separate kun-advarsels-varianten eller nedgradere funn
Den låste offisielle pakken har ingen EXTENDED-B2B-FR-regelprofil, så hjelperen avviser det eldre navnet i stedet for å behandle det som et automatisk sertifisert alias
Vellykket validering etablerer fullførelse av disse publiserte faktura-forretningsregellagene, mens XML Schema, CDAR-livssyklusmeldinger, e-rapporteringsdatauttrekk, plattformautorisasjon, transport og juridisk sertifisering forblir separate områder
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 forblir null i XE2+-motoren og er reservert for Delphi 7-stubben eller eldre resultatdata
Feilformede eller ustøttede uttrykk produserer eksplisitte funn med feil-alvorlighet, øker EvaluationErrors og forsvinner aldri som vellykkede kontroller
Factur-X XML-hjelpefunksjoner
Uniten HPDFFacturX leverer bytenivå-hjelpere som leser en Factur-X / ZUGFeRD-faktura-XML uten å bygge et DOM, så de kjører på alle Delphi-versjoner biblioteket støtter og er trygge på uttrukne byte fra ExtractFacturXXML
HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes) returnerer retningslinjeidentifikatoren fra GuidelineSpecifiedDocumentContextParameter / ram:ID-elementet i et CII-dokument, eller en tom streng når den mangler
HPDFIsFacturXConformanceLevel(Value, FileName, Version) validerer et samsvarsnivånavn og godtar MINIMUM, BASIC WL, BASIC, EN 16931, EN16931, EXTENDED, EXTENDED-CTC-FR, EXTENDED-B2B-FR og XRECHNUNG; det eldre COMFORT-nivået krever i tillegg ZUGFeRD 1.0-filnavnet ZUGFeRD-invoice.xml med versjon 1.0
HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName) krysssjekker retningslinjen funnet i XML-en mot deklarert samsvarsnivå, versjon og innebygd filnavn
HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary) fyller en THPDFFacturXInvoiceSummary-record fra faktura-XML-en og returnerer True når i det minste den primære faktura-XML-en kunne lokaliseres; record-typen for oppsummeringen er selv deklarert i HPDFDoc ved siden av THPDFFacturXInvoiceInfo
Stabil diagnostikk og grenser
- Regelidentifikatorer parses fra Schematron-meldingstokenet når det finnes
- Manglende identifikatorer mottar deterministiske profil- og påstand-eller-rapport-ordinaler
- Hvert funn bevarer sin opprinnelige kontekst og testuttrykk
- Eksterne kodedatabase-baner er begrenset til søsken-filnavn
- DTD-behandling og ekstern XML-entity-oppløsning er deaktivert
- Faktura-XML-inngang er begrenset til 64 MiB
Tilgjengelighet for verktøykjede
Delphi XE2 og nyere bruker den innebygde MSXML-kompatibilitetsmotoren
Delphi 7 beholder de delte grensesnittene og resultattypene, men returnerer en diagnostikk om utilgjengelig motor
Relaterte API-er
HPDFValidateEInvoiceHPDFValidateEInvoiceWithRegistryHPDFValidateEInvoiceXMLTHPDFEInvoiceRuleRegistryHPDFRegisterXRechnungRulesHPDFRegisterFrenchCTCRulesTHPDFFrenchInvoiceSyntaxHPDFCreateSchematronEngineHPDFSchematronFileForProfileIHPDFESchematronEngineTHPDFBusinessRuleResultTHPDFSchematronSummary- THotPDF.ValidateFacturXInvoice
- THotPDF.ExtractFacturXXML
Ikke-GUI-godkjennelse
Kjør Tests/Delphi/Run-EInvoiceRuleTests.ps1 med eksplisitte verdier for JavaExecutable og SaxonClassPath, eller de tilsvarende miljøvariablene HOTPDF_JAVA_EXE og HOTPDF_SAXON_CLASSPATH
Standardkjøreren krever konfigurasjonen for motoren med offisielle regler og kjører både Win32 og Win64 med oppstart av PDF-leser undertrykket; -NativeOnly utelater med vilje offisiell Saxon-kjøring