BR-KSA-30كتلة التوقيع لا تحمل طريقة التوقيع المطلوبة
يفحص مطابق ملف XML للفاتورة الإلكترونية في المرحلة الثانية قبل إرساله: تحقق مسبق وفق متطلبات هيئة الزكاة والضريبة والجمارك المنشورة، لا اعتماداً من الهيئة. وتشرح هذه الصفحة قاعدة واحدة هي BR-KSA-30.
خمس عمليات فحص شهرياً في باقة المجان. يُفحص الملف في الذاكرة ولا يُحفظ.
الرسالة كما تنشرها هيئة الزكاة والضريبة والجمارك
[BR-KSA-30]-The document cryptographic stamp (KSA-15) must contain the exact "urn:oasis:names:specification:ubl:dsig:enveloped:xades" value for signature method.
فحوص أخرى تُذكر في التقرير نفسه
BR-KSA-28
[BR-KSA-28]-If the cryptographic stamp (KSA-15) exists in the invoice, this cryptographic stamp (KSA-15) must contain the exact "urn:oasis:names:specification:ubl:signature:1" value for signature information ID.
BR-KSA-60
[BR-KSA-60]-Cryptographic stamp (KSA-15) must exist in simplified tax invoices and associated credit notes and debit notes (KSA-2, position 1 and 2 = 02).
BR-KSA-27
[BR-KSA-27]-The document must contain a QR code (KSA-14), and this code must be base64Binary.
BR-KSA-29
[BR-KSA-29]-If the cryptographic stamp (KSA-15) exists in the invoice, this cryptographic stamp (KSA-15) must contain the exact "urn:oasis:names:specification:ubl:signature:Invoice" value for referenced signature ID and signature ID.
ما الذي يذكره مطابق
مدخل لكل حالة تُذكر فيها هذه القاعدة في التقرير.
صورة القيمة في التقرير
صورة القيمة التي وُجدت — empty وnot_15_digits وما شابههما — لا القيمة نفسها.
كتلة التوقيع لا تحمل طريقة التوقيع المطلوبة
صورة القيمة في التقريرsignature_method_mismatchليست طريقة التوقيع المطلوبة
ما الخلل
المستند فاتورة مبسطة، ولا يحمل أي عنصر cac:Signature فيه عنصر cbc:SignatureMethod قيمته urn:oasis:names:specification:ubl:dsig:enveloped:xades بالضبط. وترفض هيئة الزكاة والضريبة والجمارك المستند بموجب القاعدة BR-KSA-30. وهذه القيمة معرِّف موحد URN ثابت في معيار UBL لا غير: فهي غير محسوبة، وغير مشتقّة من شيء في هذه الفاتورة، ولا صلة لها بالختم المميز ولا بشهادة ولا بمفتاح خاص. وذكر صيغة XAdES المغلَّفة فيها تسمية يطلبها المعيار، لا ادّعاءً عن كيفية توقيع هذا المستند ولا عن وقوع التوقيع أصلاً. يكتبها نظامك حرفياً، والفحص مقارنة صارمة بهذا النص؛ فالمعرِّف الذي غُيِّر جزء منه، والمبتور، والمكتوب بحالة أحرف مختلفة، ومعرِّف الخوارزمية المنقول عن معيار XML-DSig، والمستند الخالي من عنصر cac:Signature أصلاً، كلها تخفق على النحو نفسه. وتجري المقارنة على كل عنصر cac:Signature في المستند مهما عمق موضعه، ويكفي أن تحمل كتلة واحدة القيمة المطلوبة. وهذه القاعدة والقاعدة BR-KSA-29 مستقلة كل منهما عن الأخرى: فالكتلة التي تحمل العنصر cbc:ID صحيحاً ولا تحمل العنصر cbc:SignatureMethod تستدعي هذه وحدها. واقرأ كذلك سكوت القاعدة BR-KSA-60 بحذر: فهي لا تطلب إلا وجود كتلة cac:Signature وألّا تكون خالية، فالكتلة الحاملة لطريقة توقيع خاطئة تجتازها وتُرفض هنا. وتسري القاعدة على الفاتورة المبسطة وإشعاراتها الدائنة والمدينة، أي ما يبدأ رمز نوع معاملة الفاتورة KSA-2 فيه بـ 02.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
اكتب القيمة الثابتة كما هي: العنصر cbc:SignatureMethod داخل العنصر cac:Signature، ونصه urn:oasis:names:specification:ubl:dsig:enveloped:xades بحروفه وحالة أحرفه. ويمكن كتابته من قالب التصدير دون شرط: فهو لا يتغيّر من فاتورة إلى أخرى، ولا يتوقف على تنفيذ خطوة التوقيع، وكتابته لا تختم الفاتورة؛ فالختم نفسه يقع في ext:UBLExtensions وتفحصه القاعدة BR-KSA-28. وفواتير الهيئة المبسطة النموذجية تحمله، وإلى جانبه العنصر cbc:ID بالقيمة urn:oasis:names:specification:ubl:signature:Invoice، وهو موضوع القاعدة المجاورة BR-KSA-29، ويخفق المستند فيها على حدة. والأسباب المعتادة: قالب يُخرج كتلة cac:Signature بالعنصر cbc:ID وحده، إذ يجعل معيار UBL عنصر الطريقة اختيارياً؛ ومكتبة UBL أو XAdES عامة تكتب في هذا العنصر معرِّف خوارزمية خاصاً بها، من فضاء أسماء XML-DSig غالباً؛ وقيمة أُعيدت كتابتها باليد فتصحّف فيها dsig أو xades. أضف العنصر أو صحّحه في قالب التصدير.
أحد مرفقات الفاتورة لا يحمل عنصر الحمولة
صورة القيمة في التقريرpayload_element_missingعنصر الحمولة غير موجود
ما الخلل
القاعدة BR-KSA-30 مكتوبة في ثلاثة شروط، وشرطها الثالث وحده هو المعنيّ بطريقة التوقيع؛ أما الشرطان الأولان فعن المرفقات: إذ تفحص هيئة الزكاة والضريبة والجمارك هذه القاعدة مرة عن كل مرفق cac:AdditionalDocumentReference/cac:Attachment في المستند، عدا مرفق بصمة الفاتورة السابقة الذي تحيله أدواتها إلى فحص آخر، وتشترط أن يحمل كل واحد منها عنصر cbc:EmbeddedDocumentBinaryObject غير فارغ. وهنا مرفق من تلك المرفقات، وهو في الفاتورة المبسطة المعدّة وفق متطلبات الهيئة مرفق رمز الاستجابة السريعة عادةً، لا يحمل عنصر الحمولة أصلاً، فيخفق المستند عند هذا الشرط، ولا تُبلَغ طريقة التوقيع. وترفض الهيئة المستند بموجب القاعدة BR-KSA-30. فليست هذه الملاحظة دليلاً على خلل في كتلة cac:Signature عندك؛ إنما تقول إن مرفقاً ينقصه العنصر الذي تُكتب فيه حمولته. وكانت القاعدة BR-KSA-29 في حزم القواعد السابقة للإصدار 2.0.0 مكتوبة على الشرطين نفسيهما فتذكر الخلل نفسه كذلك؛ أما في الإصدار 3.4.8 الذي تقرؤه حزمة القواعد 2.0.0 فلم تعد تنظر في الحمولة، فلا ترصد هذا الخلل من قاعدتي التوقيع إلا هذه القاعدة، وتذكر قواعد رمز الاستجابة السريعة العنصر نفسه.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
عالج المرفق لا كتلة التوقيع. والبنية مستويان داخل المرجع: عنصر cac:Attachment ثم عنصر cbc:EmbeddedDocumentBinaryObject بداخله، وتكون الحمولة بترميز base64 هي محتواه النصي. والأسباب المعتادة: قالب يكتب المرجع ومعرِّفه من حلقة ويكتب المرفق من حلقة أخرى لم تُنفَّذ، وقيمة تُكتب في نص المرجع نفسه أو في عنصر وصف بدل المرفق، ومستوى تداخل سقط فصار العنصر الثنائي واقعاً مباشرة تحت المرجع. وإن كان تصديرك يكتب إلى جانب مرجع الرمز مرجع مستند خاصاً به، كإشعار تسليم أو عقد، فمرفقه محكوم بهذه القاعدة كذلك؛ فالكتلة التي تُكتب بلا حمولتها لغرض عندك تبلغ هذه القاعدة أيضاً. أما عنصر الحمولة الموجود الفارغ فخلل آخر يُذكر في ملاحظة مستقلة.
حمولة أحد مرفقات الفاتورة فارغة
صورة القيمة في التقريرpayload_emptyالحمولة فارغة
ما الخلل
القاعدة BR-KSA-30 مكتوبة في ثلاثة شروط، وشرطها الثالث وحده هو المعنيّ بطريقة التوقيع؛ أما الشرطان الأولان فعن المرفقات: إذ تفحص هيئة الزكاة والضريبة والجمارك هذه القاعدة مرة عن كل مرفق cac:AdditionalDocumentReference/cac:Attachment في المستند، عدا مرفق بصمة الفاتورة السابقة الذي تحيله أدواتها إلى فحص آخر، وتشترط أن يحمل كل واحد منها عنصر cbc:EmbeddedDocumentBinaryObject غير فارغ. وهنا مرفق من تلك المرفقات، وهو في الفاتورة المبسطة المعدّة وفق متطلبات الهيئة مرفق رمز الاستجابة السريعة عادةً، يحمل عنصر الحمولة ولا شيء فيه، فيخفق المستند عند هذا الشرط، ولا تُبلَغ طريقة التوقيع. وترفض الهيئة المستند بموجب القاعدة BR-KSA-30. وهذا مقيس لا مستنتَج: فإفراغ حمولة رمز الاستجابة السريعة في فاتورة مبسطة مجتازة للفحص يجعل حزمة أدوات التطوير SDK التي تنشرها الهيئة تُخرج القاعدة BR-KSA-30، وترصد قواعد رمز الاستجابة السريعة العنصر نفسه إلى جانبها في الإصدار 3.4.8. فليست هذه الملاحظة دليلاً على خلل في كتلة cac:Signature عندك، والملاحظات التي تعنيك إلى جانبها هي ملاحظات رمز الاستجابة السريعة على العنصر نفسه.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
العنصر يُكتب والقيمة خلفه لا تُكتب، فالربط يُنتج المرفق دون شرط بينما الخطوة التي تملؤه لا تعمل أو لا تُرجع شيئاً. وهذه الخطوة في الفاتورة المبسطة هي مولّد رمز الاستجابة السريعة عادةً: تحقّق من أنه يعمل قبل تسلسل المستند، ومن أنه مفعَّل لنوع المستند هذا. وعالج المولّد أو الربط، لا بحذف العنصر الفارغ: فحذف كتلة الرمز ينقل المستند إلى القاعدة BR-KSA-27 لغياب مرجع رمز الاستجابة السريعة. ولا تحتاج كتلة cac:Signature عندك إلى تغيير من أجل هذه الملاحظة، لكن تأكّد وأنت هناك من أن العنصرين cbc:SignatureMethod وcbc:ID فيها يحملان المعرِّفين الموحدين الثابتين: فهذه القاعدة لا تبلغ شرطها الثالث إلا بعد امتلاء الحمولة، فقد يكون خلف هذه الملاحظة معرِّف خاطئ ينتظر.
الفحص الذي يُنفَّذ
منقول حرفياً من ملفات قواعد التحقق التي تنشرها الهيئة، عند الملف والسطر المذكورين أدناه. والتعبير المُنفَّذ هو ما يُقيَّم على المستند، أما التعبير المذكور في التقرير فهو ما يظهر عند الإخفاق، وهما لا يتطابقان دائماً.
التعبير المُنفَّذ
not(exists(cbc:EmbeddedDocumentBinaryObject) and (cbc:EmbeddedDocumentBinaryObject) != '' and (//cac:Signature/cbc:SignatureMethod) = 'urn:oasis:names:specification:ubl:dsig:enveloped:xades')
التعبير المذكور في التقرير
exists(cbc:EmbeddedDocumentBinaryObject) and (cbc:EmbeddedDocumentBinaryObject) != '' and (//cac:Signature/cbc:SignatureMethod) = 'urn:oasis:names:specification:ubl:dsig:enveloped:xades'
كما يرد في الإصدار 3.4.8 من حزمة أدوات التطوير SDK التي تنشرها الهيئة: النسخة المقتبسة هنا هي الملف الذي يتضمنه ذلك الإصدار بايتاً ببايت. والتاريخ في اسم الملف هو الاسم الذي تعطيه الهيئة للملف، أما القواعد فيه فهي قواعد الإصدار 3.4.8.
مثال عملي
مستند اصطناعي من مجموعة الاختبار المقيسة تُرصد عليه هذه القاعدة، تُعرض منه الأسطر التي يختلف فيها عن مستند اجتاز الفحص. ولا يذكر تقرير مطابق سوى صورة القيمة، لا القيمة نفسها.