تفاصيل العمل

1. نظرة عامة على المشروع (Project Overview)

يامي زاد (Yami Zad) هو تطبيق جوال متكامل وموجه للشركات والقطاعات التعليمية تم تصميمه لتحديث ورقمنة منظومة اشتراكات وجبات الغداء المدرسية وإدارة التوصيل. يعمل التطبيق كمنصة ثنائية الأطراف تربط بين أولياء الأمور (المشتركين) وإدارات المدارس ومشرفي التوصيل (مساعدي الإدارة - Sub-Admins)، مما يضمن تنسيقًا سلسًا لعمليات التوصيل وإدارة الاحتياجات الغذائية وتتبع الاشتراكات بشكل فوري.

المشكلة التجارية (The Business Problem)

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

الحل (The Solution)

يقدم يامي زاد تجربة تطبيق جوال تفاعلية وموطنة بالكامل (باللغتين العربية والإنجليزية) عبر:

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

بوابة المدرسة: تمكن إدارات المدارس والمشرفين من متابعة شريحة المشتركين وتتبع حالة التوصيل لحظة بلحظة، وتأكيد تسليم الوجبات، ومعالجة الطلبات محليًا تحت مظلة أمنية صارمة تضمن خصوصية كل مدرسة. 2. الهيكلية المعمارية وتصميم النظام (Technical Architecture)

تم بناء تطبيق يامي زاد باتباع مبادئ البنية النظيفة (Clean Architecture)، مما يضمن فصلاً تامًا للمسؤوليات عبر ثلاث طبقات .

3. أبرز الميزات التي تم تنفيذها

أ. وحدة الجدولة والاشتراكات الديناميكية

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

قوانين التحقق الذكية (Validation Rules): منع إلغاء أو استبعاد وجبة اليوم الحالي أو اليوم التالي نظرًا لبدء إعدادها في المطبخ، مع السماح بتعديل الوجبات المستقبلية وطلب استبدالها.

ب. نظام صلاحيات متطور وصارم مبني على الأدوار (RBAC)

استخراج صلاحيات التوكن (JWT Claims): عند تسجيل دخول الموظف، يحلل التطبيق حقول التوكن مثل subAdminPermissions و subAdminSchools لتفعيل الصفحات المسموحة وتصفية البيانات المعروضة بشكل فوري.

حظر البيانات متعدد المدارس (Multi-Tenant Guarding): يتم قفل واجهات مساعد الإدارة لعرض بيانات المدارس المحددة له فقط، مما يمنع تسريب البيانات بين المدارس.

ج. لوحة تحكم عمليات التوصيل المدرسي

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

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

د. التدويل والخطوط العربية المخصصة

محرك اللغتين: دعم كامل للغات اليمين-إلى-اليسار (RTL) واليسار-إلى-اليمين (LTR) باستخدام easy_localization.

هوية بصرية فاخرة: دمج عائلة خطوط ثمانية (Thmanyah) المخصصة بجميع أوزانها (Light, Regular, Medium, Bold, Black) لدعم الهوية البصرية والتغلب على مشاكل المحاذاة الافتراضية للنصوص العربية

4. الدروس المستفادة والإنجازات الهندسية

من منظور مطور أول (Senior Developer)، ساهم بناء وصقل تطبيق يامي زاد في تعميق الخبرة بالعديد من التحديات الهندسية المتقدمة:

1. معالجة محاذاة الخطوط العربية المخصصة وقياساتها

التحدي: تختلف قياسات الخطوط العربية الفاخرة (مثل خط ثمانية) بشكل كبير في الارتفاعات (Baseline, Ascender, Descender) مقارنة بالخطوط اللاتينية القياسية، مما تسبب بحدوث قص وتشويه للنصوص عند التبديل بين اللغتين.

الحل: تم إعداد نظام قوالب سمات مخزنة مؤقتًا تفصل بين خصائص نصوص اللغتين، مع توحيد مقاسات الخطوط باستخدام مقاييس متجاوبة وتحديد قيم الارتفاع الصارمة و strutStyle لضمان محاذاة مثالية دون إزاحة التنسيق.

2. ضمان استقرار واستقبال الإشعارات الفورية (FCM / APNS)

التحدي: حدوث مشاكل في عدم ظهور لوحة الإشعار أو كتم الصوت في نظام iOS بسبب غياب مفتاح alert في إعدادات APNS من السيرفر، ومشاكل قنوات الإشعارات في أندرويد (أندرويد 8 فما فوق).

الحل: قمنا بتنظيم تهيئة قنوات الإشعار في التطبيق واستقبال الإشارات في كافة مستويات تشغيل التطبيق (Foreground/Background/Terminated)، مع بناء آلية استماع تحدث شاشات التطبيق فورًا بمجرد معالجة طلب استبدال الوجبة من قبل الإدارة دون حاجة المستخدم لتحديث الصفحة يدويًا.

3. تقليل استهلاك البيانات وإتاحة العمل بدون اتصال (Offline Cache)

التحدي: جلب القوائم الطويلة للمشتركين والوجبات بشكل متكرر يستهلك طاقة البطارية وحزم بيانات المستخدم.

الحل: قمنا ببناء نظام مستودعات وسيط يدعم التخزين المؤقت للبيانات باستخدام shared_preferences والتخزين الآمن للتوكنات، مع تفعيل استراتيجية (Offline-First) لعرض البيانات القديمة فورًا والتحقق من الشبكة وتحديث البيانات بالخلفية لتقديم تجربة مستخدم سريعة وخالية من التقطيع.

4. التحقق الصارم من صحة النماذج البرمجية في طبقة النطاق (Domain Layer)

التحدي: تطلب تعديل نموذج "الطفل" ليصبح نموذج "مشترك عام" يدعم المعلمين والطلاب تطبيق شروط عمل معقدة (مثل إلزامية الصف الدراسي للطالب وحظره للمعلم).

الحل: تم بناء وتطبيق هذه القيود داخل كائنات النطاق (Domain Entities) باستخدام هياكل تحقق مسبقة في المصانع البرمجية للنموذج (Factory Constructors)، مما يمنع إرسال أي حالة غير صحيحة أو غير متسقة برمجياً إلى الخادم.