docs: record the kazan-based pricing rebuild and its server proof

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Hamza-Ayed
2026-07-19 02:13:21 +03:00
co-authored by Claude Opus 4.8
parent 2045896b95
commit 978a7489e6
+26
View File
@@ -338,6 +338,32 @@
---
### M — التحديث الثاني: الأرقام من جدول `kazan` الحيّ (2026-07-19) — ✅ مُثبَتة على السيرفر
بعد الحصول على جدول `kazan` من قاعدة سيرو، أُعيد بناء الأرقام منه لا من تقدير. العمولة (11٪ · 12٪ · 14٪) طابقت ما عندنا حرفياً؛ وثلاثة تصحيحات لزمت:
| الاكتشاف | الدليل في البيانات |
|---|---|
| **محورا الأردن مقلوبان** | أعمدة الفئات تحمل سعر الدقيقة (0.043) وأعمدة النوافذ سعر الكيلومتر (0.184) — عكس مصر وسوريا. قراءتها كما هي = رحلة 27 كم بأقلّ من ديناريَن |
| **نِسَب مصر وسوريا معطوبة** | الكهربائي 0.23 والفان 0.25–0.40 من الاقتصادي — أي فان أرخص من اقتصادي. نِسَب الأردن وحدها متماسكة (0.86 → 1.51) فاعتُمدت للثلاثة |
| **لا فتحة عدّاد** | `startPrice = 0` في كل الصفوف. قرار المالك: **الحدّ الأدنى هو الآلية** («ما في رحلة أقل من 20 جنيهاً») لا رسم يُضاف فوق كل أجرة |
**البنية النهائية** (وهي ما سيكتب فيه بوت استخبارات الأسعار): سعر الكيلومتر يتغيّر **بالفئة** فقط — رقم يعرفه السوق فلا يتذبذب بالساعة؛ وسعر الدقيقة يتغيّر **بالنافذة** فقط. `fuelPrice` محفوظ كمدخل للبوت. بنية سيرو تُمثَّل عندنا بلا خسارة، والعكس غير صحيح (لا منطقة زمنية ولا إصدارات ولا سماحية مسافة عنده).
**تسريبان أغلقهما الاختبار الحيّ** (بموافقة المالك):
- **فئة مجهولة = رحلة مجانية**: `service_class` يأتي من الطلب بلا تحقّق، والاستثناء كان يُبتلع فتُنشأ رحلة بـ`quoted_fare = null` ثم تُسوّى بصفر. صار الطلب يُرفض بـ400.
- **`fixed` أُخرجت من الزرع**: سعر ثابت بلا جدول خطوط = رقم واحد لكل الوجهات — أظهر الاختبار رحلة 55.8 كم بـ2.5 ديناراً مقابل 23.2 للاقتصادي.
**الإثبات على السيرفر (2026-07-19)**: 72 طلباً حقيقياً (8 فئات × 3 مسافات × 3 بلدان) بمسافات فعلية من انطلق (2.973 / 27.401 / 55.765 كم)، كلها رجعت سعراً مطابقاً للحساب اليدوي، و3 رفضات لـ`fixed` مؤكَّدة. السكربت: `scripts/verify-and-test.sh` (يفحص البيئة → يقلع → ينتظر `/health` → **يبطل كاش التعرفة** → يختبر).
**درسان تشغيليان مثبَّتان في السكربت لا في الذاكرة**:
1. **كاش Redis ينجو من إعادة تشغيل الـapi** (حاوية منفصلة). تطبيق `tariffs.sql` مباشرةً يتجاوز إبطال التطبيق، فخدم النظام أسعاراً قديمة عبر **دورتَي نشر** وهو يعلن النجاح.
2. **`OTP_DEV_MODE=true` مع `NODE_ENV=production` يمنع الإقلاع** (`process.exit(1)` لا تحذير)، فيظهر العطل لاحقاً كـ`EAI_AGAIN` داخل الاختبار — أي في المكان الخطأ تماماً.
**مؤجَّل بقرار**: جدول الخطوط الثابتة (أصل → وجهة → سعر) لتفعيل فئة `fixed`.
---
## مؤجَّل عمداً (قرار المالك)
المفاوض الذكي · تدرّج السائق · خصم العمولة — **آخر شيء** (جديدة حتى على سيرو).
**Geofence** — مؤجَّل («لوقتها»)، موجود في سيرو للاستئناس.