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

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

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