E 請求書ビジネスルール検証
HPDFEInvoiceValidator は、Factur-X または ZUGFeRD のコンテナ検証と、明示的に選択されたバージョン付きのビジネスルールセットおよび国別ルールセットを組み合わせます
完全な検査済みルール実行
ライブラリは、MINIMUM、BASIC WL、BASIC、EN 16931、EXTENDED に対応する一致した `.sch` および `_codedb.xml` リソースを同梱しています
XE2 以降のエンジンは、安全な MSXML 解析、決定論的な XPath 1 相当、および数量演算子、FLWOR 合計、キャスト、シーケンス比較、外部コードリスト、日付パターン、ブール指標値に対する直接評価を通じて、検査済み XPath 2 サーフェスの全体を実行します
EN 16931 プロファイルには 618 件のチェックが含まれ、各検証実行中にすべてのチェックが処理されます
複合検証
var
Report: THPDFEInvoiceValidationReport;
begin
if not HPDFValidateEInvoice(PDF,
'Lib\resources\Schematron', Report) then
LogValidationFailure(Report);
end;
HPDFValidateEInvoice はまず THotPDF.ValidateFacturXInvoice を呼び出し、請求書 XML を抽出して識別し、プロファイル固有の Schematron リソースをロードし、ビジネスルールを実行します
XML 抽出、プロファイル検出、ルールロード、コードデータベースロード、または式評価を完了できない場合、検出されたハイブリッド請求書はフェイルクローズします
この関数は、コンテナが有効で、ビジネスルールが評価され、エラーまたは警告の指摘が残っていない場合にのみ true を返します
プロファイルレジストリと検証スコープ
THPDFEInvoiceRuleRegistry は、プロファイルごとにビジネスルールレイヤーを 1 つ、必要に応じて国別ルールレイヤーを 1 つ登録します。リソース名とルールバージョンは明示的に指定し、IHPDFESchematronEngine 実装は省略可能です
デフォルトのレジストリには、同梱の 5 つの Factur-X プロファイルと、フランス向けプロファイル EXTENDED-CTC-FR、EXTENDED-B2B-FR 用のベース EXTENDED ルールが含まれます
フランス向けプロファイルで ValidationComplete が true になるには、追加の国別ルール登録が必要です。XRECHNUNG は EN 16931 CII とドイツの国別ルールの両方を要求します
未知のプロファイルにはデフォルトルールがなく、EXTENDED へのフォールバックも行われません。HPDFSchematronFileForProfile は、未知または国別のプロファイルに対して空の文字列を返します
HPDFValidateEInvoiceWithRegistry は呼び出し側のレジストリを PDF コンテナチェックとともに使用し、HPDFValidateEInvoiceXML は PDF コンテナを評価せずに、明示的な XML バイトとプロファイルを検証します
レポートは ProfileSupported、CountryRulesRequired、CountryRulesEvaluated、ValidationComplete、ValidationNote を公開し、RuleSets 配列には選択された各リソースのバージョン、スコープ、サマリー、完了状態が記録されます
完了したルール評価にもビジネスルール違反が含まれることがあるため、ValidationComplete だけでなく、真偽値の結果や BusinessRuleViolations も確認してください
これらの API はビジネスルールと国別ルールのカバレッジを報告します。XML Schema 検証、トランスポートポリシー、法的な受領判断はこの範囲外です
公式の XRechnung CII ルール
HPDFEInvoiceSaxon は省略可能な Saxon HE ブリッジを提供し、Lib/resources/Schematron/XRechnung に同梱された、無修正のコンパイル済みスタイルシート(EN 16931 CII 1.3.16 と XRechnung 3.0.2 の Schematron 2.6.0)を実行します
リソースは 2026 年 8 月 31 日付の公式 KoSIT validator configuration 由来で、出自、ライセンス、ハッシュはリソースの README に記録されています
Java 実行ファイルと Saxon クラスパスはホスト側が明示的に指定します。ライブラリはシェルや可視コンソールウィンドウなしで変換を起動し、タイムアウトを強制し、SVRL の指摘をパースし、一時ファイルを削除します
タイムアウトに 0 を指定すると 60 秒になり、3,600,000 ミリ秒を超える値は拒否されます。診断出力は 8 MiB、コンパイル済みスタイルシートと SVRL レポートはパースまたはロードの前に 64 MiB で上限付けられます
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;
Saxon クラスパスには Saxon HE と必要な依存ライブラリを設定し、検証スレッドごとに別のレジストリとエンジンインスタンスを使用してください
省略可能なブリッジには、Windows 上の Delphi XE2 以降と、ホスト側で用意した Java / Saxon ランタイムが必要です。いずれのランタイムもライブラリがダウンロードやインストールを行うことはありません
ランタイムの欠落、誤った請求書構文、禁止された DTD、タイムアウト、変換の失敗、不正な SVRL 出力は、明示的な検証不完全の診断になります
公式のフランス CTC 請求書ルール
HPDFRegisterFrenchCTCRules は、2026 年 9 月 4 日に AFNOR XP Z12-012 バージョン 1.4 向けに公開された FNFE-MPE リリース 1.4.0.04 から、公式のプロファイルレイヤーと厳密な BR-FR-Flux2 国別レイヤーを選択します
公式の FNFE-MPE リリースは Apache 2.0 で公開され、FNFE-MPE リソースページからリンクされています。同梱の EN 16931 CII スタイルシートは EUPL 1.2 を保持し、オリジナルのコンパイル済みスタイルシート、Schematron ソース、コードデータベース、ライセンス、ソースパス、ハッシュは Lib/resources/Schematron/France の下に保持されます
fisFacturX の場合、ヘルパーは公開済みの Factur-X 1.09.2 ルールレイヤーを使って BASIC WL、EN 16931、EXTENDED に対応します。EXTENDED-CTC-FR のコンテナ指定は、同じ Factur-X EXTENDED レイヤーにフランスの国別チェックを加えたものです
スタンドアロンの fisCII の場合、EN 16931 と専用の EXTENDED-CTC-FR CII レイヤーに対応します。このレイヤーの制限とガイドライン識別子は、ハイブリッドの Factur-X EXTENDED レイヤーとは異なります
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);
登録ではプロファイルと国別ルールのバージョンが別々に保持され、選択されたプロファイルに対してフランスの国別レイヤーが必須になります。フランス向けに明示的に登録された EN 16931 と BASIC WL も含まれます
公開されている厳密な国内スタイルシートがそのまま使われます。別途用意された警告専用バリアントへの差し替えや、指摘の重要度引き下げは行われません
ピン留めされた公式パッケージには EXTENDED-B2B-FR のルールプロファイルがないため、ヘルパーはそのレガシー名を自動的に認証済みの別名として扱わず拒否します
検証が成功すれば、これらの公開済み請求書ビジネスルールレイヤーの実行が完了したことになります。XML Schema、CDAR ライフサイクルメッセージ、e-reporting のデータ抽出、プラットフォーム認可、トランスポート、法的証明は別のスコープのままです
エンジン API
Engine := HPDFCreateSchematronEngine;
if not Engine.Load(SchematronPath, ErrorText) then
raise Exception.Create(ErrorText);
Findings := Engine.Validate(XMLBytes);
Summary := Engine.LastSummary;
THPDFSchematronSummary は、Profile、TotalRules、Evaluated、Skipped、EvaluationErrors、Violations、EngineAvailable、EngineNote を報告します
Skipped は XE2 以降のエンジンではゼロのままであり、Delphi 7 スタブまたはレガシー結果データのために予約されています
不正またはサポートされていない式は、明示的なエラー重大度の指摘を生成し、EvaluationErrors を増やし、成功したチェックとして消えることはありません
Factur-X XML ヘルパー関数
HPDFFacturX ユニットには、DOM を構築せずに Factur-X / ZUGFeRD 請求書 XML を読むバイトレベルのヘルパーが同梱されています。ライブラリが対応するすべての Delphi バージョンで動作し、ExtractFacturXXML が抽出したバイトに対しても安全に使えます
HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes) は、CII ドキュメントの GuidelineSpecifiedDocumentContextParameter / ram:ID 要素からガイドライン識別子を返します。存在しない場合は空の文字列です
HPDFIsFacturXConformanceLevel(Value, FileName, Version) は適合レベル名を検証し、MINIMUM、BASIC WL、BASIC、EN 16931、EN16931、EXTENDED、EXTENDED-CTC-FR、EXTENDED-B2B-FR、XRECHNUNG を受け付けます。レガシーの COMFORT レベルは、さらに ZUGFeRD 1.0 のファイル名 ZUGFeRD-invoice.xml とバージョン 1.0 を要求します
HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName) は、XML 内で見つかったガイドラインを、宣言された適合レベル、バージョン、埋め込みファイル名と突き合わせます
HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary) は請求書 XML から THPDFFacturXInvoiceSummary レコードを満たし、少なくとも主請求書の XML が特定できた場合に True を返します。サマリーレコード型自体は HPDFDoc で THPDFFacturXInvoiceInfo の隣に宣言されています
安定した診断と制限
- ルール識別子は、存在する場合、Schematron メッセージトークンから解析されます
- 欠落した識別子には、決定論的なプロファイルおよびアサーションとレポートの序数が割り当てられます
- 各指摘は、元のコンテキストとテスト式を保持します
- 外部コードデータベースのパスは、兄弟ファイル名に制限されます
- DTD 処理と外部 XML エンティティ解決は無効です
- 請求書 XML 入力は 64 MiB に制限されます
ツールチェーンの可用性
Delphi XE2 以降は、組み込みの MSXML 互換エンジンを使用します
Delphi 7 は共有インターフェースと結果型を保持しますが、エンジン利用不可の診断を返します
関連 API
HPDFValidateEInvoiceHPDFValidateEInvoiceWithRegistryHPDFValidateEInvoiceXMLTHPDFEInvoiceRuleRegistryHPDFRegisterXRechnungRulesHPDFRegisterFrenchCTCRulesTHPDFFrenchInvoiceSyntaxHPDFCreateSchematronEngineHPDFSchematronFileForProfileIHPDFESchematronEngineTHPDFBusinessRuleResultTHPDFSchematronSummary- THotPDF.ValidateFacturXInvoice
- THotPDF.ExtractFacturXXML
Non-GUI 受け入れテスト
Tests/Delphi/Run-EInvoiceRuleTests.ps1 を、JavaExecutable と SaxonClassPath を明示的に指定して実行するか、対応する HOTPDF_JAVA_EXE と HOTPDF_SAXON_CLASSPATH 環境変数を設定してください
デフォルトのランナーは公式ルールエンジンの設定を要求し、PDF ビューアーの起動を抑止したうえで Win32 と Win64 の両方を実行します。-NativeOnly を付けると、公式 Saxon の実行が意図的に省かれます