Validazione delle Regole di Business della Fattura Elettronica
HPDFEInvoiceValidator combina la validazione del contenitore Factur-X o ZUGFeRD con set esplicitamente selezionati e versionati di regole di business e regole country
Esecuzione completa delle regole esaminate
La libreria include risorse `.sch` e `_codedb.xml` corrispondenti per MINIMUM, BASIC WL, BASIC, EN 16931 ed EXTENDED
Il motore XE2 e successivi esegue l'intera superficie XPath 2 esaminata tramite parsing MSXML sicuro, equivalenti deterministici XPath 1 e valutazione diretta per quantificatori, somme FLWOR, cast, confronti di sequenza, liste di codici esterne, pattern di date e valori indicatori booleani
Il profilo EN 16931 contiene 618 controlli e ogni controllo viene elaborato durante ogni esecuzione di validazione
Validazione combinata
var
Report: THPDFEInvoiceValidationReport;
begin
if not HPDFValidateEInvoice(PDF,
'Lib\resources\Schematron', Report) then
LogValidationFailure(Report);
end;
HPDFValidateEInvoice chiama prima THotPDF.ValidateFacturXInvoice, estrae e identifica l'XML della fattura, carica le risorse Schematron specifiche del profilo ed esegue le regole di business
Una fattura ibrida rilevata chiude in modo sicuro quando estrazione XML, rilevamento del profilo, caricamento delle regole, caricamento del database dei codici o valutazione delle espressioni non possono essere completati
La funzione restituisce true solo quando il contenitore è valido, le regole di business sono state valutate e non rimane alcuna segnalazione di errore o avviso
Registry dei profili e ambito di validazione
THPDFEInvoiceRuleRegistry registra un livello di regole di business e, quando richiesto, un livello di regole country per profilo, con nome risorsa esplicito, versione delle regole e implementazione IHPDFESchematronEngine opzionale
Il registry predefinito contiene i cinque profili Factur-X forniti e le regole EXTENDED di base per i profili francesi EXTENDED-CTC-FR e EXTENDED-B2B-FR
I profili francesi richiedono una registrazione aggiuntiva delle regole country prima che ValidationComplete diventi true, e XRECHNUNG richiede sia le regole CII EN 16931 sia le regole country tedesche
I profili sconosciuti non hanno regole predefinite e non fanno mai fallback su EXTENDED, e HPDFSchematronFileForProfile restituisce una stringa vuota per i profili sconosciuti o country-specific
HPDFValidateEInvoiceWithRegistry usa il registry del chiamante con il controllo del contenitore PDF, mentre HPDFValidateEInvoiceXML valida byte XML espliciti e un profilo senza valutare un contenitore PDF
Il report espone ProfileSupported, CountryRulesRequired, CountryRulesEvaluated, ValidationComplete e ValidationNote, e il suo array RuleSets registra ogni risorsa selezionata, versione, ambito, riepilogo e stato di completamento
Una valutazione delle regole completata può comunque contenere violazioni delle regole di business, quindi controlla il risultato booleano o BusinessRuleViolations oltre a ValidationComplete
Queste API riportano la copertura delle regole di business e country, mentre la validazione XML Schema, le policy di trasporto e le decisioni di accettazione legale restano fuori da questo ambito
Regole CII XRechnung ufficiali
HPDFEInvoiceSaxon fornisce un bridge opzionale a Saxon HE che esegue i stylesheet compilati non modificati EN 16931 CII 1.3.16 e XRechnung 3.0.2 Schematron 2.6.0 forniti in Lib/resources/Schematron/XRechnung
Le risorse provengono dalla configurazione ufficiale del validator KoSIT datata 31 agosto 2026, e il README delle risorse ne registra provenienza, licenze e hash
L'host fornisce esplicitamente l'eseguibile Java e il class path di Saxon, e la libreria lancia la trasformazione senza shell né finestra console visibile, impone un timeout, analizza le segnalazioni SVRL e rimuove i suoi file temporanei
Un timeout zero seleziona 60 secondi, i valori sopra 3.600.000 millisecondi vengono rifiutati, l'output diagnostico è limitato a 8 MiB, e i stylesheet compilati e i report SVRL sono limitati a 64 MiB prima del parsing o del caricamento
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;
Configura il class path di Saxon con Saxon HE e le sue dipendenze richieste, e usa un registry e un'istanza di engine separati per ogni thread di validazione
Il bridge opzionale richiede Delphi XE2 o successivo su Windows e un runtime Java/Saxon fornito dall'host, e nessuno dei due runtime viene scaricato o installato dalla libreria
Runtime mancanti, sintassi della fattura errata, DTD proibiti, timeout, trasformazione fallita e output SVRL malformato producono diagnostica esplicita di validazione incompleta
Regole ufficiali francesi CTC per le fatture
HPDFRegisterFrenchCTCRules seleziona il livello di profilo ufficiale e lo strict country layer BR-FR-Flux2 dalla release FNFE-MPE 1.4.0.04, pubblicata il 4 settembre 2026 per AFNOR XP Z12-012 versione 1.4
La release ufficiale FNFE-MPE è pubblicata sotto Apache 2.0 ed è collegata dalla pagina risorse FNFE-MPE, mentre lo stylesheet EN 16931 CII incluso conserva la EUPL 1.2, e gli stylesheet compilati originali, le sorgenti Schematron, i database dei codici, le licenze, i path sorgente e gli hash sono preservati sotto Lib/resources/Schematron/France
Per fisFacturX, l'helper supporta BASIC WL, EN 16931 ed EXTENDED usando i livelli di regole Factur-X 1.09.2 pubblicati, e la designazione del contenitore EXTENDED-CTC-FR usa lo stesso livello EXTENDED Factur-X più i controlli country francesi
Per fisCII standalone, supporta EN 16931 e il dedicato livello CII EXTENDED-CTC-FR, le cui restrizioni e l'identificatore di guideline differiscono dal livello ibrido 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);
La registrazione preserva versioni separate del profilo e delle regole country e rende il country layer francese richiesto per il profilo selezionato, inclusi EN 16931 e BASIC WL quando registrati esplicitamente per la Francia
Lo stylesheet nazionale strict pubblicato viene usato direttamente, senza sostituirlo con la variante separata warning-only né declassare le segnalazioni
Il pacchetto ufficiale pinnato non ha un profilo di regole EXTENDED-B2B-FR, quindi l'helper rifiuta quel nome legacy invece di trattarlo come un alias certificato automaticamente
Una validazione riuscita stabilisce il completamento di questi livelli di regole di business pubblicati per le fatture, mentre XML Schema, messaggi del ciclo di vita CDAR, estrazione dati e-reporting, autorizzazione della piattaforma, trasporto e certificazione legale restano ambiti separati
API del motore
Engine := HPDFCreateSchematronEngine;
if not Engine.Load(SchematronPath, ErrorText) then
raise Exception.Create(ErrorText);
Findings := Engine.Validate(XMLBytes);
Summary := Engine.LastSummary;
THPDFSchematronSummary riporta Profile, TotalRules, Evaluated, Skipped, EvaluationErrors, Violations, EngineAvailable e EngineNote
Skipped resta zero nel motore XE2 e successivi ed è riservato allo stub Delphi 7 o ai dati di risultato legacy
Le espressioni malformate o non supportate producono segnalazioni esplicite con severità di errore, incrementano EvaluationErrors e non scompaiono mai come controlli riusciti
Funzioni helper XML Factur-X
L'unità HPDFFacturX fornisce helper a livello di byte che leggono l'XML di una fattura Factur-X / ZUGFeRD senza costruire un DOM, così girano su ogni versione di Delphi supportata dalla libreria e sono sicuri sui byte estratti da ExtractFacturXXML
HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes) restituisce l'identificatore di guideline dall'elemento GuidelineSpecifiedDocumentContextParameter / ram:ID di un documento CII, o una stringa vuota quando assente
HPDFIsFacturXConformanceLevel(Value, FileName, Version) valida un nome di livello di conformità, accettando MINIMUM, BASIC WL, BASIC, EN 16931, EN16931, EXTENDED, EXTENDED-CTC-FR, EXTENDED-B2B-FR e XRECHNUNG; il livello legacy COMFORT richiede inoltre il nome file ZUGFeRD 1.0 ZUGFeRD-invoice.xml con versione 1.0
HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName) incrocia la guideline trovata nell'XML con il livello di conformità dichiarato, la versione e il nome del file incorporato
HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary) riempie un record THPDFFacturXInvoiceSummary dall'XML della fattura e restituisce True quando almeno l'XML della fattura primaria è stato individuato; il tipo del record di riepilogo è dichiarato in HPDFDoc accanto a THPDFFacturXInvoiceInfo
Diagnostica e limiti stabili
- Gli identificatori delle regole vengono analizzati dal token del messaggio Schematron quando presente
- Gli identificatori mancanti ricevono ordinali deterministici di profilo e assertion-or-report
- Ogni segnalazione conserva il proprio contesto originale e le espressioni di test
- I percorsi del database dei codici esterno sono limitati ai nomi dei file fratelli
- L'elaborazione del DTD e la risoluzione delle entità XML esterne sono disabilitate
- L'input XML della fattura è limitato a 64 MiB
Disponibilità della toolchain
Delphi XE2 e successivi usano il motore di compatibilità MSXML integrato
Delphi 7 mantiene le interfacce condivise e i tipi di risultato ma restituisce una diagnostica di motore non disponibile
API correlate
HPDFValidateEInvoiceHPDFValidateEInvoiceWithRegistryHPDFValidateEInvoiceXMLTHPDFEInvoiceRuleRegistryHPDFRegisterXRechnungRulesHPDFRegisterFrenchCTCRulesTHPDFFrenchInvoiceSyntaxHPDFCreateSchematronEngineHPDFSchematronFileForProfileIHPDFESchematronEngineTHPDFBusinessRuleResultTHPDFSchematronSummary- THotPDF.ValidateFacturXInvoice
- THotPDF.ExtractFacturXXML
Accettazione non-GUI
Esegui Tests/Delphi/Run-EInvoiceRuleTests.ps1 con valori espliciti di JavaExecutable e SaxonClassPath, oppure le variabili d'ambiente corrispondenti HOTPDF_JAVA_EXE e HOTPDF_SAXON_CLASSPATH
Il runner predefinito richiede la configurazione dell'engine con regole ufficiali ed esegue sia Win32 sia Win64 con l'avvio del viewer PDF soppresso; -NativeOnly omette deliberatamente l'esecuzione Saxon ufficiale