تخطَّ إلى المحتوى
getnextpdf.com

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⁩ وحدة منفصلة ومستقلّة.

واجهة برمجة التطبيقات العامة

قسم بعنوان «واجهة برمجة التطبيقات العامة»
Terminal window
composer require nextpdf/enterprise:^3
الرمزالمُعامِلاتالسلوك الافتراضيالقيمة المُعادةيرمي أو يفشل بـملاحظات
Compliance::__construct?ClockInterface $clock = nullساعة النظام عند عدم حقن أي ساعةشكل نسخة ملائم لـ ⁨DI⁩؛ تختم الساعة validatedAt
Compliance::runstring $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:2020CompliancePolicyيسمح 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
ComplianceFindingSeverity $severity، string $ruleId، string $message، string $clause = ''، string $suggestion = ''نتيجة قاعدة واحدة مع مرجع بند وتلميح للمعالجةerror() / warning() / info() الثابتة؛ isError()
Severity (تعداد)3 حالات مدعومة بسلاسل نصيةError، Warning، InfoError وحده يُفشل التقرير
WormComplianceLevel (تعداد)4 حالات مدعومة بسلاسل نصيةFull، Compatible، Structural، PreSignrequiresSignature()، 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::__constructDateTimeImmutable $timestamp، string $actor، FdaSigningIntent $action، string $documentHash، string $certificateSerial، string $previousEventHash = ''يحسب تجزئة سلسلة ⁨SHA-256⁩ عند الإنشاءInvalidArgumentException (طابع زمني غير ⁨UTC⁩)الحقل العام eventHash؛ يُسلسل toXmpRdf() عنصر قائمة ⁨XMP⁩ واحدًا
Fda\FdaAuditTrail::addEventFdaAuditEvent $eventيُلحق الحدث عندما تطابق حلقة سلسلته ذيل السجلselfInvalidArgumentException (سلسلة التجزئة مكسورة)أيضًا createEvent()، verifyChain()، getLastEventHash()، getEvents()، embedInMetadata()
Fda\FdaSignatureEnforcer::configureSeedValueFdaSigningIntent $intent، string $tsaUrlيبني إعداد قيمة بذرة توقيع مقيّدًا بمتطلّبات ⁨FDA⁩SeedValueConfigيتطلّب مجموعة أسباب ⁨FDA⁩ وطابعًا زمنيًا وملخّصات ⁨SHA-256⁩ أو أقوى
Fda\FdaSignatureEnforcer::applyToSequentialSigner $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() الاستثناء، فتنتشر تلك الاستثناءات إلى المستدعي.

لا تُجري هذه الوحدة أي توقيع، ولا تحقّق تشفيري، ولا حفظ مفاتيح. تحكم وحدتا ⁨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() عبر جميع السياسات لأغراض التسلسل والتخزين المؤقت.
  • تتعلّق هذه الوحدة بوظائف تشفيرية؛ عامِلها على أنها حسّاسة أمنيًا في مراجعتك الخاصة.
  • تبقى تفاصيل الآلية الداخلية في التوثيق الداخلي لمستودع المصدر وهي خارج نطاق هذا الدليل.

توثّق هذه الصفحة السلوك القابل للملاحظة خارجيًا وواجهة برمجة التطبيقات العامة المدعومة فقط. مسارات مساحات الأسماء الداخلية، والأصناف المساعدة، وجداول الآليات، وأسماء ملفات كتيّب التشغيل، وبادئات التذاكر خارج النطاق.