كشف تتبّع الأتمتة نوعين من المشكلات: عيوب تجعل رقماً خاطئاً أو تضيّع مالاً، ونقاط عمياء لا تُسجَّل فيها البيانات التي يحتاجها القرار. كلاهما مرتّب هنا بالترتيب الذي نوصي بإصلاحه.
العيوب
1. المهام اليومية لا تعمل إلا إذا فتح أحد مكتب الاستقبال
تُستدعى runDailyRoutines من مكان واحد: عرض صفحة /dashboard/desk. والصفحة الرئيسية للكاشير هي /dashboard/cafe، فإن مرّ يوم دون أن يفتح أحد مكتب الاستقبال، لا تصدر فواتير الإيجار، وتبقى الزيارات المنسية مفتوحة، ولا تكتمل الحجوزات المنتهية.
| الأثر | الإيجار يُفوتَر متأخراً، وأرقام الإشغال والحجوزات خاطئة حتى يزور أحد الصفحة |
| الإصلاح | أضف مشغّل cron في Cloudflare (triggers.crons في wrangler.jsonc) يشغّل المهام الساعة 06:00 بتوقيت بورتسودان. عامل OpenNext يعالج fetch فقط، فيلزم مدخل مخصص رقيق يضيف معالج scheduled. أبقِ استدعاء الصفحة احتياطاً — فالمهمة تحجز اليوم أصلاً، فلا تعمل مرتين |
| الجهد | صغير إلى متوسط |
2. حجوزات التذاكر المنتهية تبقى معلّقة إلى الأبد
حين ينتهي حجز التذكرة تتحرر المقاعد عند القراءة، لكن الطلب يبقى PENDING ويظهر في عدد المعلّق في الاستقبال. لا شيء يلغيه أبداً.
| الأثر | عدد المعلّق في الاستقبال يزداد فقط؛ ولا يمكن قراءة تحويل الدفع من الحالة |
| الإصلاح | في المهام اليومية: PENDING بلا رقم بنكك وholdUntil < now ← CANCELLED مع cancelledAt والسبب "انتهى الحجز" — القاعدة نفسها التي تتبعها الحجوزات |
| الجهد | صغير |
3. تقفيل الصندوق يُسقط تسويات حسابات المقهى
تسوية الحساب تُبقي طريقة الدفع TAB. وتقفيل صندوق الاستقبال (cashUp في src/lib/desk/reports.ts) لا يعدّ من مدفوعات المقهى إلا CASH أو BANKAK. أما تقرير مبيعات المقهى فيضيف التسويات، فيختلف التقريران.
| الأثر | تقفيل آخر اليوم ينقص بقيمة كل حساب سُوّي في ذلك اليوم |
| الإصلاح | أضف مجاميع CafeTabSettlement حسب طريقة الدفع إلى التقفيل |
| الجهد | صغير |
4. الموقع العام ولوحة الإدارة يعدّان مقاعد الفعالية بطريقتين
النموذج العام يعدّ صفوف REGISTERED مقابل السعة. ولوحة الإدارة تعدّ REGISTERED وATTENDED. تسجيل حضور شخص يحرر مقعداً في الموقع العام.
| الأثر | قد تمتلئ الفعالية فوق سعتها بعد بدء تسجيل الحضور |
| الإصلاح | عُدّ الحالتين في registerForEvent واستعلامات الفعاليات العامة |
| الجهد | صغير |
5. "ممتلئة" تظهر متأخرة حتى خمس دقائق
صفحات الفعاليات مخزنة مؤقتاً 300 ثانية، ولا تسجيل جديد ولا تغيير حالة من الإدارة يحدّثها.
| الأثر | يرى الزوار مقاعد نفدت فينتهون في قائمة الانتظار |
| الإصلاح | revalidatePath لصفحة الفعالية بعد كل تسجيل وكل تغيير حالة |
| الجهد | صغير |
6. لا أحد يُرقّى من قائمة الانتظار
حين يُلغى تسجيل يبقى المقعد فارغاً. قائمة الانتظار لا تُقرأ إلا يدوياً.
| الأثر | مقاعد فارغة في فعاليات لها قائمة انتظار |
| الإصلاح | عند الإلغاء، رقِّ أقدم صف WAITLISTED واعرض للموظف رابط واتساب لإبلاغه |
| الجهد | متوسط |
النقاط العمياء
أ. من أين يأتي الناس
لا شيء يسجّل كيف وصل الزائر: لا وسوم utm، ولا المُحيل، ولا "كيف سمعت عنا". وبدونه لا يمكن قياس أي قرار تسويقي.
- احفظ أول
utm_sourceوutm_mediumوutm_campaign(أو نطاق المُحيل) في ملف تعريف ارتباط داخلsrc/proxy.ts. - خزّنه كحقل
sourceعلىBookingRequestوTicketOrderوEventRegistrationوProgramApplicationوEnquiryوDeskCustomer. - أضف "كيف سمعت عنا؟" إلى نموذج العميل الجديد في الاستقبال، للزوار المباشرين.
- ضع وسماً على كل رابط ينشره سبيس:
?utm_source=facebook&utm_medium=post&utm_campaign=<event-slug>.
يفتح: الإيراد والتحويل حسب القناة — جوهر خطة النمو.
ب. متى حدثت كل خطوة
المقهى وحده يسجّل وقت كل تغيير. في غيره يضيع وقت الانتقال بمجرد أن يتغير الصف مرة أخرى.
| النموذج | الناقص | يفتح |
|---|---|---|
BookingRequest | confirmedAt، cancelledAt، completedAt | زمن التأكيد؛ وholdUntil يُمسح أيضاً عند التأكيد |
TicketOrder | submittedAt | الزمن من التحويل إلى التحقق |
EventRegistration | أي وقت تغيير | متى يُلغي الناس |
Enquiry | firstResponseAt، closedAt | زمن الرد — سرعة تحويل المهتم إلى عميل |
ProgramApplication | decidedAt | زمن المراجعة |
DeskCharge | paidAt | أيام تحصيل الإيجار |
أنظف إصلاح جدول أحداث لكل نطاق، كما يعمل CafeOrderEvent اليوم: صف لكل تغيير، مع من ومتى.
ج. ضغطات واتساب
كل مسار ينتهي برابط wa.me، ولا تُعدّ أي ضغطة. مرّر الروابط عبر مسار تحويل صغير (مثل /go/whatsapp?from=booking) يسجّل الضغطة ثم يحوّل إلى واتساب.
يفتح: كم شخصاً يختار واتساب بدل مسار الويب، وأي صفحة ترسلهم.
د. زيارات الموقع
لا توجد بيانات مشاهدات للصفحات، فرأس كل مسار مفقود. Cloudflare Web Analytics مجاني وبلا ملفات تعريف ارتباط، ولا يحتاج إلا وسم سكربت على موقع تخدمه Cloudflare أصلاً.
يفتح: التحويل من المشاهدات إلى الطلبات لكل صفحة.
هـ. فجوات أصغر
- سجل المهام اليومية:
routinesLogيُستبدل كل يوم. احفظ صفاً لكل تشغيل. - رفض الباب: مسح تذاكر غير مدفوعة أو مجهولة أو مستخدمة لا يُسجَّل.
- وقت النفاد: تعليم صنف في المقهى كنافد لا يحفظ تاريخاً، فلا يمكن تقدير المبيعات الضائعة.
- البوتات: ضربات حقل المصيدة وحدّ المعدل لا تُعدّ، فإساءة استخدام النماذج غير مرئية.
ترتيب العمل
| الترتيب | التغيير | لماذا أولاً |
|---|---|---|
| 1 | العيوب 1–3 | تجعل أرقام المال والإشغال اليوم خاطئة |
| 2 | النقطة العمياء أ (المصدر) | كل قرار نمو يحتاجها؛ والبيانات لا تتراكم إلا من يوم إطلاقها |
| 3 | العيوب 4–5 | تحمي تجربة الفعاليات مع نموها |
| 4 | النقطتان ب وج | مقاييس السرعة ومسار واتساب |
| 5 | النقطة د، والعيب 6، والفجوات الأصغر | تكمل الصورة |
في هذه الصفحة
العيوب1. المهام اليومية لا تعمل إلا إذا فتح أحد مكتب الاستقبال2. حجوزات التذاكر المنتهية تبقى معلّقة إلى الأبد3. تقفيل الصندوق يُسقط تسويات حسابات المقهى4. الموقع العام ولوحة الإدارة يعدّان مقاعد الفعالية بطريقتين5. "ممتلئة" تظهر متأخرة حتى خمس دقائق6. لا أحد يُرقّى من قائمة الانتظارالنقاط العمياءأ. من أين يأتي الناسب. متى حدثت كل خطوةج. ضغطات واتسابد. زيارات الموقعهـ. فجوات أصغرترتيب العمل