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
ابنِ الرمز بعد التوقيع
الحقل السادس بصمة الفاتورة والسابع توقيعها، فلا يُبنى الرمز قبل الختم. والترتيب: ابنِ المستند، واحسب البصمة، ووقّع، ثم ابنِ الحقول التسعة ورمّزها TLV — وسم ثم طول بالبايت ثم القيمة — ثم Base64، ثم اكتبها في المستند. ولا يفسد ذلك البصمة: كتلة QR تُحذف قبل حسابها، وهي الخطوة الثانية من خطوات BR-KSA-26.
-
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
النص في الملف والصورة على الورق
القيمة في XML هي سلسلة Base64 نفسها، لا صورة الرمز ولا رابط إليها، وطولها بين محرف و1000 محرف. الصورة تُرسم من السلسلة عند الطباعة أو في ملف PDF، ولا تدخل الملف.
-
4
افحص الرمز قبل أن تبلّغ
الصق السلسلة في أداة قراءة رمز QR: تفك TLV وتعرض الحقول وتقول إن كان الرمز للمرحلة الأولى أم الثانية. خمسة حقول فقط تعني رمز المرحلة الأولى: يمرّ من هذه القاعدة ويسقط في فحص المحتوى.
هذا الكود لا يمنع القبول، فالفاتورة الحالية نظامية. صحّح البيانات لتختفي التحذيرات من الفواتير القادمة.
هل يمنعه ZATCA Tools؟
نعم. رمز QR في ZATCA Tools يُبنى في خطوة التوقيع نفسها لكل مستند: ثمانية حقول من بيانات الفاتورة وبصمتها وتوقيعها ومفتاح الشهادة، وحقل تاسع في المستند المبسط وإشعاراته هو توقيع الشهادة، ثم يُرمَّز TLV وBase64 ويُكتب في كتلة معرّفها QR ونوعها text/plain. ولا يُرسَل مستند قبل أن تكتمل الخطوة. والفاتورة الضريبية يُبنى رمزها كذلك قبل الإجازة، ثم تضع الهيئة ختمها ورمزها، ويصبح الملف المختوم الذي تعيده هو نسخة المستند المحفوظة متى تحقّق ختمه وطابقت بصمته ما وُقِّع.
أكواد لها علاقة
BR-KSA-60
تحذير
BR-CL-KSA-14
BR-KSA-CL-03
BR-KSA-26
تحذير
أسئلة شائعة
فاتورتي الضريبية بلا رمز QR من عندي — هل تسقط هنا؟ +
رمزي من المرحلة الأولى بخمسة حقول — هل يكفي؟ +
الرسالة تقول base64Binary، فلماذا لم يسقط رمزي غير المرمَّز هنا؟ +
base64Binary في UBL، فالقيمة غير الصالحة تسقط هناك خطأ مخطط. وهذه القاعدة، كما تُنفَّذ، تفحص وجود الكتلة ومعرّفها وأن القيمة غير فارغة وأن نوعها text/plain.هل أضع صورة الرمز في الملف؟ +
image/png، وفي BR-CL-KSA-14 بسبب الطول في الغالب.هل يدخل الرمز في بصمة الفاتورة؟ +
cac:Signature — الخطوات في BR-KSA-26. ولهذا يُبنى الرمز بعد التوقيع ولا يغيّر ما وُقِّع عليه.ZATCA Tools يبني التوقيع والبصمة والعدّاد والترميز عنك، ويتحقق من البيانات قبل الإرسال. ابدأ مجانًا، وبدون بطاقة ائتمانية.
ابدأ مجانًا