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

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

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