Validare a regulilor de business pentru facturi electronice

HPDFEInvoiceValidator combină validarea containerului Factur-X sau ZUGFeRD cu seturi versionate, selectate explicit, de reguli de business și de reguli de țară

Execuție completă a regulilor revizuite

Biblioteca livrează resursele `.sch` și `_codedb.xml` corespunzătoare pentru MINIMUM, BASIC WL, BASIC, EN 16931 și EXTENDED

Motorul XE2 și ulterior execută suprafața completă revizuită XPath 2 prin analizare MSXML securizată, echivalente deterministe XPath 1 și evaluare directă pentru cuantificatori, sume FLWOR, conversii de tip, comparații de secvențe, liste externe de coduri, modele de date și valori booleene de indicator

Profilul EN 16931 conține 618 verificări și fiecare verificare este procesată în timpul fiecărei rulări de validare

Validare combinată

var
  Report: THPDFEInvoiceValidationReport;
begin
  if not HPDFValidateEInvoice(PDF,
    'Lib\resources\Schematron', Report) then
    LogValidationFailure(Report);
end;

HPDFValidateEInvoice apelează mai întâi THotPDF.ValidateFacturXInvoice, extrage și identifică XML-ul facturii, încarcă resursele Schematron specifice profilului și execută regulile de afaceri

O factură hibridă detectată eșuează în mod închis când extragerea XML, detectarea profilului, încărcarea regulilor, încărcarea bazei de coduri sau evaluarea expresiilor nu se pot finaliza

Funcția returnează true doar când containerul este valid, regulile de afaceri au fost evaluate și nu rămâne nicio constatare de eroare sau avertisment

Registru de profiluri și scop de validare

THPDFEInvoiceRuleRegistry înregistrează un strat de reguli de business și, când este necesar, un strat de reguli de țară per profil, cu un nume de resursă explicit, o versiune de reguli și o implementare opțională IHPDFESchematronEngine

Registrul implicit conține cele cinci profiluri Factur-X livrate și regulile EXTENDED de bază pentru profilurile franceze EXTENDED-CTC-FR și EXTENDED-B2B-FR

Profilurile franceze cer o înregistrare suplimentară de reguli de țară înainte ca ValidationComplete să devină true, iar XRECHNUNG cere atât regulile de țară EN 16931 CII, cât și cele germane

Profilurile necunoscute nu au reguli implicite și nu cad niciodată pe EXTENDED, iar HPDFSchematronFileForProfile returnează un șir gol pentru profilurile necunoscute sau specifice unei țări

HPDFValidateEInvoiceWithRegistry folosește registrul apelantului împreună cu verificarea containerului PDF, în timp ce HPDFValidateEInvoiceXML validează bytes XML expliciți și un profil fără a evalua un container PDF

Raportul expune ProfileSupported, CountryRulesRequired, CountryRulesEvaluated, ValidationComplete și ValidationNote, iar tabloul său RuleSets înregistrează fiecare resursă selectată, versiune, scop, rezumat și stare de finalizare

O evaluare completă a regulilor poate conține în continuare încălcări de reguli de business, deci verificați rezultatul boolean sau BusinessRuleViolations, pe lângă ValidationComplete

Aceste API-uri raportează acoperirea regulilor de business și de țară, în timp ce validarea XML Schema, politicile de transport și deciziile de acceptare legală rămân în afara acestui scop

Reguli oficiale XRechnung CII

HPDFEInvoiceSaxon furnizează o punte opțională Saxon HE care execută neatinse foilile de stil compilate EN 16931 CII 1.3.16 și XRechnung 3.0.2 Schematron 2.6.0 livrate în Lib/resources/Schematron/XRechnung

Resursele provin din configurația oficială a validatorului KoSIT din 31 august 2026, iar README-ul resurselor înregistrează proveniența, licențele și hash-urile lor

Gazda furnizează explicit executabilul Java și class path-ul Saxon, iar biblioteca lansează transformarea fără shell și fără o fereastră de consolă vizibilă, impune un timeout, parsează constatările SVRL și își elimină fișierele temporare

Un timeout zero selectează 60 de secunde, valorile peste 3.600.000 de milisecunde sunt respinse, output-ul de diagnostic este plafonat la 8 MiB, iar foilile de stil compilate și rapoartele SVRL sunt plafonate la 64 MiB înainte de parsare sau de încărcare

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;

Configurați class path-ul Saxon cu Saxon HE și dependențele sale necesare și folosiți o instanță separată de registru și de motor per thread de validare

Puntea opțională cere Delphi XE2 sau ulterior pe Windows și un runtime Java/Saxon furnizat de gazdă, iar niciunul dintre runtime-uri nu este descărcat sau instalat de bibliotecă

Runtime-urile lipsă, sintaxa greșită a facturii, DTD-urile interzise, timeout-ul, transformarea eșuată și output-ul SVRL malformat produc diagnostice explicite de validare-incompletă

Regulile oficiale franceze CTC pentru facturi

HPDFRegisterFrenchCTCRules selectează stratul oficial de profil și stratul strict de țară BR-FR-Flux2 din release-ul FNFE-MPE 1.4.0.04, publicat la 4 septembrie 2026 pentru AFNOR XP Z12-012 versiunea 1.4

Release-ul oficial FNFE-MPE este publicat sub Apache 2.0 și este legat de pagina de resurse FNFE-MPE, în timp ce foaia de stil EN 16931 CII inclusă păstrează EUPL 1.2, iar foilile de stil compilate originale, sursele Schematron, bazele de coduri, licențele, căile sursă și hash-urile sunt păstrate sub Lib/resources/Schematron/France

Pentru fisFacturX, helper-ul suportă BASIC WL, EN 16931 și EXTENDED folosind straturile publicate de reguli Factur-X 1.09.2, iar denumirea containerului EXTENDED-CTC-FR folosește același strat Factur-X EXTENDED plus verificările de țară franceze

Pentru fisCII standalone, suportă EN 16931 și stratul CII dedicat EXTENDED-CTC-FR, ale cărui restricții și identificator de guideline diferă de stratul hibrid 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);

Înregistrarea păstrează versiuni separate pentru profil și pentru regulile de țară și face stratul francez de țară obligatoriu pentru profilul selectat, inclusiv EN 16931 și BASIC WL când sunt înregistrate explicit pentru Franța

Foia de stil național publică, strictă, este folosită direct, fără a substitui varianta separată doar-avertisment sau a degrada constatările

Pachetul oficial fixat nu are un profil de reguli EXTENDED-B2B-FR, deci helper-ul respinge acel nume moștenit, în loc să îl trateze ca un alias certificat automat

Validarea reușită stabilește finalizarea acestor straturi publicate de reguli de business pentru facturi, în timp ce XML Schema, mesajele de ciclu de viață CDAR, extragerea datelor pentru e-reporting, autorizarea pe platformă, transportul și certificarea legală rămân scopuri separate

API-ul motorului

Engine := HPDFCreateSchematronEngine;
if not Engine.Load(SchematronPath, ErrorText) then
  raise Exception.Create(ErrorText);

Findings := Engine.Validate(XMLBytes);
Summary := Engine.LastSummary;

THPDFSchematronSummary raportează Profile, TotalRules, Evaluated, Skipped, EvaluationErrors, Violations, EngineAvailable și EngineNote

Skipped rămâne zero în motorul XE2 și ulterior și este rezervat pentru stub-ul Delphi 7 sau datele de rezultat moștenite

Expresiile malformate sau nesuportate produc constatări explicite de severitate-eroare, incrementează EvaluationErrors și nu dispar niciodată ca verificări reușite

Funcții helper XML Factur-X

Unitatea HPDFFacturX livrează helper-e la nivel de bytes care citesc XML-ul unei facturi Factur-X / ZUGFeRD fără a construi un DOM, astfel încât rulează pe fiecare versiune Delphi suportată de bibliotecă și sunt sigure pe bytes extrase prin ExtractFacturXXML

HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes) returnează identificatorul de guideline din elementul GuidelineSpecifiedDocumentContextParameter / ram:ID al unui document CII, sau un șir gol când este absent

HPDFIsFacturXConformanceLevel(Value, FileName, Version) validează un nume de nivel de conformitate, acceptând MINIMUM, BASIC WL, BASIC, EN 16931, EN16931, EXTENDED, EXTENDED-CTC-FR, EXTENDED-B2B-FR și XRECHNUNG; nivelul moștenit COMFORT cere în plus numele de fișier ZUGFeRD 1.0 ZUGFeRD-invoice.xml cu versiunea 1.0

HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName) verifică încrucișat guideline-ul găsit în XML față de nivelul de conformitate, versiunea și numele de fișier declarate

HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary) umple o înregistrare THPDFFacturXInvoiceSummary din XML-ul facturii și returnează True când cel puțin XML-ul principal al facturii a putut fi localizat; tipul de înregistrare al rezumatului este declarat în HPDFDoc, lângă THPDFFacturXInvoiceInfo

Diagnosticare și limite stabile

Disponibilitatea toolchain-ului

Delphi XE2 și ulterior folosesc motorul de compatibilitate MSXML încorporat

Delphi 7 păstrează interfețele și tipurile de rezultat partajate, dar returnează un diagnostic de motor indisponibil

API-uri conexe

Acceptanță non-GUI

Rulați Tests/Delphi/Run-EInvoiceRuleTests.ps1 cu valori explicite JavaExecutable și SaxonClassPath, sau cu variabilele de mediu corespunzătoare HOTPDF_JAVA_EXE și HOTPDF_SAXON_CLASSPATH

Runner-ul implicit cere configurația motorului cu reguli oficiale și rulează atât Win32, cât și Win64, cu lansarea de vizualizatoare PDF suprimată; -NativeOnly omitere deliberat execuția Saxon oficial