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

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

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á