Qoyod
منتجات قيود
نظام نقاط البيع
كاشير ZATCA متكامل لمحلاتك مع دفع مرن
قيود فليفرز
كاشير سحابي مصمَّم خصيصًا للمطاعم والكافيهات
قيود HR
الموظفون والرواتب والإجازات وفق نظام العمل السعودي
قيود CRM
من العميل المحتمل إلى الفاتورة في قيود
مساكن
إدارة جمعيات اتحاد الملاك
قيود للمؤسسات
نظام ERP للشركات من 200 إلى 1,000 موظف
الأسعار
Qoyod
الأسعار

 دليل المعرفة

خطأ 400 في نظام الفوترة الوطني: كيف تقرأ EINV_MESSAGE

يظهر خطأ 400 في نظام الفوترة الوطني حين يرسل برنامجك المحاسبي فاتورة فيعود الرد برمز 400 Bad Request بدل رمز الاستجابة السريع. وما يميز هذا الرمز أن دائرة ضريبة الدخل والمبيعات تنص على أن توضيح الخطأ يصل مكتوبًا في حقل EINV_MESSAGE داخل ملف الاستجابة.

الجواب المباشر هو أن خطأ 400 يعني قيمة غير صحيحة في ملف XML للفاتورة، وأن مكان السبب هو عنصر الخطأ داخل EINV_RESULTS. اقرأ حقل EINV_MESSAGE فيه حرفيًا، وطابقه مع الرسائل التي يوثقها الدليل التقني، ثم أصلح القيمة وأعد الإرسال بالرقم والمعرّف الفريد نفسيهما.

يشرح هذا المقال كيف تقرأ ملف الاستجابة عنصرًا عنصرًا، وما يحمله كل حقل في عنصر الخطأ، ثم يضع أمامك فهرسًا بالرسائل التي يوثقها الدليل لرمز 400 مع سطر واحد لكل رسالة. أما شرح كل رسالة بالتفصيل فله مقال مستقل في مركز الأخطاء، والصورة العامة لرموز الرفض كلها في مقال أخطاء نظام الفوترة الوطني.

شرح الدليل التقني لرمز 400 Bad Request: خطأ في القيم المبعوثة في ملف XML يوضحه حقل EINV_MESSAGE، ثم أولى الرسائل الموثقة: Total General Amount is Not Correct وThis user is not authorized to submit this type of invoice وBayer name is missing وThe ID number must be unique
المصدر: دائرة ضريبة الدخل والمبيعات، الدليل التقني للربط مع نظام الفوترة الوطني من خلال واجهة برمجة التطبيقات (API)، الإصدار 1.5، ص101

ما الذي يعنيه خطأ 400 في نظام الفوترة الوطني

يصف الدليل التقني للربط مع نظام الفوترة الوطني (الإصدار 1.5، ص101) هذا الرمز بنص قصير.

«هذا يدل على وجود خطأ في القيم المبعوثة من خلال ملف ال XML ويتم توضيح الخطأ في ال EINV_MESSAGE في ملف ال Response».

في هذا النص معلومتان تبنيان طريقة العمل كلها.

  • الخطأ في قيم الملف. رمز 400 يخص ما كتبه برنامجك داخل ملف الفاتورة، من مجاميع وأنواع ونسب وحقول، لا الوصول إلى النظام ولا بيانات الاعتماد.
  • السبب مكتوب في الرد. الدليل يحيلك إلى حقل EINV_MESSAGE في ملف الاستجابة، فلا تحتاج إلى التخمين قبل أن تقرأه.

ويوثق الدليل بعد هذا التعريف مجموعة من الرسائل يقدمها بعبارة «ومن أهمها»، أي أنها الأهم لا أنها القائمة الكاملة. لذلك إن وصلتك رسالة ليست في الفهرس أدناه، فاقرأ نصها كما هو واعرضه على الدعم الفني للدائرة بدل أن تقيسه على رسالة تشبهه.

أين يقع سبب الرفض في ملف الاستجابة

يعيد النظام بعد كل إرسال ملف استجابة بصيغة JSON. ويحدد الدليل التقني ستة أغراض لهذا الملف، منها أن تعرف هل قُبلت الفاتورة أم رُفضت، وأن تطّلع على أسباب الخطأ، وأن يعالج نظامك النتيجة آليًا. والجدول التالي يجمع العناصر التي تهمك عند قراءة خطأ 400.

العنصر ما يحمله ما تفعله به عند خطأ 400
Response Status Code النتيجة التقنية للطلب تعرف منه أن الطلب لم يمر، ولا تحكم منه وحده على الفاتورة
EINV_STATUS الحالة الحاسمة للفاتورة تقرأه أولًا، فهو الحكم على الفاتورة لا رمز HTTP
EINV_RESULTS حالة عامة ثم ثلاث قوائم هي INFO وWARNINGS وERRORS تفتح قائمة ERRORS لتصل إلى عنصر الخطأ
EINV_MESSAGE تفصيل الخطأ أو سبب الرفض تنسخ نصه حرفيًا وتطابقه مع الفهرس
EINV_QR رمز الاستجابة السريع للفاتورة المقبولة تتأكد من غيابه، فلا فاتورة مقبولة دون رمز

القاعدة التي يكررها الدليل في إرشاداته واضحة، وهي أن تقرّر حالة الفاتورة من EINV_STATUS لا من رمز الاستجابة. ولا تُعد الفاتورة مستلمة ومقبولة إلا إذا عاد رمز الاستجابة السريع في EINV_QR، وهذا الرمز يجب أن يُطبع على فاتورة البائع. أما شرح حالات EINV_STATUS نفسها فخارج هذا المقال، ومكانه مقالات مركز الأخطاء الخاصة بها.

تشريح عنصر واحد داخل EINV_RESULTS

يحمل EINV_RESULTS حقلًا عامًا اسمه status قيمته PASS أو ERROR، ثم ثلاث قوائم. وكل عنصر في أي قائمة منها، سواء كان معلومة أو تحذيرًا أو خطأ، يتكون من خمسة حقول ثابتة. وفهم هذه الحقول الخمسة هو كل ما تحتاجه لقراءة أي رد.

مثال الدليل التقني لهيكل ملف الاستجابة في حالة ALREADY_SUBMITTED: EINV_RESULTS وبداخله INFO بحقول type وstatus وEINV_CODE وEINV_CATEGORY وEINV_MESSAGE، ثم WARNINGS وERRORS فارغتين وEINV_STATUS، وقيم الفاتورة الموقعة ورمز QR فيه قيم توضيحية من الدليل
المصدر: دائرة ضريبة الدخل والمبيعات، الدليل التقني للربط مع نظام الفوترة الوطني من خلال واجهة برمجة التطبيقات (API)، الإصدار 1.5، ص99

الصورة أعلاه مثال الدليل لرد في حالة ALREADY_SUBMITTED، وفيه عنصر واحد في قائمة INFO وقائمتان فارغتان. وقيم الفاتورة الموقعة ورمز الاستجابة فيه توضيحية، والمعرّف الفريد الظاهر فيه غير صالح الصياغة، فلا تنسخ أيًا منها إلى نظامك. والجدول التالي يضع حقول العنصر الخمسة بجانب قيمها في عنصر النجاح الذي يورده الدليل.

الحقل ما يحمله قيمته في مثال الدليل
type نوع العنصر INFO
status نتيجة العنصر PASS
EINV_CODE رمز مختصر للنتيجة XSD_VALID
EINV_CATEGORY الفئة التي تنتمي إليها النتيجة XSD validation
EINV_MESSAGE النص المقروء الذي يشرح النتيجة Complied with UBL 2.1 standards

ويورد الدليل كذلك مثالًا لعنصر خطأ في فاتورة مرفوضة، يحمل فيه EINV_CODE القيمة totalGeneralTaxesAmount، وEINV_CATEGORY القيمة invoice، وEINV_MESSAGE النص Total General Amount is Not Correct.

ومن هذا الجدول تخرج ثلاث ملاحظات عملية.

  1. EINV_MESSAGE هو النص الذي تطابقه. الدليل يوثق الرسائل بنصها، فهو المرجع الذي تبحث به في الفهرس وفي الدليل وفي مراسلة الدعم الفني.
  2. احفظ EINV_CODE وEINV_CATEGORY مع الرسالة. سجل الأخطاء الكامل يختصر على المبرمج وعلى الدعم الفني تحديد موضع الخلل، والدليل يوصي بتسجيل الأخطاء بالتفصيل.
  3. الحكم على الفاتورة لا يؤخذ من عنصر واحد. مهما كانت العناصر في القوائم الثلاث، يبقى الحكم لحقل EINV_STATUS.

INFO وWARNINGS وERRORS: أي قائمة تقرأ أولًا

عند خطأ 400 ابدأ بقائمة ERRORS، فهي التي تحمل سبب الرفض. ولأن ERRORS قائمة لا حقل واحد، فاقرأ عناصرها كلها قبل أن تعدّل شيئًا، وأصلح ما فيها دفعة واحدة.

أما قائمة INFO ففي أمثلة الدليل تحمل نتيجة فحص التوافق مع معيار UBL 2.1. وأما قائمة WARNINGS فتظهر فارغة في أمثلة الدليل، ولم نجد فيه ما يشرح أثر التحذير على قبول الفاتورة. لذلك لا تبنِ في نظامك منطقًا يفترض معنى معينًا للتحذير، واكتفِ بتسجيل ما يصل فيها كما هو.

فهرس رسائل خطأ 400 الموثقة في الدليل التقني

هذه الرسائل التي يوردها الدليل التقني تحت رمز 400 (ص101 وص102)، بنصها كما يكتبها الدليل. وبعض الرسائل مكتوب في المصدر بإملاء غير دقيق، مثل Bayer بدل Buyer وarear بدل area، وقد أبقيناها كما وردت في الدليل، وابحث دائمًا بالنص الذي يصلك في الرد كما هو.

مرِّر الجدول أفقيًا لعرض بقية الأعمدة

الرسالة ما تشير إليه بحسب الدليل أين تبدأ الإصلاح
Total General Amount is Not Correct خطأ في العملية الحسابية لاحتساب المجموع النهائي للفاتورة، وقد يكون الخطأ في إحدى العمليات الفرعية معادلات السطور والمجاميع، وتفصيلها في مقال رسالة Total General Amount is Not Correct
This user is not authorized to submit this type of invoice نوع فاتورة لا يتناسب مع الرقم الضريبي للمكلف أو مع تسلسل مصدر الدخل الخاص به، كفاتورة دخل من مسجل في ضريبة المبيعات العامة أو العكس نوع الفاتورة المرسل، لا بيانات الزبون
Bayer name is missing اسم المشتري غير موجود وهو إلزامي في حالتك الاسم إلزامي في فاتورة الذمم، وفي النقدية إذا تجاوزت قيمتها 10,000 دينار أو ما يعادلها بالعملات الأجنبية
The ID number must be unique تكرار رقم ID الخاص بالسلعة أو الخدمة داخل الفاتورة نفسها رقم كل سطر، فهو فريد على مستوى الفاتورة
General tax percentage must be zero بند بنسبة 0% صُنّف بالفئة S فئة الضريبة، فعند نسبة 0% لا تُستخدم S، ويُستخدم Z للمعفى وO للخاضع لنسبة الصفر
BuyerTaxNumber: The buyer's taxpayer number is not associated with the developmental arear فاتورة من نوع مناطق تنموية لم تستوفِ شرط المشتري الرقم الضريبي للمشتري إجباري هنا، ويجب أن يكون مسجلًا في المناطق التنموية ومعه كتاب إعفاء ساري مُدخل على النظام المالي
Postal code length is incorrect طول الرمز البريدي (رقم صندوق البريد بتعبير الدليل) في ملف XML غير صحيح الحقل cbc:PostalZone، وأقصى طوله 5 خانات
Invalid Invoice Minification أول وسم في ملف XML مكتوب بشكل خاطئ أو على أكثر من سطر الوسم الجذري <Invoice …> يجب أن يكون على سطر واحد
تتمة رسائل 400 في الدليل التقني: General tax percentage must be zero وBuyerTaxNumber is not associated with the developmental area وPostal code length is incorrect وInvalid Invoice Minification مع مثال سطر Invoice
المصدر: دائرة ضريبة الدخل والمبيعات، الدليل التقني للربط مع نظام الفوترة الوطني من خلال واجهة برمجة التطبيقات (API)، الإصدار 1.5، ص102

وفي رسالة General tax percentage must be zero تحديدًا تنبيه، فنص الدليل يقول إن الفئة عند 0% «يجب ان يكون … قيمته O وليس S». لكن جدول الفئات في الدليل نفسه (ص42) يعطي للنسبة الصفرية فئتين صحيحتين، Z للمعفى وO للخاضع لنسبة الصفر. فالخطأ الذي تعالجه هذه الرسالة هو استخدام S مع نسبة 0%، لا استخدام Z لسلعة معفاة.

ويتناول مركز الأخطاء كل رسالة من هذه الرسائل في مقال مستقل يشرح أسبابها وطريقة فحصها، منها مقال رسالة Total General Amount is Not Correct، ومقالات رسائل This user is not authorized وBayer name is missing وThe ID number must be unique وGeneral tax percentage must be zero ورسالة الرقم الضريبي للمشتري في المناطق التنموية. وإن كان الرفض يعود إلى حقل إلزامي ناقص، فراجع مقال الحقول الإجبارية والاختيارية في نظام الفوترة الوطني.

من الرسالة إلى الإصلاح: خمس خطوات منظمة

هذه الخطوات مبنية على الإرشادات العشر التي يختم بها الدليل التقني، مرتبة على مسار قراءة خطأ 400 من وصول الرد إلى إعادة الإرسال.

  1. اقرأ EINV_STATUS قبل أي شيء. هو الذي يحسم أن الفاتورة لم تُقبل، ويؤكد ذلك غياب رمز الاستجابة السريع من EINV_QR.
  2. افتح قائمة ERRORS واجمع عناصرها كلها. انسخ من كل عنصر الحقول الخمسة كما هي، دون ترجمة أو تلخيص.
  3. طابق نص EINV_MESSAGE مع الفهرس. حدد الحقل أو الحساب الذي تشير إليه الرسالة، وافحص قيمته في ملف XML الفعلي الذي أُرسل، لا في شاشة الإعدادات.
  4. سجّل الخطأ بالتفصيل واعرض على المستخدم رسالة مبسطة. هذه إحدى إرشادات الدليل، وسجل الأخطاء المفصل هو ما يحتاجه المبرمج والدعم الفني لاحقًا. واحتفظ كذلك برقم الفاتورة ومعرّفها الفريد وحالتها لأغراض التتبع.
  5. أعد الإرسال بالرقم نفسه والمعرّف الفريد (UUID) نفسه. يوصي الدليل عند فشل الإرسال بإعادته بالقيمتين ذاتهما، ويحذر من أن توليد معرّف جديد عند الإعادة قد يؤدي إلى تكرار الفواتير.

وتوصي إرشادات الدليل كذلك بالتحقق من المجاميع والضرائب والرقم الضريبي ورقم المشتري والحقول الإلزامية قبل الإرسال، وهي القيم نفسها التي تدور حولها عدة رسائل في الفهرس أعلاه. وإن استمر الرفض بعد الإصلاح، فالدليل يحيل إلى لجنة الدعم الفني لشؤون الفوترة في دائرة ضريبة الدخل والمبيعات عبر موقعها istd.gov.jo، ومعك الحقول الخمسة لعنصر الخطأ ورقم الفاتورة ومعرّفها الفريد.

ما الفرق بين خطأ 400 والرموز المجاورة

يكفيك سطر لكل رمز كي لا تبحث في المكان الخطأ. رمز 400 خطأ في قيم ملف XML وسببه مكتوب في EINV_MESSAGE. ورمز خطأ 403 في نظام الفوترة الوطني يعني رقم مستخدم أو مفتاحًا سريًا غير صحيح. ورمز خطأ 500 في نظام الفوترة الوطني يردّه الدليل أولًا إلى الرقم الضريبي أو تسلسل مصدر الدخل، وبدرجة أقل إلى رقم المستخدم والمفتاح السري، أو إلى نسبة ضريبة ليست ضمن نسب الضريبة المعتمدة لدى الدائرة. ورمز 504 يعني تعذّر الوصول إلى النظام من جهة جدار الحماية لدى المكلف أو من جهة موقع الدائرة، وله مقال مستقل في مركز الأخطاء.

وانتبه إلى تقاطع واحد بين 400 و500. فتسلسل مصدر الدخل يظهر في أسباب خطأ 500، ويظهر كذلك في شرح رسالة This user is not authorized to submit this type of invoice برمز 400. والفيصل هو الرمز ونص الرسالة معًا، فإن وصلتك هذه الرسالة برمز 400 فمكان العلاج تناسب نوع الفاتورة مع رقمك الضريبي وتسلسل مصدر الدخل.

كيف يساعدك قيود في التعامل مع خطأ 400

رسائل رمز 400 تخص قيمًا داخل ملف الفاتورة، وهنا يفيد أن يتولى برنامجك المحاسبي بناء الملف بدلًا منك. يعمل تكامل قيود مع نظام الفوترة الوطني على هذه الطبقة على النحو الآتي.

  • فحص قبل الإرسال. يفحص قيود كل فاتورة على مستوى الحقول لحظة إنشائها، أي الرقم الضريبي ونوع المستند وطريقة الدفع ونسبة ضريبة المبيعات العامة واكتمال البنود، وينبهك بأي خطأ قبل إرسالها إلى نظام الفوترة الوطني لتقليل حالات الرفض.
  • حالة كل فاتورة ورسالة خطئها أمامك. تعيد الدائرة حالة الفاتورة ورسالة الخطأ، ويعرضها قيود في لوحة الحالة.
  • قائمة بما يحتاج إعادة إرسال. تعرض لوحة الحالة الفواتير التي لم تُرسل وتحتاج إلى إعادة إرسال.
  • إعادة إرسال بالمعرّف نفسه. تعيد إرسال الفاتورة بمعرّف UUID نفسه، كما توصي إرشادات الدليل.

والفحص المسبق تنبيه لا ضمان. فهو يغطي الحقول المذكورة، ويبقى قبول الفاتورة لنظام الفوترة الوطني وحده.

أين تذهب بعد هذا المقال

قيود · نظام الفوترة الوطني

فوترة إلكترونية ومحاسبة متكاملة في نظام واحد

قيود متكامل مع نظام الفوترة الوطني (JoFotara). تُصدر فاتورتك بالدينار الأردني من قيود فتُقيَّد في دفاترك تلقائيًا وتُرسل إلى النظام، وبعد قبولها يعود عليها رمز QR من دائرة ضريبة الدخل والمبيعات.

الأسئلة الشائعة

ما معنى خطأ 400 في نظام الفوترة الوطني؟

يعني الرمز بحسب الدليل التقني لدائرة ضريبة الدخل والمبيعات وجود خطأ في القيم المرسلة في ملف XML للفاتورة، ويصل توضيح الخطأ في حقل EINV_MESSAGE داخل ملف الاستجابة.

أين أجد سبب رفض الفاتورة برمز 400؟

تجده في قائمة ERRORS داخل EINV_RESULTS. فكل عنصر فيها يحمل الحقول type وstatus وEINV_CODE وEINV_CATEGORY وEINV_MESSAGE، والأخير هو النص المقروء لسبب الرفض.

هل أحكم على الفاتورة من رمز 400 وحده؟

لا تحكم عليها من الرمز وحده، فالدليل يوصي بتقرير حالة الفاتورة من EINV_STATUS. ولا تُعد الفاتورة مقبولة إلا إذا عاد عليها رمز الاستجابة السريع في EINV_QR.

هل رسائل خطأ 400 في الدليل هي كل الرسائل الممكنة؟

يقدم الدليل رسائله بعبارة «ومن أهمها»، فهي الأهم لا القائمة الكاملة. وإن وصلتك رسالة غير موثقة فاحتفظ بنصها كما هو وتواصل مع الدعم الفني للدائرة.

هل أولّد معرّفًا فريدًا جديدًا بعد إصلاح خطأ 400؟

لا تولّد معرّفًا جديدًا. يوصي الدليل بإعادة الإرسال بالرقم نفسه والمعرّف الفريد نفسه، لأن توليد معرّف جديد عند الإعادة قد يؤدي إلى تكرار الفواتير.

لماذا تبدو بعض الرسائل مكتوبة بإملاء خاطئ؟

كُتبت بعض الرسائل في الدليل التقني نفسه بإملاء غير دقيق، مثل Bayer name is missing. وقد أبقيناها في الفهرس كما وردت في الدليل، وابحث دائمًا بالنص الذي يصلك في الرد كما هو.

المراجع

  • دائرة ضريبة الدخل والمبيعات، الدليل التقني للربط مع نظام الفوترة الوطني من خلال واجهة برمجة التطبيقات (API)، الإصدار 1.5، 2026.
الأدلّة الإرشادية

تابع رحلة التعلّم

استكشف بقية أدلّة قيود الإرشادية، أو ابدأ بتطبيق ما تعلّمته.

ندوات مباشرة يقدمها فريق قيود لمساعدتك في استخدام البرنامج بسهولة والرد على أسئلتك.

تعرّف على أحدث تحديثات فيود والتحسينات المستمرة والخصائص الجديدة في مكان واحد.

فريقنا جاهز لمساعدتك وتقديم الدعم الفوري لأي مشكلة تواجهها على مدار الساعة