BR-KSA-EN16931-06رسم مكتوب على سعر أحد بنود الفاتورة
يفحص مطابق ملف XML للفاتورة الإلكترونية في المرحلة الثانية قبل إرساله: تحقق مسبق وفق متطلبات هيئة الزكاة والضريبة والجمارك المنشورة، لا اعتماداً من الهيئة. وتشرح هذه الصفحة قاعدة واحدة هي BR-KSA-EN16931-06.
خمس عمليات فحص شهرياً في باقة المجان. يُفحص الملف في الذاكرة ولا يُحفظ.
الرسالة كما تنشرها هيئة الزكاة والضريبة والجمارك
[BR-KSA-EN16931-06]-Charge on price level (BG-29) is not allowed. The value of Indicator should be 'false'.
ما الذي يذكره مطابق
مدخل لكل حالة تُذكر فيها هذه القاعدة في التقرير.
صورة القيمة في التقرير
صورة القيمة التي وُجدت — empty وnot_15_digits وما شابههما — لا القيمة نفسها.
رسم مكتوب على سعر أحد بنود الفاتورة
صورة القيمة في التقريرcharge_indicator_trueالمؤشر يدل على رسم
ما الخلل
تحمل كتلة cac:AllowanceCharge الواقعة تحت المسار cac:InvoiceLine/cac:Price عنصر cbc:ChargeIndicator قيمته true، وهذا يجعلها رسماً لا خصماً. والقاعدة BR-KSA-EN16931-06 من هيئة الزكاة والضريبة والجمارك تحكم مستوى السعر بعينه وتشترط فيه القيمة false. وفي حزم القواعد السابقة للإصدار 2.0.0 كانت قاعدة الرسم العامة BR-KSA-F-02 ترصد المؤشر نفسه كذلك؛ أما في الإصدار 3.4.8 الذي تقرؤه حزمة القواعد 2.0.0 فتلك القاعدة تقبل القيمتين true وfalse كلتيهما، فتنفرد هذه الملاحظة بالرصد. وليست الكتلة نفسها هي المشكلة، فقد قيس خصم على مستوى السعر بمؤشر قيمته false فاجتاز بلا أي ملاحظة؛ إنما المشكلة في القيمة. وهنا يبلغ التعارض بين مستندين منشورين من الهيئة أشدَّه، إذ هو جملة واحدة كُتبت مرتين بمعنيين متناقضين. فالقسم 13.3.4 من معيار تطبيق XML، الإصدار 1.2 الصادر في 19 مايو 2023، صفحة 67، يذكر هذه القاعدة هكذا: الرسم على مستوى السعر، أي المجموعة BG-29، مسموح به، وينبغي أن تكون قيمة المؤشر True. والقاعدة ذات المعرِّف نفسه في ملفات قواعد التحقق المنشورة تذكرها هكذا: الرسم على مستوى السعر، أي المجموعة BG-29، غير مسموح به، ولا تُقبل فيه إلا القيمة false. المعرِّف واحد، والمجموعة واحدة، والحكم متناقض. وسائر ذلك المعيار مبني على القراءة الأولى: سجل تغييراته يعدّ مواصفة الرسوم إضافةً رئيسية في الإصدار (صفحة 1)، والقسم 9.2 يعطي صيغة تجمع مبالغ الرسوم في إجمالي (صفحة 16)، والقسم 11.2.8 يورد قائمة رموز موصى بها لسبب الرسم (صفحة 34)، والفاتورة النموذجية فيه تحمل مؤشراً قيمته true على بند (صفحة 18) وعلى المستند (صفحة 26). وملفات قواعد التحقق هي التي تقرّر، لأنها ما يُمرَّر عليه المستند المقدَّم فتقبله أو ترفضه. فالنظام الذي طبّق مواصفة الرسوم المنشورة تطبيقاً صحيحاً تَرفضه هذه الملفات. ولا بد من التصريح بذلك حتى لا يُنفَق وقت في مراجعة ربطٍ يفعل تماماً ما أمره به أحد المستندين.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
كتلة الخصم أو الرسم على مستوى السعر هي الموضع الذي يوضع فيه عادةً تعديل يلحق بوحدة السعر لا بالبند كله: رسم مناولة أو تغليف، أو زيادة وقود أو توصيل، أو رسم أُدرج في سعر الوحدة. فإن كان التعديل خصماً فالمؤشر مقلوب لا غير، وضبطه على القيمة false هو الحل؛ وابحث عن قالب تصدير يكتب القيمة true على كل كتلة يُخرجها. وإن كان رسماً فلا بد أن يخرج من هذه الكتلة، وله موضعان صحيحان. الأول أن تُدرجه في العنصر cbc:PriceAmount نفسه، فيحمله سعر الوحدة ويأتي المبلغ الصافي للبند تبعاً للسعر والكمية كما ينبغي. والثاني أن تفوتره بنداً مستقلاً من بنود الفاتورة له فئته الضريبية ونسبته، وهو المستند الأوضح حين يُراد أن يرى العميل الرسم مفصَّلاً. وأما رسم التوصيل بعينه فالعنصر cac:FreightAllowanceCharge الواقع تحت المسار cac:Delivery/cac:Shipment مقيس أنه يجتاز بمؤشر قيمته true، مع حدّ واحد: لا يدخل المبلغ في الإجماليات ولا في تفصيل ضريبة القيمة المضافة، فهو يسجّل الرسم ولا يفوتره. وراجع الجانب الضريبي بعد نقل المبلغ. فالرسم المُدرَج في سعر الوحدة تُحسب عليه الضريبة بفئة البند ونسبته، وهذا صحيح حين يتبع الرسمُ السلعةَ، وغير صحيح حين لا يتبعها؛ فالرسم الذي تختلف معاملته الضريبية عن معاملة الصنف يحتاج بنداً خاصاً به ليحمل كتلة cac:ClassifiedTaxCategory الخاصة به.
كتلة خصم أو رسم على سعر أحد البنود لا تحمل المؤشر أصلاً
صورة القيمة في التقريرcharge_indicator_missingمؤشر الخصم أو الرسم غير موجود
ما الخلل
تحمل كتلة cac:AllowanceCharge الواقعة تحت المسار cac:InvoiceLine/cac:Price مبلغاً ولا تحمل العنصر cbc:ChargeIndicator أصلاً. ولا ترصد هذه الملاحظة إلا حزم القواعد السابقة للإصدار 2.0.0: فالقاعدة BR-KSA-EN16931-06 في الإصدار 3.0.8 من حزمة أدوات التطوير SDK التي تنشرها هيئة الزكاة والضريبة والجمارك كانت تقارن المؤشر بالقيمة false، والعنصر الغائب لا يعطي ما يُقارَن، فكانت تُرصد. أما في الإصدار 3.4.8 الذي تقرؤه حزمة القواعد 2.0.0 فالقاعدة تفحص وجود مؤشر قيمته true، والمؤشر الغائب ليس كذلك، فلا يحمل هذه الملاحظة تقرير صادر عن الحزمة 2.0.0. ولغة UBL 2.1 تجعل العنصر cbc:ChargeIndicator إلزامياً داخل الكتلة، فالمستند في هذه الحال ما زال يخفق في فحص المخطط، وملاحظته هي التي تُقرأ.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
اكتب العنصر cbc:ChargeIndicator أولَ عنصر في كل كتلة cac:AllowanceCharge يُخرجها التصدير، في كل مستوى، بالقيمة false للخصم. وهو قيمة ثابتة تُكتب حرفياً لا قيمة تُقرأ من حقل، ولهذا يغيب: فسجل الخصم في نظامك يحمل مبلغاً وسبباً ولا يحمل اتجاهاً، فلا يجد القالب ما يربطه فيُترك العنصر. والسببان الجديران بالمراجعة اثنان. الأول أداة تسلسل مضبوطة على حذف كل عنصر قيمته خالية أو قيمته المنطقية false، فهي تحذف بذلك القيمة التي تريد كتابتها بعينها. والثاني قالب فيه شرط حول المؤشر لا يتحقق إلا في بعض المسارات. وترتيب العناصر مهم كذلك: تضع لغة UBL المؤشر أول الكتلة، قبل السبب والمبلغ.
الفحص الذي يُنفَّذ
منقول حرفياً من ملفات قواعد التحقق التي تنشرها الهيئة، عند الملف والسطر المذكورين أدناه. والتعبير المُنفَّذ هو ما يُقيَّم على المستند، أما التعبير المذكور في التقرير فهو ما يظهر عند الإخفاق، وهما لا يتطابقان دائماً.
كما يرد في الإصدار 3.4.8 من حزمة أدوات التطوير SDK التي تنشرها الهيئة: النسخة المقتبسة هنا هي الملف الذي يتضمنه ذلك الإصدار بايتاً ببايت. والتاريخ في اسم الملف هو الاسم الذي تعطيه الهيئة للملف، أما القواعد فيه فهي قواعد الإصدار 3.4.8.
مثال عملي
مستند اصطناعي من مجموعة الاختبار المقيسة تُرصد عليه هذه القاعدة، تُعرض منه الأسطر التي يختلف فيها عن مستند اجتاز الفحص. ولا يذكر تقرير مطابق سوى صورة القيمة، لا القيمة نفسها.