يفحص مطابق ملف XML للفاتورة الإلكترونية في المرحلة الثانية قبل إرساله: تحقق مسبق وفق متطلبات هيئة الزكاة والضريبة والجمارك المنشورة، لا اعتماداً من الهيئة. وتشرح هذه الصفحة قاعدة واحدة هي BR-KSA-70.
خمس عمليات فحص شهرياً في باقة المجان. يُفحص الملف في الذاكرة ولا يُحفظ.
الرسالة كما تنشرها هيئة الزكاة والضريبة والجمارك
[BR-KSA-70]-The invoice must contain Invoice Issue Time (KSA-25). This value should be in the format: hh:mm:ss for time expressed in local time (eg 19:20:30) or hh:mm:ssZ for time expressed in UTC (eg 19:20:30Z)."The invoice must contain Invoice Issue Time (KSA-25). This value should be in the format: hh:mm:ss for time expressed in local time (eg 19:20:30) or hh:mm:ssZ for time expressed in UTC (eg 19:20:30Z).
ما الذي يذكره مطابق
مدخل لكل حالة تُذكر فيها هذه القاعدة في التقرير.
صورة القيمة في التقرير
صورة القيمة التي وُجدت — empty وnot_15_digits وما شابههما — لا القيمة نفسها.
وقت الإصدار غير موجود
صورة القيمة في التقريرissue_time_missingوقت الإصدار غير موجود
ما الخلل
لا تحمل الفاتورة العنصر cbc:IssueTime، أي الحقل KSA-25. فترفض هيئة الزكاة والضريبة والجمارك المستند بموجب القاعدة BR-KSA-70، وهي تشترط وقت الإصدار في كل فاتورة، مكتوباً بالصورة hh:mm:ss بالتوقيت المحلي أو hh:mm:ssZ بالتوقيت العالمي المنسق.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
اربط وقت إصدار الفاتورة بالعنصر cbc:IssueTime، بعد cbc:IssueDate مباشرة.
وقت الإصدار ليس مكتوباً بالصورة hh:mm:ss
صورة القيمة في التقريرissue_time_bad_formatليس مكتوباً بالصورة hh:mm:ss
ما الخلل
العنصر cbc:IssueTime موجود لكنه ليس وقتاً من اليوم مكتوباً بالصورة hh:mm:ss (مثل 19:20:30) أو hh:mm:ssZ (مثل 19:20:30Z). فترفض هيئة الزكاة والضريبة والجمارك المستند بموجب القاعدة BR-KSA-70. وأجزاء الثانية، وإزاحة المنطقة الزمنية مثل +03:00، وغياب خانة الثواني، والمسافات حول القيمة، كلها تخفق في هذا الفحص وإن قبلها مخطط XML.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
اكتب الوقت بخانتين لكل من الساعات والدقائق والثواني، بنظام الأربع والعشرين ساعة، ولا شيء غير ذلك. والطوابع الزمنية المنسوخة من قاعدة بيانات كثيراً ما تحمل أجزاء من الألف من الثانية أو إزاحة زمنية؛ فاحذفها عند كتابة XML.
الفحص الذي يُنفَّذ
منقول حرفياً من ملفات قواعد التحقق التي تنشرها الهيئة، عند الملف والسطر المذكورين أدناه. والتعبير المُنفَّذ هو ما يُقيَّم على المستند، أما التعبير المذكور في التقرير فهو ما يظهر عند الإخفاق، وهما لا يتطابقان دائماً.
التعبير المُنفَّذ
not(exists(cbc:IssueTime) and (cbc:IssueTime) != '' and (matches(cbc:IssueTime, '^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$') or matches(cbc:IssueTime, '^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])Z$')))
التعبير المذكور في التقرير
exists(cbc:IssueTime) and (cbc:IssueTime) != '' and (matches(cbc:IssueTime, '^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$') or matches(cbc:IssueTime, '^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])Z$'))
كما يرد في الإصدار 3.4.8 من حزمة أدوات التطوير SDK التي تنشرها الهيئة: النسخة المقتبسة هنا هي الملف الذي يتضمنه ذلك الإصدار بايتاً ببايت. والتاريخ في اسم الملف هو الاسم الذي تعطيه الهيئة للملف، أما القواعد فيه فهي قواعد الإصدار 3.4.8.
مثال عملي
مستند اصطناعي من مجموعة الاختبار المقيسة تُرصد عليه هذه القاعدة، تُعرض منه الأسطر التي يختلف فيها عن مستند اجتاز الفحص. ولا يذكر تقرير مطابق سوى صورة القيمة، لا القيمة نفسها.