BR-CO-17أحد بنود التفصيل الضريبي لا يذكر مبلغ الضريبة
يفحص مطابق ملف XML للفاتورة الإلكترونية في المرحلة الثانية قبل إرساله: تحقق مسبق وفق متطلبات هيئة الزكاة والضريبة والجمارك المنشورة، لا اعتماداً من الهيئة. وتشرح هذه الصفحة قاعدة واحدة هي BR-CO-17.
خمس عمليات فحص شهرياً في باقة المجان. يُفحص الملف في الذاكرة ولا يُحفظ.
الرسالة كما تنشرها هيئة الزكاة والضريبة والجمارك
[BR-CO-17]-VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.
فحوص أخرى تُذكر في التقرير نفسه
BR-S-09
[BR-S-09]-The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Standard rated" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119) / 100), rounded to two decimals.
BR-CO-15
[BR-CO-15]-Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).
صورة القيمة التي وُجدت — empty وnot_15_digits وما شابههما — لا القيمة نفسها.
أحد بنود التفصيل الضريبي لا يذكر مبلغ الضريبة
صورة القيمة في التقريرtax_amount_missingمبلغ الضريبة غير موجود
ما الخلل
أحد عناصر cac:TaxSubtotal داخل كتلة cac:TaxTotal لا يحمل عنصر cbc:TaxAmount. وتشترط القاعدة BR-CO-17 من معيار EN 16931، التي تنفّذها هيئة الزكاة والضريبة والجمارك، أن يساوي مبلغ ضريبة الفئة BT-117 في كل تفصيل المبلغ الخاضع BT-116 مضروباً في النسبة BT-119 مقسوماً على مئة، ومع غياب المبلغ لا يوجد ما يُقارَن. وتحكم هذه القاعدة الفئات الضريبية كلها سواءً: الخاضع للنسبة الأساسية والخاضع بنسبة الصفر والمعفى من الضريبة والخارج عن نطاقها، وتقرأ عنصر cac:TaxSubtotal على أي عمق، فالمكتوب منه داخل بند الفاتورة داخل في نطاقها، بخلاف قواعد الفئات التي لا تقرأ إلا التفصيل الواقع تحت جذر المستند.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
كل عنصر cac:TaxSubtotal يكتبه التصدير يحتاج إلى عنصر cbc:TaxAmount خاص به، بما في ذلك تفاصيل الخاضع بنسبة الصفر والمعفى والخارج عن النطاق حيث يكون المبلغ صفراً. والصفر قيمة يجب أن تُكتب، وإسقاط العنصر لأن الرقم لا شيء هو أشيع أسباب هذه الملاحظة. وإن كان تصديرك يكتب كذلك كتلة cac:TaxTotal داخل كل بند فافحصها أيضاً، فهي محكومة بالقاعدة نفسها التي تحكم كتلة مستوى المستند.
أحد بنود التفصيل الضريبي لا يذكر المبلغ الخاضع
صورة القيمة في التقريرtaxable_amount_missingالمبلغ الخاضع غير موجود
ما الخلل
أحد عناصر cac:TaxSubtotal داخل كتلة cac:TaxTotal يحمل نسبة غير صفرية ولا يحمل عنصر cbc:TaxableAmount. وتضرب القاعدة BR-CO-17 من معيار EN 16931، التي تنفّذها هيئة الزكاة والضريبة والجمارك، هذا المبلغ الخاضع BT-116 في النسبة لتصل إلى الضريبة المتوقَّعة، فلا يبقى للضرب طرف أول وتخفق القاعدة. ولا يُقرأ المبلغ الخاضع إلا حين تكون النسبة غير صفرية، ولذلك لا تُرصد هنا الكتلة التي نسبتها صفر ولا مبلغ خاضع فيها.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
العنصر cbc:TaxableAmount هو صافي كل ما يقع في هذه الفئة من هذا المستند، وموضعه كتلة التفصيل نفسها. وأكثر ما يغيب حين يُشتقّ التفصيل من إجماليات المستند، إذ تحمل تلك الإجماليات مبلغاً واحداً قبل الضريبة للفاتورة كلها لا مبلغاً لكل فئة. فابنِ التفصيل من الملخّص الضريبي لكل فئة، وافحص كذلك أي كتلة cac:TaxTotal مكتوبة داخل بند فاتورة، فالقاعدة نفسها تقرؤها.
تفصيل ضريبي بلا نسبة أو بنسبة صفر ومبلغ ضريبة غير صفري
صورة القيمة في التقريرrate_zero_with_nonzero_taxلا نسبة أو نسبة صفر مع مبلغ ضريبة غير صفري
ما الخلل
أحد عناصر cac:TaxSubtotal داخل كتلة cac:TaxTotal إما يحمل عنصر cbc:Percent يقرَّب إلى صفر وإما لا يحمل هذا العنصر أصلاً، بينما لا يقرَّب عنصر cbc:TaxAmount فيه إلى صفر. وتعامل القاعدة BR-CO-17 من معيار EN 16931، التي تنفّذها هيئة الزكاة والضريبة والجمارك، الحالتين معاملة واحدة: فما دام لا توجد نسبة يُضرب فيها فالضريبة الوحيدة المقبولة هي الصفر. والتفصيل الخالي من النسبة أصلاً مشروع في فئة الخارج عن نطاق الضريبة التي تعفيها القاعدة BR-48 من حمل النسبة، وهذا الفرع هو المقابل الحسابي لذلك الإعفاء. والتقريب هنا إلى أقرب عدد صحيح لا إلى منزلتين عشريتين، فمبلغ ضريبة قدره 0.49 يفي بالشرط ولا يفي به مبلغ قدره 0.50، ونسبة قدرها 0.40 تُعدّ نسبة صفر.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
حقلان في كتلة واحدة يتعارضان، فاحسم أيهما الصحيح. فإن كان التوريد خاضعاً للضريبة فالنسبة هي الناقصة أو الخاطئة. وإن كان غير خاضع فمبلغ الضريبة يجب أن يكون صفراً وشيء ما يكتب فيه رقماً، وأكثر ذلك بقية من إجمالي ضريبة المستند تُنسخ إلى كل تفصيل، أو تسوية تقريب قُيِّدت على الفئة الخطأ. وابحث أيضاً عن نسبة محفوظة كسراً: النسبة المكتوبة 0.10 تقرَّب هنا إلى صفر فتحوّل تفصيلاً خاضعاً عادياً إلى هذه الملاحظة.
مبلغ التفصيل الضريبي لا يساوي المبلغ الخاضع مضروباً في النسبة
صورة القيمة في التقريرnot_taxable_times_rateلا يساوي المبلغ الخاضع مضروباً في النسبة
ما الخلل
في أحد عناصر cac:TaxSubtotal داخل كتلة cac:TaxTotal لا يساوي العنصر cbc:TaxAmount ما ينتج عن العنصرين cbc:TaxableAmount وcbc:Percent. وتضرب القاعدة BR-CO-17 من معيار EN 16931، التي تنفّذها هيئة الزكاة والضريبة والجمارك، المبلغ الخاضع BT-116 في النسبة BT-119 مقسوماً على مئة، ثم تقرّب إلى منزلتين عشريتين وتقارن. وتحمل المقارنة هامش تسامح قدره وحدة عملة واحدة، والنطاق مفتوح من الطرفين: فالفرق الأقل من ريال واحد يمرّ، والفرق المساوي لريال واحد بالضبط لا يمرّ. وهو ريال كامل لا هللة، فلا تُرصد هنا أبداً فروق التقريب التي تُقاس بالهللات؛ وقاعدتا إجماليات المستند BR-CO-14 وBR-CO-15 تقارنان تطابقاً تاماً، وهناك يظهر الفرق على مستوى الهللة.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
تقرأ هذه القاعدة كل فئة وكل عمق، فحدّد أولاً أي تفصيل هو الخارج عن الصواب: الخاضع للنسبة الأساسية ترصده معه القاعدة BR-S-09 عادةً، والتفصيل المرصود هنا وحده إما في فئة أخرى وإما داخل بند فاتورة. والأسباب المعتادة أساس خاضع لا يشمل خصماً أو رسماً على مستوى المستند خضع للضريبة، وضريبة جُمعت من أرقام البنود بعد تقريب كل منها، ونسبة محفوظة كسراً لا نسبة مئوية. قارن الملخّص الضريبي لكل فئة الذي يُخرجه محرّكك بالكتلة التي يكتبها التصدير.
تفصيل ضريبة القيمة المضافة لا يذكر النسبة
صورة القيمة في التقريرrate_missingالنسبة غير موجودة
ما الخلل
أحد عناصر cac:TaxSubtotal في تفصيل ضريبة القيمة المضافة للفاتورة لا يحمل العنصر cbc:Percent في فئته cac:TaxCategory، فلا تجد القاعدة BR-CO-17، ومفادها أن مبلغ الضريبة يساوي المبلغ الخاضع مضروباً في النسبة، نسبةً تضرب فيها، فتخفق. وأداة الفحص الحالية لدى هيئة الزكاة والضريبة والجمارك تطبّق ذلك على كل تفصيل أياً كانت فئته. وتصنّف الهيئة هذه القاعدة تحذيراً لا خطأً، فالتحذير وحده لا يؤدي إلى رفض المستند.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
اكتب نسبة الفئة في cac:TaxSubtotal/cac:TaxCategory/cbc:Percent في كل تفصيل، و0 حيث لا تُحتسب ضريبة. والسبب المعتاد تفصيل مبني على رمز ضريبي لم تُضبط له نسبة.
الفحص الذي يُنفَّذ
منقول حرفياً من ملفات قواعد التحقق التي تنشرها الهيئة، عند الملف والسطر المذكورين أدناه. والتعبير المُنفَّذ هو ما يُقيَّم على المستند، أما التعبير المذكور في التقرير فهو ما يظهر عند الإخفاق، وهما لا يتطابقان دائماً.
التعبير المُنفَّذ
not($checkTwo)
التعبير المذكور في التقرير
(round(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent)) = 0 and (round(xs:decimal(cbc:TaxAmount)) = 0)) or (round(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent)) != 0 and ((abs(xs:decimal(cbc:TaxAmount)) - 1 < round(abs(xs:decimal(cbc:TaxableAmount)) * (cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent) div 100) * 10 * 10) div 100 ) and (abs(xs:decimal(cbc:TaxAmount)) + 1 > round(abs(xs:decimal(cbc:TaxableAmount)) * (cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent) div 100) * 10 * 10) div 100 ))) or (not(exists(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent))) and (round(xs:decimal(cbc:TaxAmount)) = 0))
العناصر التي يُقيَّم عليها
/ubl:Invoice/cac:TaxTotal/cac:TaxSubtotal
المصدر
vendor/zatca/schematron/CEN-EN16931-UBL.xsl:1286
كما يرد في الإصدار 3.4.8 من حزمة أدوات التطوير SDK التي تنشرها الهيئة: النسخة المقتبسة هنا هي الملف الذي يتضمنه ذلك الإصدار بايتاً ببايت. والتاريخ في اسم الملف هو الاسم الذي تعطيه الهيئة للملف، أما القواعد فيه فهي قواعد الإصدار 3.4.8.
مثال عملي
مستند اصطناعي من مجموعة الاختبار المقيسة تُرصد عليه هذه القاعدة، تُعرض منه الأسطر التي يختلف فيها عن مستند اجتاز الفحص. ولا يذكر تقرير مطابق سوى صورة القيمة، لا القيمة نفسها.