⚡
التحديات
كان تصميم محرك مطابقة ذكي بين العملاء والعقارات بالاعتماد على عشرات المعايير المتخصصة، وضمان سلامة التزامن عند إنشاء الأكواد الفريدة، إلى جانب تصميم بنية متعددة الأدوار مع مستويات صلاحيات ديناميكية، من أبرز التحديات في هذا المشروع.
كما تطلّبت نمذجة المجال العقاري المعقد، بما يشمل الاستخدام القانوني للعقار، وحصص الملكية، واتجاه العقار، وبيانات سند الملكية، إلى جانب منع البيانات المكررة باستخدام خوارزميات قياس التشابه، وترحيل البيانات الحالية دون فقدان المعلومات، مستوى عالياً من الدقة.
وكان تصميم واجهة مستخدم باللغة الفارسية وباتجاه من اليمين إلى اليسار، مع نماذج شاملة وخريطة تفاعلية وإمكانية رفع الصور ومقاطع الفيديو في الوقت نفسه، من التحديات المهمة في تجربة المستخدم.
ومن التحديات الأخرى تحسين استعلامات قاعدة البيانات لتجنب مشكلات N+1، وإدارة دورة حياة العميل، وتنفيذ آلية قفل تلقائي للعقار أثناء مرحلة التفاوض.
وفي النهاية، وبالاستفادة من الإمكانات المتقدمة لإطار Django، والمعاملات الذرية (Atomic Transactions)، والتصميم الدقيق لنماذج البيانات، تم بناء نظام شامل ومستقر يلبي احتياجات مكاتب ووكالات العقارات الحديثة.
💡
الحلول
تم تصميم خوارزمية تقييم موزونة لمحرك المطابقة الذكي، بحيث يمتلك كل معيار، مثل استخدام العقار، والاتجاه، وحالة سند الملكية، ونسبة الملكية، والميزانية وغيرها، وزناً محدداً. ويتم احتساب النتيجة النهائية باستخدام تقنيات التطبيع (Normalization). ولتحسين الأداء، تم استخدام `select_related` و`prefetch_related` وإجراء بعض العمليات الحسابية في الذاكرة.
ولمنع حدوث حالات التنافس (Race Conditions) أثناء إنشاء الأكواد الفريدة، تم استخدام `select_for_update()` والمعاملات الذرية على مستوى قاعدة البيانات، مما يضمن حصول كل سجل على كود فريد دون حدوث أي تعارض.
تمت نمذجة المجال العقاري من خلال بنية معيارية تتضمن نماذج متخصصة لاستخدام العقار، وسندات الملكية، والاتجاه، وحالة الوحدة. ولمنع إنشاء سجلات مكررة، تم تنفيذ خوارزمية لمطابقة التشابه معياراً بمعيار، مع إمكانية ضبط عتبات التشابه حسب الحاجة.
تم ترحيل البيانات الحالية باستخدام عمليات ترحيل تدريجية (Staged Migrations) من خلال `RunPython`، مع إدارة دقيقة لقيود `null` و`unique` لضمان عدم فقدان أي بيانات.
تم تنفيذ واجهة مستخدم باللغة الفارسية وباتجاه من اليمين إلى اليسار (RTL) باستخدام Bootstrap، مع تنسيق فوري للأرقام، والتقويم الفارسي، وخرائط تفاعلية باستخدام Leaflet، ورفع الصور ومقاطع الفيديو عبر AJAX مع معاينة مباشرة.
ولتحسين الأداء، تم تطبيق الفهرسة المناسبة لقاعدة البيانات، وتقسيم النتائج إلى صفحات (Pagination)، ومعالجة مشكلات N+1 باستخدام `select_related` و`prefetch_related`. كما تمت إدارة دورة حياة العميل وآلية القفل التلقائي للعقار أثناء مرحلة التفاوض باستخدام إشارات Django (`post_save`).
وفي النهاية، وبالاعتماد على الإمكانات المتقدمة لإطار Django، والمعاملات الذرية، والبنية المعيارية، تم بناء نظام شامل ومستقر وجاهز للاستخدام في بيئة الإنتاج، ومصمم لتلبية احتياجات مكاتب ووكالات العقارات الحديثة.
📚
الإنجازات
تم بناء نظام شامل ومتكامل لإدارة مكاتب ووكالات العقارات بشكل كامل، بدءاً من تسجيل العملاء والعقارات ووصولاً إلى إدارة العقود، ضمن منصة موحدة ومتكاملة.
تم تنفيذ محرك مطابقة ذكي (AI Matching) بنجاح، يعتمد على نظام تقييم موزون يستند إلى عشرات المعايير المتخصصة، مما يجعل عملية اقتراح العقارات للعملاء أكثر دقة وسرعة واعتماداً على البيانات.
تم تصميم بنية متعددة الأدوار مع مستويات صلاحيات ديناميكية للمدير، وموظفي مركز الاتصال، والمشرفين، والمستشارين العقاريين، والعملاء، بما يتوافق مع الهيكل التنظيمي الفعلي لمكاتب العقارات.
تم تنفيذ إدارة متكاملة لدورة حياة العميل، بدءاً من الاتصال الأول وحتى إتمام العقد، مع دعم المواعيد النهائية والتنبيهات وتقارير الأداء.
تم تطوير لوحات معلومات تحليلية ومؤشرات أداء رئيسية (KPI) لتقييم أداء المستشارين العقاريين، ومعدلات التحويل، ومعدلات المتابعة، ومصادر استقطاب العملاء.
تم تنفيذ واجهة مستخدم كاملة باللغة الفارسية وباتجاه من اليمين إلى اليسار (RTL)، مع نماذج شاملة، وخرائط تفاعلية، وإمكانية رفع الصور ومقاطع الفيديو في الوقت نفسه.
تم تحسين أداء النظام باستخدام فهرسة قاعدة البيانات، و`select_related`، و`prefetch_related`، وتقسيم النتائج إلى صفحات (Pagination)، بما يتيح دعم أحجام كبيرة من البيانات.
تم منع إنشاء السجلات المكررة باستخدام خوارزميات مطابقة التشابه، كما تم ضمان سلامة التزامن باستخدام المعاملات الذرية و`select_for_update`.
وفي النهاية، تم تقديم منتج برمجي جاهز للاستخدام في بيئة الإنتاج، يلبي المعايير التقنية ومعايير تجربة المستخدم المتوقعة من أنظمة CRM/ERP العقارية الحديثة.
🔧
النقاط الفنية البارزة
تم استخدام بنية Django معيارية (Modular Architecture) مع فصل التطبيقات إلى وحدات مستقلة مثل (`estate` و`case_management` و`account`) بهدف تحسين قابلية الصيانة والتوسع والتطوير.
تم تنفيذ محرك المطابقة (Match Engine) باستخدام خوارزمية تقييم موزونة، مع تطبيع النتائج وتخزين التفاصيل الكاملة لنتائج المطابقة داخل حقل `JSONField`.
تم استخدام `select_for_update()` و`transaction.atomic()` لمنع حالات التنافس (Race Conditions) أثناء إنشاء الأكواد الفريدة المتسلسلة.
تم تحسين استعلامات قاعدة البيانات باستخدام `select_related` و`prefetch_related` و`distinct()`، بالإضافة إلى إنشاء Indexes على الحقول الرئيسية لتجنب مشكلات N+1 وتحسين الأداء العام للنظام.
تم تصميم نماذج متخصصة للمجال العقاري باستخدام `TextChoices` و`validators` وعلاقات Many-to-Many (M2M) منظمة، مما يوفر مرونة عالية في نمذجة البيانات.
تم تنفيذ إشارات Django (`pre_save` و`post_save`) لإدارة دورة حياة عملية العميل بشكل تلقائي، وقفل العقار أثناء مرحلة التفاوض، وتسجيل سجلات الأنشطة.
تم تطوير نظام مخصص للمصادقة وإدارة الصلاحيات باستخدام نموذج `User` مخصص، وأدوار ديناميكية (`Role` و`UserRole`)، وصلاحيات قائمة على الـ Views من خلال `views_permissions`.
تم تنفيذ نظام لاكتشاف البيانات المكررة (Duplicate Detection) باستخدام خوارزمية لمطابقة التشابه معياراً بمعيار، مع تخزين تفاصيل نتائج المطابقة داخل `JSONField`.
تم تصميم واجهات API بأسلوب REST باستخدام `JsonResponse` للتواصل عبر AJAX بين الواجهة الأمامية والخلفية، بما يشمل المطابقة، وإدارة الصور، وتغيير الحالات، وعمليات البحث.
تم تنفيذ واجهة مستخدم كاملة باللغة الفارسية وباتجاه من اليمين إلى اليسار (RTL) باستخدام Bootstrap 5 وLeaflet.js، مع تنسيق فوري للأرقام وإمكانية رفع الصور ومقاطع الفيديو عبر AJAX.
تم استخدام عمليات ترحيل تدريجية للبيانات (Staged Migrations) باستخدام `RunPython`، مع إدارة دقيقة لقيود `null` و`unique` بهدف نقل البيانات الموجودة دون فقدان المعلومات.
تم تصميم نظام لتسجيل عمليات وفعاليات المعالجة (`ProcessLog`) ونظام للملاحظات (`Note`) بهدف توفير تتبع شامل لجميع التفاعلات المتعلقة بالعملاء والعقارات.
تم تنفيذ نظام متعدد المستويات للتحكم في الوصول إلى الصور العقارية السرية (`Showcase Image`)، مع التحقق من الصلاحيات على مستوى الـ View والقالب (Template) على حد سواء.
🏗️
الهندسة المعمارية
تم بناء المشروع بالاعتماد على بنية **MVT (Model-View-Template)** الخاصة بإطار Django، وتم تنظيمه ضمن عدة تطبيقات مستقلة: `estate` لإدارة العقارات والعملاء، و`case_management` لإدارة عمليات العميل ودورة حياته، و`account` لإدارة المستخدمين والأدوار.
**طبقة البيانات (Models):** تتضمن نماذج أساسية مجردة مثل `TimeStampedModel` و`SoftDeleteModel` و`UUIDModel`، بالإضافة إلى نماذج متخصصة في المجال العقاري مثل `Customer` و`Property` و`Match` و`Requirement` و`UsageType` و`DocumentType` وغيرها. وتم تصميم العلاقات باستخدام `ForeignKey` و`ManyToManyField` واستراتيجيات `PROTECT` و`SET_NULL`.
**طبقة منطق الأعمال (Views & Utils):** تتضمن Views من نوع CBV وFBV لتنفيذ عمليات CRUD، بالإضافة إلى وحدات متخصصة مثل `MatchCalculator` و`MatchManager` لحساب درجات المطابقة، ووحدة `views_permissions` للتحكم في الصلاحيات.
**طبقة العرض (Templates & Frontend):** تعتمد على Django Templates مع Bootstrap 5، وواجهة مستخدم كاملة باتجاه من اليمين إلى اليسار (RTL)، واستخدام Leaflet.js للخرائط التفاعلية، بالإضافة إلى JavaScript للتحقق من البيانات وتنسيق الأرقام والتواصل عبر AJAX مع الواجهة الخلفية.
**Signals:** تم استخدام إشارات Django لإدارة الأحداث تلقائياً، مثل تسجيل الأنشطة، وقفل العقار أثناء مرحلة التفاوض، وتحديد المواعيد النهائية لعمليات العملاء.
**نظام المصادقة والتفويض:** يعتمد على نموذج مستخدم مخصص، وأدوار ديناميكية (`Role` و`UserRole`)، وآلية `views_permissions` للتحكم الدقيق في الوصول إلى الـ Views وعناصر واجهة المستخدم.
**قاعدة البيانات:** PostgreSQL مع إنشاء فهارس مناسبة على الحقول كثيرة الاستخدام مثل `status` و`display_code` و`city` و`expert`، بالإضافة إلى استخدام المعاملات الذرية للحفاظ على تكامل البيانات.
**محرك المطابقة المعياري (Modular Match Engine):** تم فصل منطق حساب درجة المطابقة (`MatchCalculator`) عن منطق إدارة وتخزين النتائج (`MatchManager`) بهدف تحسين قابلية الاختبار والصيانة والتوسع.
**واجهات API والاتصالات:** تم استخدام `JsonResponse` لإرجاع استجابات AJAX، بالإضافة إلى تنفيذ واجهات API متخصصة للبحث، والمطابقة بين العملاء والعقارات، وإدارة الصور، واسترجاع البيانات المرتبطة بالموقع الجغرافي.
📐
نطاق المشروع
تم تنظيم المشروع ضمن **5 تطبيقات Django مستقلة** (`estate`، `case_management`، `account`).
تم تصميم وتنفيذ أكثر من **30 نموذجًا للبيانات (Data Models)**، تشمل النماذج الأساسية، والمواقع، والعملاء، والعقارات، والمطابقة، والعمليات، والملاحظات، بالإضافة إلى نماذج متخصصة ضمن مجال العقارات.
تم تنفيذ أكثر من **50 View** تشمل عمليات CRUD متكاملة، وواجهات AJAX، وإعداد التقارير، والتحكم في صلاحيات الوصول.
تم تطوير أكثر من **50 قالب HTML** بتصميم فارسي متكامل ودعم كامل لاتجاه الكتابة من اليمين إلى اليسار (RTL)، لمختلف الصفحات مثل القوائم، والنماذج، وصفحات التفاصيل، ولوحات المعلومات، وواجهات البحث.
تم تصميم أكثر من **100 حقل بيانات متخصص** ضمن النماذج الأساسية (Customer وProperty)، بما يوفر تغطية شاملة لمتطلبات مجال العقارات في إيران.
يتميز **محرك المطابقة الذكي (AI Matching Engine)** بالقدرة على تقييم مئات العملاء مقابل آلاف العقارات في الوقت نفسه، مع احتساب درجات المطابقة بناءً على أكثر من **20 معيارًا متخصصًا**.
تم تطوير **نظام متعدد الأدوار (Multi-Role System)** يدعم 5 أدوار رئيسية: المدير، وموظف مركز الاتصال، والمشرف، والمستشار العقاري، والعميل، مع مستويات وصول ديناميكية.
تم تنفيذ **دورة حياة كاملة للعميل** بدءًا من الاتصال الأولي وحتى توقيع العقد، وتشمل أكثر من **10 حالات إجرائية** مع مواعيد نهائية زمنية وتنبيهات تلقائية.
يتضمن **نظام التقارير ومؤشرات الأداء الرئيسية (KPI)** أكثر من **15 مؤشرًا تحليليًا** لتقييم أداء المستشارين، ومعدلات التحويل، ومصادر استقطاب العملاء.
تم تطوير المشروع بالكامل باستخدام **آلاف الأسطر من أكواد Python وHTML وCSS وJavaScript**، وأصبح جاهزًا للاستخدام في بيئة تشغيل حقيقية داخل مكتب عقارات حديث.