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

Enterprise エディション

検証 — 詳細リファレンス

Validation モジュールは、生の PDF バイト列に対して事前構築済みの読み取り専用構造コンプライアンスポリシーを実行します。Compliance::assess() はちょうど 1 つの CompliancePolicy を適用し、深刻度で分割された検出結果と必須の法的免責事項を伴う ComplianceReport を返します。ポリシーは PDF/A-4(および ef のバリアント)、PAdES baseline 構造、eIDAS 構造プロファイル、LTV/DSS の健全性、ZUGFeRD / Factur-X、FDA 21 CFR Part 11、SEC Rule 17a-4 WORM アーカイブ向けに同梱されています。すべてのポリシーは純粋関数です。バイトを入力し、検出結果を出力します。Validation はドキュメントを変更することは決してなく、暗号的な検証を行うことも決してありません。

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

Validation/Evidence サーフェスは、enterprise.compliance.evidence ケイパビリティによってライセンスされます。エンタイトルメントが拒否された場合は、暗黙的に機能を縮退させるのではなく、機能を拒否します。

Tier検証サーフェス
Coreインプロセスのバイトストリームバリデーターと文法のクロスチェック。検出結果ゼロという結果はチェックされた結果であり、認証ではない。
Proe-invoice レイヤーでのインプロセスの EN 16931 / Factur-X / ZUGFeRD 検証。事前構築済みの PDF/A-4、PAdES、LTV、FDA、SEC ポリシーは提供しない。
EnterprisePDF/A-4、PAdES、LTV、ZUGFeRD、FDA Part 11、SEC 17a-4 向けの事前構築済み構造ポリシーと統一されたレポート(このモジュール)。

Enterprise Compliance の外部サイドカーゲートウェイは、独立した別個のモジュールです。

Terminal window
composer require nextpdf/enterprise:^3
SymbolParametersDefault behaviorReturnsThrows or fails withNotes
Compliance::__construct?ClockInterface $clock = nullクロックが注入されない場合はシステムクロックDI フレンドリーなインスタンス形式。クロックが validatedAt を刻印
Compliance::runstring $pdfData, CompliancePolicy $policy, array $context = []ちょうど 1 つのポリシーを適用し、実時間の所要時間を測定ComplianceReportカスタムポリシーの例外を伝播。組み込みポリシーは throw せずに検出結果を収集インスタンスメソッド
Compliance::assess(静的)string $pdfData, CompliancePolicy $policy, array $context = []デフォルトインスタンスを構築し run() に委譲ComplianceReportrun() と同じゼロ設定の高速パス
Policies::pdfA4 / ::pdfA4e / ::pdfA4f(静的)ISO 19005-4:2020 に従う PDF/A-4 構造ポリシーCompliancePolicye は 3D/リッチメディア注釈を許可。f は埋め込みファイル関係チェックを追加
Policies::padesBaseline(静的)PAdES B-B 構造チェックCompliancePolicy構造のみ。暗号的な検証はなし
Policies::eidasQualified(静的)eIDAS ラベル付きプロファイル下での PAdES 構造チェックCompliancePolicy適格性は TSP と適格証明書に依存
Policies::ltvHealth(静的)DSS 構造健全性チェックCompliancePolicyDSS の存在はアクティブなオブジェクトグラフから解決、フェイルクローズド
Policies::zugferd(静的)string $profile = 'BASIC'プロファイルエイリアスを正規化し ZUGFeRD バリデーターを構築CompliancePolicy\ValueError(未知のプロファイル)プロファイル: MINIMUM, BASIC, BASIC_WL, EN16931, EXTENDED
Policies::fdaPart11(静的)FDA 21 CFR Part 11 構造ポリシーCompliancePolicy監査証跡ハッシュチェーンの整合性を含む 7 つの構造チェック
Policies::sec17a4 / ::sec17a4Compatible / ::sec17a4Structural / ::sec17a4PreSign(静的)指定された厳格度での SEC 17a-4 WORM ポリシーCompliancePolicy厳格度は WormComplianceLevel にマップ
CompliancePolicy(インターフェース)1 つの標準に対するストラテジーコントラクトgetName(), getIdentifier(), getStandardReference(), validate()。顧客が実装可能
ComplianceReport読み取り専用値オブジェクト検出結果は構築時に深刻度で分割passes(), fails(), totalFindings(), getDisclaimer()。public な findings, errors, warnings, infos, policyName, policyId, standard, validatedAt, durationMs
ComplianceFindingSeverity $severity, string $ruleId, string $message, string $clause = '', string $suggestion = ''条項参照と是正ヒントを伴う 1 つのルール結果静的な error() / warning() / info()isError()
Severity(enum)文字列バックの 3 ケースError, Warning, InfoError のみがレポートを失敗させる
WormComplianceLevel(enum)文字列バックの 4 ケースFull, Compatible, Structural, PreSignrequiresSignature(), requiresDocMdp(), requiresLtv(), maxDocMdpLevel()
PdfAPolicy, PadesValidator, LtvHealthCheck, ZugferdValidator, Sec17a4WormPolicy, Fda\FdaPart11Policyクラスごとのコンストラクタそれぞれ 1 つの標準に対して CompliancePolicy を実装validate() からの list<ComplianceFinding>Policies 経由で取得。Sec17a4WormPolicy::getLevel() は設定された厳格度を公開
Fda\FdaSigningIntent(enum)文字列バックの 6 ケースAuthoring, Review, Approval, Certification, Verification, RejectiontoPdfReasonString() は正規の /Reason 文字列を生成
Fda\FdaAuditEvent::__constructDateTimeImmutable $timestamp, string $actor, FdaSigningIntent $action, string $documentHash, string $certificateSerial, string $previousEventHash = ''構築時に SHA-256 チェーンハッシュを計算InvalidArgumentException(タイムスタンプが UTC でない)public な eventHashtoXmpRdf() は 1 つの XMP リストアイテムをシリアライズ
Fda\FdaAuditTrail::addEventFdaAuditEvent $eventチェーンリンクが証跡の末尾と一致するときにイベントを追加selfInvalidArgumentException(ハッシュチェーンの破損)createEvent(), verifyChain(), getLastEventHash(), getEvents(), embedInMetadata() も提供
Fda\FdaSignatureEnforcer::configureSeedValueFdaSigningIntent $intent, string $tsaUrlFDA 制約付きの署名シード値設定を構築SeedValueConfigFDA の理由セット、タイムスタンプ、SHA-256 以上のダイジェストを要求
Fda\FdaSignatureEnforcer::applyToSequentialSigner $signer, SigningStrategy $strategy, string $signerName, FdaSigningIntent $intent, string $tsaUrl, string $fieldName = '', ?string $reason = nullPro の SequentialSigner に FDA 制約付き署名者を追加SequentialSigner制約を生成される署名フィールドにシリアライズ
namespace NextPDF\Enterprise\Validation;
final readonly class Compliance
{
public function __construct(?ClockInterface $clock = null);
/** @param array<string, mixed> $context */
public function run(string $pdfData, CompliancePolicy $policy, array $context = []): ComplianceReport;
/** @param array<string, mixed> $context */
public static function assess(string $pdfData, CompliancePolicy $policy, array $context = []): ComplianceReport;
}
final class Policies
{
public static function pdfA4(): CompliancePolicy; // also pdfA4e(), pdfA4f()
public static function padesBaseline(): CompliancePolicy;
public static function eidasQualified(): CompliancePolicy;
public static function ltvHealth(): CompliancePolicy;
public static function zugferd(string $profile = 'BASIC'): CompliancePolicy;
public static function fdaPart11(): CompliancePolicy;
public static function sec17a4(): CompliancePolicy; // also sec17a4Compatible(), sec17a4Structural(), sec17a4PreSign()
}
interface CompliancePolicy
{
public function getName(): string;
public function getIdentifier(): string;
public function getStandardReference(): string;
/**
* @param array<string, mixed> $context
* @return list<ComplianceFinding>
*/
public function validate(string $pdfData, array $context = []): array;
}
final readonly class ComplianceReport
{
public const string LEGAL_DISCLAIMER;
public function passes(): bool;
public function fails(): bool;
public function totalFindings(): int;
public function getDisclaimer(): string;
}

Compliance::assess()(静的)と Compliance::run()(インスタンス。注入可能な Psr\Clock\ClockInterface を伴う)は、ちょうど 1 つのポリシーを適用し、ComplianceReport を返します。外部から観測可能なルール:

  • 純粋な読み取り専用。 すべての CompliancePolicy::validate() は純粋関数です。バイトを入力し、検出結果を出力します。ポリシーが PDF バイト列を変更することは決してありません。このアーキテクチャ上の不変条件により、検証は自動修正および Evidence モジュールとは区別された状態に保たれます。
  • 深刻度ゲート。 ComplianceReport::passes()errors === [] の場合にのみ true になります。警告と情報がレポートを失敗させることは決してありません。fails() はその補集合です。
  • 必須の免責事項。 ComplianceReport::getDisclaimer() は、定数の法的免責事項テキストを返します。これをユーザー向けの出力に表示することが、コントラクトによって必須とされています。
  • レポートの来歴。 レポートには、ポリシーからのポリシー名、識別子、標準参照、注入されたクロックまたはシステムクロックからの検証タイムスタンプ、測定された所要時間(ミリ秒)が含まれます。
  • 収集し、中断しない。 組み込みポリシーは、適用可能なすべてのチェックを実行し、最初のエラーで停止するのではなくすべての検出結果を収集します。
  • カタログ到達可能な DSS のみ。 LtvHealthCheck は、アクティブなオブジェクトグラフ(アクティブなトレーラー、次に /Root カタログ、次に /DSS とそのサブキー)から DSS の存在を解決します。コメント、文字列、孤立オブジェクト、または置き換えられたリビジョンに植え込まれたマーカーバイトはカウントされません。パース不能な入力は DSS なしとして扱われるため、チェックはフェイルクローズドになります。このチェックは構造的であり、埋め込まれた OCSP/CRL データを暗号的に検証することはありません。
  • 構造的な署名チェック。 Policies::padesBaseline()Policies::eidasQualified() は、PAdES 構造を PDF レベルでのみ検証します。eIDAS 下での適格性は TSP と適格証明書に依存しており、これらはこのモジュールの対象外です。
  • 規制業界向けポリシーは構造的。 FdaPart11Policy は、署名の存在、/Reason の意図、/M の署名時刻、/Name の識別情報、JavaScript の不在、FDA 監査証跡の名前空間、ハッシュチェーンの整合性をチェックします。Sec17a4WormPolicy は最大 13 の WORM ルールをチェックし、WormComplianceLevel が厳格度を選択します。Full は DocMDP レベル 1 を要求し、Compatible はレベル 2 を受け入れ、Structural / PreSign は署名、DocMDP、DSS のルールをスキップします。いずれのポリシーも法的なコンプライアンスを確立するものではありません。
  • ZUGFeRD のコンテキスト。 Policies::zugferd() は、常に PDF レベルの要件をチェックします。呼び出し元が $context['xml' => $xmlData] を渡した場合にのみ請求書 XML を検証します。それ以外の場合は情報検出結果 zugferd-xml-skipped を発行します。
  • 改ざん検知可能な監査証跡。 FdaAuditTrail は追記専用の SHA-256 ハッシュチェーンです。addEvent() は破損したリンクを拒否し、verifyChain() はすべてのハッシュを再導出し、embedInMetadata() は証跡を http://ns.nextpdf.dev/fda/1.0/ の下の XMP に PDF/A 拡張スキーマとともに書き込みます。
  • PDF でない入力や空の入力は、組み込みポリシーでは例外ではなくエラー検出結果を生み出します。常に passes() を確認し、免責事項を表示してください。
  • Policies::zugferd() はプロファイルエイリアス(BASIC_WLEN16931EN_16931)を正規化します。未知のプロファイルは、いかなる検証も実行される前のファクトリ時に \ValueError を発生させます。
  • CRL はあるが OCSP レスポンスがない DSS は、失効マテリアルチェックを満たします。検出結果は許容される代替を記載します。どちらも存在しない場合はエラーになります。
  • /VRI ディクショナリまたは /Certs 配列の欠落は、エラーではなく警告を生成します。レポートはそれでもパスできます。
  • FdaAuditEvent は、UTC でないタイムスタンプを構築時に InvalidArgumentException で拒否します。
  • FdaAuditTrail::verifyChain() は、改ざんまたは並べ替えられたイベントに対して false を返します。throw することは決してありません。
  • カスタムの CompliancePolicy 実装は validate() から throw する場合があります。Compliance::run() はキャッチしないため、そのような例外は呼び出し元に伝播します。

このモジュールは、署名、暗号的な検証、鍵の保管を一切行いません。FIPS モードのアルゴリズムポリシーは、Security モジュールと Signature モジュールが管理します。FdaSignatureEnforcer のシード値は、FDA 制約付き署名フィールドを SHA-256、SHA-384、または SHA-512 のダイジェストメソッドに制約します。

これらのポリシーは、名前付き標準に照らして構造属性をチェックします。ISO/ETSI プロファイルに対する適合の判定は、最終ファイルと外部バリデーターの組み合わせの属性であり続けます。

BehaviorReference
生成者ではなく標準に基づいて判定される適合性ISO 19005-4:2020 §5.2
長期検証のためのデジタル署名ディクショナリ / DSSISO 32000-2:2020 §12.8
DSS はドキュメントカタログの DSS キーが保持するディクショナリISO 32000-2:2020 §12.8.4.3
PAdES baseline 署名レベルETSI EN 319 142-1 §5.4.3
EN 16931 プロファイルのセマンティックモデル(補足的な参照)Factur-X 1.08 (EN 16931)

FDA 21 CFR Part 11 および SEC 17a-4 ポリシーは、構造属性のみをチェックします。これらの規制は検証コーパスの範囲外であり、検証済みの適合性主張は付与されません。FDA の検出結果内の条項文字列(例えば §11.50、§11.10(e))は、製品が発行するルール参照です。EN 16931 の行は取得フロアを下回る補足的な参照であり、ハードな適合性主張ではありません。ある標準をサポートしていることは、その標準への適合を意味せず、適合は認証でもありません。NextPDF はいかなる認証も保有しておらず、いかなる認証も付与しません。このリファレンスは法的意見ではありません。法的な十分性については、お客様のコンプライアンスチームにご相談ください。

  • 検証はインプロセスかつローカルで実行され、ネットワーク I/O はありません。ポリシーが入力を変更することはできません。
  • 信頼できないソースからの PDF バイト列を敵対的なものとして扱ってください。組み込みポリシーは任意のバイトに対して全域的であり、構造を解決できない箇所ではフェイルクローズドになります。
  • レポートのすべてのユーザー向けレンダリングで ComplianceReport::getDisclaimer() を表示してください。
  • レポートと検出結果は、署名済みドキュメントや監査証跡メタデータに由来する個人データ(署名者名、証明書シリアル)を含む場合があります。保持と最小化の管理策はオペレーターが所有します。
  • カスタムポリシーは CompliancePolicy を実装します。シリアライズとキャッシュのために、getIdentifier() はすべてのポリシーにわたって一意に保ってください。
  • このモジュールは暗号的な機能に関わります。ご自身のレビューではセキュリティ上重要なものとして扱ってください。
  • 内部メカニズムの詳細はソースリポジトリの内部ドキュメントにとどまり、このマニュアルの対象外です。

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