コンテンツにスキップ
getnextpdf.com

Enterprise エディション

Compliance — 詳細リファレンス

Compliance モジュールは、完成した PDF を外部の検証サイドカーへルーティングし、正規化された 1 つの結果を返します。ComplianceGatewayComplianceProfile から担当のサイドカーを解決し、フェイルクローズの可用性ポリシーを適用し、すべてのツール判定を ExternalValidationResult でラップします。ブリッジは veraPDF(PDF/A、PDF/UA、PDF 2.0 Arlington)、EU DSS(PAdES レベル)、Mustang/KoSIT の統合サイドカー(ZUGFeRD、Factur-X、EN 16931)、および単独の KoSIT デーモン向けに同梱されています。本モジュールはまた、AiReadyCertifier のレディネススタンプと、公式の KoSIT XRechnung テストスイートのランナーも提供します。

この機能は NextPDF Enterprisenextpdf/enterprise)に同梱され、Enterprise ティアのライセンスエンベロープで有効化されます。そのエンタイトルメントを持たないデプロイメントでは、機能のクラスはロードされません。エディションを比較してライセンスを取得

Compliance/Evidence サーフェスは enterprise.compliance.evidence 機能によってライセンスされます。エンタイトルメントが欠落しているか期限切れの場合は機能を拒否します。挙動を黙ってダウングレードすることはありません。

ティアCompliance サーフェス
Coreインプロセスのバイトストリームおよび文法チェック。外部サイドカーへの委譲なし。
Proインプロセスの EN 16931 / Factur-X / ZUGFeRD 検証。外部サイドカーなし。
Enterprise統一された結果とフェイルクローズポリシーを備えた外部バリデーターゲートウェイ(本モジュール)。

Pro のインプロセス e-invoice バリデーターと Enterprise の外部 ZUGFeRD サイドカーは別個のサーフェスです。外部バリデーターゲートウェイは nextpdf/enterprise パッケージにのみ同梱されています。

Terminal window
composer require nextpdf/enterprise:^3
シンボルパラメーターデフォルトの挙動戻り値スロー/失敗備考
ComplianceGateway::__constructlist<ExternalValidator> $validators, LoggerInterface $logger, bool $optional = falseバリデーターをツール名でインデックス化オプションモードは可用性チェックを警告のみに緩和
ComplianceGateway::validatestring $pdfContent, ComplianceProfile $profile, array $options = []ComplianceProfile::toolName() でバリデーターを解決し、可用性を確認し、委譲?ExternalValidationResultComplianceSidecarUnavailableExceptionInvalidArgumentException(そのツールに登録されたバリデーターがない)オプションモードでサイドカーが停止している場合にのみ null を返す
ComplianceGateway::validateAllProfilesstring $pdfContent, string $toolNameツールにマッピングされたすべてのプロファイルを検証list<ExternalValidationResult>validate() と同じnull(オプションモード)の結果はスキップ
ComplianceGateway::healthCheck登録済みのすべてのサイドカーのヘルスエンドポイントをプローブarray<string, bool>到達可能性を報告。ドキュメントは検証しない
ComplianceGateway::buildComplianceMatrix(静的)list<ExternalValidationResult> $results, string $commitSha結果をスキーマバージョン付きのマトリックスへ集約array<string, mixed>スキーマバージョン 1.0。ツール出力を記録し、何も主張しない
ComplianceProfile(enum)文字列バック 15 ケース各プロファイルを標準ラベルとツールにマッピングstandardReference(): stringtoolName(): string
ExternalValidator(インターフェース)PSR-18 上のサイドカーブリッジコントラクト転送失敗時に validate()ComplianceSidecarUnavailableException をスローgetToolName()isAvailable()validate()
VeraPdfValidator::validateインターフェースシグネチャveraPDF REST サイドカーへの multipart POST。JSON レポート解析ExternalValidationResultComplianceSidecarUnavailableExceptionInvalidArgumentException(未対応プロファイル)PDF/A、PDF/UA、Arlington。JSON のみ解析、XML は解析しない
DssValidator::validateインターフェースシグネチャEU DSS REST サイドカーへの Base64 JSON POSTExternalValidationResultComplianceSidecarUnavailableExceptionInvalidArgumentException(未対応プロファイル)PAdES B-B から B-LTA まで。コンストラクターは 1 秒未満のタイムアウトを拒否
ZugferdExternalValidator::validateインターフェースシグネチャMustang/KoSIT 統合サイドカーへの multipart POSTExternalValidationResultComplianceSidecarUnavailableException(サーキットブレーカーがオープンの場合も);InvalidArgumentException(未対応プロファイル)ZUGFeRD 2.4、Factur-X 1.08、EN 16931。任意で注入されるサーキットブレーカー
KoSitValidator::validateインターフェースシグネチャ単独の KoSIT デーモンへの生 XML POSTExternalValidationResultComplianceSidecarUnavailableExceptionInvalidArgumentException(未対応プロファイル)EN 16931 のみ。Schematron SVRL レポートをフェイルクローズで解析
ExternalValidationResult読み取り専用の値オブジェクト正規化されたツール判定passes()fails()nonConformanceCount()toComplianceMatrix()
NonConformance読み取り専用の値オブジェクトルール ID、条項、重大度、位置を持つ単一の指摘toArray()
ComplianceSidecarUnavailableExceptionstring $toolName, string $endpoint, int $code = 0, ?Throwable $previous = nullフェイルクローズのサイドカー可用性欠如シグナルパブリック読み取り専用の toolNameendpoint
AiReadyCertifier::certifystring $pdfBytes3 つのレディネス基準を評価し、XMP プロビナンスをスタンプarray{0: AiReadyCertification, 1: string}InvalidArgumentException(スタンプには従来型クロスリファレンステーブルが必要)レベルが not_certified の場合、2 番目の要素は入力と等しい
AiReadyCertification読み取り専用の値オブジェクトレベル、基準数、指摘、ソースハッシュを持つレディネス評価内部レディネスラベルであり、標準の認証ではない
XRechnungTestSuiteRunner::__constructstring $suitePath, ExternalValidator $validator, bool $useCuratedNegativeFallback = true展開済みスイートディレクトリを解決InvalidArgumentException(ディレクトリが存在しない)公式の KoSIT XRechnung テストスイートを対象
XRechnungTestSuiteRunner::runbool $stopOnFirstFailure = false各スイートインスタンスをブリッジ経由で検証XRechnungTestSuiteResultXRechnungTestSuiteException(バリデーター利用不可。XML ファイルなし)isAvailable()getSuitePath()discoverTestFiles() も提供
XRechnungTestSuiteResult読み取り専用の値オブジェクトスイートの集約結果allPassed()totalCount()getFailures()getErrors()toSummary()
XRechnungTestCaseResult読み取り専用の値オブジェクトケースごとの結果passed()hasError()getFilename()
XRechnungTestSuiteException静的コンストラクタースイートの実行時失敗シグナルselfvalidatorUnavailable()noTestFilesFound(string $suitePath)
namespace NextPDF\Enterprise\Compliance;
final class ComplianceGateway
{
/** @param list<ExternalValidator> $validators */
public function __construct(
array $validators,
private readonly LoggerInterface $logger,
private readonly bool $optional = false,
);
/** @param array<string, mixed> $options */
public function validate(
string $pdfContent,
ComplianceProfile $profile,
array $options = [],
): ?ExternalValidationResult;
/** @return list<ExternalValidationResult> */
public function validateAllProfiles(string $pdfContent, string $toolName): array;
/** @return array<string, bool> */
public function healthCheck(): array;
/**
* @param list<ExternalValidationResult> $results
* @return array<string, mixed>
*/
public static function buildComplianceMatrix(array $results, string $commitSha): array;
}
interface ExternalValidator
{
public function getToolName(): string;
public function isAvailable(): bool;
/** @param array<string, mixed> $options */
public function validate(
string $pdfContent,
ComplianceProfile $profile,
array $options = [],
): ExternalValidationResult;
}
enum ComplianceProfile: string
{
case PdfA1b = 'pdfa-1b';
// PdfA2b, PdfA3b, PdfA4, PdfA4f, PdfUa1, PdfUa2, Pdf20Arlington,
// PadesBasic, PadesTimestamp, PadesLongTerm, PadesArchive,
// Zugferd24, FacturX108, En16931
public function standardReference(): string;
public function toolName(): string;
}
final class AiReadyCertifier
{
/** @return array{0: AiReadyCertification, 1: string} Tuple of [certification, stamped PDF bytes] */
public function certify(string $pdfBytes): array;
}

ComplianceGateway::validate() は、getToolName()ComplianceProfile::toolName() と一致する登録済みの ExternalValidator を解決し、isAvailable() をチェックし、委譲し、正規化された ExternalValidationResult を返します。外部から観測可能なルールは次のとおりです。

  • フェイルクローズのデフォルト。 解決されたサイドカーが利用できず、オプションモードがオフの場合、呼び出しは ComplianceSidecarUnavailableException を発生させます。ドキュメントは チェックされません。決して合格として扱われることはありません。
  • オプションモード。 ゲートウェイを optional: true で構築すると(オペレーターは NEXTPDF_COMPLIANCE_OPTIONAL 環境変数からこれを配線します)、利用できないサイドカーはログに記録される警告と null の戻り値へと緩和されます。呼び出し側は null を「チェックされていない」として扱わなければなりません。オプションモードが対象とするのはプリフライトの可用性プローブのみです。検証呼び出し自体の最中に転送失敗が発生した場合は、両モードで ComplianceSidecarUnavailableException を発生させます。
  • 未知のプロファイル。 登録済みバリデーターのないプロファイルは InvalidArgumentException を発生させます。決して黙って合格することはありません。
  • 合格のセマンティクス。 ExternalValidationResult::passes() は、conformant が true であること かつ 不適合がゼロであることを要件とします。すべての結果は、プロファイル、ツール名とバージョン、アサーション数、指摘、検証済みバイト列の SHA-256、UTC タイムスタンプ、および呼び出しの所要時間を保持します。
  • マトリックスは記録であって主張ではない。 buildComplianceMatrix() は、トレーサビリティのためにツールバージョンとコミット SHA を含むスキーマバージョン付きの構造を生成する静的リデューサーです。ツール出力を記録します。何も主張しません。
  • データフロー。 PDF バイトストリーム全体が、PSR-18 クライアントを介して構成済みのサイドカーへ送信されます。各検証は、プロファイル、ツール、合否、アサーション数、所要時間とともに PSR-3 経由でログに記録されます。

ComplianceProfile::standardReference() および ::toolName() が返す、プロファイルからツールへのルーティングは次のとおりです。

プロファイルケース標準参照ツール
pdfa-1b, pdfa-2b, pdfa-3b, pdfa-4, pdfa-4fISO 19005-1/-2/-3/-4(Level B。4f は Level F)veraPDF
pdfua-1, pdfua-2ISO 14289-1:2014, ISO 14289-2:2024veraPDF
pdf20-arlingtonISO 32000-2:2020(Arlington モデル)veraPDF
pades-b-b, pades-b-t, pades-b-lt, pades-b-ltaETSI EN 319 142-1 B-B から B-LTAEU DSS
zugferd-2.4, factur-x-1.08, en-16931ZUGFeRD 2.4 / Factur-X 1.08 / EN 16931-1:2017Mustang/KoSIT

AiReadyCertifier::certify() は 3 つの基準を評価します。構造的な署名の存在、LTV の健全性、暗号化の不在です。3 つの基準すべてに合格するとレベル certified、1 つまたは 2 つで partial、ゼロで not_certified となります。certified または partial では、XMP プロビナンスストリームと Catalog オーバーライドを伴う増分更新を追記します。元のバイト列は決して変更されません。「certified」レベルは NextPDF 内部のレディネスラベルであり、標準の認証ではありません。

VeraPdfValidator は JSON サイドカーレスポンスのみを解析します(XML はなし。構造上 XXE クリーンです)。KoSitValidator は、DOCTYPE 宣言を拒否しネットワークアクセスを無効化した状態でデーモンの XML SVRL レポートを解析し、解析不能なレポートは呼び出しの失敗として扱います。

  • サイドカーのタイムアウトまたは転送エラーは、ブリッジから ComplianceSidecarUnavailableException として現れます。フェイルクローズのデフォルトが適用されます。
  • 200 以外のサイドカーレスポンスは、ツール固有の指摘(例:VERAPDF-HTTP-ERROR)を伴う失敗結果を生成します。決して適合性の合格ではありません。
  • 不正な形式のサイドカー JSON または XML ボディは、呼び出しの検証失敗であり、適合性の合格ではありません。
  • 署名のない EU DSS 結果は DSS-NO-SIGNATURES で失敗します。TOTAL_PASSED 以外の判定は DSS-SIG-INVALID で失敗します。期待されるベースラインを下回る署名レベルは DSS-LEVEL-MISMATCH で失敗します。
  • DssValidator は、リクエストごとのタイムアウトバジェットを X-NextPDF-Timeout-Seconds ヘッダーで毎リクエスト公開します。統合側の PSR-18 クライアントはこれを尊重しなければならず、それによって停止したサイドカーが呼び出しスレッドを無制限にブロックできないようにします。
  • ZugferdExternalValidator は、任意で注入されたサーキットブレーカーを介してサイドカー呼び出しをルーティングします。オープンのブレーカーは ComplianceSidecarUnavailableException(フェイルファストであり、依然としてフェイルクローズ)にマッピングされます。デフォルトはノーオペのブレーカーです。
  • KoSitValidator::isAvailable() は、デーモンのヘルスプローブからの HTTP 200 と 405 を受け付けます。デーモンは健全な状態で GET に 405 で応答します。
  • AiReadyCertifier のスタンプは、元のドキュメントに従来型クロスリファレンステーブルがない場合(例:クロスリファレンスストリーム)、InvalidArgumentException でフェイルクローズします。
  • XRechnungTestSuiteRunner::run() は、バリデーターが利用不可であるか、スイートに XML ファイルが含まれない場合、実行を拒否します。useCuratedNegativeFallback を有効にすると、スイートに不正インスタンスが同梱されていない場合にキュレーション済みのネガティブコーパスで代替します。

このモジュールは署名や鍵の保管を一切行いません。FIPS モードのアルゴリズムポリシーは Security モジュールと Signature モジュールが管理します。署名の適合性は EU DSS に委譲され、EU DSS が独自の判定を行います。

ゲートウェイは適合性の判定を外部ツールに委譲します。この設計は、適合性は要件に照らして判定されるものであり、生成者が主張するものではないという、標準そのものの境界を反映しています。

挙動参照
適合プロセッサーの義務。適合性は標準に照らして判定されるISO 19005-4:2020 §5.2
PDF/A-4 のファイル要件と生成者による自己主張ISO 19005-4:2020 §6.6.4
PDF/UA-2 適合性はファイルの属性であるISO 14289-2:2024 §6
PAdES baseline 署名レベルETSI EN 319 142-1 §5.4.3

判定を生成するのは外部ツールです。NextPDF はいかなる認証も保有しておらず、いかなる認証も付与しません。あるプロファイルをサポートしていることは、そのプロファイルへの適合ではありません。検証結果は参照用の技術的な構造チェック記録であり、法的助言ではありません。規制上の十分性の判断については、お客様のコンプライアンスチームにご相談ください。

  • オペレーターは、サイドカーをホストして運用し、バージョンを固定し、ネットワーク到達範囲を制限し、TLS を検証し、オプションモードを有効にする環境を制御します。サイドカーのエンドポイントは信頼境界です。ドキュメント、結果、ログのレジデンシーおよび保持の管理策は、オペレーターの責任です。
  • buildComplianceMatrix() の出力は CI トレーサビリティのために設計されています。コミット SHA を固定し、ビルド成果物とともにマトリックスをアーカイブしてください。
  • XRechnung ランナーは、公式テストスイートがローカルディレクトリに展開されていることを想定します。そのコンストラクターメッセージは公開ダウンロード元を示します。
  • 内部メカニズムの詳細はソースリポジトリの内部ドキュメントに留められ、本マニュアルの対象外です。

このページは、外部から観測可能な挙動とサポート対象のパブリック API サーフェスのみを記載しています。内部名前空間パス、ヘルパークラス、メカニズムテーブル、ランブックのファイル名、チケットのプレフィックスは対象外です。