أدوات MCP
المنتجات
أدوات MCP لكتالوج المنتجات: السجلات والمهملات والربط بالشركات المصنعة وبرموز نوبكو وسجل الأسعار وتنبيهات المنافسات المطابقة.
المنتج سجل في كتالوج مؤسستك يصف ما تبيعه: اسمه ورمز نوبكو ورقم الكتالوج وبيانات التسجيل والتعبئة والأسعار. وما تحفظه هنا تقرؤه بقية المنصة: يطابق المنتج المنافسات الجديدة، ويملأ ملفات نوبكو وعروض الأسعار، وتؤخذ منه نسبة الضريبة في كل بند. وللمنتج روابط بالشركات المصنعة وبرموز نوبكو، ولها أدواتها أدناه. وهذا هو الكتالوج نفسه الذي يشرحه دليل المنتجات.
unit_of_measure، واسم العبوة في package_type وعدد الوحدات فيها في package_size، واسم الكرتون في case_type (والفارغ يعرض Carton) وعدد الوحدات فيه في units_per_case، وهو عدد وحدات لا عبوات. وما تحتويه الوحدة الواحدة، كمئة فحص في الفيال أو 500 مل في الكيس، في content_quantity وcontent_unit معا، وهو غير الحجم الفعلي في volume. ويضبط packing_kind نوع المنتج الذي يقترح أسماء المستويات في التطبيق. أما packing_uom وunits_per_inner فاسمان بديلان للحقلين unit_of_measure وpackage_size، ويبقي النظام كل زوج متطابقا، فاستخدم الاسم الأول من كل زوج. ويشرح دليل مستويات التعبئة هذه الحقول بالأمثلة.cost_price وcost_currency وsale_price_sar) من كل رد لا يحق لدورك رؤيتها فيه، وتتجاهل ما ترسله منها. والحد حسب الخطة: 10 منتجات في خطة البداية، و100 في الاحترافية، وبلا حد في خطة المؤسسات. ولا تحتسب المنتجات التي في المهملات.لكل منتج سعر تكلفة واحد وسعر بيع واحد، ولكل منهما مستوى. يقول price_basis إن كان السعران للوحدة (unit) أو للعبوة (pack) أو للكرتون (case) أو لوحدة واحدة مما تحتويه الوحدة (content، كسعر الفحص الواحد). ومن هذا السعر الواحد يحسب التسعير من الكتالوج والتسعير بالهامش سعر كل بند بوحدة المنافسة: 150 ريالا للكرتون الذي فيه 1000 قفاز تصير 15 للعلبة التي فيها 100، و0.15 للقفاز. وإن لم يحدد المستوى استخدم السعر كما هو في كل بند، كما كان قبل هذه الحقول. فأرسل price_basis مع كل سعر، ولا تقسم السعر بنفسك.
| الأداة | ما تفعله |
|---|---|
| products_list | عرض المنتجات |
| products_get | عرض منتج |
| products_similar | منتجات تحمل رمز نوبكو نفسه |
| catalog_files_list | البحث في مكتبة المستندات |
| products_export_csv | تصدير الكتالوج كاملا |
| products_import_template | تحميل قالب استيراد المنتجات |
| products_create | إضافة منتج |
| products_update | تعديل منتج |
| products_bulk_create | إضافة منتجات بالجملة |
| products_bulk_update | تعديل منتجات بالجملة |
| products_delete | نقل منتج إلى المهملات |
| products_trash_list | عرض المنتجات المحذوفة |
| products_restore | استعادة منتج من المهملات |
| products_purge | حذف المنتجات نهائيا |
| product_manufacturer_link | ربط منتج بشركة مصنعة |
| product_manufacturer_unlink | فك ربط منتج بشركة مصنعة |
| product_manufacturer_bulk_link | ربط عدة منتجات بشركة مصنعة |
| product_manufacturer_set_default | تحديد الشركة المصنعة الافتراضية |
| product_nupco_link | ربط منتج برمز نوبكو |
| product_nupco_unlink | فك ربط منتج برمز نوبكو |
| products_sourcing_history | سجل أسعار الموردين لمنتج |
| products_historical_prices | سجل ترسية نوبكو لمنتج |
| products_alerts_list | عرض تنبيهات المنتجات |
| product_compliance_letter_pdf | إنشاء خطاب امتثال للمنتج |
قراءة الكتالوج
ثلاث أدوات للقراءة: قائمة بحث ترشح المنتجات، وبطاقة منتج واحد بتفاصيلها، وتصدير للكتالوج كاملا.
products_list
يعرض منتجات كتالوج مؤسستك من الأحدث إلى الأقدم، ومع كل منتج روابط صوره. يبحث بكلمات عادية أو بصيغة حقول الكتالوج، ويقصر النتائج على شركة مصنعة، ويضيف الشركات المرتبطة بكل منتج إن طلبت ذلك. ولا يعرض ما في المهملات.
للقراءة فقط · الصلاحية products.read · كل الأدوار · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
page | integer | لا | رقم الصفحة، ويبدأ من 1. |
page_size | integer | لا | عدد النتائج في الصفحة: 20 افتراضيا، وحده الأقصى 100. |
q | string | لا | نص البحث. الكلمة العادية تطابق جزءا من اسم المنتج أو رمز نوبكو أو رقم الكتالوج أو اسم شركة مصنعة مرتبطة. وتقبل الصيغة المنظمة الحقول name: وdescription: وcode: وcatalogue: وmanufacturer: وkeywords:، مع AND وOR وNOT والأقواس والشرطة - للاستبعاد. والحقل keywords: يطابق الكلمة المفتاحية كاملة لا جزءا منها. مثال: manufacturer:acme -gauze. ويرد الخادم بخطأ 400 يوضح السبب إن كان الاستعلام غير صحيح. |
manufacturer_id | integer | لا | يقصر النتائج على المنتجات المرتبطة بهذه الشركة المصنعة. المعرف من `manufacturers_list`. وإن لم يرتبط بها منتج جاءت صفحة فارغة. |
include_manufacturers | boolean | لا | true يضيف إلى كل منتج الحقل manufacturers، وهو قائمة شركاته المصنعة، ولكل منها id وname وis_default. |
group_by | string | لا | القيمة nupco_code تجمع المنتجات المطابقة حسب رمز نوبكو، الرمز الرئيسي والرموز المرتبطة، بدل قائمتها العادية. يأتي أولا الرمز الذي يحمله أكثر المنتجات، وفي الآخر المنتجات التي لا رمز لها. والمنتج الذي يحمل رمزين يظهر تحت كل منهما. |
{
"q": "manufacturer:acme -gauze",
"include_manufacturers": true,
"page_size": 50
}ما يعيده: صفحة من المنتجات في data مع total وpage وpage_size وtotal_pages. يحمل كل منتج حقول سجله ومعها photo_urls، وهي روابط صوره.
- مع
group_byتأتيgroupsبدلdata. لكل مجموعةnupco_code(وقيمتهnullللمنتجات التي لا رمز لها) وproduct_countوoffsetوproducts، ويحمل كل منتج فيهاnupco_codes، أي كل رموزه. ويضاف إلى الردtotalوهو عدد المنتجات المطابقة، وtotal_codesوproducts_without_codeوtotal_rows. تعد الصفحات الصفوف لا المجموعات، فقد تكمل المجموعة في الصفحة التالية، وحينها يكونoffsetأكبر من صفر. - روابط الصور مؤقتة، فاطلبها عند الحاجة ولا تحفظها.
- تحذف حقول الأسعار من النتائج بحسب دورك (انظر مقدمة الصفحة).
products_get
يعرض منتجا واحدا بكل حقوله، مع روابط صوره وقائمة مرفقاته. استخدمه حين تحتاج تفاصيل منتج عرفت معرفه من القائمة.
للقراءة فقط · الصلاحية products.read · كل الأدوار · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف المنتج، ويأتي من products_list. |
ما يعيده: سجل المنتج، ومعه photo_urls وattachments. لكل مرفق category (إحدى القيم sfda_cert وcatalog وother) وname وsize وuploaded_at وurl.
- ترد الأداة بخطأ 404 إن لم يوجد المنتج أو كان في المهملات. ولتجد منتجا في المهملات استخدم `products_trash_list`.
- روابط الصور والمرفقات مؤقتة، فاطلبها عند الحاجة ولا تحفظها.
products_similar
يعرض منتجات كتالوجك الأخرى التي تحمل أحد رموز نوبكو لهذا المنتج، رمزه الرئيسي أو رمزا مرتبطا به. وهي البطاقة التي تظهر في صفحة المنتج، والمنتجات نفسها التي تجمعها القائمة تحت الرمز.
للقراءة فقط · الصلاحية products.read · كل الأدوار · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف المنتج، ويأتي من products_list. |
{
"id": 42
}ما يعيده: codes، وهي رموز المنتج نفسه والرئيسي أولها، وproducts مرتبة بعدد الرموز المشتركة. لكل منتج حقول سجله وshared_codes وnupco_codes وphoto_urls وmanufacturers.
- تقارن الرموز بعد حذف المسافات الزائدة وتوحيد كتابتها، فالرمز المكتوب كما يخرج من Excel يطابق أصله.
- تحذف حقول الأسعار من النتائج بحسب دورك (انظر مقدمة الصفحة).
catalog_files_list
يبحث في مكتبة مستندات مؤسستك في قائمة واحدة: صور المنتجات ومرفقاتها (شهادة الهيئة العامة للغذاء والدواء، الكتالوج، غير ذلك) ومرفقات الشركات المصنعة (الكتالوج، ترخيص SFDA AR، شهادة ISO، خطاب التفويض) ومستندات أوامر البيع (أمر شراء العميل). وهي صفحة مكتبة المستندات في التطبيق.
للقراءة فقط · الصلاحية products.read · كل الأدوار · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
q | string | لا | الكلمات المطلوبة، حتى 200 حرف. يجب أن تتحقق كل كلمة في موضع ما من اسم المنتج أو رمز نوبكو الرئيسي أو المرتبط أو رقم الكتالوج أو أسماء شركاته المصنعة أو رقم أمر البيع أو عميله أو رقم أمر شراء العميل أو اسم الملف أو نوعه، فعبارة syringe 5ml cert تضيق النتائج ولا توسعها. |
scope | string | لا | all (الافتراضي) أو products لملفات المنتجات فقط أو manufacturers لملفات الشركات المصنعة فقط أو sales_orders لمستندات أوامر البيع فقط. |
category | string | لا | نوع واحد من الملفات: photo أو sfda_cert أو catalog أو other أو sfda_ar أو iso أو authorization أو purchase_order لأمر شراء العميل. والنوع catalog يشمل كتالوجات المنتجات والشركات المصنعة معا. |
manufacturer_id | integer | لا | يقصر النتائج على ملفات هذه الشركة المصنعة وملفات المنتجات المرتبطة بها. المعرف من `manufacturers_list`. |
page | integer | لا | رقم الصفحة، ويبدأ من 1. |
page_size | integer | لا | عدد الملفات في الصفحة: 50 افتراضيا، وحده الأقصى 100. |
{
"q": "syringe cert",
"scope": "products",
"page_size": 20
}ما يعيده: صفحة من الملفات في data مع total وpage وpage_size وtotal_pages. لكل ملف owner_kind (product أو manufacturer أو sales_order) وowner_id وowner_name وnupco_code وcatalogue_number (وهو رقم أمر شراء العميل في أمر البيع) وcustomer_name وmanufacturer_names وcategory وname وsize وmime_type وuploaded_at وurl.
- لا تظهر ملفات الشركات المصنعة إلا إذا كان للمفتاح نطاق
manufacturers.readأيضا، ولا تظهر مستندات أوامر البيع إلا إذا كان له نطاقorders.readوكان دور صاحبه يفتح مستندات أوامر البيع (كل الأدوار عدا الفني والمشتريات). وافتح صاحب الملف بـ `products_get` أوmanufacturers_getأو `sales_orders_get`. - الروابط مؤقتة وتنتهي بعد ساعة، فاطلبها عند الحاجة ولا تحفظها.
products_export_csv
يصدر كتالوج مؤسستك كاملا، كل الصفوف لا صفحة واحدة، نصا بصيغة CSV يقرؤه Claude في الرد نفسه. وهو للمالك والمدير فقط.
للقراءة فقط · الصلاحية export · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات
لا معاملات.
ما يعيده: نص CSV بترميز UTF-8 وعلامة BOM في أوله: صف للرؤوس ثم صف لكل منتج. وهو نص في الرد لا ملف.
- الرؤوس بالإنجليزية وتطابق ما يقرؤه `sheet_import`، فيمكنك تعديل الملف واستيراده من جديد.
- السعر غير المدخل يظهر خلية فارغة لا صفرا. وتفصل فاصلة منقوطة (
;) بين الشركات المصنعة وبين الكلمات المفتاحية في الخلية الواحدة. - لا تصدر روابط الصور لأنها مؤقتة.
products_import_template
ينزل قالب Excel لاستيراد المنتجات: ورقة Products بأعمدة الاستيراد الأساسية، وورقة تعليمات تشرح كل عمود ومثالا عليه وكل عمود آخر يقبله الاستيراد. سلمه لصاحب الكتالوج ليملأه.
للقراءة فقط · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
locale | string | لا | لغة ورقة التعليمات وملاحظات العناوين: ar أو en، والافتراضي en. وتبقى العناوين بالإنجليزية في اللغتين. |
{
"locale": "ar"
}ما يعيده: الملف بصيغة xlsx مرمزا بـbase64، مع اسمه ونوعه وحجمه.
- عناوين القالب هي عناوين الاستيراد نفسها، فالنسخة المملوءة التي تعطيها `sheet_import` بالهدف
productsتقرأ أعمدتها من عناوينها دون خطوة التعرف. ولا يضم القالب صف مثال، فالمثال المتروك في الورقة يستورد منتجا. - أعمدة الأسعار التي لا يحق لدور صاحب المفتاح رؤيتها لا تظهر في القالب.
إضافة المنتجات وتعديلها
الإضافة والتعديل فرديان أو بالجملة. الأدوات الفردية تقبل كل حقول المنتج، والأدوات الجماعية تقبل مجموعة أصغر منها.
products_create
يضيف منتجا إلى كتالوج مؤسستك. الاسم هو الحقل الوحيد المطلوب، ويمكن ملء الباقي لاحقا. ورمز نوبكو الذي ترسله يضاف أيضا إلى روابط رموز نوبكو للمنتج. وترد الأداة بخطأ 402 حين تبلغ مؤسستك حد المنتجات في خطتها.
يغير البيانات · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
product_name | string | نعم | اسم المنتج، من 1 إلى 200 حرف. |
description | string | لا | وصف حر للمنتج، حتى 2000 حرف. |
keywords | string[] | لا | كلمات مفتاحية تستخدم في البحث في الكتالوج (keywords:) ولا تطابق المنافسات، حتى 20 كلمة وطول الكلمة 100 حرف. القائمة التي ترسلها تحل محل القائمة المخزنة كلها. |
nupco_product_code | string | لا | رمز نوبكو الرئيسي للمنتج، حتى 100 حرف. يضاف أيضا إلى روابط رموز نوبكو للمنتج. |
search_query | string | لا | استعلام بحث محفوظ تطابق به التنبيهات المنافسات، حتى 500 حرف وبصيغة صفحة البحث نفسها. لا يطابق المنتج المنافسات باسمه ولا بكلماته المفتاحية، بل باستعلامه أو برموز نوبكو المرتبطة به، فمن لا يحمل أيا منهما لا يطابق أي منافسة. يرفض الاستعلام المنظم الذي لا يمكن قراءته أو الذي يذكر حقلا غير معروف أو يخلو من كلمة مطلوبة. |
agency_filter | string | لا | نص يجب أن يرد في اسم الجهة المشترية كي تحتسب المطابقة، حتى 200 حرف. |
weight_kg | number | لا | وزن الوحدة بالكيلوغرام، من 0 إلى 99999.999. |
length_cm | number | لا | طول الوحدة بالسنتيمتر، من 0 إلى 99999.99. |
width_cm | number | لا | عرض الوحدة بالسنتيمتر، من 0 إلى 99999.99. |
height_cm | number | لا | ارتفاع الوحدة بالسنتيمتر، من 0 إلى 99999.99. |
units_per_case | integer | لا | عدد الوحدات في الكرتون، عدد صحيح من 1 إلى 1000000. والعدد للوحدات لا للعبوات: 10 علب في كل منها 100 وحدة تساوي 1000. |
case_type | string | لا | اسم الكرتون، وهو المستوى الخارجي في تسلسل الوحدة ثم العبوة ثم الكرتون، مثل Carton أو Box أو Drum، حتى 50 حرفا. والقيمة الفارغة تعرض Carton. ويحفظ الاسم كما ترسله. |
case_weight_kg | number | لا | وزن الكرتون بالكيلوغرام، من 0 إلى 99999.999. |
case_length_cm | number | لا | طول الكرتون بالسنتيمتر، من 0 إلى 99999.99. |
case_width_cm | number | لا | عرض الكرتون بالسنتيمتر، من 0 إلى 99999.99. |
case_height_cm | number | لا | ارتفاع الكرتون بالسنتيمتر، من 0 إلى 99999.99. |
units_per_inner | integer | لا | اسم بديل لـpackage_size (عدد الوحدات في العبوة)، ويقبل أعدادا صحيحة فقط. يبقي النظام الاثنين متطابقين، فالأفضل استخدام package_size. |
inner_length_cm | number | لا | طول العبوة التي يصفها package_size بالسنتيمتر، من 0 إلى 99999.99. |
inner_width_cm | number | لا | عرض العبوة بالسنتيمتر، من 0 إلى 99999.99. |
inner_height_cm | number | لا | ارتفاع العبوة بالسنتيمتر، من 0 إلى 99999.99. |
unit_of_measure | string | لا | اسم الوحدة، وهي أصغر مستوى في تسلسل وحدة ثم عبوة ثم كرتون، مثل Piece. حتى 50 حرفا. |
country_of_origin_code | string | لا | رمز بلد المنشأ بحرفين كبيرين وفق المعيار ISO 3166-1، مثل SA أو DE. |
catalogue_number | string | لا | رقم الكتالوج لدى الشركة المصنعة، حتى 100 حرف. |
mdma_status | string | لا | حالة تسجيل MDMA: ready (جاهز) حين صدر التفويض، فترفق حزم التقديم شهادة هيئة الغذاء والدواء (SFDA). أو under_registration (تحت التسجيل) حين يكون الطلب قيد المراجعة، فتحل محل الشهادة رسالة حالة التسجيل التي يولدها النظام. |
listing_number | string | لا | رقم الإدراج لدى هيئة الغذاء والدواء (SFDA)، حتى 200 حرف. |
min_order_qty | integer | لا | أقل كمية يقبلها المورد في الطلب الواحد، عدد صحيح من 1 إلى 1000000. |
mdma_number | string | لا | رقم تفويض تسويق الأجهزة الطبية (MDMA) الصادر عن هيئة الغذاء والدواء، حتى 200 حرف. وهو غير mdma_status (حالة التفويض) وغير listing_number (رقم الإدراج). |
mdma_expiry | string | لا | تاريخ انتهاء تفويض MDMA بصيغة YYYY-MM-DD. |
shelf_life_years | number | لا | مدة صلاحية المنتج بالسنوات، وتقبل الكسور، أكبر من 0 وحتى 9999.99. |
first_delivery_days | integer | لا | مدة التوريد الأول بالأيام، من 0 إلى 3650. وإن تركت فارغة ورث المنتج القيمة الافتراضية لمؤسستك. |
order_delivery_days | integer | لا | مدة توريد الطلبات اللاحقة بالأيام، من 0 إلى 3650. وإن تركت فارغة ورث المنتج القيمة الافتراضية لمؤسستك. |
volume | number | لا | حجم الوحدة المباعة بالوحدة المذكورة في volume_unit، مثل 500. |
volume_unit | string | لا | وحدة قياس الحجم، مثل ml أو L. حتى 50 حرفا. |
content_quantity | number | لا | ما تحتويه الوحدة الواحدة (unit_of_measure) بوحدة content_unit: 100 لفيال فيه 100 فحص، و500 لكيس فيه 500 مل. يرسل مع content_unit، أو لا يرسل أي منهما. وهو غير الحجم الفعلي في volume، الذي يبقى عمود Volume في ملف نوبكو. |
content_unit | string | لا | وحدة content_quantity، وهي إحدى القيم test أو reaction أو dose أو tablet أو capsule أو ml أو l أو gal (الجالون الأمريكي) أو mcg أو mg أو g أو kg أو iu أو u أو cm أو m. |
package_type | string | لا | اسم العبوة التي يباع بها المنتج (حقل Package type في ملف نوبكو)، مثل Box أو Bottle. حتى 100 حرف. |
package_size | number | لا | عدد الوحدات في العبوة الواحدة (حقل Package size في ملف نوبكو)، مثل 100. وقد يكون كسريا مثل 2.5 لمنتج يقاس باللتر. |
packing_uom | string | لا | اسم بديل لـunit_of_measure (اسم الوحدة). يبقي النظام الاثنين متطابقين، فالأفضل استخدام unit_of_measure. |
packing_kind | string | لا | نوع المنتج الذي يضبط أسماء مستويات التعبئة في التطبيق: فئة عامة (item أو liquid أو tablet أو lab_test أو service للتركيب والتوصيل وغيرها من الخدمات: بلا تعبئة ولا بيانات طبية أو تسجيل، ووحدتها مهمة أو زيارة أو ساعة أو يوم أو شهر أو مبلغ مقطوع، ويستخدم سعرها كما هو في كل بنود المنافسات) أو نوع أدق (gloves أو tablets أو injectables أو liquids أو iv_fluids أو syringes أو sutures أو dressings أو rolls أو lab_reagent أو lab_control أو test_devices أو devices). |
foc_percent | number | لا | نسبة المجاني (FOC) التي تقدم مع المنتج، من 0 إلى 100. تظهر معلومة في ملف معلومات المنتج ولا تدخل في الحساب. |
vat_percent | number | لا | نسبة ضريبة القيمة المضافة لهذا المنتج من 0 إلى 100، وتكتب في كل صف من ملفات رد نوبكو. أرسل 0 للمنتجات الطبية المؤهلة للنسبة الصفرية. وnull تعني النسبة المعتادة 15. |
additional_info | string | لا | نص حر يظهر في سطر المعلومات الإضافية بملف معلومات المنتج، حتى 2000 حرف. |
price_basis | string | لا | المستوى الذي يخصه cost_price وsale_price_sar: unit (وحدة واحدة من unit_of_measure)، أو pack (عبوة فيها package_size وحدة)، أو case (كرتون فيه units_per_case وحدة)، أو content (وحدة واحدة من content_unit مما تحتويه الوحدة). وإن لم يحدد استخدم السعران كما هما في كل بنود المنافسات. أرسله كلما أرسلت سعرا. ويلزم كل مستوى عدده: pack يلزمه package_size عددا صحيحا لا يقل عن 1، وcase يلزمه units_per_case، وcontent يلزمه content_quantity وcontent_unit. وnull يمسحه، ومسحه في منتج له سعر محفوظ يلزمه reprice: "keep". |
cost_price | number | لا | سعر التكلفة بالعملة المحددة في cost_currency، من 0 إلى 9999999.99، لمستوى واحد من price_basis. |
cost_currency | string | لا | عملة cost_price: USD (دولار أمريكي) أو SAR (ريال سعودي). الافتراضي USD. |
sale_price_sar | number | لا | سعر البيع بالريال السعودي، من 0 إلى 9999999.99، لمستوى واحد من price_basis. |
is_medical | boolean | لا | هل المنتج جهاز أو مستلزم طبي. الافتراضي false. يحدد نوع خطاب الامتثال حين لا تحدد حالة MDMA. |
{
"product_name": "Disposable syringe 5 ml, Luer lock",
"nupco_product_code": "4111610529900",
"catalogue_number": "SYR-5-LL",
"keywords": [
"syringe",
"luer lock"
],
"unit_of_measure": "Piece",
"package_type": "Box",
"package_size": 100,
"units_per_case": 1000,
"country_of_origin_code": "DE",
"is_medical": true,
"vat_percent": 0,
"price_basis": "pack",
"cost_price": 12,
"cost_currency": "USD",
"sale_price_sar": 55
}ما يعيده: المنتج الذي أنشئ برد 201، بحقوله كاملة وid الجديد، وphoto_urls فارغة.
- عند بلوغ الحد يحمل رد 402 الحقول
error: plan_limit_reachedوlimitوcurrent. - يتجاهل الخادم عند الكتابة الحقول التي لا يراها دورك، فلا تحفظ المبيعات حقلي
cost_priceوcost_currency. - تعليم المنتج طبيا بهذه الأداة لا يغير
vat_percent. اضبطها بنفسك: 0 للمنتجات الطبية المؤهلة للنسبة الصفرية. - أرسل
price_basisمع السعرين، ومعه عدد المستوى:price_basis: "case"معunits_per_case. والمستوى الذي ينقصه عدده يرفض بخطأ 400 (price_basis_level_missing) يسمي الحقل، وcontent_quantityبلاcontent_unitيرفض بخطأ 400 (content_incomplete). - لاستيراد قائمة من ملف Excel أو CSV استخدم `sheet_import` بالهدف
products.
products_update
يعدل حقول منتج، ولا يتغير إلا ما ترسله. أرسل null لمسح حقل يقبل الفراغ. ورمز نوبكو الجديد يضاف إلى روابط المنتج، وتبقى الروابط القديمة حتى تفكها بـ`product_nupco_unlink`.
يغير البيانات · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف المنتج، ويأتي من products_list. |
product_name | string | لا | اسم المنتج الجديد، من 1 إلى 200 حرف. |
description | string | لا | وصف حر للمنتج، حتى 2000 حرف. أرسل null لمسحه. |
keywords | string[] | لا | كلمات مفتاحية تستخدم في البحث في الكتالوج (keywords:) ولا تطابق المنافسات، حتى 20 كلمة وطول الكلمة 100 حرف. القائمة التي ترسلها تحل محل القائمة المخزنة كلها. |
nupco_product_code | string | لا | رمز نوبكو الرئيسي للمنتج، حتى 100 حرف. يضاف أيضا إلى روابط رموز نوبكو للمنتج. أرسل null لمسحه. |
search_query | string | لا | استعلام بحث محفوظ تطابق به التنبيهات المنافسات، حتى 500 حرف وبصيغة صفحة البحث نفسها. لا يطابق المنتج المنافسات باسمه ولا بكلماته المفتاحية، بل باستعلامه أو برموز نوبكو المرتبطة به، فمن لا يحمل أيا منهما لا يطابق أي منافسة. يرفض الاستعلام المنظم الذي لا يمكن قراءته أو الذي يذكر حقلا غير معروف أو يخلو من كلمة مطلوبة. أرسل null لمسحه. |
agency_filter | string | لا | نص يجب أن يرد في اسم الجهة المشترية كي تحتسب المطابقة، حتى 200 حرف. أرسل null لمسحه. |
weight_kg | number | لا | وزن الوحدة بالكيلوغرام، من 0 إلى 99999.999. أرسل null لمسحه. |
length_cm | number | لا | طول الوحدة بالسنتيمتر، من 0 إلى 99999.99. أرسل null لمسحه. |
width_cm | number | لا | عرض الوحدة بالسنتيمتر، من 0 إلى 99999.99. أرسل null لمسحه. |
height_cm | number | لا | ارتفاع الوحدة بالسنتيمتر، من 0 إلى 99999.99. أرسل null لمسحه. |
units_per_case | integer | لا | عدد الوحدات في الكرتون، عدد صحيح من 1 إلى 1000000. والعدد للوحدات لا للعبوات: 10 علب في كل منها 100 وحدة تساوي 1000. أرسل null لمسحه. |
case_type | string | لا | اسم الكرتون، وهو المستوى الخارجي في تسلسل الوحدة ثم العبوة ثم الكرتون، مثل Carton أو Box أو Drum، حتى 50 حرفا. والقيمة الفارغة تعرض Carton. ويحفظ الاسم كما ترسله. أرسل null لمسحه. |
case_weight_kg | number | لا | وزن الكرتون بالكيلوغرام، من 0 إلى 99999.999. أرسل null لمسحه. |
case_length_cm | number | لا | طول الكرتون بالسنتيمتر، من 0 إلى 99999.99. أرسل null لمسحه. |
case_width_cm | number | لا | عرض الكرتون بالسنتيمتر، من 0 إلى 99999.99. أرسل null لمسحه. |
case_height_cm | number | لا | ارتفاع الكرتون بالسنتيمتر، من 0 إلى 99999.99. أرسل null لمسحه. |
units_per_inner | integer | لا | اسم بديل لـpackage_size (عدد الوحدات في العبوة)، ويقبل أعدادا صحيحة فقط. يبقي النظام الاثنين متطابقين، فالأفضل استخدام package_size. أرسل null لمسحه. |
inner_length_cm | number | لا | طول العبوة التي يصفها package_size بالسنتيمتر، من 0 إلى 99999.99. أرسل null لمسحه. |
inner_width_cm | number | لا | عرض العبوة بالسنتيمتر، من 0 إلى 99999.99. أرسل null لمسحه. |
inner_height_cm | number | لا | ارتفاع العبوة بالسنتيمتر، من 0 إلى 99999.99. أرسل null لمسحه. |
unit_of_measure | string | لا | اسم الوحدة، وهي أصغر مستوى في تسلسل وحدة ثم عبوة ثم كرتون، مثل Piece. حتى 50 حرفا. أرسل null لمسحه. |
country_of_origin_code | string | لا | رمز بلد المنشأ بحرفين كبيرين وفق المعيار ISO 3166-1، مثل SA أو DE. أرسل null لمسحه. |
catalogue_number | string | لا | رقم الكتالوج لدى الشركة المصنعة، حتى 100 حرف. أرسل null لمسحه. |
mdma_status | string | لا | حالة تسجيل MDMA: ready (جاهز) حين صدر التفويض، فترفق حزم التقديم شهادة هيئة الغذاء والدواء (SFDA). أو under_registration (تحت التسجيل) حين يكون الطلب قيد المراجعة، فتحل محل الشهادة رسالة حالة التسجيل التي يولدها النظام. أرسل null لمسحه. |
listing_number | string | لا | رقم الإدراج لدى هيئة الغذاء والدواء (SFDA)، حتى 200 حرف. أرسل null لمسحه. |
min_order_qty | integer | لا | أقل كمية يقبلها المورد في الطلب الواحد، عدد صحيح من 1 إلى 1000000. أرسل null لمسحه. |
mdma_number | string | لا | رقم تفويض تسويق الأجهزة الطبية (MDMA) الصادر عن هيئة الغذاء والدواء، حتى 200 حرف. وهو غير mdma_status (حالة التفويض) وغير listing_number (رقم الإدراج). أرسل null لمسحه. |
mdma_expiry | string | لا | تاريخ انتهاء تفويض MDMA بصيغة YYYY-MM-DD. أرسل null لمسحه. |
shelf_life_years | number | لا | مدة صلاحية المنتج بالسنوات، وتقبل الكسور، أكبر من 0 وحتى 9999.99. أرسل null لمسحه. |
first_delivery_days | integer | لا | مدة التوريد الأول بالأيام، من 0 إلى 3650. وإن تركت فارغة ورث المنتج القيمة الافتراضية لمؤسستك. أرسل null لمسحه. |
order_delivery_days | integer | لا | مدة توريد الطلبات اللاحقة بالأيام، من 0 إلى 3650. وإن تركت فارغة ورث المنتج القيمة الافتراضية لمؤسستك. أرسل null لمسحه. |
volume | number | لا | حجم الوحدة المباعة بالوحدة المذكورة في volume_unit، مثل 500. أرسل null لمسحه. |
volume_unit | string | لا | وحدة قياس الحجم، مثل ml أو L. حتى 50 حرفا. أرسل null لمسحه. |
content_quantity | number | لا | ما تحتويه الوحدة الواحدة (unit_of_measure) بوحدة content_unit: 100 لفيال فيه 100 فحص، و500 لكيس فيه 500 مل. يرسل مع content_unit، أو لا يرسل أي منهما. وهو غير الحجم الفعلي في volume، الذي يبقى عمود Volume في ملف نوبكو. أرسل null لمسحه. |
content_unit | string | لا | وحدة content_quantity، وهي إحدى القيم test أو reaction أو dose أو tablet أو capsule أو ml أو l أو gal (الجالون الأمريكي) أو mcg أو mg أو g أو kg أو iu أو u أو cm أو m. أرسل null لمسحه. |
package_type | string | لا | اسم العبوة التي يباع بها المنتج (حقل Package type في ملف نوبكو)، مثل Box أو Bottle. حتى 100 حرف. أرسل null لمسحه. |
package_size | number | لا | عدد الوحدات في العبوة الواحدة (حقل Package size في ملف نوبكو)، مثل 100. وقد يكون كسريا مثل 2.5 لمنتج يقاس باللتر. أرسل null لمسحه. |
packing_uom | string | لا | اسم بديل لـunit_of_measure (اسم الوحدة). يبقي النظام الاثنين متطابقين، فالأفضل استخدام unit_of_measure. أرسل null لمسحه. |
packing_kind | string | لا | نوع المنتج الذي يضبط أسماء مستويات التعبئة في التطبيق: فئة عامة (item أو liquid أو tablet أو lab_test أو service للتركيب والتوصيل وغيرها من الخدمات: بلا تعبئة ولا بيانات طبية أو تسجيل، ووحدتها مهمة أو زيارة أو ساعة أو يوم أو شهر أو مبلغ مقطوع، ويستخدم سعرها كما هو في كل بنود المنافسات) أو نوع أدق (gloves أو tablets أو injectables أو liquids أو iv_fluids أو syringes أو sutures أو dressings أو rolls أو lab_reagent أو lab_control أو test_devices أو devices). أرسل null لمسحه. |
foc_percent | number | لا | نسبة المجاني (FOC) التي تقدم مع المنتج، من 0 إلى 100. تظهر معلومة في ملف معلومات المنتج ولا تدخل في الحساب. أرسل null لمسحه. |
vat_percent | number | لا | نسبة ضريبة القيمة المضافة لهذا المنتج من 0 إلى 100، وتكتب في كل صف من ملفات رد نوبكو. أرسل 0 للمنتجات الطبية المؤهلة للنسبة الصفرية. وnull تعني النسبة المعتادة 15. |
additional_info | string | لا | نص حر يظهر في سطر المعلومات الإضافية بملف معلومات المنتج، حتى 2000 حرف. أرسل null لمسحه. |
price_basis | string | لا | المستوى الذي يخصه cost_price وsale_price_sar: unit (وحدة واحدة من unit_of_measure)، أو pack (عبوة فيها package_size وحدة)، أو case (كرتون فيه units_per_case وحدة)، أو content (وحدة واحدة من content_unit مما تحتويه الوحدة). وإن لم يحدد استخدم السعران كما هما في كل بنود المنافسات. أرسله كلما أرسلت سعرا. ويلزم كل مستوى عدده: pack يلزمه package_size عددا صحيحا لا يقل عن 1، وcase يلزمه units_per_case، وcontent يلزمه content_quantity وcontent_unit. وnull يمسحه، ومسحه في منتج له سعر محفوظ يلزمه reprice: "keep". |
cost_price | number | لا | سعر التكلفة بالعملة المحددة في cost_currency، من 0 إلى 9999999.99، لمستوى واحد من price_basis. أرسل null لمسحه. |
cost_currency | string | لا | عملة cost_price: USD (دولار أمريكي) أو SAR (ريال سعودي). الافتراضي USD. |
sale_price_sar | number | لا | سعر البيع بالريال السعودي، من 0 إلى 9999999.99، لمستوى واحد من price_basis. أرسل null لمسحه. |
is_medical | boolean | لا | هل المنتج جهاز أو مستلزم طبي. الافتراضي false. يحدد نوع خطاب الامتثال حين لا تحدد حالة MDMA. |
reprice | string | لا | ما يحدث للسعرين المحفوظين اللذين لا ترسلهما حين تغير price_basis محددا: convert يحولهما إلى المستوى الجديد (150 للكرتون الذي فيه 1000 وحدة يصير 15 للعبوة التي فيها 100)، وkeep يبقي الرقمين سعرا للمستوى الجديد. يلزم لهذا التغيير، ومسح price_basis يقبل keep وحدها. ولا يلزم حين لم يكن المستوى محددا من قبل، ولا حين ترسل السعرين الجديدين بنفسك. ولا يحفظ. |
{
"id": 1207,
"price_basis": "pack",
"reprice": "convert",
"package_size": 100
}ما يعيده: المنتج بعد التعديل، مع photo_urls.
- ترد الأداة بخطأ 404 إن لم يوجد المنتج أو كان في المهملات.
- يرد الخادم بخطأ 400 (
No fields to update) إن لم يحمل الطلب أي حقل يحق لدورك كتابته. - إرسال
nupco_product_codeجديد يضيف رابطا ولا يزيل القديم، وإرسالnullيمسح الحقل ويبقي الروابط كما هي. - تعليم المنتج طبيا هنا لا يغير
vat_percent: اضبطها بنفسك. - تحديد
price_basisفي منتج لم يكن له مستوى لا يغير الأرقام: يقول فقط ما كانت تعنيه. والسعر الذي ترسله يؤخذ للمستوى كما يتركه الطلب نفسه. ولا يغيرprice_basisوrepriceدور لا يرى سعر التكلفة (المبيعات)، فيتجاهلهما الخادم منه. - ترفض الأداة بخطأ 400 دون أن تكتب شيئا، والرسالة تسمي الحقل والطريق الذي ينجح:
price_basis_level_missingحين يخلو عدد المستوى المحدد (اضبطpackage_sizeأوunits_per_caseأوcontent_quantityفي الطلب نفسه، أو اختر مستوى آخر)، وcontent_incompleteحين يرسل أحدcontent_quantityوcontent_unitدون الآخر، وreprice_requiredحين يتغير مستوى محدد أو يمسح وللمنتج سعر محفوظ لا ترسله (أرسلrepriceأو السعرين الجديدين)، وconverted_price_out_of_rangeحين يتجاوز السعر بعد التحويل 9999999.99 (أرسل السعرين بنفسك أوreprice: "keep").
products_bulk_create
ينشئ حتى 500 منتج في استدعاء واحد. تحفظ صفوف المنتجات معا: إن فشل أي فحص، كالشركة المصنعة المجهولة أو حد الخطة، لم ينشأ شيء. ويمكنك ربط كل المنتجات الجديدة بشركة مصنعة واحدة، أو تسمية الشركات في كل صف: تطابق الأسماء مع شركاتك دون اعتبار حالة الأحرف، والاسم الجديد تنشأ له شركة.
يغير البيانات · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
products | object[] | نعم | صفوف المنتجات المراد إنشاؤها، من 1 إلى 500. |
products[].product_name | string | نعم | اسم المنتج، من 1 إلى 200 حرف. |
products[].description | string | لا | وصف حر للمنتج، حتى 2000 حرف. |
products[].nupco_product_code | string | لا | رمز نوبكو الرئيسي للمنتج، حتى 100 حرف. يضاف أيضا إلى روابط رموز نوبكو للمنتج. |
products[].catalogue_number | string | لا | رقم الكتالوج لدى الشركة المصنعة، حتى 100 حرف. |
products[].cost_price | number | لا | سعر التكلفة بالعملة المحددة في cost_currency، من 0 إلى 9999999.99، لمستوى واحد من price_basis. |
products[].cost_currency | string | لا | عملة cost_price: USD (دولار أمريكي) أو SAR (ريال سعودي). الافتراضي USD. |
products[].sale_price_sar | number | لا | سعر البيع بالريال السعودي، من 0 إلى 9999999.99، لمستوى واحد من price_basis. |
products[].units_per_case | integer | لا | عدد الوحدات في الكرتون، عدد صحيح من 1 إلى 1000000. والعدد للوحدات لا للعبوات: 10 علب في كل منها 100 وحدة تساوي 1000. |
products[].is_medical | boolean | لا | هل المنتج جهاز أو مستلزم طبي. الافتراضي false. يحدد نوع خطاب الامتثال حين لا تحدد حالة MDMA. |
products[].price_basis | string | لا | المستوى الذي يخصه cost_price وsale_price_sar: unit (وحدة واحدة من unit_of_measure)، أو pack (عبوة فيها package_size وحدة)، أو case (كرتون فيه units_per_case وحدة)، أو content (وحدة واحدة من content_unit مما تحتويه الوحدة). وإن لم يحدد استخدم السعران كما هما في كل بنود المنافسات. أرسله كلما أرسلت سعرا. ويلزم كل مستوى عدده: pack يلزمه package_size عددا صحيحا لا يقل عن 1، وcase يلزمه units_per_case، وcontent يلزمه content_quantity وcontent_unit. وnull يمسحه، ومسحه في منتج له سعر محفوظ يلزمه reprice: "keep". |
products[].case_type | string | لا | اسم الكرتون، وهو المستوى الخارجي في تسلسل الوحدة ثم العبوة ثم الكرتون، مثل Carton أو Box أو Drum، حتى 50 حرفا. والقيمة الفارغة تعرض Carton. ويحفظ الاسم كما ترسله. |
products[].content_quantity | number | لا | ما تحتويه الوحدة الواحدة (unit_of_measure) بوحدة content_unit: 100 لفيال فيه 100 فحص، و500 لكيس فيه 500 مل. يرسل مع content_unit، أو لا يرسل أي منهما. وهو غير الحجم الفعلي في volume، الذي يبقى عمود Volume في ملف نوبكو. |
products[].content_unit | string | لا | وحدة content_quantity، وهي إحدى القيم test أو reaction أو dose أو tablet أو capsule أو ml أو l أو gal (الجالون الأمريكي) أو mcg أو mg أو g أو kg أو iu أو u أو cm أو m. |
products[].packing_kind | string | لا | نوع المنتج الذي يضبط أسماء مستويات التعبئة في التطبيق: فئة عامة (item أو liquid أو tablet أو lab_test أو service للتركيب والتوصيل وغيرها من الخدمات: بلا تعبئة ولا بيانات طبية أو تسجيل، ووحدتها مهمة أو زيارة أو ساعة أو يوم أو شهر أو مبلغ مقطوع، ويستخدم سعرها كما هو في كل بنود المنافسات) أو نوع أدق (gloves أو tablets أو injectables أو liquids أو iv_fluids أو syringes أو sutures أو dressings أو rolls أو lab_reagent أو lab_control أو test_devices أو devices). |
products[].search_query | string | لا | استعلام بحث محفوظ تطابق به التنبيهات المنافسات، حتى 500 حرف وبصيغة صفحة البحث نفسها. لا يطابق المنتج المنافسات باسمه ولا بكلماته المفتاحية، بل باستعلامه أو برموز نوبكو المرتبطة به، فمن لا يحمل أيا منهما لا يطابق أي منافسة. يرفض الاستعلام المنظم الذي لا يمكن قراءته أو الذي يذكر حقلا غير معروف أو يخلو من كلمة مطلوبة. |
products[].unit_of_measure | string | لا | اسم الوحدة، وهي أصغر مستوى في تسلسل وحدة ثم عبوة ثم كرتون، مثل Piece. حتى 50 حرفا. |
products[].country_of_origin_code | string | لا | رمز بلد المنشأ بحرفين كبيرين وفق المعيار ISO 3166-1، مثل SA أو DE. |
products[].mdma_status | string | لا | حالة تسجيل MDMA: ready (جاهز) حين صدر التفويض، فترفق حزم التقديم شهادة هيئة الغذاء والدواء (SFDA). أو under_registration (تحت التسجيل) حين يكون الطلب قيد المراجعة، فتحل محل الشهادة رسالة حالة التسجيل التي يولدها النظام. |
products[].listing_number | string | لا | رقم الإدراج لدى هيئة الغذاء والدواء (SFDA)، حتى 200 حرف. |
products[].vat_percent | number | لا | نسبة ضريبة القيمة المضافة لهذا المنتج من 0 إلى 100، وتكتب في كل صف من ملفات رد نوبكو. أرسل 0 للمنتجات الطبية المؤهلة للنسبة الصفرية. وnull تعني النسبة المعتادة 15. |
products[].weight_kg | number | لا | وزن الوحدة بالكيلوغرام، من 0 إلى 99999.999. |
products[].length_cm | number | لا | طول الوحدة بالسنتيمتر، من 0 إلى 99999.99. |
products[].width_cm | number | لا | عرض الوحدة بالسنتيمتر، من 0 إلى 99999.99. |
products[].height_cm | number | لا | ارتفاع الوحدة بالسنتيمتر، من 0 إلى 99999.99. |
products[].inner_length_cm | number | لا | طول العبوة التي يصفها package_size بالسنتيمتر، من 0 إلى 99999.99. |
products[].inner_width_cm | number | لا | عرض العبوة بالسنتيمتر، من 0 إلى 99999.99. |
products[].inner_height_cm | number | لا | ارتفاع العبوة بالسنتيمتر، من 0 إلى 99999.99. |
products[].case_weight_kg | number | لا | وزن الكرتون بالكيلوغرام، من 0 إلى 99999.999. |
products[].case_length_cm | number | لا | طول الكرتون بالسنتيمتر، من 0 إلى 99999.99. |
products[].case_width_cm | number | لا | عرض الكرتون بالسنتيمتر، من 0 إلى 99999.99. |
products[].case_height_cm | number | لا | ارتفاع الكرتون بالسنتيمتر، من 0 إلى 99999.99. |
products[].min_order_qty | integer | لا | أقل كمية يقبلها المورد في الطلب الواحد، عدد صحيح من 1 إلى 1000000. |
products[].mdma_number | string | لا | رقم تفويض تسويق الأجهزة الطبية (MDMA) الصادر عن هيئة الغذاء والدواء، حتى 200 حرف. وهو غير mdma_status (حالة التفويض) وغير listing_number (رقم الإدراج). |
products[].mdma_expiry | string | لا | تاريخ انتهاء تفويض MDMA بصيغة YYYY-MM-DD. |
products[].shelf_life_years | number | لا | مدة صلاحية المنتج بالسنوات، وتقبل الكسور، أكبر من 0 وحتى 9999.99. |
products[].first_delivery_days | integer | لا | مدة التوريد الأول بالأيام، من 0 إلى 3650. وإن تركت فارغة ورث المنتج القيمة الافتراضية لمؤسستك. |
products[].order_delivery_days | integer | لا | مدة توريد الطلبات اللاحقة بالأيام، من 0 إلى 3650. وإن تركت فارغة ورث المنتج القيمة الافتراضية لمؤسستك. |
products[].volume | number | لا | حجم الوحدة المباعة بالوحدة المذكورة في volume_unit، مثل 500. |
products[].volume_unit | string | لا | وحدة قياس الحجم، مثل ml أو L. حتى 50 حرفا. |
products[].package_type | string | لا | اسم العبوة التي يباع بها المنتج (حقل Package type في ملف نوبكو)، مثل Box أو Bottle. حتى 100 حرف. |
products[].package_size | number | لا | عدد الوحدات في العبوة الواحدة (حقل Package size في ملف نوبكو)، مثل 100. وقد يكون كسريا مثل 2.5 لمنتج يقاس باللتر. |
products[].packing_uom | string | لا | اسم بديل لـunit_of_measure (اسم الوحدة). يبقي النظام الاثنين متطابقين، فالأفضل استخدام unit_of_measure. |
products[].foc_percent | number | لا | نسبة المجاني (FOC) التي تقدم مع المنتج، من 0 إلى 100. تظهر معلومة في ملف معلومات المنتج ولا تدخل في الحساب. |
products[].additional_info | string | لا | نص حر يظهر في سطر المعلومات الإضافية بملف معلومات المنتج، حتى 2000 حرف. |
products[].manufacturer_names | string[] | لا | أسماء الشركات المصنعة التي يرتبط بها هذا المنتج، حتى 20 اسما وطول الاسم 200 حرف. تطابق مع شركاتك دون اعتبار حالة الأحرف، والاسم غير الموجود تنشأ له شركة جديدة. |
manufacturer_id | integer | لا | يربط كل المنتجات المنشأة بهذه الشركة المصنعة. المعرف من `manufacturers_list`. |
{
"products": [
{
"product_name": "Disposable syringe 5 ml, Luer lock",
"nupco_product_code": "4111610529900",
"catalogue_number": "SYR-5-LL",
"cost_price": 0.12,
"cost_currency": "USD",
"sale_price_sar": 0.55,
"is_medical": true
},
{
"product_name": "Surgical gloves, sterile, size 7.5",
"catalogue_number": "GLV-S-75",
"manufacturer_names": [
"Acme Medical Supplies"
]
}
],
"manufacturer_id": 88
}ما يعيده: رد 201 فيه created (لكل منتج index موضعه في قائمتك وid وproduct_name وnupco_product_code) وcreated_count، وmanufacturers_created وهي أسماء الشركات التي أضافتها الأداة إلى شركاتك. ويظهر manufacturer_links_failed: true فقط حين فشل الربط.
- تحفظ المنتجات أولا ثم تطبق روابط الشركات. فإن فشلت الروابط بقيت المنتجات وظهر
manufacturer_links_failed. اربطها عندئذ بـ`product_manufacturer_bulk_link` ولا تكرر الاستدعاء، فتنشأ المنتجات مرتين. - دفعة تتجاوز حد المنتجات في خطتك ترفض كلها بخطأ 402، و
manufacturer_idغير الموجود يرفض بخطأ 400 (manufacturer_not_found). - يحمل الصف كل حقول نموذج المنتج. الكلمات المفتاحية وتصفية الجهة وحدهما تضبطان بعد ذلك بـ`products_update`.
- حقول التكلفة يتجاهلها الخادم لدور المبيعات.
- الصف الذي يحدد
price_basisبلا عدده، أو يرسل نصفcontent_quantityوcontent_unit، يرفض الدفعة كلها بخطأ 400 قبل أي كتابة، ويسمي الحقلrowsكل صف مرفوض بموضعهindexوالحقل والإصلاح.
products_bulk_update
يعدل حتى 200 منتج في استدعاء واحد، فإما تحفظ كلها وإما لا يحفظ شيء، كما يحفظ جدول الكتالوج. يجب أن يحمل كل صف أعمدة الجدول: الاسم ورقم الكتالوج ورمز نوبكو والتكلفة وعملتها وسعر البيع. ومعرف لا يطابق منتجا غير محذوف في مؤسستك يرفض الدفعة كلها.
يغير البيانات · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
updates | object[] | نعم | صفوف المنتجات المراد تعديلها، من 1 إلى 200. |
updates[].id | integer | نعم | معرف المنتج، ويأتي من products_list. |
updates[].product_name | string | نعم | اسم المنتج، من 1 إلى 200 حرف. يحل محل الاسم الحالي. |
updates[].catalogue_number | string | نعم | رقم الكتالوج، حتى 100 حرف. أرسل null لمسحه. |
updates[].nupco_product_code | string | نعم | رمز نوبكو الرئيسي، حتى 100 حرف. أرسل null لمسحه. |
updates[].cost_price | number | نعم | سعر التكلفة بعملة cost_currency، من 0 إلى 9999999.99. أرسل null لمسحه. |
updates[].cost_currency | string | نعم | عملة سعر التكلفة: USD (دولار أمريكي) أو SAR (ريال سعودي). |
updates[].sale_price_sar | number | نعم | سعر البيع بالريال السعودي، من 0 إلى 9999999.99. أرسل null لمسحه. |
updates[].units_per_case | integer | لا | عدد الوحدات في الكرتون، عدد صحيح من 1 إلى 1000000. إن لم ترسله بقيت القيمة المخزنة، وnull يمسحها. |
updates[].is_medical | boolean | لا | هل المنتج طبي. إن لم ترسله بقيت القيمة المخزنة. |
{
"updates": [
{
"id": 1207,
"product_name": "Disposable syringe 5 ml, Luer lock",
"catalogue_number": "SYR-5-LL",
"nupco_product_code": "4111610529900",
"cost_price": 0.12,
"cost_currency": "USD",
"sale_price_sar": 0.6,
"units_per_case": 1000,
"is_medical": true
}
]
}ما يعيده: عدد المنتجات المعدلة في updated.
- كل صف يستبدل الحقول التي يرسلها، و
nullيمسح الحقل. ويبقىunits_per_caseوis_medicalعلى قيمتيهما المخزنتين إن لم ترسلهما. ولتغيير حقل واحد دون غيره استخدم `products_update`. - حقل لا يراه دورك يبقى على قيمته المخزنة مهما أرسلت، فتبقى تكلفة المنتج وعملتها كما هي حين تستدعي بدور المبيعات.
- المعرف المجهول أو الذي في المهملات يرفض الدفعة كلها بخطأ 400 (
product_not_found). - رمز نوبكو الجديد يضاف إلى روابط المنتج، وتبقى الروابط القديمة.
- الأسعار هنا بمستوى
price_basisلكل منتج، ولا تغيره هذه الأداة (غيره بـ`products_update` معreprice). والصف الذي يفرغ عددا يحتاجه مستوى محدد، كمسحunits_per_caseفي منتج سعره للكرتون، يرفض الدفعة كلها بخطأ 400 (price_basis_level_missing) معrowsتسمي كل منتج.
المهملات
الحذف على خطوتين: نقل إلى المهملات ثم حذف نهائي. والمنتج الذي في المهملات يمكن استعادته ما دام لم يحذف نهائيا.
products_delete
ينقل منتجا إلى المهملات. يختفي من القوائم والروابط والتنبيهات وتتحرر خانته في خطتك، لكن لا شيء يمحى، و`products_restore` يعيده.
يحذف بيانات أو يستبدلها · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف المنتج، ويأتي من products_list. |
ما يعيده: { "success": true }.
- ترد الأداة بخطأ 404 إن لم يوجد المنتج أو كان في المهملات أصلا.
products_trash_list
يعرض المنتجات التي في المهملات، من الأحدث حذفا إلى الأقدم. استخدمه لتعرف معرف منتج تريد استعادته أو حذفه نهائيا.
للقراءة فقط · الصلاحية products.read · كل الأدوار · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
page | integer | لا | رقم الصفحة، ويبدأ من 1. |
page_size | integer | لا | عدد النتائج في الصفحة: 20 افتراضيا، وحده الأقصى 100. |
ما يعيده: صفحة من المنتجات في data مع total وpage وpage_size وtotal_pages، بشكل `products_list` نفسه.
- حقول الأسعار تحذف حسب دورك كما في القائمة.
products_restore
يعيد منتجا من المهملات إلى الكتالوج. يحتسب من جديد ضمن حد المنتجات في خطتك، فترد الأداة بخطأ 402 إن بلغت المؤسسة الحد.
يغير البيانات · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف المنتج، ويجب أن يكون في المهملات. يأتي من `products_trash_list`. |
ما يعيده: المنتج بعد الاستعادة، مع photo_urls.
- ترد الأداة بخطأ 404 إن لم يكن المنتج في المهملات.
products_purge
يحذف نهائيا منتجا واحدا من المهملات أو كل ما فيها، مع صوره وملفاته. ولا يمكن التراجع عن ذلك. والمنتج الذي اختير لبند في منافسة لا يحذف أبدا، لأن سجل المنافسة يحتاجه.
يحذف بيانات أو يستبدلها · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | لا | معرف منتج واحد في المهملات. أرسل id أو all. |
all | boolean | لا | true يحذف كل ما في المهملات. وإن أرسلته مع id فالقيمة all هي التي تنفذ. |
{
"all": true
}ما يعيده: success وremoved وهو عدد ما حذف، ومعهما blocked_ids إن بقي منتج لأن بنود منافسات تستخدمه. ويكون removed صفرا إن لم يطابق شيء في المهملات.
- ترد الأداة بخطأ 409 (
referenced_by_tender_itemsمعblocked_ids) فقط حين تكون كل المنتجات المستهدفة محجوبة. أما إذا حجب بعضها فيحذف الباقي ويعود النجاح معblocked_ids، فافحصه دائما. - لتحرير منتج محجوب امسح اختياره من بنود المنافسات بـ`tender_item_product_selection_clear` ثم أعد المحاولة.
- المعرف الذي ليس في المهملات لا يسبب خطأ ولا يحذف شيئا. وطلب بلا
idولاallيرفض بخطأ 400.
الربط بالشركات المصنعة
للمنتج الواحد شركة مصنعة أو أكثر من الشركات المسجلة في مؤسستك. وتنشأ الشركات نفسها وتعدل بـأدوات الشركات المصنعة.
product_manufacturer_link
يربط منتجا بشركة مصنعة من شركات مؤسستك. وإعادة ربط زوج مرتبط أصلا لا تغير شيئا، ولا تمس كون الشركة هي الافتراضية للمنتج أو غير الافتراضية.
يغير البيانات · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
product_id | integer | نعم | معرف المنتج، ويأتي من products_list. |
manufacturer_id | integer | نعم | معرف الشركة المصنعة، ويأتي من `manufacturers_list`. |
ما يعيده: الرابط: id وproduct_id وmanufacturer_id وis_default وcreated_at.
- يرفض الخادم بخطأ 400 المنتج غير الموجود أو الذي في المهملات (
product_not_found) والشركة غير الموجودة في مؤسستك (manufacturer_not_found).
product_manufacturer_unlink
يزيل الرابط بين منتج وشركة مصنعة، ويبقى السجلان كلاهما. وإن كانت الشركة هي الافتراضية للمنتج فقد أصبح بلا شركة افتراضية.
يحذف بيانات أو يستبدلها · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
product_id | integer | نعم | معرف المنتج، ويأتي من products_list. |
manufacturer_id | integer | نعم | معرف الشركة المصنعة، ويأتي من `manufacturers_list`. |
ما يعيده: { "success": true }.
- فك ربط زوج غير مرتبط لا يسبب خطأ ولا يغير شيئا.
product_manufacturer_bulk_link
يربط حتى 500 منتج موجود بشركة مصنعة واحدة في استدعاء واحد. والأزواج المرتبطة أصلا تترك كما هي.
يغير البيانات · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
manufacturer_id | integer | نعم | معرف الشركة المصنعة، ويأتي من `manufacturers_list`. |
product_ids | integer[] | نعم | معرفات المنتجات المراد ربطها، من 1 إلى 500. وتحتسب المعرفات المكررة مرة واحدة. |
{
"manufacturer_id": 88,
"product_ids": [
1207,
1208,
1215
]
}ما يعيده: { "linked": n }، وهو عدد المنتجات المختلفة في الطلب، ويشمل ما كان مرتبطا منها قبل ذلك.
- معرف منتج غير موجود أو في المهملات يرفض الدفعة كلها بخطأ 400 (
product_not_found)، والشركة غير الموجودة تعطيmanufacturer_not_found.
product_manufacturer_set_default
يختار أي شركة من الشركات المرتبطة بالمنتج تكون افتراضية، أو يمسح الاختيار. للمنتج شركة افتراضية واحدة على الأكثر، واختيار شركة جديدة يحل محل السابقة. وتختار المستندات وبنود عروض الأسعار الشركة بهذا الترتيب: الشركة المحددة في البند، ثم الافتراضية، ثم الشركة الوحيدة المرتبطة.
يغير البيانات · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
product_id | integer | نعم | معرف المنتج، ويأتي من products_list. |
manufacturer_id | integer | نعم | معرف الشركة المصنعة، ويجب أن تكون مرتبطة بالمنتج أصلا. وإلا ردت الأداة بخطأ 400 (link_not_found). |
is_default | boolean | لا | true يجعلها الافتراضية، وfalse يمسح الاختيار. الافتراضي true. |
{
"product_id": 1207,
"manufacturer_id": 88
}ما يعيده: الرابط بعد التعديل: id وproduct_id وmanufacturer_id وis_default وcreated_at.
رموز نوبكو
رموز نوبكو هي ما يربط المنتج ببنود المنافسات. للمنتج رمز رئيسي في الحقل nupco_product_code، ويمكن أن يرتبط برموز أخرى.
product_nupco_link
يربط منتجا برمز مادة من نوبكو. للمنتج الواحد عدة رموز، والرموز المرتبطة هي التي تطابق بنود المنافسات بالمنتج وتشغل تنبيهاته وتجمع سجل أسعاره. وإعادة ربط الزوج نفسه لا تغير شيئا.
يغير البيانات · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
product_id | integer | نعم | معرف المنتج، ويأتي من products_list. |
nupco_code | string | نعم | رمز نوبكو للمادة، من 1 إلى 100 حرف. يقص منه الفراغ في أول النص وآخره. |
is_default | boolean | لا | true يجعل هذا المنتج المنتج الافتراضي للرمز، وهو الذي يسعر به tenders_catalog_pricing البند حين يشترك عدة منتجات في الرمز. للرمز منتج افتراضي واحد، فيلغى السابق. وfalse يلغي العلامة، وإن لم ترسله تبقى كما هي. |
ما يعيده: الرابط: id وproduct_id وnupco_code وis_default وcreated_at.
- حقل
nupco_product_codeيربط نفسه تلقائيا عند حفظ المنتج، فلا حاجة إلى ربط الرمز الرئيسي بهذه الأداة. - يرفض الخادم بخطأ 400 (
product_not_found) المنتج غير الموجود أو الذي في المهملات. ويجوز ربط الرمز نفسه بعدة منتجات.
product_nupco_unlink
يزيل رابطا واحدا بين منتج ورمز نوبكو. يزيل الرابط فقط: يبقى حقل nupco_product_code في المنتج كما هو، ويظل المنتج يطابق بهذا الرمز إن كان رمزه الرئيسي.
يحذف بيانات أو يستبدلها · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
product_id | integer | نعم | معرف المنتج، ويأتي من products_list. |
nupco_code | string | نعم | رمز نوبكو للمادة، من 1 إلى 100 حرف. يقص منه الفراغ في أول النص وآخره. |
ما يعيده: { "success": true }.
- لإيقاف المطابقة بالرمز الرئيسي امسحه من الحقل بـ`products_update` (
nupco_product_code: null) ثم فك رابطه هنا. - الرمز يطابق حرفيا بعد قص الفراغات، وفك ربط زوج غير مرتبط لا يسبب خطأ.
سجل الأسعار وتنبيهات المنافسات
ثلاث أدوات قراءة: الأسعار التي عرضها الموردون على مؤسستك، وما رست به المنافسات في نوبكو، والمنافسات المفتوحة المطابقة لكتالوج مؤسستك. وكلها للخطة الاحترافية وخطة المؤسسات.
products_sourcing_history
يعرض كل سعر سجلته مؤسستك لمورد على هذا المنتج في كل المنافسات وطلبات التسعير المستقلة، من الأحدث إلى الأقدم. ويحتسب السعر للمنتج إن سجل عليه مباشرة، أو على بند منافسة اخترت له هذا المنتج، أو على بند يحمل أحد رموز نوبكو المرتبطة به.
للقراءة فقط · الصلاحية products.read · الأدوار: المالك، المدير، المشتريات، المشاهد · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف المنتج، ويأتي من products_list. |
ما يعيده: { "quotes": [...] }، وفي كل عنصر unitPriceUsd وunitPriceSar وquotedUnitPrice بعملة المورد currency وfxRate وvendorName وleadTimeDays وsubmittedAt وtenderLabel، وmatchBasis وقيمته product أو code وتبين كيف ارتبط السعر بالمنتج.
- تعود 50 نتيجة على الأكثر، ولا تعرض الأسطر التي بلا سعر.
- هذه أسعار تكلفة، فلا يصل إليها دور المبيعات. وترد الأداة بخطأ 404 إن لم يوجد المنتج أو كان في المهملات.
products_historical_prices
يعرض نتائج ترسية نوبكو المنشورة لهذا المنتج: كل صف ترسية يطابق رمز مادته رمز المنتج أو أحد رموزه المرتبطة، ومن كل الموردين. وتعلم الصفوف التي رست على مؤسستك بالحقل awarded_to_us.
للقراءة فقط · الصلاحية products.read · الأدوار: المالك، المدير، المبيعات، المشتريات، المشاهد · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف المنتج، ويأتي من products_list. |
ما يعيده: { "prices": [...], "prices_hidden": null }، وفي كل صف unit_price وcurrency وuom وvendor_name وmanufacturer وcountry وcatalog_no وsource_tender_number وaward_date وawarded_to_us وprice_hidden، وprice_hidden_reason في الصف المخفي سعره حتى يدفع الاشتراك. وتكون prices_hidden بقيمة unpaid حين تخفى الأسعار لهذا السبب.
- الترتيب من أحدث فترة ترسية إلى أقدمها، والأرخص أولا داخل الفترة. وتعود 50 صفا على الأكثر.
unit_priceتكونnullحين ذكر إعلان الترسية الفائز ولم ينشر السعر. وnullتعني غير منشور وليست صفرا، وتأتي هذه الصفوف بعد المسعرة.- قبل أن تكتمل أول دفعة لاشتراك مؤسستك قد تأتي الصفوف بلا أسعار: الصف الذي أخفي سعره لهذا السبب يعود بـ
unit_priceفارغ وprice_hiddenبقيمةtrueوprice_hidden_reasonبقيمةunpaid، وترتب الصفوف داخل الفترة بحسب المورد. فالسعر موجود لكنه مخفي، وليس سعرا غير منشور. - والصف الذي يحمل
price_hiddenبقيمةtrueدونprice_hidden_reasonله سعر لا يظهر لمؤسستك، ويرتب مع الصفوف التي لا سعر لها. فالسعر موجود لكنه مخفي، وليس سعرا غير منشور. - تحتسب كل قراءة من رصيد مؤسستك في الدقيقة لعمليات البحث في المنافسات وسجل الأسعار، وهو رصيد مشترك بين كل المفاتيح والموصلات والتطبيق. وحين ينتهي ترد الأداة بخطأ 429
rate_limitedيذكر عدد الثواني قبل المحاولة التالية. - منتج بلا رمز نوبكو يعود بقائمة فارغة، وترد الأداة بخطأ 404 إن لم يوجد المنتج.
products_alerts_list
يعرض المنافسات المفتوحة التي تطابق كتالوج مؤسستك، مجمعة بحسب المنافسة ومعها المنتجات التي طابقتها. لا توجد أداة تنشئ تنبيها لمنتج: يبدأ المنتج بالمطابقة حين يحمل استعلام بحث (search_query في products_update) أو يرتبط برمز نوبكو (product_nupco_link)، ثم تظهر مطابقاته هنا وفي الإشعارات.
للقراءة فقط · الصلاحية products.read · كل الأدوار · الخطة الاحترافية وخطة المؤسسات
لا معاملات.
ما يعيده: tenders: قائمة عناصرها { tender, products }، الأقرب موعدا أولا وبحد أقصى 200 منافسة، ولكل منتج في products الحقل product (id وproduct_name) وvia_item وقيمته true إن جاءت المطابقة من بند في المنافسة لا من نصها. وproducts_total عدد المنتجات في كتالوجك.
- يطابق المنتج المنافسات باستعلامه أو برموز نوبكو المرتبطة به، ولا يطابقها باسمه ولا بكلماته المفتاحية. ويضيق
agency_filterالمطابقات بنص من اسم الجهة. - تحسب القائمة سلفا وتتجدد بعد كل جلب للمنافسات، وتعديل منتج يظهر أثره في الاستدعاء التالي.
خطاب الامتثال
خطاب واحد يولده النظام عند الطلب ولا يحفظه.
product_compliance_letter_pdf
ينشئ ملف PDF لخطاب الامتثال الذي يقوم مقام شهادة MDMA للمنتج في ملف تقديم منافسة، مطبوعا على ورقة مؤسستك وبختمها. لا يحفظ النظام شيئا: كل استدعاء يولد خطابا جديدا. وإن لم ترسل letter_type اختارت الأداة النوع: under_registration إن كانت حالة MDMA تحت التسجيل أو كان المنتج طبيا، وإلا non_medical_attestation.
للقراءة فقط · الصلاحية products.write · الأدوار: المالك، المدير، المبيعات، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف المنتج، ويأتي من products_list. |
letter_type | string | لا | نوع الخطاب: under_registration (تحديث حالة التسجيل) أو non_medical_attestation (إقرار بأن المنتج غير طبي). يتجاوز الاختيار التلقائي. |
recipient | string | لا | الجهة المخاطبة، من 1 إلى 300 حرف. الافتراضي هو الشركة الوطنية للشراء الموحد (نوبكو) باسمها الإنجليزي. وتوجه التحية إلى الجزء الذي يسبق أول شرطة في النص. |
notes | string | لا | جملة إضافية تضاف إلى نص الخطاب، حتى 1000 حرف. اتركها أو أرسل null ليخرج الخطاب بلا إضافة. |
{
"id": 1207,
"letter_type": "under_registration",
"notes": "The MDMA application was filed in March 2026."
}ما يعيده: ملف PDF بحقول filename وcontent_type وsize_bytes وbase64، كما في الملفات والمهام الخلفية.
- خطاب
under_registrationصفحتان، إنجليزية ثم عربية، تذكران رقم MDMA مرجعا للتسجيل إن وجد. وخطابnon_medical_attestationصفحة إنجليزية واحدة تقر بالتزام المنتج بالأنظمة خارج نظام الأجهزة الطبية. - يطبع الخطاب اسم مؤسستك الإنجليزي وشعارها وختمها وبياناتها من إعدادات المؤسسة. وتشترط الأداة الصلاحية
products.writeودورا يعدل المنتجات، مع أنها لا تغير شيئا. - يعمل مع منتج في المهملات أيضا، وترد الأداة بخطأ 404 إن لم يوجد المنتج. وملف يتجاوز 4 ميغابايت لا يعاد في الرد.