دراسة حالة · البنية التحتية البرمجية

تطوير تطبيق صيانة وإصلاح دون استبدال نظام إدارة الموارد (ERP) القديم

تصميم وتطوير منظومة متكاملة من ثلاثة تطبيقات ويب تقدمية (PWA) وبوابة ربط بلغة PHP ملتفة حول نظام ERP قديم للمؤسسة, مما حافظ على استمرارية الأعمال, ومكّن التشغيل بدون اتصال بالإنترنت, ودمج بوابة دفع إلكتروني.

  • K عميل نشط شهرياً
  • % تخفيض تكلفة استقطاب العملاء (CAC)
  • % جاهزية واستقرار النظام
أولويات التصميم

أربعة مبادئ أساسية وجهت كافة قرارات البنية البرمجية والتنفيذ

01

استمرارية نظام ERP

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

02

اعتمادية العمليات الميدانية

تُحفظ الإجراءات محلياً أولاً, ثم تُتزامن بأمان بمجرد استعادة الاتصال بالإنترنت.

03

تدقيق وتتبع شامل (End-to-end)

سجلات تدقيق غير قابلة للتعديل لتحولات الحالات عبر أمر العمل, والإشعارات, والدفعات, وقيود الدفتر المحاسبي.

04

تحديث محكوم ومُدار

عقد ربط وصريح يعزل التطبيقات الحديثة عن تعقيدات هيكل البيانات القديم.

01

نظرة عامة

ثلاثة تطبيقات حديثة, بوابة ربط واحدة, ومصدر واحد للحقيقة

اعتمدت المنصة بنية طبقية (Layered Architecture) حيث يدير كل تطبيق PWA الصلاحيات الخاصة به, ونموذج البيانات المحلي, واستراتيجيات التخزين المؤقت, بينما يظل SQL Server المصدر المعتمد والوحيد للحقيقة للبيانات التشغيلية والمحاسبية.

تطبيق العملاء

C PWA

تجربة متكاملة للعميل من الحجز حتى الدفع, تتميز بتتبع موثوق للحالة في الوقت الفعلي ورسائل التحديثات.

  • مصادقة برقم الهاتف ورمز OTP
  • الحجز والتتبع وإعادة الجدولة
  • الفواتير والإيصالات والدفع عبر Paymob

تطبيق الفنيين

T دعم كامل للأوفلاين

تنفيذ ميداني مخصص للأجهزة المحمولة مع آليات واضحة لمزامنة البيانات وحل التعارضات.

  • تسجيل الملاحظات, والتقاط الصور, والقياسات
  • حجز قطع الغيار وتتبع استخدامها
  • التوقيع الإلكتروني للعميل وإثبات الإنجاز

بوابة الورشة

S Web / PWA

سير عمل موحد لاستلام الأجهزة, وتوزيع الإصلاحات, وإدارة المخزون, ومعالجة الاستثناءات.

  • تتبع العهدة وسجلات حالة الأجهزة
  • قوائم انتظار الفنيين واختبارات الإصلاح
  • صرف قطع الغيار والمرتجعات والبدائل
02

التحدي والحل

حدود الربط والتكامل لحماية منطق العمل القديم

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

بالإضافة إلى ذلك, تطلبت عمليات الفنيين الميدانيين أداءً سلسًا بدون انقطاع في البيئات ذات الاتصال الضعيف أو المنعدم بالإنترنت. وقد تحقق ذلك من خلال تصميم نموذج PWA يعمل بأسلوب Offline-First, حيث يتم حفظ البيانات محلياً وتزامن تلقائياً بمجرد استعادة الاتصال.

قرار معماري جوهري فصل استلام الأوامر عن تنفيذ معالجتها. لا تنتظر طلبات التطبيقات المحمولة أبداً المعاملات الثقيلة لقاعدة البيانات القديمة؛ حيث يمكن إعادة محاولة الأوامر بأمان وبشكل غير مكرر (Idempotent) دون تكرار صرف قطع الغيار أو الفواتير أو المدفوعات.

03

تطبيق PWA يعمل بأسلوب Offline-first

العمل بدون إنترنت كحالة أساسية وليس كاستثناء

تم تصميم تطبيق الفنيين ليعمل بسلاسة كاملة أثناء انقطاع الاتصال بالشبكة. يُمنح كل إجراء معرفاً فريداً UUID ويُكتب في IndexedDB قبل إرساله عبر الشبكة, حيث يظل في قائمة الانتظار لحين تأكيده باستجابة رسمية من الخادم.

محفوظ محلياً IndexedDB
بانتظار المزامنة قائمة الصادر (Outbox)
مؤكد من الخادم الحالة المعتمدة

تقسيم مستويات التخزين حسب الغرض

  • Cache Storage — واجهة التطبيق (App Shell), والأصول الثابتة, ومكونات الواجهة.
  • IndexedDB — المهام, وأوامر العمل, كتالوج قطع الغيار, المسودات, والتغييرات بانتظار الإرسال.
  • الذاكرة (Memory) — حالات العرض المؤقتة وبيانات الجلسات الحساسة غير المحفوظة.

مزامنة مستقلة وقابلة للتكرار

لا تعتمد سلامة البيانات فقط على المزامنة في الخلفية (Background Sync)؛ بل تتم عملية تحقق متعددة الأطراف عند بوابة الخلفية (Backend Gateway) للتحقق من أحداث الحالة الواردة واعتمادها.

تقليل بصمة البيانات على الجهاز

  • بيانات مسقطة ومخزنة بحجم أصغر
  • تنظيف وإزالة تلقائية عند انتهاء الصلاحية
  • رموز جلسات مرتبطة بالجهاز حصراً
  • حجب وتعمية تفاصيل المدفوعات
غلاف الأمر الأوفلاين (Offline Command)
  { "client_action_id": "60a9f923-7fac-4f70-84fe-2f6ea945ef1a", "aggregate_type": "work_order", "aggregate_id": "WO-18472", "operation": "record_part_usage", "expected_version": "0x000000000001A74B", "occurred_at": "2026-09-10T14:18:22Z", "payload": { "part_id": 381, "quantity": 1 } }  
04

Paymob + بوابة الرسائل SMS

سير عمل موثوق وآمن للعمليات المالية والإشعارات آمن ضد إعادة الإرسال

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

تقتصر استجابات التطبيقات على تقديم التغذية الراجعة للواجهة, بينما تُعتبر إشعارات الويب الموقعة رقمياً Webhooks التأكيد المعتمد لمعالجة عمليات الدفع.

  1. 1

    التحقق من الفاتورة

    التحقق من ملكية السجل, والمبالغ المستحقة, وتطابق العملة, وحالة الدفع مباشرة مع قاعدة بيانات SQL Server.

  2. 2

    بدء محاولة الدفع محلياً

    إنشاء مرجع تجاري فريد Merchant Reference ورمز الدفع الخاص بـ Paymob Checkout Token.

  3. 3

    المعالجة المعتمدة عبر Webhook

    التحقق من التوقيعات الرقمية HMAC, ومبالغ المعاملات, والعملات, مع منع تكرار المعالجة عبر التحقق من الـ Idempotency.

  4. 4

    تسوية الدفتر وإرسال الأحداث

    تحديث حالة الدفع, وتسوية الفاتورة, وإرسال أحداث Outbox ضمن معاملة واحدة موحدة في قاعدة البيانات.

قاعدة النزاهة المالية لا يمكن لرد إشعار الفشل المباشر والمتأخر (Late Failure Callback) إلغاء عملية دفع ناجحة ومقبولة ما لم يكن مصحوباً بحدث استرداد (Refund) أو عكس للعملية موثق ومصرح به.

05

النتائج

تحديث مسارات العمل الأساسية دون مخاطر إعادة بناء النظام بالكامل

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

  • إنشاء قناة تواصل مباشرة للعملاء لطلب إصلاح الأجهزة المنزلية, وتتبع تقدم العمليات في الوقت الفعلي, ومراجعة وفواتير الإصلاح ودفعها بشفافية.

  • تمهيد الطريق للانتقال التدريجي للميزات من نظام ERP القديم بمرور الوقت, مما يقلل من المخاطر التشغيلية المرتبطة بالاستبدال المباشر الشامل للأنظمة.

صفر توقف مجدول للخدمة

إطلاق تدريجي مع إمكانية التراجع الفوري عند الحاجة.

40%

انخفاض في وقت تحصيل وسداد الفواتير

40–65%

انخفاض في مكالمات الدعم المخصصة والاستفسار عن حالة الطلب

30%

انخفاض تكلفة استقطاب العملاء (CAC)

35%

زيادة القيمة الممتدة للعميل (CLV)

استقبل الأوامر بموثوقية, وطبقها دون تكرار (Idempotently), وقارنها بالحالة المعتمدة ورسّخها, واجعل كل تحول في الحالة قابلاً للرصد والملاحظة.

المبدأ المعماري الأساسي
06

رأي العميل

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

خالد علاء CTO . الدولية للخدمات
07

الأسئلة الشائعة

أسئلة مكررة

لماذا لم يكن استبدال نظام ERP كاملاً هو الخيار الموصى به؟
كان نظام ERP القديم يعمل بكفاءة تشغيلية ممتازة, محتفظاً بسنوات من قواعد وقوانين العمل المصقولة. أتاح دمج طبقة برمجية وسيطة حديثة سرعة أكبر في طرح المنتج في السوق ونقلاً تدريجياً للميزات, مع إزالة المخاطر التشغيلية المرتبطة بالانتقال الكامل والشامل لنظام جديد.
كيف يتم منع تكرار العمليات أثناء إعادة المزامنة بعد العودة للاتصال؟
تُمنح كل عملية يتم إجراؤها بدون اتصال معرّف UUID يُنشأ من جانب العميل قبل الحفظ المحلي. تعالج بوابة API الأوامر بأسلوب غير مكرر (Idempotently), مع تطبيق قيود صارمة على قاعدة البيانات لمنع أي تكرار في تعديلات أوامر العمل.
كيف يتم التحقق من سلامة ونزاهة عمليات الدفع الإلكتروني؟
يتم التحقق من حالة الدفع حصرياً عبر إشعارات الويب الموقعة رقمياً (Webhooks) من الخادم, مع مطابقة مبالغ المعاملات والمعرّفات المرجعية مباشرة مع سجلات طلبات الدفتر المحاسبي.
كيف ساهم تطبيق PWA للعملاء في خفض تكلفة استقطاب العملاء (CAC)؟
كان الاعتماد سابقاً على الإعلانات الخارجية عالية التكلفة لجلب العملاء. ساهم إطلاق تطبيق PWA للعملاء مع إدماج برامج الإحالة والولاء في خفض تكاليف الاستحواذ بشكل كبير. علاوة على ذلك, ارتفعت القيمة الممتدة للعميل (CLV) بأكثر من 30%, حيث سهّل تثبيت التطبيقات على الشاشة الرئيسية طلب صيانة الأجهزة المنزلية بانتظام.