Cryptographic stamp (KSA-15) must exist in simplified tax invoices and associated credit notes and debit notes (KSA-2, position 1 and 2 = 02).
ماذا يعني هذا؟
من يختم ماذا: الفاتورة الضريبية (B2B) تُرسل إلى الهيئة للإجازة، فتضيف الهيئة ختمها ورمز QR وتعيد الملف مختومًا. أما المبسطة وإشعاراتها فلا إجازة لها: الإرشادات التفصيلية للهيئة تنصّ على أن يختمها حل الفوترة لدى المكلّف بشهادة الختم (CSID) التي أصدرتها له الهيئة، وأن يضع فيها رمز QR بتسعة حقول، ثم يبلّغ بها خلال 24 ساعة. ولذلك تعمل القاعدة على المستند الذي يبدأ ترميز نوع معاملته (KSA-2) بـ 02 وحده — الفاتورة المبسطة وإشعارها الدائن والمدين — وبنية هذا الترميز في BR-KSA-06.
وما يُفحص بالضبط: الشرط المنفَّذ في حزمة الهيئة أن يوجد في المستند عنصر cac:Signature وألا يكون فارغًا. هذه كتلة الإشارة إلى التوقيع في UBL، وتحمل قيمتين ثابتتين: cbc:ID بالقيمة urn:oasis:names:specification:ubl:signature:Invoice، وcbc:SignatureMethod بالقيمة urn:oasis:names:specification:ubl:dsig:enveloped:xades. أما الختم نفسه — توقيع XAdES بشهادته وبصمة الفاتورة وقيمة التوقيع — فمكانه كتلة ext:UBLExtensions في أول الملف، وهذه القاعدة لا تفتحها.
فالختم يتوزّع على أكثر من فحص. قواعد مجاورة تتحقق من القيم الثابتة بعينها: BR-KSA-28 لمعرّف معلومات التوقيع ودرجتها خطأ، وBR-KSA-29 للمعرّف المُشار إليه ودرجتها تحذير، وBR-KSA-30 لطريقة التوقيع ودرجتها خطأ. وصحة التوقيع نفسه — هل البصمة بصمة هذا المستند، وهل التوقيع يتحقق بالشهادة — تُفحص في مرحلة مستقلة من مدقّق الهيئة غير هذه القواعد، ورسائلها من قبيل wrong invoice hashing وwrong signature Value.
ودرجة هذا الكود في الحزمة تحذير، فلا تقرأها إذنًا بالإرسال بلا ختم: الإرشادات تشترط الختم على المستند المبسط، والتوقيع الذي يحمله رمز QR في حقله السابع لا وجود له ما لم يُختم المستند. والختم أيضًا حلقة في السلسلة: البصمة التي يوقّعها هي البصمة التي يحملها المستند التالي في حقل البصمة السابقة.
لماذا يحدث؟
مرتّبة من الأشيع إلى الأقل شيوعًا — الأرجح أن سببك في الأول أو الثاني.
- الظن أن الهيئة تختم كل فاتورة كما تختم الفاتورة الضريبية، فتُرسل المبسطة إلى واجهة التبليغ غير مختومة.
- إرسال الملف الذي كان قبل التوقيع: دالة التوقيع تعيد مستندًا جديدًا، والكود يرسل المتغيّر الذي يحمل القديم.
-
خطوة البصمة تحذف
cac:Signature— وهذا صحيح في حساب البصمة — ثم تُحفظ النسخة المحذوف منها على أنها المستند النهائي، فيخرج الملف بختم في أوله وبلا الكتلة التي تبحث عنها القاعدة. - توقيع الفواتير دون الإشعارات: الإشعار الدائن أو المدين المبسط يمرّ في مسار برمجي آخر لا يمرّ بالموقِّع.
-
عنصر
<cac:Signature/>فارغ في القالب، يُفترض أن يملأه الموقِّع، ولا يملؤه.
كيف تصلحه
4 خطوات، ثم أعد إرسال الفاتورة.
-
1
اختم المستند المبسط في نظامك قبل أن يغادر
بالمفتاح الخاص لشهادة الختم التي أصدرتها الهيئة لوحدة الفوترة التي تصدر المستند: احسب البصمة، ووقّعها، وابنِ كتلة الختم، ثم ابنِ رمز QR من البصمة والتوقيع، وبعدها فقط سلّم المستند للعميل وبلّغ به الهيئة خلال 24 ساعة. وخطوات حساب البصمة الست في BR-KSA-26.
-
2
ضع الكتلتين كلتيهما
كتلة
ext:UBLExtensionsأول عنصر في المستند، وفيها معلومات التوقيع وتوقيع XAdES. وكتلةcac:Signatureفي جسم المستند بعد مراجع المستندات الإضافية (ICV ثم PIH ثم QR) وقبل طرف البائع:<cac:Signature><cbc:ID>urn:oasis:names:specification:ubl:signature:Invoice</cbc:ID><cbc:SignatureMethod>urn:oasis:names:specification:ubl:dsig:enveloped:xades</cbc:SignatureMethod></cac:Signature>. والقيمتان ثابتتان حرفًا بحرف، وتفحصهماBR-KSA-29وBR-KSA-30. -
3
أرسل ناتج التوقيع كما هو
البصمة تُحسب على المستند بعد تقنينه، والتقنين يحفظ المسافات والأسطر داخل المحتوى. فإعادة تنسيق الملف بعد التوقيع — مسافات بادئة أو أسطر جديدة — تغيّر ما وُقِّع عليه، فيسقط التحقق من التوقيع وإن بقيت الكتل كلها في مكانها. خزّن النص الخارج من الموقِّع، وأرسله بعينه.
-
4
افحص المستند قبل أن تبلّغ به
ثلاث علامات تكفي:
ds:SignatureValueغير فارغ داخلext:UBLExtensions، وكتلةcac:Signatureبقيمتيها، ورمز QR يحمل حقول المرحلة الثانية. والأخير تقرؤه أداة قراءة رمز QR فتخبرك إن كان رمز المرحلة الأولى أم الثانية.
هذا الكود لا يمنع القبول، فالفاتورة الحالية نظامية. صحّح البيانات لتختفي التحذيرات من الفواتير القادمة.
هل يمنعه ZATCA Tools؟
نعم. كل مستند يصدره ZATCA Tools يُوقَّع قبل أن يغادر — الفاتورة المبسطة وإشعاراتها، والفاتورة الضريبية كذلك قبل إرسالها للإجازة — داخل المعاملة نفسها التي يُحجز فيها العدّاد والبصمة السابقة، بشهادة المنشأة أو بشهادة جهاز الفرع. والمكتبة تكتب في الخطوة نفسها كتلة الختم في أول الملف وكتلة cac:Signature بقيمتيها ورمز QR، والملف المُرسَل إلى الهيئة هو ناتج التوقيع نفسه دون إعادة تنسيق. وإن تعذّر التوقيع توقّف الإصدار ولم يُرسَل شيء.
أكواد لها علاقة
BR-KSA-27
تحذير
BR-KSA-28
BR-KSA-29
BR-KSA-30
BR-KSA-26
تحذير
BR-KSA-06
يرفض الفاتورة
أسئلة شائعة
فاتورتي الضريبية لا تحمل ختمي — هل ينطبق عليها هذا الكود؟ +
02. الفاتورة الضريبية تختمها الهيئة عند الإجازة وتعيد الملف مختومًا مع رمز QR، وذلك الملف هو ما تحفظه وتشاركه مع المشتري. والفرق بين المستندين في الفاتورة الضريبية والمبسطة.درجته تحذير — أيعني ذلك أن الختم اختياري؟ +
cac:Signature. أما الختم فتشترطه الإرشادات على كل مستند مبسط، وتُفحص صحته في مرحلة أخرى من المدقّق، ورمز QR لا يحمل توقيع الفاتورة من غيره. لا تبنِ على درجة التحذير.ختمتُ المستند والكود ما زال يظهر — لماذا؟ +
cac:Signature لا عن توقيع XAdES. افتح الملف الذي أُرسل فعلًا: إن وجدت ext:UBLExtensions في أوله ولم تجد cac:Signature في جسمه فالموقِّع لم يضعها أو حذفتها خطوة البصمة. وإن لم تجد أيًّا منهما فالمُرسَل هو الملف الذي كان قبل التوقيع.هل يُختم الإشعار الدائن المبسط أيضًا؟ +
02. والإشعار يستهلك عدّادًا وبصمة كالفاتورة، فهو حلقة في السلسلة نفسها. وخطواته في كيف تصدر إشعارًا دائنًا.بأي شهادة أختم؟ +
ZATCA Tools يبني التوقيع والبصمة والعدّاد والترميز عنك، ويتحقق من البيانات قبل الإرسال. ابدأ مجانًا، وبدون بطاقة ائتمانية.
ابدأ مجانًا