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

 دليل المعرفة

رسالة Postal code length is incorrect في نظام الفوترة الوطني وحلها

تظهر رسالة Postal code length is incorrect حين يرسل برنامجك المحاسبي فاتورة إلى نظام الفوترة الوطني فتعود مرفوضة برمز 400. ومعناها أن القيمة المرسلة في العنصر cbc:PostalZone ضمن بيانات المشتري أطول من الحد الذي يضعه الدليل التقني لهذا العنصر، وهو خمس خانات.

والعنصر نفسه اختياري في قوالب الدليل. فالرسالة تخص طول قيمة أُرسلت فعلًا، لا حقلًا ناقصًا. لذلك يكون الإصلاح بأحد طريقين، تصحيح القيمة لتقع ضمن الحد، أو ترك الحقل دون قيمة إذا لم تكن لديك قيمة صحيحة للمشتري.

يشرح هذا المقال نص الرسالة كما ورد في الدليل التقني الصادر عن دائرة ضريبة الدخل والمبيعات (الإصدار 1.5)، ومكان العنصر في كتلة المشتري، وما يقوله الدليل عن حد الطول وما يسكت عنه. ثم ينتقل إلى خطوات الإصلاح ومثال للفحص وقائمة تراجعها قبل الإرسال.

ما معنى رسالة Postal code length is incorrect

يصف الدليل التقني رمز 400 (Bad Request) بأنه خطأ في القيم المرسلة داخل ملف XML، ويأتي تفصيله في الحقل EINV_MESSAGE من ملف الاستجابة. ومن الرسائل التي يذكرها تحت هذا الرمز رسالة Postal code length is incorrect، ويشرحها في الصفحة 102 كما يلي.

«يدل على أن رقم صندوق البريد في ملف ال XML طوله غير صحيح حيث أن الحد الأعلى له 5».

شرح الدليل التقني لرسالة Postal code length is incorrect: رقم صندوق البريد في ملف XML طوله غير صحيح والحد الأعلى له 5
المصدر: دائرة ضريبة الدخل والمبيعات، الدليل التقني للربط مع نظام الفوترة الوطني من خلال واجهة برمجة التطبيقات (API)، الإصدار 1.5، ص102

ولاحظ اختلاف التسمية بين موضعين في الدليل. ففي شرح الرسالة يسمي القيمة «رقم صندوق البريد»، وفي جدول بيانات المشتري يسميها «الرمز البريدي للمشتري» ويضعها في العنصر cbc:PostalZone. ويقرن الدليل الرسالة بالحد الأعلى 5، وهو الحد نفسه الذي يضعه لهذا العنصر. فإذا وصلتك الرسالة فابدأ الفحص من cbc:PostalZone في كتلة المشتري.

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

أين تظهر الرسالة في ملف الاستجابة

يعيد نظام الفوترة الوطني نتيجة الفحص داخل العنصر EINV_RESULTS، وفيه ثلاث مصفوفات هي INFO وWARNINGS وERRORS. ويحمل كل عنصر في هذه المصفوفات خمسة حقول، هي type وstatus وEINV_CODE وEINV_CATEGORY وEINV_MESSAGE. ونص Postal code length is incorrect يأتي في الحقل الأخير.

ولا يذكر الدليل قيمة EINV_CODE التي ترافق هذه الرسالة. لذلك اعتمد على نص الرسالة في EINV_MESSAGE حين تبحث عنها في سجلاتك أو تبني عليها تنبيهًا في برنامجك، وانسخ النص كما يعود إليك دون تعديل.

وإذا رُفضت الفاتورة حملت حالتها EINV_STATUS القيمة NOT_SUBMITTED، وعاد رمز QR والمعرّف الفريد ورقم الفاتورة والفاتورة الموقعة بقيمة null. لذلك لا تحكم على الفاتورة من رمز HTTP وحده، واقرأ EINV_STATUS أولًا كما يوصي الدليل في إرشاداته.

أين يقع cbc:PostalZone في بيانات المشتري

يبدأ قالب بيانات المشتري في الدليل بالعنصر cac:AccountingCustomerParty. ويوثق الدليل في هذه الكتلة ستة متغيرات، اثنان منها مظللان بالأصفر، أي إجباريان، وأربعة مظللة بالأخضر، أي اختيارية. وcbc:PostalZone واحد من متغيرين فقط يخصان عنوان المشتري في القالب، والآخر رمز المحافظة cbc:CountrySubentityCode.

ويجمع الجدول التالي المتغيرات الستة بتظليلها وقيدها الموثق، حتى ترى موضع العنصر بين جيرانه.

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

العنصر التظليل في الدليل القيد الموثق
schemeID (نوع معرّف المشتري) أصفر، إجباري NIN للرقم الوطني، PN للرقم الشخصي لغير الأردني، TN للرقم الضريبي
cbc:ID (قيمة معرّف المشتري) أخضر، اختياري أرقام فقط، ويصبح الرقم الضريبي للمشتري إجباريًا في فاتورة المناطق التنموية
cbc:PostalZone أخضر، اختياري 5 خانات كحد أقصى، وتجاوزه يعيد رسالة Postal code length is incorrect
cbc:CountrySubentityCode أخضر، اختياري رمز إحدى المحافظات الاثنتي عشرة، مثل JO-AM لعمّان
cbc:RegistrationName أصفر، والعنصر إجباري تجب قيمته في فاتورة الذمم، وفي الفاتورة النقدية التي تزيد على 10,000 دينار أو ما يعادلها بالعملات الأجنبية
cbc:Telephone أخضر، اختياري أرقام فقط، بين 9 و14 رقمًا
صف PostalZone في جدول بيانات المشتري بالدليل التقني: الرمز البريدي للمشتري بحد أعلى 5 خانات فقط، والقيمة مظللة بالأخضر (اختياري)
المصدر: دائرة ضريبة الدخل والمبيعات، الدليل التقني للربط مع نظام الفوترة الوطني من خلال واجهة برمجة التطبيقات (API)، الإصدار 1.5، ص17

فالعنصر الذي تشير إليه الرسالة يقع في كتلة المشتري، وقيده الموثق هو الطول. ولكل جار من جيرانه قيده المستقل، فرقم الهاتف أرقام فقط بين 9 و14 رقمًا، ورمز المحافظة واحد من اثني عشر رمزًا. ونتناول بقية عناصر هذه الكتلة في مقال مستقل عن بيانات المشتري في ملف فاتورة نظام الفوترة الوطني.

حد الخمس خانات: ما يحدده الدليل وما يتركه

ينص جدول بيانات المشتري في الصفحة 17 على أن الرمز البريدي للمشتري «بحد أعلى 5 خانات فقط»، ويكرر شرح الرسالة في الصفحة 102 الحد نفسه. فالقيمة التي تزيد على خمس خانات هي ما تشير إليه الرسالة، والقيمة التي لا تتجاوز خمس خانات تستوفي هذا القيد.

وما عدا الحد الأعلى، يترك الدليل أربعة أمور دون تحديد. ومعرفتها تمنعك من بناء فحص على قاعدة غير موجودة.

  • لا حد أدنى للطول. يذكر الدليل الحد الأعلى وحده، ولا يذكر عددًا أدنى من الخانات.
  • لا شرط للأرقام. يشترط الدليل في رقم هاتف المشتري أن «يأخذ فقط أرقام»، ولا يضع شرطًا مثله لهذا العنصر. فالقيد الموثق عليه هو الطول وحده.
  • لا صيغة للرموز البريدية في الأردن. لا يحدد الدليل صيغة لهذه الرموز ولا مرجعًا للتحقق منها، ولذلك لا يقدم هذا المقال صيغة ولا قائمة بها.
  • لا قاعدة للحقل الفارغ. لا يحدد الدليل هل يُحذف العنصر الأخضر من الملف حين لا قيمة له أم يُرسل فارغًا، وهي نقطة يتناولها القسم التالي.

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

عنصر اختياري بقيد إلزامي: متى تصحح القيمة ومتى تتركها

يظلل الدليل cbc:PostalZone بالأخضر في قوالبه كلها. وينص مفتاح الألوان في الصفحة 12 على أن «العناصر المظللة باللون الأخضر تدل على متغيرات مطلوب تعبئتها (اختيارية)». فتعبئة العنصر متروكة لك، لكن أي قيمة تضعها فيه تخضع لحد الخمس خانات. وعلى هذا يقف أمامك طريقان حين تظهر الرسالة.

الطريق الأول: تصحيح القيمة

إذا كانت لديك قيمة صحيحة للمشتري في حدود خمس خانات، فضعها مكان القيمة الطويلة. وابدأ التصحيح من بيانات العميل في برنامجك، لا من ملف XML وحده. فإذا كان برنامجك يبني الملف من بطاقة العميل المحفوظة، فتصحيح الملف وحده لا يمنع عودة القيمة الطويلة في الفاتورة التالية لهذا العميل.

الطريق الثاني: ترك الحقل دون قيمة

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

ما لا يغيّره كون العنصر اختياريًا

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

وفي كتلة المشتري حالة يصبح فيها الأخضر شرطًا. فقيمة معرّف المشتري مظللة بالأخضر، لكن الدليل يجعل الرقم الضريبي للمشتري إجباريًا في فاتورة المناطق التنموية. ولا ينطبق شيء من ذلك على cbc:PostalZone، فالدليل لا يربطه بنوع فاتورة أو بطريقة دفع.

كيف تصلح رسالة Postal code length is incorrect خطوة بخطوة

الإصلاح يجري في بيانات العميل داخل برنامجك المحاسبي ثم في ملف الإرسال. اتبع هذه الخطوات بالترتيب.

  1. اقرأ الرسالة وحالة الفاتورة. تأكد أن النص في EINV_MESSAGE هو Postal code length is incorrect، وأن حالة الفاتورة في EINV_STATUS هي NOT_SUBMITTED.
  2. حدد الفاتورة والمشتري. خذ رقم الفاتورة cbc:ID ومعرّفها cbc:UUID من سجل الإرسال، وحدد العميل الذي صدرت له.
  3. اعثر على العنصر في الملف. ابحث داخل كتلة cac:AccountingCustomerParty عن cbc:PostalZone وانظر في القيمة التي يحملها.
  4. احسب خانات القيمة. إذا زادت على خمس خانات فهذا ما يشير إليه الدليل في شرح الرسالة.
  5. تتبع مصدر القيمة في برنامجك. افحص الحقل الذي يملأ منه برنامجك هذا العنصر في بيانات العميل، فقد يحمل نصًا أطول من الرمز نفسه، أو قيمة مخصصة لحقل آخر كالعنوان أو رقم الهاتف.
  6. صحح القيمة أو اترك الحقل دون قيمة. اختر أحد الطريقين في القسم السابق، واحسم طريقة تمثيل الحقل الفارغ قبل أن تعتمدها.
  7. أصلح الأخطاء الأخرى معها. إذا حملت المصفوفة ERRORS رسائل أخرى، فأصلحها كلها قبل إعادة الإرسال، حتى لا تُرفض الفاتورة مرة ثانية بسبب آخر.
  8. أعد الإرسال بالرقم والمعرّف نفسيهما. يطلب الدليل عند فشل الإرسال إعادة الفاتورة برقمها cbc:ID ومعرّفها cbc:UUID نفسيهما، لا بمعرّف جديد. ثم اقرأ EINV_STATUS في الاستجابة الجديدة.

مثال للفحص قبل التصحيح

يوضح الجدول التالي كيف تحكم على القيمة في cbc:PostalZone بقيد الطول وحده. والأطوال فيه أمثلة للحساب، لا صيغ لرموز بريدية حقيقية.

القيمة في العنصر عدد الخانات الحكم بقيد الطول وحده
قيمة من 7 خانات 7 تتجاوز الحد بخانتين، وهي الحالة التي تشير إليها الرسالة
قيمة من 6 خانات 6 تتجاوز الحد بخانة واحدة، وهي الحالة التي تشير إليها الرسالة
قيمة من 5 خانات 5 تقع عند الحد الأعلى، فتستوفي قيد الطول
قيمة من 3 خانات 3 تقع دون الحد الأعلى، والدليل لا يذكر حدًا أدنى
لا قيمة لا يوجد العنصر اختياري، وطريقة تمثيل غياب القيمة في الملف غير موثقة في الدليل

فالفحص هنا عدّ للخانات لا أكثر. أما صحة الرمز نفسه للمشتري، أي هل هو رمزه فعلًا، فمسألة بيانات تتحقق منها مع عميلك، لأن الدليل لا ينشر قاعدة للتحقق منها.

الرسالة في مسار الربط وفي نموذج البوابة

الرسالة موثقة في الدليل التقني للربط مع نظام الفوترة الوطني من خلال واجهة برمجة التطبيقات، أي في مسار البرنامج المحاسبي الذي يرسل ملف XML إلى النظام. أما نموذج إصدار الفاتورة على البوابة فيضم في بيانات المشتري حقلًا باسم «الرمز البريدي»، إلى جانب الاسم ونوع المعرفات الإضافية للمشتري ورقم المشتري ورقم الهاتف والمدينة.

ولا يذكر دليل الدائرة لإصدار الفواتير من البوابة كيف تتعامل البوابة مع طول هذا الحقل، ولا هل تعرض الرسالة نفسها. لذلك يقتصر هذا المقال على مسار الربط، ولا ينقل قيد الخمس خانات إلى نموذج البوابة بالاستنتاج.

قائمة فحص قبل الإرسال

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

  • قيمة cbc:PostalZone، إن أُرسلت، لا تزيد على خمس خانات.
  • الحقل الذي يملأ هذا العنصر في بطاقة العميل يحمل الرمز وحده، لا العنوان ولا رقم الهاتف.
  • طريقة تمثيل الحقل الفارغ في ملفك محسومة مع مزوّد برنامجك أو مع الدعم الفني للدائرة.
  • رقم هاتف المشتري، إن أُرسل، أرقام فقط بين 9 و14 رقمًا.
  • رمز المحافظة، إن أُرسل، واحد من الرموز الاثني عشر التي يوردها الدليل.
  • الرقم cbc:ID والمعرّف cbc:UUID محفوظان، لتعيد الإرسال بهما إذا رُفضت الفاتورة.

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

كيف يساعدك قيود

حين تصدر فاتورتك من برنامج محاسبي، لا تكتب ملف XML بيدك. فمع نظام الفوترة الوطني وتكامل قيود معه، يبني قيود ملف الفاتورة بصيغة UBL 2.1 ومعرّفها الفريد، ويرسله دون أي تدخل يدوي. ويعمل كذلك على هذه الطبقة.

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

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

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

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

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

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

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

ما معنى رسالة Postal code length is incorrect؟

تعني أن القيمة المرسلة في العنصر cbc:PostalZone ضمن بيانات المشتري أطول من الحد الأعلى الذي يضعه الدليل التقني، وهو 5 خانات. ويصنفها الدليل ضمن أخطاء الرمز 400 التي يأتي تفصيلها في الحقل EINV_MESSAGE.

هل الرمز البريدي للمشتري إجباري في فاتورة نظام الفوترة الوطني؟

يظلل الدليل التقني العنصر cbc:PostalZone بالأخضر، وهو لون المتغيرات الاختيارية، فلا يجعله إجباريًا. لكن أي قيمة تُرسل فيه تخضع لحد الخمس خانات.

هل أحذف العنصر من الملف إذا لم تكن لدي قيمة صحيحة؟

يترك الدليل هذه النقطة دون تحديد، فهو لا يذكر هل يُحذف العنصر الأخضر حين لا قيمة له أم يُرسل فارغًا. احسمها مع مزوّد برنامجك أو مع الدعم الفني للدائرة قبل أن تبني ملفك عليها.

هل يشترط الدليل أن تكون القيمة أرقامًا فقط؟

يضع الدليل التقني لهذا العنصر قيد الطول وحده، 5 خانات كحد أقصى. ولا يذكر له شرطًا للأرقام كما يفعل مع رقم هاتف المشتري، ولا يحدد صيغة للرموز البريدية في الأردن.

هل «رقم صندوق البريد» في شرح الرسالة عنصر مختلف؟

يستخدم الدليل التعبيرين في موضعين مختلفين، «الرمز البريدي للمشتري» في جدول بيانات المشتري و«رقم صندوق البريد» في شرح الرسالة. ويقرن الرسالة بالحد الأعلى 5، وهو الحد الذي يضعه للعنصر cbc:PostalZone، فابدأ الفحص منه.

هل أولّد معرّفًا فريدًا جديدًا عند إعادة الإرسال بعد التصحيح؟

لا تولّد معرّفًا جديدًا. يطلب الدليل التقني إعادة الإرسال بالرقم cbc:ID والمعرّف cbc:UUID نفسيهما، ثم قراءة EINV_STATUS في الاستجابة الجديدة لمعرفة حالة الفاتورة.

المراجع

الأدلّة الإرشادية

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

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

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

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

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