Validierung von Geschäftsregeln für E-Rechnungen

HPDFEInvoiceValidator kombiniert die Container-Validierung für Factur-X oder ZUGFeRD mit explizit ausgewählten, versionierten Geschäftsregel- und Länderregelsätzen

Vollständige Ausführung aller geprüften Regeln

Die Bibliothek liefert passende `.sch`- und `_codedb.xml`-Ressourcen für MINIMUM, BASIC WL, BASIC, EN 16931 und EXTENDED

Die Engine ab XE2 führt die vollständige geprüfte XPath-2-Oberfläche durch sichere MSXML-Analyse, deterministische XPath-1-Äquivalente und direkte Auswertung für Quantoren, FLWOR-Summen, Umwandlungen, Sequenzvergleiche, externe Codelisten, Datumsmuster und boolesche Indikatorwerte aus

Das Profil EN 16931 enthält 618 Prüfungen, und jede einzelne wird bei jedem Validierungslauf ausgeführt

Kombinierte Validierung

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

HPDFValidateEInvoice ruft zuerst THotPDF.ValidateFacturXInvoice auf, extrahiert und identifiziert die Rechnungs-XML, lädt die profilspezifischen Schematron-Ressourcen und führt die Geschäftsregeln aus

Eine erkannte Hybridrechnung schlägt geschlossen fehl, wenn XML-Extraktion, Profilerkennung, Regel- oder Codedatenbankladen oder die Auswertung von Ausdrücken nicht abgeschlossen werden kann

Die Funktion liefert nur dann true, wenn der Container gültig ist, Geschäftsregeln ausgewertet wurden und kein Fehler- oder Warnbefund verbleibt

Profil-Registry und Validierungsumfang

THPDFEInvoiceRuleRegistry registriert je Profil eine Geschäftsregel-Ebene und, falls erforderlich, eine Länderregel-Ebene – mit explizitem Ressourcennamen, Regelversion und optionaler IHPDFESchematronEngine-Implementierung

Die Standard-Registry enthält die fünf mitgelieferten Factur-X-Profile und die Basis-EXTENDED-Regeln für die französischen Profile EXTENDED-CTC-FR und EXTENDED-B2B-FR

Die französischen Profile erfordern eine zusätzliche Länderregel-Registrierung, bevor ValidationComplete true wird, und XRECHNUNG verlangt sowohl EN 16931 CII als auch deutsche Länderregeln

Unbekannte Profile haben keine Standardregeln und fallen nie auf EXTENDED zurück; HPDFSchematronFileForProfile liefert für unbekannte oder länderspezifische Profile einen leeren String

HPDFValidateEInvoiceWithRegistry verwendet die Registry des Aufrufers zusammen mit der PDF-Container-Prüfung, während HPDFValidateEInvoiceXML explizite XML-Bytes und ein Profil validiert, ohne einen PDF-Container auszuwerten

Der Report stellt ProfileSupported, CountryRulesRequired, CountryRulesEvaluated, ValidationComplete und ValidationNote bereit, und sein RuleSets-Array hält für jede ausgewählte Ressource Name, Version, Umfang, Zusammenfassung und Abschlussstatus fest

Eine abgeschlossene Regelauswertung kann weiterhin Verstöße gegen Geschäftsregeln enthalten; prüfen Sie daher das boolesche Ergebnis oder BusinessRuleViolations zusätzlich zu ValidationComplete

Diese APIs melden die Abdeckung durch Geschäfts- und Länderregeln; XML-Schema-Validierung, Transportrichtlinien und rechtliche Akzeptanzentscheidungen bleiben außerhalb dieses Umfangs

Offizielle XRechnung-CII-Regeln

HPDFEInvoiceSaxon stellt eine optionale Saxon-HE-Brücke bereit, die die unverändert übernommenen, kompilierten Schematron-2.6.0-Stylesheets für EN 16931 CII 1.3.16 und XRechnung 3.0.2 aus Lib/resources/Schematron/XRechnung ausführt

Die Ressourcen stammen aus der offiziellen KoSIT-Validator-Konfiguration vom 31. August 2026, und das Ressourcen-README hält Provenienz, Lizenzen und Hashes fest

Der Host gibt die Java-Executable und den Saxon-Class-Path explizit an, und die Bibliothek startet die Transformation ohne Shell oder sichtbares Konsolenfenster, erzwingt ein Timeout, parst SVRL-Befunde und entfernt ihre temporären Dateien

Ein Timeout von null wählt 60 Sekunden, Werte über 3.600.000 Millisekunden werden abgelehnt, die Diagnoseausgabe ist auf 8 MiB begrenzt, und kompilierte Stylesheets sowie SVRL-Reports sind vor dem Parsen oder Laden auf 64 MiB begrenzt

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;

Konfigurieren Sie den Saxon-Class-Path mit Saxon HE und den erforderlichen Abhängigkeiten und verwenden Sie eine separate Registry- und Engine-Instanz pro Validierungsthread

Die optionale Brücke erfordert Delphi XE2 oder neuer unter Windows sowie eine vom Host bereitgestellte Java-/Saxon-Laufzeit; keine der beiden Laufzeiten wird von der Bibliothek heruntergeladen oder installiert

Fehlende Laufzeiten, falsche Rechnungssyntax, verbotene DTDs, Timeout, fehlgeschlagene Transformation und fehlerhafte SVRL-Ausgabe erzeugen explizite Diagnosen für eine unvollständige Validierung

Offizielle französische CTC-Rechnungsregeln

HPDFRegisterFrenchCTCRules wählt die offizielle Profil-Ebene und die strenge BR-FR-Flux2-Länderebene aus dem FNFE-MPE-Release 1.4.0.04 vom 4. September 2026 für AFNOR XP Z12-012 Version 1.4

Das offizielle FNFE-MPE-Release steht unter Apache 2.0 und ist über die FNFE-MPE-Ressourcenseite verlinkt; das enthaltene EN-16931-CII-Stylesheet behält EUPL 1.2, und die ursprünglichen kompilierten Stylesheets, Schematron-Quellen, Codedatenbanken, Lizenzen, Quellpfade und Hashes bleiben unter Lib/resources/Schematron/France erhalten

Für fisFacturX unterstützt der Helper BASIC WL, EN 16931 und EXTENDED mit den veröffentlichten Factur-X-1.09.2-Regel-Ebenen, und die Container-Bezeichnung EXTENDED-CTC-FR verwendet dieselbe Factur-X-EXTENDED-Ebene plus die französischen Länderprüfungen

Für eigenständiges fisCII unterstützt er EN 16931 und die dedizierte EXTENDED-CTC-FR-CII-Ebene, deren Einschränkungen und Guideline-Identifier sich von der hybriden Factur-X-EXTENDED-Ebene unterscheiden

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);

Die Registrierung bewahrt getrennte Profil- und Länderregel-Versionen und macht die französische Länderebene für das gewählte Profil erforderlich, einschließlich EN 16931 und BASIC WL, wenn sie explizit für Frankreich registriert werden

Das strenge veröffentlichte nationale Stylesheet wird direkt verwendet, ohne die separate Variante einzusetzen, die nur warnt, oder Befunde herabzustufen

Das fixierte offizielle Paket hat kein EXTENDED-B2B-FR-Regelprofil, daher weist der Helper diesen Legacy-Namen zurück, statt ihn als automatisch zertifizierten Alias zu behandeln

Eine erfolgreiche Validierung belegt den Abschluss dieser veröffentlichten Geschäftsregel-Ebenen für Rechnungen; XML Schema, CDAR-Lebenszyklusnachrichten, E-Reporting-Datenextraktion, Plattformautorisierung, Transport und rechtliche Zertifizierung bleiben eigene Themen

Engine-API

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

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

THPDFSchematronSummary meldet Profile, TotalRules, Evaluated, Skipped, EvaluationErrors, Violations, EngineAvailable und EngineNote

Skipped bleibt in der XE2-Engine und neuer null und ist für den Delphi-7-Stub oder Legacy-Ergebnisdaten reserviert

Fehlerhafte oder nicht unterstützte Ausdrücke erzeugen Befunde mit Fehlerschwere, erhöhen EvaluationErrors und verschwinden nie als erfolgreiche Prüfungen

Factur-X-XML-Helperfunktionen

Die Unit HPDFFacturX liefert Byte-Level-Helper, die eine Factur-X-/ZUGFeRD-Rechnungs-XML lesen, ohne einen DOM aufzubauen; sie laufen daher auf jeder Delphi-Version, die die Bibliothek unterstützt, und sind sicher für extrahierte Bytes aus ExtractFacturXXML

HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes) liefert den Guideline-Identifier aus dem Element GuidelineSpecifiedDocumentContextParameter / ram:ID eines CII-Dokuments oder einen leeren String, wenn er fehlt

HPDFIsFacturXConformanceLevel(Value, FileName, Version) prüft einen Conformance-Level-Namen und akzeptiert MINIMUM, BASIC WL, BASIC, EN 16931, EN16931, EXTENDED, EXTENDED-CTC-FR, EXTENDED-B2B-FR und XRECHNUNG; der Legacy-Level COMFORT verlangt zusätzlich den ZUGFeRD-1.0-Dateinamen ZUGFeRD-invoice.xml mit Version 1.0

HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName) gleicht die in der XML gefundene Guideline mit dem deklarierten Conformance-Level, der Version und dem eingebetteten Dateinamen ab

HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary) füllt einen THPDFFacturXInvoiceSummary-Record aus der Rechnungs-XML und liefert True, wenn mindestens die primäre Rechnungs-XML gefunden wurde; der Summary-Record-Typ selbst ist in HPDFDoc neben THPDFFacturXInvoiceInfo deklariert

Stabile Diagnose und Limits

Verfügbarkeit der Toolchain

Delphi XE2 und höher verwenden die integrierte MSXML-Kompatibilitätsengine

Delphi 7 behält die gemeinsamen Schnittstellen und Ergebnistypen bei, gibt jedoch eine Diagnose für eine nicht verfügbare Engine zurück

Verwandte APIs

Abnahme ohne GUI

Führen Sie Tests/Delphi/Run-EInvoiceRuleTests.ps1 mit expliziten Werten für JavaExecutable und SaxonClassPath aus oder mit den passenden Umgebungsvariablen HOTPDF_JAVA_EXE und HOTPDF_SAXON_CLASSPATH

Der Standard-Runner verlangt die Engine-Konfiguration mit offiziellen Regeln und läuft sowohl unter Win32 als auch Win64 mit unterdrücktem PDF-Viewer-Start; -NativeOnly lässt die offizielle Saxon-Ausführung bewusst weg