تصفح الدليل

أدوات 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 · الأدوار: المالك، المدير، المبيعات، المشاهد، المشاهد بدون تسعير · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
statusstringلايعرض الأوامر في حالة واحدة: new أو confirmed أو in_progress أو fulfilled أو cancelled.
hide_fulfilledbooleanلاأرسل true لتستبعد الأوامر المنفذة، كما تعرض صفحة أوامر البيع افتراضيا. ولا أثر له إن أرسلت status.
tender_idintegerلايعرض الأوامر التي جاءت من هذه المنافسة فقط.
quotation_idintegerلايعرض الأوامر التي قبلت عرض السعر هذا فقط.
qstringلانص يبحث عنه في رقم الأمر واسم العميل ومرجعه، ويطابق جزءا من النص. حتى 200 حرف.
pageintegerلارقم الصفحة، ويبدأ من 1.
page_sizeintegerلاعدد النتائج في الصفحة: 20 افتراضيا، وحده الأقصى 100.

ما يعيده: صفحة من الأوامر مع total وtotal_pages. لكل أمر رقمه وعميله وحالته وتواريخه وعملته وtotal_amount ومنافسته وعرض سعره.

  • يرى المشاهد بدون تسعير الأوامر لكن بلا الحقل total_amount.
  • حالة غير معروفة في status ترد بخطأ 400.

sales_orders_get

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

للقراءة فقط · الصلاحية orders.read · الأدوار: المالك، المدير، المبيعات، المشاهد، المشاهد بدون تسعير · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف أمر البيع، ويأتي من 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_idintegerلاملف العميل، ويأتي من `customers_list`. إن تركت customer_name أخذ الأمر اسم العميل القانوني، وإلا اسم العرض. أرسل null ليكون الأمر بلا ربط.
customer_namestringلااسم من طلب، من حرف واحد إلى 200 حرف. مطلوب إلا إذا أرسلت customer_id.
customer_referencestringلامرجع العميل نفسه، مثل رقم أمر الشراء أو العقد لديه، حتى 200 حرف. أرسل null لمسحه.
tender_idintegerلاالمنافسة التي فزتم بها وجاء منها الأمر، وتأتي من أدوات المنافسات. أرسل null لتركها فارغة.
quotation_idintegerلاعرض السعر الذي قبله العميل، ويأتي من `quotations_list`. يجب أن يكون عرضا لمؤسستك. أرسل null لتركه فارغا.
currencystringلارمز العملة من ثلاثة أحرف (ISO 4217)، مثل SAR. الافتراضي SAR، ويحفظ بأحرف كبيرة.
ordered_onstringلاتاريخ الطلب بصيغة YYYY-MM-DD. الافتراضي اليوم بتوقيت الرياض.
due_onstringلاالتاريخ الذي ينتظر العميل التسليم فيه، بصيغة YYYY-MM-DD. أرسل null لمسحه.
notesstringلاملاحظات على الأمر، حتى 2,000 حرف. أرسل null لمسحها.
itemsobject[]نعمبنود الأمر، من بند إلى 500 بند.
items[].idintegerلالا يستخدم عند الإنشاء، فاتركه.
items[].product_idintegerلاالمنتج من الكتالوج الذي يخصه هذا البند، ويأتي من products_list. يجب أن يكون منتجا لمؤسستك. أرسل null لإزالة الربط.
items[].descriptionstringنعموصف المطلوب، من حرف واحد إلى 1,000 حرف.
items[].quantitynumberنعمالكمية المطلوبة، وتكون أكبر من صفر.
items[].unitstringلاوحدة القياس مثل box، حتى 50 حرفا. أرسل null لمسحها.
items[].unit_pricenumberلاسعر الوحدة بعملة الأمر، صفر أو أكثر. اتركه أو أرسل null ما دام البند بلا سعر، فيبقى خارج إجمالي الأمر.
items[].notesstringلاملاحظات على البند، حتى 1,000 حرف. أرسل null لمسحها.
items[].tender_item_idintegerلابند المنافسة الذي يجيب عنه هذا البند، ويأتي من tenders_get. يفيد حين يأتي الأمر من عرض سعر أو من منافسة. أرسل null لإزالة الربط.
items[].line_numberstringلارقم البند كما يطبعه العميل في أمر شرائه، مثل 10 أو 20، حتى 50 حرفا. إن تركته عند التعديل بقي كما هو، وأرسل null لمسحه.
items[].material_codestringلارمز الصنف عند العميل، مثل الرقم التجاري في أمر شراء نوبكو، حتى 50 حرفا. إن تركته عند التعديل بقي كما هو، وأرسل null لمسحه.
items[].ship_tostringلاجهة تسليم هذا البند كما يطبعها أمر الشراء، مثل مستودع لنوبكو أو مديرية صحية، حتى 300 حرف. قد يرسل أمر واحد بنوده إلى جهات كثيرة، و`sales_orders_create_deliveries` يحولها إلى تسليم مسودة لكل جهة. إن تركته عند التعديل بقي كما هو، وأرسل null لمسحه.
items[].due_onstringلاآخر موعد لتسليم هذا البند، بصيغة 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 · الأدوار: المالك، المدير، المبيعات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف أمر البيع.
customer_idintegerلاملف العميل المرتبط بالأمر، ويأتي من `customers_list`. أرسل null لفك الربط. ولا يغير الربط اسم العميل المكتوب على الأمر، فأرسل customer_name معه إن أردت ذلك.
customer_namestringلااسم من طلب، من حرف واحد إلى 200 حرف.
customer_referencestringلامرجع العميل نفسه، مثل رقم أمر الشراء أو العقد لديه، حتى 200 حرف. أرسل null لمسحه.
tender_idintegerلاالمنافسة التي فزتم بها وجاء منها الأمر، وتأتي من أدوات المنافسات. أرسل null لتركها فارغة.
quotation_idintegerلاعرض السعر الذي قبله العميل، ويأتي من `quotations_list`. يجب أن يكون عرضا لمؤسستك. أرسل null لتركه فارغا.
currencystringلارمز العملة من ثلاثة أحرف (ISO 4217)، مثل SAR. الافتراضي SAR، ويحفظ بأحرف كبيرة.
ordered_onstringلاتاريخ الطلب بصيغة YYYY-MM-DD.
due_onstringلاالتاريخ الذي ينتظر العميل التسليم فيه، بصيغة YYYY-MM-DD. أرسل null لمسحه.
notesstringلاملاحظات على الأمر، حتى 2,000 حرف. أرسل null لمسحها.
itemsobject[]لاقائمة البنود الكاملة، تطابق بمعرفاتها (انظر مقدمة الصفحة). من بند إلى 500 بند. اتركها فتبقى البنود والإجمالي كما هي.
items[].idintegerلامعرف البند المحفوظ، ويأتي من sales_orders_get. البند المرسل مع معرفه يعدل في مكانه، والبند بلا معرف يضاف.
items[].product_idintegerلاالمنتج من الكتالوج الذي يخصه هذا البند، ويأتي من products_list. يجب أن يكون منتجا لمؤسستك. أرسل null لإزالة الربط.
items[].descriptionstringنعموصف المطلوب، من حرف واحد إلى 1,000 حرف.
items[].quantitynumberنعمالكمية المطلوبة، وتكون أكبر من صفر.
items[].unitstringلاوحدة القياس مثل box، حتى 50 حرفا. أرسل null لمسحها.
items[].unit_pricenumberلاسعر الوحدة بعملة الأمر، صفر أو أكثر. اتركه أو أرسل null ما دام البند بلا سعر، فيبقى خارج إجمالي الأمر.
items[].notesstringلاملاحظات على البند، حتى 1,000 حرف. أرسل null لمسحها.
items[].tender_item_idintegerلابند المنافسة الذي يجيب عنه هذا البند، ويأتي من tenders_get. يفيد حين يأتي الأمر من عرض سعر أو من منافسة. أرسل null لإزالة الربط.
items[].line_numberstringلارقم البند كما يطبعه العميل في أمر شرائه، مثل 10 أو 20، حتى 50 حرفا. إن تركته عند التعديل بقي كما هو، وأرسل null لمسحه.
items[].material_codestringلارمز الصنف عند العميل، مثل الرقم التجاري في أمر شراء نوبكو، حتى 50 حرفا. إن تركته عند التعديل بقي كما هو، وأرسل null لمسحه.
items[].ship_tostringلاجهة تسليم هذا البند كما يطبعها أمر الشراء، مثل مستودع لنوبكو أو مديرية صحية، حتى 300 حرف. قد يرسل أمر واحد بنوده إلى جهات كثيرة، و`sales_orders_create_deliveries` يحولها إلى تسليم مسودة لكل جهة. إن تركته عند التعديل بقي كما هو، وأرسل null لمسحه.
items[].due_onstringلاآخر موعد لتسليم هذا البند، بصيغة 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 · الأدوار: المالك، المدير، المبيعات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف أمر البيع.
statusstringنعمالحالة الجديدة: new أو confirmed أو in_progress أو fulfilled أو cancelled.
{
  "id": 214,
  "status": "confirmed"
}
مثال على المعاملات

ما يعيده: تأكيد مع status الجديدة.

  • الدخول إلى fulfilled يسجل fulfilled_at، والخروج منها يمسحه.
  • تحرك التسليمات المرتبطة الأمر بنفسها، لكن إلى الأمام فقط: إلى in_progress حين يوجد أول تسليم، وإلى fulfilled حين تسلم كل البنود. ولا ترجعه ولا تخرجه من cancelled أو fulfilled.

sales_orders_delete

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

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

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

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

sales_orders_create_deliveries

ينشئ مسودة تسليم لكل جهة ويوم تذكرهما بنود الأمر في ship_to وdue_on، وفي كل مسودة البنود التي تذهب إلى تلك الجهة. فأمر شراء من نوبكو يرسل منتجا واحدا إلى اثني عشر مستودعا يصير اثنتي عشرة مسودة بطلب واحد.

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

المعاملالنوعمطلوبالوصف
idintegerنعممعرف أمر البيع، ويأتي من sales_orders_list.
warehouse_idintegerلاالمستودع الذي تشحن منه كل التسليمات، ويأتي من warehouses_list. اتركه لتختاره لاحقا. وأرسل null ليبقى بلا مستودع.
destinationsobject[]لاتفاصيل إضافية للجهات التي تذكرها البنود: عنوان أو مدينة أو شخص للاتصال به عند التسليم. تطابق بنص ship_to دون اعتبار للحروف الكبيرة أو المسافات الزائدة. حتى 200 جهة.
destinations[].ship_tostringنعمالجهة بنصها كما يكتبه ship_to في البنود، من حرف واحد إلى 300 حرف.
destinations[].addressstringلاعنوان الجهة، حتى 500 حرف.
destinations[].citystringلاالمدينة، حتى 100 حرف.
destinations[].contact_namestringلااسم من يتصل به السائق عند التسليم، حتى 200 حرف.
destinations[].contact_phonestringلاهاتف هذا الشخص، حتى 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 · الأدوار: المالك، المدير · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف أمر البيع، ويأتي من sales_orders_list.
notestringلاملاحظة تكتب على التسليمات التي ينشئها، حتى 500 حرف. الافتراضية أن الأمر صدرت فاتورته في Zoho Books.
{
  "id": 1042
}
مثال على المعاملات

ما يعيده: delivered: معرفات التسليمات التي جعلها مسلمة. وcreated: معرفات التسليمات التي أنشأها.

  • التسليمات الملغاة تبقى كما هي، والأمر المسلم بالكامل لا يتغير، فتكرار الاستدعاء آمن. والأمر الملغى يرد بخطأ 409. ولتسجيل جزء من الأمر استخدم deliveries_create وdeliveries_set_status لتلك البنود.
  • يتطلب دور المدير أو المالك لأنه ينشئ تسليمات ويغير حالتها، ويتطلب نطاقي orders.write وlogistics.write معا.

sales_orders_calendar

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

للقراءة فقط · الصلاحية orders.read · الأدوار: المالك، المدير، المبيعات، المشاهد، المشاهد بدون تسعير · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
fromstringلاأول يوم في النافذة بصيغة YYYY-MM-DD، وافتراضه اليوم. اتركه مع open_only وأرسل to وحده لتصل إلى كل ما تأخر.
tostringلاآخر يوم في النافذة بصيغة YYYY-MM-DD، وافتراضه بعد 30 يوما من from. ولا تزيد النافذة على 100 يوم.
open_onlybooleanلايستبعد المدخلات التي سلمت. ومع 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 · الأدوار: المالك، المدير، المشتريات، المشاهد · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
statusstringلايعرض الأوامر في حالة واحدة: draft أو sent أو confirmed أو partially_received أو received أو cancelled.
manufacturer_idintegerلايعرض الأوامر الموجهة إلى هذه الشركة المصنعة من دليلك فقط.
tender_idintegerلايعرض الأوامر التي توفر بنود هذه المنافسة فقط.
sales_order_idintegerلايعرض الأوامر التي توفر بضاعة أمر البيع هذا فقط.
qstringلانص يبحث عنه في رقم الأمر واسم المورد ومرجعه، ويطابق جزءا من النص. حتى 200 حرف.
pageintegerلارقم الصفحة، ويبدأ من 1.
page_sizeintegerلاعدد النتائج في الصفحة: 20 افتراضيا، وحده الأقصى 100.

ما يعيده: صفحة من الأوامر مع total وtotal_pages. لكل أمر رقمه ومورده وحالته وتواريخه وعملته وtotal_amount ومنافسته وأمر البيع المرتبط.

  • أوامر الشراء بيانات تكلفة: لا يراها دور المبيعات ولا الفني ولا المشاهد بدون تسعير.

purchase_orders_get

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

للقراءة فقط · الصلاحية orders.read · الأدوار: المالك، المدير، المشتريات، المشاهد · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف أمر الشراء، ويأتي من 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_idintegerلاالشركة المصنعة التي تطلب منها، وتأتي من `manufacturers_list`. يأخذ الأمر اسمها إن تركت supplier_name. يجب أن تكون من دليل مؤسستك.
supplier_namestringلااسم المورد كما يسجل، من حرف واحد إلى 200 حرف. مطلوب إلا إذا أرسلت manufacturer_id.
supplier_referencestringلامرجع المورد نفسه، مثل رقم تأكيده أو فاتورته المبدئية، حتى 200 حرف. أرسل null لمسحه.
tender_idintegerلاالمنافسة التي يوفر هذا الشراء بنودها، وتأتي من أدوات المنافسات. أرسل null لتركها فارغة.
sales_order_idintegerلاأمر البيع الذي يوفر هذا الشراء بضاعته، ويأتي من `sales_orders_list`. يجب أن يكون أمرا لمؤسستك. أرسل null لتركه فارغا.
currencystringلارمز العملة من ثلاثة أحرف (ISO 4217)، مثل SAR. الافتراضي SAR، ويحفظ بأحرف كبيرة.
ordered_onstringلاتاريخ الطلب بصيغة YYYY-MM-DD. الافتراضي اليوم بتوقيت الرياض.
expected_onstringلاالتاريخ المتوقع لوصول البضاعة، بصيغة YYYY-MM-DD. أرسل null لمسحه.
notesstringلاملاحظات على الأمر، حتى 2,000 حرف. أرسل null لمسحها.
itemsobject[]نعمبنود الأمر، من بند إلى 500 بند.
items[].idintegerلالا يستخدم عند الإنشاء، فاتركه.
items[].product_idintegerلاالمنتج من الكتالوج الذي يخصه هذا البند، ويأتي من products_list. يجب أن يكون منتجا لمؤسستك. أرسل null لإزالة الربط.
items[].descriptionstringنعموصف المطلوب، من حرف واحد إلى 1,000 حرف.
items[].quantitynumberنعمالكمية المطلوبة، وتكون أكبر من صفر.
items[].unitstringلاوحدة القياس مثل box، حتى 50 حرفا. أرسل null لمسحها.
items[].unit_pricenumberلاتكلفة الوحدة بعملة الأمر، صفر أو أكثر. اتركها أو أرسل null ما دام البند بلا سعر، فيبقى خارج إجمالي الأمر.
items[].notesstringلاملاحظات على البند، حتى 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 · الأدوار: المالك، المدير، المشتريات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف أمر الشراء.
manufacturer_idintegerلاالشركة المصنعة المرتبطة بالأمر، وتأتي من `manufacturers_list`. يأخذ الأمر اسمها إلا إذا أرسلت supplier_name معها. أرسل null لفك الربط، ويبقى اسم المورد المكتوب كما هو.
supplier_namestringلااسم المورد كما يسجل، من حرف واحد إلى 200 حرف.
supplier_referencestringلامرجع المورد نفسه، مثل رقم تأكيده أو فاتورته المبدئية، حتى 200 حرف. أرسل null لمسحه.
tender_idintegerلاالمنافسة التي يوفر هذا الشراء بنودها، وتأتي من أدوات المنافسات. أرسل null لتركها فارغة.
sales_order_idintegerلاأمر البيع الذي يوفر هذا الشراء بضاعته، ويأتي من `sales_orders_list`. يجب أن يكون أمرا لمؤسستك. أرسل null لتركه فارغا.
currencystringلارمز العملة من ثلاثة أحرف (ISO 4217)، مثل SAR. الافتراضي SAR، ويحفظ بأحرف كبيرة.
ordered_onstringلاتاريخ الطلب بصيغة YYYY-MM-DD.
expected_onstringلاالتاريخ المتوقع لوصول البضاعة، بصيغة YYYY-MM-DD. أرسل null لمسحه.
notesstringلاملاحظات على الأمر، حتى 2,000 حرف. أرسل null لمسحها.
itemsobject[]لاقائمة البنود الكاملة، تطابق بمعرفاتها (انظر مقدمة الصفحة). من بند إلى 500 بند. اتركها فتبقى البنود والإجمالي كما هي.
items[].idintegerلامعرف البند المحفوظ، ويأتي من purchase_orders_get. البند المرسل مع معرفه يعدل في مكانه، والبند بلا معرف يضاف.
items[].product_idintegerلاالمنتج من الكتالوج الذي يخصه هذا البند، ويأتي من products_list. يجب أن يكون منتجا لمؤسستك. أرسل null لإزالة الربط.
items[].descriptionstringنعموصف المطلوب، من حرف واحد إلى 1,000 حرف.
items[].quantitynumberنعمالكمية المطلوبة، وتكون أكبر من صفر.
items[].unitstringلاوحدة القياس مثل box، حتى 50 حرفا. أرسل null لمسحها.
items[].unit_pricenumberلاتكلفة الوحدة بعملة الأمر، صفر أو أكثر. اتركها أو أرسل null ما دام البند بلا سعر، فيبقى خارج إجمالي الأمر.
items[].notesstringلاملاحظات على البند، حتى 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 · الأدوار: المالك، المدير، المشتريات · الخطة الاحترافية وخطة المؤسسات

المعاملالنوعمطلوبالوصف
idintegerنعممعرف أمر الشراء.
statusstringنعمالحالة الجديدة: draft أو sent أو confirmed أو partially_received أو received أو cancelled.
{
  "id": 98,
  "status": "sent"
}
مثال على المعاملات

ما يعيده: تأكيد مع status الجديدة.

  • الدخول إلى received يسجل received_at، والخروج منها يمسحه. لكن الكميات المستلمة على البنود تبقى كما هي، فالانتقال اليدوي إلى received يقول إن البضاعة وصلت ولا يغير ما سجل على البنود.
  • الأمر الملغى لا يقبل تسجيل استلام. أعده إلى draft أولا.

purchase_orders_delete

يحذف أمر الشراء مع بنوده وما سجل عليها من استلام. لا يمكن التراجع عن ذلك.

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

المعاملالنوعمطلوبالوصف
idintegerنعممعرف أمر الشراء.

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

تسجيل الاستلام

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

purchase_orders_receive

يسجل ما وصل من بضاعة أمر شراء. كل بند يضاف مقداره إلى ما استلم من ذلك البند، ثم ينتقل الأمر إلى partially_received أو إلى received حين يكتمل كل بند.

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

المعاملالنوعمطلوبالوصف
idintegerنعممعرف أمر الشراء.
linesobject[]نعمما وصل الآن، من بند إلى 500 بند.
lines[].item_idintegerنعممعرف بند أمر الشراء، ويأتي من items في `purchase_orders_get`.
lines[].quantitynumberنعمالكمية التي وصلت الآن، وتكون أكبر من صفر. تضاف إلى المجموع المستلم، لا تحل محله.
received_atstringلاوقت الوصول بصيغة 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 إلا مرة واحدة، فإن كان الأمر قد علم مستلما من قبل لم يتغير تاريخه.