Enterprise エディション
Compliance — 詳細リファレンス
Compliance モジュールは、完成した PDF を外部の検証サイドカーへルーティングし、正規化された 1 つの結果を返します。ComplianceGateway は ComplianceProfile から担当のサイドカーを解決し、フェイルクローズの可用性ポリシーを適用し、すべてのツール判定を 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 Enterprise(nextpdf/enterprise)に同梱され、Enterprise ティアのライセンスエンベロープで有効化されます。そのエンタイトルメントを持たないデプロイメントでは、機能のクラスはロードされません。エディションを比較してライセンスを取得。
Compliance/Evidence サーフェスは enterprise.compliance.evidence 機能によってライセンスされます。エンタイトルメントが欠落しているか期限切れの場合は機能を拒否します。挙動を黙ってダウングレードすることはありません。
| ティア | Compliance サーフェス |
|---|---|
| Core | インプロセスのバイトストリームおよび文法チェック。外部サイドカーへの委譲なし。 |
| Pro | インプロセスの EN 16931 / Factur-X / ZUGFeRD 検証。外部サイドカーなし。 |
| Enterprise | 統一された結果とフェイルクローズポリシーを備えた外部バリデーターゲートウェイ(本モジュール)。 |
Pro のインプロセス e-invoice バリデーターと Enterprise の外部 ZUGFeRD サイドカーは別個のサーフェスです。外部バリデーターゲートウェイは nextpdf/enterprise パッケージにのみ同梱されています。
パブリック API サーフェス
「パブリック API サーフェス」という見出しのセクションcomposer require nextpdf/enterprise:^3| シンボル | パラメーター | デフォルトの挙動 | 戻り値 | スロー/失敗 | 備考 |
|---|---|---|---|---|---|
ComplianceGateway::__construct | list<ExternalValidator> $validators, LoggerInterface $logger, bool $optional = false | バリデーターをツール名でインデックス化 | — | — | オプションモードは可用性チェックを警告のみに緩和 |
ComplianceGateway::validate | string $pdfContent, ComplianceProfile $profile, array $options = [] | ComplianceProfile::toolName() でバリデーターを解決し、可用性を確認し、委譲 | ?ExternalValidationResult | ComplianceSidecarUnavailableException;InvalidArgumentException(そのツールに登録されたバリデーターがない) | オプションモードでサイドカーが停止している場合にのみ null を返す |
ComplianceGateway::validateAllProfiles | string $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(): string、toolName(): string |
ExternalValidator(インターフェース) | — | PSR-18 上のサイドカーブリッジコントラクト | — | 転送失敗時に validate() が ComplianceSidecarUnavailableException をスロー | getToolName()、isAvailable()、validate() |
VeraPdfValidator::validate | インターフェースシグネチャ | veraPDF REST サイドカーへの multipart POST。JSON レポート解析 | ExternalValidationResult | ComplianceSidecarUnavailableException;InvalidArgumentException(未対応プロファイル) | PDF/A、PDF/UA、Arlington。JSON のみ解析、XML は解析しない |
DssValidator::validate | インターフェースシグネチャ | EU DSS REST サイドカーへの Base64 JSON POST | ExternalValidationResult | ComplianceSidecarUnavailableException;InvalidArgumentException(未対応プロファイル) | PAdES B-B から B-LTA まで。コンストラクターは 1 秒未満のタイムアウトを拒否 |
ZugferdExternalValidator::validate | インターフェースシグネチャ | Mustang/KoSIT 統合サイドカーへの multipart POST | ExternalValidationResult | ComplianceSidecarUnavailableException(サーキットブレーカーがオープンの場合も);InvalidArgumentException(未対応プロファイル) | ZUGFeRD 2.4、Factur-X 1.08、EN 16931。任意で注入されるサーキットブレーカー |
KoSitValidator::validate | インターフェースシグネチャ | 単独の KoSIT デーモンへの生 XML POST | ExternalValidationResult | ComplianceSidecarUnavailableException;InvalidArgumentException(未対応プロファイル) | EN 16931 のみ。Schematron SVRL レポートをフェイルクローズで解析 |
ExternalValidationResult | 読み取り専用の値オブジェクト | 正規化されたツール判定 | — | — | passes()、fails()、nonConformanceCount()、toComplianceMatrix() |
NonConformance | 読み取り専用の値オブジェクト | ルール ID、条項、重大度、位置を持つ単一の指摘 | — | — | toArray() |
ComplianceSidecarUnavailableException | string $toolName, string $endpoint, int $code = 0, ?Throwable $previous = null | フェイルクローズのサイドカー可用性欠如シグナル | — | — | パブリック読み取り専用の toolName と endpoint |
AiReadyCertifier::certify | string $pdfBytes | 3 つのレディネス基準を評価し、XMP プロビナンスをスタンプ | array{0: AiReadyCertification, 1: string} | InvalidArgumentException(スタンプには従来型クロスリファレンステーブルが必要) | レベルが not_certified の場合、2 番目の要素は入力と等しい |
AiReadyCertification | 読み取り専用の値オブジェクト | レベル、基準数、指摘、ソースハッシュを持つレディネス評価 | — | — | 内部レディネスラベルであり、標準の認証ではない |
XRechnungTestSuiteRunner::__construct | string $suitePath, ExternalValidator $validator, bool $useCuratedNegativeFallback = true | 展開済みスイートディレクトリを解決 | — | InvalidArgumentException(ディレクトリが存在しない) | 公式の KoSIT XRechnung テストスイートを対象 |
XRechnungTestSuiteRunner::run | bool $stopOnFirstFailure = false | 各スイートインスタンスをブリッジ経由で検証 | XRechnungTestSuiteResult | XRechnungTestSuiteException(バリデーター利用不可。XML ファイルなし) | isAvailable()、getSuitePath()、discoverTestFiles() も提供 |
XRechnungTestSuiteResult | 読み取り専用の値オブジェクト | スイートの集約結果 | — | — | allPassed()、totalCount()、getFailures()、getErrors()、toSummary() |
XRechnungTestCaseResult | 読み取り専用の値オブジェクト | ケースごとの結果 | — | — | passed()、hasError()、getFilename() |
XRechnungTestSuiteException | 静的コンストラクター | スイートの実行時失敗シグナル | self | — | validatorUnavailable()、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-4f | ISO 19005-1/-2/-3/-4(Level B。4f は Level F) | veraPDF |
pdfua-1, pdfua-2 | ISO 14289-1:2014, ISO 14289-2:2024 | veraPDF |
pdf20-arlington | ISO 32000-2:2020(Arlington モデル) | veraPDF |
pades-b-b, pades-b-t, pades-b-lt, pades-b-lta | ETSI EN 319 142-1 B-B から B-LTA | EU DSS |
zugferd-2.4, factur-x-1.08, en-16931 | ZUGFeRD 2.4 / Factur-X 1.08 / EN 16931-1:2017 | Mustang/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 モードの挙動
「FIPS モードの挙動」という見出しのセクションこのモジュールは署名や鍵の保管を一切行いません。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 サーフェスのみを記載しています。内部名前空間パス、ヘルパークラス、メカニズムテーブル、ランブックのファイル名、チケットのプレフィックスは対象外です。
- Compliance 機能の概要
- Validation — 詳細リファレンス
- Evidence — 詳細リファレンス
- Pro Compliance — インプロセスの e-invoice(別個のサーフェス)
- Core Conformance