Skip to content
Softworks
Softworks
hi@softworks.studio
Instagram LinkedIn

ترانزيتو لفالكون جروبدراسة حالة

كل خطوة في الرحلة.مرتبطة باللي بعدها.

إزاي ربطنا عمليات نقل النقد لفالكون، من أجهزة أندرويد في الميدان لحد لوحة العمليات.

اقرأ الحكاية17 دقيقة
TRANSITO / CONNECTED OPERATIONSمن الميدان للخزنة
Transito / Operations01
لوحة عمليات ترانزيتو في تطبيق فالكون
صفحة مسؤول الخزنة على تابلت ترانزيتو المتين
مركز مهام القائد على ماكينة ترانزيتو المحمولة بطابعة إيصالات
العمليات / ماكينة الميدان / تابلت الخزنةشاشات تجريبية · تصوّر للأجهزة
تطبيق فالكون · شاشات تجريبية · تصوّر للأجهزة
Falcon Group — Boundless Trust

العميل

فالكون جروب

المنتج

TransitoTransito منظومة نقل النقد

دور سوفتوركس

هندسة المنظومة كاملةويب، موبايل، باك إند وأجهزة

نوع العمل

حل مخصص لعميلمبني على منتج شراكة

شريك المنتج

Binary Solutions

ترانزيتو من تطوير سوفتوركس ستوديو بالشراكة مع باينري سوليوشنز. دراسة الحالة دي عن الحل المخصص لـفالكون جروب كعميل.

حجم التشغيلتحديث ١٨ أكتوبر ٢٠٢٦
قيمة النقد المنقول حتى الآن
25B+EGP
وقت إتاحة النظام
99.9%

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

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

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

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

أدوار مختلفة. ونفس الصورة.

بدأنا من المعنى التشغيلي لكل خطوة

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

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

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

كل مستخدم عنده سياق مختلف للشغل

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

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

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

مراحل الطلب والوجهات والتعيينات في مساحة التشغيل.
الشحنات الجاريةشاشة فعلية ببيانات عرض خيالية

الشحنة أكبر من كلمة حالة.

رحلة توضيحية تفاعلية

مكان الشحنة

مع الطاقم الأول

التحصيل

الطاقم الأول بيستلم الشحنة وبيسجّل الشنط والأختام علشان الخطوة التالية.

المسؤول
القائد الأول
السجل
بيان التحصيل

التعيين بيجهّز الرحلة. الصرف بيسجّل خروج الشحنة.

رحلة طلب مباشر من الفرع لحد إيصال التسليم

خلّينا نتتبع طلب تحويل بين فرعين. الأمثلة اللي في الدراسة دي توضيحية ومبنية على سلوك النظام؛ مش حكايات عن حوادث حصلت في فالكون.

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

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

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

مسار توضيحي للشحنة
01 — DIRECT DELIVERYاختار جزء وشوف علاقته بالباقي
01

التجهيز

02

التحصيل

03

التسليم

الجزء المختارطلب من الفرع

طلب من الفرعمراجعة العمليات

كل العلاقات
  • طلب من الفرع ← مراجعة العمليات
  • مراجعة العمليات ← تعيين القائد والعربية
  • تعيين القائد والعربية ← التحرك للتحصيل
  • التحرك للتحصيل ← تسجيل الشحنة وإتمام التحصيل
  • تسجيل الشحنة وإتمام التحصيل ← التحرك للتسليم
  • التحرك للتسليم ← مراجعة الاستلام والإيصال
شوف كود الرسم
shipment-flow.mmd
flowchart RL
  A[طلب من الفرع] --> B[مراجعة العمليات]
  B --> C[تعيين القائد والعربية]
  C --> D[التحرك للتحصيل]
  D --> E[تسجيل الشحنة وإتمام التحصيل]
  E --> F[التحرك للتسليم]
  F --> G[مراجعة الاستلام والإيصال]

رسم توضيحي من مادة دراسة الحالة.

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

فصلنا الشنطة عن الختم وعن قيمة المحتوى

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

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

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

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

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

اهتمّينا بتفاصيل تعديل الفئات أثناء الإدخال

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

سجل التطوير فيه تعديل محدد للحفاظ على قائمة الفئات القابلة للتحرير. النوع ده من الشغل بيحتاج متابعة حالة الواجهة نفسها، وعلاقتها بالبيانات اللي هتتبعت في النهاية.

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

طوّرنا مراجعة التسليم على أساس البيان المسجّل

تكامل السكانر كان جزء مهم من تجربة الاستلام، ومعاه احتجنا تجربة واضحة لمراجعة البيان اللي اتسجّل بالفعل للشحنة.

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

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

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

اتعيّنت، بس لسه ما خرجتش.

تاريخ الشحنة يفضل معاها. حتى لما الشخص اللي شايلها يتغيّر.

المرور بالخزنة محتاج نموذج لرحلتين مرتبطتين

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

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

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

مسار توضيحي للشحنة
02 — VIA A VAULTاختار جزء وشوف علاقته بالباقي
01

الاستلام

02

الحفظ والتخطيط

03

الصرف والتسليم

الجزء المختارتحصيل القائد الأول

تحصيل القائد الأولاستلام الخزنة

كل العلاقات
  • تحصيل القائد الأول ← استلام الخزنة
  • استلام الخزنة ← وجود الشحنة في المخزون
  • وجود الشحنة في المخزون ← تعيين القائد التالي
  • تعيين القائد التالي ← الصرف الفعلي من الخزنة
  • الصرف الفعلي من الخزنة ← التسليم للوجهة النهائية
شوف كود الرسم
shipment-flow.mmd
flowchart RL
  A[تحصيل القائد الأول] --> B[استلام الخزنة]
  B --> C[وجود الشحنة في المخزون]
  C --> D[تعيين القائد التالي]
  D --> E[الصرف الفعلي من الخزنة]
  E --> F[التسليم للوجهة النهائية]

رسم توضيحي من مادة دراسة الحالة.

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

مخزون الخزنة على تابلت ترانزيتو المتين
المخزون الحاليشاشة فعلية ببيانات عرض خيالية

ربطنا استلام الترانزيت بالمخزون وتاريخ القائد

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

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

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

المخزون بيعكس الموجود فعليًا في الخزنة

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

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

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

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

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

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

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

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

الفكرة في الكود

التخطيط حاجة. والحيازة حاجة تانية.

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

custody-model.ts
type Custody = "FIRST_CREW" | "VAULT" | "NEXT_CREW";
type Shipment = { custody: Custody; nextCrew?: string };

// Planning the next leg does not move the shipment.
function assignOnward(shipment: Shipment, crew: string): Shipment {
  if (shipment.custody !== "VAULT") {
    throw new Error("Shipment must be inside the vault");
  }
  return { ...shipment, nextCrew: crew };
}

// Dispatch is a separate physical handover.
function dispatch(shipment: Shipment): Shipment {
  if (shipment.custody !== "VAULT" || !shipment.nextCrew) {
    throw new Error("A vault shipment needs an onward crew");
  }
  return { ...shipment, custody: "NEXT_CREW" };
}

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

البرمجيات بتقابل الواقع.

TRANSITO / FIELD SYSTEM

من إيد القائد. للخزنة.

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

وصلنا أجهزة الميدان بتطبيق الموبايل

تطبيق القائد مبني بـReact Native وExpo، ومعاه وحدات أندرويد مكتوبة بـKotlin وJava للتعامل مع إمكانيات الأجهزة. الكود فيه تكاملات للسكانر مع Sunmi وMoreFun، ومسارات للطباعة مع Sunmi وMoreFun وStylish.

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

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

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

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

صمّمنا الإيصال على مقاس الاستخدام الحقيقي

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

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

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

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

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

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

كل معلومة محتاجة سياقها.

نفس البيانات. طريقتين للعرض.

تفصيل التحليلات في الوضع الفاتح، ببيانات عرض خيالية
تفصيل من شاشات المنتج. الأرقام بيانات عرض خيالية.

تعاملنا مع نشاط الجهاز والموقع كمعلومتين مختلفتين

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

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

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

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

خلّينا استيراد Excel عملية ليها تقدم ونتيجة مفهومة

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

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

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

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

راجعنا التفاصيل اللي بتوجّه قرار المستخدم

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

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

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

ربطنا التقارير بنفس بيانات التشغيل

ترانزيتو فيه تقارير تشغيل وتحليلات وتصدير PDF وExcel. البيانات بتغطي الطلبات والأطقم ونشاط الخزنة وعروض تشغيلية مرتبطة بيها.

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

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

الترابط من أساس التصميم.

التقنيات اللي استخدمناها ودور كل طبقة

الأدوات ورا المنظومةTransito / Engineering
01

واجهات المستخدم

العمليات والخزنة وبوابة العميل

Next.jsReactTailwind CSSRadix UI
02

الميدان والأجهزة

خطوات أندرويد والربط بالأجهزة

ExpoReactKotlin
03

منطق التشغيل

واجهات برمجية وانتقالات متحقّق منها

Node.jsExpressTypeScriptZod
04

البيانات والسجلات

السجلات المترابطة والخدمات المساعدة

PostgreSQLPrismaRedis
الربط والخرائط والمستنداتTanStack QueryAxiosLeafletPuppeteerSharp
الطبقةالتقنياتاستخدامها في ترانزيتو
الويبNext.js 16 وReact 19لوحة العمليات، بوابة العملاء وشاشات الخزنة والتقارير
مكوّنات الواجهةTailwind CSS 4 وRadixتنظيم العرض والتفاعلات القابلة لإعادة الاستخدام
بيانات الويب والخريطةReact Query وAxios وLeafletمتابعة بيانات السيرفر، الاتصال بالواجهات البرمجية وعرض الخريطة
الموبايلExpo 54 وReact Native 0.81.4 وExpo Routerخطوات القائد والتنقل بين مراحل المهمة
أندرويد NativeKotlin وJavaالسكانر والطابعة وخدمة الموقع
الباك إندNode.js وExpress 4 وTypeScript وZodتنفيذ الإجراءات والتحقق من المدخلات ومنطق التشغيل
قاعدة البياناتPostgreSQL وPrisma 6علاقات الطلبات والشنط والمخزون والتعيينات
الخدمات المساعدةRedis وتخزين متوافق مع S3خدمات التطبيق المساندة وحفظ المستندات والصور
المستنداتPuppeteer وExcelJS وSharpملفات PDF وExcel ومعالجة الصور

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

تتبّعنا الإجراء من الجهاز لحد سجله في النظام

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

من الجهاز لنموذج التشغيل
01 — SYSTEM ARCHITECTUREاختار جزء وشوف علاقته بالباقي
الجهاز يقرأ ويطبع.الخدمات بتحدد معنى العملية.
الجزء المختارخدمات الباك إند

تطبيق القائدخدمات الباك إند

لوحة العمليات والخزنةخدمات الباك إند

بوابة فرع العميلخدمات الباك إند

خدمات الباك إندبيانات الشحنات والمخزون

خدمات الباك إندالإيصالات والتقارير

كل العلاقات
  • سكانر وطابعة أندرويد ↔ تطبيق القائد
  • تطبيق القائد ↔ خدمات الباك إند
  • لوحة العمليات والخزنة ↔ خدمات الباك إند
  • بوابة فرع العميل ↔ خدمات الباك إند
  • خدمات الباك إند ↔ بيانات الشحنات والمخزون
  • خدمات الباك إند ← الإيصالات والتقارير
شوف كود الرسم
system-architecture.mmd
flowchart RL
  H[سكانر وطابعة أندرويد] <--> M[تطبيق القائد]
  M <--> A[خدمات الباك إند]
  W[لوحة العمليات والخزنة] <--> A
  C[بوابة فرع العميل] <--> A
  A <--> D[بيانات الشحنات والمخزون]
  A --> R[الإيصالات والتقارير]

رسم توضيحي من مادة دراسة الحالة.

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

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

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

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

التفاصيل هي اللي بتبني المنظومة.

التخصيص لفالكون ظهر في تفاصيل الرحلة

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

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

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

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

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

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

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

ابدأ من رحلة الشغل مع فريق سوفتوركس

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

ابدأ مناقشة تقنية لمشروعك مع فريق سوفتوركس.

عندك رحلة تشغيل محتاجة تتنظّم؟

نبدأ من الشغل. ونبني اللي يربطه.

اتكلم مع سوفتوركس
Softworks

Softworks Studio