BR-KSA-27 تحذير — الفاتورة تُقبل

رمز QR (KSA-14) غير موجود في المستند المبسط أو بغير شكله

القاعدة تعمل على المستند المبسط وحده، وتبحث عن مرجع مستند معرّفه QR وفيه قيمة غير فارغة بنوع text/plain. ولا تقرأ حقول الرمز نفسها: تلك تُفحص في مرحلة مستقلة، فرمز المرحلة الأولى يمرّ منها. والدرجة تحذير.

نص الرسالة كما ترسلها الهيئة بالإنجليزية، بلا تعديل

The document must contain a QR code (KSA-14), and this code must be base64Binary.

ماذا يعني هذا؟

على المستند المبسط وحده: الشرط محاط بفحص يبحث في المستند عن ترميز نوع معاملة يبدأ بـ 02 تليه خمسة أرقام — الفاتورة المبسطة وإشعاراتها. أما الفاتورة الضريبية فرمزها تولّده الهيئة عند الإجازة مع ختمها، ويكتفي المكلّف بعرض الرمز الذي تعيده، كما تقول إرشاداتها التفصيلية.

والشرط أربعة أجزاء كلها لازمة: كتلة cac:AdditionalDocumentReference قيمة cbc:ID فيها QR بالضبط — بحرفين كبيرين وبلا مسافة حولهما، لأن جزأين من الشرط يقارنان المعرّف كما هو دون تنظيف؛ وداخلها cac:Attachment ثم cbc:EmbeddedDocumentBinaryObject؛ وقيمته غير فارغة؛ وخاصيته mimeCode تساوي text/plain. غياب أيّها يأتي بهذا الكود.

وما لا يفحصه وإن ذكرته الرسالة: كون القيمة Base64 صالحة. ذلك يتولاه مخطط XML قبل القواعد، فنوع العنصر في UBL هو base64Binary، والقيمة التي ليست Base64 تسقط هناك خطأ مخطط لا هنا. والطول له قاعدته: BR-CL-KSA-14 ترفض ما زاد على 1000 محرف أو قلّ عن محرف واحد، ودرجتها خطأ.

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

ودرجته تحذير: المستند يُقبل والتحذير معه. لكن رمز QR هو ما يقرؤه المشتري وتطبيق الهيئة للتحقق من الفاتورة، فمستند مبسط بلا رمز في ملفه مستند لا يُتحقق منه بالمسح.

لماذا يحدث؟

مرتّبة من الأشيع إلى الأقل شيوعًا — الأرجح أن سببك في الأول أو الثاني.

  • الرمز مرسوم على الإيصال المطبوع أو في ملف PDF، ولم يُكتب في ملف XML قط.
  • معرّف بتهجئة أخرى: qr أو QRCode أو QR_CODE، أو QR تحيط به مسافة أو سطر جديد من قالب منسَّق.
  • صورة الرمز بدل نصّه: ملف PNG مرمَّز Base64 بخاصية mimeCode="image/png" — يسقط هنا بسبب النوع، وغالبًا في BR-CL-KSA-14 أيضًا لأن الصورة أطول بكثير من 1000 محرف.
  • الخلط بين الترميز ونوع المحتوى: mimeCode="base64" بدل text/plain، فيأتي معه BR-KSA-CL-03 لأن base64 ليس نوعًا في قائمة IANA المقبولة.
  • عنصر فارغ تُرك مكانًا للرمز: يُبنى الـ XML ويُرسل قبل أن تعمل خطوة الرمز، أو تفشل تلك الخطوة بصمت — ويأتي معه BR-CL-KSA-14 لأن الطول صفر.
  • القيمة مكتوبة تحت مرجع المستند مباشرة، بلا غلاف cac:Attachment.

كيف تصلحه

4 خطوات، ثم أعد إرسال الفاتورة.

  1. 1
    ابنِ الرمز بعد التوقيع

    الحقل السادس بصمة الفاتورة والسابع توقيعها، فلا يُبنى الرمز قبل الختم. والترتيب: ابنِ المستند، واحسب البصمة، ووقّع، ثم ابنِ الحقول التسعة ورمّزها TLV — وسم ثم طول بالبايت ثم القيمة — ثم Base64، ثم اكتبها في المستند. ولا يفسد ذلك البصمة: كتلة QR تُحذف قبل حسابها، وهي الخطوة الثانية من خطوات BR-KSA-26.

  2. 2
    اكتب الكتلة بشكلها وفي مكانها

    <cac:AdditionalDocumentReference><cbc:ID>QR</cbc:ID><cac:Attachment><cbc:EmbeddedDocumentBinaryObject mimeCode="text/plain">AQ...</cbc:EmbeddedDocumentBinaryObject></cac:Attachment></cac:AdditionalDocumentReference> — بعد مرجعي ICV وPIH وقبل كتلة cac:Signature، كما في أمثلة حزمة الهيئة. وتفاصيل الختم وكتلته في BR-KSA-60.

  3. 3
    النص في الملف والصورة على الورق

    القيمة في XML هي سلسلة Base64 نفسها، لا صورة الرمز ولا رابط إليها، وطولها بين محرف و1000 محرف. الصورة تُرسم من السلسلة عند الطباعة أو في ملف PDF، ولا تدخل الملف.

  4. 4
    افحص الرمز قبل أن تبلّغ

    الصق السلسلة في أداة قراءة رمز QR: تفك TLV وتعرض الحقول وتقول إن كان الرمز للمرحلة الأولى أم الثانية. خمسة حقول فقط تعني رمز المرحلة الأولى: يمرّ من هذه القاعدة ويسقط في فحص المحتوى.

هذا الكود لا يمنع القبول، فالفاتورة الحالية نظامية. صحّح البيانات لتختفي التحذيرات من الفواتير القادمة.

هل يمنعه ZATCA Tools؟

نعم. رمز QR في ZATCA Tools يُبنى في خطوة التوقيع نفسها لكل مستند: ثمانية حقول من بيانات الفاتورة وبصمتها وتوقيعها ومفتاح الشهادة، وحقل تاسع في المستند المبسط وإشعاراته هو توقيع الشهادة، ثم يُرمَّز TLV وBase64 ويُكتب في كتلة معرّفها QR ونوعها text/plain. ولا يُرسَل مستند قبل أن تكتمل الخطوة. والفاتورة الضريبية يُبنى رمزها كذلك قبل الإجازة، ثم تضع الهيئة ختمها ورمزها، ويصبح الملف المختوم الذي تعيده هو نسخة المستند المحفوظة متى تحقّق ختمه وطابقت بصمته ما وُقِّع.

أكواد لها علاقة

أسئلة شائعة

فاتورتي الضريبية بلا رمز QR من عندي — هل تسقط هنا؟ +
لا. الشرط لا يعمل إلا على المستند المبسط. الفاتورة الضريبية تأخذ رمزها من الهيئة عند الإجازة، والإرشادات تقول إن المكلّف يعرض الرمز الذي تعيده الهيئة. والفرق بين المستندين في الفاتورة الضريبية والمبسطة.
رمزي من المرحلة الأولى بخمسة حقول — هل يكفي؟ +
يكفي لهذه القاعدة وحدها، لأنها تفحص وجود الكتلة وشكلها لا ما فيها. لكن المستند المبسط في المرحلة الثانية يحمل رمزًا بتسعة حقول، وحقول الرمز تُفحص في مرحلة أخرى من المدقّق تقارنها بالمستند. تعرف ما في رمزك من أداة قراءة رمز QR.
الرسالة تقول base64Binary، فلماذا لم يسقط رمزي غير المرمَّز هنا؟ +
لأن صحة Base64 يفحصها مخطط XML قبل القواعد، والعنصر من نوع base64Binary في UBL، فالقيمة غير الصالحة تسقط هناك خطأ مخطط. وهذه القاعدة، كما تُنفَّذ، تفحص وجود الكتلة ومعرّفها وأن القيمة غير فارغة وأن نوعها text/plain.
هل أضع صورة الرمز في الملف؟ +
لا. الملف يحمل السلسلة، والصورة للنسخة المطبوعة. صورة PNG في العنصر تسقط هنا بسبب النوع image/png، وفي BR-CL-KSA-14 بسبب الطول في الغالب.
هل يدخل الرمز في بصمة الفاتورة؟ +
لا. كتلة QR تُحذف قبل حساب البصمة، مع كتلة الختم وكتلة cac:Signature — الخطوات في BR-KSA-26. ولهذا يُبنى الرمز بعد التوقيع ولا يغيّر ما وُقِّع عليه.
أصلحت هذه — ولا تريد التالية

ZATCA Tools يبني التوقيع والبصمة والعدّاد والترميز عنك، ويتحقق من البيانات قبل الإرسال. ابدأ مجانًا، وبدون بطاقة ائتمانية.

ابدأ مجانًا

← كل أكواد أخطاء ZATCA