# 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](22-full-product-roadmap.md) · [19-entitlements-licensing](19-entitlements-licensing.md) · [17-backend-backlog](17-backend-backlog.md)