تصفح الدليل

أدوات MCP

المنافسات اليدوية والبنود والمشاركة

أدوات MCP لإنشاء منافسات يدوية وإدارة بنودها، وتحديد البنود المشارك فيها، واختيار المنتج المقابل لكل بند.

المنافسة اليدوية منافسة تدخلها بنفسك لطلب لم يظهر على اعتماد ولا نوبكو. تملكها مؤسستك وحدها ولا تراها مؤسسة أخرى، وهي النوع الوحيد من المنافسات الذي تعدله هذه الأدوات أو تحذفه. أما منافسات اعتماد ونوبكو فمشتركة وللقراءة فقط.

المشاركة واختيار المنتج وأسعار الموردين تعمل على أي منافسة تراها، يدوية أو منشورة، وتخص المؤسسة كلها: ما يحدده زميلك تراه أنت. وتأتي معرفات المنافسات والبنود من tenders_get وtenders_search.

نصيحة:تسعير البنود له أدواته في العطاءات وتسعير البنود. وملفات نوبكو وخطاب التغطية تقرأ علامات المشاركة التي تضعها هنا، ومعها الأسعار، في ملفات العطاء والمهام الخلفية.
الأداةما تفعله
tenders_createإنشاء منافسة يدوية
tenders_updateتعديل منافسة يدوية
tenders_deleteحذف منافسة يدوية
tender_items_createإضافة بند إلى منافسة يدوية
tender_items_updateتعديل بند
tender_items_deleteإزالة بند
tender_item_participation_listعرض البنود المشارك فيها
tender_item_participation_set_batchتحديد مشاركة عدة بنود
tenders_product_links_listعرض المنتجات المرتبطة بالمنافسة
tender_item_product_selection_setاختيار منتج لبند
tender_item_price_levels_setتحديد وحدة عدة بنود
tender_item_product_selection_clearإلغاء اختيار منتج لبند
tenders_product_links_auto_linkربط المنتجات بالبنود تلقائيا
tenders_catalog_pricingتسعير المنافسة من الكتالوج
tenders_create_products_from_itemsإنشاء منتجات من البنود
tenders_sourcing_price_addتسجيل سعر توريد لبند
tenders_badail_poa_importاستيراد طلبات Badail POA من نوبكو

المنافسات اليدوية

ثلاث أدوات تنشئ المنافسة اليدوية وتعدلها وتحذفها، وتحتاج دور المالك أو المدير.

tenders_create

ينشئ منافسة تدخلها بيدك، ومعها بنودها إن أرسلتها. استخدمه لطلب لم يظهر على اعتماد ولا نوبكو، لتعد عليه العطاءات وطلبات التسعير وعروض الأسعار كما على أي منافسة أخرى. والمنافسة خاصة بمؤسستك.

يغير البيانات · الصلاحية tenders.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
tender_namestringنعماسم المنافسة، من حرف واحد إلى 500 حرف.
agency_namestringنعمالجهة الحكومية التي طرحت المنافسة، حتى 300 حرف.
branch_namestringلافرع الجهة أو إدارتها، حتى 200 حرف.
tender_numberstringلارقم المنافسة كما تذكره الجهة، حتى 100 حرف. يجد البحث المنافسة بهذا الرقم.
reference_numberstringلاالرقم المرجعي، حتى 100 حرف. يجد البحث المنافسة به أيضا.
tender_typestringلانوع المنافسة نصا حرا، حتى 100 حرف.
tender_statusstringلاحالة المنافسة نصا حرا، حتى 100 حرف.
source_urlstringلارابط إعلان المنافسة الأصلي، حتى 2000 حرف.
last_enquiries_datestringلاآخر موعد للاستفسارات. بصيغة ISO 8601، والقيمة بلا منطقة زمنية تقرأ بتوقيت السعودية.
last_offer_datestringلاآخر موعد لتقديم العروض: وقت إغلاق المنافسة. عليه تعتمد عمود الموعد والأيام المتبقية والتقويم والتنبيهات. وأي موعد واحد يعطى للمنافسة يوضع هنا لا في submission_date. بصيغة ISO 8601، والقيمة بلا منطقة زمنية تقرأ بتوقيت السعودية.
offers_opening_datestringلاموعد فتح العروض. بصيغة ISO 8601، والقيمة بلا منطقة زمنية تقرأ بتوقيت السعودية.
submission_datestringلاتاريخ نشر المنافسة أو الإعلان عنها، وهو ليس آخر موعد للتقديم، فذلك في last_offer_date. بصيغة ISO 8601، والقيمة بلا منطقة زمنية تقرأ بتوقيت السعودية.
booklet_pricenumberلاسعر الكراسة. بالريال السعودي، صفر أو أكثر. إن لم ترسله أو أرسلت null حفظ صفرا.
financial_feesnumberلاالرسوم المالية. بالريال السعودي، صفر أو أكثر. إن لم ترسله أو أرسلت null حفظ صفرا.
invitation_costnumberلاتكلفة الدعوة. بالريال السعودي، صفر أو أكثر. إن لم ترسله أو أرسلت null حفظ صفرا.
buying_costnumberلارسوم الشراء. بالريال السعودي، صفر أو أكثر. إن لم ترسله أو أرسلت null حفظ صفرا.
itemsobject[]لاالبنود الأولية للمنافسة، حتى 2000 بند. تضاف كلها بنودا جديدة بالترتيب.
items[].idintegerلالا يستخدم عند الإنشاء: كل بند يضاف جديدا.
items[].item_namestringنعماسم البند، من حرف واحد إلى 1000 حرف.
items[].descriptionstringلاوصف البند، حتى 4000 حرف.
items[].quantitynumberلاالكمية المطلوبة، صفر أو أكثر.
items[].unitstringلاوحدة القياس، حتى 50 حرفا.
items[].estimated_pricenumberلاالسعر التقديري للوحدة بالريال السعودي، صفر أو أكثر.
items[].material_codestringلاكود مادة نوبكو، حتى 100 حرف. به تطابق المنصة البند مع منتجات الكتالوج وسجل الأسعار.
{
  "tender_name": "Supply of disposable syringes",
  "agency_name": "Eastern Region Health Cluster",
  "tender_number": "ERHC-2026-0457",
  "last_offer_date": "2026-11-18T12:00:00",
  "items": [
    {
      "item_name": "Syringe 5 ml with needle, sterile",
      "quantity": 20000,
      "unit": "Piece",
      "material_code": "4111610529900"
    },
    {
      "item_name": "Examination gloves, nitrile, medium",
      "quantity": 500,
      "unit": "Box"
    }
  ]
}
مثال على المعاملات

ما يعيده: معرف المنافسة الجديدة id ورابط صفحتها في التطبيق web_url.

  • ينشئ المنافسة اليدوية ويعدلها ويحذفها المالك والمدير وحدهما. ويستطيع عضو المبيعات أو المشتريات إضافة بنودها وتعديلها بأدوات البنود أدناه.
  • تحفظ المنافسة مع كل بنودها أو لا تحفظ: إن تعذر حفظ البنود لا تنشأ منافسة.

tenders_update

يعدل منافسة يدوية: بياناتها الأساسية، وقائمة بنودها كلها إن أرسلت items. الحقل الذي لا ترسله يبقى كما هو وnull يمسحه، لكن اسم المنافسة واسم الجهة مطلوبان في كل استدعاء. ولا تعدل منافسات اعتماد ونوبكو.

يغير البيانات · الصلاحية tenders.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف المنافسة. يجب أن تكون منافسة يدوية لمؤسستك.
tender_namestringنعماسم المنافسة، من حرف واحد إلى 500 حرف. مطلوب في كل استدعاء: أرسل القيمة الحالية إن لم تغيرها.
agency_namestringنعمالجهة الحكومية التي طرحت المنافسة، حتى 300 حرف. مطلوب في كل استدعاء: أرسل القيمة الحالية إن لم تغيرها.
branch_namestringلافرع الجهة أو إدارتها، حتى 200 حرف. أرسل null لمسحه.
tender_numberstringلارقم المنافسة كما تذكره الجهة، حتى 100 حرف. يجد البحث المنافسة بهذا الرقم. أرسل null لمسحه.
reference_numberstringلاالرقم المرجعي، حتى 100 حرف. يجد البحث المنافسة به أيضا. أرسل null لمسحه.
tender_typestringلانوع المنافسة نصا حرا، حتى 100 حرف. أرسل null لمسحه.
tender_statusstringلاحالة المنافسة نصا حرا، حتى 100 حرف. أرسل null لمسحه.
source_urlstringلارابط إعلان المنافسة الأصلي، حتى 2000 حرف. أرسل null لمسحه.
last_enquiries_datestringلاآخر موعد للاستفسارات. بصيغة ISO 8601، والقيمة بلا منطقة زمنية تقرأ بتوقيت السعودية. أرسل null لمسحه.
last_offer_datestringلاآخر موعد لتقديم العروض: وقت إغلاق المنافسة. عليه تعتمد عمود الموعد والأيام المتبقية والتقويم والتنبيهات. وأي موعد واحد يعطى للمنافسة يوضع هنا لا في submission_date. بصيغة ISO 8601، والقيمة بلا منطقة زمنية تقرأ بتوقيت السعودية. أرسل null لمسحه.
offers_opening_datestringلاموعد فتح العروض. بصيغة ISO 8601، والقيمة بلا منطقة زمنية تقرأ بتوقيت السعودية. أرسل null لمسحه.
submission_datestringلاتاريخ نشر المنافسة أو الإعلان عنها، وهو ليس آخر موعد للتقديم، فذلك في last_offer_date. بصيغة ISO 8601، والقيمة بلا منطقة زمنية تقرأ بتوقيت السعودية. أرسل null لمسحه.
booklet_pricenumberلاسعر الكراسة. بالريال السعودي، صفر أو أكثر. إن لم ترسله بقي كما هو، وnull يحفظ صفرا.
financial_feesnumberلاالرسوم المالية. بالريال السعودي، صفر أو أكثر. إن لم ترسله بقي كما هو، وnull يحفظ صفرا.
invitation_costnumberلاتكلفة الدعوة. بالريال السعودي، صفر أو أكثر. إن لم ترسله بقي كما هو، وnull يحفظ صفرا.
buying_costnumberلارسوم الشراء. بالريال السعودي، صفر أو أكثر. إن لم ترسله بقي كما هو، وnull يحفظ صفرا.
itemsobject[]لاقائمة البنود كاملة، حتى 2000 بند. تستبدل القائمة المحفوظة: البند الذي يحمل id يعدل، وبلا id يضاف، وما غاب عنها يزال. لا ترسلها إن لم ترد المساس بالبنود، و[] يزيل كلها.
items[].idintegerلامعرف بند محفوظ في هذه المنافسة ليعدل في مكانه. احذفه لإضافة بند جديد. والمعرف الذي لا يخص هذه المنافسة يعامل كبند جديد.
items[].item_namestringنعماسم البند، من حرف واحد إلى 1000 حرف.
items[].descriptionstringلاوصف البند، حتى 4000 حرف. أرسل null لمسحه.
items[].quantitynumberلاالكمية المطلوبة، صفر أو أكثر. أرسل null لمسحه.
items[].unitstringلاوحدة القياس، حتى 50 حرفا. أرسل null لمسحه.
items[].estimated_pricenumberلاالسعر التقديري للوحدة بالريال السعودي، صفر أو أكثر. أرسل null لمسحه.
items[].material_codestringلاكود مادة نوبكو، حتى 100 حرف. به تطابق المنصة البند مع منتجات الكتالوج وسجل الأسعار. أرسل null لمسحه.
{
  "id": 4412,
  "tender_name": "Supply of disposable syringes",
  "agency_name": "Eastern Region Health Cluster",
  "last_offer_date": "2026-11-25T12:00:00"
}
مثال على المعاملات

ما يعيده: معرف المنافسة id ورابط صفحتها web_url.

  • items يستبدل القائمة: البند الذي يحمل id بند محفوظ يعدل في مكانه، والبند بلا id يضاف، وكل بند محفوظ غاب عن القائمة يزال، و[] يزيلها كلها. والبند المزال يخفى ولا يمحى: تبقى أسعاره وأسطر طلبات التسعير وعلامات المشاركة المرتبطة به، ويعود بإرسال id من جديد أو بـtender_items_update مع restore.
  • يرد بـ404 إن لم توجد المنافسة أو كانت لمؤسسة أخرى، وبـ403 إن كانت منشورة وليست يدوية.

tenders_delete

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

يحذف بيانات أو يستبدلها · الصلاحية tenders.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف المنافسة. يجب أن تكون منافسة يدوية لمؤسستك.

ما يعيده: تأكيد الحذف success: true.

  • أوامر البيع وأوامر الشراء والتسليمات والفواتير التي أشارت إلى المنافسة تبقى، ويزول رابطها بها فقط.
  • يرد بـ404 لمنافسة غير موجودة أو لمؤسسة أخرى، وبـ403 لمنافسة منشورة.

بنود المنافسة اليدوية

إضافة بنود المنافسة اليدوية وتعديلها وإزالتها واحدا واحدا. والإزالة تخفي البند فقط، فتبقى الأسعار والعلامات المرتبطة به.

tender_items_create

يضيف بندا واحدا إلى منافسة يدوية. يحدد النظام رقم البند: أعلى رقم استخدم في المنافسة زائد واحد، فلا يتكرر رقم بند أزيل. ولإرسال القائمة كلها دفعة واحدة استخدم tenders_update.

يغير البيانات · الصلاحية tenders.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
tender_idintegerنعممعرف المنافسة. يجب أن تكون منافسة يدوية لمؤسستك.
item_namestringنعماسم البند، من حرف واحد إلى 1000 حرف.
descriptionstringلاوصف البند، حتى 4000 حرف.
quantitynumberلاالكمية المطلوبة، صفر أو أكثر.
unitstringلاوحدة القياس، حتى 50 حرفا.
estimated_pricenumberلاالسعر التقديري للوحدة بالريال السعودي، صفر أو أكثر.
material_codestringلاكود مادة نوبكو، حتى 100 حرف. به تطابق المنصة البند مع منتجات الكتالوج وسجل الأسعار.
{
  "tender_id": 4412,
  "item_name": "IV cannula 20G, sterile",
  "quantity": 3000,
  "unit": "Piece",
  "material_code": "4111610530118"
}
مثال على المعاملات

ما يعيده: البند المحفوظ في الحقل item، وفيه id وitem_number.

  • يرد بـ404 إن لم توجد المنافسة أو كانت لمؤسسة أخرى، وبـ403 إن كانت منشورة وليست يدوية.

tender_items_update

يعدل بندا واحدا من منافسة يدوية. لا يتغير إلا ما ترسله، وnull يمسح حقلا اختياريا. وأرسل restore: true لإعادة بند أزيل.

يغير البيانات · الصلاحية tenders.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف البند، ويأتي من tenders_get.
item_namestringلاالاسم الجديد، من حرف واحد إلى 1000 حرف. لا يمكن مسحه.
descriptionstringلاوصف البند، حتى 4000 حرف. أرسل null لمسحه.
quantitynumberلاالكمية المطلوبة، صفر أو أكثر. أرسل null لمسحه.
unitstringلاوحدة القياس، حتى 50 حرفا. أرسل null لمسحه.
estimated_pricenumberلاالسعر التقديري للوحدة بالريال السعودي، صفر أو أكثر. أرسل null لمسحه.
material_codestringلاكود مادة نوبكو، حتى 100 حرف. به تطابق المنصة البند مع منتجات الكتالوج وسجل الأسعار. أرسل null لمسحه.
restorebooleanلاtrue يعيد البند الذي أزيل إلى قائمة المنافسة.
{
  "id": 902114,
  "quantity": 3500,
  "estimated_price": 1.8
}
مثال على المعاملات

ما يعيده: البند بعد التعديل في الحقل item.

  • يرفض الطلب بـ400 إن لم يحمل أي حقل للتعديل.
  • يرد بـ404 إن لم يوجد البند أو كانت منافسته لمؤسسة أخرى، وبـ403 إن كانت منافسته منشورة وليست يدوية.

tender_items_delete

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

يحذف بيانات أو يستبدلها · الصلاحية tenders.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف البند.

ما يعيده: تأكيد الإزالة success: true.

  • يرد بـ404 إن لم يوجد البند أو كانت منافسته لمؤسسة أخرى، وبـ403 إن كانت منافسته منشورة وليست يدوية.

المشاركة في البنود

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

tender_item_participation_list

يعرض البنود التي علمتها مؤسستك كمشاركة، الأحدث أولا، من منافسة واحدة أو من كل المنافسات. العلامات هي علامات المؤسسة كلها، أيا كان من وضعها.

للقراءة فقط · الصلاحية tenders.read · كل الأدوار · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
tender_idintegerلايقصر النتائج على بنود هذه المنافسة. إن غاب جاءت علامات كل المنافسات.

ما يعيده: قائمة العلامات، لكل علامة id وtender_id وtender_item_id وcreated_at.

  • القائمة بلا ترقيم صفحات. مرر tender_id لتقصرها على منافسة واحدة.

tender_item_participation_set_batch

يحدد المشاركة أو يلغيها لما يصل إلى 500 بند من منافسة واحدة في استدعاء واحد. استخدمه لتحديد منافسة كاملة أو استبعاد مجموعة بنود دفعة واحدة.

يغير البيانات · الصلاحية tenders.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
tender_idintegerنعممعرف المنافسة.
item_idsinteger[]نعممعرفات البنود، من 1 إلى 500. التكرار يحتسب مرة واحدة.
participatingbooleanنعمtrue يحدد البنود كمشاركة، وfalse يزيل العلامة عنها.
{
  "tender_id": 48213,
  "item_ids": [
    902114,
    902115,
    902118
  ],
  "participating": true
}
مثال على المعاملات

ما يعيده: updated بمعرفات البنود التي طبق عليها الحكم، وfailed بالمعرفات التي ليست بنودا قائمة في المنافسة.

  • البنود الصحيحة تحفظ ولو فشل بعضها، فافحص failed بعد كل استدعاء.
  • يرد بـ404 إن لم تكن المنافسة ظاهرة لك. ويرد بـ403 عند التحديد إن كان من أنشأ المفتاح قد حذف.

المنتج مرشح لكود مادة نوبكو حين يكون مرتبطا بذلك الكود في كتالوجك. والاختيار هو المنتج الوحيد الذي ستورده مؤسستك لبند بعينه.

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

للقراءة فقط · الصلاحية tenders.read · كل الأدوار · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف المنافسة.

ما يعيده: links: مدخل لكل كود مادة له مرشحون (nupco_code وproducts، ولكل منتج id وproduct_name وdescription وnupco_product_code وmanufacturers وis_default وpacking)، وselections: مدخل لكل بند له اختيار (tender_item_id وproduct_id وproduct_name وcatalogue_number وarchived وpacking ومستوى البند المحفوظ وlevel وconversion). ويحمل كل منتج مرشح وكل اختيار تكلفة المنتج في الكتالوج (cost_price بعملة cost_currency، وتكون null إن لم تسجل) إذا كان دورك يسمح برؤية التكلفة، ويحمل الاختيار عندها cost_sar_per_tender_unit أيضا. ويحملان سعر البيع (sale_price_sar) إذا كان دورك يسمح برؤية أسعار العطاء، ويحمل الاختيار عندها sale_price_per_tender_unit أيضا.

  • الكود الذي لا مرشح له لا يظهر في links. والقيمة archived: true تعني أن المنتج المختار نقل إلى المهملات بعد اختياره.
  • packing مستويات المنتج: الوحدة (unit_of_measure)، والعبوة (package_type وفيها package_size وحدة)، والكرتون (case_type وفيه units_per_case وحدة)، وما تحويه الوحدة (content_quantity من content_unit)، ومعها price_basis، وهو المستوى الذي يذكر به سعرا التكلفة والبيع. والقيمة null تعني أنه غير محدد، فيستخدم السعر كما هو.
  • level يقول ما تساويه وحدة واحدة من البند من المنتج المختار: المستوى level (unit أو pack أو case أو content) مضروبا في count، وبقياس measure للمحتوى. والحالة status إما set (اختاره شخص بـtender_item_price_levels_set أو tender_item_product_selection_set)، أو matched (قرئ من وحدة البند واسمه ووصفه)، أو check (غير مؤكد، فيسعر بوحدة واحدة من المنتج حتى يراجع، ومعه suggestion). وstated_count عدد العبوة الذي يذكره وصف البند إن وجد.
  • المستوى المحفوظ للبند في price_level وprice_level_count وprice_level_measure وprice_level_product_id، والقيمة null تعني تلقائيا، ولا يطبق إلا ما دام price_level_product_id هو المنتج المختار. وsale_price_per_tender_unit سعر بيع المنتج لوحدة واحدة من البند بأربع خانات عشرية، وهو ما يسعر به tenders_catalog_pricing، وcost_sar_per_tender_unit تكلفة المنتج بالريال لوحدة واحدة من البند. وconversion يكون null حين يمكن تحويل سعر المنتج إلى وحدة البند، وإلا كان no_conversion ومعه missing (package_size أو units_per_case أو content_quantity أو measure_family)، فأكمل العدد بـproducts_update أو حدد مستوى البند.
  • المرشحون يأتون من روابط المنتجات بأكواد نوبكو، وتضيفها وتزيلها product_nupco_link وproduct_nupco_unlink.

tender_item_product_selection_set

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

يغير البيانات · الصلاحية tenders.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
tender_idintegerنعممعرف المنافسة.
tender_item_idintegerنعممعرف البند، ويجب أن يكون بندا قائما في المنافسة المذكورة.
product_idintegerنعممعرف منتج في كتالوج مؤسستك لم ينقل إلى المهملات، ويأتي من products_list.
price_levelstringلاما تساويه وحدة واحدة من البند من هذا المنتج: unit (وحدة واحدة من المنتج)، أو pack (عبوة من package_size وحدة)، أو case (كرتون من units_per_case وحدة)، أو content (واحد من content_unit مما تحويه الوحدة)، مضروبا في price_level_count. إن لم ترسله بقي كما هو ما دام المنتج نفسه، وعاد تلقائيا إذا تغير المنتج. وnull يعيده تلقائيا.
price_level_countnumberلاكم من price_level تساوي وحدة واحدة من البند، من 0.0001 إلى 1000000 بأربع منازل عشرية على الأكثر. الافتراضي 1، ولا يرسل إلا مع price_level.
price_level_measurestringلامع content فقط: القياس الذي تعد به وحدة البند حين يختلف عن content_unit للمنتج وهو من نوعه، مثل l لمنتج تحوي وحدته 500 ml. إن لم ترسله عدت بـcontent_unit للمنتج.
{
  "tender_id": 48213,
  "tender_item_id": 902114,
  "product_id": 3071,
  "price_level": "pack"
}
مثال على المعاملات

ما يعيده: الاختيار المحفوظ: id وtender_id وtender_item_id وproduct_id وnupco_code والمستوى المحفوظ (price_level وprice_level_count وprice_level_measure وprice_level_product_id)، وlevel بما تساويه وحدة البند كما يقرؤها الخادم (كما في tenders_product_links_list).

  • يرد بـ400 مع product_not_found إن لم يكن المنتج منتجا قائما في كتالوج مؤسستك، وبـ400 مع item_not_found إن لم يكن البند قائما في المنافسة، وبـ404 إن لم تكن المنافسة ظاهرة لك.
  • يرد بـ400 مع level_missing إن لم يكن للمنتج العدد الذي يحتاجه المستوى، ومعه field باسم الحقل الذي يملأ بـproducts_update. والمستوى لا يغير سعرا محفوظا، بل ما يحول إليه سعر المنتج وتكلفته عند التسعير من الكتالوج أو بالهامش. ولعدة بنود معا استخدم tender_item_price_levels_set.

tender_item_price_levels_set

يحدد لما يصل إلى 500 بند من منافسة واحدة ما تساويه وحدة واحدة من كل بند من المنتج المختار له، أو يعيده تلقائيا. لا يغير المنتج ولا السعر المحفوظ، بل ما يحول إليه سعر المنتج وتكلفته عند التسعير من الكتالوج أو بالهامش.

يغير البيانات · الصلاحية tenders.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
tender_idintegerنعممعرف المنافسة.
itemsobject[]نعمالبنود، من 1 إلى 500، وكل بند مرة واحدة.
items[].tender_item_idintegerنعممعرف البند.
items[].price_levelstringنعمما تساويه وحدة واحدة من البند من منتجه المختار: unit أو pack أو case أو content، مضروبا في price_level_count. وnull يعيده تلقائيا.
items[].price_level_countnumberلاكم من price_level تساوي وحدة واحدة من البند، من 0.0001 إلى 1000000 بأربع منازل عشرية على الأكثر. الافتراضي 1.
items[].price_level_measurestringلامع content فقط: القياس الذي تعد به وحدة البند حين يختلف عن content_unit للمنتج وهو من نوعه.
{
  "tender_id": 48213,
  "items": [
    {
      "tender_item_id": 902114,
      "price_level": "pack"
    },
    {
      "tender_item_id": 902115,
      "price_level": "unit",
      "price_level_count": 2
    },
    {
      "tender_item_id": 902118,
      "price_level": null
    }
  ]
}
مثال على المعاملات

ما يعيده: updated: البنود التي حفظ مستواها، لكل منها tender_item_id وproduct_id وprice_level وprice_level_count وprice_level_measure وprice_level_product_id. وfailed: البنود التي لم تحفظ، لكل منها tender_item_id وreason وerror. ومعهما updated_count وfailed_count.

  • أسباب الفشل: item_not_found لبند ليس قائما في المنافسة، وno_selection لبند بلا منتج مختار (اختره بـtender_item_product_selection_set، فهو يأخذ المستوى أيضا)، وproduct_not_found لبند منتجه المختار لم يعد في الكتالوج (اختر منتجا قائما)، وlevel_missing لمستوى ليس للمنتج عدده، ومعه field باسم الحقل الذي يملأ بـproducts_update، وselection_changed لبند تغير منتجه أثناء الاستدعاء.
  • البنود الصحيحة تحفظ ولو فشل بعضها، وتكرار tender_item_id يرفض الطلب كله. وبعد تحديد الوحدات شغل tenders_catalog_pricing مع replace_existing: true لإعادة التسعير.
  • يرد بـ404 إن لم تكن المنافسة ظاهرة لك.

tender_item_product_selection_clear

يزيل المنتج الذي اختارته مؤسستك لبند. ويبقى رابط المنتج بكود نوبكو للبند، فيظل مرشحا لذلك الكود.

يحذف بيانات أو يستبدلها · الصلاحية tenders.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
tender_item_idintegerنعممعرف البند.

ما يعيده: تأكيد الإزالة success: true.

  • ينجح الاستدعاء ولو لم يكن للبند اختيار.

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

يغير البيانات · الصلاحية tenders.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف المنافسة.

ما يعيده: linked بعدد الاختيارات التي تمت، وselections وفي كل منها tender_item_id وproduct_id وnupco_code.

  • يتخطى البنود المزالة والبنود بلا كود مادة والبنود التي لها اختيار. وللبنود ذات المرشحين المتعددين اختر بنفسك بـtender_item_product_selection_set.

tenders_catalog_pricing

يسعر كل بند يجد له كتالوجك منتجا بسعر بيع المنتج (sale_price_sar) محولا إلى وحدة البند، ويعلم البند مشاركا. وهو زر «التسعير من الكتالوج» في صفحة المنافسة.

يغير البيانات · الصلاحية bids.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف المنافسة.
dry_runbooleanلاtrue يعرض ما سيسعر دون أن يكتب شيئا. الافتراضي false.
replace_existingbooleanلاtrue يعيد تسعير البنود التي لها سعر أيضا، والصفر منها. الافتراضي false، فيبقى كل سعر مدخل كما هو.
{
  "id": 48213,
  "dry_run": true
}
مثال على المعاملات

ما يعيده: priced: البنود المسعرة (أو التي ستسعر في التجربة)، لكل منها tender_item_id وproduct_id وunit_price (لوحدة واحدة من البند) وsource (selected أو only أو default أو lowest) وcatalog_price (سعر البيع كما في الكتالوج) وbasis وprice_level وlevel_count وlevel_measure وlevel_status وlevel_reason وsuggestion وfactor. وunit_check بالبنود المسعرة التي وحدتها غير مؤكدة، وalready_priced بعدد البنود التي أبقي سعرها، وskipped بعدد البنود المتروكة لكل سبب (ambiguous وno_sale_price وno_product وno_conversion وrounds_to_zero)، وskipped_items بها، وmessages بما يفعل في كل حالة، وlowest_price_allowed.

  • المنتج لكل بند: المنتج المختار للبند، وإلا المنتج الوحيد المرتبط بكود نوبكو للبند، وإلا المنتج الافتراضي للكود (يحدد بـproduct_nupco_link مع is_default: true)، وإلا أقل سعر بيع بين منتجات الكود، ما لم يوقف المالك ذلك في إعدادات المؤسسة (يعمل افتراضيا). وما عدا ذلك يترك بسبب ambiguous.
  • المنتج الذي لا سعر بيع له يترك بسبب no_sale_price ولا يستبدل بمنتج آخر. والمنتج الذي يختاره الاستدعاء يصبح المنتج المختار للبند.
  • سعر البيع في الكتالوج يذكر لمستوى price_basis للمنتج، فيحول إلى ما تساويه وحدة واحدة من البند ويقرب إلى أربع منازل عشرية: المستوى الذي حدد للبند، وإلا ما يقرأ من وحدة البند واسمه ووصفه. والمنتج الذي لا price_basis له يستخدم سعره كما هو. وأقل سعر يقارن بعد التحويل، بين المنتجات التي وحدتها للبند مؤكدة أولا.
  • البند الذي وحدته غير مؤكدة يسعر بوحدة واحدة من المنتج ويذكر في unit_check مع اقتراح، فراجعه وحدد وحدته بـtender_item_price_levels_set ثم أعد التسعير مع replace_existing: true. والبند الذي يتعذر تحويل سعره لنقص عدد في بيانات التعبئة (no_conversion، ومعه missing) أو يصبح سعره 0.0000 بعد التقريب (rounds_to_zero) يترك.
  • شغله أولا بـdry_run: true واعرض النتيجة على الشخص، ثم شغله فعليا حين يوافق.

tenders_create_products_from_items

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

يغير البيانات · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف المنافسة.
item_idsinteger[]نعممعرفات البنود، من 1 إلى 500. يصبح كل بند منتجا واحدا. لا يقبل نصا للمنتج، فبياناته من البند وحده.
{
  "id": 48213,
  "item_ids": [
    902114,
    902115
  ]
}
مثال على المعاملات

ما يعيده: created: المنتجات المنشأة، لكل منها tender_item_id وproduct_id وproduct_name وdescription وnupco_code، وcreated_count بعددها.

  • لا يصلح للتكرار: تشغيله مرتين ينشئ منتجات مكررة. افحص tenders_product_links_list قبله.
  • يستبدل المنتج المختار سلفا لهذه البنود. ويبقى المنتج السابق في الكتالوج مرشحا للكود.
  • يفحص الطلب كله قبل أن ينشئ شيئا. يرد بـ400 مع items_not_found إن لم يكن أحد المعرفات بندا قائما في المنافسة، وبـ400 مع item_unnamed لبند بلا اسم، وبـ402 مع plan_limit_reached (ومعه limit وcurrent) إن كان عدد المنتجات سيتجاوز حد خطتك.
  • إن عاد selections_failed: true فالمنتجات أنشئت لكن اختيارها للبنود تعذر. لا تعد التشغيل، واختر المنتجات بـtender_item_product_selection_set.

أسعار الموردين

تسجيل ما عرضه مورد لبند دون إرسال طلب تسعير. وللطلبات الكاملة راجع طلبات التسعير وعروض الموردين.

tenders_sourcing_price_add

يسجل السعر الذي عرضه مورد لبند من بنود المنافسة، تدخله بيدك دون إرسال طلب تسعير. سم المورد بـmanufacturer_id من دليلك أو بـsupplier_name. كل استدعاء يضيف عرضا جديدا، ويدخل العرض في سجل التوريد للبنود التي تحمل المنتج أو كود نوبكو نفسه في منافسات أخرى.

يغير البيانات · الصلاحية tenders.write · الأدوار: المالك، المدير، المشتريات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف المنافسة.
tender_item_idintegerنعممعرف البند، ويجب أن يكون بندا قائما في هذه المنافسة.
unit_pricenumberنعمسعر الوحدة كما عرضه المورد وبعملته، صفر أو أكثر. لا تحوله بنفسك.
currencystringلارمز العملة بثلاثة أحرف (ISO 4217) مثل SAR وEUR وCNY. الافتراضي USD. وقائمة العملات المدعومة في fx_rates_get.
fx_ratenumberلاعدد وحدات العملة في الدولار الواحد. إن غاب استخدمت المنصة سعرا افتراضيا: USD وSAR ثابتان (1 و3.75) وعملات الخليج المربوطة بالدولار بسعر ربطها وغيرها بآخر سعر للبنك المركزي الأوروبي. وعملة بلا سعر معروف (مثل KWD وEGP) تطلب هذا الحقل.
manufacturer_idintegerلامعرف الشركة المصنعة في دليلك التي جاء منها العرض، ويأتي من manufacturers_list. أرسل null لتركه فارغا.
supplier_namestringلااسم المورد نصا حرا، حتى 200 حرف. مطلوب إن لم ترسل manufacturer_id. احذف الحقل ولا ترسل null.
supplier_companystringلاشركة المورد، حتى 200 حرف.
supplier_emailstringلاالبريد الإلكتروني للمورد. يجب أن يكون عنوانا صحيحا، وحده 320 حرفا.
supplier_phonestringلاهاتف المورد، حتى 50 حرفا.
incotermsstringلاشرط التسليم الدولي مثل CIF أو EXW، حتى 100 حرف.
lead_time_daysintegerلامدة التوريد بالأيام، من 0 إلى 3650. أرسل null لتركها فارغة.
catalog_nostringلارقم الكتالوج عند المورد، حتى 100 حرف. أرسل null لتركه فارغا.
weight_kgnumberلاوزن الوحدة بالكيلوغرام، صفر أو أكثر. أرسل null لتركه فارغا.
units_per_caseintegerلاعدد الوحدات في الكرتونة، عدد صحيح موجب. أرسل null لتركه فارغا.
product_idintegerلامعرف منتج الكتالوج الذي يخصه العرض، ويأتي من products_list. أرسل null لتركه فارغا.
notesstringلاملاحظات على العرض، حتى 2000 حرف. أرسل null لتركها فارغة.
{
  "id": 48213,
  "tender_item_id": 902114,
  "unit_price": 0.34,
  "currency": "EUR",
  "supplier_name": "Medline Europe GmbH",
  "incoterms": "CIF",
  "lead_time_days": 60,
  "units_per_case": 1000
}
مثال على المعاملات

ما يعيده: العرض المسجل: rfq_id (سجل التوريد الخاص بالمنافسة الذي يحفظ العرض) وresponse_id وsupplier_name وcurrency وfx_rate.

  • يحفظ السعر كما عرضه المورد وبعملته، مع سعر الصرف الذي استخدم وقت التسجيل. وتقارن التحليلات بالدولار وتعرض السعر الأصلي بجانبه.
  • الحقل manufacturer_id أو supplier_name مطلوب، وأحدهما كاف. وحقول المورد النصية الاختيارية تحذف عند عدم الحاجة ولا ترسل null.
  • يرد بـ400 مع invalid_items إن لم يكن البند قائما في هذه المنافسة، وبـ400 مع manufacturer_not_found إن لم تكن الشركة في دليلك. وعملة غير مدعومة أو بلا سعر صرف تردان بـ400 برسالة تسمي ما يلزم إرساله.
  • يرد بـ403 إن كان من أنشأ المفتاح قد حذف.

استيراد طلبات Badail POA

الأداة الوحيدة في هذه الصفحة التي تكتب خارج مؤسستك: تنشئ منافسات نوبكو مشتركة تراها كل المؤسسات.

tenders_badail_poa_import

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

يغير البيانات · الصلاحية tenders.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
content_base64stringلاملف .xlsx واحد منزل من قائمة طلبات POA في بوابة نوبكو، بترميز base64. حجمه بعد فك الترميز حتى 5 ميغابايت، ويرفض الخادم أي طلب يتجاوز نحو 4.5 ميغابايت. أرسل الملف الحقيقي دائما. أرسل هذا الحقل أو files، ولا تجمع بينهما.
filenamestringلااسم ملف content_base64 الأصلي، حتى 300 حرف. يظهر في الرد بجانب الصفوف، ولا يؤثر في الاستيراد.
filesobject[]لاعدة ملفات تستورد معا بدل content_base64، من 1 إلى 20، وتقرأ بالترتيب المرسل. مجموع أحجامها بعد فك الترميز حتى 5 ميغابايت.
files[].content_base64stringنعمملف .xlsx بترميز base64. أرسل الملف الحقيقي دائما.
files[].filenamestringلااسم الملف الأصلي، حتى 300 حرف. يسمى الملف في الرد به، وإن غاب سمي file 1 وfile 2 وهكذا.
statusesstring[]لاحالات البوابة المراد استيرادها مثل PAY_ON_ACCOUNT_BY_BADAIL، حتى 50 حالة، ولا يفرق بين الأحرف الكبيرة والصغيرة. إن غاب استوردت كل الصفوف.
dry_runbooleanلاtrue يعرض ما سينشأ أو يحدث ولا يكتب شيئا. الافتراضي false.
{
  "content_base64": "UEsDBBQABgAIAAAAIQ...",
  "filename": "poaRequest_12.xlsx",
  "statuses": [
    "PAY_ON_ACCOUNT_BY_BADAIL"
  ],
  "dry_run": true
}
مثال على المعاملات

ما يعيده: العدادات created وupdated وfailed وdry_run، وقائمة requests لكل طلب فيها poa_request وtender_id وoutcome (إحدى created وupdated وwould_create وwould_update وfailed) وitems وdeadline وstatus وfile وweb_url، وقائمتا skipped وwarnings برقم الصف واسم الملف file ورسالة، وfiltered_out وstatus_counts بعدد الطلبات لكل حالة، وfiles بكل ملف وعدد الطلبات المأخوذة منه.

  • كود مادة كل بند هو النصف الأول من الكود العام في البوابة (4111610529900_4111610529905 يصبح 4111610529900). وتاريخ الطلب يقرأ بصيغة يوم-شهر-سنة. وآخر موعد للتقديم last_offer_date هو نهاية اليوم الخامس من أيام العمل السعودية (الأحد إلى الخميس) بعد يوم الطلب، ولا تحتسب العطل الرسمية.
  • إعادة استيراد ملف أحدث تحدث الطلبات الموجودة في بياناتها الأساسية فقط (الحالة والعميل وأمر الشراء والاسم)، ولا تمس بنودها ولا مواعيدها، فتبقى الأسعار وعروض الأسعار المبنية عليها سليمة.
  • الصفوف التي ينقصها رقم الطلب أو اسم العميل أو تاريخ صحيح أو الكود العام، وأرقام الطلبات المكررة، تدرج في skipped ولا يستورد منها شيء. والصفوف التي لا تتطابق قوائمها المجمعة تستورد مع ملاحظة في warnings.
  • مع عدة ملفات يؤخذ الطلب المتكرر من أول ملف ورد فيه، ويدرج تكراره في الملفات التالية في skipped باسم الملف الأول. والملف الذي لا يقرأ يرفض الاستيراد كله برد 422 يذكر اسمه، قبل كتابة أي شيء.
  • فوق الصلاحية، يجب أن يكون من أنشأ المفتاح أو الاتصال مدير منصة أو ممن منحوا صلاحية جمع منافسات اعتماد. دور المؤسسة لا يمنحها، وبدونها يرد الاستدعاء بـ403. والملف الذي ليس تصديرا صحيحا لطلبات POA يرد بـ422.