القصة
نظام ERP كامل لنادٍ رياضي واجتماعي، مكتوب على إطار عمل PHP بنيته من الصفر، له Router ومحرك قوالب وQuery Builder وEvent Bus خاصة به. يغطي العضويات بالأزواج والأبناء، والاشتراكات والغرامات، والأكاديميات والحجوزات، والخزينة، والمحاسبة بالقيد المزدوج، وشؤون الموظفين والرواتب، والمشتريات والمخازن.
انتقل من أول commit إلى دخول الموظفين على نسخة الإنتاج في خمسة أشهر ونصف. موقع النادي وبوابة الأعضاء وتطبيق الأعضاء تعمل كلها على نفس الكود ونفس قاعدة البيانات.
العقبات التي تجاوزتها
- محاسبة تقيّد نفسها: 33 حدثًا في النظام (مدفوعات ومبيعات ورواتب وغرامات وأقساط ومشتريات وتحويلات) يكتب كل منها قيدًا متوازنًا تلقائيًا، وفحص للتغطية يكشف أي مستند بلا قيد.
- Audit Trail لا يقبل العبث: كل تعديل محفوظ بقيمته قبل وبعد، وكل سطر يحمل HMAC للسطر الذي قبله، فأي تعديل أو حذف في التاريخ يكسر السلسلة بشكل ظاهر.
- أرقام عضوية لها ذاكرة: أعاد النادي ترقيم أعضائه في 2026، فالرقم الواحد قد يكون لعضو اليوم ولعضو آخر بالأمس، وكل بحث يجيب عن الحالتين.
- نقلت تاريخ النادي من ملفات Excel، بمدفوعات تعود إلى 2006، إلى الإنتاج عبر مسار استخراج ومطابقة وتحقق وتقرير، مع نسخة احتياطية كاملة قبل كل خطوة.
- انضباط في الخزينة: كل دفعة تمر بجلسة كاشير، والمرتجعات والتحويلات تنتظر موافقة ثانية، وللشيكات دورة حياة خاصة بها.
- اختُبر بخمسين مستخدمًا مسجّلًا في الوقت نفسه بلا أي خطأ. النسخ الاحتياطية مشفّرة، وتغيير بايت واحد يجعل الاسترجاع يرفض.















