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%

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

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

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

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

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

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

الأول نفهم مين بيعمل إيه

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

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

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

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

الطلب اللي قال «أنا بدأت» والبيانات طلبت تفاصيل

كلمة «بدأت» ممكن تعمل اجتماع لوحدها. بدأت تتحرك؟ بدأت تجمع؟ استلمت الشنط؟ ولا خلصت ورايح تسلّم؟

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

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

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

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

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

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

مكان الشحنة

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

التحصيل

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

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

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

الشنطة والختم مش نفس الخانة

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

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

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

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

الفئات وقت التعديل محتاجة تفضل واقفة مكانها

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

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

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

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

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

مراجعة التسليم قالت للبيان «تعالى نراجع سوا»

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

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

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

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

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

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

الخزنة محطة في الرحلة وليها دخول وخروج

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

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

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

مسار توضيحي للشحنة
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

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

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

السكانر وصل، بس داخل من باب الكيبورد

«هو ده إيه ده يا هادي؟» — من فيلم تتح. مصدر الاقتباس

تعليقنا على المشهد: لما تتوقع حدث من السكانر، وتلاقي الجهاز بيكتب الرقم كأنه كيبورد.

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

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

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

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

الطابعة الصغيرة عندها رأي في التصميم

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

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

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

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

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

الهاردوير عنده طبقة، والمهمة عندها طبقة

«المصري معروف بجبروته» — من فيلم فول الصين العظيم. مصدر الاقتباس

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

React Native وExpo بيخدموا واجهة الموبايل والتنقل. Kotlin وJava بيتعاملوا مع الأجزاء الخاصة بأندرويد. خدمات السكانر والطابعة بتنظّم العلاقة بينهم، بحيث شاشة الشحنة تطلب الوظيفة المطلوبة من خلال واجهة تطبيق مفهومة.

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

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

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

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

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

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

الخريطة محتاجة تعرف النقطة دي عمرها قد إيه

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

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

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

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

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

ملف Excel دخل ومعاه شوية شخصيات إضافية

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

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

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

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

المعاملة الهندسية هنا إن ملف Excel يعتبر عملية بيانات كاملة ليها دورة حياة، مش مجرد زرار Upload. وده ظهر في الباك إند والواجهة مع بعض.

رسالة النجاح تستنى النتيجة

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

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

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

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

التقارير محتاجة العملة والفترة جنب الرقم

ترانزيتو فيه تقارير تشغيل وتحليلات، وتصدير 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التنقل بين شاشات وخطوات المهمة
Kotlin وJavaربط أندرويد بالسكانر والطابعة والموقع
Node.js وExpress 4 وTypeScript وZodمنطق الإجراءات والتحقق من البيانات
PostgreSQL وPrisma 6العلاقات بين الطلبات والمخزون والشنط وباقي السجلات
Redis وتخزين متوافق مع S3خدمات مساعدة وملفات وصور
Puppeteer وExcelJS وSharpتقارير ومستندات ومعالجة صور

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

رقم الختم عمل رحلة صغيرة جوه النظام

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

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

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

الداشبورد والخزنةالباك إند

بوابة العميلالباك إند

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

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

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

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

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

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

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

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

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

التخصيص لفالكون كان في تفاصيل التشغيل

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

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

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

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

ابعت لنا رحلة الشغل اللي محتاجة تتنظّم

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

اتكلم مع فريق سوفتوركس عن تفاصيل التشغيل عندك.

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

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

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

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

Softworks Studio