Enterprise 版本
合規
NextPDF Enterprise 會將一份完成的 PDF 路由到一個外部驗證工具——veraPDF、EU DSS 或 Mustang/KoSIT——並回傳一份統一、結構化的結果。該結果記錄外部工具檢查了什麼。它不是憑證、不是法律意見,也不是文件滿足任何法規的保證。
供應與授權
標題為「供應與授權」的區段此能力隨 NextPDF Enterprise(nextpdf/enterprise)出貨,並以一份 Enterprise 層級的授權封套啟用。缺少該授權的部署不會載入此能力的類別。比較各版本並取得授權。
composer require nextpdf/enterprise:^3概念總覽
標題為「概念總覽」的區段此模組是一道閘道,而非一個驗證器。一致性判定來自外部工具。閘道會選定正確的工具、委派給它,並將答案正規化。
ComplianceGateway 接受一個 ComplianceProfile 與 PDF 位元組。它會解析哪一個已註冊的 ExternalValidator 處理該設定檔、檢查 sidecar 是否可連線、委派該檢查,並回傳一個 ExternalValidationResult。ComplianceProfile 列舉支援的目標:PDF/A-1b/2b/3b/4/4f、PDF/UA-1/2、PDF 2.0 Arlington 結構模型、PAdES B-B/B-T/B-LT/B-LTA、ZUGFeRD 2.4 / Factur-X 1.08,以及 EN 16931。每一個案例都對應到一個規範性參考與一個外部工具。
ExternalValidator 是每一個 sidecar 橋接所實作的合約:VeraPdfValidator(veraPDF REST)、DssValidator(EU DSS REST),以及 ZugferdExternalValidator(Mustang/KoSIT)。每一個都透過一個 PSR-18 HTTP 用戶端與其 sidecar 通訊,並將工具特定的回應轉譯為一個 ExternalValidationResult。
一項 fail-closed 原則治理 sidecar 缺席。預設情況下,一個不可用的 sidecar 會引發 ComplianceSidecarUnavailableException:缺少驗證器是一種「無法檢查」,而不是通過。一個明確的選用模式會將該狀況降級為一則已記錄的警告與一個 null 結果,使呼叫端能偵測「未檢查」並自行決定。AiReadyCertifier 是一個獨立的接縫:它評估三項就緒準則,並蓋上一個 nextpdf: XMP 來源出處區塊。它的「certified」級別是一個 NextPDF 內部的就緒標籤。它不是標準認證,也不授予任何法規地位。
這裡的「compliance」是什麼意思
標題為「這裡的「compliance」是什麼意思」的區段此模組會 委派一次檢查並回報結果。它不主張一份文件在法律上合規、已認證或具法律約束力。
- 一致性是 最終檔案加上一個驗證器 的屬性,而非本函式庫的屬性。ISO 19005-4:2020 §5.2 將義務置於一個合規處理器之上,並依該標準的規範性要求判定一致性——由一個檢查工具,而非由產生檔案的軟體判定。
- 一個零非一致性的結果,是針對外部工具所實作條款的一次檢查結果。它不是一份概括的憑證。
- 一個不可用的 sidecar 代表 未檢查。它絕不代表通過。
支援某個設定檔不等於符合它,而符合也不等於認證。NextPDF 並未持有任何認證,也不授予任何認證。請洽詢你的合規團隊以判斷法規上的充分性。
層級邊界
標題為「層級邊界」的區段請精確閱讀各版本。它們做的事情不同。
- NextPDF Core
Conformance/Compliance在行程內執行位元組串流與文法檢查,並承載一致性模式鑑別子。Core 會發出某標準所定義的結構。它不認證該結果。 - NextPDF Pro
Compliance(EInvoiceValidator) 會 在行程內 驗證 EN 16931 / Factur-X / ZUGFeRD,沒有任何外部 sidecar。 - NextPDF Enterprise Compliance(本頁) 委派給 外部驗證器 sidecar(veraPDF、EU DSS、Mustang/KoSIT),並以一項 fail-closed 原則將結果正規化。
Pro 的行程內電子發票驗證器與 Enterprise 的外部 ZUGFeRD sidecar 是不同的介面。請勿將兩者混為一談。
為什麼採用這種做法
標題為「為什麼採用這種做法」的區段一致性是完成檔案由一個檢查工具所量測的屬性,而非產生檔案之函式庫的屬性。因此閘道將判定委派給具權威性的外部工具,本身只做解析、委派與正規化。在行程內自我主張一致性,會把「依標準建置」與「經獨立確認」混為一談,而這正是標準所禁止的。fail-closed 預設由此而來:一個無法連線的 sidecar 是一種「無法檢查」,因此它會引發例外而非通過。這使得一次缺失的檢查無法偽裝成一致性,也使 NextPDF 對於自身未持有任何認證一事保持誠實。
設計背景:你能交給稽核員的合規。
API 介面
標題為「API 介面」的區段| 類別 | 職責 |
|---|---|
ComplianceGateway | 為一個設定檔解析工具;委派;套用 fail-closed 原則。 |
ComplianceProfile | 支援設定檔的 enum,每一個都帶有一個標準參考與工具。 |
ExternalValidator | 外部 sidecar 橋接的合約。 |
ExternalValidationResult | 統一結果:設定檔、工具、一致性旗標、非一致性。 |
NonConformance | 來自外部工具的一項非一致性 finding。 |
VeraPdfValidator | veraPDF REST 橋接(PDF/A、PDF/UA、Arlington)。 |
DssValidator | EU DSS REST 橋接(PAdES 層級)。 |
ZugferdExternalValidator | Mustang/KoSIT 橋接(ZUGFeRD / Factur-X / EN 16931)。 |
AiReadyCertifier | 就緒評估,加上一個 nextpdf: XMP 來源出處戳記。 |
程式碼範例——快速上手
標題為「程式碼範例——快速上手」的區段use NextPDF\Enterprise\Compliance\ComplianceProfile;
$result = $gateway->validate($pdfBytes, ComplianceProfile::PdfA4);$passed = $result?->passes(); // null = sidecar unavailable (not checked)程式碼範例——正式環境
標題為「程式碼範例——正式環境」的區段$result = $gateway->validate($pdfBytes, ComplianceProfile::PdfA4);
if ($result === null) { $logger->error('compliance.not_checked', ['profile' => 'pdfa-4']); // Treat "not checked" as a blocker, never as a pass. return;}
foreach ($result->nonConformances as $nc) { $logger->warning('compliance.nonconformance', ['profile' => $result->profile->value]);}// A conformant=true result is one input to your decision, not a verdict you own.邊界案例與陷阱
標題為「邊界案例與陷阱」的區段- 一個不可用的 sidecar 預設會引發
ComplianceSidecarUnavailableException;選用模式會回傳null。無論哪一種,文件都 未被檢查。 - 一個沒有已註冊驗證器的設定檔,會引發一個引數錯誤,而非默默通過。
buildComplianceMatrix()會為可追溯性記錄工具版本與一個 commit SHA;該矩陣回報工具輸出,它不認證該輸出。
成本主要由外部 sidecar 來回,以及送往它的文件大小決定。閘道解析與結果正規化的成本,在每次呼叫中為常數。
安全注意事項
標題為「安全注意事項」的區段PDF 位元組透過一個 PSR-18 用戶端送往 sidecar。VeraPdfValidator 只剖析 JSON 回應(沒有 XML、XXE-clean)。請將 sidecar 端點視為一道信任邊界:釘選 sidecar、限制其網路觸及範圍,並驗證其 TLS。
資料落地與 PII 緩解措施
標題為「資料落地與 PII 緩解措施」的區段完整的 PDF 位元組串流會傳輸到所設定的 sidecar。若文件承載個人或受監管資料,請在你自己的控制措施下於區域內託管 sidecar。閘道不進行任何其他對外呼叫。請對結果與日誌套用保留與最小化控制措施。
安全遙測與日誌清洗
標題為「安全遙測與日誌清洗」的區段閘道日誌包含設定檔名稱、工具名稱、斷言數量,以及非一致性數量。它們不包含文件內容。若設定檔或檔名欄位敏感,請在轉送日誌前先將其清洗。
一致性
標題為「一致性」的區段| 行為 | 參考 | 狀態 |
|---|---|---|
| 一致性由一個檢查工具判定,而非由產生者判定 | ISO 19005-4:2020 §5.2 | 已反映在設計中(fail-closed 閘道) |
| PDF/A-4 檔案要求 | ISO 19005-4:2020 §6.6.4 | 委派給 veraPDF |
| PDF/UA-2 一致性(檔案的屬性) | ISO 14289-2:2024 §6 | 委派給 veraPDF |
| PAdES baseline 層級 | ETSI EN 319 142-1 §5.4.3 | 委派給 EU DSS |
此表記錄 NextPDF 建置時所依據的規格,以及外部工具檢查什麼。它不是關於認證或法規充分性的聲明。
FIPS 模式行為
標題為「FIPS 模式行為」的區段此模組不執行任何密碼學簽署。簽章一致性委派給 EU DSS;金鑰保管與 FIPS 模式簽署不在其範圍內(請參閱 Signature 與 Security 模組)。
威脅模型
標題為「威脅模型」的區段主要輸入是不可信的 PDF 位元組與一個 sidecar 回應。緩解措施:VeraPdfValidator 中僅限 JSON 的回應剖析、一道已釘選的 sidecar 信任邊界,以及一項 fail-closed 原則,使一個無法連線的驗證器絕不會解析為通過。
行為合約
標題為「行為合約」的區段- 此模組是一道閘道,而非一個驗證器:一致性判定來自一個外部工具(veraPDF、EU DSS 或 Mustang/KoSIT),而閘道會選定工具、委派,並將答案正規化。
- 一個零非一致性的結果,是針對外部工具所實作條款的一次檢查結果——而非一份概括的憑證。
- 一個不可用的 sidecar 是 fail-closed:它預設會引發一個例外,或在明確的選用模式下回傳一個
null結果;無論哪一種,文件都 未被檢查,絕不通過。 - 一個沒有已註冊驗證器的設定檔,會引發一個引數錯誤,而非默默通過。
AiReadyCertifier的「certified」級別是一個 NextPDF 內部的就緒標籤,不是標準認證,也不授予任何法規地位。
發布邊界
標題為「發布邊界」的區段本頁僅記錄外部可觀察的行為與所支援的公開 API 介面。內部命名空間路徑、輔助類別、機制表格、runbook 檔名,以及工單前綴皆不在範圍內。
Core 回退
標題為「Core 回退」的區段NextPDF Core Conformance / Compliance 在行程內執行位元組串流與文法檢查,並承載一致性模式鑑別子;它會發出某標準所定義的結構,但不認證該結果,也不委派給外部 sidecar。外部驗證器閘道沒有 Core 層級的對應。
Pro 回退
標題為「Pro 回退」的區段NextPDF Pro Compliance 會在行程內驗證 EN 16931 / Factur-X / ZUGFeRD,沒有任何外部 sidecar。Pro 的行程內電子發票驗證器與 Enterprise 的外部 ZUGFeRD sidecar 是不同的介面;外部驗證器閘道僅隨 nextpdf/enterprise 套件提供。請勿將兩者混為一談。
Enterprise 邊界註記
標題為「Enterprise 邊界註記」的區段閘道、設定檔對工具的解析,以及結果正規化以行為層級描述。各 sidecar 橋接的內部實作、工具特定的回應轉譯,以及任何內部協調細節,皆不在公開介面範圍內。
部署邊界
標題為「部署邊界」的區段完整的 PDF 位元組串流會傳輸到所設定的 sidecar。操作者託管並營運各 sidecar、釘選它們、限制其網路觸及範圍,並驗證其 TLS——sidecar 端點是一道信任邊界。若文件承載個人或受監管資料,請在你自己的控制措施下於區域內託管 sidecar,並對結果與日誌套用保留與最小化控制措施。
法律合規邊界
標題為「法律合規邊界」的區段支援某個設定檔不等於符合它,而符合也不等於認證——NextPDF 並未持有任何認證,也不授予任何認證。本文件不是法律意見;請洽詢你的合規團隊以判斷法規上的充分性。
另請參閱
標題為「另請參閱」的區段- Validation — 行程內結構性原則。
- Evidence — 封緘、附時間戳記的結果封包。
- Pro Compliance — 行程內電子發票處理(不同的介面)。
- Core Conformance — 一致性模式鑑別子。
- Compliance — 深入參考 — 各 sidecar 橋接與回應轉譯細節。