Ověření obchodních pravidel elektronické faktury
HPDFEInvoiceValidator kombinuje validaci kontejneru Factur-X nebo ZUGFeRD s explicitně vybranými, verzovanými sadami obchodních pravidel a pravidel země
Kompletní prověřené vykonání pravidel
Knihovna dodává odpovídající zdroje `.sch` a `_codedb.xml` pro MINIMUM, BASIC WL, BASIC, EN 16931 a EXTENDED
Engine pro XE2 a novější vykonává kompletní prověřenou plochu XPath 2 přes bezpečné parsování MSXML, deterministické ekvivalenty XPath 1 a přímé vyhodnocení kvantifikátorů, součtů FLWOR, castů, porovnání sekvencí, externích seznamů kódů, vzorů dat a logických hodnot indikátorů
Profil EN 16931 obsahuje 618 kontrol a každá kontrola se zpracuje při každém validačním běhu
Kombinovaná validace
var
Report: THPDFEInvoiceValidationReport;
begin
if not HPDFValidateEInvoice(PDF,
'Lib\resources\Schematron', Report) then
LogValidationFailure(Report);
end;
HPDFValidateEInvoice nejprve zavolá THotPDF.ValidateFacturXInvoice, extrahuje a identifikuje XML faktury, načte zdroje Schematron specifické pro profil a provede obchodní pravidla
Detekovaná hybridní faktura selže bezpečně, když extrakci XML, detekci profilu, načtení pravidel, načtení databáze kódů nebo vyhodnocení výrazů nelze dokončit
Funkce vrací true jen tehdy, když je kontejner validní, obchodní pravidla byla vyhodnocena a nezůstává žádný nález chyby ani varování
Registry profilů a rozsah validace
THPDFEInvoiceRuleRegistry registruje jednu vrstvu obchodních pravidel a podle potřeby jednu vrstvu pravidel země pro každý profil, s explicitním názvem resource, verzí pravidel a volitelnou implementací IHPDFESchematronEngine
Výchozí registry obsahuje pět dodávaných profilů Factur-X a základní pravidla EXTENDED pro francouzské profily EXTENDED-CTC-FR a EXTENDED-B2B-FR
Francouzské profily vyžadují před tím, než se ValidationComplete stane true, dodatečnou registraci vrstvy pravidel země a XRECHNUNG vyžaduje zároveň EN 16931 CII a německá pravidla země
Neznámé profily nemají žádná výchozí pravidla a nikdy nespadnou zpět na EXTENDED a HPDFSchematronFileForProfile pro neznámé nebo země specifické profily vrátí prázdný řetězec
HPDFValidateEInvoiceWithRegistry použije registry volajícího spolu s kontrolou PDF kontejneru, zatímco HPDFValidateEInvoiceXML zvaliduje explicitní XML bajty a profil, aniž by vyhodnocovala PDF kontejner
Report zpřístupňuje ProfileSupported, CountryRulesRequired, CountryRulesEvaluated, ValidationComplete a ValidationNote a jeho pole RuleSets zaznamenává každý vybraný resource, verzi, rozsah, souhrn a stav dokončení
Dokončené vyhodnocení pravidel může stále obsahovat porušení obchodních pravidel, takže kromě ValidationComplete kontrolujte i boolean výsledek nebo BusinessRuleViolations
Tato API hlásí pokrytí obchodními pravidly a pravidly země, zatímco validace XML Schema, transportní politiky a právní rozhodnutí o přijetí zůstávají mimo tento rozsah
Oficiální pravidla XRechnung CII
HPDFEInvoiceSaxon dodává volitelný most na Saxon HE, který vykoná nemodifikované kompilované stylesheety Schematron 2.6.0 pro EN 16931 CII 1.3.16 a XRechnung 3.0.2 dodávané v Lib/resources/Schematron/XRechnung
Zdroje pocházejí z oficiální konfigurace validátoru KoSIT ze 31. srpna 2026 a README resource zaznamenává jejich původ, licence a hashe
Hostitel explicitně dodá Java spustitelný soubor a class path Saxonu a knihovna spustí transformaci bez shellu a bez viditelného konzolového okna, vynutí timeout, parsuje nálezy SVRL a odstraní své dočasné soubory
Nulový timeout znamená 60 sekund, hodnoty nad 3 600 000 milisekund se odmítnou, diagnostický výstup má strop 8 MiB a kompilované stylesheety i SVRL reporty mají před parsováním nebo načtením strop 64 MiB
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;
Class path Saxonu nakonfigurujte se Saxon HE a jeho vyžadovanými závislostmi a pro každé validační vlákno použijte samostatnou instanci registru i engine
Volitelný most vyžaduje Delphi XE2 nebo novější na Windows a runtime Java/Saxon dodaný hostitelem; ani jeden z nich knihovna nestahuje ani neinstaluje
Chybějící runtime, špatná syntax faktury, zakázané DTD, timeout, neúspěšná transformace a poškozený SVRL výstup produkují explicitní diagnostiku neúplné validace
Oficiální francouzská pravidla CTC faktur
HPDFRegisterFrenchCTCRules vybere oficiální profilovou vrstvu a přísnou vrstvu země BR-FR-Flux2 z release 1.4.0.04 od FNFE-MPE, publikovaného 4. září 2026 pro AFNOR XP Z12-012 verze 1.4
Oficiální release FNFE-MPE je publikovaný pod Apache 2.0 a odkazuje na něj stránka resource FNFE-MPE, připojený stylesheel EN 16931 CII si zachovává EUPL 1.2 a původní kompilované stylesheety, zdroje Schematron, databáze kódů, licence, zdrojové cesty a hashe se zachovávají pod Lib/resources/Schematron/France
Pro fisFacturX helper podporuje BASIC WL, EN 16931 a EXTENDED s publikovanými vrstvami pravidel Factur-X 1.09.2 a označení kontejneru EXTENDED-CTC-FR používá tutéž vrstvu Factur-X EXTENDED plus francouzské kontroly země
Pro samostatný fisCII podporuje EN 16931 a dedikovanou vrstvu CII EXTENDED-CTC-FR, jejíž omezení a identifikátor směrnic se liší od hybridní vrstvy Factur-X EXTENDED
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);
Registrace zachovává oddělené verze profilů a pravidel země a činí francouzskou vrstvu země povinnou pro vybraný profil, včetně EN 16931 a BASIC WL, pokud jsou explicitně registrovány pro Francii
Přísný publikovaný národní stylesheel se používá přímo, bez substituce samostatné varianty jen s varováními a bez zeslabování nálezů
Zamčený oficiální balíček nemá profil pravidel EXTENDED-B2B-FR, takže helper toto legacy jméno odmítne, místo aby ho bral jako automaticky certifikovaný alias
Úspěšná validace znamená dokončení těchto publikovaných vrstev obchodních pravidel faktur, zatímco XML Schema, lifecycle zprávy CDAR, extrakce dat e-reportingu, autorizace platformy, transport a právní certifikace zůstávají samostatnými oblastmi
Engine API
Engine := HPDFCreateSchematronEngine;
if not Engine.Load(SchematronPath, ErrorText) then
raise Exception.Create(ErrorText);
Findings := Engine.Validate(XMLBytes);
Summary := Engine.LastSummary;
THPDFSchematronSummary hlásí Profile, TotalRules, Evaluated, Skipped, EvaluationErrors, Violations, EngineAvailable a EngineNote
Skipped zůstává v engine pro XE2 a novější nulové a je rezervované pro stub Delphi 7 nebo legacy výsledná data
Poškozené nebo nepodporované výrazy produkují explicitní nálezy závažnosti chyby, zvyšují EvaluationErrors a nikdy nezmizí jako úspěšné kontroly
Pomocné funkce XML Factur-X
Jednotka HPDFFacturX dodává pomocné funkce na úrovni bajtů, které čtou XML faktury Factur-X / ZUGFeRD bez stavění DOM, takže běží na všech verzích Delphi, které knihovna podporuje, a jsou bezpečné na bajtech extrahovaných přes ExtractFacturXXML
HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes) vrátí identifikátor směrnic z elementu GuidelineSpecifiedDocumentContextParameter / ram:ID dokumentu CII, nebo prázdný řetězec, když chybí
HPDFIsFacturXConformanceLevel(Value, FileName, Version) zvaliduje název úrovně shody a přijímá MINIMUM, BASIC WL, BASIC, EN 16931, EN16931, EXTENDED, EXTENDED-CTC-FR, EXTENDED-B2B-FR a XRECHNUNG; legacy úroveň COMFORT navíc vyžaduje název souboru ZUGFeRD-invoice.xml s verzí 1.0 podle ZUGFeRD 1.0
HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName) zkříží guideline nalezenou v XML s deklarovanou úrovní shody, verzí a názvem vloženého souboru
HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary) naplní record THPDFFacturXInvoiceSummary z XML faktury a vrátí True, když se podařilo najít alespoň primární XML faktury; typ summary recordu je sám deklarovaný v HPDFDoc vedle THPDFFacturXInvoiceInfo
Stabilní diagnostika a meze
- Identifikátory pravidel se parsují z toku zprávy Schematron, když jsou přítomny
- Chybějící identifikátory dostanou deterministické ordinály profilu a assertion-or-report
- Každý nález zachovává svůj původní kontext a testovací výrazy
- Cesty externích databází kódů se omezují na názvy sourozeneckých souborů
- Zpracování DTD a řešení externích XML entit je zakázané
- Vstupní XML faktury je omezeno na 64 MiB
Dostupnost toolchainu
Delphi XE2 a novější používají vestavěný kompatibilní engine MSXML
Delphi 7 zachovává sdílená rozhraní a výsledné typy, ale vrací diagnostiku nedostupného engine
Související API
HPDFValidateEInvoiceHPDFValidateEInvoiceWithRegistryHPDFValidateEInvoiceXMLTHPDFEInvoiceRuleRegistryHPDFRegisterXRechnungRulesHPDFRegisterFrenchCTCRulesTHPDFFrenchInvoiceSyntaxHPDFCreateSchematronEngineHPDFSchematronFileForProfileIHPDFESchematronEngineTHPDFBusinessRuleResultTHPDFSchematronSummary- THotPDF.ValidateFacturXInvoice
- THotPDF.ExtractFacturXXML
Ne-GUI přijetí
Spusťte Tests/Delphi/Run-EInvoiceRuleTests.ps1 s explicitními hodnotami JavaExecutable a SaxonClassPath nebo s odpovídajícími proměnnými prostředí HOTPDF_JAVA_EXE a HOTPDF_SAXON_CLASSPATH
Výchozí runner vyžaduje konfiguraci engine oficiálních pravidel a běží na Win32 i Win64 s potlačeným spouštěním prohlížeče PDF; -NativeOnly vykonání oficiálního Saxonu záměrně vynechá