أدوات MCP
التسليمات والمستودعات
أدوات MCP للتسليمات التي تنفذ أوامر البيع، وللمستودعات ووجهات التسليم.
التسليم سجل لبضاعة تخرج من مستودع إلى وجهة. له رقم تسلسلي في مؤسستك (DEL-000001) وبنود وحالة، ويمكن أن ينفذ أمر بيع أو يرتبط بمنافسة. المستودعات والوجهات أماكن محفوظة تعيد استخدامها، وليست سجل مخزون: المنصة لا تتتبع الكميات في المستودع.
كيف يتقدم أمر البيع بالتسليمات وكيف تظهر الانحرافات عن الطلب مشروح في الطلبات والتسليمات. وأدوات أوامر البيع نفسها في أوامر البيع وأوامر الشراء.
| الأداة | ما تفعله |
|---|---|
| warehouses_list | عرض المستودعات |
| warehouses_get | عرض مستودع |
| warehouses_create | إضافة مستودع |
| warehouses_update | تعديل مستودع |
| warehouses_delete | حذف مستودع |
| destinations_list | عرض الوجهات |
| destinations_get | عرض وجهة |
| destinations_create | إضافة وجهة |
| destinations_update | تعديل وجهة |
| destinations_delete | حذف وجهة |
| deliveries_list | عرض التسليمات |
| deliveries_get | عرض تسليم |
| deliveries_create | إنشاء تسليم |
| deliveries_update | تعديل تسليم |
| deliveries_delete | حذف تسليم |
| deliveries_set_status | تغيير حالة التسليم |
المستودعات
المستودع مكان تخرج منه التسليمات. ينسخ التسليم بيانات مستودعه لحظة إنشائه، فلا يغير تعديل المستودع لاحقا سجلات التسليمات القديمة.
warehouses_list
يعرض مستودعات مؤسستك من الأحدث إلى الأقدم. لا تظهر المستودعات المعطلة إلا إذا طلبتها بـ include_inactive.
للقراءة فقط · الصلاحية logistics.read · الأدوار: المالك، المدير، المبيعات، المشتريات، المشاهد، المشاهد بدون تسعير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
include_inactive | boolean | لا | اجعله true ليشمل المستودعات المعطلة أيضا. الافتراضي أنها مخفية. |
page | integer | لا | رقم الصفحة، ويبدأ من 1. |
page_size | integer | لا | عدد النتائج في الصفحة: 20 افتراضيا، وحده الأقصى 100. |
ما يعيده: صفحة من المستودعات في data مع total وpage وpage_size وtotal_pages.
warehouses_get
يجلب مستودعا واحدا بمعرفه: اسمه وعنوانه وجهة الاتصال فيه وهل هو فعال.
للقراءة فقط · الصلاحية logistics.read · الأدوار: المالك، المدير، المبيعات، المشتريات، المشاهد، المشاهد بدون تسعير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف المستودع، ويأتي من warehouses_list. |
ما يعيده: سجل المستودع في الحقل warehouse.
warehouses_create
ينشئ مستودعا تخرج منه التسليمات. الاسم وحده مطلوب، والمستودع الجديد فعال.
يغير البيانات · الصلاحية logistics.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
name | string | نعم | اسم المستودع، من 1 إلى 200 حرف. |
address | string | لا | عنوان المستودع، حتى 500 حرف. |
city | string | لا | مدينة المستودع، حتى 100 حرف. |
contact_name | string | لا | اسم الشخص المسؤول في الموقع، حتى 200 حرف. |
contact_phone | string | لا | رقم هاتف جهة الاتصال، حتى 50 حرفا. |
notes | string | لا | ملاحظات حرة، حتى 2000 حرف. |
{
"name": "Riyadh Central Warehouse",
"address": "Industrial City, Second Phase",
"city": "Riyadh",
"contact_name": "Khalid Al-Otaibi",
"contact_phone": "+966 11 555 0142"
}ما يعيده: المستودع الذي أنشئ في الحقل warehouse.
warehouses_update
يعدل بيانات مستودع، أو يخفيه من قوائم الاختيار بإرسال is_active بقيمة false (وtrue تعيده). لا يتغير إلا ما ترسله، ويلزم حقل واحد على الأقل.
يغير البيانات · الصلاحية logistics.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف المستودع. |
name | string | لا | الاسم الجديد، من 1 إلى 200 حرف. لا يمكن مسحه. |
address | string | لا | عنوان المستودع، حتى 500 حرف. أرسل null لمسحه. |
city | string | لا | مدينة المستودع، حتى 100 حرف. أرسل null لمسحه. |
contact_name | string | لا | اسم الشخص المسؤول في الموقع، حتى 200 حرف. أرسل null لمسحه. |
contact_phone | string | لا | رقم هاتف جهة الاتصال، حتى 50 حرفا. أرسل null لمسحه. |
notes | string | لا | ملاحظات حرة، حتى 2000 حرف. أرسل null لمسحه. |
is_active | boolean | لا | false يعطل المستودع فيختفي من القوائم الافتراضية، وtrue يعيده فعالا. |
{
"id": 3,
"contact_name": "Faisal Al-Harbi",
"contact_phone": "+966 11 555 0177"
}ما يعيده: المستودع بعد التعديل في الحقل warehouse.
- التسليمات المنشأة من قبل تبقى بالبيانات التي نسختها، فلا يغيرها التعديل.
warehouses_delete
يحذف مستودعا. إن كان أي تسليم يشير إليه عطله بدلا من حذفه، حتى تبقى سجلات التسليمات القديمة مفهومة، ويقول الرد أيهما حدث.
يحذف بيانات أو يستبدلها · الصلاحية logistics.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف المستودع. |
ما يعيده: ok وdeactivated: القيمة true تعني أن المستودع عطل وبقي، وfalse تعني أنه حذف.
- المستودع المعطل يعود فعالا بـ warehouses_update و
is_activeبقيمةtrue. أما المحذوف فلا رجعة فيه.
الوجهات
الوجهة جهة استلام تتكرر، كمستشفى أو فرع، تحفظها لتنقل بياناتها إلى التسليمات. لا يرتبط التسليم بالوجهة المحفوظة: تقرأ بياناتها وتضعها في معاملات destination_* عند إنشاء التسليم.
destinations_list
يعرض الوجهات المحفوظة في مؤسستك من الأحدث إلى الأقدم. لا تظهر المعطلة إلا إذا طلبتها بـ include_inactive.
للقراءة فقط · الصلاحية logistics.read · الأدوار: المالك، المدير، المبيعات، المشتريات، المشاهد، المشاهد بدون تسعير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
include_inactive | boolean | لا | اجعله true ليشمل الوجهات المعطلة أيضا. الافتراضي أنها مخفية. |
page | integer | لا | رقم الصفحة، ويبدأ من 1. |
page_size | integer | لا | عدد النتائج في الصفحة: 20 افتراضيا، وحده الأقصى 100. |
ما يعيده: صفحة من الوجهات في data مع total وpage وpage_size وtotal_pages.
destinations_get
يجلب وجهة محفوظة واحدة بمعرفها: اسمها وعنوانها وجهة الاتصال فيها.
للقراءة فقط · الصلاحية logistics.read · الأدوار: المالك، المدير، المبيعات، المشتريات، المشاهد، المشاهد بدون تسعير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف الوجهة، ويأتي من destinations_list. |
ما يعيده: سجل الوجهة في الحقل destination.
destinations_create
يحفظ وجهة تسليم لإعادة استخدامها. الاسم وحده مطلوب، والوجهة الجديدة فعالة.
يغير البيانات · الصلاحية logistics.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
name | string | نعم | اسم الوجهة، من 1 إلى 200 حرف. |
address | string | لا | عنوان الوجهة، حتى 500 حرف. |
city | string | لا | مدينة الوجهة، حتى 100 حرف. |
contact_name | string | لا | اسم الشخص المسؤول في الموقع، حتى 200 حرف. |
contact_phone | string | لا | رقم هاتف جهة الاتصال، حتى 50 حرفا. |
notes | string | لا | ملاحظات حرة، حتى 2000 حرف. |
{
"name": "King Fahd Hospital, Pharmacy Store",
"address": "Al Olaya Street",
"city": "Riyadh",
"contact_name": "Nora Al-Qahtani",
"contact_phone": "+966 11 555 0188"
}ما يعيده: الوجهة التي حفظت في الحقل destination.
destinations_update
يعدل بيانات وجهة محفوظة، أو يخفيها من قوائم الاختيار بإرسال is_active بقيمة false (وtrue تعيدها). لا يتغير إلا ما ترسله، ويلزم حقل واحد على الأقل.
يغير البيانات · الصلاحية logistics.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف الوجهة. |
name | string | لا | الاسم الجديد، من 1 إلى 200 حرف. لا يمكن مسحه. |
address | string | لا | عنوان الوجهة، حتى 500 حرف. أرسل null لمسحه. |
city | string | لا | مدينة الوجهة، حتى 100 حرف. أرسل null لمسحه. |
contact_name | string | لا | اسم الشخص المسؤول في الموقع، حتى 200 حرف. أرسل null لمسحه. |
contact_phone | string | لا | رقم هاتف جهة الاتصال، حتى 50 حرفا. أرسل null لمسحه. |
notes | string | لا | ملاحظات حرة، حتى 2000 حرف. أرسل null لمسحه. |
is_active | boolean | لا | false يعطل الوجهة فتختفي من القوائم الافتراضية، وtrue يعيدها فعالة. |
{
"id": 12,
"is_active": false
}ما يعيده: الوجهة بعد التعديل في الحقل destination.
- التسليمات المنشأة من قبل تحتفظ ببيانات وجهتها، فلا يغيرها التعديل.
destinations_delete
يحذف وجهة محفوظة نهائيا. لا يتأثر أي تسليم لأن كل تسليم يحمل بيانات وجهته بنفسه. ولا يمكن التراجع عن الحذف.
يحذف بيانات أو يستبدلها · الصلاحية logistics.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف الوجهة. |
ما يعيده: تأكيد الحذف في الحقل ok.
- لإخفاء الوجهة مع إبقائها استخدم destinations_update و
is_activeبقيمةfalseبدلا من الحذف.
التسليمات
حالات التسليم بالترتيب المعتاد: draft ثم scheduled ثم in_transit ثم delivered، ويضاف cancelled للتسليم الملغى. يبدأ كل تسليم مسودة، ولا تغير حالته بالتعديل بل بالأداة deliveries_set_status.
deliveries_list
يعرض تسليمات مؤسستك من الأحدث إلى الأقدم، ومع كل تسليم أسماء منافسته وأمر بيعه ومستودعه. ويرشح بالحالة أو المنافسة أو أمر البيع أو المستودع.
للقراءة فقط · الصلاحية logistics.read · الأدوار: المالك، المدير، المبيعات، المشتريات، المشاهد، المشاهد بدون تسعير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
status | string | لا | يرشح بحالة واحدة: draft مسودة، scheduled مجدول، in_transit في الطريق، delivered تم التسليم، cancelled ملغى. |
tender_id | integer | لا | تسليمات هذه المنافسة فقط. |
sales_order_id | integer | لا | التسليمات التي تنفذ أمر البيع هذا فقط. |
warehouse_id | integer | لا | التسليمات الخارجة من هذا المستودع فقط. |
page | integer | لا | رقم الصفحة، ويبدأ من 1. |
page_size | integer | لا | عدد النتائج في الصفحة: 20 افتراضيا، وحده الأقصى 100. |
ما يعيده: صفحة من التسليمات في data مع total وpage وpage_size وtotal_pages. لكل تسليم id وdelivery_number وstatus وscheduled_at وdelivered_at واسم الوجهة ومدينتها، ونسخة المستودع warehouse_snapshot، وملخص المنافسة وأمر البيع والمستودع الحالي.
- بنود التسليم لا تأتي في القائمة. استخدم deliveries_get لقراءتها.
deliveries_get
يجلب تسليما كاملا: رأسه وبنوده والمنافسة وأمر البيع اللذين يرتبط بهما والمستودع الحالي.
للقراءة فقط · الصلاحية logistics.read · الأدوار: المالك، المدير، المبيعات، المشتريات، المشاهد، المشاهد بدون تسعير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف التسليم، ويأتي من deliveries_list. |
ما يعيده: delivery (الرأس مع warehouse_snapshot)، وitems (البنود بترتيبها)، وtender وwarehouse وsales_order، وكل منها null إن لم يوجد.
warehouse_snapshotهو ما نسخ عند إنشاء التسليم ولا يتغير. أماwarehouseفهو سجل المستودع الحالي وقد يكون تغير منذئذ.
deliveries_create
ينشئ تسليما ببند واحد على الأقل. تعطيه المنصة رقما تسلسليا، ويبدأ مسودة، وتنسخ بيانات المستودع إليه إن حددت warehouse_id.
يغير البيانات · الصلاحية logistics.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
tender_id | integer | لا | المنافسة التي يتعلق بها التسليم، ومعرفها من أدوات المنافسات. يجب أن تكون ظاهرة لمؤسستك. |
sales_order_id | integer | لا | أمر البيع الذي ينفذه التسليم، ومعرفه من sales_orders_list. بعد الحفظ يتقدم أمر البيع من تلقاء نفسه: إلى in_progress ما دام لديه تسليم غير ملغى، وإلى fulfilled حين تسلم كل بنوده. |
warehouse_id | integer | لا | المستودع الذي تخرج منه البضاعة، ومعرفه من warehouses_list. تنسخ بياناته إلى التسليم لحظة الإنشاء. |
destination_name | string | نعم | اسم جهة الاستلام، من 1 إلى 200 حرف. مطلوب. |
destination_address | string | لا | عنوان جهة الاستلام، حتى 500 حرف. |
destination_city | string | لا | مدينة التسليم، حتى 100 حرف. |
destination_contact_name | string | لا | اسم المسؤول عن الاستلام، حتى 200 حرف. |
destination_contact_phone | string | لا | هاتف المسؤول عن الاستلام، حتى 50 حرفا. |
scheduled_at | string | لا | موعد الشحن أو التسليم بصيغة ISO 8601 مع المنطقة الزمنية، مثل 2026-10-12T09:00:00+03:00 أو ما ينتهي بالحرف Z. الموعد بلا منطقة زمنية يرفض. |
notes | string | لا | ملاحظات على التسليم، حتى 2000 حرف. |
items | object[] | نعم | بنود التسليم، من 1 إلى 500 بند. مطلوب. |
items[].product_id | integer | لا | منتج الكتالوج الذي يشحنه هذا البند، ومعرفه من products_list. اختياري. |
items[].sales_order_item_id | integer | لا | بند أمر البيع الذي يشحن هذا البند مقابله، ومعرفه من sales_orders_get. يجب أن يكون من بنود أمر البيع المحدد في sales_order_id. عليه يقوم حساب ما سلم من كل بند في الأمر. |
items[].description | string | نعم | وصف ما يشحن، من 1 إلى 1000 حرف. |
items[].quantity | number | نعم | الكمية، صفر أو أكثر، ويقبل الكسور. |
items[].unit | string | لا | وحدة الكمية نصا حرا، مثل box، حتى 50 حرفا. |
items[].notes | string | لا | ملاحظات على البند، حتى 1000 حرف. |
{
"tender_id": 48213,
"sales_order_id": 77,
"warehouse_id": 3,
"destination_name": "King Fahd Hospital, Pharmacy Store",
"destination_address": "Al Olaya Street",
"destination_city": "Riyadh",
"destination_contact_name": "Nora Al-Qahtani",
"destination_contact_phone": "+966 11 555 0188",
"scheduled_at": "2026-10-12T09:00:00+03:00",
"notes": "Deliver to the pharmacy store, gate 2",
"items": [
{
"product_id": 1204,
"sales_order_item_id": 311,
"description": "Syringe 5 ml, Luer lock, sterile",
"quantity": 200,
"unit": "box"
},
{
"description": "Examination gloves, nitrile, size M",
"quantity": 80,
"unit": "box"
}
]
}ما يعيده: delivery_id والرقم الذي أعطي للتسليم في delivery_number.
- الرقم يتبع تسلسل مؤسستك، مثل
DEL-000014، ولا يتغير بعد ذلك. - المنافسة يجب أن تكون ظاهرة لمؤسستك، والمستودع وأمر البيع من مؤسستك، وإلا رفض الطلب. وبند التسليم الذي يحمل
sales_order_item_idيتطلبsales_order_id، ويجب أن يكون بندا من ذلك الأمر، وإلا رفض الطلب أيضا. - التسليم يسجل ما خرج فعلا، فلا يرفض بند كميته أكبر من المطلوب في الأمر. يظهر الفرق في صفحة أمر البيع بوصفه انحرافا عن الطلب.
deliveries_update
يعدل وجهة التسليم أو موعده أو ملاحظاته أو ارتباطاته أو بنوده. لا يتغير إلا ما ترسله، أما الحالة فتغير بأداة أخرى.
يغير البيانات · الصلاحية logistics.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف التسليم. |
tender_id | integer | لا | المنافسة التي يتعلق بها التسليم، ومعرفها من أدوات المنافسات. يجب أن تكون ظاهرة لمؤسستك. أرسل null لإزالة الربط. |
sales_order_id | integer | لا | أمر البيع الذي ينفذه التسليم، ومعرفه من sales_orders_list. بعد الحفظ يتقدم أمر البيع من تلقاء نفسه: إلى in_progress ما دام لديه تسليم غير ملغى، وإلى fulfilled حين تسلم كل بنوده. أرسل null لإزالة الربط. |
warehouse_id | integer | لا | المستودع الذي تخرج منه البضاعة، ومعرفه من warehouses_list. تغييره لا يحدث نسخة بيانات المستودع المحفوظة في التسليم، ويبقى فيها ما نسخ عند الإنشاء. أرسل null لإزالة الربط. |
destination_name | string | لا | اسم جهة الاستلام، من 1 إلى 200 حرف. لا يمكن مسحه. |
destination_address | string | لا | عنوان جهة الاستلام، حتى 500 حرف. أرسل null لمسحه. |
destination_city | string | لا | مدينة التسليم، حتى 100 حرف. أرسل null لمسحه. |
destination_contact_name | string | لا | اسم المسؤول عن الاستلام، حتى 200 حرف. أرسل null لمسحه. |
destination_contact_phone | string | لا | هاتف المسؤول عن الاستلام، حتى 50 حرفا. أرسل null لمسحه. |
scheduled_at | string | لا | موعد الشحن أو التسليم بصيغة ISO 8601 مع المنطقة الزمنية، مثل 2026-10-12T09:00:00+03:00 أو ما ينتهي بالحرف Z. الموعد بلا منطقة زمنية يرفض. أرسل null لمسحه. |
notes | string | لا | ملاحظات على التسليم، حتى 2000 حرف. أرسل null لمسحه. |
items | object[] | لا | بنود التسليم، من 1 إلى 500 بند. إن أرسلتها حلت محل القائمة كلها، فأرسل القائمة الكاملة. وإن حذفتها بقيت البنود المخزنة كما هي. |
items[].product_id | integer | لا | منتج الكتالوج الذي يشحنه هذا البند، ومعرفه من products_list. اختياري. |
items[].sales_order_item_id | integer | لا | بند أمر البيع الذي يشحن هذا البند مقابله، ومعرفه من sales_orders_get. يجب أن يكون من بنود أمر البيع المحدد في sales_order_id. عليه يقوم حساب ما سلم من كل بند في الأمر. |
items[].description | string | نعم | وصف ما يشحن، من 1 إلى 1000 حرف. |
items[].quantity | number | نعم | الكمية، صفر أو أكثر، ويقبل الكسور. |
items[].unit | string | لا | وحدة الكمية نصا حرا، مثل box، حتى 50 حرفا. |
items[].notes | string | لا | ملاحظات على البند، حتى 1000 حرف. |
{
"id": 412,
"scheduled_at": "2026-10-14T10:30:00+03:00",
"notes": "Moved at the hospital's request"
}ما يعيده: delivery_id للتسليم بعد التعديل.
itemsتستبدل القائمة كلها: البند الذي لا ترسله يزال، وما تبقيه ويرتبط ببند في الأمر عليك إعادة إرسالsales_order_item_idمعه. وإن حذفتitemsبقيت البنود كما هي.- إن غيرت
sales_order_idأو مسحته دون إرسالitems، فصلت بنود التسليم عن بنود الأمر السابق فلا تحسب في تنفيذه. - رقم التسليم ونسخة المستودع المحفوظة فيه لا يتغيران بالتعديل. الحالة تغيرها deliveries_set_status.
- بعد الحفظ تعاد مراجعة حالة أمر البيع المرتبط، إلى الأمام فقط.
deliveries_delete
يحذف تسليما مع بنوده. لا يمكن التراجع عن ذلك، ويحتفظ أمر البيع المرتبط بالحالة التي بلغها.
يحذف بيانات أو يستبدلها · الصلاحية logistics.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف التسليم. |
ما يعيده: تأكيد الحذف في الحقل ok.
- لإيقاف تسليم دون محوه، انقله إلى
cancelledبـ deliveries_set_status: التسليم الملغى لا يحتسب في تنفيذ أي أمر.
deliveries_set_status
ينقل التسليم إلى حالة جديدة. يسمح بأي انتقال بين الحالات، فيصحح الخطأ بالرجوع، ويعاد حساب حالة أمر البيع المرتبط بعدها.
يغير البيانات · الصلاحية logistics.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف التسليم. |
status | string | نعم | الحالة الجديدة: draft مسودة، scheduled مجدول، in_transit في الطريق، delivered تم التسليم، cancelled ملغى. |
{
"id": 412,
"status": "delivered"
}ما يعيده: ok وstatus بالحالة التي صار عليها التسليم.
- يسجل
delivered_atلحظة دخول التسليم حالةdeliveredويمسح عند الخروج منها. - أمر البيع يتقدم فقط: التسليم الذي صار
deliveredقد ينقله إلىin_progressثمfulfilled، لكن تراجع التسليم لا يعيد الأمر إلى الوراء. وللأمر أداة تغيير حالة خاصة به لذلك.