عندما تتحدث هيئة الزكاة والضريبة والجمارك (زاتكا) عن «الفاتورة الإلكترونية»، فهي لا تقصد ملف PDF مصمّمًا بشكل جميل ولا صورة ممسوحة ضوئيًا. المقصود ملف بصيغة محددة تقنيًا، يحمل حقولًا إلزامية، ورمز استجابة سريعة (QR) مبنيًا بطريقة معيّنة، وتوقيعًا تشفيريًا يثبت أن الفاتورة لم تُعدَّل بعد إصدارها. هذا الجانب التقني هو ما يفصل بين منشأة جاهزة للربط وأخرى تُرفض فواتيرها في البوابة.
في هذا الدليل نفكّك الجانب التقني للفاتورة الإلكترونية السعودية: ما هو ملف XML المبني على معيار UBL 2.1، وماذا يحتوي رمز QR فعليًا، وكيف تترابط عناصر مثل UUID وICV وPIH والختم التشفيري. الهدف أن تفهم ما يحدث خلف الكواليس حتى لو لم تكن مطوّرًا، وأن تعرف ما الذي يجب أن يوفّره لك نظام الفوترة الذي تستخدمه. وإن كنت تبدأ من الصفر، فابدأ من الدليل الشامل: ما هي الفوترة الإلكترونية في السعودية (زاتكا).
لماذا تهتم زاتكا بالشكل التقني للفاتورة؟
الهدف من الفوترة الإلكترونية ليس تحويل الورق إلى شاشة، بل جعل بيانات الفواتير قابلة للقراءة الآلية والتحقق منها. حين تكون الفاتورة ملفًا منظمًا بصيغة موحّدة، يمكن للهيئة أن تتحقق من صحتها تلقائيًا، وأن تطابق ضريبة المخرجات لدى البائع مع ضريبة المدخلات لدى المشتري، وأن تكتشف الفواتير الوهمية أو المعدَّلة لاحقًا.
ولهذا يقوم النظام على ثلاث ركائز تقنية:
- صيغة موحّدة: ملف XML مبني على معيار UBL 2.1 ومتوافق في بنيته مع المعيار الأوروبي EN 16931، بحيث تحمل كل فاتورة الحقول نفسها بالترتيب نفسه.
- سلامة البيانات: بصمة تجزئة (Hash) وختم تشفيري يثبتان أن محتوى الفاتورة لم يُمس بعد إصدارها.
- التسلسل: عدّاد فواتير يربط كل فاتورة بالفاتورة السابقة، بحيث لا يمكن حذف فاتورة من المنتصف دون أن ينكسر التسلسل.
هذه الركائز الثلاث هي ما يحوّل «برنامج فوترة» عاديًا إلى حل متوافق مع متطلبات المرحلة الثانية.
ما المقصود بـ XML وUBL 2.1؟
XML صيغة نصية لتنظيم البيانات داخل وسوم (Tags) يفهمها الحاسوب بدقة. فبدلًا من أن تكتب «الإجمالي: 1,150 ريال» في خانة على الورق، يحمل الملف عنصرًا محددًا يقول إن قيمة الإجمالي شاملة الضريبة هي 1150.00 وإن العملة هي SAR. لا مجال للتأويل ولا لاختلاف التنسيق بين منشأة وأخرى.
أما UBL (اختصار Universal Business Language) فهو معيار عالمي يحدد أسماء هذه العناصر وترتيبها في المستندات التجارية: الفواتير، الإشعارات الدائنة، الإشعارات المدينة وغيرها. واعتماد زاتكا على UBL 2.1 يعني أن الفاتورة السعودية تتحدث «لغة» معروفة دوليًا، مع إضافات محلية تخص السوق السعودي.
ما الذي يحمله ملف XML عادةً؟
- بيانات البائع: الاسم، العنوان الوطني، ورقم التسجيل في ضريبة القيمة المضافة.
- بيانات المشتري: وهي مطلوبة بتفصيل أكبر في الفاتورة الضريبية القياسية (B2B) مقارنة بالمبسطة (B2C).
- نوع المستند: فاتورة، أو إشعار دائن، أو إشعار مدين — مع ذكر سبب الإصدار في حالة الإشعارات.
- تاريخ الإصدار ووقته بصيغة زمنية قياسية.
- بنود الفاتورة: الوصف، الكمية، سعر الوحدة، الخصم، فئة الضريبة ونسبتها.
- الإجماليات: الإجمالي قبل الضريبة، ومقدار ضريبة القيمة المضافة، والإجمالي شامل الضريبة.
- الحقول التقنية: المعرّف الفريد UUID، وعدّاد الفواتير ICV، وبصمة الفاتورة السابقة PIH، ورمز QR.
وللتذكير: النسبة الأساسية لضريبة القيمة المضافة في المملكة هي 15%، مع حالات إعفاء أو نسبة صفرية لبعض التوريدات. أما الفرق العملي بين نوعَي الفاتورة فيشرحه بالتفصيل مقال الفاتورة الضريبية المبسطة مقابل القياسية.
العناصر التقنية التي تربط الفواتير ببعضها
أربعة عناصر تتكرر في كل نقاش تقني عن فواتير زاتكا، وفهمها يوفّر عليك ساعات من الحيرة:
UUID — المعرّف الفريد
رقم فريد يُولَّد لكل فاتورة ولا يتكرر أبدًا. وهو مختلف عن رقم الفاتورة التسلسلي الذي يراه العميل؛ فرقم الفاتورة للاستخدام التجاري، أما UUID فللتعرّف الآلي على المستند داخل الأنظمة.
ICV — عدّاد الفواتير
رقم متسلسل يزيد بمقدار واحد مع كل فاتورة تصدرها الوحدة المصدِّرة. ووظيفته إثبات عدم وجود فجوات: فلو حُذفت فاتورة أو أُصدرت خارج النظام، سينكشف الأمر عند مراجعة التسلسل.
PIH — بصمة الفاتورة السابقة
كل فاتورة تحمل بصمة تجزئة (Hash) للفاتورة التي سبقتها، فتتكوّن سلسلة مترابطة تشبه في منطقها سلاسل الكتل. وتعديل فاتورة قديمة يكسر البصمة في كل ما يليها، ما يجعل التلاعب مكشوفًا. أما أول فاتورة في السلسلة فتستخدم قيمة ابتدائية محددة في الدليل الفني.
الختم التشفيري وشهادة CSID
قبل أن تبدأ الإصدار في المرحلة الثانية، يُسجَّل حل الفوترة لديك في منصة «فاتورة» عبر إرسال طلب توقيع شهادة (CSR) والحصول على شهادة ختم تشفيري (CSID). هذه الشهادة هي هوية جهازك أو نظامك أمام الهيئة، وبها يُختم محتوى الفاتورة ختمًا إلكترونيًا يمكن التحقق منه لاحقًا. وتفاصيل خطوات الربط والتهيئة تجدها في مقال متطلبات المرحلة الثانية وموجات الربط.
رمز QR: ماذا يحتوي فعليًا؟
يظن كثيرون أن رمز QR على الفاتورة يفتح رابطًا لموقع ما. والحقيقة مختلفة: فالرمز في فواتير زاتكا يحمل البيانات نفسها مُشفّرة داخله بصيغة تُعرف بـ TLV (اختصار Tag-Length-Value)، ثم تُرمَّز النتيجة بصيغة Base64. أي أن قارئ الرمز يستخرج البيانات مباشرة من داخله دون اتصال بالإنترنت.
ومعنى TLV بسيط: لكل حقل ثلاثة أجزاء — رقم يعرّف نوع الحقل (Tag)، ثم طول القيمة بالبايت (Length)، ثم القيمة نفسها (Value). وتُرصّ الحقول واحدًا تلو الآخر لتكوّن سلسلة واحدة.
الحقول الخمسة الأساسية
منذ المرحلة الأولى (مرحلة الإصدار)، يجب أن يحمل رمز QR خمسة حقول على الأقل:
- اسم البائع كما هو مسجّل رسميًا.
- رقم التسجيل في ضريبة القيمة المضافة الخاص بالبائع.
- الطابع الزمني لإصدار الفاتورة (التاريخ والوقت بصيغة قياسية).
- إجمالي الفاتورة شاملًا ضريبة القيمة المضافة.
- مقدار ضريبة القيمة المضافة في الفاتورة.
ما الذي يُضاف في المرحلة الثانية؟
مع مرحلة الربط والتكامل، يتوسّع محتوى الرمز في الفواتير المبسطة ليشمل عناصر تتيح التحقق التشفيري من الفاتورة، ومنها بصمة التجزئة لملف XML، وقيمة الختم الإلكتروني، والمفتاح العام للشهادة، إضافة إلى ختم الهيئة على ذلك المفتاح. وبهذه الإضافات يستطيع تطبيق التحقق أن يؤكد أن الفاتورة صادرة من نظام مسجّل وأن محتواها لم يتغيّر.
وعمليًا يعني هذا أمرين: أن الرمز يصبح أطول وأكثر كثافة بصريًا، وأن توليده لم يعد شيئًا يمكن ارتجاله في جدول بيانات — فهو يحتاج إلى تنفيذ دقيق لخطوات التجزئة والختم بالترتيب الصحيح.
المقاصة والإبلاغ: مساران مختلفان لملف XML
لا تُعامَل كل الفواتير بالطريقة نفسها بعد توليدها:
- الفاتورة الضريبية القياسية (B2B وB2G): تمر بمسار المقاصة (Clearance). فيُرسل ملف XML إلى الهيئة قبل تسليمه للمشتري، وتعيده الهيئة مختومًا بعد التحقق. والفاتورة المعتمدة قانونًا هي النسخة التي أُجيزت.
- الفاتورة الضريبية المبسطة (B2C): تُسلَّم للمشتري فورًا عند البيع، ثم تُبلَّغ للهيئة خلال مهلة قصيرة محددة تُحسب من لحظة الإصدار.
والفارق مهم عند اختيار النظام: فمتجر التجزئة يحتاج إصدارًا فوريًا لا يتوقف حتى لو انقطع الاتصال مؤقتًا، بينما شركة الخدمات التي تتعامل مع منشآت أخرى تحتاج مسار مقاصة موثوقًا وواضح الحالة. وتحقق دائمًا من التفاصيل السارية على وضعك في الوثائق الرسمية على موقع الهيئة zatca.gov.sa، لأن الأدلة الفنية تُحدَّث بين حين وآخر.
كيف تتحقق من صحة الفاتورة قبل الاعتماد على النظام؟
قبل أن تعتمد أي حل فوترة، اطلب اختبارًا عمليًا بدل الوعود التسويقية:
- اطلب ملف XML لفاتورة حقيقية وافتحه. يجب أن ترى بوضوح رقم التسجيل الضريبي، والإجماليات، وفئة الضريبة لكل بند.
- امسح رمز QR بتطبيق التحقق الرسمي من الهيئة، وتأكد من ظهور البيانات الخمسة الأساسية مطابقة لما هو مطبوع على الفاتورة.
- أصدر إشعارًا دائنًا وتحقق من أنه يشير إلى الفاتورة الأصلية ويحمل سبب الإصدار.
- راجع التسلسل: اطلب فاتورتين متتاليتين وتأكد من تزايد العدّاد ومن ارتباط البصمة بينهما.
- جرّب حالة انقطاع الاتصال إن كان نشاطك بيعًا مباشرًا: كيف يتصرف النظام، وهل يعيد الإرسال تلقائيًا بعد عودة الاتصال؟
أخطاء تقنية شائعة تؤدي إلى الرفض
- تعديل الفاتورة بعد إصدارها: الفاتورة الصادرة لا تُصحَّح بالتعديل بل بإشعار دائن أو مدين. وأي تعديل مباشر يكسر البصمة والختم.
- الاعتماد على PDF وحده: ملف PDF جميل لكنه لا يغني عن XML. فالنسخة المقروءة آليًا هي الأساس، وصيغة PDF/A-3 تحمل ملف XML بداخلها عند الحاجة.
- الطابع الزمني الخاطئ: اختلاف المنطقة الزمنية أو تنسيق التاريخ سبب متكرر لفشل التحقق.
- تقريب المبالغ بشكل غير متسق: يجب أن تتطابق الإجماليات مع مجموع البنود والضريبة بدقة الخانات المطلوبة.
- خلط نوعَي الفاتورة: إصدار فاتورة مبسطة لعميل منشأة يحرمه من خصم ضريبة المدخلات ويستوجب إعادة الإصدار.
- إهمال بيانات العنوان الوطني: نقص حقول العنوان في الفاتورة القياسية من أكثر أسباب الرفض شيوعًا.
هل تحتاج إلى بناء هذا بنفسك؟
الإجابة الصريحة: لا، ولا ينبغي. فتوليد ملف XML متوافق مع UBL، وإدارة الشهادات والختم التشفيري، وبناء رمز QR بصيغة TLV، والحفاظ على سلسلة البصمات، ثم التعامل مع مسارَي المقاصة والإبلاغ — كل ذلك عمل هندسي مستمر يحتاج متابعة دائمة لتحديثات الهيئة. والمنطقي أن يتولاه نظام الفوترة، وأن ينحصر دورك في إصدار الفاتورة ومراجعتها.
وهذا ما يفعله Facturi: تنشئ الفاتورة بواجهة عربية بسيطة، ويتكفّل النظام بالبنية التقنية خلف الكواليس — الحقول الإلزامية، ورمز QR، وتسلسل الفواتير، والإشعارات الدائنة والمدينة — إضافة إلى إدارة العملاء والفواتير المتكررة وتقارير الضريبة. جرّب Facturi مجانًا وأصدر فاتورتك الأولى اليوم.
أرشفة الفواتير وحفظها
الجانب التقني لا ينتهي عند لحظة الإصدار. فالفواتير الإلكترونية ومستنداتها يجب أن تُحفظ إلكترونيًا بصيغتها الأصلية القابلة للقراءة الآلية، لا كصور أو مطبوعات فقط، وأن تظل متاحة للاسترجاع خلال مدة الحفظ النظامية المقررة لسجلات ضريبة القيمة المضافة. وهذا يعني عمليًا:
- حفظ ملف XML نفسه وليس فقط النسخة المطبوعة أو ملف PDF المرسل للعميل.
- إمكانية البحث والاسترجاع بسرعة عند طلب الهيئة، بمعايير مثل رقم الفاتورة أو التاريخ أو العميل.
- الاحتفاظ بسجل حالة كل فاتورة: هل أُجيزت؟ هل أُبلغ عنها؟ ومتى؟ ومع أي رقم مرجعي؟
- نسخ احتياطية موثوقة، لأن فقدان البيانات لا يُعفي المنشأة من مسؤوليتها أمام الهيئة.
وهنا يظهر فرق مهم بين حل سحابي يتولى الحفظ والاسترجاع تلقائيًا، وبين حل محلي يعتمد على جهاز واحد في المحل قد يتعطل أو يُستبدل.
أسئلة شائعة
هل يمكنني توليد رمز QR في Excel أو بأداة مجانية على الإنترنت؟
الأدوات العامة تنتج رمزًا يحمل نصًا أو رابطًا، لا سلسلة TLV مرمّزة بـ Base64 بالحقول والترتيب الذي تتطلبه الهيئة، ولا العناصر التشفيرية المطلوبة في المرحلة الثانية. لذلك لن يجتاز الرمز الناتج تطبيق التحقق الرسمي حتى لو ظهر «سليمًا» بصريًا.
هل أحتاج إلى إرسال كل فاتورة إلى الهيئة لحظيًا؟
يعتمد ذلك على نوع الفاتورة: القياسية تمر بالمقاصة قبل تسليمها للمشتري، بينما المبسطة تُسلَّم فورًا وتُبلَّغ خلال المهلة المحددة. راجع تفاصيل المسارين في مقال الفاتورة المبسطة مقابل القياسية.
ماذا لو أخطأت في فاتورة صدرت بالفعل؟
لا تعدّلها ولا تحذفها. أصدر إشعارًا دائنًا (أو مدينًا حسب الحالة) يشير إلى الفاتورة الأصلية ويوضّح سبب التصحيح، فالإشعارات نفسها مستندات إلكترونية تخضع للمتطلبات ذاتها.
هل يكفي أن يكون البرنامج «متوافقًا مع زاتكا» كما يقول موقعه؟
لا تكتفِ بالعبارة التسويقية. اطلب ملف XML فعليًا، وامسح رمز QR بتطبيق التحقق، واسأل عن آلية التعامل مع انقطاع الاتصال وعن تسلسل الفواتير. خمس دقائق من الاختبار العملي تغنيك عن مفاجأة عند أول مراجعة.
خلاصة
الفاتورة الإلكترونية في السعودية مستند تقني قبل أن تكون ورقة مطبوعة: ملف XML مبني على UBL 2.1، مربوط بسلسلة بصمات وعدّاد لا ينقطع، مختوم بشهادة مسجّلة لدى الهيئة، ومختصَر في رمز QR يحمل بياناته بصيغة TLV لا رابطًا خارجيًا. ولست مطالبًا ببناء ذلك بنفسك، لكنك مطالب بالتأكد من أن نظامك يفعله على الوجه الصحيح. راجع الأساسيات في دليل الفوترة الإلكترونية الشامل، وتحقق من موعد موجتك ومتطلبات الربط، ثم اختبر نظامك عمليًا قبل أن يفرض عليك الموعد النهائي اختبارًا لا تملك ترف الرسوب فيه.