BR-O-08التفصيل الضريبي الخارج عن نطاق الضريبة لا يذكر المبلغ الخاضع

يفحص مطابق ملف XML للفاتورة الإلكترونية في المرحلة الثانية قبل إرساله: تحقق مسبق وفق متطلبات هيئة الزكاة والضريبة والجمارك المنشورة، لا اعتماداً من الهيئة. وتشرح هذه الصفحة قاعدة واحدة هي BR-O-08.

افحص 5 فواتير مجاناً

خمس عمليات فحص شهرياً في باقة المجان. يُفحص الملف في الذاكرة ولا يُحفظ.

الرسالة كما تنشرها هيئة الزكاة والضريبة والجمارك

[BR-O-08]-In a VAT breakdown (BG-23) where the VAT category code (BT-118) is " Not subject to VAT" the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are "Not subject to VAT".

فحوص أخرى تُذكر في التقرير نفسه

  • 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.

ما الذي يذكره مطابق

مدخل لكل حالة تُذكر فيها هذه القاعدة في التقرير.

صورة القيمة في التقرير
صورة القيمة التي وُجدت — empty وnot_15_digits وما شابههما — لا القيمة نفسها.

التفصيل الضريبي الخارج عن نطاق الضريبة لا يذكر المبلغ الخاضع

صورة القيمة في التقريرtaxable_amount_missingالمبلغ الخاضع غير موجود

ما الخلل

أحد عناصر cac:TaxSubtotal الواقعة مباشرة تحت كتلة cac:TaxTotal الخاصة بالفاتورة مرمَّز O، أي خارج عن نطاق الضريبة، تحت النظام الضريبي لضريبة القيمة المضافة، ولا يحمل عنصر cbc:TaxableAmount. وتقارن القاعدة BR-O-08 من معيار EN 16931، التي تنفّذها هيئة الزكاة والضريبة والجمارك، ذلك المبلغ بمجموع مبالغ البنود الخارجة عن النطاق، مضافاً إليه الرسوم الخارجة عن النطاق ومطروحاً منه الخصومات الخارجة عن النطاق. والعنصر الغائب تسلسل خالٍ في XPath: فالحساب عليه يعطي تسلسلاً خالياً، وكل مقارنة به كاذبة، فتخفق القاعدة عند الغياب بدل أن تتجاوزه، ولا بد من كتابة المبلغ ولو كان صفراً. وأمران عن المجموعين، لأنهما أضيق مما يوحي به اللفظ: يُؤخذان من العناصر المباشرة تحت جذر المستند وحدها، فالخصم الملحق ببند فاتورة ليس فيهما؛ وتُلتقط البنود والرسوم والخصومات المشاركة بحرف الفئة وحده، بلا اختبار أن يكون النظام الضريبي VAT.

ما الذي تتحقق منه في وحدة الفوترة الإلكترونية

والسبب المعتاد كبت العنصر الذي قيمته صفر عند التصدير، والمجموعة الخارجة عن النطاق أكثر ما يسقط منها، لأن التفصيل المعاد بناؤه من سطور الضريبة المرحَّلة لا يجد سطر ضريبة لتوريد لم تُفرَض عليه ضريبة أصلاً. اكتب العنصر cbc:TaxableAmount صراحةً بمنزلتين عشريتين وبالسمة currencyID نفسها التي تحملها بقية المبالغ. وإن كانت المجموعة تنقصها الأرقام لا العناصر فانظر إلى الملخّص الضريبي لكل فئة لا إلى قالب التصدير. وتوقّع أن يكون الكبت نفسه مصيباً تفاصيلك الخاضعة بنسبة الصفر والمعفاة من الضريبة، فأصلحه مرة واحدة.

المبلغ الخاضع في التفصيل الخارج عن نطاق الضريبة لا يطابق بنوده

صورة القيمة في التقريرtaxable_amount_mismatchالمبلغ الخاضع لا يطابق البنود

ما الخلل

أحد عناصر cac:TaxSubtotal الواقعة مباشرة تحت كتلة cac:TaxTotal الخاصة بالفاتورة مرمَّز O، أي خارج عن نطاق الضريبة، تحت النظام الضريبي لضريبة القيمة المضافة، وعنصره cbc:TaxableAmount لا يساوي مجموع مبالغ البنود الخارجة عن النطاق، مضافاً إليه الرسوم الخارجة عن النطاق ومطروحاً منه الخصومات الخارجة عن النطاق. وتقارن القاعدة BR-O-08 من معيار EN 16931، التي تنفّذها هيئة الزكاة والضريبة والجمارك، الطرفين مقارنة صارمة: لا هامش تسامح ولا خطوة تقريب، بخلاف القاعدتين BR-S-09 وBR-CO-17 اللتين تسمحان بهامش وحدة عملة واحدة حول مبلغ ضريبة الفئة. ففرق هللة واحدة يُخفق هذه القاعدة. ومنذ الإصدار 3.4.8 من حزمة أدوات التطوير SDK يوجد الفحص نفسه للفئة الخاضعة للنسبة الأساسية والخاضعة بنسبة الصفر والمعفاة من الضريبة أيضاً (القواعد BR-S-08 وBR-Z-08 وBR-E-08)، فكل تفصيل مربوط ببنوده؛ ولم يكن الإصدار السابق يفحص إلا الفئة الخارجة عن النطاق. وأمران عن المجموعين، لأنهما أضيق مما يوحي به اللفظ: يُؤخذان من العناصر المباشرة تحت جذر المستند وحدها، فالخصم الملحق ببند فاتورة ليس فيهما؛ وتُلتقط البنود والرسوم والخصومات المشاركة بحرف الفئة وحده، بلا اختبار أن يكون النظام الضريبي VAT.

ما الذي تتحقق منه في وحدة الفوترة الإلكترونية

أعِد بناء الرقم بيدك من الملف المصدَّر: اجمع عنصر cbc:LineExtensionAmount في كل بند فئته O، وأضف الرسوم على مستوى المستند المرمَّزة O، واطرح الخصومات على مستوى المستند المرمَّزة O، ثم قارن الناتج بعنصر cbc:TaxableAmount في التفصيل. والأسباب المتكرّرة: المبلغ الخاضع الخارج عن النطاق مأخوذ من الإجمالي قبل الضريبة للمستند بدل مجموعة الخارج عن النطاق؛ وخصم على مستوى المستند تحمل كتلته cac:TaxCategory حرفاً آخر فلا تطرحه القاعدة؛ وخصم طُبِّق على التفصيل ولم يُطبَّق على عنصر cbc:LineExtensionAmount في البند؛ وتقريب طُبِّق على التفصيل مستقلاً عن البنود. وابدأ بالملخّص الضريبي لكل فئة، فعنده يفترق التفصيل عن بنوده.

تفصيل للخارج عن نطاق الضريبة ولا شيء خارج عن نطاقها في الفاتورة

صورة القيمة في التقريرout_of_scope_unusedتفصيل للخارج عن نطاق الضريبة ولا شيء خارج عن نطاقها

ما الخلل

يحمل تفصيل ضريبة القيمة المضافة للفاتورة عنصر cac:TaxSubtotal مرمَّزاً O، أي خارجاً عن نطاق الضريبة، تحت النظام الضريبي لضريبة القيمة المضافة، لكن لا صنف في أي بند ولا خصم ولا رسم على مستوى المستند مرمَّز O تحت هذا النظام. والقاعدة BR-O-08 تفحص أن المبلغ الخاضع لفئة الخارج عن نطاق الضريبة يساوي مبالغ البنود الخارجة عن نطاقها مطروحاً منها الخصومات ومضافاً إليها الرسوم، وأداة الفحص الحالية لدى هيئة الزكاة والضريبة والجمارك ترصد التفصيل الذي لا شيء فيه يُجمع. وتصنّف الهيئة هذه القاعدة تحذيراً لا خطأً، فالتحذير وحده لا يؤدي إلى رفض المستند.

ما الذي تتحقق منه في وحدة الفوترة الإلكترونية

فإما أن التفصيل لا مكان له، وإما أن البنود التي يلخّصها مرمَّزة بفئة أخرى. تحقّق أن رمز الفئة في صنف كل بند (cac:ClassifiedTaxCategory/cbc:ID) ونظامه الضريبي يطابقان التفصيل الذي يُجمع فيه البند.

التفصيل الخارج عن نطاق الضريبة حُكم عليه في مستند بلا بنود فاتورة

صورة القيمة في التقريرno_invoice_lineلا بنود فاتورة يُقارَن بها

ما الخلل

أحد عناصر cac:TaxSubtotal الواقعة مباشرة تحت كتلة cac:TaxTotal الخاصة بالفاتورة مرمَّز O، أي خارج عن نطاق الضريبة، تحت النظام الضريبي لضريبة القيمة المضافة، ولا يحمل المستند عنصر cac:InvoiceLine في أي موضع منه. ولا ترصد هذه الملاحظة إلا حزم القواعد السابقة للإصدار 2.0.0: فالقاعدة BR-O-08 في الإصدار 3.0.8 من حزمة أدوات التطوير SDK التي تنشرها هيئة الزكاة والضريبة والجمارك كانت تبدأ باشتراط وجود بند فاتورة واحد على الأقل، فإذا لم يوجد بند أخفقت مهما كان المبلغ الخاضع. أما في الإصدار 3.4.8 الذي تقرؤه حزمة القواعد 2.0.0 فالقاعدة BR-O-08 تسأل بدلاً من ذلك هل يستعمل بندٌ أو خصمٌ أو رسمٌ الفئةَ الخارجة عن النطاق، وتصنّف ذلك تحذيراً، فلا يحمل هذه الملاحظة تقرير صادر عن الحزمة 2.0.0. وهذه حال لا تبلغها فاتورة صحيحة في المخطط على أي حال: فمخطط UBL 2.1 يشترط بنداً واحداً على الأقل في الفاتورة، فيخفق المستند في فحص المخطط، والملاحظة MTB-XSD-01 هي التي تصفه.

ما الذي تتحقق منه في وحدة الفوترة الإلكترونية

اقرأ ملاحظة المخطط في التقرير نفسه أولاً، فهي تسمّي الخلل ذاته من جهة المعيار، ثم انظر هل صُدِّرت بنود أصلاً. والمستند الحامل لإجماليات كاملة وبلا بنود يأتي عادةً من تصدير يبني الترويسة والملخّص الضريبي من استعلام والبنود من استعلام آخر: مرشِّح على نوع البند استبعد كل البنود، أو تسوية حُرِّرت ترويسةً بلا بنود، أو تشغيل على مستند حُذفت بنوده بين القراءتين. وتأكّد بفتح الملف المصدَّر والبحث فيه عن cac:InvoiceLine.

الفحص الذي يُنفَّذ

منقول حرفياً من ملفات قواعد التحقق التي تنشرها الهيئة، عند الملف والسطر المذكورين أدناه. والتعبير المُنفَّذ هو ما يُقيَّم على المستند، أما التعبير المذكور في التقرير فهو ما يظهر عند الإخفاق، وهما لا يتطابقان دائماً.

التعبير المُنفَّذ

count(/*/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[normalize-space(cbc:ID) = 'O'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT'])> 0 and not(exists(../../../cac:AllowanceCharge/cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'O']) or exists(../../../cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'O']])) or not((xs:decimal(../cbc:TaxableAmount) = (sum(../../../cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:Amount)))))

التعبير المذكور في التقرير

count(/*/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[normalize-space(cbc:ID) = 'O'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT'])> 0 and (exists(../../../cac:AllowanceCharge/cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'O']) or exists(../../../cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'O']])) or (exists(//cac:InvoiceLine) and (xs:decimal(../cbc:TaxableAmount) = (sum(../../../cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:Amount))))) or (exists(//cac:CreditNoteLine) and (xs:decimal(../cbc:TaxableAmount) = (sum(../../../cac:CreditNoteLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='O']/xs:decimal(cbc:Amount)))))
العناصر التي يُقيَّم عليها
/*/cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[normalize-space(cbc:ID) = 'O'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']
المصدر
vendor/zatca/schematron/CEN-EN16931-UBL.xsl:1450

كما يرد في الإصدار 3.4.8 من حزمة أدوات التطوير SDK التي تنشرها الهيئة: النسخة المقتبسة هنا هي الملف الذي يتضمنه ذلك الإصدار بايتاً ببايت. والتاريخ في اسم الملف هو الاسم الذي تعطيه الهيئة للملف، أما القواعد فيه فهي قواعد الإصدار 3.4.8.

مثال عملي

مستند اصطناعي من مجموعة الاختبار المقيسة تُرصد عليه هذه القاعدة، تُعرض منه الأسطر التي يختلف فيها عن مستند اجتاز الفحص. ولا يذكر تقرير مطابق سوى صورة القيمة، لا القيمة نفسها.

المستند
bad-64-o-mixed-breakdowns.xml
ما حكم به مطابق
اجتاز
صورة القيمة في التقرير
out_of_scope_unusedتفصيل للخارج عن نطاق الضريبة ولا شيء خارج عن نطاقها

نزّل هذا المثال (.xml)افحصه في مطابق

مثال هذه الصفحة، يُفحص بالقواعد نفسها التي يمر بها ملفك عند الرفع. بلا رفع وبلا تسجيل دخول.

قواعد تُقيَّم على الموضع نفسه من المستند، وكثيراً ما تُرصد عدة قواعد منها معاً بسبب قيمة واحدة خاطئة.

افحص فاتورة

افحص فاتورتك

© 2026 Hayatiq AI Solutions F.Z.E. جميع الحقوق محفوظة.