BR-KSA-DEC-01نسبة الخصم المئوية أقل من الصفر أو أكبر من مئة
يفحص مطابق ملف XML للفاتورة الإلكترونية في المرحلة الثانية قبل إرساله: تحقق مسبق وفق متطلبات هيئة الزكاة والضريبة والجمارك المنشورة، لا اعتماداً من الهيئة. وتشرح هذه الصفحة قاعدة واحدة هي BR-KSA-DEC-01.
خمس عمليات فحص شهرياً في باقة المجان. يُفحص الملف في الذاكرة ولا يُحفظ.
الرسالة كما تنشرها هيئة الزكاة والضريبة والجمارك
[BR-KSA-DEC-01]-The allowance percentage values (BT-94, BT-138) must be from 0.00 to 100.00, with maximum two decimal places. Only numerals are accepted, the percentage symbol (%) is not allowed.
ما الذي يذكره مطابق
مدخل لكل حالة تُذكر فيها هذه القاعدة في التقرير.
صورة القيمة في التقرير
صورة القيمة التي وُجدت — empty وnot_15_digits وما شابههما — لا القيمة نفسها.
نسبة الخصم المئوية أقل من الصفر أو أكبر من مئة
صورة القيمة في التقريرpercentage_out_of_rangeأقل من الصفر أو أكبر من مئة
ما الخلل
العنصر cbc:MultiplierFactorNumeric، وهو نسبة الخصم أو الرسم المئوية في الحقل BT-94 على مستوى المستند وفي الحقل BT-138 على مستوى البند، يحمل قيمة خارج المدى من صفر إلى مئة شاملاً الطرفين، وترفض هيئة الزكاة والضريبة والجمارك المستند بموجب قاعدتها BR-KSA-DEC-01. وتقرأ القاعدة كل عنصر cbc:MultiplierFactorNumeric يقع مباشرةً داخل كتلة cac:AllowanceCharge حيثما وقعت تلك الكتلة: على المستند، وعلى البند، وعلى مستوى السعر كذلك. ولا تشترط شيئاً في مؤشر الرسم، فنسبة الرسم تُحكم كما تُحكم نسبة الخصم سواءً بسواء. والعنصر الخالي مُهمَل رأساً، لأن تعبير القاعدة نفسه يشترط أن يحمل العنصر نصاً قبل أن ينظر في القيمة، فالخصم الذي يكتب العنصر cbc:MultiplierFactorNumeric فارغاً لا يُرصد عليه هنا شيء. وثمة حالة واحدة لا يبلغها اختبار المدى هذا ويحسن العلم بها لأنها الشائعة: النسبة المكتوبة كسراً، أي 0.15 حيث أُريد خمسة عشر في المئة، تقع داخل المدى وتجتاز هذه القاعدة وهي خاطئة في كل موضع آخر تُستعمل فيه، وإنما تظهر في صورة مبلغ خصم لا يوافق مبلغه الأساس ونسبته.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
القيمة الخارجة عن المدى من صفر إلى مئة مشكلة وحدات لا مشكلة ضريبة. والنسبة السالبة تأتي عادةً من إشعار دائن طُبِّقت فيه الإشارة على النسبة بدل المبالغ: ففي الإشعار الدائن تحمل المبالغ الاتجاه وتبقى النسبة موجبة. والقيمة التي تتجاوز مئة تعني في الغالب أن الحقل يحمل شيئاً ليس نسبة أصلاً، كمبلغ أو كمية أو معامل، كُتب فيه بربط مزاح عموداً واحداً. ثم افحص الوحدات في الاتجاهين، فاختبار المدى لن يفعل ذلك عنك: فقد يحمل جدول الخصومات عندك القيمة 0.15 ويضرب قالب التصدير في مئة، وقد يحمل القيمة 15 ولا يضرب القالب في شيء، وكلا الاختلالين يُنتج خصماً خاطئاً بمقدار مئة ضعف. والاختبار الموثوق أن تتحقق من أن النسبة مطبَّقةً على العنصر cbc:BaseAmount تُنتج فعلاً العنصر cbc:Amount الذي كتبته.
نسبة الخصم المئوية مكتوبة بأكثر من ست منازل عشرية
صورة القيمة في التقريرtoo_many_decimalsمنازل عشرية أكثر مما يُسمح به
ما الخلل
العنصر cbc:MultiplierFactorNumeric، وهو نسبة الخصم أو الرسم المئوية في الحقل BT-94 على مستوى المستند وفي الحقل BT-138 على مستوى البند، مكتوب بأكثر من ستة محارف بعد أول نقطة فيه، وترفض هيئة الزكاة والضريبة والجمارك المستند بموجب قاعدتها BR-KSA-DEC-01. ست منازل لا منزلتان، وهذا هو الموضع الذي يحسن قراءته مرتين: فكل سقف عشري آخر في أداة الفحص هذه منزلتان، وهذه النسبة هي القيمة الوحيدة في ملفي القواعد المنشورين التي يُسمح لها بست منازل. فالنسبة المكتوبة بثلاث منازل أو بأربع مقبولة هنا تماماً وكانت لتُرفض في كل موضع آخر من المستند تقريباً. وتعدّ القاعدة المحارف كما كُتبت ولا تحكم على مقدار القيمة، فوجود خانة سابعة سبب رفض ولو كانت صفراً. والمسافات داخلة في العدّ: فشطر المدى من القاعدة نفسها يقرأ القيمة بعد تجريدها من المسافات المحيطة، وهذا الشطر يعدّ النص الخام، فالقيمة المحشوة داخل عنصرها قد تجتاز اختبار المدى وتُرفض هنا. والعنصر الخالي مُهمَل رأساً، لأن القاعدة تشترط أن يحمل العنصر نصاً قبل أن تنظر فيه أصلاً. وتقرأ القاعدة كل عنصر cbc:MultiplierFactorNumeric يقع مباشرةً داخل كتلة cac:AllowanceCharge حيثما وقعت، ولا تشترط شيئاً في مؤشر الرسم، فنسبة الرسم تُحكم كما تُحكم نسبة الخصم.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
ست منازل سعةٌ كافية، فالنسبة التي تتجاوزها تكاد لا تكون نسبةً كتبها إنسان، بل نسبةً اشتقّتها البرمجة: وأكثرها قسمة مبلغ خصم على مبلغ أساس، وهي قسمة تُنتج كسراً دورياً يُطبع بكامل دقة الحقل. ابحث عن تلك القسمة في منطق التسعير أو الخصومات أو الحملات عندك واكتب النسبة المعلنة بدل المحسوبة. وإن لم يكن خلف الخصم نسبة نظيفة فالمعيار لا يطلب نسبة أصلاً: فالعنصر cbc:MultiplierFactorNumeric اختياري، والخصم المكتوب مبلغاً وحده بلا نسبة وبلا مبلغ أساس مستند صحيح وأبسط. وتحقّق كذلك من أن أداة كتابة XML لا تضيف مسافات بادئة داخل العنصر، فمحرف نهاية السطر والمسافات بعده محارف ضمن نص العنصر وتدخل في العدّ إلى الست.
الفحص الذي يُنفَّذ
منقول حرفياً من ملفات قواعد التحقق التي تنشرها الهيئة، عند الملف والسطر المذكورين أدناه. والتعبير المُنفَّذ هو ما يُقيَّم على المستند، أما التعبير المذكور في التقرير فهو ما يظهر عند الإخفاق، وهما لا يتطابقان دائماً.
التعبير المُنفَّذ
string-length(cbc:MultiplierFactorNumeric) > 0 and not(xs:decimal(cbc:MultiplierFactorNumeric) >= 0 and xs:decimal(cbc:MultiplierFactorNumeric) <= 100 and string-length(substring-after(cbc:MultiplierFactorNumeric,'.')) <=2)
التعبير المذكور في التقرير
xs:decimal(.) >= 0 and xs:decimal(.) <= 100 and string-length(substring-after(.,'.')) <=2
كما يرد في الإصدار 3.4.8 من حزمة أدوات التطوير SDK التي تنشرها الهيئة: النسخة المقتبسة هنا هي الملف الذي يتضمنه ذلك الإصدار بايتاً ببايت. والتاريخ في اسم الملف هو الاسم الذي تعطيه الهيئة للملف، أما القواعد فيه فهي قواعد الإصدار 3.4.8.
مثال عملي
مستند اصطناعي من مجموعة الاختبار المقيسة تُرصد عليه هذه القاعدة، تُعرض منه الأسطر التي يختلف فيها عن مستند اجتاز الفحص. ولا يذكر تقرير مطابق سوى صورة القيمة، لا القيمة نفسها.