Enterprise الإصدار
التحقق من الصحة — مرجع متعمّق
نظرة سريعة
قسم بعنوان «نظرة سريعة»تشغّل وحدة Validation سياسات امتثال هيكلية جاهزة مسبقًا وللقراءة فقط على بايتات PDF الخام. تطبّق Compliance::assess() سياسة CompliancePolicy واحدة بالضبط وتُعيد ComplianceReport يتضمّن نتائج مقسّمة حسب الخطورة وإخلاء مسؤولية قانوني إلزامي. تتوفّر سياسات لـ PDF/A-4 (بالإضافة إلى المتغيّرَين e وf)، وبنية PAdES الأساسية، وملف تعريف eIDAS الهيكلي، وسلامة LTV/DSS، وZUGFeRD / Factur-X، وFDA 21 CFR Part 11، وأرشفة SEC Rule 17a-4 WORM. كل سياسة هي دالة نقية: بايتات تدخل، ونتائج تخرج. لا تُعدّل وحدة Validation المستند أبدًا ولا تُجري أي تحقّق تشفيري.
التوفّر والترخيص
قسم بعنوان «التوفّر والترخيص»تُشحن هذه القدرة ضمن NextPDF Enterprise (nextpdf/enterprise) وتُفعَّل بمظروف ترخيص من فئة Enterprise. لا يُحمّل أي نشر يفتقر إلى ذلك الاستحقاق فئات هذه القدرة. قارن الإصدارات واحصل على ترخيص.
تُرخَّص واجهة Validation/Evidence عبر قدرة enterprise.compliance.evidence. يؤدي رفض الاستحقاق إلى منع الميزة بدلاً من تدهورها بصمت.
| الفئة | واجهة التحقق |
|---|---|
| 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 مع تقرير موحّد (هذه الوحدة). |
تُعد بوابة الشريط الجانبي الخارجي (external-sidecar) الخاصة بـ Enterprise Compliance وحدة منفصلة ومستقلّة.
واجهة برمجة التطبيقات العامة
قسم بعنوان «واجهة برمجة التطبيقات العامة»composer require nextpdf/enterprise:^3| الرمز | المُعامِلات | السلوك الافتراضي | القيمة المُعادة | يرمي أو يفشل بـ | ملاحظات |
|---|---|---|---|---|---|
Compliance::__construct | ?ClockInterface $clock = null | ساعة النظام عند عدم حقن أي ساعة | — | — | شكل نسخة ملائم لـ DI؛ تختم الساعة validatedAt |
Compliance::run | string $pdfData، CompliancePolicy $policy، array $context = [] | تطبّق سياسة واحدة بالضبط وتقيس المدة بساعة الحائط | ComplianceReport | تُمرّر استثناءات السياسات المخصّصة؛ تجمع السياسات المدمجة النتائج بدلاً من رمي الاستثناءات | طريقة نسخة |
Compliance::assess (ثابتة) | string $pdfData، CompliancePolicy $policy، array $context = [] | يُنشئ نسخة افتراضية ويفوّض إلى run() | ComplianceReport | نفس run() | مسار سريع بلا أي إعداد |
Policies::pdfA4 / ::pdfA4e / ::pdfA4f (ثابتة) | — | سياسة هيكلية لـ PDF/A-4 وفق ISO 19005-4:2020 | CompliancePolicy | — | يسمح e بتعليقات 3D/الوسائط الغنية؛ يضيف f فحوص علاقات الملفات المضمّنة |
Policies::padesBaseline (ثابتة) | — | فحوص هيكلية لـ PAdES B-B | CompliancePolicy | — | البنية فقط؛ دون أي تحقّق تشفيري |
Policies::eidasQualified (ثابتة) | — | فحوص هيكلية لـ PAdES ضمن ملف تعريف موسوم بـ eIDAS | CompliancePolicy | — | يعتمد التأهيل على TSP والشهادة المؤهَّلة |
Policies::ltvHealth (ثابتة) | — | فحص سلامة هيكلي لـ DSS | CompliancePolicy | — | يُحلّ وجود DSS من رسم الكائنات النشط، مع الفشل المغلق |
Policies::zugferd (ثابتة) | string $profile = 'BASIC' | يُوحّد اسم ملف التعريف البديل ويبني مدقّق ZUGFeRD | CompliancePolicy | \ValueError (ملف تعريف غير معروف) | ملفات التعريف: MINIMUM، BASIC، BASIC_WL، EN16931، EXTENDED |
Policies::fdaPart11 (ثابتة) | — | سياسة هيكلية لـ FDA 21 CFR Part 11 | CompliancePolicy | — | سبعة فحوص هيكلية، منها سلامة سلسلة تجزئة سجل التدقيق |
Policies::sec17a4 / ::sec17a4Compatible / ::sec17a4Structural / ::sec17a4PreSign (ثابتة) | — | سياسة SEC 17a-4 WORM بمستوى الصرامة المسمّى | CompliancePolicy | — | يرتبط مستوى الصرامة بـ WormComplianceLevel |
CompliancePolicy (واجهة) | — | عقد استراتيجية لمعيار واحد | — | — | getName()، getIdentifier()، getStandardReference()، validate()؛ قابلة للتنفيذ من قِبل العميل |
ComplianceReport | كائن قيمة للقراءة فقط | تُقسَّم النتائج حسب الخطورة عند الإنشاء | — | — | passes()، fails()، totalFindings()، getDisclaimer()؛ الحقول العامة findings، errors، warnings، infos، policyName، policyId، standard، validatedAt، durationMs |
ComplianceFinding | Severity $severity، string $ruleId، string $message، string $clause = ''، string $suggestion = '' | نتيجة قاعدة واحدة مع مرجع بند وتلميح للمعالجة | — | — | error() / warning() / info() الثابتة؛ isError() |
Severity (تعداد) | 3 حالات مدعومة بسلاسل نصية | Error، Warning، Info | — | — | Error وحده يُفشل التقرير |
WormComplianceLevel (تعداد) | 4 حالات مدعومة بسلاسل نصية | Full، Compatible، Structural، PreSign | — | — | requiresSignature()، requiresDocMdp()، requiresLtv()، maxDocMdpLevel() |
PdfAPolicy، PadesValidator، LtvHealthCheck، ZugferdValidator، Sec17a4WormPolicy، Fda\FdaPart11Policy | مُنشئات لكل صنف | تُنفّذ CompliancePolicy لمعيار واحد لكل منها | list<ComplianceFinding> من validate() | — | تُحصَّل عبر Policies؛ يكشف Sec17a4WormPolicy::getLevel() مستوى الصرامة المُهيّأ |
Fda\FdaSigningIntent (تعداد) | 6 حالات مدعومة بسلاسل نصية | Authoring، Review، Approval، Certification، Verification، Rejection | — | — | يُنتج toPdfReasonString() سلسلة /Reason القياسية |
Fda\FdaAuditEvent::__construct | DateTimeImmutable $timestamp، string $actor، FdaSigningIntent $action، string $documentHash، string $certificateSerial، string $previousEventHash = '' | يحسب تجزئة سلسلة SHA-256 عند الإنشاء | — | InvalidArgumentException (طابع زمني غير UTC) | الحقل العام eventHash؛ يُسلسل toXmpRdf() عنصر قائمة XMP واحدًا |
Fda\FdaAuditTrail::addEvent | FdaAuditEvent $event | يُلحق الحدث عندما تطابق حلقة سلسلته ذيل السجل | self | InvalidArgumentException (سلسلة التجزئة مكسورة) | أيضًا createEvent()، verifyChain()، getLastEventHash()، getEvents()، embedInMetadata() |
Fda\FdaSignatureEnforcer::configureSeedValue | FdaSigningIntent $intent، string $tsaUrl | يبني إعداد قيمة بذرة توقيع مقيّدًا بمتطلّبات FDA | SeedValueConfig | — | يتطلّب مجموعة أسباب FDA وطابعًا زمنيًا وملخّصات SHA-256 أو أقوى |
Fda\FdaSignatureEnforcer::applyTo | SequentialSigner $signer، SigningStrategy $strategy، string $signerName، FdaSigningIntent $intent، string $tsaUrl، string $fieldName = ''، ?string $reason = null | يضيف موقّعًا مقيّدًا بمتطلّبات FDA إلى SequentialSigner من Pro | 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 قابل للحقن) سياسة واحدة بالضبط وتُعيدان ComplianceReport. القواعد القابلة للملاحظة خارجيًا:
- للقراءة فقط بحتة. كل
CompliancePolicy::validate()دالة نقية: بايتات تدخل، ونتائج تخرج. لا تُعدّل أي سياسة بايتات PDF أبدًا. يُبقي هذا الثابت المعماري التحقّق متمايزًا عن الإصلاح التلقائي وعن وحدة Evidence. - بوابة الخطورة. تكون
ComplianceReport::passes()صحيحة فقط عندما تكونerrors === []. لا تُفشل التحذيرات والمعلومات أي تقرير أبدًا. وfails()هي المتمّمة. - إخلاء مسؤولية إلزامي. تُعيد
ComplianceReport::getDisclaimer()نص إخلاء المسؤولية القانوني الثابت. وإظهاره في المخرجات الموجَّهة للمستخدم مطلوب بموجب العقد. - مصدر التقرير. يحمل التقرير اسم السياسة ومُعرِّفها والمرجع المعياري من السياسة، وطابع التحقّق الزمني من الساعة المحقونة أو ساعة النظام، والمدة المقيسة بالميلي ثانية.
- اجمع، ولا تُجهِض. تُشغّل السياسات المدمجة جميع الفحوص المنطبقة وتجمع كل نتيجة بدلاً من التوقّف عند أول خطأ.
- DSS القابل للوصول عبر الفهرس فقط. يُحلّ
LtvHealthCheckوجود DSS من رسم الكائنات النشط: المقطورة النشطة، ثم فهرس/Root، ثم/DSSومفاتيحه الفرعية. لا تُحتسب بايتات العلامات المزروعة في التعليقات أو السلاسل أو الكائنات اليتيمة أو المراجعات المُستبدَلة. تُعامَل المدخلات غير القابلة للتحليل على أنها بلا DSS، فيفشل الفحص مغلقًا. الفحص هيكلي؛ فهو لا يتحقّق تشفيريًا من بيانات OCSP/CRL المضمّنة. - فحوص التوقيع الهيكلية. تتحقّق
Policies::padesBaseline()وPolicies::eidasQualified()من بنية PAdES على مستوى PDF فقط. يعتمد التأهيل بموجب eIDAS على TSP والشهادة المؤهَّلة، وهما خارج هذه الوحدة. - سياسات الصناعات المنظَّمة هيكلية. يفحص
FdaPart11Policyوجود التوقيع، ونيّة/Reason، ووقت التوقيع/M، وهويّة/Name، وغياب JavaScript، ومساحة أسماء سجل تدقيق FDA، وسلامة سلسلة التجزئة. يفحصSec17a4WormPolicyما يصل إلى 13 قاعدة WORM؛ ويختارWormComplianceLevelمستوى الصرامة. يتطلّبFullالمستوى 1 من DocMDP، ويقبلCompatibleالمستوى 2، ويتخطّىStructural/PreSignقواعد التوقيع وDocMDP وDSS. ولا تُثبت أي من السياستين الامتثال القانوني. - سياق ZUGFeRD. تفحص
Policies::zugferd()متطلّبات مستوى PDF دائمًا. وتتحقّق من XML الفاتورة فقط عندما يمرّر المستدعي['xml' => $xmlData]في$context؛ وإلا فإنها تُصدر نتيجة المعلوماتzugferd-xml-skipped. - سجل تدقيق كاشف للعبث.
FdaAuditTrailسلسلة تجزئة SHA-256 للإلحاق فقط. يرفضaddEvent()الحلقة المكسورة، ويُعيدverifyChain()اشتقاق كل تجزئة، ويكتبembedInMetadata()السجل في XMP ضمنhttp://ns.nextpdf.dev/fda/1.0/مع مخطط امتداد PDF/A.
الحالات الحدّية وأنماط الفشل
قسم بعنوان «الحالات الحدّية وأنماط الفشل»- تُنتج المدخلات غير الـ PDF أو الفارغة نتائج خطأ بدلاً من استثناء في السياسات المدمجة. تحقّق دائمًا من
passes()وأظهِر إخلاء المسؤولية. - تُوحّد
Policies::zugferd()أسماء ملفات التعريف البديلة (BASIC_WL،EN16931،EN_16931). ويرفع ملف التعريف غير المعروف\ValueErrorعند وقت المصنع، قبل تشغيل أي تحقّق. - يفي DSS الذي يحوي CRLs دون استجابات OCSP بفحص مواد الإبطال؛ وتشير النتيجة إلى البديل المقبول. وعدم وجود أيٍّ منهما يُعدّ خطأ.
- يُنتج غياب قاموس
/VRIأو مصفوفة/Certsتحذيرات لا أخطاء؛ ويظل بإمكان التقرير النجاح. - يرفض
FdaAuditEventأي طابع زمني غير UTC بـInvalidArgumentExceptionعند الإنشاء. - يُعيد
FdaAuditTrail::verifyChain()القيمة false عند أي حدث مُعبَث به أو مُعاد ترتيبه؛ وهو لا يرمي استثناءً أبدًا. - قد ترمي تطبيقات
CompliancePolicyالمخصّصة منvalidate()؛ ولا يلتقطCompliance::run()الاستثناء، فتنتشر تلك الاستثناءات إلى المستدعي.
سلوك وضع FIPS
قسم بعنوان «سلوك وضع FIPS»لا تُجري هذه الوحدة أي توقيع، ولا تحقّق تشفيري، ولا حفظ مفاتيح. تحكم وحدتا Security وSignature سياسة خوارزميات وضع FIPS. تقيّد قيم بذرة 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 في فهرس المستند | ISO 32000-2:2020 §12.8.4.3 |
| مستويات توقيع PAdES الأساسية | 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 أي شهادة ولا تمنح أي شهادة. هذا المرجع ليس رأيًا قانونيًا؛ استشِر فريق الامتثال لديك بشأن الكفاية القانونية.
ملاحظات التطوير
قسم بعنوان «ملاحظات التطوير»- يعمل Validation داخل العملية ومحليًا دون أي إدخال/إخراج شبكي. ولا يمكن لأي سياسة تغيير المدخلات.
- عامِل بايتات PDF من مصادر غير موثوقة على أنها معادية. السياسات المدمجة كليّة على البايتات العشوائية وتفشل مغلقةً حيث يتعذّر تحليل البنية.
- أظهِر
ComplianceReport::getDisclaimer()في كل عرض للتقرير موجَّه للمستخدم. - قد تحمل التقارير والنتائج بيانات شخصية من المستندات الموقَّعة وبيانات سجل التدقيق الوصفية (أسماء الموقّعين، الأرقام التسلسلية للشهادات). ويملك المشغّل ضوابط الاحتفاظ والتقليل.
- تُنفّذ السياسات المخصّصة
CompliancePolicy؛ حافظ على تفرّدgetIdentifier()عبر جميع السياسات لأغراض التسلسل والتخزين المؤقت. - تتعلّق هذه الوحدة بوظائف تشفيرية؛ عامِلها على أنها حسّاسة أمنيًا في مراجعتك الخاصة.
- تبقى تفاصيل الآلية الداخلية في التوثيق الداخلي لمستودع المصدر وهي خارج نطاق هذا الدليل.
حدود النشر
قسم بعنوان «حدود النشر»توثّق هذه الصفحة السلوك القابل للملاحظة خارجيًا وواجهة برمجة التطبيقات العامة المدعومة فقط. مسارات مساحات الأسماء الداخلية، والأصناف المساعدة، وجداول الآليات، وأسماء ملفات كتيّب التشغيل، وبادئات التذاكر خارج النطاق.