Walidacja zasad biznesowych e-faktur
HPDFEInvoiceValidator łączy walidację kontenera Factur-X lub ZUGFeRD z jawnie wybranymi, wersjonowanymi zestawami zasad biznesowych i zasad krajowych
Pełne sprawdzone wykonanie zasad
Biblioteka dostarcza zgodne zasoby `.sch` i `_codedb.xml` dla MINIMUM, BASIC WL, BASIC, EN 16931 i EXTENDED
Silnik XE2 i nowsze wykonuje pełną sprawdzoną powierzchnię XPath 2 przez bezpieczne parsowanie MSXML, deterministyczne odpowiedniki XPath 1 i bezpośrednią ocenę kwantyfikatorów, sum FLWOR, rzutowań, porównań sekwencji, zewnętrznych list kodów, wzorców dat i wartości wskaźników boolowskich
Profil EN 16931 zawiera 618 kontroli i każda kontrola jest przetwarzana podczas każdego przebiegu walidacji
Walidacja łączona
var
Report: THPDFEInvoiceValidationReport;
begin
if not HPDFValidateEInvoice(PDF,
'Lib\resources\Schematron', Report) then
LogValidationFailure(Report);
end;
HPDFValidateEInvoice najpierw wywołuje THotPDF.ValidateFacturXInvoice, wyodrębnia i identyfikuje XML faktury, ładuje zasoby Schematron specyficzne dla profilu i wykonuje zasady biznesowe
Wykryta hybrydowa faktura kończy się bezpiecznie, gdy wyodrębnianie XML, wykrywanie profilu, ładowanie zasad, ładowanie bazy kodów lub ocena wyrażeń nie może się zakończyć
Funkcja zwraca prawdę tylko, gdy kontener jest prawidłowy, zasady biznesowe zostały ocenione i nie pozostaje żadne znalezisko błędu lub ostrzeżenia
Rejestr profili i zakres walidacji
THPDFEInvoiceRuleRegistry rejestruje jedną warstwę zasad biznesowych i, gdy wymagana, jedną warstwę zasad krajowych na profil, z jawną nazwą zasobu, wersją zasad i opcjonalną implementacją IHPDFESchematronEngine
Domyślny rejestr zawiera pięć dostarczanych profili Factur-X oraz bazowe zasady EXTENDED dla profili francuskich EXTENDED-CTC-FR i EXTENDED-B2B-FR
Profile francuskie wymagają dodatkowej rejestracji zasad krajowych, zanim ValidationComplete stanie się prawdą, a XRECHNUNG wymaga zarówno CII EN 16931, jak i niemieckich zasad krajowych
Nieznane profile nie mają domyślnych zasad i nigdy nie schodzą do EXTENDED, a HPDFSchematronFileForProfile zwraca pusty łańcuch dla profili nieznanych lub specyficznych dla kraju
HPDFValidateEInvoiceWithRegistry używa rejestru wywołującego razem z kontrolą kontenera PDF, podczas gdy HPDFValidateEInvoiceXML waliduje jawne bajty XML i profil bez ewaluacji kontenera PDF
Raport wystawia ProfileSupported, CountryRulesRequired, CountryRulesEvaluated, ValidationComplete i ValidationNote, a jego tablica RuleSets zapisuje każdy wybrany zasób, wersję, zakres, podsumowanie i status ukończenia
Zakończona ewaluacja zasad może nadal zawierać naruszenia zasad biznesowych, więc sprawdzaj wynik boolowski lub BusinessRuleViolations oprócz ValidationComplete
Te API raportują pokrycie zasad biznesowych i krajowych, podczas gdy walidacja XML Schema, polityki transportowe i decyzje o akceptacji prawnej pozostają poza tym zakresem
Oficjalne zasady CII XRechnung
HPDFEInvoiceSaxon dostarcza opcjonalny most do Saxon HE, który wykonuje niezmodyfikowane skompilowane arkusze stylów Schematron 2.6.0 EN 16931 CII 1.3.16 i XRechnung 3.0.2 dostarczane w Lib/resources/Schematron/XRechnung
Zasoby pochodzą z oficjalnej konfiguracji walidatora KoSIT z 31 sierpnia 2026, a README zasobów zapisuje ich pochodzenie, licencje i hasze
Host dostarcza jawnie plik wykonywalny Javy i ścieżkę klas Saxona, a biblioteka uruchamia transformację bez powłoki i widocznego okna konsoli, egzekwuje timeout, parsuje znaleziska SVRL i usuwa swoje pliki tymczasowe
Timeout zero wybiera 60 sekund, wartości powyżej 3 600 000 milisekund są odrzucane, wyjście diagnostyczne jest ograniczone do 8 MiB, a skompilowane arkusze stylów i raporty SVRL do 64 MiB przed parsowaniem lub ładowaniem
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;
Skonfiguruj ścieżkę klas Saxona z Saxon HE i jego wymaganymi zależnościami oraz używaj osobnej instancji rejestru i silnika na wątek walidacji
Opcjonalny most wymaga Delphi XE2 lub nowszego na Windows i dostarczonego przez hosta runtime Java/Saxon, a żaden z nich nie jest pobierany ani instalowany przez bibliotekę
Brakujące runtime'y, zła składnia faktury, zakazane DTD, timeout, nieudana transformacja i źle uformowane wyjście SVRL dają jawne diagnostyki niepełnej walidacji
Oficjalne francuskie zasady faktur CTC
HPDFRegisterFrenchCTCRules wybiera oficjalną warstwę profilu i ścisłą krajową warstwę BR-FR-Flux2 z wydania FNFE-MPE 1.4.0.04, opublikowanego 4 września 2026 dla AFNOR XP Z12-012 w wersji 1.4
Oficjalne wydanie FNFE-MPE jest publikowane na licencji Apache 2.0 i linkowane ze strony zasobów FNFE-MPE, dołączony arkusz stylów CII EN 16931 zachowuje EUPL 1.2, a pierwotne skompilowane arkusze stylów, źródła Schematron, bazy kodów, licencje, ścieżki źródłowe i hasze są zachowane pod Lib/resources/Schematron/France
Dla fisFacturX helper obsługuje BASIC WL, EN 16931 i EXTENDED z opublikowanymi warstwami zasad Factur-X 1.09.2, a oznaczenie kontenera EXTENDED-CTC-FR używa tej samej warstwy EXTENDED Factur-X plus francuskich kontroli krajowych
Dla samodzielnego fisCII obsługuje EN 16931 i dedykowaną warstwę CII EXTENDED-CTC-FR, której ograniczenia i identyfikator wytycznej różnią się od hybrydowej warstwy EXTENDED Factur-X
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);
Rejestracja zachowuje osobne wersje profilu i zasad krajowych oraz czyni francuską warstwę krajową wymaganą dla wybranego profilu, łącznie z EN 16931 i BASIC WL, gdy zostały jawnie zarejestrowane dla Francji
Ścisły opublikowany krajowy arkusz stylów jest używany bezpośrednio, bez podstawiania osobnego wariantu tylko-ostrzegawczego i bez obniżania rangi znalezisk
Przypięty oficjalny pakiet nie ma profilu zasad EXTENDED-B2B-FR, więc helper odrzuca tę dziedziczną nazwę, zamiast traktować ją jako automatycznie certyfikowany alias
Udana walidacja potwierdza ukończenie tych opublikowanych warstw zasad biznesowych faktur, podczas gdy XML Schema, komunikaty cyklu życia CDAR, ekstrakcja danych e-reporting, autoryzacja platformy, transport i certyfikacja prawna pozostają osobnymi zakresami
API silnika
Engine := HPDFCreateSchematronEngine;
if not Engine.Load(SchematronPath, ErrorText) then
raise Exception.Create(ErrorText);
Findings := Engine.Validate(XMLBytes);
Summary := Engine.LastSummary;
THPDFSchematronSummary raportuje Profile, TotalRules, Evaluated, Skipped, EvaluationErrors, Violations, EngineAvailable i EngineNote
Skipped pozostaje zerem w silniku XE2 i nowszych i jest zarezerwowane dla stub Delphi 7 lub danych wyników dziedzicznych
Źle uformowane lub nieobsługiwane wyrażenia dają jawne znaleziska o powadze błędu, zwiększają EvaluationErrors i nigdy nie znikają jako udane kontrole
Funkcje pomocnicze XML Factur-X
Jednostka HPDFFacturX dostarcza helpery na poziomie bajtów, które czytają XML faktury Factur-X / ZUGFeRD bez budowania DOM, więc działają na każdej wersji Delphi wspieranej przez bibliotekę i są bezpieczne na bajtach wyekstrahowanych przez ExtractFacturXXML
HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes) zwraca identyfikator wytycznej z elementu GuidelineSpecifiedDocumentContextParameter / ram:ID dokumentu CII albo pusty łańcuch, gdy go nie ma
HPDFIsFacturXConformanceLevel(Value, FileName, Version) waliduje nazwę poziomu zgodności, akceptując MINIMUM, BASIC WL, BASIC, EN 16931, EN16931, EXTENDED, EXTENDED-CTC-FR, EXTENDED-B2B-FR i XRECHNUNG; dziedziczny poziom COMFORT dodatkowo wymaga nazwy pliku ZUGFeRD 1.0 ZUGFeRD-invoice.xml z wersją 1.0
HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName) krzyżowo sprawdza wytyczną znalezioną w XML względem zadeklarowanego poziomu zgodności, wersji i osadzonej nazwy pliku
HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary) wypełnia rekord THPDFFacturXInvoiceSummary z XML faktury i zwraca True, gdy przynajmniej główny XML faktury udało się zlokalizować; sam typ rekordu podsumowania jest zadeklarowany w HPDFDoc obok THPDFFacturXInvoiceInfo
Stabilna diagnostyka i limity
- Identyfikatory zasad są parsowane z tokenu wiadomości Schematron, gdy jest obecny
- Brakujące identyfikatory otrzymują deterministyczne liczby porządkowe asercji lub raportów i profilu
- Każde znalezisko zachowuje swój pierwotny kontekst i wyrażenia testowe
- Zewnętrzne ścieżki baz kodów są ograniczone do nazw plików siostrzanych
- Przetwarzanie DTD i rozpoznawanie zewnętrznych encji XML są wyłączone
- Wejście XML faktury jest ograniczone do 64 MiB
Dostępność łańcucha narzędzi
Delphi XE2 i nowsze używają wbudowanego silnika zgodności MSXML
Delphi 7 zachowuje współdzielone interfejsy i typy wyników, ale zwraca diagnostykę niedostępnego silnika
Powiązane API
HPDFValidateEInvoiceHPDFValidateEInvoiceWithRegistryHPDFValidateEInvoiceXMLTHPDFEInvoiceRuleRegistryHPDFRegisterXRechnungRulesHPDFRegisterFrenchCTCRulesTHPDFFrenchInvoiceSyntaxHPDFCreateSchematronEngineHPDFSchematronFileForProfileIHPDFESchematronEngineTHPDFBusinessRuleResultTHPDFSchematronSummary- THotPDF.ValidateFacturXInvoice
- THotPDF.ExtractFacturXXML
Akceptacja bez GUI
Uruchom Tests/Delphi/Run-EInvoiceRuleTests.ps1 z jawnymi wartościami JavaExecutable i SaxonClassPath albo odpowiadającymi im zmiennymi środowiskowymi HOTPDF_JAVA_EXE i HOTPDF_SAXON_CLASSPATH
Domyślny runner wymaga konfiguracji silnika reguł oficjalnych i uruchamia zarówno Win32, jak i Win64 z wytłumionym uruchamianiem przeglądarki PDF; -NativeOnly celowo pomija wykonanie oficjalnego Saxona