Files
tripz-llc/docs/27-feature-catalog.md
T

13 KiB
Raw Blame History

27 — كتالوج الميزات (قائمة المالك 2026-07-19) + جرد كرون سيرو الكامل

مصدره: إملاء المالك (2026-07-19) لميزات التوليد والتفعيل، + قراءة مباشرة لكل ملفات cron في مستودع سيرو المحلي وجداول الجدولة في Siro/docs/03_pricing/pricing_system_report.md. هذا المستند يغذّي N6 (جدول feature_catalog والتسعير) وN7 (مولّد عرض السعر/الحاسبة) وO5 (توحيد الكرون على BullMQ) و**§1.5 في docs/22** (أعلام const للتوليد).


1. الحاكمية — من يقرّر وماذا يسري

  • السوبر-أدمن يحدّد الميزات بالاتفاق مع المستأجر/المالك عند التعاقد، وتوليد التطبيق (N3) يُخرج نسخة بهذه المواصفات حصراً.
  • القاعدة الحاكمة (docs/22 §1.5): الفعّال = المبني في الـbinary (أعلام const) ∩ المانيفست الريموت ∩ استحقاقات السيرفر (FeatureGuard). العلم في التطبيق قرار عرض؛ الحدّ الأمني يبقى السيرفر (docs/19).
  • التسعير: كل ميزة مدفوعة لها سعر شهري + رسم إعداد في feature_catalog (N6 — ⬜ لم يُبنَ)، والحاسبة في لوحة السوبر-أدمن (N7 — ⬜) تُخرج عرض السعر وتكتب tenants.features آلياً عند الاعتماد. الباقات نناقشها بعد بناء الكتالوج.

2. الأساسيات الثابتة — في كل نسخة، ليست خيارات

الميزة حالة الباك إند
Splash / Onboarding — (فلاتر Q1)
تسجيل الدخول والتسجيل (هاتف + OTP، بلا كلمة مرور) ✅ (D5، متعدد المزوّدين)
طلب الرحلة + عرض أسعار الفئات قبل الطلب ✅ (POST /tariff/quote — مُثبَت 72 طلباً على السيرفر)
رسم البولي لاين على الخريطة ✅ (route عبر سيرفرنا + كاش Redis) — الرسم نفسه فلاتر
تتبّع السائق الأساسي أثناء الرحلة ✅ (المجموعة H — Redis فقط، عتبات سيرو)
الدفع كاش (الافتراضي الأساسي) ✅ (cash.adapter)
التقييم + الدردشة + الإشعارات المترجمة ✅ (A/F/G)

3. الميزات القابلة للتفعيل والبيع (قائمة المالك)

الميزة (بتسمية المالك) المفتاح المقترح حالة الباك إند ملاحظات
عدد/تشكيلة فئات السيارات المعروضة ride_classes_set ✅ ride_types لكل مستأجر + تعرفة لكل فئة (M9). الحدّ بالعدد يُضاف كـentitlement رقمي (نمط drivers_max)
فئات أسعار tariff_engine_full ✅ محرّك كامل: نوافذ محلية التوقيت + انتظار + حدّ أدنى مرساة (docs/17-M)
التتبّع اللحظي المتقدّم (بولي لاين حيّ يُعاد رسمه مع تغيّر الاتجاه) live_tracking_pro ✅ باك إند (H) الضغط الحقيقي محلول (Redis + عتبات). الرسم وإعادة المسار في فلاتر Q2. يُسعَّر لأنه يستهلك route calls
التسجيل الصوتي داخل الرحلة trip_audio_recording ⬜ بند جديد — لم يكن في أي خطة يحتاج: رفع مقاطع + تخزين + سياسة احتفاظ/حذف + إقرار قانوني بالإشعار للطرفين. يُسجَّل في الـbacklog
معالجة وثائق السائقين بالذكاء الاصطناعي ai_document_processing ✅ مبني بالكود integrations/gemini + documents.service (extractDocument + faceMatch)، خلف GEMINI_API_KEY. ai_data/user_input (C3) جاهزان
معالجة المشاكل/الشكاوى بالذكاء الاصطناعي ai_complaints ⬜ وحدة complaints نفسها غير موجودة (لوحظ في N5). تُبنى الوحدة أولاً ثم طبقة الـAI فوقها
الخريطة الحرارية (سائق) heatmap ⬜ O1 المصدر جاهز (driver_tracks من H) — يلزم كرون توليد الكاش (نظير cron_generate_heatmap_cache)
الخريطة التنبؤية predictive_demand ⬜ O1 نظير cron_predictive_demand (خلايا 0.01° × 4 أسابيع تاريخ)
Geofence (رسائل/إعلانات/برومو بالمنطقة + تسعير مناطق) geofence 🔵 مبني بالكود (a15e65c + fef1235) Redis pub-sub + geofence_promo push عند دخول المنطقة + مضاعف تسعير في tariff.engine. ينقصه: واجهة أدمن لرسم المناطق + إثبات سيرفر
برومو كود عام coupons ✅ محرّك الكوبونات (17-L) بسقوف العملات
البرومو المتخصص (استهداف شرائح/مناطق/حملات) targeted_promo 🔵 جزئي geofence_promo موجود؛ محرّك الحملات المجدولة (نظير auto_marketing_pusher + passenger_reengagement) ⬜
رسائل واتساب + بوت نبيه (تشغيل البوتات) whatsapp_campaigns 🔵 جزئي قناة نبيه مبنية (OTP). استعمالها للحملات الجماعية ⬜ — يلزم صندوق حملات + حدود إرسال
محرّك التسويق (بوتات اجتماعية + مولّد تعليقات Gemini + تقارير) marketing_engine ⬜ O3/O4 نقل marketing_engine + socialBot + android_bot كإضافة مدفوعة خلف الاستحقاقات
محرّك التسعير الديناميكي (استخبار المنافسين + surge + ضبط العمولة) dynamic_pricing ⬜ L4 محرّكنا يستقبل المضاعف جاهزاً (surge.multiplier + مضاعف geofence موجودان). الناقص: البوت الذي يكتب المضاعف (نظائر ai_engine/surge_opportunity/kazan_adjuster/pricing_stability/seasonal)
المواصلات (خطوط باص) transit 🔵 microservice مبني (backend-transit/، f30209b) + لوحة مشرف التكامل مع تطبيقي الراكب/السائق ووضع الباص ⬜
الدفع بالمحفظة wallet_payment ✅ I1 مُثبَت بتزامن حقيقي
الدفع عبر البنوك/المحافظ الخارجية payment_gateways 🔵 PayMob مبني بالكود (d4ac38c) + registry محوّلات. CliQ · MTN/سيرياتيل · شام كاش ⬜ (P1)
التسوية بالرسائل (SMS خام + Gemini) sms_settlement ✅ مبني بالكود (da035e4) sms-settlement.service + raw_sms + استخراج Gemini — نمط سيرو مع إغلاق ثغراته
المفاوض الذكي · شرائح السائقين · تأمين السائق negotiator · driver_tiers · driver_assurance ⬜ مؤجَّلة بقرار المالك («آخر شيء») docs/22-M

«الشيك القابل للإضافة والتعديل» الذي ذكره المالك شفهياً: فُهم كوسيلة دفع إضافية قابلة للتفعيل — يُثبَّت تعريفه عند أول جلسة تسعير (بنية payment_gateway.registry تستوعب أي وسيلة جديدة كمحوّل).


4. جرد كرون سيرو الكامل (مقروء من المستودع + جداول سيرو نفسها)

الهدف: O5 — كل هذه تتوحّد عندنا في BullMQ (بادئة tripz_) بقفل ضد التشغيل المزدوج وسجل تنفيذ. لا crontab نظامي متناثر.

bot/ (التسعير والذكاء) — كلها ضمن dynamic_pricing وheatmap وpredictive_demand وtargeted_promo

الملف الجدولة (من وثائق سيرو) الوظيفة
cron_ai_engine كل 3 ساعات يقرأ معادلات المنافسين من pricing-engine ويطبّق تسعيراً ذكياً
cron_pricing_stability_engine كل 3 ساعات shadow mode — يصنّف انحراف الأسعار (برومو مؤقت / تغيير حقيقي / مستقر) بلا لمس kazan
cron_seasonal_pricing كل ساعة مواسم (إفطار رمضان ×1.25، أعياد) بتوقيت كل دولة
cron_surge_opportunity كل 10 دقائق يكتشف مناطق ذروة المنافسين ويكتب المضاعف في Redis
cron_kazan_adjuster كل 5–10 دقائق يخفّض العمولة ويضيف حوافز للسائقين في مناطق الذروة
cron_generate_pricing_cache دوري متوسط أسعار المنافسين لكل مربع 2.5كم → Redis
cron_generate_heatmap_cache كل 16 دقيقة كاش الخريطة الحرارية → Redis
cron_predictive_demand كل ساعة تنبّؤ الطلب (نفس اليوم/الساعة × 4 أسابيع) + FCM للسائقين القريبين
cron_empty_results_to_db كل ساعة تفريغ نتائج البوت من ملف إلى القاعدة
cron_passenger_reengagement يومياً 10:00 إشعار Gemini مخصص للخاملين ≥3 أيام (anti-spam 72س في Redis)
cron_auto_marketing_pusher كل ساعة رسالة تسويقية Gemini للّي فتحوا ولم يطلبوا خلال ساعتين
cron_silent_push_inactive كل بضع ساعات push صامت يوقظ التطبيق ليرفع الموقع
cron_dashboard_snapshot ساعي/يومي/أسبوعي أرشفة لقطات التحليلات JSON
cron_weekly_health_report الأحد ليلاً تقرير صحة السوق التنافسية
cron_gemini_advisor دوري تحليل استراتيجي للمعادلات المكتشفة عبر Gemini

marketing_engine/ — ضمن marketing_engine

الملف الجدولة الوظيفة
cron_insert_task كل 4 ساعات يزرع مهام autonomous_scroll_and_reply (فيسبوك/إنستغرام) للبوتات
cron_weekly_report أسبوعي تلخيص تقارير التسويق عبر Gemini
telegram_scraper كل 3 ساعات استخراج بيانات من المنصات
generate_10_tasks_cli كل 15 دقيقة توليد مهام مصغّرة للبوتات

transit/ — ضمن transit

الملف الجدولة الوظيفة
cron_approaching_alerts كل دقيقة تنبيه اقتراب الباص من المحطة (<2كم)
cron_cleanup يومياً 03:30 تنظيف الجلسات وسجل OTP المنتهي
cron_sync_members يومياً 03:00 إعادة بناء مجموعات الأعضاء في Redis من القاعدة

ride/ + payment_server/ — النواة

الملف الوظيفة موقفنا
cron_ride_timeout تصفير الرحلات العالقة waiting بعد 15 دقيقة 🔴 فجوة مؤكّدة عندنا: expired/no_drivers انتقالان شرعيان في آلة الحالة (trips.service.ts) لكن لا شيء يطلقهما بمؤقّت — رحلة searching بلا قبول تبقى معلّقة للأبد. المطلوب: sweeper بنمط ScheduledTripsSweeper
deleteNewDriverGiftCronJob حذف التكرارات يومياً من driverWallet لا يُنقل — ترقيع لغياب القيود؛ فهارسنا الفريدة (J6/L2) تمنع التكرار من الأصل

5. بنود جديدة سُجّلت اليوم (لم تكن في أي مجموعة)

# البند إلى أين
R1 sweeper مهلة البحث (searching → no_drivers/expired) نواة — يُبنى فوراً قبل فلاتر، فجوة تشغيلية لا ميزة
R2 التسجيل الصوتي داخل الرحلة (رفع + تخزين + احتفاظ + إشعار قانوني) ميزة مدفوعة — بعد قرار المالك في التخزين والمدة
R3 وحدة الشكاوى complaints (أساس لوحة الخدمة N5 ولميزة ai_complaints) نواة الإدارة
R4 واجهة أدمن لرسم مناطق Geofence مكمّل M3

← ذو صلة: 22-full-product-roadmap · 19-entitlements-licensing · 17-backend-backlog