إذا رفضت منصة فاتورة فاتورتك وأعادت إليك رمز الخطأ 1002، فالمعنى مباشر: الرقم الضريبي للمشتري مفقود في فاتورة موجَّهة من منشأة إلى منشأة (B2B). هذا الخطأ لا يظهر في فواتير الأفراد، بل في الفواتير الضريبية القياسية وحدها، ولذلك يربك كثيرًا من المنشآت التي اعتادت على إصدار فواتير مبسّطة لا تطلب هذا الحقل. هذه الصفحة تشرح الخطأ من جذره: لماذا الرقم الضريبي للمشتري إلزامي في فاتورة B2B، وأين يوضع داخل ملف XML بالضبط، وكيف تقرأ رسالة الرفض، وكيف تصحّح الفاتورة وتعيد إرسالها، وكيف تمنع تكراره نهائيًا.
هذا الدليل جزء من مرجع أخطاء هيئة الزكاة والضريبة والجمارك في الفوترة، ضمن منظومة الفاتورة الإلكترونية من قيود. الجمهور المستهدف هو المطوّر أو محلّل التكامل أو المحاسب الذي يدير الإصدار التقني، ويريد فهمًا دقيقًا للسبب لا مجرد خطوة سطحية.
ماذا يعني رمز الخطأ 1002 بالضبط
رمز الخطأ 1002 رفض على مستوى التحقق (validation) من بنية الفاتورة. المنصة تفحص الفاتورة قبل اعتمادها، فإذا كانت من النوع القياسي (B2B) ولم تجد رقمًا ضريبيًا صالحًا للمشتري في موضعه المخصّص، توقف الفاتورة وترفضها برسالة تشير إلى أن هوية المشتري الضريبية غير مكتملة.
المهم أن تفهم أن الرفض هنا ليس عشوائيًا. قاعدة التحقق صريحة: الفاتورة الضريبية القياسية الموجَّهة لمنشأة مسجَّلة يجب أن تحمل الرقم الضريبي للمشتري داخل كتلة طرف المشتري. غياب الحقل، أو تركه فارغًا، أو وضعه في موضع خاطئ، كلّها تنتج الرمز 1002.
ينبغي ألّا تخلط بين هذا الرمز ورمز الخطأ 1001 الذي يخصّ الرقم الضريبي للبائع. الرمز 1001 يقول إن رقم البائع (منشأتك) غير صالح أو غير مطابق للتنسيق، أي مشكلة في هويتك أنت. أما 1002 فيقول إن رقم المشتري (الطرف الآخر) مفقود. الأول عن من يصدر الفاتورة، والثاني عن من يستلمها. سنفرد فقرة كاملة لهذا الفرق لاحقًا حتى لا تعالج الخطأ في المكان الخطأ.
كيف تقرأ رسالة الرفض
عند رفض الفاتورة، تعيد المنصة استجابة تحمل حالة الفاتورة وقائمة بأخطاء التحقق. كل خطأ يحمل رمزًا وفئة ورسالة. الكتلة التالية مثال توضيحي لاستجابة رفض بسبب غياب الرقم الضريبي للمشتري في فاتورة B2B. انسخها وقارنها ببنية الاستجابة التي يعيدها نظامك.
المفاتيح التي تهمّك في القراءة:
clearanceStatusبقيمةNOT_CLEAREDيعني أن المقاصة لم تتم، فالفاتورة لم تُعتمد ولا يجوز تسليمها للمشتري.statusداخل نتائج التحقق بقيمةERRORيعني أن سبب الإيقاف خطأ مانع، لا مجرد تحذير.codeبقيمة1002هو التعريف الدقيق للسبب، والرسالة تشرحه نصًّا.clearedInvoiceبقيمةnullيؤكد أنه لا توجد نسخة مختومة عائدة إليك.
القاعدة العملية: لا تنظر إلى الرسالة النصية وحدها، بل اقرأ code لأنه ثابت لا يتغيّر، بينما صياغة الرسالة قد تختلف قليلًا بين الإصدارات.
لماذا الرقم الضريبي للمشتري إلزامي في B2B دون B2C
الجواب يبدأ من وظيفة الفاتورة نفسها. الفاتورة الضريبية القياسية (B2B) مستند بين منشأتين مسجَّلتين في ضريبة القيمة المضافة. المشتري في هذه الحالة منشأة ستستخدم الفاتورة لخصم ضريبة المدخلات: أي أنه يسترد الضريبة التي دفعها لك من الضريبة التي يحصّلها هو من عملائه. لكي يكون هذا الخصم سليمًا أمام الهيئة، يجب أن تعرّف الفاتورة المشتري تعريفًا كاملًا، وأهم ما في هذا التعريف رقمه الضريبي.
بعبارة أخرى: الرقم الضريبي للمشتري هو الرابط الذي يثبت أن الطرف الذي سيخصم الضريبة منشأة حقيقية مسجَّلة، وأن العملية موثّقة من طرفيها. بدون هذا الرقم تصبح الفاتورة غير صالحة لخصم المدخلات، ولذلك ترفضها قاعدة التحقق من الأساس.
قارن هذا بالفاتورة الضريبية المبسّطة (B2C) الموجَّهة لمستهلك نهائي. المستهلك فرد لا يخصم ضريبة مدخلات، فهو نهاية السلسلة. لا توجد عملية استرداد لاحقة تحتاج لتوثيق هويته الضريبية، ولذلك لا تطلب الفاتورة المبسّطة رقمًا ضريبيًا للمشتري إطلاقًا. هذا هو جوهر الفرق: الإلزام مرتبط بوظيفة الخصم، لا بشكل المستند.
يترتب على ذلك نتيجة مهمة في التصميم: إذا كان نظامك يصدر النوعين، فلا يجوز أن يطبّق القاعدة نفسها عليهما. الرقم الضريبي للمشتري حقل مشروط: إلزامي عند InvoiceTypeCode name يبدأ بـ 01 (قياسية)، واختياري بل غالبًا غائب عند 02 (مبسّطة). معاملته كحقل ثابت في النوعين تنتج إمّا الخطأ 1002 في B2B، أو حقلًا فارغًا لا لزوم له في B2C.
ولأن فاتورة B2B تمرّ بمسار المقاصة الفورية (تُرسل إلى المنصة، تُعتمد وتُختم، ثم تعود إليك)، فإن التحقق من اكتمال هوية المشتري يحدث لحظيًا قبل الاعتماد. الفاتورة المبسّطة على النقيض تُصدر فورًا وتُبلَّغ خلال 24 ساعة، فلا يقف المشتري عقبة أمام تسليمها. تفاصيل المسارين في دليل فواتير B2B بين المنشآت تقنياً.
أين يوضع الرقم الضريبي للمشتري في ملف XML
الرقم الضريبي للمشتري له موضع واحد محدّد في الفاتورة، وأي وضع له خارج هذا الموضع يساوي غيابه من منظور التحقق. الموضع هو كتلة طرف المشتري AccountingCustomerParty، وتحديدًا داخل PartyTaxScheme في العنصر CompanyID. الكتلة التالية تبيّن البنية الصحيحة:
ثلاث نقاط دقيقة في هذه الكتلة:
- الرقم يوضع في
cbc:CompanyIDداخلcac:PartyTaxScheme، لا في أي موضع آخر. كثير من الأخطاء سببه وضع الرقم في عنصر هوية آخر مثلPartyIdentificationالمخصّص لأرقام تعريف أخرى، فلا تقرؤه قاعدة التحقق كرقم ضريبي. - عنصر
TaxScheme/IDيجب أن يحمل القيمةVATليؤكد أن الرقم رقم ضريبة قيمة مضافة، لا معرّفًا آخر. - الرقم الضريبي السعودي 15 خانة، يبدأ بالرقم
3وينتهي به. إذا كانت الخانات أقل أو لم يبدأ بـ3، فقد يقرأه التحقق رقمًا غير صالح، وهنا قد تنتقل المشكلة إلى أخطاء تنسيق أخرى وليس 1002 وحده.
وللمقارنة المباشرة، هذا ما يبدو عليه طرف المشتري الذي ينتج الخطأ 1002: كتلة طرف موجودة لكن بلا PartyTaxScheme أصلًا، أو بـ CompanyID فارغ.
لاحظ أن بقية الفاتورة قد تكون سليمة بالكامل: البنود صحيحة، والإجماليات متوازنة، والختم في موضعه. غياب كتلة واحدة في طرف المشتري يكفي لإيقاف الفاتورة كلها. لفهم بقية أقسام طرف المشتري وموضعها في الشجرة، راجع دليل ترويسة الفاتورة (Invoice Header) في XML.
الفرق بين B2B وB2C في حقل المشتري
| المعيار | B2B (قياسية) | B2C (مبسّطة) |
|---|---|---|
| نوع الفاتورة | 01 | 02 |
| الرقم الضريبي للمشتري | إلزامي | غير مطلوب |
| المسار | مقاصة | إبلاغ خلال 24 ساعة |
الجدول التالي يلخّص متى يكون الرقم الضريبي للمشتري إلزاميًا، وما الذي يترتب على غيابه في كل نوع:
| العنصر | فاتورة B2B القياسية | فاتورة B2C المبسّطة |
|---|---|---|
| الرقم الضريبي للمشتري | إلزامي | غير مطلوب |
| سبب الإلزام | المشتري يخصم ضريبة المدخلات | المستهلك نهاية السلسلة |
| رمز النوع (name) | يبدأ بـ 01 | يبدأ بـ 02 |
| المسار | مقاصة فورية | تبليغ خلال 24 ساعة |
| أثر الغياب | رفض بالخطأ 1002 | لا أثر |
دع قيود يبني فاتورة B2B بحقولها الإلزامية كاملة
يملأ قيود الرقم الضريبي للمشتري وعنوانه الوطني تلقائيًا من بيانات العميل، ويوقّع الفاتورة ويمرّرها عبر المقاصة، فلا يصلك الخطأ 1002 من الأساس.
كيف تصحّح الفاتورة وتعيد إرسالها
تصحيح الخطأ 1002 لا يحتاج تعديل بنية الفاتورة كلها، بل إكمال كتلة واحدة. اتبع هذه الخطوات بالترتيب:
- تأكد من نوع الفاتورة أولًا. افتح عنصر رمز النوع وتحقق أن
nameيبدأ بـ01. إذا كان يبدأ بـ02فالفاتورة مبسّطة ولا يفترض أن تطلب رقم مشترٍ أصلًا، والخلل في تصنيف الفاتورة لا في حقل المشتري. - احصل على الرقم الضريبي الصحيح للمشتري. اطلبه من المنشأة المشترية، أو استخرجه من سجلها في نظامك. تحقق أنه 15 خانة، يبدأ بـ
3وينتهي به، وأنه يخصّ منشأة مسجَّلة في ضريبة القيمة المضافة. - أضف كتلة
PartyTaxSchemeفي الموضع الصحيح. داخلAccountingCustomerParty/Party، ضع الرقم فيCompanyIDواضبطTaxScheme/IDعلىVAT، كما في النموذج الصحيح أعلاه. - أكمل العنوان الوطني إن كان ناقصًا. فاتورة B2B تطلب عنوان المشتري الوطني (المدينة، الرمز البريدي، رمز الدولة
SAعلى الأقل). نقص العنوان قد يثير أخطاء تحقق مجاورة بعد حلّ 1002. - أعد توليد المستند ووقّعه من جديد. أي تعديل في محتوى الفاتورة يغيّر تجزئتها، فلا تكتفِ بإضافة الحقل بل أعد توليد الملف وختمه بشهادة CSID قبل الإرسال.
- أعد الإرسال إلى المقاصة. مرّر الفاتورة المصحّحة على مرحلة التحقق المحلي أولًا، ثم أرسلها. عند نجاح المقاصة ستحصل على
clearanceStatusبقيمةCLEAREDونسخة مختومة فيclearedInvoice.
ملاحظة مهمة عن إعادة الإرسال: لا ترسل الفاتورة الأصلية المرفوضة مجدّدًا كما هي ظنًّا أن المشكلة عابرة. الرفض بـ 1002 رفض بنيوي ثابت، وسيتكرر حتى تكمل الحقل فعليًا. كما لا تنشئ فاتورة جديدة برقم متسلسل جديد لتجاوز المرفوضة، لأن عدّاد الفاتورة ICV يجب أن يبقى متسلسلًا. صحّح الفاتورة نفسها وأعد توليدها بالعدّاد ذاته.
مسار تصحيح الخطأ 1002 خطوة بخطوة
استلام الرمز 1002
تأكيد أنها B2B
إضافة الرقم الضريبي للمشتري
إعادة التوقيع
إعادة الإرسال للمقاصة
هذا المسار يصلح كقائمة تحقق سريعة في كل مرة يظهر فيها الرمز 1002. الخطوتان الأكثر إغفالًا هما إعادة التوليد بعد التعديل، وإكمال العنوان الوطني، فلا تتجاوزهما.
كيف تميّز 1002 عن 1001 ولا تعالج الخطأ في المكان الخطأ
الرمزان متجاوران في الترقيم ويخصّان الرقم الضريبي، فيسهل الخلط بينهما. لكن مصدر كل منهما مختلف تمامًا، ومعالجة أحدهما بمنطق الآخر تضيّع وقتك.
رمز الخطأ 1001 يخصّ البائع، أي منشأتك أنت. يظهر عندما يكون رقمك الضريبي في كتلة AccountingSupplierParty غير صالح: عدد خانات خاطئ، أو لا يبدأ بـ 3، أو غير مطابق للرقم المرتبط بشهادتك. الحلّ هناك يكون في إعدادات منشأتك ومطابقة رقمك مع شهادة التسجيل.
رمز الخطأ 1002 يخصّ المشتري، أي الطرف الآخر. يظهر عندما يكون رقم المشتري في كتلة AccountingCustomerParty مفقودًا في فاتورة B2B. الحلّ هنا يكون في بيانات العميل التي تدخلها أنت لكل فاتورة، لا في إعدادات منشأتك.
قاعدة تمييز سريعة: اقرأ category في رسالة الخطأ. إذا أشارت إلى Seller أو Supplier فالمشكلة في البائع (1001)، وإذا أشارت إلى Buyer أو Customer فالمشكلة في المشتري (1002). وإذا كانت الفاتورة مبسّطة B2C ووصلك 1002، فالأرجح أن التصنيف خاطئ وأن فاتورتك صُنّفت قياسية عن طريق الخطأ.
| وجه المقارنة | الخطأ 1001 | الخطأ 1002 |
|---|---|---|
| الطرف المعني | البائع (منشأتك) | المشتري (الطرف الآخر) |
| الكتلة في XML | AccountingSupplierParty | AccountingCustomerParty |
| طبيعة الخلل | رقم البائع غير صالح | رقم المشتري مفقود |
| موضع الإصلاح | إعدادات منشأتك | بيانات العميل في الفاتورة |
سيناريو عملي: مورّد في الرياض يصدر فاتورة لمنشأة أخرى
لنأخذ حالة واقعية تشرح متى يظهر الخطأ ولماذا. شركة مقاولات في الرياض تبيع مواد بناء لشركة تطوير عقاري. الطرفان منشأتان مسجَّلتان في ضريبة القيمة المضافة، فالفاتورة بينهما من النوع القياسي B2B. يدخل محاسب المقاولات بيانات العميل، يحدّد البنود، ويصدر الفاتورة، فتعود مرفوضة بالرمز 1002.
سبب الرفض هنا أن سجل العميل في النظام أُنشئ على عجل بالاسم والعنوان فقط، دون إدخال الرقم الضريبي. النظام بنى كتلة طرف المشتري بالاسم والعنوان، لكن PartyTaxScheme خرجت فارغة، فأوقفت قاعدة التحقق الفاتورة. لاحظ أن المحاسب لم يخطئ في البنود ولا في الضريبة، الخلل كان في خطوة سابقة تمامًا وهي اكتمال سجل العميل.
الحلّ في هذه الحالة عملي ومباشر: يطلب المحاسب الرقم الضريبي من شركة التطوير العقاري، يضيفه إلى سجل العميل، يتحقق أنه 15 خانة تبدأ وتنتهي بـ 3، ثم يعيد توليد الفاتورة فتُبنى كتلة المشتري كاملة، وتمرّ المقاصة بنجاح. الدرس المستفاد: الخطأ 1002 يكشف غالبًا عن ثغرة في إجراءات إدخال العملاء، لا في الفاتورة نفسها. منشأة تُلزم إدخال الرقم الضريبي عند فتح سجل أي عميل منشأة لن تواجه هذا السيناريو إطلاقًا.
كيف تتحقق من صلاحية الرقم الضريبي للمشتري قبل الإصدار
إضافة الرقم وحدها لا تكفي، فالرقم الخاطئ شكلًا قد يحلّ الخطأ 1002 لكنه يثير خطأ تنسيق آخر. تحقق من هذه النقاط قبل اعتماد رقم أي مشترٍ:
- الطول. الرقم الضريبي السعودي 15 خانة بالضبط، لا أقل ولا أكثر. أي طول مختلف يعني خطأ إدخال.
- البادئة والنهاية. يبدأ الرقم بالخانة
3وينتهي بها. هذه قاعدة ثابتة في أرقام ضريبة القيمة المضافة السعودية. - الخانات وسطًا. الخانات بين البداية والنهاية رقمية بالكامل، بلا حروف ولا فراغات ولا رموز.
- تطابق الجهة. الرقم يخصّ المنشأة المشترية نفسها لا منشأة شقيقة أو فرعًا مختلفًا. خطأ شائع أن يُدخل رقم المجموعة الأم بدل رقم الكيان المتعاقد.
التحقق الآلي من الطول والبادئة يلتقط أغلب أخطاء الإدخال قبل أن تصل للمنصة. وحين يكون المشتري عميلًا متكررًا، فإن حفظ رقمه المتحقَّق منه مرة واحدة في سجله يلغي الحاجة لإدخاله يدويًا في كل فاتورة، وهذا وحده يقطع أكثر مصادر الخطأ شيوعًا.
كيف تمنع تكرار الخطأ نهائيًا
الخطأ 1002 من أكثر الأخطاء قابلية للمنع، لأن سببه بيانات ناقصة لا خلل تقني عميق. الإجراءات التالية تقفل الباب عليه:
- اجعل الرقم الضريبي حقلًا إلزاميًا في سجل العميل التجاري. إذا كان عميلك منشأة، فلا تسمح بحفظ سجله بلا رقم ضريبي صالح. هكذا لا تصل الفاتورة لمرحلة الإصدار وحقل المشتري فارغ.
- افصل العملاء المنشآت عن العملاء الأفراد في نظامك. صنّف كل عميل: منشأة تأخذ فاتورة B2B وتتطلب رقمًا ضريبيًا، أو فرد يأخذ فاتورة B2C مبسّطة لا تتطلبه. هذا التصنيف يحدّد تلقائيًا أي قاعدة تحقق تُطبَّق.
- تحقق من الرقم قبل الإصدار لا بعده. أضف تحققًا محليًا يرفض الفاتورة القياسية بلا رقم مشترٍ صالح قبل إرسالها للمقاصة، فتكتشف الخطأ في نظامك بدل أن تكتشفه المنصة.
- راجع تنسيق الرقم آليًا. 15 خانة، يبدأ وينتهي بـ
3. تحقق بسيط من الطول والبادئة يلتقط معظم أخطاء الإدخال قبل الإرسال. - استخدم نظام فوترة يبني الكتلة تلقائيًا. حين يملأ النظام كتلة طرف المشتري من سجل العميل مباشرة، يختفي الخطأ البشري الذي ينتج 1002.
هذه الإجراءات مجتمعة تحوّل الخطأ 1002 من مشكلة متكررة إلى حالة نادرة لا تظهر إلا عند بيانات عميل جديد ناقصة، وتُكتشف عندها محليًا قبل أن تصل للمنصة.
ماذا يحدث إن تركت الخطأ دون حلّ
الخطأ 1002 ليس تنبيهًا يمكن تجاوزه، بل رفض يوقف الفاتورة قانونيًا. ما دامت clearanceStatus بقيمة NOT_CLEARED، فالفاتورة غير معتمدة ولا يجوز تسليمها للمشتري. هذا يعني عمليًا أنك لم تصدر فاتورة صالحة بعد، مهما بدت مكتملة في نظامك.
الأثر يمتد إلى طرفين. أنت لا تستطيع إثبات الإيراد بفاتورة معتمدة، والمشتري لا يستطيع خصم ضريبة المدخلات لأنه لا يملك فاتورة قانونية. تأخّر التصحيح يعطّل دورة المستندات بينكما، وقد يتراكم مع فواتير لاحقة إذا كان سجل العميل ناقصًا أصلًا. لذلك التعامل مع 1002 فور ظهوره أوفر من تأجيله.
نقطة أخيرة مهمة: القاعدة نفسها تسري على الإشعارات الدائنة والمدينة المرتبطة بفاتورة B2B. الإشعار الذي يعدّل فاتورة قياسية يرث إلزام الرقم الضريبي للمشتري، فإذا أصدرت إشعارًا دائنًا على فاتورة B2B بلا رقم مشترٍ، تلقّيت الرمز 1002 نفسه. عامل الإشعارات بالعناية ذاتها التي تعامل بها الفاتورة الأصلية.
إصدار فواتير B2B سليمة من أول مرة يبدأ من نظام يملأ الحقول الإلزامية بدلًا منك، ويتحقق منها قبل الإرسال، ويمرّرها عبر المقاصة تلقائيًا.
موضع الرقم الضريبي للمشتري داخل شجرة الفاتورة
AccountingCustomerParty
Party
PartyTaxScheme
CompanyID (الرقم الضريبي)
TaxScheme/ID = VAT
هذه الشجرة تختصر القاعدة كلها: الرقم في CompanyID داخل PartyTaxScheme، لا في أي عنصر هوية آخر. وضعه في غير موضعه يساوي غيابه. لفهم كامل المسار التقني للفاتورة من الإصدار للمقاصة، راجع فواتير B2B بين المنشآت تقنياً، ولاستعراض بقية رموز الأخطاء راجع مرجع أخطاء الهيئة في الفوترة.
الأسئلة الشائعة
ما الفرق بين الخطأ 1001 والخطأ 1002؟
الخطأ 1001 يخصّ الرقم الضريبي للبائع (منشأتك) عندما يكون غير صالح، والخطأ 1002 يخصّ الرقم الضريبي للمشتري (الطرف الآخر) عندما يكون مفقودًا في فاتورة B2B. الأول مصدره إعدادات منشأتك، والثاني مصدره بيانات العميل في الفاتورة.
هل يظهر الخطأ 1002 في فاتورة B2C المبسّطة؟
لا يفترض ذلك، لأن الفاتورة المبسّطة لا تطلب رقمًا ضريبيًا للمشتري أصلًا. إذا ظهر لك 1002 في فاتورة تظنها مبسّطة، فالأرجح أنها صُنّفت قياسية B2B عن طريق الخطأ في رمز النوع. تحقق أن name يبدأ بـ 02.
أين يوضع الرقم الضريبي للمشتري بالضبط في الملف؟
داخل AccountingCustomerParty/Party/PartyTaxScheme/CompanyID، مع ضبط TaxScheme/ID على القيمة VAT. وضعه في عنصر هوية آخر مثل PartyIdentification لا يقرؤه التحقق كرقم ضريبي وينتج الخطأ نفسه.
هل أعيد إرسال الفاتورة المرفوضة كما هي بعد إضافة الرقم؟
لا. أي تعديل في المحتوى يغيّر تجزئة الفاتورة، فيجب إعادة توليد المستند وتوقيعه بشهادة CSID من جديد قبل إعادة الإرسال إلى المقاصة. أضف الحقل، أعد التوليد، ثم أرسل.
ما شكل الرقم الضريبي السعودي الصحيح للمشتري؟
15 خانة رقمية، يبدأ بالرقم 3 وينتهي به، ويخصّ منشأة مسجَّلة في ضريبة القيمة المضافة. الطول الخاطئ أو البادئة الخاطئة قد ينقلان المشكلة إلى خطأ تنسيق آخر بعد حلّ 1002.
كيف أمنع تكرار الخطأ 1002 مستقبلًا؟
اجعل الرقم الضريبي حقلًا إلزاميًا في سجل العميل المنشأة، وافصل العملاء المنشآت عن الأفراد، وأضف تحققًا محليًا يرفض الفاتورة القياسية بلا رقم مشترٍ قبل إرسالها. يبني قيود هذه الكتلة تلقائيًا من سجل العميل، فلا يصلك الخطأ من الأساس.