التحقق من قواعد الأعمال للفواتير الإلكترونية

تجمع HPDFEInvoiceValidator بين التحقق من حاوية Factur-X أو ZUGFeRD ومجموعات قواعد الأعمال وقواعد الدولة المختارة صراحةً ذات الإصدارات

تنفيذ كامل للقواعد المراجَعة

توفّر المكتبة موارد `.sch` و`_codedb.xml` مطابقة للملفات الشخصية MINIMUM وBASIC WL وBASIC وEN 16931 وEXTENDED

ينفّذ محرّك XE2 وما بعده سطح XPath 2 الكامل المُراجَع عبر تحليل MSXML آمن، ومكافئات XPath 1 حتمية، وتقييم مباشر للمُحدِّدات الكمّية (quantifiers) ومجاميع FLWOR والتحويلات (casts) ومقارنات التسلسل وقوائم الرموز الخارجية وأنماط التاريخ وقيم المؤشرات المنطقية (boolean)

يحتوي ملف EN 16931 التعريفي على 618 فحصًا، وتُعالج كل الفحوصات في كل تشغيلة تحقق

تحقّق مُجمَّع

var
  Report: THPDFEInvoiceValidationReport;
begin
  if not HPDFValidateEInvoice(PDF,
    'Lib\resources\Schematron', Report) then
    LogValidationFailure(Report);
end;

تستدعي HPDFValidateEInvoice أولًا THotPDF.ValidateFacturXInvoice، وتستخرج XML الفاتورة وتحدّده، وتحمّل موارد Schematron الخاصة بملف التعريف، وتنفّذ قواعد الأعمال

تفشل الفاتورة الهجينة المكتشَفة فشلًا آمنًا عندما يتعذر إتمام استخراج XML أو كشف ملف التعريف أو تحميل القواعد أو تحميل قاعدة بيانات الرموز أو تقييم التعبيرات

تعيد الدالة true فقط عندما تكون الحاوية صالحة، وقد نُفِّذت قواعد الأعمال، ولم يتبقَّ أي نتيجة من نوع خطأ أو تحذير

سجل ملفات التعريف ونطاق التحقق

يسجّل THPDFEInvoiceRuleRegistry طبقة قواعد أعمال واحدة، وعند الاقتضاء طبقة قواعد دولة واحدة، لكل ملف تعريف، باسم مورد صريح وإصدار قواعد وتنفيذ اختياري لـ IHPDFESchematronEngine

يحتوي السجل الافتراضي على ملفات Factur-X التعريفية الخمسة المرفقة وقواعد EXTENDED الأساسية للملفين الفرنسيين EXTENDED-CTC-FR وEXTENDED-B2B-FR

يشترط الملفان الفرنسيان تسجيلًا إضافيًا لقواعد الدولة قبل أن تصبح ValidationComplete بقيمة true، ويشترط XRECHNUNG قواعد EN 16931 CII وقواعد الدولة الألمانية معًا

لا تملك ملفات التعريف المجهولة قواعد افتراضية ولا تتراجع أبدًا إلى EXTENDED، ويعيد HPDFSchematronFileForProfile سلسلة فارغة لملفات التعريف المجهولة أو الخاصة بالدول

تستخدم HPDFValidateEInvoiceWithRegistry سجلّ المستدعي مع فحص حاوية PDF، بينما تتحقق HPDFValidateEInvoiceXML من بايتات XML صريحة وملف تعريف دون تقييم حاوية PDF

يكشف التقرير ProfileSupported وCountryRulesRequired وCountryRulesEvaluated وValidationComplete وValidationNote، وتسجّل مصفوفة RuleSets فيه كل مورد مختار وإصداره ونطاقه وملخصه وحالة اكتماله

قد يتضمن تقييم القواعد المكتمل مخالفات لقواعد الأعمال، فافحص النتيجة المنطقية أو BusinessRuleViolations إضافة إلى ValidationComplete

تبلغ هذه الواجهات عن تغطية قواعد الأعمال والدولة، بينما يبقى التحقق من XML Schema وسياسات النقل وقرارات القبول القانونية خارج هذا النطاق

قواعد XRechnung CII الرسمية

يوفر HPDFEInvoiceSaxon جسرًا اختياريًا لـ Saxon HE ينفّذ أوراق أنماط Schematron 2.6.0 المصرَّفة دون تعديل لإصداري EN 16931 CII 1.3.16 وXRechnung 3.0.2 المرفقين في Lib/resources/Schematron/XRechnung

تأتي الموارد من إعدادات مدقق KoSIT الرسمية المؤرخة في 31 أغسطس 2026، ويسجّل README الموارد مصدرها وتراخيصها وبصماتها

يوفّر المضيف ملف Java التنفيذي ومسار أصناف Saxon صراحةً، وتشغّل المكتبة التحويل دون صدفة أو نافذة طرفية مرئية، وتفرض مهلة، وتحلّل نتائج SVRL، وتزيل ملفاتها المؤقتة

تختبر المهلة الصفرية 60 ثانية، وتُرفض القيم فوق 3,600,000 ميلي ثانية، ويُسقَّف خرج التشخيص عند 8 ميبيبايت، وتُسقَّف أوراق الأنماط المصرَّفة وتقارير SVRL عند 64 ميبيبايت قبل التحليل أو التحميل

uses HPDFEInvoiceValidator, HPDFEInvoiceSaxon;

Registry := THPDFEInvoiceRuleRegistry.Create;
try
  Engine := HPDFCreateSaxonSchematronEngine(
    JavaExecutable, SaxonClassPath, 60000);
  HPDFRegisterXRechnungRules(Registry, Engine);
  Valid := HPDFValidateEInvoiceWithRegistry(PDF,
    'Lib\resources\Schematron', Registry, Report);
finally
  Registry.Free;
end;

هيّئ مسار أصناف Saxon بـ Saxon HE وتبعياته الضرورية، واستخدم سجلًا ونسخة محرك منفصلتين لكل خيط تحقق

يتطلب الجسر الاختياري Delphi XE2 أو أحدث على Windows وبيئة تشغيل Java/Saxon يوفرها المضيف، ولا تنزّل المكتبة أيًّا منهما ولا تثبّته

تنتج بيئات التشغيل المفقودة وبنية الفاتورة الخاطئة وDTDs المحظورة وانتهاء المهلة والتحويل الفاشل وخرج SVRL المشوّه تشخيصاتِ عدم اكتمال تحققٍ صريحة

قواعد الفواتير الفرنسية CTC الرسمية

تختار HPDFRegisterFrenchCTCRules طبقة ملف التعريف الرسمية وطبقة الدولة الصارمة BR-FR-Flux2 من إصدار FNFE-MPE رقم 1.4.0.04، المنشور في 4 سبتمبر 2026 لـ AFNOR XP Z12-012 إصدار 1.4

نُشر إصدار FNFE-MPE الرسمي برخصة Apache 2.0 ويرتبط به صفحة موارد FNFE-MPE، بينما تحتفظ ورقة أنماط EN 16931 CII المرفقة بترخيص EUPL 1.2، وتُحفَظ أوراق الأنماط المصرَّفة الأصلية ومصادر Schematron وقواعد بيانات الرموز والتراخيص ومسارات المصادر والبصمات كما هي تحت Lib/resources/Schematron/France

بالنسبة إلى fisFacturX، يدعم المساعد BASIC WL وEN 16931 وEXTENDED باستخدام طبقات قواعد Factur-X 1.09.2 المنشورة، ويستخدم تعيين حاوية EXTENDED-CTC-FR طبقة Factur-X EXTENDED نفسها مع فحوص الدولة الفرنسية

بالنسبة إلى fisCII المستقل، يدعم EN 16931 وطبقة EXTENDED-CTC-FR CII المخصصة، التي تختلف قيودها ومعرّف إرشاداتها عن طبقة Factur-X EXTENDED الهجينة

Engine := HPDFCreateSaxonSchematronEngine(
  JavaExecutable, SaxonClassPath, 60000);

HPDFRegisterFrenchCTCRules(Registry, 'EN 16931',
  Engine, fisFacturX);
Valid := HPDFValidateEInvoiceWithRegistry(PDF,
  'Lib\resources\Schematron', Registry, Report);

HPDFRegisterFrenchCTCRules(Registry, 'EXTENDED-CTC-FR',
  Engine, fisCII);
Valid := HPDFValidateEInvoiceXML(XMLBytes, 'EXTENDED-CTC-FR',
  'Lib\resources\Schematron', Registry, Report);

يحفظ التسجيل إصدارات ملف التعريف وقواعد الدولة منفصلة، ويجعل طبقة الدولة الفرنسية إلزامية للملف التعريفي المختار، بما في ذلك EN 16931 وBASIC WL عند تسجيلهما صراحةً لفرنسا

تُستخدم ورقة الأنماط الوطنية الصارمة المنشورة مباشرة، دون استبدالها بالمتغير التحذيري المنفصل أو تخفيض درجة النتائج

لا يتضمن الحزمة الرسمية المثبَّتة ملفَ تعريف قواعد EXTENDED-B2B-FR، فيرفض المساعد ذلك الاسم القديم بدل معاملته كاسم بديل معتمد تلقائيًا

يثبّت التحقق الناجح اكتمال طبقات قواعد أعمال الفواتير المنشورة هذه، بينما يبقى XML Schema ورسائل دورة حياة CDAR واستخراج بيانات e-reporting وتخويل المنصة والنقل والاعتماد القانوني نطاقات منفصلة

واجهة المحرك البرمجية

Engine := HPDFCreateSchematronEngine;
if not Engine.Load(SchematronPath, ErrorText) then
  raise Exception.Create(ErrorText);

Findings := Engine.Validate(XMLBytes);
Summary := Engine.LastSummary;

تُبلغ THPDFSchematronSummary عن Profile وTotalRules وEvaluated وSkipped وEvaluationErrors وViolations وEngineAvailable وEngineNote

تبقى Skipped صفرًا في محرك XE2 والإصدارات الأحدث، وهي محجوزة لبيانات نتائج Delphi 7 البديلة (stub) أو القديمة

تنتج التعبيرات المشوَّهة أو غير المدعومة نتائج صريحة بدرجة خطورة خطأ، وتزيد EvaluationErrors، ولا تختفي أبدًا على أنها فحوصات ناجحة

دوال مساعدة XML لـ Factur-X

توفر وحدة HPDFFacturX دوالًا مساعدة على مستوى البايتات تقرأ XML فاتورة Factur-X / ZUGFeRD دون بناء DOM، فتعمل على كل إصدارات Delphi التي تدعمها المكتبة وتكون آمنة على البايتات المستخرجة من ExtractFacturXXML

تُعيد HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes) معرّف الإرشادات من عنصر GuidelineSpecifiedDocumentContextParameter / ram:ID في مستند CII، أو سلسلة فارغة عند غيابه

تتحقق HPDFIsFacturXConformanceLevel(Value, FileName, Version) من اسم مستوى المطابقة، وتقبل MINIMUM وBASIC WL وBASIC وEN 16931 وEN16931 وEXTENDED وEXTENDED-CTC-FR وEXTENDED-B2B-FR وXRECHNUNG؛ ويشترط المستوى القديم COMFORT إضافةً اسم ملف ZUGFeRD 1.0 وهو ZUGFeRD-invoice.xml مع الإصدار 1.0

تطابق HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName) الإرشادات الموجودة في XML مع مستوى المطابقة المعلن والإصدار واسم الملف المضمَّن

تملأ HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary) سجل THPDFFacturXInvoiceSummary من XML الفاتورة وتعيد True عند العثور على XML الفاتورة الرئيسية على الأقل؛ ويُعلن نوع سجل الملخص نفسه في HPDFDoc بجوار THPDFFacturXInvoiceInfo

تشخيصات وحدود ثابتة

توفر سلسلة الأدوات

يستخدم Delphi XE2 والإصدارات الأحدث محرك توافق MSXML المدمج

يحتفظ Delphi 7 بالواجهات المشتركة وأنواع النتائج لكنه يعيد تشخيص محرك غير متاح

واجهات برمجية ذات صلة

القبول غير الرسومي

شغّل Tests/Delphi/Run-EInvoiceRuleTests.ps1 بقيم JavaExecutable وSaxonClassPath صريحة، أو بمتغيرَي البيئة المقابلَين HOTPDF_JAVA_EXE وHOTPDF_SAXON_CLASSPATH

يشترط المشغّل الافتراضي إعداد محرك القواعد الرسمية ويشغّل Win32 وWin64 معًا مع كبت إطلاق عارض PDF؛ أما -NativeOnly فيحذف تنفيذ Saxon الرسمي عمدًا