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
- Regelkennungen werden, sofern vorhanden, aus dem Schematron-Nachrichtentoken analysiert
- Fehlende Kennungen erhalten deterministische Profil- und Assertion- oder Report-Ordnungszahlen
- Jeder Befund bewahrt seine ursprünglichen Kontext- und Testausdrücke
- Externe Codedatenbankpfade sind auf Dateinamen im selben Verzeichnis beschränkt
- DTD-Verarbeitung und externe XML-Entity-Auflösung sind deaktiviert
- Die XML-Eingabe der Rechnung ist auf 64 MiB begrenzt
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
HPDFValidateEInvoiceHPDFValidateEInvoiceWithRegistryHPDFValidateEInvoiceXMLTHPDFEInvoiceRuleRegistryHPDFRegisterXRechnungRulesHPDFRegisterFrenchCTCRulesTHPDFFrenchInvoiceSyntaxHPDFCreateSchematronEngineHPDFSchematronFileForProfileIHPDFESchematronEngineTHPDFBusinessRuleResultTHPDFSchematronSummary- THotPDF.ValidateFacturXInvoice
- THotPDF.ExtractFacturXXML
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