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

Enterprise الإصدار

الامتثال — مرجع متعمّق

توجّه وحدة الامتثال ملف ⁨PDF⁩ المكتمل إلى ⁨sidecar⁩ تدقيق خارجي وتُعيد نتيجة واحدة موحّدة. يحلّ ⁨ComplianceGateway⁩ ⁨sidecar⁩ المسؤول انطلاقًا من ⁨ComplianceProfile⁩، ويفرض سياسة توفّر تُغلق عند الفشل، ويغلّف كل حُكم أداة في ⁨ExternalValidationResult⁩. تُشحن جسور لأجل vera⁨PDF⁩ (⁨PDF⁩/A و⁨PDF⁩/UA و⁨PDF 2.0⁩ Arlington)، وEU DSS (مستويات ⁨PAdES⁩)، و⁨sidecar⁩ المدمج Mustang/KoSIT (⁨ZUGFeRD⁩ و⁨Factur-X⁩ وEN 16931)، وخفيّ KoSIT مستقل. توفّر الوحدة كذلك ختم الجاهزية عبر ⁨AiReadyCertifier⁩ ومُشغِّلًا لمجموعة اختبارات KoSIT XRechnung الرسمية.

تُشحن هذه القدرة في ⁨NextPDF⁩ Enterprise (⁨nextpdf/enterprise⁩) وتُفعَّل بمظروف ترخيص من فئة Enterprise. لا يُحمّل أي نشر بلا هذا الاستحقاق أصنافَ القدرة. قارِن الإصدارات واحصل على ترخيص.

يُرخَّص سطح الامتثال/الأدلة عبر قدرة ⁨enterprise.compliance.evidence⁩. يمنع الاستحقاقُ المفقود أو المنتهي الميزةَ؛ ولا يخفّض السلوك بصمت.

الفئةسطح الامتثال
Coreفحوص داخل العملية على تدفّق البايتات والقواعد النحوية؛ بلا تفويض إلى ⁨sidecar⁩ خارجي.
Proتدقيق داخل العملية لـ EN 16931 / Factur-X / ZUGFeRD؛ بلا ⁨sidecar⁩ خارجي.
Enterpriseبوّابة مُدقِّق خارجي (هذه الوحدة) بنتيجة موحّدة وسياسة إغلاق عند الفشل.

مُدقِّق الفواتير الإلكترونية داخل العملية في Pro و⁨sidecar⁩ ⁨ZUGFeRD⁩ الخارجي في Enterprise سطحان متمايزان. تُشحن بوّابة المُدقِّق الخارجي في حزمة ⁨nextpdf/enterprise⁩ وحدها.

Terminal window
composer require nextpdf/enterprise:^3
الرمزالمعامِلاتالسلوك الافتراضيالقيمة المُعادةيرمي أو يفشل بـملاحظات
ComplianceGateway::__constructlist<ExternalValidator> $validators، LoggerInterface $logger، bool $optional = falseيفهرس المُدقِّقات باسم الأداةالوضع الاختياري يخفّض فحص التوفّر إلى تحذير فقط
ComplianceGateway::validatestring $pdfContent، ComplianceProfile $profile، array $options = []يحلّ المُدقِّق عبر ComplianceProfile::toolName()، ويفحص التوفّر، ويفوّض?ExternalValidationResultComplianceSidecarUnavailableException؛ InvalidArgumentException (لا مُدقِّق مُسجَّل للأداة)يُعيد null في الوضع الاختياري فقط مع تعطّل الـ ⁨sidecar⁩
ComplianceGateway::validateAllProfilesstring $pdfContent، string $toolNameيدقّق كل ملف تعريف مربوط بالأداةlist<ExternalValidationResult>كما في validate()يتخطّى نتائج null (الوضع الاختياري)
ComplianceGateway::healthCheckيسبر كل نقطة نهاية صحّة لـ ⁨sidecar⁩ مُسجَّلarray<string, bool>يُبلّغ عن قابلية الوصول؛ لا يدقّق أي مستند
ComplianceGateway::buildComplianceMatrix (ساكن)list<ExternalValidationResult> $results، string $commitShaيختزل النتائج إلى مصفوفة ذات إصدار مخطّطarray<string, mixed>إصدار المخطّط 1.0؛ يسجّل خرج الأداة ولا يؤكّد شيئًا
ComplianceProfile (enum)15 حالة مدعومة بسلسلة نصّيةيربط كل ملف تعريف بلافتة معيار وأداةstandardReference(): string، toolName(): string
ExternalValidator (interface)عقد جسر ⁨sidecar⁩ فوق PSR-18validate() يرمي ComplianceSidecarUnavailableException عند فشل النقلgetToolName()، isAvailable()، validate()
VeraPdfValidator::validateتوقيع الواجهةPOST متعدد الأجزاء إلى ⁨sidecar⁩ veraPDF REST؛ تحليل تقرير JSONExternalValidationResultComplianceSidecarUnavailableException؛ InvalidArgumentException (ملف تعريف غير مدعوم)PDF/A وPDF/UA وArlington؛ يحلّل JSON فقط، لا XML أبدًا
DssValidator::validateتوقيع الواجهةPOST بصيغة Base64 JSON إلى ⁨sidecar⁩ EU DSS RESTExternalValidationResultComplianceSidecarUnavailableException؛ InvalidArgumentException (ملف تعريف غير مدعوم)PAdES من B-B حتى B-LTA؛ يرفض الباني المُهَل دون ثانية واحدة
ZugferdExternalValidator::validateتوقيع الواجهةPOST متعدد الأجزاء إلى ⁨sidecar⁩ المدمج Mustang/KoSITExternalValidationResultComplianceSidecarUnavailableException (وكذلك عند قاطع دائرة مفتوح)؛ InvalidArgumentException (ملف تعريف غير مدعوم)ZUGFeRD 2.4 وFactur-X 1.08 وEN 16931؛ قاطع دائرة اختياري مُحقَن
KoSitValidator::validateتوقيع الواجهةPOST بـ XML خام إلى خفيّ KoSIT مستقلExternalValidationResultComplianceSidecarUnavailableException؛ InvalidArgumentException (ملف تعريف غير مدعوم)EN 16931 فقط؛ يحلّل تقرير Schematron SVRL بإغلاق عند الفشل
ExternalValidationResultكائن قيمة للقراءة فقطحُكم أداة موحّدpasses()، fails()، nonConformanceCount()، toComplianceMatrix()
NonConformanceكائن قيمة للقراءة فقطنتيجة مفردة بمعرّف قاعدة وبند وشدّة وموضعtoArray()
ComplianceSidecarUnavailableExceptionstring $toolName، string $endpoint، int $code = 0، ?Throwable $previous = nullإشارة عدم توفّر ⁨sidecar⁩ بإغلاق عند الفشلtoolName وendpoint عامّان للقراءة فقط
AiReadyCertifier::certifystring $pdfBytesيقيّم ثلاثة معايير جاهزية؛ يختم أصلية XMParray{0: AiReadyCertification, 1: string}InvalidArgumentException (الختم يتطلّب جدول مراجع تقاطعية كلاسيكيًّا)العنصر الثاني يساوي المُدخَل حين يكون المستوى not_certified
AiReadyCertificationكائن قيمة للقراءة فقطتقييم جاهزية بمستوى وعدد معايير ومشكلات وتجزئة مصدرلافتة جاهزية داخلية، وليست شهادة معايير
XRechnungTestSuiteRunner::__constructstring $suitePath، ExternalValidator $validator، bool $useCuratedNegativeFallback = trueيحلّ دليل المجموعة المستخرَجةInvalidArgumentException (الدليل غير موجود)يستهدف مجموعة اختبارات KoSIT XRechnung الرسمية
XRechnungTestSuiteRunner::runbool $stopOnFirstFailure = falseيدقّق كل نموذج مجموعة عبر الجسرXRechnungTestSuiteResultXRechnungTestSuiteException (المُدقِّق غير متوفّر؛ لا ملفات XML)كذلك isAvailable()، getSuitePath()، discoverTestFiles()
XRechnungTestSuiteResultكائن قيمة للقراءة فقطناتج مجموعة مجمّعallPassed()، totalCount()، getFailures()، getErrors()، toSummary()
XRechnungTestCaseResultكائن قيمة للقراءة فقطناتج لكل حالةpassed()، hasError()، getFilename()
XRechnungTestSuiteExceptionبواني ساكنةإشارة فشل تشغيل المجموعةselfvalidatorUnavailable()، noTestFilesFound(string $suitePath)
namespace NextPDF\Enterprise\Compliance;
final class ComplianceGateway
{
/** @param list<ExternalValidator> $validators */
public function __construct(
array $validators,
private readonly LoggerInterface $logger,
private readonly bool $optional = false,
);
/** @param array<string, mixed> $options */
public function validate(
string $pdfContent,
ComplianceProfile $profile,
array $options = [],
): ?ExternalValidationResult;
/** @return list<ExternalValidationResult> */
public function validateAllProfiles(string $pdfContent, string $toolName): array;
/** @return array<string, bool> */
public function healthCheck(): array;
/**
* @param list<ExternalValidationResult> $results
* @return array<string, mixed>
*/
public static function buildComplianceMatrix(array $results, string $commitSha): array;
}
interface ExternalValidator
{
public function getToolName(): string;
public function isAvailable(): bool;
/** @param array<string, mixed> $options */
public function validate(
string $pdfContent,
ComplianceProfile $profile,
array $options = [],
): ExternalValidationResult;
}
enum ComplianceProfile: string
{
case PdfA1b = 'pdfa-1b';
// PdfA2b, PdfA3b, PdfA4, PdfA4f, PdfUa1, PdfUa2, Pdf20Arlington,
// PadesBasic, PadesTimestamp, PadesLongTerm, PadesArchive,
// Zugferd24, FacturX108, En16931
public function standardReference(): string;
public function toolName(): string;
}
final class AiReadyCertifier
{
/** @return array{0: AiReadyCertification, 1: string} Tuple of [certification, stamped PDF bytes] */
public function certify(string $pdfBytes): array;
}

يحلّ ⁨ComplianceGateway::validate()⁩ الـ ⁨ExternalValidator⁩ المُسجَّل الذي يطابق ⁨getToolName()⁩ فيه ⁨ComplianceProfile::toolName()⁩، ويفحص ⁨isAvailable()⁩، ويفوّض، ويُعيد ⁨ExternalValidationResult⁩ موحّدة. القواعد المرصودة خارجيًّا:

  • الافتراض: الإغلاق عند الفشل. حين يكون الـ ⁨sidecar⁩ المُحلَّل غير متوفّر والوضع الاختياري مُطفأ، يرفع الاستدعاء ⁨ComplianceSidecarUnavailableException⁩. المستند لا يُفحص؛ ولا يُعامَل قطّ على أنه ناجح.
  • الوضع الاختياري. بناء البوّابة بـ ⁨optional: true⁩ (يربطه المشغّلون من متغيّر البيئة ⁨NEXTPDF_COMPLIANCE_OPTIONAL⁩) يخفّض الـ ⁨sidecar⁩ غير المتوفّر إلى تحذير مُسجَّل وقيمة ⁨null⁩ مُعادة. على المستدعين معاملة ⁨null⁩ على أنها “لم يُفحص”. يغطّي الوضع الاختياري سبر التوفّر التمهيدي فقط؛ أما فشل النقل أثناء استدعاء التدقيق نفسه فيرفع ⁨ComplianceSidecarUnavailableException⁩ في الوضعين كليهما.
  • ملف تعريف مجهول. ملف تعريف بلا مُدقِّق مُسجَّل يرفع ⁨InvalidArgumentException⁩؛ ولا ينجح بصمت أبدًا.
  • دلالات النجاح. يتطلّب ⁨ExternalValidationResult::passes()⁩ أن يكون ⁨conformant⁩ صحيحًا و صفرًا من حالات عدم المطابقة. تحمل كل نتيجة ملف التعريف واسم الأداة وإصدارها وعدد التأكيدات والنتائج وSHA-256 للبايتات المُدقَّقة وطابعًا زمنيًّا بتوقيت UTC ومدّة الاستدعاء.
  • المصفوفة سجلّ، لا تأكيد.buildComplianceMatrix()⁩ مُختزِل ساكن يُنتج بنية ذات إصدار مخطّط بإصدارات الأدوات وSHA لالتزام لأجل التتبّع. يسجّل خرج الأداة؛ ولا يؤكّد شيئًا.
  • تدفّق البيانات. يُرسَل تدفّق بايتات ⁨PDF⁩ الكامل إلى الـ ⁨sidecar⁩ المُهيّأ عبر عميل ⁨PSR-18⁩. يُسجَّل كل تدقيق عبر ⁨PSR-3⁩ بملف التعريف والأداة والنجاح/الفشل وعدد التأكيدات والمدّة.

توجيه ملف التعريف إلى الأداة، كما يُعيده ⁨ComplianceProfile::standardReference()⁩ و⁨::toolName()⁩:

حالات ملف التعريفمرجع المعيارالأداة
pdfa-1b، pdfa-2b، pdfa-3b، pdfa-4، pdfa-4fISO 19005-1/-2/-3/-4 (المستوى B؛ المستوى F لـ 4f)veraPDF
pdfua-1، pdfua-2ISO 14289-1:2014، ISO 14289-2:2024veraPDF
pdf20-arlingtonISO 32000-2:2020 (نموذج Arlington)veraPDF
pades-b-b، pades-b-t، pades-b-lt، pades-b-ltaETSI EN 319 142-1 من B-B حتى B-LTAEU DSS
zugferd-2.4، factur-x-1.08، en-16931ZUGFeRD 2.4 / Factur-X 1.08 / EN 16931-1:2017Mustang/KoSIT

يقيّم ⁨AiReadyCertifier::certify()⁩ ثلاثة معايير: وجود توقيع بنيوي، وصحّة LTV، وغياب التشفير. المعايير الثلاثة الناجحة تُنتج المستوى ⁨certified⁩؛ واحد أو اثنان يُنتجان ⁨partial⁩؛ والصفر يُنتج ⁨not_certified⁩. عند ⁨certified⁩ أو ⁨partial⁩، يُلحِق تحديثًا تراكميًّا يحمل تدفّق أصلية XMP وتجاوزًا لـ Catalog؛ ولا تُعدَّل البايتات الأصلية أبدًا. المستوى “certified” لافتة جاهزية داخلية في ⁨NextPDF⁩، وليس شهادة معايير.

يحلّ ⁨VeraPdfValidator⁩ ردود ⁨sidecar⁩ من نوع ⁨JSON⁩ فقط (لا ⁨XML⁩؛ نظيف من XXE بحكم البناء). يحلّ ⁨KoSitValidator⁩ تقرير ⁨XML⁩ SVRL من الخفيّ مع رفض إعلانات DOCTYPE وتعطيل الوصول للشبكة، ويعامل تقريرًا غير قابل للتحليل على أنه فشل للاستدعاء.

الحالات الحدّية وأنماط الفشل

قسم بعنوان «الحالات الحدّية وأنماط الفشل»
  • تظهر مهلة الـ ⁨sidecar⁩ أو خطأ النقل بوصفها ⁨ComplianceSidecarUnavailableException⁩ من الجسر؛ وينطبق افتراض الإغلاق عند الفشل.
  • يُنتج ردّ ⁨sidecar⁩ غير 200 نتيجةً فاشلة بنتيجة خاصّة بالأداة (مثل ⁨VERAPDF-HTTP-ERROR⁩)؛ ولا يكون قطّ نجاح مطابقة.
  • جسم ⁨JSON⁩ أو ⁨XML⁩ مُشوّه من الـ ⁨sidecar⁩ هو فشل تدقيق للاستدعاء، لا نجاح مطابقة.
  • نتائج EU DSS بلا توقيعات تفشل بـ ⁨DSS-NO-SIGNATURES⁩. أي إشارة غير ⁨TOTAL_PASSED⁩ تفشل بـ ⁨DSS-SIG-INVALID⁩. مستوى توقيع دون الخطّ الأساس المتوقَّع يفشل بـ ⁨DSS-LEVEL-MISMATCH⁩.
  • ينشر ⁨DssValidator⁩ ميزانية مهلته لكل طلب في كل طلب عبر ترويسة ⁨X-NextPDF-Timeout-Seconds⁩؛ وعلى عميل ⁨PSR-18⁩ لدى المُكامِل احترامها كي لا يستطيع ⁨sidecar⁩ متعثّر حجب الخيط المستدعي بلا حدّ.
  • يوجّه ⁨ZugferdExternalValidator⁩ اختياريًّا استدعاءات الـ ⁨sidecar⁩ عبر قاطع دائرة مُحقَن؛ ويُخطَّط قاطع مفتوح إلى ⁨ComplianceSidecarUnavailableException⁩ (فشل سريع، ومع ذلك إغلاق عند الفشل). الافتراضي قاطع بلا أثر.
  • يقبل ⁨KoSitValidator::isAvailable()⁩ الرمزين ⁨HTTP⁩ 200 و405 من سبر صحّة الخفيّ؛ يردّ الخفيّ على GET بـ 405 وهو سليم.
  • يفشل ختم ⁨AiReadyCertifier⁩ بإغلاق عبر ⁨InvalidArgumentException⁩ حين يفتقر المستند الأصلي إلى جدول مراجع تقاطعية كلاسيكي (مثل تدفّقات المراجع التقاطعية).
  • يرفض ⁨XRechnungTestSuiteRunner::run()⁩ التشغيل حين يكون المُدقِّق غير متوفّر أو تخلو المجموعة من ملفات ⁨XML⁩؛ ومع تفعيل ⁨useCuratedNegativeFallback⁩ يستبدل مجموعة سلبية منسّقة حين لا تشحن المجموعة نماذج غير صالحة.

لا تؤدّي هذه الوحدة أي توقيع ولا حراسة مفاتيح. تحكم سياسةَ خوارزميات وضع FIPS وحدتا الأمان والتوقيع. يُفوَّض تطابق التوقيع إلى EU DSS الذي يتّخذ تحديده الخاص.

تفوّض البوّابة حُكم المطابقة إلى أداة خارجية؛ ويعكس التصميم حدَّ المعايير نفسها بأن المطابقة تُحدَّد إزاء المتطلّبات، لا يؤكّدها مُنتِج.

السلوكالمرجع
التزام المعالج المطابِق؛ تحديد المطابقة إزاء المعيارISO 19005-4:2020 §5.2
متطلّبات ملف PDF/A-4 مقابل التأكيد الذاتي من المُنتِجISO 19005-4:2020 §6.6.4
تطابق PDF/UA-2 خاصّية للملفISO 14289-2:2024 §6
مستويات توقيع PAdES الأساسيةETSI EN 319 142-1 §5.4.3

تُنتج الأداة الخارجية الحُكم. لا تملك ⁨NextPDF⁩ أي شهادة ولا تمنح أيًّا؛ ودعم ملف تعريف ليس مطابقةً له. نتائج التدقيق سجلّات فحص بنيوي تقني للاسترشاد، لا مشورة قانونية؛ استشِر فريق الامتثال لديك للحكم في الكفاية التنظيمية.

  • يستضيف المشغّل الـ ⁨sidecars⁩ ويشغّلها، ويثبّت إصداراتها، ويقيّد وصولها الشبكي، ويتحقّق من TLS لديها، ويتحكّم في البيئة التي تُفعّل الوضع الاختياري. نقاط نهاية الـ ⁨sidecar⁩ حدُّ ثقة؛ وضوابط الإقامة والاحتفاظ للمستندات والنتائج والسجلّات مسؤولية المشغّل.
  • خرج ⁨buildComplianceMatrix()⁩ مصمَّم لتتبّع CI: ثبّت SHA لالتزام وأرشِف المصفوفة إلى جانب مُخرجات البناء.
  • يتوقّع مُشغِّل XRechnung مجموعة الاختبارات الرسمية مستخرَجة إلى دليل محلّي؛ وتُسمّي رسالة بانيه مصدرَ التنزيل العام.
  • تفاصيل الآلية الداخلية تبقى في التوثيق الداخلي لمستودع المصدر وهي خارج نطاق هذا الدليل.

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