أدوات MCP
أوامر البيع والشراء
أدوات MCP لأوامر البيع الواردة من العملاء وأوامر الشراء الصادرة إلى الموردين وتسجيل الاستلام.
أمر البيع هو ما طلبه عميل من مؤسستك، وأمر الشراء هو ما طلبته مؤسستك من مورد. وتنفذ التسليمات أمر البيع، أما ما وصل من المورد فيسجل بأداة الاستلام في هذه الصفحة. ويشرح دليل الأوامر الخطوات الثلاث في التطبيق، وتفعل هذه الأدوات الشيء نفسه من Claude أو من عميل MCP الذي تبنيه.
id يعدل في مكانه، والذي بلا id يضاف، والذي تتركه خارج القائمة يحذف. والتعديل في المكان هو ما يبقي بند أمر البيع مرتبطا بتسليماته، ويبقي على ما استلم من بند أمر الشراء.| الأداة | ما تفعله |
|---|---|
| sales_orders_list | عرض أوامر البيع |
| sales_orders_get | عرض أمر بيع |
| sales_orders_create | تسجيل أمر بيع |
| sales_orders_update | تعديل أمر بيع |
| sales_orders_set_status | تغيير حالة أمر بيع |
| sales_orders_delete | حذف أمر بيع |
| sales_orders_create_deliveries | تخطيط تسليمات أمر بيع |
| sales_orders_mark_delivered | تسجيل تسليم أمر بيع كاملا |
| sales_orders_calendar | تقويم التسليمات |
| purchase_orders_list | عرض أوامر الشراء |
| purchase_orders_get | عرض أمر شراء |
| purchase_orders_create | تسجيل أمر شراء |
| purchase_orders_update | تعديل أمر شراء |
| purchase_orders_set_status | تغيير حالة أمر شراء |
| purchase_orders_delete | حذف أمر شراء |
| purchase_orders_receive | تسجيل استلام بضاعة |
أوامر البيع
تمر حالة أمر البيع بالترتيب: new (جديد) ثم confirmed (مؤكد) ثم in_progress (قيد التنفيذ) ثم fulfilled (مكتمل)، أو cancelled (ملغى). ويرقم كل أمر ترقيما متسلسلا لمؤسستك: SO-000001 ثم SO-000002 وهكذا.
sales_orders_list
يعرض أوامر البيع في مؤسستك من الأحدث إلى الأقدم، ومع كل أمر منافسته وعرض السعر المرتبط به. رشح بالحالة أو المنافسة أو عرض السعر، أو ابحث برقم الأمر أو اسم العميل أو مرجعه.
للقراءة فقط · الصلاحية orders.read · الأدوار: المالك، المدير، المبيعات، المشاهد، المشاهد بدون تسعير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
status | string | لا | يعرض الأوامر في حالة واحدة: new أو confirmed أو in_progress أو fulfilled أو cancelled. |
hide_fulfilled | boolean | لا | أرسل true لتستبعد الأوامر المنفذة، كما تعرض صفحة أوامر البيع افتراضيا. ولا أثر له إن أرسلت status. |
tender_id | integer | لا | يعرض الأوامر التي جاءت من هذه المنافسة فقط. |
quotation_id | integer | لا | يعرض الأوامر التي قبلت عرض السعر هذا فقط. |
q | string | لا | نص يبحث عنه في رقم الأمر واسم العميل ومرجعه، ويطابق جزءا من النص. حتى 200 حرف. |
page | integer | لا | رقم الصفحة، ويبدأ من 1. |
page_size | integer | لا | عدد النتائج في الصفحة: 20 افتراضيا، وحده الأقصى 100. |
ما يعيده: صفحة من الأوامر مع total وtotal_pages. لكل أمر رقمه وعميله وحالته وتواريخه وعملته وtotal_amount ومنافسته وعرض سعره.
- يرى المشاهد بدون تسعير الأوامر لكن بلا الحقل
total_amount. - حالة غير معروفة في
statusترد بخطأ 400.
sales_orders_get
يعيد أمر بيع واحدا مع كل ما حوله: بنوده وما سلم من كل بند، وصورة التنفيذ، وما يخالف فيه التسليم الطلب، والمنافسة وعرض السعر، والتسليمات المرتبطة، وأوامر الشراء التي توفر بضاعته.
للقراءة فقط · الصلاحية orders.read · الأدوار: المالك، المدير، المبيعات، المشاهد، المشاهد بدون تسعير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف أمر البيع، ويأتي من sales_orders_list. |
ما يعيده: الأمر في sales_order، وبنوده في items، ثم fulfilment وdeviations وtender وquotation وdeliveries وpurchase_orders وdocuments.
- لكل بند
delivered_quantity(على تسليمات علمت كمسلمة) وpending_quantity(على تسليمات ما زالت مسودة أو مجدولة أو في الطريق) وremaining_quantityوexcess_quantity(ما سلم فوق المطلوب). والتسليم الملغى لا يحتسب في شيء. deviationsتعدد كل اختلاف بين التسليمات والطلب:over_delivered(بند سلم أكثر من المطلوب) وextra_lines(بنود سلمت خارج الطلب) وsubstitutions(شحن منتج مختلف عن منتج البند) وlate_deliveries(تسليم سلم أو جدول بعدdue_on) وclosed_short(أمر علم مكتملا وفيه كميات لم تسلم)، معcountللمجموع. وهي تنبيه لا يمنع كتابة شيء.- يرى المشاهد بدون تسعير الأمر دون
total_amountوunit_priceفي البنود. وتعودpurchase_ordersفارغة (null) لدور المبيعات والمشاهد بدون تسعير، لأن أوامر الشراء تسمي الموردين وتكلفتهم. documentsهي المستندات المحفوظة على الأمر، وأولها أمر شراء العميل بصيغة PDF. لكل مستندpathوnameوsizeوurl، والرابط صالح لنحو ساعة. وبالمسار تحذف المستند بـ`sales_order_document_delete`. ويراها كل دور يرى أوامر البيع.- أمر غير موجود في مؤسستك يرد بخطأ 404.
sales_orders_create
يسجل طلبا ورد من عميل مع بنوده، ويعطيه رقما متسلسلا ويبدؤه بحالة new. ويحسب إجماليه من البنود المسعرة فقط.
يغير البيانات · الصلاحية orders.write · الأدوار: المالك، المدير، المبيعات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
customer_id | integer | لا | ملف العميل، ويأتي من `customers_list`. إن تركت customer_name أخذ الأمر اسم العميل القانوني، وإلا اسم العرض. أرسل null ليكون الأمر بلا ربط. |
customer_name | string | لا | اسم من طلب، من حرف واحد إلى 200 حرف. مطلوب إلا إذا أرسلت customer_id. |
customer_reference | string | لا | مرجع العميل نفسه، مثل رقم أمر الشراء أو العقد لديه، حتى 200 حرف. أرسل null لمسحه. |
tender_id | integer | لا | المنافسة التي فزتم بها وجاء منها الأمر، وتأتي من أدوات المنافسات. أرسل null لتركها فارغة. |
quotation_id | integer | لا | عرض السعر الذي قبله العميل، ويأتي من `quotations_list`. يجب أن يكون عرضا لمؤسستك. أرسل null لتركه فارغا. |
currency | string | لا | رمز العملة من ثلاثة أحرف (ISO 4217)، مثل SAR. الافتراضي SAR، ويحفظ بأحرف كبيرة. |
ordered_on | string | لا | تاريخ الطلب بصيغة YYYY-MM-DD. الافتراضي اليوم بتوقيت الرياض. |
due_on | string | لا | التاريخ الذي ينتظر العميل التسليم فيه، بصيغة YYYY-MM-DD. أرسل null لمسحه. |
notes | string | لا | ملاحظات على الأمر، حتى 2,000 حرف. أرسل null لمسحها. |
items | object[] | نعم | بنود الأمر، من بند إلى 500 بند. |
items[].id | integer | لا | لا يستخدم عند الإنشاء، فاتركه. |
items[].product_id | integer | لا | المنتج من الكتالوج الذي يخصه هذا البند، ويأتي من products_list. يجب أن يكون منتجا لمؤسستك. أرسل null لإزالة الربط. |
items[].description | string | نعم | وصف المطلوب، من حرف واحد إلى 1,000 حرف. |
items[].quantity | number | نعم | الكمية المطلوبة، وتكون أكبر من صفر. |
items[].unit | string | لا | وحدة القياس مثل box، حتى 50 حرفا. أرسل null لمسحها. |
items[].unit_price | number | لا | سعر الوحدة بعملة الأمر، صفر أو أكثر. اتركه أو أرسل null ما دام البند بلا سعر، فيبقى خارج إجمالي الأمر. |
items[].notes | string | لا | ملاحظات على البند، حتى 1,000 حرف. أرسل null لمسحها. |
items[].tender_item_id | integer | لا | بند المنافسة الذي يجيب عنه هذا البند، ويأتي من tenders_get. يفيد حين يأتي الأمر من عرض سعر أو من منافسة. أرسل null لإزالة الربط. |
items[].line_number | string | لا | رقم البند كما يطبعه العميل في أمر شرائه، مثل 10 أو 20، حتى 50 حرفا. إن تركته عند التعديل بقي كما هو، وأرسل null لمسحه. |
items[].material_code | string | لا | رمز الصنف عند العميل، مثل الرقم التجاري في أمر شراء نوبكو، حتى 50 حرفا. إن تركته عند التعديل بقي كما هو، وأرسل null لمسحه. |
items[].ship_to | string | لا | جهة تسليم هذا البند كما يطبعها أمر الشراء، مثل مستودع لنوبكو أو مديرية صحية، حتى 300 حرف. قد يرسل أمر واحد بنوده إلى جهات كثيرة، و`sales_orders_create_deliveries` يحولها إلى تسليم مسودة لكل جهة. إن تركته عند التعديل بقي كما هو، وأرسل null لمسحه. |
items[].due_on | string | لا | آخر موعد لتسليم هذا البند، بصيغة YYYY-MM-DD، وهو التاريخ الذي يعطيه أمر الشراء. عليه يضع sales_orders_calendar البند في تقويم التسليم. إن تركته عند التعديل بقي كما هو، وأرسل null لمسحه. |
{
"customer_name": "Al Noor Hospital",
"customer_reference": "PO-2026-0457",
"tender_id": 48213,
"quotation_id": 1207,
"ordered_on": "2026-10-04",
"due_on": "2026-11-15",
"items": [
{
"description": "Sterile syringe 5 ml, box of 100",
"quantity": 200,
"unit": "box",
"unit_price": 36.5,
"tender_item_id": 902114
},
{
"description": "Nitrile gloves, medium, box of 100",
"quantity": 500,
"unit": "box",
"unit_price": 21
}
]
}ما يعيده: sales_order_id وorder_number للأمر الجديد.
- الاسم مطلوب: أرسل
customer_name، أوcustomer_idفيأخذ الأمر اسم العميل من ملفه. والاسم الذي ترسله يسبق اسم الملف. وإن لم ترسل أيا منهما رد الأداة بخطأ 400. - يحسب
total_amountمن البنود التي لهاunit_priceفقط. وإن لم يسعر أي بند فلا إجمالي للأمر. - منافسة لا تراها، أو عرض سعر أو عميل أو منتج ليس لمؤسستك، يرد بخطأ 404.
- لتنفيذ الأمر أنشئ تسليمات مرتبطة به بـ`deliveries_create`. ينتقل الأمر إلى
in_progressعند وجود أول تسليم، وإلىfulfilledحين تسلم كل البنود.
sales_orders_update
يعدل عميل الأمر أو تواريخه أو ارتباطاته أو ملاحظاته أو بنوده. لا يتغير إلا ما ترسله، وnull يمسح الحقل الاختياري. أما الرقم والحالة فلا يعدلان هنا: للحالة استخدم `sales_orders_set_status`.
يغير البيانات · الصلاحية orders.write · الأدوار: المالك، المدير، المبيعات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف أمر البيع. |
customer_id | integer | لا | ملف العميل المرتبط بالأمر، ويأتي من `customers_list`. أرسل null لفك الربط. ولا يغير الربط اسم العميل المكتوب على الأمر، فأرسل customer_name معه إن أردت ذلك. |
customer_name | string | لا | اسم من طلب، من حرف واحد إلى 200 حرف. |
customer_reference | string | لا | مرجع العميل نفسه، مثل رقم أمر الشراء أو العقد لديه، حتى 200 حرف. أرسل null لمسحه. |
tender_id | integer | لا | المنافسة التي فزتم بها وجاء منها الأمر، وتأتي من أدوات المنافسات. أرسل null لتركها فارغة. |
quotation_id | integer | لا | عرض السعر الذي قبله العميل، ويأتي من `quotations_list`. يجب أن يكون عرضا لمؤسستك. أرسل null لتركه فارغا. |
currency | string | لا | رمز العملة من ثلاثة أحرف (ISO 4217)، مثل SAR. الافتراضي SAR، ويحفظ بأحرف كبيرة. |
ordered_on | string | لا | تاريخ الطلب بصيغة YYYY-MM-DD. |
due_on | string | لا | التاريخ الذي ينتظر العميل التسليم فيه، بصيغة YYYY-MM-DD. أرسل null لمسحه. |
notes | string | لا | ملاحظات على الأمر، حتى 2,000 حرف. أرسل null لمسحها. |
items | object[] | لا | قائمة البنود الكاملة، تطابق بمعرفاتها (انظر مقدمة الصفحة). من بند إلى 500 بند. اتركها فتبقى البنود والإجمالي كما هي. |
items[].id | integer | لا | معرف البند المحفوظ، ويأتي من sales_orders_get. البند المرسل مع معرفه يعدل في مكانه، والبند بلا معرف يضاف. |
items[].product_id | integer | لا | المنتج من الكتالوج الذي يخصه هذا البند، ويأتي من products_list. يجب أن يكون منتجا لمؤسستك. أرسل null لإزالة الربط. |
items[].description | string | نعم | وصف المطلوب، من حرف واحد إلى 1,000 حرف. |
items[].quantity | number | نعم | الكمية المطلوبة، وتكون أكبر من صفر. |
items[].unit | string | لا | وحدة القياس مثل box، حتى 50 حرفا. أرسل null لمسحها. |
items[].unit_price | number | لا | سعر الوحدة بعملة الأمر، صفر أو أكثر. اتركه أو أرسل null ما دام البند بلا سعر، فيبقى خارج إجمالي الأمر. |
items[].notes | string | لا | ملاحظات على البند، حتى 1,000 حرف. أرسل null لمسحها. |
items[].tender_item_id | integer | لا | بند المنافسة الذي يجيب عنه هذا البند، ويأتي من tenders_get. يفيد حين يأتي الأمر من عرض سعر أو من منافسة. أرسل null لإزالة الربط. |
items[].line_number | string | لا | رقم البند كما يطبعه العميل في أمر شرائه، مثل 10 أو 20، حتى 50 حرفا. إن تركته عند التعديل بقي كما هو، وأرسل null لمسحه. |
items[].material_code | string | لا | رمز الصنف عند العميل، مثل الرقم التجاري في أمر شراء نوبكو، حتى 50 حرفا. إن تركته عند التعديل بقي كما هو، وأرسل null لمسحه. |
items[].ship_to | string | لا | جهة تسليم هذا البند كما يطبعها أمر الشراء، مثل مستودع لنوبكو أو مديرية صحية، حتى 300 حرف. قد يرسل أمر واحد بنوده إلى جهات كثيرة، و`sales_orders_create_deliveries` يحولها إلى تسليم مسودة لكل جهة. إن تركته عند التعديل بقي كما هو، وأرسل null لمسحه. |
items[].due_on | string | لا | آخر موعد لتسليم هذا البند، بصيغة YYYY-MM-DD، وهو التاريخ الذي يعطيه أمر الشراء. عليه يضع sales_orders_calendar البند في تقويم التسليم. إن تركته عند التعديل بقي كما هو، وأرسل null لمسحه. |
{
"id": 214,
"due_on": "2026-11-30",
"items": [
{
"id": 1881,
"description": "Sterile syringe 5 ml, box of 100",
"quantity": 250,
"unit": "box",
"unit_price": 36.5
},
{
"description": "Examination gloves, large, box of 100",
"quantity": 100,
"unit": "box",
"unit_price": 21
}
]
}ما يعيده: sales_order_id للأمر المعدل.
- معرف بند ليس على هذا الأمر، أو مرسل مرتين، يرد بخطأ 400. والبند الذي تتركه خارج القائمة يحذف، وكل بند تسليم كان يشير إليه يفقد ربطه بالأمر.
- حين ترسل
itemsيعاد حساب الإجمالي من البنود الجديدة. - تخضع المنافسة وعرض السعر والعميل لفحص التوفر نفسه كما في الإنشاء، ويرد غيابها بخطأ 404.
sales_orders_set_status
ينقل أمر بيع إلى حالة جديدة. أي حالة تصح بعد أي حالة، فيمكنك التراجع عن انتقال بالخطأ. وهو التعديل اليدوي لما تحركه التسليمات تلقائيا.
يغير البيانات · الصلاحية orders.write · الأدوار: المالك، المدير، المبيعات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف أمر البيع. |
status | string | نعم | الحالة الجديدة: new أو confirmed أو in_progress أو fulfilled أو cancelled. |
{
"id": 214,
"status": "confirmed"
}ما يعيده: تأكيد مع status الجديدة.
- الدخول إلى
fulfilledيسجلfulfilled_at، والخروج منها يمسحه. - تحرك التسليمات المرتبطة الأمر بنفسها، لكن إلى الأمام فقط: إلى
in_progressحين يوجد أول تسليم، وإلىfulfilledحين تسلم كل البنود. ولا ترجعه ولا تخرجه منcancelledأوfulfilled.
sales_orders_delete
يحذف أمر البيع وبنوده. أما التسليمات وأوامر الشراء التي كانت تشير إليه فتبقى ويفك ارتباطها به. لا يمكن التراجع عن ذلك.
يحذف بيانات أو يستبدلها · الصلاحية orders.write · الأدوار: المالك، المدير، المبيعات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف أمر البيع. |
ما يعيده: تأكيد الحذف.
sales_orders_create_deliveries
ينشئ مسودة تسليم لكل جهة ويوم تذكرهما بنود الأمر في ship_to وdue_on، وفي كل مسودة البنود التي تذهب إلى تلك الجهة. فأمر شراء من نوبكو يرسل منتجا واحدا إلى اثني عشر مستودعا يصير اثنتي عشرة مسودة بطلب واحد.
يغير البيانات · الصلاحية orders.write أو logistics.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف أمر البيع، ويأتي من sales_orders_list. |
warehouse_id | integer | لا | المستودع الذي تشحن منه كل التسليمات، ويأتي من warehouses_list. اتركه لتختاره لاحقا. وأرسل null ليبقى بلا مستودع. |
destinations | object[] | لا | تفاصيل إضافية للجهات التي تذكرها البنود: عنوان أو مدينة أو شخص للاتصال به عند التسليم. تطابق بنص ship_to دون اعتبار للحروف الكبيرة أو المسافات الزائدة. حتى 200 جهة. |
destinations[].ship_to | string | نعم | الجهة بنصها كما يكتبه ship_to في البنود، من حرف واحد إلى 300 حرف. |
destinations[].address | string | لا | عنوان الجهة، حتى 500 حرف. |
destinations[].city | string | لا | المدينة، حتى 100 حرف. |
destinations[].contact_name | string | لا | اسم من يتصل به السائق عند التسليم، حتى 200 حرف. |
destinations[].contact_phone | string | لا | هاتف هذا الشخص، حتى 50 حرفا. |
{
"id": 1042,
"warehouse_id": 3,
"destinations": [
{
"ship_to": "NUPCO C.WH in Jeddah for MOH - MOH - Taif",
"contact_name": "Receiving desk",
"contact_phone": "+966500000000"
}
]
}ما يعيده: deliveries: لكل مسودة delivery_id وdelivery_number وdestination_name وdue_on ومعرفات بنود الأمر فيها. ثم skipped: البنود التي لم تخطط وسبب كل منها، وهو no_ship_to أو fully_planned.
- يخطط فقط ما لا يحمله أي تسليم قائم، فتكرار الاستدعاء لا ينشئ شيئا جديدا، والبند الذي شحن بعضه تخطط له مسودة لما بقي. والبند بلا
ship_toيتخطى ويذكر فيskipped. - كل مسودة تجدول عند الظهيرة بتوقيت الرياض في يوم استحقاق بنودها، والبند الذي لا موعد له يوضع على تاريخ استحقاق الأمر كما في التقويم. وتبقى حالة الأمر كما هي حتى يعمل على أحد التسليمات.
- يتطلب دور المدير أو المالك لأنه ينشئ تسليمات، ويتطلب نطاقي
orders.writeوlogistics.writeمعا. وأمر ملغى يرد بخطأ 409، وكذلك أمر تخطط تسليماته في اللحظة نفسها من مكان آخر: انتظر دقيقة ثم أعد الاستدعاء ليخطط ما بقي. - إن فشل إنشاء مسودة توقف الطلب وذكر عدد ما أنشئ قبلها. وما أنشئ يبقى، وتعيد الاستدعاء فيخطط لما تبقى فقط.
sales_orders_mark_delivered
يسجل أمر البيع مسلما بالكامل، كالأمر الذي صدرت فاتورته في Zoho Books: كل تسليم مفتوح للأمر يصبح مسلما، وما بقي دون تسليم ينشأ له تسليم لكل جهة ويسجل مسلما في الحال، ثم يغلق الأمر منفذا.
يغير البيانات · الصلاحية orders.write أو logistics.write · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف أمر البيع، ويأتي من sales_orders_list. |
note | string | لا | ملاحظة تكتب على التسليمات التي ينشئها، حتى 500 حرف. الافتراضية أن الأمر صدرت فاتورته في Zoho Books. |
{
"id": 1042
}ما يعيده: delivered: معرفات التسليمات التي جعلها مسلمة. وcreated: معرفات التسليمات التي أنشأها.
- التسليمات الملغاة تبقى كما هي، والأمر المسلم بالكامل لا يتغير، فتكرار الاستدعاء آمن. والأمر الملغى يرد بخطأ 409. ولتسجيل جزء من الأمر استخدم
deliveries_createوdeliveries_set_statusلتلك البنود. - يتطلب دور المدير أو المالك لأنه ينشئ تسليمات ويغير حالتها، ويتطلب نطاقي
orders.writeوlogistics.writeمعا.
sales_orders_calendar
يعرض المواعيد التي يجب أن تسلم فيها طلبات العملاء: مدخل لكل أمر وجهة ويوم، ومعه البنود المستحقة والتسليمات التي تغطيها. استخدمه لمعرفة ما تأخر وما يستحق قريبا وما لم تخطط له تسليمات بعد.
للقراءة فقط · الصلاحية orders.read · الأدوار: المالك، المدير، المبيعات، المشاهد، المشاهد بدون تسعير · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
from | string | لا | أول يوم في النافذة بصيغة YYYY-MM-DD، وافتراضه اليوم. اتركه مع open_only وأرسل to وحده لتصل إلى كل ما تأخر. |
to | string | لا | آخر يوم في النافذة بصيغة YYYY-MM-DD، وافتراضه بعد 30 يوما من from. ولا تزيد النافذة على 100 يوم. |
open_only | boolean | لا | يستبعد المدخلات التي سلمت. ومع to دون from يعيد كل مدخل مفتوح حتى ذلك اليوم، ومنها المتأخر. |
{
"from": "2026-11-01",
"to": "2026-11-30"
}ما يعيده: events مرتبة بالتاريخ. لكل مدخل: date وsales_order_id وorder_number وorder_status وcustomer_name وcustomer_reference (رقم أمر شراء العميل) وdestination وarea وstate وdays_until وline_count وopen_line_count وitems وdeliveries. ثم today وfrom وto وopen_only وsummary (overdue وsoon وunplanned) وtruncated.
- المدخل هو ما يحمله تسليم واحد مخطط: بنود أمر واحد إلى جهة واحدة في يوم واحد، ولا يفرق بين الحروف الكبيرة والصغيرة أو المسافات الزائدة في اسم الجهة. ويضم
itemsأول 20 بندا فقط، وline_countهو العدد الكلي، و`sales_orders_get` يعرضها كلها. - يوضع البند على
due_onالخاص به، فإن لم يكن له تاريخ فعلىdue_onالأمر. والبند الذي لا تاريخ له ولا لأمره لا يظهر، وكذلك أوامر البيع الملغاة. والأيام بتوقيت الرياض. stateهوoverdue(بقي بند مفتوح وفات اليوم) أوupcoming(قادم) أوdelivered(شحنت كل البنود على تسليمات علمت كمسلمة، أو أغلق الأمر كمكتمل). وdays_untilسالب للمتأخر وفارغ بعد التسليم. وsummary.soonهو ما يستحق خلال 3 أيام.areaهي منطقة المملكة التي تقع فيها الجهة، تقرأ من كلماتها بأول مكان تسميه:riyadhوmakkahوmadinahوeasternوqassimوasirوtabukوhailوnorthern_bordersوjazanوnajranوal_bahahوal_jouf. وهيnullإن لم تسم الجهة مكانا تعرفه المنصة. وعليها تقوم خريطة تقويم التسليمات في التطبيق.deliveriesهي التسليمات غير الملغاة التي تحمل بنود المدخل، ومنها المسودة والمجدولة والتي في الطريق. فمدخل مفتوح بلا تسليمات ما زال يحتاج إلى `sales_orders_create_deliveries`، وsummary.unplannedيعد هذه المدخلات.- يعيد حتى 500 مدخل. فإن زادت النافذة على ذلك صارت
truncatedتساويtrue، فضيق النافذة. ولا تحمل المدخلات أي أسعار.
أوامر الشراء
تمر حالة أمر الشراء بالترتيب: draft (مسودة) ثم sent (مرسل) ثم confirmed (مؤكد) ثم partially_received (مستلم جزئيا) ثم received (مستلم)، أو cancelled (ملغى). ويرقم ترقيما متسلسلا: PO-000001 ثم PO-000002.
purchase_orders_list
يعرض أوامر الشراء الصادرة إلى الموردين من الأحدث إلى الأقدم، ومع كل أمر منافسته وأمر البيع الذي يوفر له. رشح بالحالة أو الشركة المصنعة أو المنافسة أو أمر البيع، أو ابحث برقم الأمر أو اسم المورد أو مرجعه.
للقراءة فقط · الصلاحية orders.read · الأدوار: المالك، المدير، المشتريات، المشاهد · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
status | string | لا | يعرض الأوامر في حالة واحدة: draft أو sent أو confirmed أو partially_received أو received أو cancelled. |
manufacturer_id | integer | لا | يعرض الأوامر الموجهة إلى هذه الشركة المصنعة من دليلك فقط. |
tender_id | integer | لا | يعرض الأوامر التي توفر بنود هذه المنافسة فقط. |
sales_order_id | integer | لا | يعرض الأوامر التي توفر بضاعة أمر البيع هذا فقط. |
q | string | لا | نص يبحث عنه في رقم الأمر واسم المورد ومرجعه، ويطابق جزءا من النص. حتى 200 حرف. |
page | integer | لا | رقم الصفحة، ويبدأ من 1. |
page_size | integer | لا | عدد النتائج في الصفحة: 20 افتراضيا، وحده الأقصى 100. |
ما يعيده: صفحة من الأوامر مع total وtotal_pages. لكل أمر رقمه ومورده وحالته وتواريخه وعملته وtotal_amount ومنافسته وأمر البيع المرتبط.
- أوامر الشراء بيانات تكلفة: لا يراها دور المبيعات ولا الفني ولا المشاهد بدون تسعير.
purchase_orders_get
يعيد أمر شراء واحدا مع بنوده، ومع كل بند ما استلم منه وما تبقى، وإجماليات الاستلام، والشركة المصنعة والمنافسة وأمر البيع المرتبطة به.
للقراءة فقط · الصلاحية orders.read · الأدوار: المالك، المدير، المشتريات، المشاهد · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف أمر الشراء، ويأتي من purchase_orders_list. |
ما يعيده: الأمر في purchase_order، وبنوده في items (لكل بند received_quantity وremaining_quantity)، ثم receipt وmanufacturer وtender وsales_order.
receiptفيهorderedوreceivedوremainingوcomplete. ومعرفات البنود هنا هي التي تستخدمها `purchase_orders_receive`.- أمر غير موجود في مؤسستك يرد بخطأ 404.
purchase_orders_create
يسجل طلبا إلى مورد مع بنوده، ويعطيه رقما متسلسلا ويبدؤه بحالة draft. المورد شركة مصنعة من دليلك أو اسم تكتبه، ولا بد من أحدهما.
يغير البيانات · الصلاحية orders.write · الأدوار: المالك، المدير، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
manufacturer_id | integer | لا | الشركة المصنعة التي تطلب منها، وتأتي من `manufacturers_list`. يأخذ الأمر اسمها إن تركت supplier_name. يجب أن تكون من دليل مؤسستك. |
supplier_name | string | لا | اسم المورد كما يسجل، من حرف واحد إلى 200 حرف. مطلوب إلا إذا أرسلت manufacturer_id. |
supplier_reference | string | لا | مرجع المورد نفسه، مثل رقم تأكيده أو فاتورته المبدئية، حتى 200 حرف. أرسل null لمسحه. |
tender_id | integer | لا | المنافسة التي يوفر هذا الشراء بنودها، وتأتي من أدوات المنافسات. أرسل null لتركها فارغة. |
sales_order_id | integer | لا | أمر البيع الذي يوفر هذا الشراء بضاعته، ويأتي من `sales_orders_list`. يجب أن يكون أمرا لمؤسستك. أرسل null لتركه فارغا. |
currency | string | لا | رمز العملة من ثلاثة أحرف (ISO 4217)، مثل SAR. الافتراضي SAR، ويحفظ بأحرف كبيرة. |
ordered_on | string | لا | تاريخ الطلب بصيغة YYYY-MM-DD. الافتراضي اليوم بتوقيت الرياض. |
expected_on | string | لا | التاريخ المتوقع لوصول البضاعة، بصيغة YYYY-MM-DD. أرسل null لمسحه. |
notes | string | لا | ملاحظات على الأمر، حتى 2,000 حرف. أرسل null لمسحها. |
items | object[] | نعم | بنود الأمر، من بند إلى 500 بند. |
items[].id | integer | لا | لا يستخدم عند الإنشاء، فاتركه. |
items[].product_id | integer | لا | المنتج من الكتالوج الذي يخصه هذا البند، ويأتي من products_list. يجب أن يكون منتجا لمؤسستك. أرسل null لإزالة الربط. |
items[].description | string | نعم | وصف المطلوب، من حرف واحد إلى 1,000 حرف. |
items[].quantity | number | نعم | الكمية المطلوبة، وتكون أكبر من صفر. |
items[].unit | string | لا | وحدة القياس مثل box، حتى 50 حرفا. أرسل null لمسحها. |
items[].unit_price | number | لا | تكلفة الوحدة بعملة الأمر، صفر أو أكثر. اتركها أو أرسل null ما دام البند بلا سعر، فيبقى خارج إجمالي الأمر. |
items[].notes | string | لا | ملاحظات على البند، حتى 1,000 حرف. أرسل null لمسحها. |
{
"manufacturer_id": 87,
"supplier_reference": "PI-2026-0331",
"tender_id": 48213,
"sales_order_id": 214,
"expected_on": "2026-11-01",
"items": [
{
"description": "Sterile syringe 5 ml, box of 100",
"quantity": 200,
"unit": "box",
"unit_price": 24.8
}
]
}ما يعيده: purchase_order_id وorder_number للأمر الجديد.
- إن أرسلت
manufacturer_idنسخ الأمر اسم الشركة إلىsupplier_nameفيبقى الأمر مقروءا حتى لو حذفت الشركة من الدليل. وإن لم ترسل أيا منهما رد الأداة بخطأ 400. - شركة مصنعة أو أمر بيع أو منتج ليس لمؤسستك، أو منافسة لا تراها، يرد بخطأ 404.
- تبدأ كل البنود بلا استلام. سجل الوارد بـ`purchase_orders_receive`.
purchase_orders_update
يعدل مورد الأمر أو تواريخه أو ارتباطاته أو ملاحظاته أو بنوده. لا يتغير إلا ما ترسله، وnull يمسح الحقل الاختياري. للحالة استخدم `purchase_orders_set_status`، وللوارد `purchase_orders_receive`.
يغير البيانات · الصلاحية orders.write · الأدوار: المالك، المدير، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف أمر الشراء. |
manufacturer_id | integer | لا | الشركة المصنعة المرتبطة بالأمر، وتأتي من `manufacturers_list`. يأخذ الأمر اسمها إلا إذا أرسلت supplier_name معها. أرسل null لفك الربط، ويبقى اسم المورد المكتوب كما هو. |
supplier_name | string | لا | اسم المورد كما يسجل، من حرف واحد إلى 200 حرف. |
supplier_reference | string | لا | مرجع المورد نفسه، مثل رقم تأكيده أو فاتورته المبدئية، حتى 200 حرف. أرسل null لمسحه. |
tender_id | integer | لا | المنافسة التي يوفر هذا الشراء بنودها، وتأتي من أدوات المنافسات. أرسل null لتركها فارغة. |
sales_order_id | integer | لا | أمر البيع الذي يوفر هذا الشراء بضاعته، ويأتي من `sales_orders_list`. يجب أن يكون أمرا لمؤسستك. أرسل null لتركه فارغا. |
currency | string | لا | رمز العملة من ثلاثة أحرف (ISO 4217)، مثل SAR. الافتراضي SAR، ويحفظ بأحرف كبيرة. |
ordered_on | string | لا | تاريخ الطلب بصيغة YYYY-MM-DD. |
expected_on | string | لا | التاريخ المتوقع لوصول البضاعة، بصيغة YYYY-MM-DD. أرسل null لمسحه. |
notes | string | لا | ملاحظات على الأمر، حتى 2,000 حرف. أرسل null لمسحها. |
items | object[] | لا | قائمة البنود الكاملة، تطابق بمعرفاتها (انظر مقدمة الصفحة). من بند إلى 500 بند. اتركها فتبقى البنود والإجمالي كما هي. |
items[].id | integer | لا | معرف البند المحفوظ، ويأتي من purchase_orders_get. البند المرسل مع معرفه يعدل في مكانه، والبند بلا معرف يضاف. |
items[].product_id | integer | لا | المنتج من الكتالوج الذي يخصه هذا البند، ويأتي من products_list. يجب أن يكون منتجا لمؤسستك. أرسل null لإزالة الربط. |
items[].description | string | نعم | وصف المطلوب، من حرف واحد إلى 1,000 حرف. |
items[].quantity | number | نعم | الكمية المطلوبة، وتكون أكبر من صفر. |
items[].unit | string | لا | وحدة القياس مثل box، حتى 50 حرفا. أرسل null لمسحها. |
items[].unit_price | number | لا | تكلفة الوحدة بعملة الأمر، صفر أو أكثر. اتركها أو أرسل null ما دام البند بلا سعر، فيبقى خارج إجمالي الأمر. |
items[].notes | string | لا | ملاحظات على البند، حتى 1,000 حرف. أرسل null لمسحها. |
{
"id": 98,
"supplier_reference": "PI-2026-0331-R1",
"expected_on": "2026-11-10"
}ما يعيده: purchase_order_id للأمر المعدل.
- البند الذي يرسل بمعرفه يحتفظ بما استلم منه. وخفض كميته إلى أقل مما استلم يرد بخطأ 400. وبند بمعرف ليس على الأمر، أو مرسل مرتين، يرد بخطأ 400 أيضا.
- البند الذي تتركه خارج القائمة يحذف مع ما استلم منه. وحين ترسل
itemsيعاد حساب الإجمالي.
purchase_orders_set_status
ينقل أمر شراء إلى حالة جديدة. أي حالة تصح بعد أي حالة، فيمكنك التراجع عن انتقال بالخطأ. وهو لا يمس الكميات المستلمة.
يغير البيانات · الصلاحية orders.write · الأدوار: المالك، المدير، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف أمر الشراء. |
status | string | نعم | الحالة الجديدة: draft أو sent أو confirmed أو partially_received أو received أو cancelled. |
{
"id": 98,
"status": "sent"
}ما يعيده: تأكيد مع status الجديدة.
- الدخول إلى
receivedيسجلreceived_at، والخروج منها يمسحه. لكن الكميات المستلمة على البنود تبقى كما هي، فالانتقال اليدوي إلىreceivedيقول إن البضاعة وصلت ولا يغير ما سجل على البنود. - الأمر الملغى لا يقبل تسجيل استلام. أعده إلى
draftأولا.
purchase_orders_delete
يحذف أمر الشراء مع بنوده وما سجل عليها من استلام. لا يمكن التراجع عن ذلك.
يحذف بيانات أو يستبدلها · الصلاحية orders.write · الأدوار: المالك، المدير، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف أمر الشراء. |
ما يعيده: تأكيد الحذف.
تسجيل الاستلام
حين تصل بضاعة المورد سجلها على بنود أمر الشراء، فتتحرك حالة الأمر بنفسها.
purchase_orders_receive
يسجل ما وصل من بضاعة أمر شراء. كل بند يضاف مقداره إلى ما استلم من ذلك البند، ثم ينتقل الأمر إلى partially_received أو إلى received حين يكتمل كل بند.
يغير البيانات · الصلاحية orders.write · الأدوار: المالك، المدير، المشتريات · الخطة الاحترافية وخطة المؤسسات
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
id | integer | نعم | معرف أمر الشراء. |
lines | object[] | نعم | ما وصل الآن، من بند إلى 500 بند. |
lines[].item_id | integer | نعم | معرف بند أمر الشراء، ويأتي من items في `purchase_orders_get`. |
lines[].quantity | number | نعم | الكمية التي وصلت الآن، وتكون أكبر من صفر. تضاف إلى المجموع المستلم، لا تحل محله. |
received_at | string | لا | وقت الوصول بصيغة ISO 8601 مع المنطقة الزمنية، مثل 2026-10-12T09:30:00+03:00. الافتراضي الآن. يسجل فقط إذا أكمل هذا الاستلام الأمر. |
{
"id": 98,
"lines": [
{
"item_id": 4410,
"quantity": 120
},
{
"item_id": 4411,
"quantity": 40
}
],
"received_at": "2026-10-12T09:30:00+03:00"
}ما يعيده: تأكيد مع status الجديدة للأمر، وفي items المجموع المستلم الجديد (received_quantity) لكل بند مسه الاستلام.
- يرفض الاستلام كله ولا يحفظ شيء إذا سمى بندا ليس على الأمر، أو إذا تجاوز بند ما طلب منه. والبند المذكور مرتين يجمع مقداره.
- أمر ملغى يرد بخطأ 409. أعده إلى
draftبـ`purchase_orders_set_status` ثم سجل الاستلام. - ينتقل الأمر إلى الأمام من حالته الحالية، ومنها
draft. ولا يسجلreceived_atإلا مرة واحدة، فإن كان الأمر قد علم مستلما من قبل لم يتغير تاريخه.