diff --git a/docs/32-marketing-playbook.md b/docs/32-marketing-playbook.md index b1e8058..d904d99 100644 --- a/docs/32-marketing-playbook.md +++ b/docs/32-marketing-playbook.md @@ -225,6 +225,52 @@ Same LOCKED STYLE as above. No readable text. --- +--- + +## 5) طبقة القياس — منفَّذة 2026-07-24 ✅ + +كان في المراجعة النقدية عائق صريح: **خطة إعلانية بأهداف CAC بين $150–400 بلا أداة واحدة تقيسها.** `grep` على البكسل كان يعطي صفراً. هذا القسم يوثّق ما رُكِّب. + +### 5.1 الموافقة أولاً — ليست تجميلاً + +الموقع بأربع لغات منها **الفرنسية والإسبانية**، أي أن زوّاراً من الاتحاد الأوروبي سيصلونه. بكسل يعمل قبل الموافقة = مخالفة GDPR مباشرة. لذلك: + +- شريط موافقة يظهر بعد 1.6 ثانية، بأربع لغات، بخيارَي **أوافق / أرفض** متساويين بصرياً (لا زر رفض مخفي). +- **لا يُحمَّل سكربت ميتا إطلاقاً قبل «أوافق».** تحقُّق برمجي: `typeof window.fbq === "undefined"` قبل الموافقة. +- من يرفض يتصفّح الموقع كاملاً بلا نقص — ولا كوكيز تتبّع. +- الأحداث تُسجَّل محلياً بلا بيانات شخصية في الحالتين، وتُرسَل لميتا فقط بعد الموافقة. + +### 5.2 ⚠️ خطوة واحدة متبقّية قبل أول دولار + +```js +const PIXEL_ID = ""; // marketing/index.html +``` +**ما دام فارغاً لا يُحمَّل البكسل ولا يُرسَل حدث.** هذا مقصود: لا شيء ينكسر، ولا شيء يُقاس. ضع المعرّف من Meta Events Manager قبل تشغيل الحملة. + +### 5.3 تعريف الأحداث + +| الحدث | متى | ما يقيسه | +|---|---|---| +| `PageView` | بعد الموافقة | الوصول الأساسي | +| `SectionView` | ظهور 35% من قسم | **عمق القمع** — أين يتوقف الزائر | +| `PlanInterest` | نقر بطاقة باقة | أي باقة تجذب فعلاً | +| `ModuleInterest` | نقر بطاقة وحدة | **أي وحدة يطلبها الناس** — أثمن بيانات تسعيرية | +| `CalculatorUsed` | تغيير مُهدَّأ 800ms | أقوى إشارة نيّة قبل التواصل | +| `Lead` | نقر واتساب/Calendly | **التحويل** — بمعامل `channel` و`where` | +| `DemoAppOpened` | نقر رابط متجر | جودة الاهتمام | +| `ConsentGranted` | قبول الموافقة | معدّل القبول = مقام كل نسبة أدناه | + +### 5.4 كيف تُحسب أهداف §2 فعلياً + +- **CAC** = إنفاق الحملة ÷ عدد `Lead` بـ`channel=whatsapp`. الهدف $150–400 صار قابلاً للقياس. +- **معدّل التحويل** = `Lead` ÷ `PageView`. +- **جودة الرسالة** = `SectionView(#pricing)` ÷ `PageView` — انخفاضه يعني أن الإعلان يجلب جمهوراً خاطئاً لا أن الصفحة ضعيفة. +- **إشارة التسعير** = توزيع `PlanInterest` و`ModuleInterest` — يخبرك أي باقة/وحدة تُطلب قبل أول مكالمة. + +> **تحذير تحليلي:** كل النسب أعلاه مقامها **الموافِقون فقط**. إن كان معدّل القبول 60% فأنت لا ترى 40% من الزوّار. لا تقارن هذه الأرقام بأرقام منصّة الإعلان مباشرة — قارن الاتجاه لا القيمة المطلقة. + +--- + ## سجل التغييرات | التاريخ | التغيير | diff --git a/docs/35-pricing-intelligence-legal.md b/docs/35-pricing-intelligence-legal.md new file mode 100644 index 0000000..7b30a42 --- /dev/null +++ b/docs/35-pricing-intelligence-legal.md @@ -0,0 +1,168 @@ +# 35 — استخبارات التسعير: ملخّص وقائع للمحامي + ضوابط المنتج + +> أُنشئ 2026-07-24 بطلب المالك (البند ٢ من قائمة المراجعة النقدية). +> +> ⚠️ **هذا الملف ليس رأياً قانونياً ولا يقوم مقامه.** أنا لست محامياً. الغرض منه أن يُسلَّم **كما هو** لمحامٍ مختص بالملكية الفكرية وقانون المنافسة في كل ولاية قضائية مستهدفة، فيجد أمامه الوقائع التقنية دقيقة بدل أن يعيد اكتشافها. الأسئلة في §5 هي ما يُطرح عليه. +> +> يُقرأ مع: [docs/33 §2.3](33-addons-packaging.md) (الوحدة والتسعير) · [docs/34](34-siro-backend-multitenancy.md) (من سيشغّلها) + +--- + +## 1) ما تفعله الوحدة فعلاً — مقروء من الكود لا من العرض التسويقي + +هذا القسم هو أهم ما في الملف. الوصف الذي كان في `docs/33` («جمع أسعار المنافسين») **أقل دقة بكثير من الواقع**، والفارق قانوني لا لفظي. + +### 1.1 مصدر البيانات: بوت أندرويد يشغّل تطبيقات المنافسين على أجهزة حقيقية + +| الحلقة | الملف | ما يحدث | +|---|---|---| +| ① طابور المهام | `backend/bot/standalone_worker.php` | لوحة تُنشئ مهام: تطبيق منافس + نقطة انطلاق + وجهة + إحداثيات. وزرّ **«Generate Batch Trips»** يولّد حتى **100 مهمة دفعة واحدة** | +| ② التنفيذ | **بوت أندرويد خارج المستودع** | نصّ الواجهة حرفياً: *"Results will appear here when the Android bot submits them"* (`standalone_worker.php:821`). التنفيذ على **جهاز حقيقي** يفتح تطبيق المنافس ويطلب تسعيرة | +| ③ الإرجاع | نفس الملف، سطور 22–73 | البوت يوقّع بـ`hash_hmac('sha256', device_id.ts, SECRET_KEY)` ويرسل النتائج | +| ④ التخزين | `bot/cron_empty_results_to_db.php:38` | `INSERT INTO scraped_competitor_prices (...)` من `results.json` | +| ⑤ التحليل | `backend/pricing-engine/src/` | MAD (شواذ) · K-Means (تجميع فئات) · انحدار خطي متعدد → **استخراج معادلة تسعير المنافس** | +| ⑥ التطبيق | `ride/pricing/auto_adapt.php` · `bot/ai_formula_solver.php` · `cron_pricing_stability_engine.php` | ضبط سعر سيرو آلياً على أساس النتيجة | + +### 1.2 التطبيقات المستهدفة — **بالاسم ومعرّف الحزمة** + +من `standalone_worker.php:665–673`: + +| التطبيق | معرّف الحزمة | +|---|---| +| Uber | `com.ubercab` | +| Careem | `com.careem.acma` | +| Jeeny | `me.com.easytaxi` | +| TaxiF | `com.taxif.passenger` | +| YallaGo | `ae.com.yalla.go.dubai.client` | +| Zaken / Zakinn | `com.zakinn.app` | +| Tfadal | `com.bis.taxi` | + +`scraped_competitor_prices` يخزّن `app_name` و`competitor_name` كأعمدة مفهرسة — أي أن **نسبة السعر إلى منافس مُسمّى هي تصميم الجدول نفسه، لا أثر جانبي**. + +### 1.3 لماذا هذا التوصيف مهم + +الفارق بين ثلاثة أوصاف، وكلها كانت تُستعمل بالتبادل في وثائقنا: + +| الوصف | الواقع؟ | الوزن القانوني | +|---|---|---| +| «تحليل بيانات السوق» | ❌ غير دقيق | منخفض | +| «كشط أسعار معلنة من صفحات عامة» | ❌ غير دقيق | متوسط | +| **«أتمتة تطبيقات منافسين مُسمّاة على أجهزة حقيقية لتوليد طلبات تسعير آلية بالجملة»** | ✅ **هذا هو الواقع** | **مرتفع** | + +الأسعار في تطبيقات النقل **ليست منشورة على صفحة عامة** — تُولَّد ردّاً على طلب تسعيرة من حساب داخل التطبيق. أي أن الحصول عليها يستلزم بالضرورة: حساباً على منصة المنافس، وتفاعلاً آلياً معها، وتوليد أحمال على أنظمته. + +--- + +## 2) الخطر الأول — الوصول الآلي المصرّح به وشروط الاستخدام + +**ما يجب أن يعرفه المحامي:** +- الوصول يتم عبر **حساب مستخدم** على منصة المنافس (لا يمكن الحصول على تسعيرة بدونه). +- التفاعل **آلي** ومُجدوَل ودُفعي (حتى 100 طلب/دفعة). +- الطلبات هي **طلبات تسعير** لا حجوزات مكتملة — لكنها أحمال حقيقية على أنظمة المنافس. +- شروط استخدام تطبيقات النقل الكبرى تحظر عادةً صراحةً: الوصول الآلي، والاستخدام لأغراض تجارية منافسة، وجمع البيانات بالجملة. + +**البُعد الذي يتجاوز «مخالفة عقد»:** في عدد من الولايات القضائية يُجرَّم الوصول غير المصرّح به إلى نظام معلوماتي بقانون جزائي مستقل عن العقد (الأردن: قانون الجرائم الإلكترونية · مصر: قانون مكافحة جرائم تقنية المعلومات · الخليج: قوانين مكافحة جرائم المعلوماتية). **السؤال للمحامي: هل «الوصول بحساب صحيح لكن بغرض تحظره الشروط وبأتمتة» يندرج تحت «غير مصرّح» في هذه القوانين؟** الإجابة تختلف جوهرياً بين الولايات. + +--- + +## 3) الخطر الثاني — قانون المنافسة (الأخطر، ولم يكن موثَّقاً أصلاً) + +هذا الخطر **مستقل تماماً** عن الأول، ولا يزول بحلّه. + +### 3.1 الفرق بين الاستعمال الذاتي والبيع كخدمة + +| الوضع | الوصف | الوزن | +|---|---|---| +| **أمس** | سيرو تجمع أسعاراً وتضبط أسعارها هي | فاعل واحد يتصرّف تنافسياً | +| **غداً** | **Tripz تشغّل المحرّك لـN مشغّلاً** وتضبط أسعارهم | **Tripz صارت العقدة المركزية بين متنافسين** | + +### 3.2 السيناريو الذي يجب تفاديه معمارياً + +مشغّلان في **نفس المدينة** يشتريان الوحدة. كلاهما يتغذّى من نفس المحرّك، بنفس المنطق، على نفس بيانات السوق → **أسعارهما تتقارب بلا اتفاق بينهما**. + +هذا هو التوصيف الكتابي لما يُسمّى **التواطؤ الخوارزمي عبر وسيط (hub-and-spoke)**: لا يلزم اتفاق بين المتنافسين؛ يكفي أن يديرا التسعير عبر **مزوّد واحد يعرف بيانات الجميع**. والمسؤولية في هذا النمط تقع على **المزوّد** (المحور) لا على المشغّلين فقط. + +مصر والسعودية والإمارات والأردن لديها جميعاً هيئات منافسة فاعلة، والاتحاد الأوروبي هو الأشدّ في هذا الباب تحديداً. + +### 3.3 الضابط المعماري المقترح — يُنفَّذ قبل البيع لا بعده + +> **قاعدة «مشغّل واحد لكل مدينة» للوحدة ②:** لا تُباع «استخبارات التسعير» لأكثر من مستأجر واحد في نفس المدينة/السوق. تُقيَّد في العقد **وفي الكود** (فحص عند تفعيل الميزة على مستوى المدينة). + +هذا الضابط يحوّل الوحدة من «محور تواطؤ محتمل» إلى «أداة تنافسية لفاعل واحد» — وهو أقوى دفاع بنيوي متاح، وله أثر تجاري إيجابي أيضاً: **الحصرية الجغرافية تبرّر سعراً أعلى** ($249 → قابلة لأن تصير $399 لأول مشغّل في المدينة). + +--- + +## 4) الخطر الثالث — البيانات الشخصية + +`scraped_competitor_prices` يخزّن إحداثيات دقيقة (`decimal(10,7)`) لنقاط انطلاق ووصول. هذه **نقاط اصطناعية ولّدها فريقنا**، لا نقاط ركاب حقيقيين — أي أن الخطر هنا **منخفض**، لكن يجب تثبيته كتابةً حتى لا ينزلق لاحقاً إلى استعمال نقاط رحلات فعلية. + +> **قاعدة:** ممنوع تغذية `scraped_competitor_prices` من إحداثيات رحلات ركاب حقيقية. النقاط الاصطناعية فقط. + +--- + +## 5) الأسئلة التي تُطرح على المحامي (بهذا الترتيب) + +**أ — الوصول الآلي** +1. هل الوصول الآلي إلى تطبيق منافس بحساب صحيح، بغرض تحظره شروطه، يشكّل «وصولاً غير مصرّح به» جزائياً في [الأردن · مصر · سوريا · السعودية · الإمارات]؟ +2. هل تتغيّر الإجابة إذا كان الحساب باسم شركة أو باسم شخص طبيعي؟ +3. ما مدى تعرّضنا لدعوى مدنية (إخلال بعقد · منافسة غير مشروعة · إثراء بلا سبب) من منصة مُسمّاة؟ + +**ب — بيع الأداة كخدمة** +4. حين تشغّل Tripz المحرّك **نيابة عن** مستأجريها، من الفاعل قانوناً — Tripz أم المستأجر أم كلاهما؟ +5. هل ينفعنا تعاقدياً أن يقرّ المستأجر بأنه المسؤول عن استعمال المخرجات؟ أم تبقى المسؤولية على المزوّد؟ + +**ج — المنافسة (الأهم)** +6. هل بيع محرّك تسعير واحد لمشغّلَين متنافسَين في نفس السوق يُعرّضنا لمساءلة كـ«محور» في ترتيب hub-and-spoke؟ +7. هل ضابط «مشغّل واحد لكل مدينة» (§3.3) كافٍ للدفع؟ وهل يلزم أن يكون في العقد أم في الكود أم في الاثنين؟ +8. ما الأسواق التي يجب **ألّا** تُعرض فيها الوحدة إطلاقاً في المرحلة الأولى؟ + +**د — التسويق** +9. ما الصياغات التسويقية الممنوعة؟ (تسمية منافس · التلميح لـ«اختراق» · وعد بمعرفة «أسرار» المنافس) + +--- + +## 6) ما نُفِّذ الآن على الموقع — وما ينتظر رأي المحامي + +### ✅ نُفِّذ فوراً (لا يحتاج انتظاراً) +- **لا يُسمّى أي منافس** في أي لغة من اللغات الأربع. +- حُذفت صياغة **«اعرف كيف يسعّر منافسك — قبل أن يعرف هو»**: توحي بالتسلل، وتصلح دليلاً على النيّة في أي نزاع. +- الصياغة البديلة تصف **المخرَج** (معادلة تسعير السوق · مرونة الطلب · ضبط سعرك) لا **الوسيلة**. + +### ⏸️ موقوف على رأي المحامي +- عرض الوحدة في **أي سوق خليجي أو أوروبي**. +- تفعيل ضابط «مشغّل واحد لكل مدينة» في الكود (`FeatureGuard` على مستوى المدينة). +- صياغة بند تحمّل المسؤولية في عقد المستأجر. + +### 🔴 قرار يستحق النظر قبل أول بيع + +المسار الأقل خطراً **ليس تحسين الصياغة، بل تبديل مصدر البيانات**. المحرّك التحليلي (`pricing-engine/`) هو الأصل الثمين، وهو **محايد تماماً تجاه المصدر**: MAD وK-Means والانحدار تعمل على أي جدول أسعار. + +بدائل تُغذّي نفس المحرّك بمخاطرة أقل بكثير: +1. **بيانات المستأجر نفسه** — تاريخ رحلاته ومرونة الطلب وأسعاره. لا يحتاج منافساً أصلاً، ويغطّي معظم قيمة «اضبط سعرك بالبيانات لا بالحدس». +2. **تعرفة الجهة المنظِّمة** — منشورة رسمياً في معظم أسواقنا، وجمعها مشروع تماماً. +3. **مسح ميداني بشري** — بائع بيانات أو مسح دوري، بعقد يحمّل المزوّد المسؤولية. + +**الرأي الصريح:** الوحدة تظل تستحق $249 حتى لو حُذفت طبقة المنافسين كلياً. أما بيع بوت الأندرويد كخدمة لـN مشغّلاً فيضع Tripz — لا المستأجر — في مرمى دعويين مختلفتين. لو كان القرار لي: **أفصل المحرّك عن مصدره، وأبيع المحرّك، وأترك مصدر المنافسين استعمالاً داخلياً لسيرو وحدها ريثما يردّ المحامي.** + +--- + +## 7) موقف المنتج الحالي + +| البند | الحالة | +|---|---| +| الوحدة على الموقع | معروضة بصياغة محايدة، بلا تسمية منافس | +| السعر | $249/شهر + $1,000 إعداد | +| ضابط مشغّل/مدينة | ⬜ غير منفَّذ في الكود | +| رأي قانوني | ⬜ لم يُطلب بعد — **هذا الملف هو مادته** | +| أسواق مسموحة | الأردن · مصر · سوريا مبدئياً · **الخليج وأوروبا موقوفان** | + +--- + +## سجل التغييرات + +| التاريخ | التغيير | +|---|---| +| 2026-07-24 | إنشاء الملف — توصيف تقني دقيق من الكود (بوت أندرويد على أجهزة حقيقية ضد ٧ تطبيقات مُسمّاة)، فصل ثلاثة أخطار، ضابط مشغّل/مدينة، أسئلة المحامي، تنظيف صياغة الموقع | + +--- +← ذو صلة: [33-addons-packaging](33-addons-packaging.md) · [21-siro-audit](21-siro-audit.md) · [34-siro-backend-multitenancy](34-siro-backend-multitenancy.md) diff --git a/marketing/index.html b/marketing/index.html index eb0a10d..f343465 100644 --- a/marketing/index.html +++ b/marketing/index.html @@ -412,6 +412,17 @@ html[dir=ltr] .transit-sec{background-image:radial-gradient(760px 420px at 88% 0 .transit-note{color:#9BA8C9;font-size:13.5px;margin-bottom:20px} @media(max-width:900px){.transit-grid{grid-template-columns:1fr;gap:32px}} +/* ============ CONSENT + ANALYTICS ============ */ +.consent{position:fixed;inset-inline:16px;bottom:16px;z-index:200;max-width:520px;margin-inline:auto; + background:var(--card);border:1px solid var(--border);border-radius:16px;box-shadow:var(--shadow-lg); + padding:20px 22px;transform:translateY(140%);transition:transform .45s var(--ease)} +.consent.show{transform:none} +.consent h4{font-size:16px;margin-bottom:6px} +.consent p{font-size:13.5px;color:var(--text-soft);margin-bottom:14px} +.consent-btns{display:flex;gap:10px;flex-wrap:wrap} +.consent-btns .btn{flex:1;justify-content:center;padding:11px 18px;font-size:14px;min-width:120px} +@media(max-width:520px){.consent{inset-inline:10px;bottom:10px;padding:18px}} + /* ============ COMPARISON ============ */ .cmp-table{width:100%;border-collapse:separate;border-spacing:0;font-size:15px} .cmp-table th,.cmp-table td{padding:16px 18px;text-align:start;border-bottom:1px solid var(--border)} @@ -1281,6 +1292,16 @@ footer{background:var(--midnight-900);color:#8A99C2;padding:64px 0 32px;border-t + +
+ +