BR-KSA-27الفاتورة المبسطة لا تحمل مرجع رمز الاستجابة السريعة
يفحص مطابق ملف XML للفاتورة الإلكترونية في المرحلة الثانية قبل إرساله: تحقق مسبق وفق متطلبات هيئة الزكاة والضريبة والجمارك المنشورة، لا اعتماداً من الهيئة. وتشرح هذه الصفحة قاعدة واحدة هي BR-KSA-27.
خمس عمليات فحص شهرياً في باقة المجان. يُفحص الملف في الذاكرة ولا يُحفظ.
الرسالة كما تنشرها هيئة الزكاة والضريبة والجمارك
[BR-KSA-27]-The document must contain a QR code (KSA-14), and this code must be base64Binary.
فحوص أخرى تُذكر في التقرير نفسه
BR-CL-KSA-14
[KSA-14]Field character limit for QR Code field has been exceeded. The maximum character limit for this field is 1000 characters.
ما الذي يذكره مطابق
مدخل لكل حالة تُذكر فيها هذه القاعدة في التقرير.
صورة القيمة في التقرير
صورة القيمة التي وُجدت — empty وnot_15_digits وما شابههما — لا القيمة نفسها.
الفاتورة المبسطة لا تحمل مرجع رمز الاستجابة السريعة
صورة القيمة في التقريرreference_missingالمرجع غير موجود
ما الخلل
لا يحمل المستند أي عنصر cac:AdditionalDocumentReference قيمة cbc:ID فيه هي QR، فلا رمز استجابة سريعة فيه أصلاً. وترصد هيئة الزكاة والضريبة والجمارك ذلك على الفاتورة المبسطة بموجب القاعدة BR-KSA-27 التي تشترط أن يحمل المستند رمز استجابة سريعة KSA-14؛ وتصنّف الهيئة هذه القاعدة تحذيراً لا خطأً في أداة الفحص الحالية لديها، فالتحذير وحده لا يؤدي إلى رفض المستند. وتُقارن قيمة المعرِّف بعد تسوية المسافات، فالمسافات حول QR ليست موضع الخلل؛ لكنها تُقارن حرفياً فيما عدا ذلك، فالمرجع المعنون qr بحروف صغيرة أو QRCODE ليس المرجع الذي تبحث عنه القاعدة ويُقرأ غائباً. وتسري القاعدة على الفواتير المبسطة وحدها؛ أما الفاتورة الضريبية التي لا تحمل رمز استجابة سريعة فلا تُذكر بموجبها.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
يُكتب رمز الاستجابة السريعة في كتلة مرجع مستند خاصة به: عنصر cac:AdditionalDocumentReference قيمة cbc:ID فيه هي النص QR حرفياً، ويحمل بداخله العنصر cac:Attachment/cbc:EmbeddedDocumentBinaryObject الذي تُكتب فيه الحمولة بترميز base64. والأسباب المعتادة: قالب تصدير كُتب للفواتير الضريبية وأُعيد استعماله للمبسطة دون أن تُضاف إليه كتلة الرمز، ومولّد رمز يعمل للنسخة المطبوعة ولا يعمل لملف XML، وربط لا يكتب الكتلة إلا إذا أعاد المولّد قيمة ويتجاوزها بصمت إذا لم يُعِد شيئاً. وانظر إلى الكتل المجاورة وأنت هناك: فالعنصر نفسه يحمل قيمة عدّاد الفواتير ICV وبصمة الفاتورة السابقة PIH تحت معرِّفات أخرى، فالمستند الذي يحملهما ولا يحمل QR يعني عادةً أن فرع الرمز وحده هو الناقص من الربط.
مرجع رمز الاستجابة السريعة لا يحمل عنصر الحمولة
صورة القيمة في التقريرpayload_element_missingعنصر الحمولة غير موجود
ما الخلل
يحمل المستند عنصر cac:AdditionalDocumentReference قيمة cbc:ID فيه هي QR، لكن ليس بداخله عنصر cac:Attachment/cbc:EmbeddedDocumentBinaryObject؛ فكتلة المرجع موجودة والعنصر الذي يحمل الرمز غير موجود. وترصد هيئة الزكاة والضريبة والجمارك الفاتورة المبسطة في هذه الحال بموجب القاعدة BR-KSA-27، وتصنّف هذه القاعدة تحذيراً لا خطأً، فالتحذير وحده لا يؤدي إلى رفض المستند. وإن حمل المستند أكثر من مرجع بالمعرِّف QR فيكفي أن يحمل أحدها عنصر الحمولة، فلا تُذكر هذه الملاحظة إلا إذا خلا منه كل واحد منها.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
راجع بنية الكتلة التي يكتبها التصدير: مستويان داخل المرجع، عنصر cac:Attachment ثم عنصر cbc:EmbeddedDocumentBinaryObject بداخله، وتكون الحمولة بترميز base64 هي المحتوى النصي للعنصر الثاني. والأسباب المعتادة: قالب يكتب المرجع ومعرِّفه من حلقة ويكتب المرفق من حلقة أخرى لم تُنفَّذ، وقيمة الرمز تُكتب في نص المرجع نفسه أو في عنصر وصف بدل المرفق، ومستوى تداخل سقط فصار العنصر الثنائي واقعاً مباشرة تحت المرجع. أما عنصر الحمولة الموجود الفارغ فخلل آخر يُذكر في ملاحظة مستقلة.
لا يحمل أي مرجع مستند في هذه الفاتورة حمولة غير فارغة
صورة القيمة في التقريرall_payloads_emptyحمولات مراجع المستند كلها فارغة
ما الخلل
هذه ليست ملاحظة الحمولة الفارغة لرمز الاستجابة السريعة، ولا ترصدها إلا حزم القواعد السابقة للإصدار 2.0.0. ففي الإصدار 3.0.8 من حزمة أدوات التطوير SDK التي تنشرها هيئة الزكاة والضريبة والجمارك لم يكن الشرط الذي أنتجها من شروط القاعدة BR-KSA-27 مقصوراً على مرجع الرمز: إذ كانت الهيئة تفحصه على كل عنصر cac:AdditionalDocumentReference في المستند، مقارنةً عامة في XPath، فيتحقّق بمجرد أن يحمل أحد تلك المراجع حمولة ليست نصاً فارغاً، ولا يخفق إلا إذا لم يحمل أي مرجع مستند في المستند كله عنصر cac:Attachment/cbc:EmbeddedDocumentBinaryObject غير فارغ. وكانت حمولة بصمة الفاتورة السابقة PIH غير الفارغة تكفي وحدها لتحقيقه ولو كانت حمولة الرمز إلى جانبها فارغة. أما في الإصدار 3.4.8 الذي تقرؤه حزمة القواعد 2.0.0 فالشروط نفسها تقرأ حمولة مرجع الرمز ذاته، فتُرصد حمولة الرمز الفارغة بوصفها عنصر رمز الاستجابة السريعة الفارغ، تحذيراً، فلا يحمل هذه الملاحظة تقرير صادر عن الحزمة 2.0.0.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
ولأن الفحص يمتد إلى المستند كله فبلوغه يعني عادةً أن المرفقات تُكتب عناصر فارغة جميعاً، لا أن مولّداً واحداً أخفق. تحقّق من أن الخطوة التي تملأ العنصر cac:Attachment/cbc:EmbeddedDocumentBinaryObject تُنفَّذ قبل تسلسل المستند، وأنها تُنفَّذ لكل كتلة مرجع يحملها المستند: رمز الاستجابة السريعة، وبصمة الفاتورة السابقة PIH في الفاتورة المبسطة. والربط الذي يُخرج بنية الكتلة دون شرط ثم يملؤها من قيمة خالية أو من نص فارغ ينتج هذه الحال بعينها. عالج المولّد أو الربط في وحدة الفوترة الإلكترونية، لا بحذف الكتل الفارغة: فحذف كتلة الرمز ينقل المستند إلى ملاحظة غياب مرجع رمز الاستجابة السريعة.
حمولة رمز الاستجابة السريعة غير معلَنة بنوع المحتوى text/plain
صورة القيمة في التقريرno_text_plain_payloadلا حمولة معلَنة بنوع المحتوى text/plain
ما الخلل
تشترط هيئة الزكاة والضريبة والجمارك أن يُعلَن رمز الاستجابة السريعة بنوع المحتوى text/plain، وهو ما تحمله السمة mimeCode على العنصر cac:Attachment/cbc:EmbeddedDocumentBinaryObject داخل مرجع الرمز. وفي الإصدار 3.4.8 الذي تقرؤه حزمة القواعد 2.0.0 يقرأ هذا الشرط حمولة مرجع الرمز نفسه؛ أما الإصدارات السابقة فكانت تنظر في كل مرجع مستند، ويتحقّق الشرط عندها إن أُعلن أي مرفق بالنوع text/plain، ومنه مرفق بصمة الفاتورة السابقة. وتُقارن القيمة بعد تسوية المسافات، وحرفياً فيما عدا ذلك: فالمطلوب text/plain، والقيمتان application/octet-stream وbase64Binary والسمة الفارغة وغياب السمة أصلاً كلها تخفق. وترصد الهيئة الفاتورة المبسطة بموجب القاعدة BR-KSA-27، وتصنّف هذه القاعدة تحذيراً لا خطأً، فالتحذير وحده لا يؤدي إلى رفض المستند.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
موضع السمة هو العنصر الذي يحمل الحمولة نفسه لا العنصر cac:Attachment الذي فوقه: السمة mimeCode بالقيمة text/plain على العنصر cbc:EmbeddedDocumentBinaryObject. ولا تستنتج القيمة من محتوى الحمولة: فالحمولة نص بترميز base64 لتسلسل من البايتات، ولذلك تبدو القيمة application/octet-stream أدقّ الاثنتين وتُرصد عليها الملاحظة؛ فالمطلوب هو text/plain لا ما يصفه المحتوى. والأسباب المعتادة: أداة تسلسل تكتب المرفق عبر دالة عامة للمرفقات الثنائية تحمل نوعها الافتراضي، وسمة تُقرأ من جدول إدارة المستندات، وقالب يغفلها. وقارن ذلك بالفاتورة المبسطة النموذجية المنشورة من الهيئة، فهي تحمل السمة mimeCode بالقيمة text/plain على هذا العنصر.
عنصر رمز الاستجابة السريعة فارغ في فاتورة مبسطة
صورة القيمة في التقريرpayload_emptyالحمولة فارغة
ما الخلل
في فاتورة مبسطة توجد كتلة مرجع رمز الاستجابة السريعة (كتلة cac:AdditionalDocumentReference التي معرّفها QR)، لكن العنصر cbc:EmbeddedDocumentBinaryObject فيها لا يحمل شيئاً، أو يحمل مسافات فقط. والقاعدة BR-KSA-27 تشترط رمز الاستجابة السريعة في الفاتورة المبسطة. وتصنّف الهيئة هذه القاعدة تحذيراً لا خطأً، فالتحذير وحده لا يؤدي إلى رفض المستند. وترصد القاعدة BR-CL-KSA-14 العنصر الذي لا يحمل أي محرف خطأً.
ما الذي تتحقق منه في وحدة الفوترة الإلكترونية
ولّد رمز الاستجابة السريعة قبل كتابة XML واكتب حمولته بترميز base64 في العنصر. والعنصر الفارغ يعني في العادة أن التصدير يجري قبل خطوة توليد الرمز، أو أن الخطوة أخفقت ومضى التصدير مع ذلك.
الفحص الذي يُنفَّذ
منقول حرفياً من ملفات قواعد التحقق التي تنشرها الهيئة، عند الملف والسطر المذكورين أدناه. والتعبير المُنفَّذ هو ما يُقيَّم على المستند، أما التعبير المذكور في التقرير فهو ما يظهر عند الإخفاق، وهما لا يتطابقان دائماً.
التعبير المُنفَّذ
not((cac:AdditionalDocumentReference[normalize-space(cbc:ID) = 'QR'] and exists(cac:AdditionalDocumentReference[normalize-space(cbc:ID) = 'QR']/cac:Attachment/cbc:EmbeddedDocumentBinaryObject) and (normalize-space(cac:AdditionalDocumentReference[cbc:ID = 'QR']/cac:Attachment/cbc:EmbeddedDocumentBinaryObject) != '') and (cac:AdditionalDocumentReference[cbc:ID = 'QR']/cac:Attachment/cbc:EmbeddedDocumentBinaryObject[normalize-space(@mimeCode) = 'text/plain'])) )
التعبير المذكور في التقرير
(cac:AdditionalDocumentReference[normalize-space(cbc:ID) = 'QR'] and exists(cac:AdditionalDocumentReference/cac:Attachment/cbc:EmbeddedDocumentBinaryObject) and (cac:AdditionalDocumentReference/cac:Attachment/cbc:EmbeddedDocumentBinaryObject) != '' and (cac:AdditionalDocumentReference/cac:Attachment/cbc:EmbeddedDocumentBinaryObject[normalize-space(@mimeCode) = 'text/plain']))
كما يرد في الإصدار 3.4.8 من حزمة أدوات التطوير SDK التي تنشرها الهيئة: النسخة المقتبسة هنا هي الملف الذي يتضمنه ذلك الإصدار بايتاً ببايت. والتاريخ في اسم الملف هو الاسم الذي تعطيه الهيئة للملف، أما القواعد فيه فهي قواعد الإصدار 3.4.8.
مثال عملي
مستند اصطناعي من مجموعة الاختبار المقيسة تُرصد عليه هذه القاعدة، تُعرض منه الأسطر التي يختلف فيها عن مستند اجتاز الفحص. ولا يذكر تقرير مطابق سوى صورة القيمة، لا القيمة نفسها.