نسخة كاملة من مستودع سيرو عند ecfe7568 لتكون أساس تطبيق «انطلق». نُسخ المتعقَّب في git فقط (12,509 ملفاً / 302 م.ب) بـ git archive، لا `cp -r` — فاستُثنيت تلقائياً مخلفات البناء (build · node_modules · .dart_tool · .gradle · Pods ≈ 10.7 غ.ب) وكل ما يستثنيه .gitignore. هذا الكوميت **بلا أي تعديل عمداً** حتى يكون كل ما يليه فرقاً مقروءاً مقابل سيرو الأصلي. سيرو نفسه لم يُمسّ. ⚠️ لا يبني بعد: `.env` و`lib/env/env.g.dart` غير متعقَّبين في سيرو (وهذا صحيح — أسرار لكل مستأجر). كل تطبيق فلاتر هنا يحتاج .env خاصاً بانطلق ثم توليد env.g.dart عبر build_runner. لا تُنسخ أسرار سيرو. 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
|
||
```
|