يفحص مطابق ملف XML للفاتورة الإلكترونية في المرحلة الثانية قبل إرساله: تحقق مسبق وفق متطلبات هيئة الزكاة والضريبة والجمارك المنشورة، لا اعتماداً من الهيئة. وتشرح هذه الصفحة قاعدة واحدة هي BR-CL-18.
خمس عمليات فحص شهرياً في باقة المجان. يُفحص الملف في الذاكرة ولا يُحفظ.
الرسالة كما تنشرها هيئة الزكاة والضريبة والجمارك
[BR-CL-18]-Invoice tax categories MUST be coded using UNCL5305 code list.
ما الذي يذكره مطابق
مدخل لكل حالة تُذكر فيها هذه القاعدة في التقرير.
صورة القيمة في التقرير
صورة القيمة التي وُجدت — empty وnot_15_digits وما شابههما — لا القيمة نفسها.
رمز الفئة الضريبية على بند الفاتورة فارغ
صورة القيمة في التقريرemptyموجود لكنه فارغ
ما الخلل
يحمل أحد بنود الفاتورة عنصر cac:Item/cac:ClassifiedTaxCategory/cbc:ID لا نص فيه. وتشترط القاعدة BR-CL-18 من معيار EN 16931، التي تنفّذها هيئة الزكاة والضريبة والجمارك، أن يكون رمز الفئة الضريبية للبند BT-151 أحد رموز قائمتها، والعنصر الفارغ ليس في أي قائمة. ولاحظ أن هذه القاعدة تقرأ رمز فئة البند لا رمز فئة التفصيل الضريبي: فكتلة التفصيل وكتلة الخصم تحملان عنصر cac:TaxCategory وهو ما لا تنظر إليه هذه القاعدة، ولا شيء في ملفات قواعد التحقق المنشورة يحصر رموز تينك الكتلتين في قائمة أصلاً.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
العنصر يُكتب والقيمة لا تُكتب، وهذا يعني عادةً أن التصدير يُخرج كتلة الفئة المصنَّفة لكل بند بينما يأتي الرمز نفسه من حقل لا يُملأ إلا حين يكون للصنف رمز ضريبي مسنَد. ابحث عن أصناف أُنشئت بلا رمز ضريبي، وعن البنود المجانية، وعن الأسطر النصية أو التعليقية التي صُدِّرت بنوداً حقيقية، وعن جدول ربط يعيد قيمة خالية لا قيمة افتراضية حين يخفق البحث.
رمز الفئة الضريبية على بند الفاتورة يحتوي على مسافة
صورة القيمة في التقريرcontains_a_spaceيحتوي على مسافة
ما الخلل
يحتوي العنصر cac:Item/cac:ClassifiedTaxCategory/cbc:ID على أحد بنود الفاتورة على مسافة داخله. والقاعدة BR-CL-18 من معيار EN 16931، التي تنفّذها هيئة الزكاة والضريبة والجمارك، مكتوبة شرطين منفصلين، والمخفق هنا هو الثاني: أن تكون القيمة في قائمة الرموز، وألا تحتوي على مسافة. وليس الشرطان اختباراً واحداً، ولذلك يُرصد هذا منفصلاً عن الرمز الذي لا وجود له في القائمة. فالهيئة تختبر الانتماء بالبحث عن القيمة داخل النص AE L M E S Z G O K B وهو القائمة مكتوبة بمسافات بين رموزها، فالقيمة المؤلَّفة من رمزين بينهما مسافة توجد فعلاً داخل ذلك النص وتفي بشطر الانتماء، ولا يردّها إلا شرط خلوّ القيمة من المسافة.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
القيمة ناتجة عن دمج شيء بشيء. والأسباب المعتادة رمزان ضُمّا لأن الصنف يحمل أكثر من رمز ضريبي، ورمز يتبعه لفظ وصفي من جدول بحث يعيد التسمية مع المفتاح، وحقل ثابت العرض محشو بمسافات لم تُقلَّم عند التصدير. قلّم القيمة واربط الصنف برمز واحد. وهذه القاعدة تقرأ رمز بند الفاتورة، فابدأ بالرمز الضريبي للصنف لا بكتلة التفصيل الضريبي.
رمز الفئة الضريبية على بند الفاتورة ليس من الرموز المقبولة
صورة القيمة في التقريرnot_in_uncl5305ليس رمز فئة ضريبية تقبله الهيئة
ما الخلل
يحمل العنصر cac:Item/cac:ClassifiedTaxCategory/cbc:ID على أحد بنود الفاتورة قيمة ليست في القائمة التي تقارن بها هيئة الزكاة والضريبة والجمارك. وتحصر القاعدة BR-CL-18 من معيار EN 16931 رمز الفئة الضريبية للبند BT-151 في عشرة رموز مكتوبة في ملفات قواعد التحقق هكذا: AE L M E S Z G O K B. وهي مجموعة جزئية من قائمة الرموز الأوسع UNCL5305، فالرمز الصحيح في تلك القائمة الأوسع والغائب عن هذه العشرة يخفق كذلك. والمقارنة صارمة وتراعي حالة الأحرف، فالحرف الصغير ليس القيمة نفسها التي يمثّلها الحرف الكبير. والرموز الأربعة التي تهمّ الفاتورة السعودية هي S للخاضع للنسبة الأساسية وZ للخاضع بنسبة الصفر وE للمعفى من الضريبة وO للخارج عن نطاق ضريبة القيمة المضافة.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
انظر في الربط بين جدول رموزك الضريبية وحرف الفئة. والأسباب المتكرّرة رمز من النظام صُدِّر كما هو، اسماً لرمز ضريبي أو نسبةً أو معرِّفاً داخلياً، بدل ربطه بحرف؛ وحرف صغير كُتب في موضع يشترط الحرف الكبير؛ ورمز صحيح في نمط فوترة إلكترونية لدولة أخرى لكنه ليس في القائمة السعودية. وهذه القاعدة تقرأ رمز بند الفاتورة تحديداً، فافحص الصنف ورمزه الضريبي لا كتلة التفصيل.
الفحص الذي يُنفَّذ
منقول حرفياً من ملفات قواعد التحقق التي تنشرها الهيئة، عند الملف والسطر المذكورين أدناه. والتعبير المُنفَّذ هو ما يُقيَّم على المستند، أما التعبير المذكور في التقرير فهو ما يظهر عند الإخفاق، وهما لا يتطابقان دائماً.
التعبير المُنفَّذ
not(( ( not(contains(normalize-space(.),' ')) and contains( ' AE L M E S Z G O K B ',concat(' ',normalize-space(.),' ') ) ) ))
التعبير المذكور في التقرير
( ( not(contains(normalize-space(.),' ')) and contains( ' AE L M E S Z G O K B ',concat(' ',normalize-space(.),' ') ) ) )
كما يرد في الإصدار 3.4.8 من حزمة أدوات التطوير SDK التي تنشرها الهيئة: النسخة المقتبسة هنا هي الملف الذي يتضمنه ذلك الإصدار بايتاً ببايت. والتاريخ في اسم الملف هو الاسم الذي تعطيه الهيئة للملف، أما القواعد فيه فهي قواعد الإصدار 3.4.8.
مثال عملي
مستند اصطناعي من مجموعة الاختبار المقيسة تُرصد عليه هذه القاعدة، تُعرض منه الأسطر التي يختلف فيها عن مستند اجتاز الفحص. ولا يذكر تقرير مطابق سوى صورة القيمة، لا القيمة نفسها.