نظرة عامة

TourAxis سوق سياحي يربط السيّاح الذين يخطّطون لرحلاتهم في مدن الوجهة بثلاثة أنواع من المزوّدين — المرشدين ومديري الفنادق ومشغّلي المركبات — يشرف عليهم جميعًا نموذج حوكمة إدارية من ثلاث طبقات (من المنصّة إلى الدولة إلى المدينة). وهو مبني كتطبيقين يُنشران باستقلال: واجهة برمجية REST بـ Django، وتطبيق أحادي الصفحة بـ React، يسندهما مجال من 29 نموذجًا وأكثر من 100 نقطة وصول تغطّي قوائم الكتالوج، وخطط الرحلات، والحجوزات، وسجلّ المدفوعات والمستحقّات، والتقييمات، والإشعارات، والتحليلات، والتتبّع الحيّ عبر GPS. وتتشارك سبعة أدوار متمايزة منصّة واحدة: ثلاث طبقات حوكمة، وثلاثة أنواع مزوّدين، والسائح الافتراضي.

التحدي

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

تصميم النظام

كيف يعمل

01/04
01

تأهيل المزوّدين واعتماد الكتالوج

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

  1. 1يسجّل المزوّد نفسه بدور من الأدوار المسموح بها للتسجيل الذاتي
  2. 2ينشئ المزوّد قائمة مرشد أو فندق أو مركبة، تُنشأ بحالة قيد الانتظار ويملكها المُستدعي
  3. 3وما دامت قيد الانتظار، تبقى القائمة مرئيّة لمالكها وحده ومستبعَدة من الاستعلامات العامة
  4. 4يعتمدها مسؤول ضمن النطاق (اعتماد قابل للتكرار الآمن) أو يرفضها (مع سبب إلزامي)، ويُخطَر المالك
  5. 5يفحص مسار تحقّق KYC مستقل وثائق المزوّد بمعزل عن الاعتماد
02

تخطيط الرحلة ودورة حياة الحجز

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

  1. 1ينشئ السائح خطة رحلة لمدينة واحدة، بعملة للقراءة فقط مُشتقّة من الدولة
  2. 2تُستبدل محطّات المسار ضمن معاملة واحدة، ويُعاد احتساب الإجمالي التقديري الحيّ
  3. 3تُنشأ حجوزات المرشدين والفنادق والمركبات بحالة REQUESTED، محميّة بفحوص التوفّر وفحوص التداخل تحت قفل على مستوى الصف
  4. 4يقبل المزوّدون أو يرفضون من صناديق وارد محكومة بالأدوار، مع إعادة التحقّق من الملكية تحت قفل
  5. 5تُسلسِل إجراءات الإكمال والإلغاء من المالك حالات الحجوزات عبر مساعد انتقالات واحد مُقفَل
03

دفع مُسعَّر على الخادم ومستحقّات المزوّدين

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

  1. 1تتحقّق عملية الدفع من أن المُستدعي هو مسافر الخطة أو مسؤول
  2. 2يُعاد تسعير الخطة على الخادم ويُتجاهل أي مبلغ يرسله العميل
  3. 3تُشتقّ بنود الدفع، وتُحتسب رسوم منصّة بنسبة 10%، ويُحصَّل المبلغ عبر بوّابة دفع قابلة للاستبدال
  4. 4يُنشأ استحقاق لكل حجز مزوّد نشِط، مربوط بحجزه الأصلي ومقسوم إلى إجمالي وصافٍ
  5. 5يُرسل إشعار إيصال وبريد إلكتروني بأفضل جهد ممكن ودون إفشال العملية عند التعثّر؛ ويطالع الدافع والمزوّد كلٌّ سجلّه هو
04

التتبّع الحيّ للرحلة

يبثّ كل من يملك صلاحية عرض خطة نشِطة إشارات GPS تُرسم على الخريطة، ويُستعلم عنها باستمرار ما دامت الرحلة جارية.

  1. 1يرسل مطالعو الخطة (المالك، والمرشد المتعاقَد معه، وأعضاء المجموعة، والمسؤولون) إشارات GPS إلى نقطة وصول التتبّع
  2. 2يُثبَّت المُبلِّغ على المستخدم المُصادَق عليه، ويُضبط الطابع الزمني افتراضيًا على الخادم
  3. 3يُتاح آخر موقع والمسار المرتّب كاملًا لكل خطة، مُفهرسًا لقراءات سريعة تبدأ بالأحدث
  4. 4تستعلم الواجهة الأمامية عن آخر موقع وعن المسار كل 15 ثانية تقريبًا ما دامت الخطة نشِطة

أبرز الميزات

  • نموذج بسبعة أدوار (3 طبقات حوكمة، و3 أنواع مزوّدين، والسائح) بمطالبات أدوار غير قابلة للتعديل تُعاد قراءتها من قاعدة البيانات
  • محرّك تفويض جغرافي مركزي يعمل بمبدأ الفشل المغلق ويُعاد استخدامه في تطبيقات النظام الخلفي الأحد عشر جميعها
  • سير عمل لاعتماد الكتالوج، إضافةً إلى مسار تحقّق KYC مستقل للمزوّدين
  • مخطّط رحلات بآلة حالة من DRAFT إلى COMPLETED، مع أعلام دقيقة لتفويض المرشدين
  • فحوص مخزون تمنع الحجز المزدوج (أيام حظر المرشدين، وحجب غرف الفنادق، وتداخل مواعيد المركبات) تحت أقفال على مستوى الصف
  • عملية دفع مرجعيّة على الخادم برسوم منصّة 10%، وسجلّ مستحقّات المزوّدين، وبوّابة دفع قابلة للاستبدال
  • تقييمات متعدّدة الأشكال مشروطة باكتمال الرحلة، تغذّي ذاكرة تقييمات غير مطبَّعة، مع إشراف إداري
  • طبقة إشعارات تعمل بمبدأ الفشل الليّن (تغذية داخل التطبيق + بريد إلكتروني للمعاملات) وتتبّع حيّ للرحلات عبر GPS

Outcomes

  • نواة تفويض واحدة تعمل بمبدأ الفشل المغلق تجعل حوكمة المسؤولين متّسقة عبر 11 تطبيقًا بدلًا من تنفيذها في كل عرض على حدة، فترفض ثغرات IDOR والوصول العابر للنطاقات الجغرافية
  • إعادة التسعير على الخادم مع اقتسام الرسوم وربط المستحقّات المصنَّفة تُبقي مسار المال مرجعيًّا؛ وتجريد بوّابة الدفع يتيح إدخال معالج دفع حقيقي دون أي تغيير في العروض أو النماذج
  • قيود التواريخ على مستوى قاعدة البيانات، ومراجع المدن المحميّة، والانتقالات المُقفَلة على مستوى الصف، وتقريب المبالغ بأسلوب half-up، تدفع بالصحّة إلى داخل قاعدة البيانات وآلة الحالة
  • مجال من 29 نموذجًا مُعاد تحليله عبر خلطات (mixins) مجرّدة مشتركة يُبقي المخطّط بلا تكرار ومنطق الاعتماد والتقييم في مسار واحد

أعمال أخرى