Files
intaleq/backend/pricing-engine/README.md
T
Hamza-AyedandClaude Opus 5 92dc6b3641 chore: استيراد أولي من سيرو (ecfe7568) — بلا أي تعديل
نسخة كاملة من مستودع سيرو عند 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>
2026-07-27 05:10:29 +03:00

77 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```