Pro エディション
Compliance — 詳細リファレンス
Compliance モジュールは、NextPDF\Pro\Compliance の下に 3 つの独立したサーフェスをまとめています。
- 言語タグの報告 — 厳格な PDF/UA-2
/Langポリシーのファサードと、構造化された PSR-3 形式のコンプライアンスイベントレポーター。 - 電子インボイスの処理 — EN 16931 セマンティックモデルに照らした Factur-X 1.08 / ZUGFeRD 2.4 の検証と、ハイブリッド PDF/A-3 の出力。
- 来歴(Provenance) — 敵対的入力に対して堅牢化された JUMBF パーサーを通じて、呼び出し元が供給した C2PA マニフェストストアを埋め込み・抽出します。クレームの合成はプレビューゲートのままです。
このモジュールは、チェックした内容を報告します。ドキュメントを認証することはなく、暗号署名も行いません。
提供状況とライセンス
「提供状況とライセンス」という見出しのセクションこの機能は NextPDF Pro(nextpdf/pro)に含まれ、Pro ティアのライセンスエンベロープで有効化されます。その権限を持たないデプロイメントでは、この機能のクラスは読み込まれません。エディションを比較してライセンスを取得。
機能ごとのライセンスフラグはありません。これは Pro エディションの機能です。実験的な C2PA クレームビルダーは、加えて明示的な環境オプトインを必要とします(「エッジケースと障害モード」を参照)。
公開 API サーフェス
「公開 API サーフェス」という見出しのセクションcomposer require nextpdf/pro:^3| シンボル | パラメーター | 既定の挙動 | 戻り値 | スロー/失敗条件 | 備考 |
|---|---|---|---|---|---|
LangComplianceReporter::warn() / ::error() | string $tag, string $reason, ?string $clauseReference = null | PSR-3 ロガーを通じて、言語タグイベントごとに 1 つの構造化された JSON レコードを出力 | void | レコードの JSON エンコードが失敗した場合は JsonException | warn = lax モードの拒否、error = strict モードの拒否 |
LangComplianceReporter::reportException() | InvalidBcp47TagException $exception, string $severity = 'error' | 例外からタグと理由を抽出し、warn() または error() に委譲 | void | 同上 | 利便性のための経路 |
LangComplianceReporter::buildRecord() | string $severity, string $tag, string $reason, ?string $clauseReference = null | ログ記録せずにレコード配列を構築 | array | スローしない | ファイルごとの JSON サマリーなど、カスタムシンク向け |
ConformancePolicy::default() | ?LoggerInterface $logger = null | 厳格な UA-2 ポリシー。不正な形式または未登録の /Lang タグを拒否 | self | スローしない | v5.0 の既定は strict |
ConformancePolicy::fromCore() | CoreConformancePolicy $core, ?LoggerInterface $logger = null | 既存の Core ポリシーをそのままラップ。軸は反転しない | self | スローしない | strict な姿勢には default() を推奨 |
ConformancePolicy::withStrictUa2() | bool $enabled | strict 軸を設定したコピーを返す。無効化すると PSR-3 notice を出力 | self | スローしない | 非推奨のオプトアウト。削除目標は 6.0.0 |
ConformancePolicy::isStrictUa2() / ::mode() | — | 基盤となる Core ポリシーを読み取る | bool / ConformanceMode | スローしない | — |
EInvoiceValidator::validate() | string $pdfPath | フルパイプライン。PDF/A-3 ラッパーチェック、添付の抽出、プロファイル検出、EN 16931 ルール、Schematron | EInvoiceValidationResult | I/O 障害、不正な形式の PDF 構造、またはツールのクラッシュ時に EInvoiceException のサブクラス | 凍結された SPI インターフェース。整形式の非電子インボイス PDF は結果を返し、スローしない |
EInvoiceXmlValidator::validate() | string $xmlPayload, ValidatorContext $context | 構造のプリフライトに加え、CII ペイロードに対する EN 16931 の詳細セマンティックルールコーパス | contract ValidationResult | 無効な入力に対してはスローしない。拒否は所見を伴う失敗結果として表れる | 具象のクロスティアバリデーター。入力は XmlGuard を通じてゲートされる |
EInvoiceValidationResult::isValid() | — | ラッパー、添付仕様、プロファイル、構文が成立し、かつ FATAL 違反が存在しない場合にのみ真 | bool | スローしない | 違反リストが空であることだけでは有効性にはならない |
EInvoiceValidationResult::notAnEInvoice() | — | 決定論的な、すべて null・すべて false の結果 | self | スローしない | 「ハイブリッドインボイスではない」ケースのファクトリー |
EInvoiceProfile | 文字列バック列挙型 | ケース MINIMUM、BASIC_WL、BASIC、EN16931、EXTENDED。BT-24 URN によりバック | — | — | MINIMUM と BASIC_WL では isEn16931Conformant() は false |
EInvoiceSyntax | 文字列バック列挙型 | ケース UN_CEFACT_CII、UBL_INVOICE、UBL_CREDIT_NOTE | — | — | isFacturXEligible() が真なのは CII のみ。UBL はバリデーター専用 |
BusinessRuleViolation | string $ruleId, BusinessRuleSeverity $severity, string $message, ?string $xpath = null, ?string $ramPath = null | 不変の違反 DTO | — | — | ルール ID ファミリー BR-、BR-CO-、BR-CL-、BR-DEC-、BR-FXEXT- |
BusinessRuleSeverity | 文字列バック列挙型 | FATAL はインボイスを無効化し、WARNING は品質上の懸念を示す | — | — | EN 16931 の Schematron レベルを反映 |
FacturXEmbedder::embed() | 署名フェンスを参照 | PDF/A ソースに埋め込みファイルストリーム、filespec、XMP を追加し、xref を書き換える | void | 不正な形式の XML、読み取り不能なソース、カタログの欠如、オブジェクトストリームまたは xref ストリームのソース、または出力書き込み失敗時に EInvoiceException | ソースファイルはそのまま保持される |
FacturXEmbedderOptions::default() | — | /AFRelationship /Alternative、ファイル名 factur-x.xml、タイプ INVOICE、バージョン 1.0 | self | スローしない | 既定はドイツの義務を満たし、フランスでも引き続き受け入れられる |
FacturXEmbedderOptions::withRelationship() / ::withFilename() | string | オーバーライドを適用したコピーを返す | self | 受け入れ集合外では InvalidArgumentException | リレーションシップ:Source、Data、Alternative。ファイル名には zugferd-invoice.xml と xrechnung.xml を含む |
FacturXEmbedderOptions::withDocumentType() | string $documentType | XMP のドキュメントタイプのオーバーライドを適用したコピーを返す | self | スローしない | 値は防御的に列挙されていない |
FacturXContractEmbedder::embed() | string $pdfBytes, string $xmlPayload, EmbedderOptions $options | 短命の一時ファイルを介した FacturXEmbedder 上のバイト入力・バイト出力アダプター | string | EInvoiceException。XRECHNUNG プロファイルは Enterprise 専用として拒否される | クロスティアの EmbedderInterface 実装 |
C2paManifestEmbedder::embed() | string $pdfBytes, ManifestStore $store | ストアのバイトシリアライズをプロファイル位置に埋め込む | string | 埋め込み失敗時にはすべて C2paException | 凍結された SPI インターフェース。バイトのみ、I/O なし |
C2paManifestEmbedder::extract() | string $pdfBytes | 堅牢化された JUMBF パーサーを通じて埋め込みストアを解析 | ManifestStore|null | ストアが存在するが堅牢化キャップに違反する場合、C2paException のサブクラス | null は不在を示す。不在時はスローしない |
ManifestStore::fromBoxes() / ::empty() | list<JumbfBox> / — | 不変のストア値オブジェクトを構築 | self | スローしない | ボックスの順序はラウンドトリップの等価性にとって重要 |
ManifestStore::toBytes() / ::isEmpty() / ::size() | — | ルートボックスをシリアライズ。空のストアは空文字列にシリアライズされる | string / bool / int | スローしない | — |
JumbfBoxParser::parse() | string $bytes | ハードキャップの下でルートレベルの JUMBF ボックスを解析 | list<JumbfBox> | MalformedJumbfException, JumbfBombException, JumbfCycleDetectedException, JumbfDepthExceededException | キャップ:深さ 8、ボックスあたり 64 MiB、合計 128 MiB、MAX_CHILDREN_PER_SUPERBOX 4096 |
JumbfBox::superbox() / ::leaf() | string $tbox, … | 検証済みボックスを構築。toBytes() はパーサーを通じてラウンドトリップする | self | TBox が正確に 4 バイトでない場合は MalformedJumbfException | — |
C2paCapabilityStatus::current() / ::summary() | — | C2PA 機能の成熟度を報告。現在は preview-draft | self / string | スローしない | 機械可読なプレビューマーカー |
Feature::PREVIEW_C2PA_DRAFT->isEnabled() | — | 呼び出しごとにプロセス環境を読み取る。有効化するのはリテラル '1' のみ | bool | スローしない | 環境変数 NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT |
ExperimentalC2paEmbedder::buildManifestStore() | string $sourceBytes, string $producer | 1 つの SHA-256 ハッシュバインディングクレームアサーションを持つ、ドラフト固定のマニフェストストアを構築 | ManifestStore | プレビューフラグがオフの場合、コンストラクターが LogicException をスロー | プレビュー。ワイヤーフォーマットはドラフトスナップショットに固定。クレーム署名は出力されない |
エントリーポイントのシグネチャ(そのまま):
public static function default(?LoggerInterface $logger = null): selfpublic function withStrictUa2(bool $enabled): selfpublic function isStrictUa2(): boolpublic function validate(string $pdfPath): EInvoiceValidationResultpublic function embed( string $sourcePdfPath, string $xml, EInvoiceProfile $profile, string $outputPdfPath, ?FacturXEmbedderOptions $options = null,): voidpublic function embed(string $pdfBytes, ManifestStore $store): stringpublic function extract(string $pdfBytes): ?ManifestStore挙動の契約
「挙動の契約」という見出しのセクション言語タグの報告。 LangComplianceReporter は、PDF/UA-2 の言語タグイベントごとに 1 つの構造化された JSON レコードを出力します。各レコードは、固定のイベント弁別子、重大度(lax モードの拒否は warn、strict モードの拒否は error)、問題のタグそのまま、機械可読な理由、解析されたタグコンポーネント(またはタグが RFC 5646 の形状文法を満たさない場合は null)、ISO 14289-2 §8.4.4 の節参照、そしてマイクロ秒付きの UTC タイムスタンプを保持します。この JSON は PSR-3 のメッセージ本文として渡され、下流のシンクはメッセージフィールドを直接解析します。ConformancePolicy は、Core の適合ポリシーに対する Premium のファサードです。その既定は厳格な UA-2 言語処理を適用し、/Lang に到達する不正な形式または未登録のタグを拒否します。オプトアウトヘルパー withStrictUa2(false) はレガシーの lax な挙動に戻し、実効値が実際に変化したときに PSR-3 の notice をログに記録します。NextPDF はそのヘルパーを v5.0 以降 非推奨 とし、削除目標を 6.0.0 としています。移行するには:composer pdfua2:audit-lang-tags <pdf-or-dir> で不正な形式の /Lang 値についてコーパスを監査し、それらを修正し、続いてオプトアウト呼び出しを削除します。
電子インボイスの処理。 EInvoiceValidator は、ハイブリッド PDF 検証のための凍結された SPI 契約です。PDF/A-3 ラッパーチェック、/AF 添付の抽出、BT-24 仕様識別子からのプロファイル検出、EN 16931 のビジネスルールエンジン、そして Schematron パスを行います。整形式の非 Factur-X PDF は、スローするのではなく EInvoiceValidationResult::notAnEInvoice() を返します。EInvoiceException のサブクラスを送出するのは、I/O 障害、不正な形式の PDF 構造、またはツールのクラッシュの場合のみです。EInvoiceXmlValidator は、具象のクロスティア XML バリデーターです。入力を Core の XmlGuard を通じてゲートし、構造のプリフライトと EN 16931 の詳細セマンティックルールコーパスを実行し、フェイルクローズします。エンジンのエラーはエラー所見として表れ、暗黙のパスになることは決してありません。FacturXEmbedder は、PDF/A ソースをハイブリッド PDF/A-3 に修正します。埋め込みファイルストリーム、構成可能な /AFRelationship を持つ filespec、そして Factur-X XMP 拡張パケットを追加し、続いて従来型のクロスリファレンステーブルを書き換えます。カタログの /AF 配列と /Names /EmbeddedFiles ネームツリーの両方が添付を参照するため、レガシーの ZUGFeRD リーダーもそれを解決できます。
来歴(Provenance)。 C2paManifestEmbedder は、呼び出し元が供給した C2PA マニフェストストアを PDF バイト文字列に埋め込むか、それを抽出します。ManifestStore は、境界を越える不変の値オブジェクトです。このシームはバイトのみでベンダー中立です。クレームを合成したり、URI 参照を取り込んだり、ハッシュバインディングを解決したりせず、ネットワークやファイルシステムの I/O を一切行いません。extract() はミス時に null を返し、ストアを持たない PDF では低コストです。null でない抽出はすべて、すでに JumbfBoxParser の堅牢化キャップを通過しています。
このモジュールは チェックした内容を報告します。ドキュメントを認証したり、法的に拘束力のあるものにしたり、いずれかの出力が規制を満たすことを保証したりはしません。電子インボイスバリデーターは税務当局のバリデーターではなく、各国の拡張(例:イタリアの SDI、フランスの Chorus Pro、ドイツの XRechnung)を除外します。EN 16931-1 が述べるとおり、インボイスの発行者は引き続き関連法令の規則を満たす責任を負います。標準のサポートは、その標準への適合ではありません。規制上の十分性については、コンプライアンスチームにご相談ください。
エッジケースと障害モード
「エッジケースと障害モード」という見出しのセクション- 整形式の非 Factur-X PDF は「電子インボイスではない」という結果を返します。スローはしません。
- ビジネスルール違反のリストが空であることは、それ自体ではドキュメントが有効であることを意味しません。ラッパーと添付のチェックも適用されます。
FacturXEmbedderは、圧縮オブジェクトストリーム(/Type /ObjStm)またはクロスリファレンスストリーム(/Type /XRef、ハイブリッドの/XRefStm)を使用するソースに対してフェイルクローズします。そのようなソースは、まず従来型のクロスリファレンステーブルで保存し直してください。- XML ペイロードは Core の
XmlGuardを通じてゲートされます。DOCTYPE またはエンティティ宣言、過大な入力、無効な UTF-8 は、埋め込み経路ではEInvoiceExceptionで、バリデーター経路では失敗結果で拒否されます。 FacturXContractEmbedderは、XRECHNUNGプロファイルを暗黙にダウングレードするのではなく、明示的に拒否します。XRechnung の出力は Enterprise の機能です。C2paManifestEmbedder::extract()は、不在(null)と不正な形式(違反した不変条件を示すC2paExceptionのサブクラス:不正な形式の構造、サイズまたは数のボム、オフセットの循環、ネストの深さ)を区別します。ExperimentalC2paEmbedderの構築は、プレビュー環境フラグが'1'に等しくない限りLogicExceptionをスローします。そのワイヤーフォーマットは C2PA のドラフトスナップショットに固定されており、予告なく変更される可能性があります。クレーム署名は一切出力しません。この機能は、C2PA の PDF プロファイルが凍結されるまでプレビューのままです。- strict UA-2 の lax オプトアウトは非推奨です。strict な既定へ移行してください(「挙動の契約」を参照)。
- このモジュールは暗号署名を行いません。C2PA クレームの署名と鍵保管は対象外です。FIPS モードの署名挙動については Security モジュールを参照してください。
| 振る舞い | 参照 | ステータス |
|---|---|---|
自然言語の宣言(/Lang) | ISO 14289-2:2024 §8.4.4 | チェック/報告 |
| コアインボイスセマンティックモデル | EN 16931-1:2026 | チェック(発行者は引き続き責任を負う) |
| 関連ファイル/埋め込みファイルストリーム | ISO 32000-2:2020 §14.13.2 | 出力(/AF、/EF、/Params) |
| 添付リレーションシップとコンテナ規則 | Factur-X 1.08 §3.1, §6.2 | 出力/チェック(既定 /AFRelationship /Alternative) |
| C2PA マニフェストストア/JUMBF | C2PA 2.1 §11.1 | 埋め込み/抽出をサポート。クレーム合成はプレビュー |
これは、このモジュールが準拠して構築されている仕様と、それがチェックまたは出力する内容を記録したものです。認証や規制上の十分性を述べたものではありません。NextPDF はこれらの標準の認証を保有していません。
開発ノート
「開発ノート」という見出しのセクション- レポーターのレコード形状は安定した契約です。下流のアラートルールは、固定のイベント弁別子に対して固定できます。
- strict UA-2 の無効化は、実効値が変化したときにのみテレメトリで可視の非推奨通知を出力します。現在の値を再表明する場合は無音です。
- Factur-X エンベッダーはソースバイトをそのまま保持し、新しいオブジェクトを追加します。PDF/A-3 適合の維持を目指しますが、再検証は行いません。厳密な証明のためには、出力を外部の PDF/A バリデーターに通してください。
- C2PA シームは 5 つの不変条件を凍結します:サードパーティのインポートなし、バイトのみの契約、I/O なし、ミス時 null の抽出、そして安定レイヤーでのクレーム合成なし。
JumbfBoxParserのキャップは公開定数です。制限を再導出するのではなく、受け入れる入力をそれらに照らしてサイズ設定してください。
このページは、外部から観測可能な挙動と、サポートされる公開 API サーフェスのみを記載します。内部の名前空間パス、ヘルパークラス、メカニズムテーブル、ランブックのファイル名、チケットのプレフィックスは対象外です。