CompertMe

دراسة حالة 05 · منصة إعادة توجيه الطرود وإعادة البيع بالعمولة · 2021

بنينا نظامًا يحوّل رفّ المستودع إلى واجهة متجر في أربع دول

بمسح رقم التتبّع ضوئيًا مرة واحدة، يحدّد النظام المالك والمحتوى والرفّ والسعر.

بقلم Hesham Ghoniem، المهندس الرئيسي ·

القطاع
الخدمات اللوجستية عبر الحدود في آسيا · إعادة توجيه الطرود وإعادة البيع بالعمولة
طبيعة العمل
تصميم المنتج وتطويره بالكامل، 2021
نطاق العمل
لوحة تحكم العملاء · عمليات المستودع · المدفوعات · لوحة الإدارة المركزية · الموقع العام
التقنيات المستخدمة عند البناء في 2021
PHP
FastRoute
MySQL
صفحات يولّدها الخادم
6 خدمات خارجية
  • 330 — نقطة نهاية على الخادم: 66 شاشة و264 عملية، لكل منها غرض واحد
  • 43 — جدولًا في قاعدة البيانات، ضمن مخطط واحد يخدم لوحة تحكم العملاء والمستودع والموقع العام
  • 16 — لوحة إعدادات ذاتية الخدمة تتيح للعميل تعديل قواعد العمل بنفسه دون الرجوع إلينا
  • 4 — لغات يدعمها المنتج
  • 2 — مصدران للدخل من رفّ واحد

نظرة عامة

بنينا جميع العمليات ضمن نظام واحد وقاعدة بيانات واحدة.

كانت شركة لإعادة توجيه الطرود عبر الحدود في آسيا تعتمد على جداول البيانات وما يتذكّره الموظفون. تمنح الشركة المتسوّقين عبر الإنترنت عناوين مستودعات في عدة دول: يشتري العميل من متجر لا يشحن إلى بلده، ويرسل مشترياته إلى المستودع، فتجمعها الشركة وتشحنها إلى منزله. معظم البضائع الواردة أحذية رياضية، وكثير من العملاء يشترونها لإعادة بيعها، ويعرضونها على كبرى منصات إعادة بيع الأحذية الرياضية.

تبدأ المشكلة بوصول صندوق لا يحمل اسمًا. كل ما عليه هو رقم تتبّع شركة الشحن. أما هوية مالكه ومحتواه وما إذا كانت مستحقاته قد سُدّدت ووجهته التالية، فكانت معلومات موزّعة بين جدول بيانات ومجموعة دردشة وذاكرة الموظف المناوب. كان العميل يسأل «أين طلبي؟»، ولم تكن الإجابة الصادقة تتجاوز «سأذهب لأبحث عنه».

صمّمنا نظامًا واحدًا وطوّرناه ليشمل العمليات كلها: لوحة تحكم العملاء، والعمل داخل المستودع، وأنظمة الدفع، ولوحة الإدارة المركزية، والموقع العام، وجميعها تعتمد على قاعدة بيانات واحدة. يسجّل العميل بيانات طرده قبل وصوله، فيتوقّع النظام وصول الطرد إلى طاولة الاستلام. وبمسح رقمه ضوئيًا مرة واحدة، يحدّد النظام المالك، ويقارن العدد بالعدد المسجّل مسبقًا، وينبّه إلى التكرار، ويخصّص رفًّا ودفعة تخزين، ويحدّث حالة الطرد ليتمكّن العميل من متابعتها بلغته.

ويعتمد مصدر الدخل الثاني على الرفّ نفسه. فالبضائع المودعة لدى منصات إعادة البيع لبيعها بالعمولة تستخدم إجراءات الاستلام والتخزين والدفع والإرسال نفسها التي تستخدمها الشحنات العادية. بذلك لا تتحوّل خدمة البيع بالعمولة إلى نشاط منفصل يستلزم مطابقة سجلاته مع نشاط الشحن باستمرار.

مسح ضوئي واحد عند طاولة الاستلام

عند مسح رقم التتبّع ضوئيًا على طاولة الاستلام، يربط النظام رقم شركة الشحن بالبيانات التي سجّلها العميل قبل وصول الصندوق. يحدّد المالك، ويقارن العدد بما سُجّل مسبقًا، وينبّه إلى التكرار، ويخصّص رفًّا ودفعة تخزين، ويحدّث الحالة ليتابعها العميل.

التحديات

سبع مشكلات، وكل انتقال بين طرفين فرصة لضياع طرد.

صندوق يصل دون اسم

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

أرقام التتبّع لا تصل بصيغة موحّدة

يدخل العملاء أرقام التتبّع يدويًا، فيكتبونها بأحرف كبيرة أو صغيرة على غير الصيغة الأصلية، أو يضيفون مسافات زائدة، أو يجمعون عدة أرقام في سجلّ صنف واحد. وأحيانًا يسجّل شخصان مختلفان الرقم نفسه.

نظام يكتفي بمطابقة النص لتحديد المالك يفشل مع البيانات الحقيقية خلال أيام، دون أن ينبّه أحدًا. يبقى الصندوق على الرفّ، وتعرض الشاشة «غير مسجّل مسبقًا»، ولا يكتشف أحد المشكلة حتى يشتكي العميل.

بضائع لم يسجّلها أحد

يتلقّى أي مستودع طرودًا لم يبلغه أحد بوصولها. وإذا لم يكن لها مسار عمل محدّد، تراكمت في زاوية وانتهى أمرها بنزاع. هذا الجانب من الخدمات اللوجستية لا يحظى بالاهتمام، وعنده تتوقّف معظم الأنظمة عن تقديم حل.

مستودعان وورديّتان ودولتان، دون مرجع مشترك

يستقبل مستودعان في دولتين الطرود، وتتولّى شركات شحن دولية ومحلية نقلها، بينما يوجد العميل في مكان آخر تمامًا. لا يجتمع أطراف هذه السلسلة في مكان واحد، ومع كل انتقال للطرد من طرف إلى آخر قد يضيع دون أن يلاحظ أحد.

رفّ واحد ونشاطان تجاريان

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

أموال بأربع عملات وأسعار يجب أن تبقى مفهومة

تحتسب الشركة رسوم الشحن والخدمة والرسوم المتفرقة بعملة السداد، بناءً على سعر صرف يتغيّر. ويجب أن تتمكّن من تفسير سعر عرضته في يونيو إذا سأل عنه أحد في أكتوبر. ولا يسدّد العملاء رسوم طرد واحد في كل مرة؛ بل قد يدفعون مقابل 12 طردًا دفعة واحدة، مع رمز خصم، ونصف المبلغ بالبطاقة والنصف الآخر بتحويل بنكي.

تغيّرات العمل أسرع من إصدارات البرنامج

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

يونيو 2021 · أربعة أخطاء وخلل واحد في التصميم

الشهر الذي أصبحت فيه الشاشة تعرض معلومات خاطئة

في يونيو 2021، وبعد أسابيع قليلة من بدء استخدام الإصدار الأول في المستودع، بدأ الموظفون يمسحون ضوئيًا صناديق يؤكّد النظام أنها غير موجودة.

كان الموظف يحمل الطرد بيده، وكان العميل قد سجّله بالفعل، ومع ذلك كانت الشاشة تعرض غير مسجّل مسبقًا.

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

لم يكن السبب خطأً برمجيًا واحدًا، بل افتراضًا واحدًا.

بُني النظام على افتراض أن رقم التتبّع نص واحد بصيغة سليمة ودقيقة دائمًا، لكن الواقع مختلف. يسجّل العميل AB1234XYZ، بينما يحمل ملصق شركة الشحن ab1234xyz. ويسجّل عميل آخر 3 صناديق بوصفها صنفًا واحدًا، ويكتب الأرقام الثلاثة في حقل واحد تفصلها فواصل ومسافات غير منتظمة. وقد يسجّل عميل رقمًا ثم يرفض الموظفون التسجيل، فيبقى الرقم محجوزًا، وحين يعيد العميل تسجيله بصورة صحيحة يخبره النظام بأنه مستخدم. وقد يسجّل عميلان الرقم نفسه، أحدهما عن طريق الخطأ، فتُحسم الملكية بحسب الطرد الذي يمسحه الموظف ضوئيًا أولًا.

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

من «غير مسجّل مسبقًا» إلى تحديد هوية الطرد

خط زمني بثلاث محطات. في يونيو 2021، تظهر طرود عند مسحها ضوئيًا بوصفها غير مسجّلة مسبقًا. خلال يونيو ويوليو 2021، أعدنا بناء المطابقة لتحدّد هوية الطرد، وأضفنا قائمة للمطالبات. وفي أغسطس 2021، أضفنا تنبيهات المسح الضوئي المكرّر والموافقة على عدة مطالبات دفعة واحدة.

انتقلنا من مطابقة النص إلى تحديد هوية الطرد.

أصبح النظام يوحّد صيغة أرقام التتبّع قبل أي إجراء آخر: يزيل المسافات الزائدة من الأطراف، ويوحّد حالة الأحرف، ويفصل الأرقام إذا احتوى الحقل الواحد على عدة أرقام. ويبحث عن الرقم في أي موضع داخل القائمة المسجّلة، بدل الاكتفاء بمطابقة الحقل كاملًا. كما يحرّر الأرقام المرتبطة بتسجيلات مرفوضة لتصبح متاحة مجددًا، ويستبعد أرقام البضائع التي دخلت في طرود شُحنت بالفعل، حتى لا يطالب بها أحد مرتين.

وإذا ظهر رقم له مالك محتمل دون تطابق واضح، لم يعد النظام يتجاهل المشكلة بصمت. بل يضيفه إلى قائمة مطالبات قيد الانتظار، ليوافق الموظفون عليها أو يرفضوها، كلًّا على حدة أو دفعة واحدة.

ثم أضفنا حماية من أخطاء المسح الضوئي نفسه.

لم يعد مسح الرقم نفسه ضوئيًا مرتين يستبدل أي بيانات سابقة. بل يعرض النظام شريط تنبيه أحمر يذكر تاريخ المسح الضوئي السابق ووقته بدقّة واسم الموظف الذي أجراه.

هذه التجربة حدّدت طريقة بناء المنتج كله

  • أصبح للبيانات الملتبسة مسار عمل بدل أن تتسبّب في فشل النظام. للأرقام التي لا تطابق سجلًّا، والأرقام المكرّرة، والأرقام المتنازع عليها، قوائم محدّدة ومسارات موافقة. فلا يتوقّف أي منها دون تنبيه أو متابعة.
  • أصبحت معالجة الاستثناءات جوهر المنتج. معظم النظام يعالج الحالات الخارجة عن المسار المعتاد: طرود تصل دون تسجيل مسبق، ومدفوعات مرفوضة، وبضائع بيع بالعمولة مرتجعة، وفروق في الأعداد، ومطالبات.
  • لا نحذف سجلًّا لإخفاء مشكلة. يحتفظ النظام بالتسجيلات المرفوضة والمدفوعات المرفوضة والبضائع المفقودة والمعثور عليها، مع السبب والتاريخ والوقت واسم الشخص المرتبط بكل سجلّ.

لا يعطي النظام موظف المستودع معلومة غير مؤكّدة. وإذا لم يعرف، يوضّح ذلك ويضع الحالة في قائمة للمتابعة.

— Hesham Ghoniem، المهندس الرئيسي

ما بنيناه

ثلاث مراحل في 2021، وجّهها العمل داخل المستودع.

المرحلة الأولى · مايو إلى يونيو 2021 · الأساس الذي يعتمد عليه كل شيء

أساس النظام

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

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

المرحلة الثانية · يوليو 2021 · إعادة البيع بالعمولة

نشاط ثانٍ يعتمد على البنية نفسها

أضفنا وحدة لإيداع البضائع لدى منصات إعادة البيع لبيعها بالعمولة، تستخدم إمكانات المستودع والتخزين والدفع والإرسال القائمة. يحمل كل حذاء رياضي رمز SKU وسعر تجزئة ومقاسات بالنظم الأمريكية والبريطانية والأوروبية. ويتنقّل ضمن حالات خاصة به: قيد المراجعة، وبانتظار عرض السعر، وبانتظار البيع، وتم الاستلام، أو رفضته المنصة وبانتظار الإرجاع. ويُخزّن على الرفّ نفسه مع بضائع الشحن العادي.

وأضفنا مسارًا لمعالجة النزاعات بشأن البضائع المعيبة، تدعمه صور توثّق الحالة. فمن المعتاد أن ترفض منصة إعادة بيع زوجًا من الأحذية، وليس هذا حالة استثنائية.

مساران ورفّ واحد

رفّ مستودع واحد في المنتصف يرتبط بمساري عمل. في إعادة توجيه الطرود: التجميع والوزن والتسعير والدفع والشحن. وفي البيع بالعمولة: عرض البضاعة وتقديم عرض السعر والبيع والاستلام، أو الرفض وانتظار الإرجاع.

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

أضفنا رموز خصم على رسوم الشحن أو الخدمة أو الرسوم المتفرقة أو المبلغ الإجمالي. وأتحنا سداد رسوم عدة طرود معًا، ليسدّد العميل رسوم 12 طردًا في معاملة واحدة بدل 12 معاملة. وأضفنا مستوى صلاحيات جديدًا باسم مدير المنطقة، يتيح لمسؤول عمليات خبير إدارة جميع أعمال المستودع والوصول إلى جميع لوحات النظام، مع استثناء إدارة المستخدمين عمدًا.

المرحلة الثالثة · أغسطس إلى ديسمبر 2021 · مراقبة الاستخدام الفعلي

العمل داخل المستودع وجّه التطوير

جاءت التعديلات بعد يوليو كلّها تقريبًا من مراقبة طريقة استخدام النظام. جعلنا شاشة الاستلام تتذكّر المستودع الافتراضي، لأن الموظفين كانوا يعيدون اختياره طوال اليوم. وأصبح سجلّ مخزون المستودع يعرض العنوان كاملًا بدل الاكتفاء بتسمية، لأن موظفي تجهيز الطلبات كانوا يرجعون إلى شاشة أخرى للحصول عليه. واستبدلنا مكوّن البحث بالكامل حين اتّضح بطء المطابقة مع عدد أرقام التتبّع التي كان الموظفون يبحثون عنها فعليًا. ثم عدّلناه مرة أخرى في اليوم التالي ليطابق الرقم في أي موضع من النص، بدل بدايته فقط.

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

وتغيّر اسم الشركة أثناء التطوير.

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

تفاصيل تقنية · طاولة الاستلام

مسح ضوئي واحد يبحث في ثلاثة أنواع من السجلات

أصعب لحظة في هذا العمل هي لحظة وصول الصندوق إلى طاولة الاستلام. فنجاح ما يسبقها وما يليها يعتمد على دقّتها، والموظف الذي يتولّاها واقف يحمل الطرد، وخلفه طابور ينتظر.

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

لهذا يشغّل المسح الضوئي الواحد سلسلة فحوص لتحديد هوية الطرد عبر الأنواع الثلاثة بالترتيب.

كل حالة لها نتيجة واضحة أو مسار للمتابعة

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

الشحن المسجّل مسبقًا

أولًا، الشحن المسجّل مسبقًا.

يقارن النظام الرقم بجميع الأصناف المسجّلة، سواء طابق الحقل كاملًا أو كان أحد أرقام قائمة تفصل بينها فواصل، ودون تمييز بين الأحرف الكبيرة والصغيرة. ويستبعد التسجيلات المرفوضة من البحث حتى لا تمنع أرقامها إعادة التسجيل. وعند العثور على تطابق، يسترجع سجلّ الطرد المرتبط بالرقم ومسار شحنه وبيانات عميله.

البيع بالعمولة

ثانيًا، البيع بالعمولة.

إذا لم يجد النظام الرقم في سجلات الشحن المسجّل مسبقًا، يبحث بالطريقة نفسها، مع توحيد الصيغة، في سجلات إعادة البيع. وعند العثور عليه، ينقل حالة السجلّ تلقائيًا إلى بانتظار بيع البضاعة، لأن وصولها الفعلي هو ما يتيح هذا الانتقال.

المفقودات والمعثورات

ثالثًا، المفقودات والمعثورات.

إذا لم يجد النظام الرقم في أيٍّ منهما، يتحقّق مما إذا كان قد سُجّل سابقًا ضمن البضائع الواصلة دون تسجيل مسبق. فإن وجده، عرض السجلّ الموجود والرفّ ودفعة التخزين مع تنبيه أحمر. وإن لم يجده، أمكن للموظف تأكيد إضافته فورًا إلى قائمة البضائع غير المسجّلة مسبقًا، وإنشاء موقع رفّ أو دفعة تخزين من الشاشة نفسها إن لم يكن ما يحتاجه موجودًا بعد، دون مغادرتها.

عملية كتابة واحدة

مهما كانت نتيجة البحث، تُستكمل العملية بكتابة سجلّ واحد.

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

ثم تعرض الشاشة ما يحتاج الموظف إلى معرفته عند طاولة الاستلام.

تظهر جميع هذه المعلومات باستجابة واحدة على جهاز المستودع المشترك، في الشاشة نفسها ودون إعادة تحميل الصفحة:

  • صورة المحتوى المتوقّع للصندوق
  • رمز العميل المختصر
  • مسجّل مسبقًا أو غير مسجّل
  • مسار الشحن
  • العدد الفعلي مقارنة بالمسجّل
  • الرفّ
  • دفعة التخزين
  • عدد قابل للتعديل

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

المسح الضوئي ليس مجرد بحث؛ إنه اللحظة التي تحدّد فيها الشركة ما لديها من بضائع.

— Hesham Ghoniem، المهندس الرئيسي

كيف نعمل

سبع قواعد تبدأ بفهم العمليات قبل تصميم الشاشات.

ضع نموذجًا للعمليات قبل تصميم الشاشات

قبل أي عمل على الواجهات، رسمنا رحلة الطرد الفعلية بين مستودعين وعبر 3 مسارات شحن صادرة، وبنينا البيانات لتتتبّع انتقال مسؤوليته من طرف إلى آخر. ثم صمّمنا الشاشات. لهذا أمكن إضافة مصدر دخل ثانٍ لاحقًا بوحدة جديدة، دون إعادة بناء النظام.

سلّم إصدارات جاهزة للاستخدام تباعًا

بدأنا بتسجيل الطرود واستلامها، ثم البيع بالعمولة، ثم رموز الخصم وسداد رسوم عدة طرود معًا، ثم مستوى صلاحيات جديد للموظفين، ثم تقييمات العملاء. سلّمنا كل جزء جاهزًا للاستخدام، ليتمكّن العميل من إتاحته لموظفيه في الأسبوع نفسه.

اجعل الاستخدام الفعلي يوجّه التحسينات

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

اجعل معالجة الاستثناءات جوهر المنتج

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

أتِح التغيير من الإعدادات دون إصدار جديد

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

وثّق كل شيء، فالبضائع والأموال تنتقل بين الأطراف

يسجّل النظام كل زيارة لصفحة وكل إجراء مهم في سجلّ تدقيق، مع المستخدم والتاريخ والوقت وعنوان IP ونظام التشغيل والمتصفّح. وفي نشاط لا يلتقي فيه العميل بموظف المستودع، يكون هذا السجلّ مرجع حسم النزاعات.

خطّط لتسليم النظام منذ اليوم الأول

النظام الذي يحتاج إلى مهندس لإجراء كل تعديل ما زال غير مكتمل. تمنح 16 لوحة إعدادات العميل القدرة على تعديل النظام بحسب متطلّبات عمله بنفسه.

التقنيات المستخدمة

ثماني طبقات اخترناها لمستودع في 2021.

التطبيق

قلّلنا المكوّنات عمدًا: لا خطوة بناء ولا سلسلة لمعالجة ملفات الواجهة، و9 اعتماديات فقط. يستطيع فريق صغير قراءة الكود كله.

  • PHP
  • بنية MVC مخصّصة
  • FastRoute

البيانات

مخطط قاعدة بيانات واحد يخدم لوحة تحكم العملاء والعمل داخل المستودع والموقع العام. لا حاجة إلى مزامنة، فالجميع يستخدم نسخة واحدة.

  • MySQL
  • 43 جدولًا
  • طبقة مشتركة للاستعلامات المحضّرة

الواجهة

تتيح 264 نقطة نهاية، لكل منها غرض واحد، تحديث شاشة المستودع في مكانها دون إعادة تحميل الصفحة بعد كل مسح ضوئي.

  • صفحات يولّدها الخادم
  • Bootstrap 4
  • jQuery

المدفوعات

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

  • صفحة دفع بالبطاقة يستضيفها المزوّد

التحقّق

رمز يُستخدم مرة واحدة عند التسجيل، وعند كل تغيير لرقم هاتف العميل. فتنبيه الحالة لا يفيد إلا إذا وصل إلى الهاتف الصحيح. وقد أوقف المزوّد خدمة رموز التحقّق منذ ذلك الحين.

  • رمز تحقّق هاتفي لمرة واحدة

الإشعارات

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

  • إشعارات فورية
  • رسائل SMS التلقائية
  • إرسال البريد الإلكتروني

العملات

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

  • خدمة أسعار الصرف

دعم اللغات

أربع لغات، من بينها الإنجليزية.

  • طبقة مدمجة لدعم اللغات

الاختبارات الآلية

تتحقق الاختبارات الآلية من كل تغيير قبل وصوله إلى بيئة الإنتاج.

بنينا النظام في 2021 باستخدام مكتبات الواجهة الأمامية المتاحة آنذاك: Bootstrap 4 وjQuery. ناسبت هذه الخيارات متطلّبات المشروع وميزانيته وأجهزته في ذلك الوقت؛ فالمستودع الذي يعمل بأجهزة مشتركة احتاج إلى صفحات يولّدها الخادم وتتلقّى التحديثات دون إعادة تحميل. لم تعد هذه خيارات يختارها أحد اليوم، وتوضّح دراسات الحالة الأحدث التقنيات التي نعتمد عليها حاليًا.

التكاملات بحسب الوظيفة

  • مزوّد يستضيف صفحة الدفع بالبطاقة
  • رسائل SMS التلقائية
  • خدمة رموز التحقّق الهاتفي لمرة واحدة
  • خدمة الإشعارات الفورية
  • خدمة أسعار الصرف
  • مزوّد إرسال البريد الإلكتروني

انتقلت ملكية خدمتين من الخدمات الست أو توقّف تقديمهما منذ ذلك الحين.

كيف تعمل المنصة

ثماني خطوات من التسجيل إلى شحن الطرد أو بيعه.

الخطوة 1

سجّل واحصل على عنوان

يسجّل العميل حسابًا، ويتحقّق من هاتفه برمز عبر SMS، ثم يحصل على رمز شخصي مختصر يتكوّن من حرفَي اختصار اسم الشركة تليهما 6 أحرف عشوائية، مع عناوين مستودعات في عدة دول. ويرافق هذا الرمز بضاعته بدل اسمه.

الخطوة 2

سجّل الطرد قبل وصوله

يتسوّق العميل من أي مكان، ويشحن إلى عنوان المستودع، ثم يسجّل الطرد في لوحة تحكم العملاء مع رقم التتبّع والمنتج والكمية والقيمة المعلنة والصورة. ويتيح حقل SKU الإكمال التلقائي من مكتبة صور مشتركة، ليحمل المنتج الاسم نفسه في كل مرة. يوافق الموظفون على التسجيل أو يصحّحونه أو يعيدونه مع سبب مكتوب يقرؤه العميل. ولكل تسجيل سلسلة رسائل خاصة به، فيظلّ النقاش حول الطرد مرتبطًا بسجلّه.

الخطوة 3

استلم وخزّن

يمسح الموظف رقم التتبّع ضوئيًا، فيحدّد النظام المالك بالبحث في سجلات الشحن المسجّل مسبقًا والبيع بالعمولة والمفقودات والمعثورات. ويقارن العدد الفعلي بالمسجّل، وينبّه إلى أي مسح ضوئي سابق، ويخصّص رفًّا ودفعة تخزين. أما الطرود الواصلة دون تسجيل مسبق، فيضيفها إلى قائمة المطالبات بدل تركها تتراكم في زاوية.

الخطوة 4

تابع المخزون من الجهتين

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

الخطوة 5

جمّع وسعّر واطلب السداد

يجمع الموظفون الأصناف المخزّنة في طرد صادر، ويزنونه ويحدّدون مساره، ثم يصدرون طلب سداد يوضّح رسوم الشحن والخدمة والرسوم المتفرقة بعملة السداد.

الخطوة 6

سدّد المستحقات

يدفع العميل بالبطاقة عبر صفحة دفع يستضيفها المزوّد، أو بتحويل بنكي يرفع إيصالَه ليوافق عليه الموظفون أو يعيدوه مع السبب. ويمكنه السداد لطرد واحد أو 12 طردًا معًا. ويتحقّق النظام من رموز الخصم ويطبّقها عند الدفع، سواء كانت نسبة مئوية أو مبلغًا ثابتًا يحوّله إلى عملة السداد بسعر الصرف المحفوظ ويوزّعه بالتساوي على مجموعة الطرود. ويؤرشف المدفوعات المرفوضة مع التاريخ والوقت والسبب، ثم يسجّل المحاولة التالية بدلًا منها، دون حذف السابقة أبدًا.

الخطوة 7

اشحن أو بِع

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

الخطوة 8

أضف تقييمًا

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

ما يدعم هذه العمليات

تحدّد 4 مستويات للصلاحيات، هي العضو وموظف التجزئة ومدير المنطقة ومدير النظام الأعلى، من يحق له الوصول إلى كل شاشة، ويتحقّق النظام منها مركزيًا في جميع الشاشات دون استثناء. وتتيح 16 لوحة إدارة المسارات وشركات الشحن والدول والعملات والمستودعات وأنواع المنتجات ومواقع الرفوف والحالات والحسابات البنكية ورموز الخصم والإعلانات واللافتات وصور SKU والصفحات القانونية. ويسجّل النظام كل زيارة لصفحة وكل إجراء في سجلّ تدقيق.

النتائج

ما أصبح بإمكان الشركة فعله ولم يكن متاحًا لها من قبل.

معرفة البضائع الموجودة لديها

يحدّد النظام المالك والعدد والرفّ ودفعة التخزين والحالة بمسح ضوئي واحد، للشحنات وبضائع البيع بالعمولة معًا. لم يعد المستودع يعتمد على التخمين.

منع ضياع الطرود بسبب التباس البيانات

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

التعامل مع الطرود غير المسجّلة مسبقًا

للطرود التي تصل دون تسجيل مسبق مسار واضح: توثيق الوصول، والتخزين على الرفّ، والمطالبة بالملكية، ثم الموافقة أو الرفض، بدل تركها في زاوية من المستودع.

تشغيل مصدرَي دخل من رفّ واحد

تستخدم خدمة إعادة البيع بالعمولة إجراءات الاستلام والتخزين والدفع والإرسال نفسها التي تستخدمها خدمة إعادة توجيه الطرود. أضافت الشركة خدمة ثانية دون نظام ثانٍ يستلزم مطابقة السجلات.

تحصيل المستحقات بالطريقة التي يدفع بها العملاء

بالبطاقة أو التحويل البنكي، لطرد واحد أو 12 طردًا معًا، مع رموز خصم وأسعار صرف موثّقة بتاريخها، وبعملة العميل.

الإجابة عن «أين طردي؟» دون سؤال أحد

يتابع العميل بضاعته بنفسه من التسجيل المسبق حتى باب منزله، ويتلقّى إشعارًا عند كل انتقال بين الأطراف.

البيع بأربع لغات

يدعم المنتج 4 لغات، ويرسل تنبيهات الرفض بلغتين عبر SMS.

تغيير قواعد العمل دون تعديل البرنامج

يمكن إضافة مسار أو شركة شحن أو مستودع أو رسوم أو رمز خصم أو حالة أو صفحة قانونية من الإعدادات. وحتى اسم الشركة تغيّر في منتصف المشروع بتعديل المحتوى.

حسم النزاعات بالأدلة

يسجّل النظام كل زيارة لصفحة وكل إجراء، مع المستخدم والتاريخ والوقت وعنوان IP والجهاز. ولا يحذف أي سجلّ لإخفاء مشكلة.

نشر آراء العملاء تلقائيًا

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

التطوير بالأرقام

  • ~46,000 سطر من كود التطبيق
  • 330 نقطة نهاية على الخادم: 66 شاشة و264 عملية، لكل منها غرض واحد
  • 43 جدولًا في قاعدة البيانات
  • 67 · 53 · 29 متحكّمات الصفحات · قوالب العرض · المكوّنات المشتركة على الخادم
  • 16 لوحة إعدادات ذاتية الخدمة
  • 4 مستويات صلاحيات يتحقّق منها النظام في كل شاشة
  • 4 لغات للواجهة
  • 6 خدمات خارجية متكاملة مع النظام
  • 2 · 3 · 2 مستودعات · مسارات شحن صادرة · مصادر دخل
  • ~20 حالة للشحن، إضافة إلى حالات البيع بالعمولة، ويمكن للعميل تعديلها جميعًا
  • 68 عملية حفظ للتغييرات خلال 34 يوم تطوير فعلي

التفاصيل التقنية

قرارات هندسية تستحق التوضيح

المدفوعات

التحقّق على خادمنا، دون الاعتماد على المتصفّح

عندما يعود العميل من صفحة الدفع المستضافة، تجلب المنصة جلسة الدفع مباشرة من المزوّد، وتقرأ المبلغ والعملة وحالة الدفع من استجابته. ولا تستمدّ أي بيانات عن الدفع من الرابط الذي عاد عبره العميل.

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

عمليًا، نضيف سجلات مالية مع إبقاء السابقة كما هي

لا يحذف النظام الدفعة المرفوضة ولا يعدّلها، بل يضع عليها علامة الأرشفة ويسجّل وقت أرشفتها، ويسجّل المحاولة التالية إلى جانبها. وهكذا يمكن الاستعلام عن كل محاولة سداد مرتبطة بالطرد. هذا السجلّ الكامل وحده يصلح مرجعًا عند نزاع بشأن استرداد دفعة عبر البنك.

العملات

حفظ أسعار الصرف مع وقت جلبها

يجلب النظام سعر الصرف لكل عملة ويحفظه مع وقت جلبه، ليظلّ عرض السعر الصادر في شهر قابلًا للتفسير في شهر آخر. وعند السداد، يحوّل مبالغ الخصم الثابتة وفق سعر الصرف المحفوظ، ويوزّعها بالتساوي عند تطبيقها على مجموعة طرود.

صلاحيات الوصول

تحديد الصلاحيات لكل شاشة والتحقّق منها مركزيًا

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

قاعدة البيانات

استخدام معاملات لتمرير القيم إلى الاستعلامات

تمرّ الاستعلامات عبر طبقة مشتركة للاستعلامات المحضّرة، تربط القيم بالمعاملات بدل دمجها في نص الاستعلام.

الهوية

تجزئة كلمات المرور والتحقّق من أرقام الهواتف

يحفظ النظام كلمات المرور بعد تجزئتها مع قيمة تمليح خاصة بكل مستخدم، ويتحقّق من رقم الهاتف برمز يُستخدم مرة واحدة عند التسجيل وعند كل تغيير للرقم.

الوضع التقني بصراحة

أنجزنا هذا المشروع في 2021، وما زال الكود يعتمد على PHP 7. تستخدم 12 نقطة استدعاء ترتيبًا للمعاملات ألغاه PHP 8، لذلك يحتاج الكود إلى تعديلات ليعمل على إصدار PHP مدعوم حاليًا. وقد انتهى الدعم الأمني لإصدار PHP 7.4 في نوفمبر 2022. وتعود مكتبات الواجهة الأمامية إلى الفترة نفسها.

أعمال ذات صلة

منصة الشحن الجوي والجمارك

الخدمات اللوجستية · 2025 – 2026 · تحديد المواصفات والبناء والنشر

7 أيام — من مستودع فارغ إلى واجهة API موثّقة تعمل فعليًا، وقّع الطرفان العقد بناءً عليها

جميع الأعمال

الخطوة التالية

هل تعتمد عملياتك على جداول البيانات ومجموعة دردشة والموظف المناوب؟

نضع نموذجًا للعمليات قبل تصميم الشاشات، ونجعل معالجة الاستثناءات جوهر المنتج، ونسلّمك نظامًا يستطيع فريقك تعديله دون الرجوع إلينا.

احجز مكالمة استكشافية

لم نكشف هوية العميل · جميع الأرقام محسوبة من الكود الذي سلّمناه وسجلّ تغييراته · أكتوبر 2026