E-Invoice Business-Rule Validation
HPDFEInvoiceValidator combine la validation de conteneur Factur-X ou ZUGFeRD avec des jeux de règles métier et de règles pays explicitement sélectionnés et versionnés
Exécution complète des règles examinées
La bibliothèque fournit les ressources `.sch` et `_codedb.xml` correspondantes pour MINIMUM, BASIC WL, BASIC, EN 16931 et EXTENDED
Le moteur XE2 et ultérieur exécute la surface XPath 2 complète examinée via un analyseur MSXML sécurisé, des équivalents XPath 1 déterministes et une évaluation directe pour les quantificateurs, les sommes FLWOR, les conversions, les comparaisons de séquences, les listes de codes externes, les motifs de dates et les valeurs d'indicateurs booléens
Le profil EN 16931 contient 618 vérifications et chaque vérification est traitée à chaque exécution de validation
Validation combinée
var
Report: THPDFEInvoiceValidationReport;
begin
if not HPDFValidateEInvoice(PDF,
'Lib\resources\Schematron', Report) then
LogValidationFailure(Report);
end;
HPDFValidateEInvoice appelle d'abord THotPDF.ValidateFacturXInvoice, extrait et identifie le XML de facture, charge les ressources Schematron spécifiques au profil et exécute les règles métier
Une facture hybride détectée échoue en fail-closed lorsque l'extraction XML, la détection de profil, le chargement de règles, le chargement de base de codes ou l'évaluation d'expressions ne peuvent pas aboutir
La fonction renvoie true uniquement lorsque le conteneur est valide, les règles métier ont été évaluées et aucune constatation d'erreur ou d'avertissement ne subsiste
Registry de profils et périmètre de validation
THPDFEInvoiceRuleRegistry enregistre une couche de règles métier et, si nécessaire, une couche de règles pays par profil, avec un nom de ressource explicite, une version de règles et une implémentation IHPDFESchematronEngine facultative
Le registry par défaut contient les cinq profils Factur-X livrés et les règles EXTENDED de base pour les profils français EXTENDED-CTC-FR et EXTENDED-B2B-FR
Les profils français exigent un enregistrement supplémentaire de règles pays avant que ValidationComplete devienne vrai, et XRECHNUNG exige à la fois les règles CII EN 16931 et les règles pays allemandes
Les profils inconnus n'ont aucune règle par défaut et ne retombent jamais sur EXTENDED, et HPDFSchematronFileForProfile renvoie une chaîne vide pour les profils inconnus ou spécifiques à un pays
HPDFValidateEInvoiceWithRegistry utilise le registry de l'appelant avec le contrôle de conteneur PDF, tandis que HPDFValidateEInvoiceXML valide des octets XML explicites et un profil sans évaluer de conteneur PDF
Le rapport expose ProfileSupported, CountryRulesRequired, CountryRulesEvaluated, ValidationComplete et ValidationNote, et son tableau RuleSets enregistre chaque ressource sélectionnée, sa version, son périmètre, son résumé et son statut de complétion
Une évaluation de règles terminée peut encore contenir des violations de règles métier : vérifiez donc le résultat booléen ou BusinessRuleViolations en plus de ValidationComplete
Ces API signalent la couverture des règles métier et pays ; la validation XML Schema, les politiques de transport et les décisions d'acceptation légales restent hors de ce périmètre
Règles CII XRechnung officielles
HPDFEInvoiceSaxon fournit un pont Saxon HE facultatif qui exécute sans modification les stylesheets Schematron 2.6.0 compilés EN 16931 CII 1.3.16 et XRechnung 3.0.2 livrés dans Lib/resources/Schematron/XRechnung
Les ressources proviennent de la configuration officielle du validator KoSIT datée du 31 août 2026, et le README des ressources consigne leur provenance, leurs licences et leurs hashes
L'hôte fournit explicitement l'exécutable Java et le class path Saxon, et la bibliothèque lance la transformation sans shell ni fenêtre de console visible, applique un délai d'attente, analyse les constatations SVRL et supprime ses fichiers temporaires
Un délai d'attente de zéro sélectionne 60 secondes, les valeurs supérieures à 3 600 000 millisecondes sont rejetées, la sortie de diagnostic est plafonnée à 8 Mio, et les stylesheets compilés et rapports SVRL sont plafonnés à 64 Mio avant analyse ou chargement
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;
Configurez le class path Saxon avec Saxon HE et ses dépendances requises, et utilisez un registry et une instance de moteur séparés par thread de validation
Le pont facultatif exige Delphi XE2 ou ultérieur sous Windows et un runtime Java/Saxon fourni par l'hôte, et aucun des deux runtimes n'est téléchargé ni installé par la bibliothèque
Des runtimes manquants, une syntaxe de facture erronée, des DTD interdites, un dépassement de délai, une transformation échouée et une sortie SVRL malformée produisent des diagnostics explicites de validation incomplète
Règles de facturation CTC françaises officielles
HPDFRegisterFrenchCTCRules sélectionne la couche de profil officielle et la stricte couche pays BR-FR-Flux2 de la release FNFE-MPE 1.4.0.04, publiée le 4 septembre 2026 pour AFNOR XP Z12-012 version 1.4
La release officielle FNFE-MPE est publiée sous Apache 2.0 et reliée par la page de ressources FNFE-MPE, tandis que le stylesheet EN 16931 CII inclus conserve l'EUPL 1.2, et les stylesheets compilés d'origine, sources Schematron, bases de codes, licences, chemins sources et hashes sont préservés sous Lib/resources/Schematron/France
Pour fisFacturX, l'aide prend en charge BASIC WL, EN 16931 et EXTENDED via les couches de règles Factur-X 1.09.2 publiées, et la désignation de conteneur EXTENDED-CTC-FR utilise la même couche Factur-X EXTENDED plus les contrôles pays français
Pour fisCII autonome, elle prend en charge EN 16931 et la couche CII EXTENDED-CTC-FR dédiée, dont les restrictions et l'identifiant de guideline diffèrent de la couche Factur-X EXTENDED hybride
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);
L'enregistrement conserve des versions distinctes pour le profil et les règles pays, et rend la couche pays française requise pour le profil sélectionné, y compris EN 16931 et BASIC WL lorsqu'ils sont explicitement enregistrés pour la France
Le stylesheet national publié strict est utilisé directement, sans substituer la variante distincte avertissement-seul ni dégrader les constatations
Le paquet officiel épinglé n'a pas de profil de règles EXTENDED-B2B-FR, l'aide rejette donc ce nom hérité au lieu de le traiter comme un alias certifié automatiquement
Une validation réussie établit la complétion de ces couches de règles métier de facturation publiées ; XML Schema, les messages de cycle de vie CDAR, l'extraction de données e-reporting, l'autorisation de plateforme, le transport et la certification légale restent des périmètres distincts
API du moteur
Engine := HPDFCreateSchematronEngine;
if not Engine.Load(SchematronPath, ErrorText) then
raise Exception.Create(ErrorText);
Findings := Engine.Validate(XMLBytes);
Summary := Engine.LastSummary;
THPDFSchematronSummary rapporte Profile, TotalRules, Evaluated, Skipped, EvaluationErrors, Violations, EngineAvailable et EngineNote
Skipped reste à zéro dans le moteur XE2 et ultérieur et est réservé à la stub Delphi 7 ou aux données de résultats héritées
Les expressions malformées ou non prises en charge produisent des constatations explicites de sévérité erreur, incrémentent EvaluationErrors et ne disparaissent jamais comme des vérifications réussies
Fonctions d'aide XML Factur-X
L'unité HPDFFacturX livre des aides au niveau octet qui lisent un XML de facture Factur-X / ZUGFeRD sans construire de DOM, si bien qu'elles fonctionnent sur chaque version de Delphi prise en charge par la bibliothèque et sont sûres sur les octets extraits par ExtractFacturXXML
HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes) renvoie l'identifiant de guideline depuis l'élément GuidelineSpecifiedDocumentContextParameter / ram:ID d'un document CII, ou une chaîne vide en son absence
HPDFIsFacturXConformanceLevel(Value, FileName, Version) valide un nom de niveau de conformité et accepte MINIMUM, BASIC WL, BASIC, EN 16931, EN16931, EXTENDED, EXTENDED-CTC-FR, EXTENDED-B2B-FR et XRECHNUNG ; le niveau hérité COMFORT exige en plus le nom de fichier ZUGFeRD 1.0 ZUGFeRD-invoice.xml avec la version 1.0
HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName) recoupe la guideline trouvée dans le XML avec le niveau de conformité, la version et le nom de fichier embarqué déclarés
HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary) remplit un enregistrement THPDFFacturXInvoiceSummary depuis le XML de facture et renvoie True lorsque au moins le XML de facture primaire a pu être localisé ; le type d'enregistrement de résumé lui-même est déclaré dans HPDFDoc à côté de THPDFFacturXInvoiceInfo
Diagnostics et limites stables
- Les identifiants de règles sont analysés depuis le jeton de message Schematron lorsqu'il est présent
- Les identifiants manquants reçoivent des ordinaux de profil et d'assertion-ou-rapport déterministes
- Chaque constatation préserve son contexte d'origine et ses expressions de test
- Les chemins des bases de codes externes sont restreints aux noms de fichiers frères
- Le traitement DTD et la résolution des entités XML externes sont désactivés
- L'entrée XML de facture est limitée à 64 Mio
Disponibilité de la chaîne d'outils
Delphi XE2 et ultérieur utilisent le moteur de compatibilité MSXML intégré
Delphi 7 conserve les interfaces et types de résultats partagés mais renvoie un diagnostic de moteur indisponible
API associées
HPDFValidateEInvoiceHPDFValidateEInvoiceWithRegistryHPDFValidateEInvoiceXMLTHPDFEInvoiceRuleRegistryHPDFRegisterXRechnungRulesHPDFRegisterFrenchCTCRulesTHPDFFrenchInvoiceSyntaxHPDFCreateSchematronEngineHPDFSchematronFileForProfileIHPDFESchematronEngineTHPDFBusinessRuleResultTHPDFSchematronSummary- THotPDF.ValidateFacturXInvoice
- THotPDF.ExtractFacturXXML
Acceptation non-GUI
Exécutez Tests/Delphi/Run-EInvoiceRuleTests.ps1 avec des valeurs explicites de JavaExecutable et SaxonClassPath, ou les variables d'environnement correspondantes HOTPDF_JAVA_EXE et HOTPDF_SAXON_CLASSPATH
Le runner par défaut exige la configuration du moteur à règles officielles et s'exécute en Win32 comme en Win64 avec lancement du lecteur PDF supprimé ; -NativeOnly omet délibérément l'exécution Saxon officielle