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

Enterprise الإصدار

الفاتورة — مرجع متعمّق

تتضمّن وحدة الفاتورة ثلاثة أسطح مستقلّة: التضمين، والتحقّق، وتنفيذ قواعد ⁨Schematron⁩. يُرفق كلٌّ من ZugferdEmbedder وPeppolEmbedder ملف ⁨XML⁩ للفاتورة المُقدَّم من المُستدعي إلى حامل ⁨PDF/A-4f⁩ أو ⁨PDF/A-3b⁩ ويُعيد نتيجة مُهيكَلة. يُجري InvoiceXmlValidator فحصاً بنيوياً مسبقاً وفق ⁨EN 16931⁩ بخطورة قابلة للاختيار ⁨COMPAT⁩ أو ⁨STRICT⁩. يُنفّذ SchematronValidator حِزم قواعد ⁨Schematron⁩ المُترجَمة مسبقاً داخل العملية ويُحلّل نتائج ⁨SVRL⁩. لا يُنشئ ⁨NextPDF⁩ ملف ⁨XML⁩ للفاتورة؛ فالمُستدعي هو من يُقدّم الحمولة ويملكها.

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

تفصيل بحسب الفئة: كشف الفاتورة الإلكترونية والتحقّق منها هو سطح فئة ⁨Pro⁩ (وحدة ⁨Pro Compliance⁩). أمّا تضمين الفاتورة الهجينة، وملف ⁨XRechnung CIUS⁩، ومحرّك ⁨Schematron⁩ داخل العملية فهي حصرية لفئة ⁨Enterprise⁩. لا يوجد رمز قدرة منفصل لكل ميزة يتجاوز حدود حزمة nextpdf/enterprise.

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

قسم بعنوان «سطح واجهة برمجة التطبيقات العامة»
Terminal window
composer require nextpdf/enterprise:^3
الرمزالمُعامِلاتالسلوك الافتراضييُعيديرمي أو يفشل بـملاحظات
ZugferdEmbedder::basic()PdfAManager, FileAttachment, string $xmlDataيُضمّن ⁨CII XML⁩ من ملف ⁨BASIC⁩: مرور ⁨XmlGuard⁩، وتحقّق بنيوي، وحقن مخطط ⁨XMP⁩، وإرفاقZugferdEmbedResultInvalidArgumentException, ZugferdEmbeddingExceptionمسار سريع؛ نقطة بداية موصى بها
ZugferdEmbedder::minimum()PdfAManager, FileAttachment, string $xmlDataالمسار نفسه بملف ⁨MINIMUM⁩ZugferdEmbedResultInvalidArgumentException, ZugferdEmbeddingExceptionمسار سريع
ZugferdEmbedder::create()ZugferdProfile, string $xmlDataمدخل الباني؛ يرفض ⁨XML⁩ الفارغselfInvalidArgumentExceptionاضبط عبر withoutValidation() وwithDescription()
ZugferdEmbedder::withAfRelationship() / PeppolEmbedder::withAfRelationship()AFRelationship|stringيتجاوز علاقة /Alternative الافتراضية؛ محكوم بكتاب قواعد الملف المرتبطselfInvalidArgumentExceptionSchema وEncryptedPayload وFormData مرفوضة للفواتير
ZugferdEmbedder::embed()PdfAManager, FileAttachmentاستدعاء الباني الطرفي: ⁨XmlGuard⁩، وتحقّق اختياري، وفحص الحامل، و⁨XMP⁩، والإرفاقZugferdEmbedResultInvalidArgumentException, ZugferdEmbeddingExceptionإخفاق التحقّق يُسمّي أوّل خطأ
ZugferdProfile (enum)الحالات MINIMUM, BASIC_WL, BASIC, EN16931, EXTENDED, XRECHNUNGيُرفق ⁨XRECHNUNG⁩ الملف xrechnung.xml؛ وملفات ⁨CII⁩ تُرفق factur-x.xml
ZugferdXmpSchema::apply()XmpMetadata, ZugferdProfileيُسجّل وصف ⁨Factur-X RDF⁩ ومدخل مخطط امتداد ⁨PDF/A⁩XmpMetadataلا شيءيُستدعى من embed()؛ ويمكن استخدامه مباشرةً أيضاً
PeppolEmbedder::invoice() / ::creditNote()PdfAManager, FileAttachment, string $ublXmlيُضمّن ⁨XML⁩ فاتورة أو إشعار دائن بصيغة ⁨Peppol BIS 3.0 UBL⁩PeppolEmbedResultInvalidArgumentException, PeppolEmbeddingExceptionأسماء الملفات الافتراضية invoice.xml / creditnote.xml
PeppolEmbedder::create()string $ublXml, string $filename = 'invoice.xml'مدخل الباني؛ يرفض ⁨XML⁩ أو اسم ملف فارغاًselfInvalidArgumentExceptionاضبط عبر withFilename() وwithDescription() وwithoutSanitization()
PeppolEmbedder::embed()PdfAManager, FileAttachmentمرور ⁨XmlGuard⁩، وفحص الحامل، وبوابة كتاب القواعد، والإرفاقPeppolEmbedResultInvalidArgumentException, PeppolEmbeddingExceptionإعادة فحص كتاب القواعد بمراعاة الحامل وقت التضمين
InvoiceXmlValidator::validate()string $xmlData, ZugferdProfile, ?InvoiceValidatorModeفحص بنيوي مسبق وفق ⁨EN 16931⁩؛ خطورة ⁨COMPAT⁩ افتراضياًInvoiceValidationResultلا يرمي؛ تظهر الإخفاقات كنتائج خطأيُحلّ الوضع من الوسيط، ثمّ البيئة، ثمّ ⁨COMPAT⁩
InvoiceXmlValidator::isCrossIndustryInvoice()string $xmlDataفحص العنصر الجذر ومساحة الاسم لحمولات ⁨CII⁩boolلا يرمي؛ يُعيد falseمِسبار كشف منخفض الكلفة
InvoiceValidatorMode (enum)COMPAT (افتراضي) يُبقي نتائج ⁨BT-24⁩ عند مستوى تحذير؛ وSTRICT يرفعها إلى خطأfromEnvironment() يعود إلى ⁨COMPAT⁩ عند القيم غير المضبوطة أو غير المعروفة
InvoiceValidationResult / InvoiceValidationFindingتجميعات غير قابلة للتغيير: isValid وgetErrors() وgetWarnings()؛ مستوى ورمز ورسالة لكل نتيجةInvoiceValidationResult::fail() يُغلّف خطأً واحداً
SchematronValidator::validate()string $xsltPath, string $xmlDataيُنفّذ ⁨XSLT⁩ ⁨Schematron⁩ مُترجَماً مسبقاً؛ ويُحلّل ⁨SVRL⁩ إلى نتائجSchematronResultInvalidArgumentException عند مسار ⁨XSLT⁩ مفقود أو غير قابل للقراءة؛ وإخفاقات المحرّك تُعيد نتيجة خطأيُلتقط التوقيت في durationMs
SchematronValidator::runRules()string $xslPath, string $xmlPayloadمُحوّل عبر الفئات؛ يُطابق نتائج الخطأ إلى كائنات العقد RuleViolationlist<RuleViolation>مثل validate()تُتجاوز نتائج المستوى المعلوماتي
SchematronResult / SchematronFindingالحُكم، والنتائج، والمدة؛ getFailedAssertions() وgetSuccessfulReports()SchematronResult::error() يُعلّم إخفاقات المحرّك بأنها غير صالحة
SchematronCacheInterfaceعقد ذاكرة تخزين مؤقت يكشف العبث: getVerified() وset() وcomputeKey()يفشل بأمان عند عدم تطابق البصمة
AtomicRenameSchematronCachestring $cacheDir, bool $atomicRename = true, LoggerInterfaceذاكرة ملفات مؤقتة مُتحقَّق منها بـ ⁨SHA-256⁩ مع كتابات إعادة تسمية ذرّيةInvalidArgumentException, SchematronCacheExceptionيجب أن يكون الدليل موجوداً أو قابلاً للإنشاء، وقابلاً للكتابة
VersionPinRegistryarray $pins, ?string $sourcePathتثبيتات حِزم قواعد مقفلة بـ ⁨SHA-256⁩: loadFromLockFile() وget() وverifyArtefact() وregenerateLockFile()VersionPinException, InvalidArgumentException, JsonException عند ملف قفل ⁨JSON⁩ مُشوَّهالبصمات الفارغة أو المُشوَّهة تفشل بأمان
InvoiceContractValidator?SemanticValidatorمُحوّل ValidatorInterface عبر الفئات؛ فحص بنيوي مسبق إضافةً إلى قواعد ⁨EN 16931⁩ الدلالية العميقةContractResultيفشل بأمان؛ تظهر أخطاء المحرّك كنتائج خطأمربوط على مسارات إطار العمل عند تثبيت nextpdf/premium
ZugferdContractEmbedderFacturXContractEmbedderمُحوّل EmbedderInterface عبر الفئات؛ تضمين بايت-داخل / بايت-خارجstring (بايتات ⁨PDF⁩)يُمرّر إخفاقات المفوَّضيُفوّض إلى محرّك إعادة كتابة البايتات في فئة ⁨Pro⁩
ZugferdEmbeddingException, PeppolEmbeddingException, SchematronCacheException, VersionPinExceptionتصنيف إخفاقات الوحدةجميعها تُوسّع RuntimeException
public static function basic(
PdfAManager $pdfAManager,
FileAttachment $fileAttachment,
string $xmlData,
): ZugferdEmbedResult
public function embed(
PdfAManager $pdfAManager,
FileAttachment $fileAttachment,
): ZugferdEmbedResult
public static function invoice(
PdfAManager $pdfAManager,
FileAttachment $fileAttachment,
string $ublXml,
): PeppolEmbedResult
public static function validate(
string $xmlData,
ZugferdProfile $profile,
?InvoiceValidatorMode $mode = null,
): InvoiceValidationResult
public function validate(string $xsltPath, string $xmlData): SchematronResult

التضمين. يُرفق ZugferdEmbedder حمولة ⁨XML⁩ من نوع ⁨ZUGFeRD 2.4⁩ / ⁨Factur-X 1.08⁩ ⁨UN/CEFACT CII⁩ مُقدَّمة من المُستدعي إلى حامل ⁨PDF/A⁩. وهو يدعم حاملَين: ⁨PDF/A-4f⁩ (⁨ISO 19005-4:2020⁩)، الحامل الحديث المُفضّل، و⁨PDF/A-3b⁩ (⁨ISO 19005-3:2012⁩) للتوافق مع الإصدارات السابقة. يُشغّل embed() دائماً مرور أمان ⁨XmlGuard⁩ أوّلاً، ثمّ التحقّق البنيوي ما لم يُضبَط withoutValidation()، ثمّ يتحقّق من أن الحامل يدعم الملفات المضمّنة، ويحقن إعلان مخطط امتداد ⁨XMP⁩ عبر ZugferdXmpSchema، ويُرفق ⁨XML⁩ كملف مرتبط. تكون علاقة الإرفاق افتراضياً وفق توصية كتاب القواعد /Alternative؛ وتمرّ التجاوزات عبر كتاب القواعد نفسه الذي يفرض مجموعة العلاقات في ⁨ISO 32000-2:2020⁩ §⁨14.13⁩ ومجموعة الفاتورة الفرعية في ⁨EN 16931⁩. يؤدّي PeppolEmbedder المكافئ لملف ⁨XML⁩ فاتورة أو إشعار دائن بصيغة ⁨Peppol BIS Billing 3.0 UBL 2.1⁩ مُقدَّم من المُستدعي. لا يُنشئ أيٌّ من المُضمِّنَين ملف ⁨XML⁩ للفاتورة.

التحقّق. يفحص InvoiceXmlValidator ملف ⁨CII XML⁩ مقابل التوقّعات البنيوية لـ ⁨EN 16931⁩: العنصر الجذر، والأقسام المطلوبة، وعدديّة الترويسة، وبنود السطور حيث يتطلّبها الملف، ومُعرِّف المواصفة ⁨BT-24⁩ الذي تُلزِم به قاعدة العمل ⁨BR-1⁩. يختار InvoiceValidatorMode الخطورة. يُبلّغ COMPAT (الافتراضي) عن ⁨BT-24⁩ مفقود أو غير مطابق بوصفه تحذيراً كي لا تتراجع بوابة الصلاحية المنطقية. يجعل STRICT كليهما خطأً صارماً ويؤكّد أيضاً اتساق الملف مقابل ZugferdProfile المُعلَن، محاكياً دلالات مُحقِّقَي ⁨KoSIT⁩ / ⁨Mustang⁩ الخارجيَّين. يُحلّ الوضع بالترتيب: الوسيط الصريح، ثمّ تجاوز البيئة INVOICE_VALIDATOR_MODE، ثمّ ⁨COMPAT⁩. النتائج كائنات مُهيكَلة InvoiceValidationResult / InvoiceValidationFinding؛ ويُعيد المُحقِّق النتائج بدلاً من الرمي.

Schematron. يُنفّذ SchematronValidator مجموعات قواعد ⁨Schematron⁩ المُترجَمة مسبقاً — قواعد ⁨CEN EN 16931⁩ بصيغة .sch المُترجَمة إلى ⁨XSLT⁩ وقت البناء — باستخدام معالج ⁨XSLT⁩ الخاص بـ ⁨PHP⁩ داخل العملية. يُحلّل تقرير ⁨SVRL⁩ إلى كائنات SchematronFinding / SchematronResult: تُصبح التوكيدات الفاشلة نتائج خطأ، وتُصبح التقارير الناجحة نتائج معلوماتية. تُقدّم ذاكرة تخزين مؤقت اختيارية (SchematronCacheInterface، مع تنفيذ ملف إعادة التسمية الذرّية) بايتات أوراق الأنماط المُتحقَّق منها مُفهرَسةً ببصمة المحتوى إضافةً إلى إصدار المُترجِم. يُثبّت VersionPinRegistry كل حزمة قواعد خارجية إلى إصدار مقفل بـ ⁨SHA-256⁩ ويفشل بأمان عند الانحراف أو البصمات المُشوَّهة.

تُنتج هذه الوحدة بيانات فاتورة مُهيكَلة وتفحصها. وهي لا تؤكّد أن أيّ مستند فاتورة متوافقة قانونياً، ولا أنه مُعتمَد من سلطة ضريبية، ولا أنه مضمون القبول لدى أيّ سلطة. يفحص المُحقِّق النموذج الدلالي لـ ⁨EN 16931⁩ وحاوية ⁨ZUGFeRD⁩ / ⁨Factur-X⁩ / ⁨UBL⁩ فقط؛ ويستثني الامتدادات الوطنية (مثل ⁨SDI⁩ الإيطالي، و⁨Chorus Pro⁩ الفرنسي، ونقل ⁨XRechnung⁩ الألماني). وكما تنصّ ⁨EN 16931-1⁩، يتحمّل مُصدِر الفاتورة مسؤولية استيفاء قواعد التشريعات ذات الصلة؛ وهذا ليس مُحقِّق سلطة ضريبية. دعم معيار ما ليس مطابقةً له.

الحالات الحدّية وأنماط الإخفاق

قسم بعنوان «الحالات الحدّية وأنماط الإخفاق»
  • يفشل ⁨XML⁩ الفارغ بسرعة: يرمي البانون InvalidArgumentException؛ ويُعيد InvoiceXmlValidator::validate() نتيجة فاشلة.
  • يرفض ⁨XmlGuard⁩ إعلانات DOCTYPE، وتوسيع الكيانات، والحمولات المُفرطة الحجم، ومحارف التحكّم. ويُظهر المُضمِّنون ذلك بوصفه ZugferdEmbeddingException أو PeppolEmbeddingException مع الحفاظ على السبب.
  • لا يتجاوز withoutValidation() وwithoutSanitization() مطلقاً مرور أمان ⁨XmlGuard⁩. فقط فحوص مصطلحات العمل البنيوية قابلة للتخطّي.
  • أيّ حامل لا يدعم الملفات المضمّنة (أيّ شيء غير ⁨PDF/A-4f⁩ أو ⁨PDF/A-3b⁩) يرفع InvalidArgumentException مُسمّياً الإصدارات المقبولة.
  • تُرفض قيمة AFRelationship غير المسموح بها عند حدود الباني؛ وتُشغَّل إعادة فحص كتاب القواعد بمراعاة الحامل مرّةً أخرى داخل embed().
  • يُبقي COMPAT قيمة ⁨BT-24⁩ المفقودة عند خطورة التحذير؛ ويجعل STRICT قيم ⁨BT-24⁩ المفقودة وغير المطابقة للملف أخطاءً صارمة.
  • لا يرمي SchematronValidator إلا عند مسار ⁨XSLT⁩ مفقود أو غير قابل للقراءة. وتُعيد إخفاقات التحويل أو تحليل ⁨SVRL⁩ القيمة SchematronResult::error() مع isValid بقيمة false.
  • أيّ مدخل ذاكرة تخزين مؤقت تفشل بايتاته المخزّنة في التحقّق من البصمة يُطرَد، وتُعاد قراءة ورقة الأنماط من القرص؛ ولا تُعاد البايتات المسمومة مطلقاً.
  • يعمل معالج ⁨XSLT⁩ مع حظر تحميل موارد الملفات والشبكة ولا يُسجّل دوال ⁨PHP⁩ مطلقاً؛ فلا يمكن لـ document() وxsl:include وxsl:import وresult-document تحميل الموارد.
  • يرفض VersionPinRegistry بصمات ⁨SHA-256⁩ الفارغة أو المُشوَّهة عند الاستيعاب وعند إعادة التوليد؛ ويُعيد verifyArtefact() القيمة false بدلاً من تمرير تثبيت غير قابل للتحقّق.
  • لا تُجري هذه الوحدة أيّ توقيع تعمية؛ وسلوك وضع ⁨FIPS⁩ خارج النطاق هنا (اطّلع على وحدة التوقيع).
السلوكالمرجعالحالة
النموذج الدلالي الأساسي للفاتورة⁨EN 16931-1:2026 §4⁩مبنيّ عليه؛ يبقى المُصدِر مسؤولاً
مُعرِّف المواصفة (⁨BT-24⁩)⁨EN 16931-1:2026 BR-1⁩تحذير في ⁨COMPAT⁩، وخطأ في ⁨STRICT⁩
ربط بناء الجملة ⁨UN/CEFACT CII⁩⁨CEN/TS 16931-3-3:2020⁩التضمين مدعوم
ربط بناء الجملة ⁨UBL 2.1⁩⁨CEN/TS 16931-3-2:2020⁩التضمين مدعوم
الملف المرتبط ⁨PDF/A-3⁩⁨ISO 19005-3:2012 §6.7.8⁩الحامل مدعوم
الملف المضمّن ⁨PDF/A-4f⁩⁨ISO 19005-4:2020 Annex A⁩الحامل مدعوم
قيم علاقة الملف المرتبط⁨ISO 32000-2:2020 §14.13⁩محكوم بكتاب القواعد
تحليل تقرير ⁨Schematron⁩ / ⁨SVRL⁩⁨ISO/IEC 19757-3⁩مبنيّ عليه (مستند إلى المنتج؛ المعيار غير موجود في مجموعة الاستشهادات)

مبنيّ عليه، وليس شهادةً ولا اعتماداً من سلطة ضريبية. لا يملك ⁨NextPDF⁩ أيّ شهادة لأيٍّ من هذه المعايير. يُنتج ⁨NextPDF⁩ فواتير مُهيكَلة متوافقة مع نموذج بيانات ⁨EN 16931⁩ ويُبلّغ عن نتائج القواعد؛ وهو لا يُنتج فواتير متوافقة قانونياً، ولا يُوفّر مخرجات مُعتمَدة من سلطة ضريبية، ولا يضمن القبول. استشر مستشاريك الضريبيين والقانونيين.

  • يتطلّب محرّك ⁨Schematron⁩ امتداد ⁨PHP⁩ المسمّى ext-xsl؛ وتوفيره وتفعيله مسؤولية المُشغّل.
  • المعالجة داخل العملية ومحلية. لا تقع أيّ استدعاءات شبكة صادرة أثناء التضمين أو التحقّق. ونقل الفوترة الإلكترونية الوطني، ومنصّات المقاصّة، وأنظمة الأرشفة خارجة عن هذه الوحدة.
  • تُترجَم حِزم القواعد من .sch إلى ⁨XSLT⁩ وقت البناء؛ ولا يُنفّذ زمن التشغيل إلا أوراق الأنماط المُترجَمة مسبقاً.
  • تُدمج مفاتيح الذاكرة المؤقتة مِلح إصدار المُترجِم (حالياً nextpdf-schxslt-1.0)؛ ورفعه يُبطل الذواكر المؤقتة المنشورة دون خطوة تطهير.
  • تُوجد تثبيتات حِزم القواعد في ملف القفل عند enterprise/config/invoice-versions.lock (VersionPinRegistry::DEFAULT_LOCK_PATH)؛ ويتحقّق ⁨CI⁩ من المُنتجات المنشورة مقابل البصمات المُثبَّتة.
  • يستخدم المُستدعون عبر الفئات InvoiceContractValidator وZugferdContractEmbedder؛ ويستخدم مُستدعو ⁨Enterprise⁩ الأصليون لهذه الفئة ZugferdEmbedder وInvoiceXmlValidator مباشرةً.

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