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 の隣に宣言されています

安定した診断と制限

ツールチェーンの可用性

Delphi XE2 以降は、組み込みの MSXML 互換エンジンを使用します

Delphi 7 は共有インターフェースと結果型を保持しますが、エンジン利用不可の診断を返します

関連 API

Non-GUI 受け入れテスト

Tests/Delphi/Run-EInvoiceRuleTests.ps1 を、JavaExecutable と SaxonClassPath を明示的に指定して実行するか、対応する HOTPDF_JAVA_EXE と HOTPDF_SAXON_CLASSPATH 環境変数を設定してください

デフォルトのランナーは公式ルールエンジンの設定を要求し、PDF ビューアーの起動を抑止したうえで Win32 と Win64 の両方を実行します。-NativeOnly を付けると、公式 Saxon の実行が意図的に省かれます