قرار المالك 2026-07-27: باك إند سيرو PHP هو المعتمد، وتطبيقاته المجرّبة ميدانياً تحل محل إعادة البناء المؤرشفة. سيرو نفسه لم يُمسّ. الخريطة: backend · payment_server · loction_server · ride_server · passenger_server · docker · dashboard · stress_test → الجذر siro_rider → apps/rider siro_driver → apps/driver siro_admin → dashboards/admin siro_service → dashboards/service android_bot → apps/android_bot socialBot → apps/socialBot نُسخ المتعقَّب في git سيرو فقط عبر `git archive` (3,198 ملفاً / ~169 م.ب) لا `cp -r` — فاستُثنيت مخلفات البناء تلقائياً. بلا أي تعديل محتوى عمداً: كل ما يلي يصير فرقاً مقروءاً مقابل المصدر. لم يُستورد وسببه: siromove.com (الموقع التسويقي يبقى marketing/ في تريبز، سيرو فيه 8 ملفات) · docs و planning (تريبز له docs/ الخاص) · deploy.sh (ليس نشراً على سيرفر بل `git add . && git push origin --all` — فخّ في مستودع آخر) · transit_dashboard (بانتظار قرار مصير backend-transit و dashboards/transit-web). ⚠️ لا يبني بعد — ثلاثة نواقص متوقعة ومقصودة: 1. `.env` و `lib/env/env.g.dart` غير متعقَّبين في سيرو (أسرار لكل مستأجر): كل تطبيق فلاتر يحتاج .env خاصاً ثم توليد env.g.dart بـ build_runner. 2. إعدادات Firebase (9 ملفات google-services.json و GoogleService-Info.plist) يستبعدها .gitignore تريبز — ولكل مستأجر مشروع Firebase خاص أصلاً. 3. apps/driver في سيرو يشير إلى `../../Intaleq/packages/get` خارج المستودع → يجب ضمّ الحزم داخله أسوة بـ apps/rider. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
77 lines
2.4 KiB
Markdown
77 lines
2.4 KiB
Markdown
# Siro Pricing Engine
|
||
|
||
Statistical analysis engine for competitor ride-hailing pricing data.
|
||
|
||
## Architecture
|
||
|
||
```
|
||
MySQL (scraped_competitor_prices)
|
||
↓
|
||
Pricing Engine (Node.js/TypeScript)
|
||
↓
|
||
├─ Outlier Detection (MAD)
|
||
├─ Tier Clustering (K-Means on PPK)
|
||
├─ Multiple Linear Regression (Gaussian Elimination)
|
||
├─ Minimum Fare Detection
|
||
├─ Surge Pricing Analysis
|
||
└─ Zone-Based Analysis
|
||
↓
|
||
MySQL (competitor_secret_formulas + competitor_surge_insights)
|
||
↓
|
||
PHP Backend reads formulas → adjusts Siro pricing
|
||
```
|
||
|
||
## Quick Start
|
||
|
||
```bash
|
||
# Install
|
||
cd backend/pricing-engine
|
||
npm install
|
||
|
||
# Configure
|
||
cp .env.example .env
|
||
# Edit .env with your MySQL/Redis credentials
|
||
|
||
# Run migration once
|
||
mysql -u root siro < migrations/001_add_columns.sql
|
||
|
||
# Full analysis
|
||
npm run analyze
|
||
|
||
# TaxiF only
|
||
npm run analyze:taxif
|
||
```
|
||
|
||
## CLI Commands
|
||
|
||
| Command | Description | Schedule |
|
||
|---------|-------------|----------|
|
||
| `npm run analyze` | Full analysis all competitors | Every 3h |
|
||
| `npm run analyze:taxif` | TaxiF deep dive | On-demand |
|
||
| `npm run cron:hourly` | Surge + zone quick check (3h window) | Hourly |
|
||
| `npm run cron:daily` | Full analysis (72h window) | Daily 6am |
|
||
| `npm run cron:weekly` | Full report (7d window) | Weekly Mon 8am |
|
||
|
||
## Analysis Pipeline
|
||
|
||
1. **Fetch** raw data from `scraped_competitor_prices`
|
||
2. **Clean**: MAD-based outlier removal, extract base (non-surge) prices
|
||
3. **Cluster**: K-Means on price_per_km → Economy / Standard / Premium tiers
|
||
4. **Regress**: Multiple Linear Regression per tier: `price = base + km·dist + min·dur`
|
||
5. **Detect Min Fare**: Knee-point detection on short rides
|
||
6. **Analyze Surge**: Per-route price variation × time of day
|
||
7. **Zone Analysis**: 2.5km grid pricing heatmap
|
||
8. **Save** results to `competitor_secret_formulas` and `competitor_surge_insights`
|
||
|
||
## Integration with PHP Backend
|
||
|
||
The PHP cron jobs (`cron_ai_engine.php`, `cron_kazan_adjuster.php`) read from `competitor_secret_formulas` instead of doing their own simplistic math. The workflow becomes:
|
||
|
||
```
|
||
Pricing Engine (Node.js) → writes formulas + surge insights → MySQL
|
||
↓
|
||
PHP (cron_ai_engine.php) → reads formulas, adjusts kazan pricing
|
||
PHP (cron_kazan_adjuster) → reads surge insights, adjusts commissions
|
||
PHP (cron_gemini_advisor) → sends formulas to Gemini for TEXTUAL strategy only
|
||
```
|