Pro الإصدار
الامتثال — مرجع متعمّق
نظرة عامة
قسم بعنوان «نظرة عامة»تجمع وحدة الامتثال ثلاثة أسطح مستقلة ضمن NextPDF\Pro\Compliance:
- الإبلاغ عن وسوم اللغة — واجهة سياسة صارمة لـ PDF/UA-2 حول
/Langإضافةً إلى مُبلِّغ أحداث امتثال مُهيكَل على هيئة PSR-3. - معالجة الفواتير الإلكترونية — التحقق من Factur-X 1.08 / ZUGFeRD 2.4 مقابل النموذج الدلالي EN 16931، وإصدار PDF/A-3 الهجين.
- المصدرية — تضمين واستخراج مخازن بيانات C2PA المُقدَّمة من المُستدعي عبر مُحلِّل JUMBF مُقوّى ضد الهجمات؛ ويبقى تركيب الادعاءات محصوراً في وضع المعاينة.
تُبلّغ الوحدة عمّا تفحصه. وهي لا تعتمد المستندات ولا تُجري توقيعاً تشفيرياً.
التوفّر والترخيص
قسم بعنوان «التوفّر والترخيص»تُشحن هذه الإمكانية ضمن NextPDF Pro (nextpdf/pro) وتُفعَّل بمظروف ترخيص من فئة Pro. ولا يُحمِّل أي نشر يفتقر إلى ذلك الاستحقاق فئاتِ هذه الإمكانية. قارن الإصدارات واحصل على ترخيص.
لا يوجد أي علم ترخيص لكل ميزة على حدة. فهذه إمكانية من إصدار Pro. ويتطلب باني ادعاءات C2PA التجريبي إضافةً إلى ذلك اشتراكاً صريحاً عبر البيئة (انظر الحالات الحدّية وأوضاع الإخفاق).
سطح واجهة برمجة التطبيقات العامة
قسم بعنوان «سطح واجهة برمجة التطبيقات العامة»composer require nextpdf/pro:^3| الرمز | المعامِلات | السلوك الافتراضي | القيمة المُعادة | يرمي أو يُخفق بـ | ملاحظات |
|---|---|---|---|---|---|
LangComplianceReporter::warn() / ::error() | string $tag, string $reason, ?string $clauseReference = null | يُصدر سجل JSON مُهيكَل واحد لكل حدث وسم لغة عبر مُسجِّل PSR-3 | void | JsonException إذا أخفق ترميز السجل بصيغة JSON | warn = رفض في الوضع المتساهل؛ error = رفض في الوضع الصارم |
LangComplianceReporter::reportException() | InvalidBcp47TagException $exception, string $severity = 'error' | يستخرج الوسم والسبب من الاستثناء؛ ويُفوِّض إلى warn() أو error() | void | كما سبق | مسار مُيسِّر |
LangComplianceReporter::buildRecord() | string $severity, string $tag, string $reason, ?string $clauseReference = null | يبني مصفوفة السجل دون تسجيل | array | لا يرمي | للمصارف المخصّصة مثل ملخّصات JSON لكل ملف |
ConformancePolicy::default() | ?LoggerInterface $logger = null | سياسة UA-2 صارمة: تُرفض وسوم /Lang المُشوَّهة أو غير المُسجَّلة | self | لا يرمي | الافتراضي في v5.0 صارم |
ConformancePolicy::fromCore() | CoreConformancePolicy $core, ?LoggerInterface $logger = null | يلفّ سياسة Core قائمة كما هي؛ دون قلب أي محور | self | لا يرمي | فضّل default() للوضع الصارم |
ConformancePolicy::withStrictUa2() | bool $enabled | يُعيد نسخة مع ضبط المحور الصارم؛ ويُصدر تعطيلُه إشعار PSR-3 من نوع notice | self | لا يرمي | اشتراك خروج مهجور؛ هدف الإزالة 6.0.0 |
ConformancePolicy::isStrictUa2() / ::mode() | — | يقرأ سياسة Core الأساسية | bool / ConformanceMode | لا يرمي | — |
EInvoiceValidator::validate() | string $pdfPath | خط معالجة كامل: فحص غلاف PDF/A-3، واستخراج المرفق، وكشف النمط، وقواعد EN 16931، وSchematron | EInvoiceValidationResult | فئة فرعية من EInvoiceException عند إخفاق الإدخال/الإخراج، أو بنية PDF مُشوَّهة، أو انهيار الأدوات | واجهة SPI مُجمَّدة؛ يُعيد ملف PDF سليم البنية وليس فاتورة إلكترونية نتيجةً، ولا يرمي أبداً |
EInvoiceXmlValidator::validate() | string $xmlPayload, ValidatorContext $context | فحص بنيوي تمهيدي إضافةً إلى مجموعة قواعد EN 16931 الدلالية العميقة على حمولة CII | ValidationResult التعاقدي | لا يرمي عند الإدخال غير الصالح؛ يظهر الرفض كنتيجة مُخفِقة مع النتائج | مُتحقِّق ملموس عابر للفئات؛ يُبوَّب الإدخال عبر XmlGuard |
EInvoiceValidationResult::isValid() | — | صحيح فقط عندما يصمد الغلاف ومواصفة المرفق والنمط والتركيب ولا يوجد أي انتهاك من نوع FATAL | bool | لا يرمي | قائمة انتهاكات فارغة وحدها لا تعني الصلاحية |
EInvoiceValidationResult::notAnEInvoice() | — | نتيجة حتمية: كلها null وكلها false | self | لا يرمي | مصنع لحالة «ليست فاتورة هجينة» |
EInvoiceProfile | تعداد مدعوم بنص | الحالات MINIMUM، BASIC_WL، BASIC، EN16931، EXTENDED، مدعومة بمُعرِّفات URN من BT-24 | — | — | isEn16931Conformant() تساوي false للحالتين MINIMUM وBASIC_WL |
EInvoiceSyntax | تعداد مدعوم بنص | الحالات UN_CEFACT_CII، UBL_INVOICE، UBL_CREDIT_NOTE | — | — | الوحيد المؤهَّل عبر isFacturXEligible() هو CII؛ أما UBL فللتحقق فقط |
BusinessRuleViolation | string $ruleId, BusinessRuleSeverity $severity, string $message, ?string $xpath = null, ?string $ramPath = null | كائن نقل بيانات DTO لانتهاك غير قابل للتغيير | — | — | عائلات مُعرِّفات القواعد BR-، BR-CO-، BR-CL-، BR-DEC-، BR-FXEXT- |
BusinessRuleSeverity | تعداد مدعوم بنص | FATAL يُبطل الفاتورة؛ WARNING يُنبّه إلى مسألة جودة | — | — | يعكس مستويات Schematron في EN 16931 |
FacturXEmbedder::embed() | انظر سياج التوقيع | يُلحِق تدفق ملف مُضمَّن ومواصفة ملف وXMP بمصدر PDF/A؛ ويُعيد كتابة xref | void | EInvoiceException عند XML مُشوَّه، أو مصدر غير قابل للقراءة، أو فهرس (catalog) مفقود، أو مصدر بتدفق كائنات أو تدفق xref، أو إخفاق كتابة المُخرَج | يُترك الملف المصدر سليماً |
FacturXEmbedderOptions::default() | — | /AFRelationship /Alternative، اسم الملف factur-x.xml، النوع INVOICE، الإصدار 1.0 | self | لا يرمي | تفي الافتراضات بالإلزام الألماني وتبقى مقبولة في فرنسا |
FacturXEmbedderOptions::withRelationship() / ::withFilename() | string | يُعيد نسخة مع تطبيق التجاوز | self | InvalidArgumentException خارج مجموعات القبول | العلاقات: Source، Data، Alternative؛ وتشمل أسماء الملفات zugferd-invoice.xml وxrechnung.xml |
FacturXEmbedderOptions::withDocumentType() | string $documentType | يُعيد نسخة مع تجاوز نوع مستند XMP | self | لا يرمي | القيم ليست معدودة دفاعياً |
FacturXContractEmbedder::embed() | string $pdfBytes, string $xmlPayload, EmbedderOptions $options | مُحوِّل من بايتات إلى بايتات فوق FacturXEmbedder عبر ملفات مؤقتة قصيرة العمر | string | EInvoiceException؛ ويُرفض نمط XRECHNUNG لأنه حصري لـ Enterprise | تنفيذ EmbedderInterface عابر للفئات |
C2paManifestEmbedder::embed() | string $pdfBytes, ManifestStore $store | يُضمِّن الترميز البايتي للمخزن في موضع النمط | string | C2paException عند أي إخفاق تضمين | واجهة SPI مُجمَّدة؛ بايتات فقط، دون إدخال/إخراج |
C2paManifestEmbedder::extract() | string $pdfBytes | يُحلِّل مخزناً مُضمَّناً عبر مُحلِّل JUMBF المُقوّى | ManifestStore|null | فئة فرعية من C2paException عندما يوجد مخزن لكنه يخرق سقف تقوية | تشير null إلى الغياب؛ والغياب لا يرمي أبداً |
ManifestStore::fromBoxes() / ::empty() | list<JumbfBox> / — | يبني كائن قيمة المخزن غير القابل للتغيير | self | لا يرمي | ترتيب الصناديق حامل للمعنى في تكافؤ الرحلة الكاملة |
ManifestStore::toBytes() / ::isEmpty() / ::size() | — | يُرمِّز الصناديق الجذرية؛ ويُرمَّز المخزن الفارغ إلى سلسلة فارغة | string / bool / int | لا يرمي | — |
JumbfBoxParser::parse() | string $bytes | يُحلِّل صناديق JUMBF على المستوى الجذري ضمن سقوف صارمة | list<JumbfBox> | MalformedJumbfException، JumbfBombException، JumbfCycleDetectedException، JumbfDepthExceededException | السقوف: عمق 8، و64 MiB لكل صندوق، و128 MiB إجمالاً، وMAX_CHILDREN_PER_SUPERBOX يساوي 4096 |
JumbfBox::superbox() / ::leaf() | string $tbox, … | يبني صندوقاً مُتحقَّقاً منه؛ وtoBytes() يقوم برحلة كاملة عبر المُحلِّل | self | MalformedJumbfException عندما لا يكون TBox بطول 4 بايت بالضبط | — |
C2paCapabilityStatus::current() / ::summary() | — | يُبلّغ عن نضج إمكانية C2PA، وهو حالياً preview-draft | self / string | لا يرمي | علامة معاينة قابلة للفحص آلياً |
Feature::PREVIEW_C2PA_DRAFT->isEnabled() | — | يقرأ بيئة العملية في كل استدعاء؛ ولا يُفعِّل إلا القيمة الحرفية '1' | bool | لا يرمي | متغير البيئة NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT |
ExperimentalC2paEmbedder::buildManifestStore() | string $sourceBytes, string $producer | يبني مخزن بيانات مُثبَّتاً على مسودة مع تأكيد ادعاء واحد لربط تجزئة SHA-256 | ManifestStore | يرمي الباني LogicException عندما يكون علم المعاينة مُطفأً | معاينة؛ صيغة النقل مُثبَّتة على لقطة مسودة؛ لا يُصدَر أي توقيع ادعاء |
توقيعات نقاط الدخول، حرفياً:
public static function default(?LoggerInterface $logger = null): selfpublic function withStrictUa2(bool $enabled): selfpublic function isStrictUa2(): boolpublic function validate(string $pdfPath): EInvoiceValidationResultpublic function embed( string $sourcePdfPath, string $xml, EInvoiceProfile $profile, string $outputPdfPath, ?FacturXEmbedderOptions $options = null,): voidpublic function embed(string $pdfBytes, ManifestStore $store): stringpublic function extract(string $pdfBytes): ?ManifestStoreعقد السلوك
قسم بعنوان «عقد السلوك»الإبلاغ عن وسوم اللغة. يُصدر LangComplianceReporter سجل JSON مُهيكَل واحد لكل حدث وسم لغة في PDF/UA-2. ويحمل كل سجل مُميِّز الحدث الثابت، ودرجة خطورة (warn للرفض في الوضع المتساهل، وerror للرفض في الوضع الصارم)، والوسم المُخالف حرفياً، وسبباً قابلاً للقراءة آلياً، ومكوّنات الوسم المُحلَّلة (أو null عندما يُخفق الوسم في قواعد الشكل RFC 5646)، ومرجع بند ISO 14289-2 §8.4.4، وطابعاً زمنياً UTC بدقة الميكروثانية. وتنتقل JSON بوصفها متن رسالة PSR-3؛ وتُحلِّل المصارف اللاحقة حقل الرسالة مباشرةً. وConformancePolicy هي واجهة Premium فوق سياسة الامتثال في Core. ويُطبّق افتراضُها معالجة لغة UA-2 صارمة ويرفض أي وسم مُشوَّه أو غير مُسجَّل يصل إلى /Lang. ويُعيد مُساعد الخروج withStrictUa2(false) السلوكَ المتساهل القديم ويُسجِّل إشعار PSR-3 عندما تتغير القيمة الفعلية بالفعل. وتضع NextPDF ذلك المُساعد في خانة المهجور منذ v5.0 مع هدف إزالة 6.0.0. وللترحيل: دقِّق المجموعة بحثاً عن قيم /Lang المُشوَّهة باستخدام composer pdfua2:audit-lang-tags <pdf-or-dir>، وصحِّحها، ثم أسقِط استدعاء الخروج.
معالجة الفواتير الإلكترونية. EInvoiceValidator هو عقد SPI المُجمَّد للتحقق من PDF الهجين: فحص غلاف PDF/A-3، واستخراج مرفق /AF، وكشف النمط من مُعرِّف المواصفة BT-24، ومحرك قواعد العمل EN 16931، وتمريرة Schematron. ويُعيد ملف PDF سليم البنية وليس Factur-X القيمةَ EInvoiceValidationResult::notAnEInvoice() بدلاً من الرمي؛ ولا تُثير فئةً فرعية من EInvoiceException إلا إخفاقات الإدخال/الإخراج، أو بنية PDF المُشوَّهة، أو انهيارات الأدوات. وEInvoiceXmlValidator هو مُتحقِّق XML الملموس العابر للفئات: يُبوِّب الإدخال عبر XmlGuard من Core، ويُجري فحصاً بنيوياً تمهيدياً ومجموعةَ قواعد EN 16931 الدلالية العميقة، ويُخفق مُغلَقاً — إذ تظهر أخطاء المحرك كنتائج خطأ، لا كتمريرات صامتة أبداً. وFacturXEmbedder يُعدِّل مصدر PDF/A إلى PDF/A-3 هجين: يُلحِق تدفق ملف مُضمَّن، ومواصفة ملف بـ /AFRelationship قابل للضبط، وحزمة امتداد XMP لـ Factur-X، ثم يُعيد كتابة جدول الإحالات المرجعية الكلاسيكي. وتُشير كلٌّ من مصفوفة /AF في الفهرس وشجرة الأسماء /Names /EmbeddedFiles إلى المرفق، فتستطيع قارئات ZUGFeRD القديمة تحليله.
المصدرية. يُضمِّن C2paManifestEmbedder مخزنَ بيانات C2PA مُقدَّماً من المُستدعي داخل سلسلة بايتات PDF، أو يستخرج واحداً. وManifestStore هو كائن القيمة غير القابل للتغيير الذي يعبر الحدّ. والوصلة بايتات فقط ومحايدة للمورِّد: فهي لا تُركِّب ادعاءات، ولا تستوعب إحالات URI، ولا تحلّ روابط التجزئة، ولا تُجري أي إدخال/إخراج شبكي أو على نظام الملفات. ويُعيد extract() القيمة null عند عدم الوجود، وهو زهيد التكلفة على ملفات PDF الخالية من مخزن. وقد اجتاز كل استخراج غير فارغ سقوفَ التقوية في JumbfBoxParser سلفاً.
تُبلّغ هذه الوحدة عمّا تفحصه. وهي لا تعتمد أي مستند، ولا تجعله مُلزِماً قانونياً، ولا تضمن أن أي مُخرَج يفي بلائحة تنظيمية. ومُتحقِّق الفواتير الإلكترونية ليس مُتحقِّق سلطة ضريبية، وهو يستثني الامتدادات الوطنية (على سبيل المثال SDI الإيطالي، وChorus Pro الفرنسي، وXRechnung الألماني). وكما ينص EN 16931-1، يظل مُصدِر الفاتورة مسؤولاً عن استيفاء قواعد التشريع ذي الصلة. ودعم معيار ما ليس امتثالاً له. راجِع فريق الامتثال لديك بشأن الكفاية التنظيمية.
الحالات الحدّية وأوضاع الإخفاق
قسم بعنوان «الحالات الحدّية وأوضاع الإخفاق»- يُعيد ملف PDF سليم البنية وليس Factur-X نتيجة «ليست فاتورة إلكترونية»؛ وهو لا يرمي.
- قائمة انتهاكات قواعد العمل الفارغة لا تعني بذاتها أن المستند صالح؛ فتنطبق أيضاً فحوص الغلاف والمرفق.
- يُخفق
FacturXEmbedderمُغلَقاً على المصادر التي تستخدم تدفقات كائنات مضغوطة (/Type /ObjStm) أو تدفقات إحالات مرجعية (/Type /XRef، والهجين/XRefStm). أعِد حفظ هذه المصادر بجدول إحالات مرجعية كلاسيكي أولاً. - تُبوَّب حمولات XML عبر
XmlGuardمن Core: فتُرفض تصريحات DOCTYPE أو الكيانات، والإدخال المفرط الحجم، وUTF-8 غير الصالح، بـEInvoiceExceptionعلى مسار التضمين، أو بنتيجة مُخفِقة على مسار التحقق. - يرفض
FacturXContractEmbedderنمطXRECHNUNGصراحةً بدلاً من تخفيضه صامتاً؛ فإصدار XRechnung إمكانية من Enterprise. - يُميّز
C2paManifestEmbedder::extract()بين الغياب (null) والتشوّه (فئة فرعية منC2paExceptionتُسمّي الثابت المخروق: بنية مُشوَّهة، أو قنبلة حجم أو عدد، أو دورة إزاحة، أو عمق تداخل). - يرمي إنشاء
ExperimentalC2paEmbedderاستثناءLogicExceptionما لم يساوِ علم بيئة المعاينة'1'. وصيغة نقله مُثبَّتة على لقطة مسودة C2PA وقد تتغير دون إشعار؛ وهو لا يُصدر أي توقيع ادعاء. وتبقى هذه الإمكانية في وضع المعاينة حتى يتجمّد نمط C2PA الخاص بـ PDF. - اشتراك الخروج المتساهل من UA-2 الصارم مهجور؛ رحِّل إلى الافتراضي الصارم (انظر عقد السلوك).
- لا تُجري هذه الوحدة توقيعاً تشفيرياً. وتوقيع ادعاءات C2PA وحفظ المفاتيح خارج النطاق؛ انظر وحدة Security لسلوك التوقيع في وضع FIPS.
المطابقة
قسم بعنوان «المطابقة»| السلوك | المرجع | الحالة |
|---|---|---|
تصريح اللغة الطبيعية (/Lang) | ISO 14289-2:2024 §8.4.4 | مفحوص / مُبلَّغ عنه |
| النموذج الدلالي الأساسي للفاتورة | EN 16931-1:2026 | مفحوص (تظل المسؤولية على المُصدِر) |
| الملفات المرتبطة / تدفقات الملفات المُضمَّنة | ISO 32000-2:2020 §14.13.2 | مُصدَر (/AF، /EF، /Params) |
| علاقة المرفق وقواعد الحاوية | Factur-X 1.08 §3.1, §6.2 | مُصدَر / مفحوص (الافتراضي /AFRelationship /Alternative) |
| مخزن بيان C2PA / JUMBF | C2PA 2.1 §11.1 | التضمين / الاستخراج مدعومان؛ تركيب الادعاءات في وضع المعاينة |
يُسجِّل هذا المواصفاتِ التي بُنيت الوحدة عليها وما تفحصه أو تُصدره. وليس بياناً باعتماد أو كفاية تنظيمية. ولا تملك NextPDF أي اعتماد لهذه المعايير.
ملاحظات التطوير
قسم بعنوان «ملاحظات التطوير»- شكل سجل المُبلِّغ عقد مستقر؛ فقد تُثبِّت قواعد التنبيه اللاحقة نفسها على مُميِّز الحدث الثابت.
- يُصدر تعطيل UA-2 الصارم إشعار هجر مرئياً في القياس عن بُعد فقط عندما تتغير القيمة الفعلية؛ أما إعادة تأكيد القيمة الحالية فصامتة.
- يحفظ مُضمِّن Factur-X بايتات المصدر حرفياً ويُلحِق كائنات جديدة؛ ويهدف إلى الحفاظ على مطابقة PDF/A-3 لكنه لا يُعيد التحقق. مرِّر المُخرَج عبر مُتحقِّق PDF/A خارجي للحصول على إثبات قاطع.
- تُجمِّد وصلة C2PA خمسة ثوابت: لا استيرادات من أطراف ثالثة، وعقد بايتات فقط، ولا إدخال/إخراج، واستخراج يُعيد null عند عدم الوجود، ولا تركيب ادعاءات في الطبقة المستقرة.
- سقوف
JumbfBoxParserثوابت عامة؛ فقِس المدخلات التي تقبلها مقابلها بدلاً من إعادة اشتقاق الحدود.
حدّ النشر
قسم بعنوان «حدّ النشر»توثّق هذه الصفحة السلوك القابل للملاحظة خارجياً وسطح واجهة برمجة التطبيقات العامة المدعوم فقط. أما مسارات فضاءات الأسماء الداخلية، وفئات المساعدة، وجداول الآليات، وأسماء ملفات كتيّبات التشغيل، وبادئات التذاكر فخارج النطاق.