كل المشاريع/CHANDNI BANQUET HALL

نظرة عامة

النصف العام من الموقع يسوّق المكان: القاعات، والصور، ونموذج الاستفسار. أمّا النصف العامل فيبيعه.

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

وتضيف الخطوة الثانية أصناف القائمة بنودًا لكلٍّ منها كميّته، ويكون الإجمالي الجاري هو سعر ساعة القاعة عبر الفترات المشغولة زائدًا الطعام. وتكتب الخطوة الثالثة الحجز تحت معرّف UUID، وتضعه قيد الانتظار، وتأخذ عربونًا بنسبة 25% بالبطاقة. ويتبع الرصيد لاحقًا عبر رابط دفع يحمل صلاحيته الخاصّة.

وخلفه يعمل فريق المكان على لوحة إدارة إطار العمل نفسها — إحدى عشرة شاشة مسجّلة تغطّي الحجوزات والمدفوعات والقاعات والقوائم والصور والاستفسارات.

التحدي

المنتج الحقيقي لقاعة المناسبات هو غرفةٌ في تاريخ، وما يكلّفها المال هو حجز الغرفة مرّتين.

وإدارة ذلك بالهاتف والقلم تعني أن يحمل من يردّ على المكالمة دفتر المواعيد كلّه في رأسه: يقتبس سعرًا من قائمة أسعار، ويتذكّر أيّ الاستفسارات تحوّلت إلى عرابين، ويلاحق الرصيد قبل وصول المناسبة. وكلٌّ من ذلك موضعٌ يفترق فيه الدفتر عن الواقع.

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

فكان على النظام أن يجعل ذلك الفشل مستحيلًا بنيويًّا، مع بقائه بسيطًا بما يكفي ليُديره فريق صغير من مكتب خلفي لا يحتاج أحدٌ تدريبًا عليه.

تصميم النظام

كيف يعمل

01/04
01

السؤال عمّا بقي شاغرًا

الآليّة الوحيدة التي يقوم عليها النظام كلّه — الإتاحة سؤالٌ يُجاب من الحجوزات، لا رايةٌ تُقرأ من تقويم.

  1. 1يختار الزائر قاعةً وتاريخًا، فتنادي الصفحة مسار الإتاحة بهاتين القيمتين وحدهما
  2. 2يحمّل الخادم الحجوزات القائمة على تلك القاعة وذلك التاريخ وغير الملغاة
  3. 3يجمع الفترات التي تشغلها تلك الحجوزات، معاملًا حجز اليوم الكامل كشاغلٍ لها جميعًا
  4. 4يُعيد الفترات الثماني مقسومةً إلى متاحة ومشغولة، فتعرضها الصفحة قابلةً للاختيار أو لا
  5. 5ولأنّ الجواب مُشتقّ، يُحرّر الحجز الملغى فتراته لحظة إلغائه — دون كتابة أيّ شيء
  6. 6ولأنّ الفترة هويّة لا مدى زمني، تُقارَن الحجوزات بالانتماء لا بحساب التداخل
02

بناء حجز في ثلاث خطوات

صفحة واحدة، وثلاث مراحل، وبوّابة على كلٍّ منها — فلا يمكن تجميع حجز مستحيل.

  1. 1تأخذ الخطوة الأولى القاعة والتاريخ والفترات وعدد الضيوف ونوع المناسبة وبيانات التواصل، وتبقى مقفلة حتى تُشغَل فترة فعلًا
  2. 2تمتلئ لوحة القاعة من سجلّ المكان — السعة وسعر الساعة — ويبدأ ملخّص التسعير بالجمع مع تحديد الفترات
  3. 3تعرض الخطوة الثانية القائمة كمجموعة نماذج: أصناف كثيرة لكلٍّ كميّة، ويُسهم كلٌّ ببنده الخاص في الإجمالي
  4. 4تُعيد الخطوة الثالثة عرض الحجز كلّه للمراجعة وتأخذ الموافقة على الشروط
  5. 5وعند الإرسال يكتب الخادم الحجز بمعرّف UUID جديد، ويربط فتراته، ويكتب صفًّا لكلّ بند قائمة، ويضعه قيد الانتظار
  6. 6ويصل العميل إلى تأكيد مفهرس بذلك المعرّف، ويحمل المرجع نفسه كلّ بريد ودفعة تليان
03

العربون الآن والرصيد لاحقًا

يصل المال على مراحل، ويبقى السجلّ متماسكًا في كلّ نقطة بينها.

  1. 1يُقتبَس عربون 25% مباشرةً من إجمالي الحجز ويُؤخَذ بالبطاقة
  2. 2تُسجَّل العملية دفعةً قائمة بذاتها تحمل نوعًا — عربون أو رصيد أو دفعة كاملة — وحالة
  3. 3يرتفع المبلغ المدفوع على الحجز، ويُشتقّ الرصيد المتبقّي منه بدل تخزينه، فلا يمكن أن يختلفا
  4. 4ويخرج بريد التأكيد من قالب بعد كتابة الحجز، فيُكلّف فشل البريد الرسالة لا الحجز
  5. 5وللرصيد يُنشئ الفريق رابط دفع يحمل صلاحية، ويُرسَل بالبريد إلى العميل
  6. 6ويفحص فتحُ الرابط تلك الصلاحية أولًا، فيتوقّف الحجز المنقضي عن قبول الدفع بدل أن يأخذ المال بهدوء
04

كيف يُدير المكان دفتر مواعيده

جانب الفريق هو لوحة إدارة إطار العمل نفسها، عن قصد — إحدى عشرة شاشة بدل وحدة تحكّم لم يطلبها أحد.

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

أبرز الميزات

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

Outcomes

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

أعمال أخرى