ข้ามไปยังเนื้อหา
getnextpdf.com

Enterprise รุ่น

Validation — เอกสารอ้างอิงเชิงลึก

โมดูล Validation รันนโยบายการปฏิบัติตามข้อกำหนดเชิงโครงสร้างแบบอ่านอย่างเดียวสำเร็จรูปกับไบต์ PDF ดิบ Compliance::assess() ใช้ CompliancePolicy หนึ่งรายการพอดีและคืนค่า ComplianceReport พร้อมผลการตรวจพบที่แบ่งตามระดับความรุนแรงและข้อความปฏิเสธความรับผิดทางกฎหมายที่บังคับ นโยบายมีให้สำหรับ PDF/A-4 (พร้อมตัวแปร e และ f ) โครงสร้าง PAdES baseline โปรไฟล์เชิงโครงสร้าง eIDAS สุขภาพ LTV/DSS ZUGFeRD / Factur-X FDA 21 CFR Part 11 และการเก็บถาวรแบบ WORM ตาม SEC Rule 17a-4 ทุกนโยบายเป็นฟังก์ชันบริสุทธิ์ คือไบต์เข้า ผลการตรวจพบออก Validation ไม่เคยแก้ไขเอกสารและไม่เคยดำเนินการตรวจสอบทางการเข้ารหัสลับ

ความสามารถนี้มาในแพ็กเกจ NextPDF Enterprise (nextpdf/enterprise ) และเปิดใช้งานด้วยซองสิทธิ์การใช้งานระดับชั้น Enterprise การปรับใช้ที่ไม่มีสิทธิ์ดังกล่าวจะไม่โหลดคลาสของความสามารถนี้ เปรียบเทียบรุ่นและขอรับสิทธิ์การใช้งาน

พื้นผิว Validation/Evidence ได้รับอนุญาตด้วยความสามารถ enterprise.compliance.evidence สิทธิ์ที่ถูกปฏิเสธจะปฏิเสธฟีเจอร์แทนที่จะลดระดับลงอย่างเงียบ ๆ

ระดับชั้นพื้นผิว Validation
Coreเครื่องมือตรวจสอบสตรีมไบต์ในกระบวนการและการตรวจสอบไขว้ไวยากรณ์ ผลที่ไม่พบรายการใดเป็นผลที่ตรวจสอบแล้ว ไม่ใช่ใบรับรอง
Proการตรวจสอบ EN 16931 / Factur-X / ZUGFeRD ในกระบวนการที่เลเยอร์ใบแจ้งหนี้อิเล็กทรอนิกส์ ไม่มีนโยบายสำเร็จรูปของ PDF/A-4, PAdES, LTV, FDA หรือ SEC
Enterpriseนโยบายเชิงโครงสร้างสำเร็จรูปสำหรับ PDF/A-4, PAdES, LTV, ZUGFeRD, FDA Part 11 และ SEC 17a-4 พร้อมรายงานแบบรวม (โมดูลนี้)

เกตเวย์ไซด์คาร์ภายนอกของ Enterprise Compliance เป็นโมดูลที่แยกต่างหากและเป็นอิสระ

Terminal window
composer require nextpdf/enterprise:^3
สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าโยนหรือล้มเหลวด้วยหมายเหตุ
Compliance::__construct?ClockInterface $clock = nullใช้นาฬิการะบบเมื่อไม่มีการฉีดนาฬิการูปแบบ instance ที่เป็นมิตรกับ DI นาฬิกาประทับ validatedAt
Compliance::runstring $pdfData, CompliancePolicy $policy, array $context = []ใช้นโยบายหนึ่งรายการพอดีและวัดระยะเวลาตามเวลานาฬิกาจริงComplianceReportส่งต่อ exception ของนโยบายกำหนดเอง นโยบายในตัวจะเก็บผลการตรวจพบแทนที่จะโยนเมท็อดแบบ instance
Compliance::assess (static)string $pdfData, CompliancePolicy $policy, array $context = []สร้าง instance เริ่มต้นและมอบหมายให้ run()ComplianceReportเหมือนกับ run()เส้นทางเร่งด่วนแบบไม่ต้องตั้งค่า
Policies::pdfA4 / ::pdfA4e / ::pdfA4f (static)นโยบายเชิงโครงสร้าง PDF/A-4 ตาม ISO 19005-4:2020CompliancePolicye อนุญาตคำอธิบายประกอบแบบ 3D/rich-media f เพิ่มการตรวจสอบความสัมพันธ์ของไฟล์ที่ฝัง
Policies::padesBaseline (static)การตรวจสอบเชิงโครงสร้าง PAdES B-BCompliancePolicyโครงสร้างเท่านั้น ไม่มีการตรวจสอบทางการเข้ารหัสลับ
Policies::eidasQualified (static)การตรวจสอบเชิงโครงสร้าง PAdES ภายใต้โปรไฟล์ที่ระบุป้าย eIDASCompliancePolicyการมีคุณสมบัติขึ้นอยู่กับ TSP และใบรับรองที่มีคุณสมบัติเหมาะสม
Policies::ltvHealth (static)การตรวจสอบสุขภาพเชิงโครงสร้างของ DSSCompliancePolicyการมีอยู่ของ DSS resolve จากกราฟอ็อบเจกต์ที่ใช้งานอยู่ แบบ fail-closed
Policies::zugferd (static)string $profile = 'BASIC'ทำให้นามแฝงของโปรไฟล์เป็นมาตรฐานและสร้างเครื่องมือตรวจสอบ ZUGFeRDCompliancePolicy\ValueError (โปรไฟล์ที่ไม่รู้จัก)โปรไฟล์: MINIMUM, BASIC, BASIC_WL, EN16931, EXTENDED
Policies::fdaPart11 (static)นโยบายเชิงโครงสร้าง FDA 21 CFR Part 11CompliancePolicyการตรวจสอบเชิงโครงสร้างเจ็ดรายการ รวมถึงความสมบูรณ์ของ hash-chain ของร่องรอยการตรวจสอบ
Policies::sec17a4 / ::sec17a4Compatible / ::sec17a4Structural / ::sec17a4PreSign (static)นโยบาย WORM ตาม SEC 17a-4 ที่ระดับความเข้มงวดที่ระบุชื่อCompliancePolicyระดับความเข้มงวดจับคู่กับ WormComplianceLevel
CompliancePolicy (interface)สัญญาแบบ strategy สำหรับหนึ่งมาตรฐานgetName(), getIdentifier(), getStandardReference(), validate() ลูกค้าสามารถ implement ได้
ComplianceReportอ็อบเจกต์ค่าแบบอ่านอย่างเดียวผลการตรวจพบถูกแบ่งตามระดับความรุนแรงตอนสร้างpasses(), fails(), totalFindings(), getDisclaimer() สาธารณะ findings, errors, warnings, infos, policyName, policyId, standard, validatedAt, durationMs
ComplianceFindingSeverity $severity, string $ruleId, string $message, string $clause = '', string $suggestion = ''ผลของกฎหนึ่งรายการพร้อมการอ้างอิงอนุประโยคและคำแนะนำการแก้ไขstatic error() / warning() / info() isError()
Severity (enum)3 กรณีที่มีสตริงรองรับError, Warning, Infoมีเพียง Error ที่ทำให้รายงานไม่ผ่าน
WormComplianceLevel (enum)4 กรณีที่มีสตริงรองรับFull, Compatible, Structural, PreSignrequiresSignature(), requiresDocMdp(), requiresLtv(), maxDocMdpLevel()
PdfAPolicy, PadesValidator, LtvHealthCheck, ZugferdValidator, Sec17a4WormPolicy, Fda\FdaPart11Policyคอนสตรัคเตอร์ต่อคลาสimplement CompliancePolicy สำหรับหนึ่งมาตรฐานต่อคลาสlist<ComplianceFinding> จาก validate()รับผ่าน Policies Sec17a4WormPolicy::getLevel() เปิดเผยระดับความเข้มงวดที่กำหนดค่าไว้
Fda\FdaSigningIntent (enum)6 กรณีที่มีสตริงรองรับAuthoring, Review, Approval, Certification, Verification, RejectiontoPdfReasonString() ให้สตริง /Reason แบบ canonical
Fda\FdaAuditEvent::__constructDateTimeImmutable $timestamp, string $actor, FdaSigningIntent $action, string $documentHash, string $certificateSerial, string $previousEventHash = ''คำนวณ hash ของเชน SHA-256 ตอนสร้างInvalidArgumentException (timestamp ไม่ใช่ UTC)eventHash สาธารณะ toXmpRdf() ทำ serialize รายการ XMP list หนึ่งรายการ
Fda\FdaAuditTrail::addEventFdaAuditEvent $eventเพิ่มเหตุการณ์เมื่อลิงก์เชนของมันตรงกับส่วนท้ายของร่องรอยselfInvalidArgumentException (hash chain เสียหาย)รวมถึง createEvent(), verifyChain(), getLastEventHash(), getEvents(), embedInMetadata()
Fda\FdaSignatureEnforcer::configureSeedValueFdaSigningIntent $intent, string $tsaUrlสร้างการกำหนดค่า seed-value ของลายเซ็นที่ถูกจำกัดตาม FDASeedValueConfigต้องใช้ชุดเหตุผล FDA, timestamp และไดเจสต์ SHA-256 หรือแข็งแกร่งกว่า
Fda\FdaSignatureEnforcer::applyToSequentialSigner $signer, SigningStrategy $strategy, string $signerName, FdaSigningIntent $intent, string $tsaUrl, string $fieldName = '', ?string $reason = nullเพิ่มผู้ลงนามที่ถูกจำกัดตาม FDA ให้กับ SequentialSigner ของ ProSequentialSignerทำ serialize ข้อจำกัดลงในฟิลด์ลายเซ็นที่สร้างขึ้น
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() (static) และ Compliance::run() (instance, พร้อม Psr\Clock\ClockInterface ที่ฉีดได้) ใช้นโยบายหนึ่งรายการพอดีและคืนค่า ComplianceReport กฎที่สังเกตได้จากภายนอก:

  • อ่านอย่างเดียวบริสุทธิ์ ทุก CompliancePolicy::validate() เป็นฟังก์ชันบริสุทธิ์ คือไบต์เข้า ผลการตรวจพบออก นโยบายจะไม่แก้ไขไบต์ PDF เลย invariant เชิงสถาปัตยกรรมนี้ทำให้การตรวจสอบความถูกต้องแยกจากการแก้ไขอัตโนมัติและจากโมดูล Evidence
  • เกตระดับความรุนแรง ComplianceReport::passes() เป็น true เฉพาะเมื่อ errors === [] คำเตือนและข้อมูลไม่เคยทำให้รายงานไม่ผ่าน fails() เป็นส่วนเติมเต็ม
  • ข้อความปฏิเสธความรับผิดที่บังคับ ComplianceReport::getDisclaimer() คืนค่าข้อความปฏิเสธความรับผิดทางกฎหมายแบบคงที่ สัญญากำหนดให้ต้องแสดงข้อความนี้ในเอาต์พุตที่ผู้ใช้มองเห็น
  • ที่มาของรายงาน รายงานพกพาชื่อนโยบาย ตัวระบุ และการอ้างอิงมาตรฐานจากนโยบาย เวลาประทับการตรวจสอบจากนาฬิกาที่ฉีดหรือนาฬิการะบบ และระยะเวลาที่วัดได้เป็นมิลลิวินาที
  • เก็บรวบรวม อย่ายกเลิก นโยบายในตัวรันการตรวจสอบที่เกี่ยวข้องทั้งหมดและเก็บทุกผลการตรวจพบแทนที่จะหยุดที่ข้อผิดพลาดแรก
  • เฉพาะ DSS ที่เข้าถึงได้ผ่าน catalog LtvHealthCheck resolve การมีอยู่ของ DSS จากกราฟอ็อบเจกต์ที่ใช้งานอยู่ คือ trailer ที่ใช้งานอยู่ จากนั้น catalog /Root แล้วจึง /DSS และคีย์ย่อยของมัน ไบต์ marker ที่ฝังในคอมเมนต์ สตริง อ็อบเจกต์กำพร้า หรือ revision ที่ถูกแทนที่ไม่นับ อินพุตที่แจงไม่ได้ถือเป็นไม่มี DSS ดังนั้นการตรวจสอบจึง fail closed การตรวจสอบเป็นเชิงโครงสร้าง ไม่ได้ตรวจสอบข้อมูล OCSP/CRL ที่ฝังไว้ในทางการเข้ารหัสลับ
  • การตรวจสอบลายเซ็นเชิงโครงสร้าง Policies::padesBaseline() และ Policies::eidasQualified() ตรวจสอบโครงสร้าง PAdES ในระดับ PDF เท่านั้น การมีคุณสมบัติภายใต้ eIDAS ขึ้นอยู่กับ TSP และใบรับรองที่มีคุณสมบัติเหมาะสม ซึ่งอยู่นอกโมดูลนี้
  • นโยบายอุตสาหกรรมที่มีการกำกับดูแลเป็นเชิงโครงสร้าง FdaPart11Policy ตรวจสอบการมีลายเซ็น เจตนา /Reason เวลาลงนาม /M identity /Name การไม่มี JavaScript namespace ของร่องรอยการตรวจสอบ FDA และความสมบูรณ์ของ hash-chain Sec17a4WormPolicy ตรวจสอบกฎ WORM สูงสุด 13 รายการ WormComplianceLevel เลือกระดับความเข้มงวด Full เรียกร้อง DocMDP ระดับ 1 Compatible ยอมรับระดับ 2 และ Structural / PreSign ข้ามกฎลายเซ็น DocMDP และ DSS ไม่มีนโยบายใดสร้างการปฏิบัติตามข้อกำหนดทางกฎหมาย
  • บริบท ZUGFeRD Policies::zugferd() ตรวจสอบข้อกำหนดระดับ PDF เสมอ มันตรวจสอบ XML ของใบแจ้งหนี้เฉพาะเมื่อผู้เรียกส่ง ['xml' => $xmlData] ใน $context มิฉะนั้นจะปล่อยผลการตรวจพบระดับข้อมูล zugferd-xml-skipped
  • ร่องรอยการตรวจสอบที่ตรวจจับการปลอมแปลงได้ FdaAuditTrail เป็น hash chain SHA-256 แบบเพิ่มได้อย่างเดียว addEvent() ปฏิเสธลิงก์ที่เสียหาย verifyChain() คำนวณทุก hash ใหม่ และ embedInMetadata() เขียนร่องรอยลงใน XMP ภายใต้ http://ns.nextpdf.dev/fda/1.0/ พร้อม extension schema ของ PDF/A
  • อินพุตที่ไม่ใช่ PDF หรือว่างเปล่าจะให้ผลการตรวจพบที่เป็นข้อผิดพลาดแทนที่จะเป็น exception ในนโยบายในตัว ตรวจสอบ passes() และแสดงข้อความปฏิเสธความรับผิดเสมอ
  • Policies::zugferd() ทำให้นามแฝงของโปรไฟล์เป็นมาตรฐาน (BASIC_WL, EN16931, EN_16931) โปรไฟล์ที่ไม่รู้จักจะยก \ValueError ตอนสร้างจากโรงงาน ก่อนที่การตรวจสอบใด ๆ จะเริ่ม
  • DSS ที่มี CRL แต่ไม่มีการตอบสนอง OCSP ยังคงเป็นไปตามการตรวจสอบวัสดุการเพิกถอน ผลการตรวจพบจะระบุทางเลือกที่ยอมรับได้ การที่ไม่มีทั้งสองอย่างเลยจึงเป็นข้อผิดพลาด
  • /VRI dictionary หรือ /Certs array ที่หายไปทำให้เกิดคำเตือน ไม่ใช่ข้อผิดพลาด รายงานยังคงผ่านได้
  • FdaAuditEvent ปฏิเสธ timestamp ที่ไม่ใช่ UTC ใด ๆ ด้วย InvalidArgumentException ตอนสร้าง
  • FdaAuditTrail::verifyChain() คืนค่า false เมื่อมีเหตุการณ์ที่ถูกปลอมแปลงหรือถูกจัดลำดับใหม่ใด ๆ และไม่เคยโยน exception
  • การ implement CompliancePolicy แบบกำหนดเองอาจโยน exception จาก validate() Compliance::run() ไม่ดักจับ ดังนั้น exception ดังกล่าวจะส่งต่อไปยังผู้เรียก

โมดูลนี้ไม่ดำเนินการลงนาม ไม่ตรวจสอบทางการเข้ารหัสลับ และไม่ดูแลรักษาคีย์ นโยบายอัลกอริทึมในโหมด FIPS ถูกควบคุมโดยโมดูล Security และ Signature ค่า seed ของ FdaSignatureEnforcer จำกัดฟิลด์ลายเซ็นที่ผูกกับ FDA ให้ใช้วิธีไดเจสต์ SHA-256, SHA-384 หรือ SHA-512

นโยบายเหล่านี้ตรวจสอบแอตทริบิวต์เชิงโครงสร้างเทียบกับมาตรฐานที่ระบุชื่อ คำตัดสินเรื่องความสอดคล้องสำหรับโปรไฟล์ ISO/ETSI ยังคงเป็นคุณสมบัติของไฟล์สุดท้ายร่วมกับเครื่องมือตรวจสอบภายนอก

พฤติกรรมการอ้างอิง
การเป็นไปตามข้อกำหนดถูกกำหนดเทียบกับมาตรฐาน ไม่ใช่เทียบกับผู้ผลิตISO 19005-4:2020 §5.2
พจนานุกรมลายเซ็นดิจิทัล / DSS สำหรับการตรวจสอบความถูกต้องแบบระยะยาวISO 32000-2:2020 §12.8
DSS เป็นพจนานุกรมที่ถือโดยคีย์ DSS ของ catalog เอกสารISO 32000-2:2020 §12.8.4.3
ระดับลายเซ็น PAdES baselineETSI EN 319 142-1 §5.4.3
แบบจำลองเชิงความหมายของโปรไฟล์ EN 16931 (การอ้างอิงสนับสนุน)Factur-X 1.08 (EN 16931)

นโยบาย FDA 21 CFR Part 11 และ SEC 17a-4 ตรวจสอบแอตทริบิวต์เชิงโครงสร้างเท่านั้น ข้อบังคับเหล่านั้นอยู่นอกคลังข้อมูลการตรวจสอบและไม่มีการอ้างความสอดคล้องแบบ verified สตริงอนุประโยคภายในผลการตรวจพบของ FDA (ตัวอย่างเช่น §11.50, §11.10(e)) เป็นการอ้างอิงกฎที่ผลิตภัณฑ์ปล่อยออกมา แถว EN 16931 เป็นการอ้างอิงสนับสนุนที่อยู่ต่ำกว่าระดับการดึงข้อมูล ไม่ใช่ข้ออ้างความสอดคล้องที่เด็ดขาด การรองรับมาตรฐานไม่ใช่การเป็นไปตามมาตรฐานนั้น และการเป็นไปตามข้อกำหนดก็ไม่ใช่การออกใบรับรอง — NextPDF ไม่ได้ถือใบรับรองใด ๆ และไม่ได้มอบใบรับรองใด ๆ เอกสารอ้างอิงนี้ไม่ใช่คำให้ความเห็นทางกฎหมาย ให้ปรึกษาทีมการปฏิบัติตามข้อกำหนดของคุณเกี่ยวกับความเพียงพอทางกฎหมาย

  • การตรวจสอบความถูกต้องทำงานภายในกระบวนการและในเครื่องโดยไม่มี I/O ผ่านเครือข่าย นโยบายไม่สามารถเปลี่ยนแปลงอินพุตได้
  • ถือว่าไบต์ PDF จากแหล่งที่ไม่น่าเชื่อถือเป็นอันตราย นโยบายในตัวครอบคลุมไบต์ตามอำเภอใจอย่างสมบูรณ์และ fail closed เมื่อไม่สามารถ resolve โครงสร้างได้
  • แสดง ComplianceReport::getDisclaimer() ในทุกการเรนเดอร์รายงานที่ผู้ใช้มองเห็น
  • รายงานและผลการตรวจพบอาจมีข้อมูลส่วนบุคคลจากเอกสารที่ลงนามและเมทาดาทาของร่องรอยการตรวจสอบ (ชื่อผู้ลงนาม หมายเลขซีเรียลใบรับรอง) ผู้ดำเนินการเป็นเจ้าของมาตรการควบคุมการเก็บรักษาและการลดข้อมูล
  • นโยบายกำหนดเอง implement CompliancePolicy รักษา getIdentifier() ให้ไม่ซ้ำกันในทุกนโยบายเพื่อการ serialize และการแคช
  • โมดูลนี้เกี่ยวข้องกับฟังก์ชันการเข้ารหัสลับ ให้ถือว่ามีความอ่อนไหวด้านความปลอดภัยในการรีวิวของคุณเอง
  • รายละเอียดกลไกภายในอยู่ในเอกสารภายในของ repository ต้นทางและอยู่นอกขอบเขตของคู่มือนี้

หน้านี้บันทึกเฉพาะพฤติกรรมที่สังเกตได้จากภายนอกและพื้นผิว API สาธารณะที่รองรับเท่านั้น เส้นทาง namespace ภายใน คลาสตัวช่วย ตารางกลไก ชื่อไฟล์ runbook และคำนำหน้า ticket อยู่นอกขอบเขต