docs: restructure documentation, add digital legacy report, and secure contracts
This commit is contained in:
@@ -0,0 +1,204 @@
|
||||
# AI_CONTEXT.md — Siro (Siro) Ride-Hailing Platform
|
||||
|
||||
## Core Architecture
|
||||
- **4 Flutter apps** (rider, driver, admin, service) + **PHP backend** + **MySQL** + **WebSocket**
|
||||
- **State Management**: GetX (permanent controllers in AppBindings)
|
||||
- **Maps**: Siro Maps (custom Flutter plugin) + Google Maps + Map SaaS + OSRM
|
||||
- **Domain**: siromove.com | **API**: api.intaleq.xyz/siro_v3 | **Ride**: rides.intaleq.xyz | **Location**: location.intaleq.xyz | **Payment**: walletintaleq.intaleq.xyz
|
||||
|
||||
## Passenger Flow (siro_rider)
|
||||
```
|
||||
Splash → Auth check → MapScreen (permanent map controllers)
|
||||
→ Enter destination → Price calc → Ride request (waitingRides)
|
||||
→ Searching (WebSocket polling + timer) → Driver accepts (RideState.driverApplied)
|
||||
→ Driver arrives (RideState.driverArrived) → Ride begins (RideState.inProgress)
|
||||
→ Ride finishes → Rating + Payment → Back to map
|
||||
```
|
||||
- **RideState enum**: noRide, cancelled, preCheckReview, searching, driverApplied, driverArrived, inProgress, finished
|
||||
- **Key Controller**: `RideLifecycleController` (4600 lines) — state machine, deviation detection, ETA calculation
|
||||
- **Deviation Guard**: 50m threshold, re-routes if off path
|
||||
- **Local ETA**: Route trimming by closest point, percentage-based time calculation
|
||||
|
||||
## Driver Flow (siro_driver)
|
||||
```
|
||||
Splash → Auth → MapScreen → Go Online (location streaming)
|
||||
→ Ride offer via FCM + Android native overlay (TripOverlayPlugin)
|
||||
→ Accept → Navigate to pickup → Arrived → Begin ride → Active ride → End ride
|
||||
→ Rate passenger + Payment → Go Offline
|
||||
```
|
||||
- **Background**: Android foreground service for GPS + FCM background handler
|
||||
- **Overlay**: Custom native plugin shows trip data with accept/reject (auto-close 15s)
|
||||
- **Data package**: 33-index array (passengerLat/Lng, destination, fare, distance, name, phone, etc.)
|
||||
|
||||
## API Endpoints (59+ discovered)
|
||||
### Auth
|
||||
| Endpoint | Caller |
|
||||
|----------|--------|
|
||||
| POST `$server/auth/login.php` | LoginController |
|
||||
| POST `$authCaptin/login.php` | Driver login |
|
||||
| POST `$server/auth/signup.php` | RegisterController |
|
||||
| POST `$server/loginJwtRider.php` | JWT refresh (401 handler) |
|
||||
|
||||
### Ride
|
||||
| Endpoint | Caller |
|
||||
|----------|--------|
|
||||
| POST `$rideServerSide/ride/rides/add.php` | Ride request |
|
||||
| POST `$rideServerSide/rides/acceptRide.php` | Driver accept |
|
||||
| POST `$rideServerSide/ride/rides/updateStausFromSpeed.php` | Status updates (Arrived/Begin/Finished) |
|
||||
| POST `$rideServerSide/ride/rides/getRideStatus.php` | Polling fallback |
|
||||
| POST `$server/ride/rides/getRideStatusFromStartApp.php` | App restore check |
|
||||
|
||||
### Location
|
||||
| Endpoint | Caller |
|
||||
|----------|--------|
|
||||
| POST `$location/{getSpeed,getComfort,getBalash,...}.php` | Nearby drivers by car type |
|
||||
| POST `$location/getDriverCarsLocationToPassengerAfterApplied.php` | Driver GPS after accept |
|
||||
|
||||
### Payment
|
||||
| Endpoint | Caller |
|
||||
|----------|--------|
|
||||
| POST `$paymentServer/ride/payment/add.php` | Ride payment |
|
||||
| POST `$paymentServer/ride/payMob/{wallet,card}/payWithPayMob.php` | Visa/Mastercard |
|
||||
| POST `$paymentServer/ride/mtn/passenger/{start,confirm}_payment.php` | MTN mobile money |
|
||||
| POST `$paymentServer/ride/syriatel/passenger/{start,confirm}_payment.php` | Syriatel mobile money |
|
||||
| POST `$paymentServer/ecash/payWithEcash.php` | E-Cash |
|
||||
|
||||
### Other
|
||||
| Endpoint | Caller |
|
||||
|----------|--------|
|
||||
| POST `$server/ride/rate/addRateToDriver.php` | Passenger rating |
|
||||
| POST `$server/ride/rate/addRateToPassenger.php` | Driver rating |
|
||||
| POST `$wallet/getWalletByPassenger.php` | Wallet balance |
|
||||
| POST `$walletDriver/getWalletByDriver.php` | Driver wallet |
|
||||
| POST `$promo/getPromoBytody.php` | Promo code check |
|
||||
| POST `$server/ride/invitor/get_unified_code.php` | Referral code |
|
||||
|
||||
## Database (60+ tables in intaleqDB1 + intaleq-ridesDB)
|
||||
### Core Tables
|
||||
| Table | PK | Key Relationships |
|
||||
|-------|----|-------------------|
|
||||
| `passengers` | id (varchar) | → ride, waitingRides, payments, passengerWallet, tokens, ratingDriver, notifications |
|
||||
| `driver` | idn (auto) + id (varchar) | → ride, car_locations, payments, driverWallet, driverToken, driver_orders |
|
||||
| `ride` | id (auto) | passenger_id → passengers, driver_id → driver |
|
||||
| `waitingRides` | id (varchar) | passenger_id → passengers, SPATIAL indexes on lat/lng |
|
||||
| `car_locations` | driver_id (varchar) | SPATIAL idx_location_point (POINT), BTREE idx_loc_status_time |
|
||||
| `payments` | id (varchar) | passengerID, driverID, rideId |
|
||||
| `ratingDriver` | id (auto) | driver_id, passenger_id, UNIQUE ride_id |
|
||||
|
||||
### Key Indexes
|
||||
- `car_locations.location_point` — SPATIAL index for GIS queries
|
||||
- `waitingRides` — idx_location_status (lat,lng,status,created_at)
|
||||
- `palces11` — FULLTEXT on name/name_ar/name_en/address/category
|
||||
|
||||
## Real-time Systems
|
||||
- **WebSocket**: PHP Socket.IO server (socket_intaleq/{driver,passenger}_socket.php)
|
||||
- **Events**: `driver_location_update`, `ride_accepted`, `ride_cancelled`, `ride_finished`
|
||||
- **Polling fallback**: HTTP polling every N seconds when WebSocket disconnects
|
||||
- **3 reliable updates**: Stops polling after 3 consecutive WebSocket location updates
|
||||
|
||||
## Notifications
|
||||
- **Push**: Firebase Cloud Messaging (FCM) — `FirebaseMessagesController`
|
||||
- **Local**: `NotificationController` with custom channels
|
||||
- **iOS Live Activity**: `IosLiveActivityService` + SwiftUI RideWidget
|
||||
- **Background**: Android overlay (TripOverlayPlugin) for driver ride offers
|
||||
- **Types**: Order (ride offer), OrderSpeed, ride status updates
|
||||
|
||||
## GIS Logic
|
||||
- **Routing**: Map SaaS (`map-saas.intaleqapp.com/api/maps/route`) or OSRM (`routesy.intaleq.xyz`)
|
||||
- **Geocoding**: Map SaaS reverse geocoding + search
|
||||
- **ETA**: Local algorithm in `RideLifecycleController.updateRemainingRoute()` — finds closest route point, trims polyline, recalculates percentage
|
||||
- **Deviation**: `checkAndRecalculateIfDeviated()` — 50m threshold, consecutive heading check
|
||||
- **Driver Tracking**: `handleDriverLocationUpdate()` — camera follows driver, zoom by speed
|
||||
- **Marker Rotation**: Updates driver car icon rotation based on heading
|
||||
|
||||
## Wallet Logic
|
||||
- **Passenger Wallet**: `passengerWallet` table, deduct on ride, top-up via PayMob/MTN/Syriatel
|
||||
- **Driver Wallet**: `driverWallet` table, credit after ride, withdraw
|
||||
- **Payment Methods**: Cash (default), Visa (PayMob), Wallet, MTN, Syriatel, E-Cash
|
||||
- **Kazan**: Percentage-based commission per country (kazan table: comfortPrice, speedPrice, familyPrice, etc.)
|
||||
- **Tips**: `tips` table linked to ride/driver/passenger
|
||||
|
||||
## State Management Map
|
||||
### Rider App Controllers (permanent in AppBindings)
|
||||
| Controller | States | Dependencies |
|
||||
|-----------|--------|-------------|
|
||||
| RideLifecycleController | RideState enum (8 states) | CRUD, MapEngine, MapSocket, UiInteractions, NearbyDrivers |
|
||||
| MapSocketController | connected/disconnected | WebSocket, RideLifecycle |
|
||||
| MapEngineController | map ready/loading | SiroMaps, markers, polylines |
|
||||
| LocationSearchController | idle/searching/result | Map SaaS API |
|
||||
| NearbyDriversController | empty/populated | Location API |
|
||||
| UiInteractionsController | sheet states | All ride widgets |
|
||||
| LoginController | logged out/authenticating/logged in | CRUD, JWT |
|
||||
| SplashScreenController | animating/checking/navigating | GetStorage, CRUD |
|
||||
|
||||
### Driver App
|
||||
| Controller | States | Dependencies |
|
||||
|-----------|--------|-------------|
|
||||
| HomeCaptainController | offline/online/in-ride | LocationService, WebSocket, CRUD |
|
||||
| NavigationController | idle/navigating/recalculating | Map, TTS |
|
||||
| BackgroundServiceHelper | running/stopped | Android service |
|
||||
|
||||
## Security
|
||||
- **JWT** with device fingerprint (SHA-256) in payload
|
||||
- **X-Device-FP** header validated against JWT fingerprint claim
|
||||
- **HMAC** for payment server (X-HMAC-Auth header)
|
||||
- **401 auto-refresh**: `LoginController.getJWT()` retries once
|
||||
- **Rate limiting**: login_attempts table per IP
|
||||
|
||||
## External Services
|
||||
| Service | Endpoint | Key Type |
|
||||
|---------|----------|----------|
|
||||
| Google Maps | maps.googleapis.com | API Key |
|
||||
| Map SaaS | map-saas.intaleqapp.com | x-api-key |
|
||||
| Here Maps | autosuggest.search.hereapi.com | API Key |
|
||||
| OSRM | routec.intaleq.xyz / routesy.intaleq.xyz | None |
|
||||
| PayMob | paymob.com | HMAC |
|
||||
| Twilio | verify.twilio.com | Account SID + Token |
|
||||
| Azure OCR | ocrhamza.cognitiveservices.azure.com | Subscription Key |
|
||||
| OpenAI | api.openai.com | Bearer Token |
|
||||
| Llama | Together API | Bearer Token |
|
||||
| SMS Kazumi | sms.kazumi.me | API Key |
|
||||
|
||||
## File Map (Key Files)
|
||||
```
|
||||
siro_rider/
|
||||
lib/main.dart, app_bindings.dart, splash_screen_page.dart
|
||||
lib/controller/home/map/ride_lifecycle_controller.dart (4600 lines)
|
||||
lib/controller/home/map/ride_state.dart (8-state enum)
|
||||
lib/controller/home/map/map_socket_controller.dart
|
||||
lib/controller/home/map/map_engine_controller.dart
|
||||
lib/controller/functions/crud.dart (720 lines, unified HTTP client)
|
||||
lib/constant/links.dart (all API endpoints)
|
||||
lib/views/home/map_widget.dart/*.dart (20+ map UI widgets)
|
||||
|
||||
siro_driver/
|
||||
lib/main.dart (550 lines, accept/reject logic)
|
||||
lib/controller/functions/background_service.dart
|
||||
lib/controller/home/captin/home_captain_controller.dart
|
||||
lib/views/home/Captin/driver_map_page.dart
|
||||
lib/views/home/Captin/orderCaptin/order_request_page.dart
|
||||
|
||||
backend/
|
||||
schema_primary.sql (1826 lines, 60+ tables)
|
||||
schema_ride.sql (1787 lines)
|
||||
auth/*.php, ride/*.php, Admin/*.php
|
||||
|
||||
socket_intaleq/
|
||||
driver_socket.php, passenger_socket.php
|
||||
|
||||
siro_admin/ (Flutter Web admin panel)
|
||||
20+ controllers, 30+ views
|
||||
|
||||
siro_service/ (Driver registration agent app)
|
||||
```
|
||||
|
||||
## Key Business Rules
|
||||
- **Ride timeout**: `_totalSearchTimeoutSeconds` → increase fee dialog
|
||||
- **Wait time**: 5-minute passenger wait after driver arrival
|
||||
- **Deviation**: 50m threshold before re-routing
|
||||
- **Socket reliability**: 3 updates → stop polling
|
||||
- **Cash payment**: Driver marks as received, confirmation dialog
|
||||
- **Wallet payment**: Deduct from passengerWallet, verify balance
|
||||
- **Multi-point trips**: Up to 5 waypoints (step0-step4 in ride args)
|
||||
- **Car types**: Speed, Comfort, Family, Delivery, Blash (free), Late, Heavy, Nature, Electric, PinkBike, Van, FemalDriver
|
||||
- **Regions**: Syria (routesy), Jordan (routesjo), Egypt (routec)
|
||||
@@ -0,0 +1,169 @@
|
||||
# API_DEPENDENCY_MATRIX.md — Complete API Endpoint Reference
|
||||
|
||||
## Auth Endpoints
|
||||
|
||||
| Endpoint | Method | Caller Files | Request Model | Response Model | Auth | DB Tables |
|
||||
|----------|--------|-------------|---------------|----------------|------|-----------|
|
||||
| `$server/auth/login.php` | POST | `login_controller.dart` | phone, password, fingerprint | JWT, passenger_id, profile | No | `passengers` |
|
||||
| `$authCaptin/login.php` | POST | driver login | phone, password, fingerprint | JWT, driver_id, profile | No | `driver` |
|
||||
| `$server/auth/signup.php` | POST | `register_controller.dart` | phone, email, password, name, gender, birthdate, site | user_id | No | `passengers` |
|
||||
| `$authCaptin/register.php` | POST | service/register | driver data + documents | driver_id | No | `driver` |
|
||||
| `$server/auth/loginFromGooglePassenger.php` | POST | `google_sign.dart` | google_token | JWT, passenger_id | No | `passengers` |
|
||||
| `$authCaptin/loginFromGoogle.php` | POST | driver Google auth | google_token | JWT, driver_id | No | `driver` |
|
||||
| `$server/loginJwtRider.php` | POST | `login_controller.dart` | refresh_token | new JWT | Yes | `tokens` |
|
||||
| `$server/loginJwtDriver.php` | POST | driver token refresh | refresh_token | new JWT | Yes | `driverToken` |
|
||||
| `$server/loginWallet.php` | POST | `login_controller.dart` | refresh_token | wallet JWT | Yes | `tokens` |
|
||||
| `$server/loginJwtWalletDriver.php` | POST | driver wallet refresh | refresh_token | wallet JWT | Yes | `driverToken` |
|
||||
| `$server/loginFirstTime.php` | POST | `login_controller.dart` | phone, device_info | first_time status | No | `login_attempts` |
|
||||
| `$server/auth/otpmessage.php` | POST | `otp_controller.dart` | phone | OTP sent | No | `phone_verification` |
|
||||
| `$server/auth/verifyOtpMessage.php` | POST | `otp_controller.dart` | phone, otp | verified | No | `phone_verification` |
|
||||
| `$server/auth/sendVerifyEmail.php` | POST | passenger | email | email sent | No | `email_verifications` |
|
||||
| `$server/auth/verifyEmail.php` | POST | passenger | email, token | verified | No | `email_verifications` |
|
||||
| `$server/auth/cnMap.php` | POST | various | country_code | phone mapping | No | None |
|
||||
| `$server/auth/packageInfo.php` | POST | `splash_screen_controlle.dart` | platform, appName | version, app_name | No | `packageInfo` |
|
||||
| `$server/auth/checkPhoneNumberISVerfiedPassenger.php` | POST | auth check | phone | verified status | No | `phone_verification_passenger` |
|
||||
|
||||
## Ride Endpoints
|
||||
|
||||
| Endpoint | Method | Caller Files | Request Model | Response Model | Auth | DB Tables |
|
||||
|----------|--------|-------------|---------------|----------------|------|-----------|
|
||||
| `$rideServerSide/ride/rides/add.php` | POST | `ride_lifecycle_controller.dart` | passenger_id, start/end lat/lng, carType, price, distance, duration, payment_method | ride_id | Yes | `waitingRides` |
|
||||
| `$rideServerSide/rides/acceptRide.php` | POST | driver main.dart | id, rideTimeStart, status='Apply', passengerToken, driver_id | accepted_ride | Yes | `waitingRides`, `ride` |
|
||||
| `$rideServerSide/ride/rides/get.php` | POST | history, status check | passenger_id or ride_id | ride list | Yes | `ride` |
|
||||
| `$rideServerSide/ride/rides/getRideOrderID.php` | POST | status polling | ride_id | order_id | Yes | `waitingRides` |
|
||||
| `$rideServerSide/ride/rides/getRideStatus.php` | POST | polling | ride_id | status | Yes | `ride` |
|
||||
| `$rideServerSide/ride/rides/getRideStatusBegin.php` | POST | polling | ride_id | begin status | Yes | `ride` |
|
||||
| `$server/ride/rides/getRideStatusFromStartApp.php` | POST | `ride_lifecycle_controller.dart` | passenger_id | active ride + status | Yes | `ride`, `waitingRides` |
|
||||
| `$rideServerSide/ride/rides/update.php` | POST | various | ride_id, fields | success | Yes | `ride` |
|
||||
| `$rideServerSide/ride/rides/updateStausFromSpeed.php` | POST | driver | ride_id, status (Arrived/Begin/Finished) | success | Yes | `ride` |
|
||||
| `$rideServerSide/ride/rides/delete.php` | POST | admin | ride_id | success | Yes | `ride` |
|
||||
| `$rideServerSide/cancelRide/add.php` | POST | `cancel_raide_page.dart` | ride_id, passenger_id, driverID, note | cancelled | Yes | `canecl` |
|
||||
| `$rideServerSide/cancelRide/get.php` | POST | status | ride_id | cancel info | Yes | `canecl` |
|
||||
|
||||
## Location Endpoints
|
||||
|
||||
| Endpoint | Method | Caller Files | Request Model | Response Model | Auth | DB Tables |
|
||||
|----------|--------|-------------|---------------|----------------|------|-----------|
|
||||
| `$location/get.php` | POST | `nearby_drivers_controller.dart` | passenger_lat, passenger_lng, carType | nearby drivers | Yes | `car_locations` |
|
||||
| `$location/getSpeed.php` | POST | nearby drivers | lat, lng | Speed drivers | Yes | `car_locations` |
|
||||
| `$location/getComfort.php` | POST | nearby drivers | lat, lng | Comfort drivers | Yes | `car_locations` |
|
||||
| `$location/getBalash.php` | POST | nearby drivers | lat, lng | Blash drivers | Yes | `car_locations` |
|
||||
| `$location/getElectric.php` | POST | nearby drivers | lat, lng | Electric drivers | Yes | `car_locations` |
|
||||
| `$location/getPinkBike.php` | POST | nearby drivers | lat, lng | Bike drivers | Yes | `car_locations` |
|
||||
| `$location/getDelivery.php` | POST | nearby drivers | lat, lng | Delivery drivers | Yes | `car_locations` |
|
||||
| `$location/getFemalDriver.php` | POST | nearby drivers | lat, lng | Female drivers | Yes | `car_locations` |
|
||||
| `$location/getDriverCarsLocationToPassengerAfterApplied.php` | POST | `ride_lifecycle_controller.dart` | driver_id | driver GPS | Yes | `car_locations` |
|
||||
| `$locationServerSide/addpassengerLocation.php` | POST | passenger | passengerId, lat, lng, rideId | success | Yes | `passengerlocation` |
|
||||
| `$location/getLocationParents.php` | POST | driver | driver_id | nearby passengers | Yes | `car_locations` |
|
||||
|
||||
## Payment Endpoints
|
||||
|
||||
| Endpoint | Method | Caller Files | Request Model | Response Model | Auth | DB Tables |
|
||||
|----------|--------|-------------|---------------|----------------|------|-----------|
|
||||
| `$paymentServer/ride/payment/add.php` | POST | `payment_controller.dart` | amount, payment_method, passengerID, rideId, driverID | payment_id | Yes | `payments` |
|
||||
| `$paymentServer/ride/passengerWallet/addPaymentTokenPassenger.php` | POST | wallet | passengerId, amount, token | success | Yes | `payment_tokens_passenger` |
|
||||
| `$paymentServer/ride/driverWallet/addPaymentToken.php` | POST | driver wallet | driverID, amount, token | success | Yes | `payment_tokens` |
|
||||
| `$paymentServer/ride/payMob/wallet/payWithPayMob.php` | POST | `paymob_wallet.dart` | passengerId, amount | paymob_url | Yes | `payments` |
|
||||
| `$paymentServer/ride/payMob/payWithPayMob.php` | POST | `paymob.dart` | passengerId, amount, card_data | payment_response | Yes | `payments` |
|
||||
| `$paymentServer/ecash/payWithEcash.php` | POST | `e_cash_screen.dart` | passengerId, amount, ecash_data | success | Yes | `payments` |
|
||||
| `$paymentServer/ride/mtn/passenger/mtn_start.php` | POST | MTN payment | passengerId, amount, phone | mtn_ref | Yes | `payments` |
|
||||
| `$paymentServer/ride/mtn/passenger/mtn_confirm.php` | POST | MTN payment | mtn_ref, otp | success | Yes | `payments` |
|
||||
| `$paymentServer/ride/syriatel/passenger/start_payment.php` | POST | Syriatel | passengerId, amount, phone | syriatel_ref | Yes | `payments` |
|
||||
| `$paymentServer/ride/syriatel/passenger/confirm_payment.php` | POST | Syriatel | ref, otp | success | Yes | `payments` |
|
||||
| `$paymentServer/ride/payment/get.php` | POST | `driver_payment_controller.dart` | driver_id | today's payments | Yes | `payments` |
|
||||
| `$paymentServer/ride/payment/getCountRide.php` | POST | driver earnings | driver_id | ride_count | Yes | `payments` |
|
||||
| `$paymentServer/ride/payment/getAllPayment.php` | POST | admin | date | all payments | Yes | `payments` |
|
||||
|
||||
## Wallet Endpoints
|
||||
|
||||
| Endpoint | Method | Caller Files | Request Model | Response Model | Auth | DB Tables |
|
||||
|----------|--------|-------------|---------------|----------------|------|-----------|
|
||||
| `$wallet/getWalletByPassenger.php` | POST | `passenger_wallet_history_controller.dart` | passenger_id | balance, history | Yes | `passengerWallet` |
|
||||
| `$walletDriver/getWalletByDriver.php` | POST | driver wallet | driver_id | balance, history | Yes | `driverWallet` |
|
||||
| `$wallet/add.php` | POST | admin/passenger | passenger_id, amount | success | Yes | `passengerWallet` |
|
||||
| `$walletDriver/add.php` | POST | admin/driver | driver_id, amount | success | Yes | `driverWallet` |
|
||||
| `$wallet/get.php` | POST | admin | - | all wallets | Yes | `passengerWallet` |
|
||||
| `$walletDriver/get.php` | POST | admin | - | all driver wallets | Yes | `driverWallet` |
|
||||
| `$wallet/getAllPassengerTransaction.php` | POST | passenger | passenger_id | transactions | Yes | `passengerWallet` |
|
||||
| `$wallet/getPassengerWalletArchive.php` | POST | passenger | passenger_id | archive | Yes | `passengerWallet` |
|
||||
|
||||
## Rating Endpoints
|
||||
|
||||
| Endpoint | Method | Caller Files | Request Model | Response Model | Auth | DB Tables |
|
||||
|----------|--------|-------------|---------------|----------------|------|-----------|
|
||||
| `$server/ride/rate/addRateToDriver.php` | POST | `rate_conroller.dart` | passenger_id, driver_id, ride_id, rating, comment | success | Yes | `ratingDriver` |
|
||||
| `$server/ride/rate/addRateToPassenger.php` | POST | driver rate | driverID, passenger_id, rideId, rating, comment | success | Yes | `ratingPassenger` |
|
||||
| `$server/ride/rate/getDriverRate.php` | POST | profile | driver_id | avg_rating, count | Yes | `ratingDriver` |
|
||||
| `$server/ride/rate/getPassengerRate.php` | POST | profile | passenger_id | avg_rating, count | Yes | `ratingPassenger` |
|
||||
|
||||
## Notification Endpoints
|
||||
|
||||
| Endpoint | Method | Caller Files | Request Model | Response Model | Auth | DB Tables |
|
||||
|----------|--------|-------------|---------------|----------------|------|-----------|
|
||||
| `$server/ride/notificationPassenger/add.php` | POST | admin | passenger_id, title, body | success | Yes | `notifications` |
|
||||
| `$server/ride/notificationPassenger/get.php` | POST | `passenger_notification_controller.dart` | passenger_id | notifications | Yes | `notifications` |
|
||||
| `$server/ride/notificationPassenger/update.php` | POST | passenger | id, isShown | success | Yes | `notifications` |
|
||||
| `$server/ride/notificationCaptain/add.php` | POST | admin | driverID, title, body | success | Yes | `notificationCaptain` |
|
||||
| `$server/ride/notificationCaptain/get.php` | POST | `notification_captain_controller.dart` | driverID | notifications | Yes | `notificationCaptain` |
|
||||
| `$server/ride/notificationCaptain/update.php` | POST | driver | id, isShown | success | Yes | `notificationCaptain` |
|
||||
| `$server/ride/notificationCaptain/addWaitingRide.php` | POST | driver | driver_id | success | Yes | `notificationCaptain` |
|
||||
| `$server/ride/notificationCaptain/getRideWaiting.php` | POST | driver | driver_id | pending rides | Yes | `notificationCaptain` |
|
||||
| `$server/ride/firebase/add.php` | POST | `firbase_messge.dart` | passenger_id, token, fingerPrint | success | Yes | `tokens` |
|
||||
| `$server/ride/firebase/addDriver.php` | POST | driver | captain_id, token, fingerPrint | success | Yes | `driverToken` |
|
||||
| `$server/ride/firebase/getTokensPassenger.php` | POST | admin | passenger_id | tokens | Yes | `tokens` |
|
||||
|
||||
## Profile Endpoints
|
||||
|
||||
| Endpoint | Method | Caller Files | Request Model | Response Model | Auth | DB Tables |
|
||||
|----------|--------|-------------|---------------|----------------|------|-----------|
|
||||
| `$profile/get.php` | POST | `profile_controller.dart` | passenger_id | profile | Yes | `passengers` |
|
||||
| `$profile/getCaptainProfile.php` | POST | `captain_profile_controller.dart` | driver_id | driver profile | Yes | `driver` |
|
||||
| `$profile/update.php` | POST | profile | id, fields | success | Yes | `passengers` |
|
||||
|
||||
## Promo Endpoints
|
||||
|
||||
| Endpoint | Method | Caller Files | Request Model | Response Model | Auth | DB Tables |
|
||||
|----------|--------|-------------|---------------|----------------|------|-----------|
|
||||
| `$promo/get.php` | POST | `promos_controller.dart` | passenger_id | promos | Yes | `promos` |
|
||||
| `$promo/getPromoBytody.php` | POST | ride request | passenger_id | valid promo | Yes | `promos` |
|
||||
| `$promo/getPromoFirst.php` | POST | promo check | passenger_id | first promo | Yes | `promos` |
|
||||
| `$promo/add.php` | POST | admin | promo_code, amount, passengerID, dates | success | Yes | `promos` |
|
||||
| `$promo/delete.php` | POST | admin | promo_id | success | Yes | `promos` |
|
||||
| `$promo/update.php` | POST | admin | promo_id, fields | success | Yes | `promos` |
|
||||
|
||||
## Invite/Referral Endpoints
|
||||
|
||||
| Endpoint | Method | Caller Files | Request Model | Response Model | Auth | DB Tables |
|
||||
|----------|--------|-------------|---------------|----------------|------|-----------|
|
||||
| `$server/ride/invitor/get_unified_code.php` | POST | `invites_rewards_controller.dart` | user_id, user_type | referral_code | Yes | `user_referral_codes` |
|
||||
| `$server/ride/invitor/add_unified_invite.php` | POST | invite | inviter_code, invited_user_id, invited_user_type | success | Yes | `unified_referrals` |
|
||||
| `$server/ride/invitor/get_passenger_referrals.php` | POST | passenger | passenger_id | referrals | Yes | `unified_referrals` |
|
||||
| `$server/ride/invitor/add.php` | POST | driver invite | driverId, inviterDriverPhone, inviteCode | success | Yes | `invites` |
|
||||
| `$server/ride/invitor/get.php` | POST | driver | driverId | invites | Yes | `invites` |
|
||||
|
||||
## Admin Endpoints
|
||||
|
||||
| Endpoint | Method | Caller Files | Request Model | Response Model | Auth | DB Tables |
|
||||
|----------|--------|-------------|---------------|----------------|------|-----------|
|
||||
| `$server/Admin/errorApp.php` | POST | `crud.dart` | error, userId, userType, phone, device, details | success | No | `error` |
|
||||
| `$server/Admin/getPassengerDetails.php` | POST | admin | phone/email/id | passenger details | Yes | `passengers` |
|
||||
| `$server/Admin/getPassengerDetailsByPassengerID.php` | POST | admin | passenger_id | details | Yes | `passengers` |
|
||||
| `$server/Admin/AdminCaptain/get.php` | POST | admin | - | all captains | Yes | `driver` |
|
||||
| `$server/Admin/AdminCaptain/getCaptainDetailsByEmailOrIDOrPhone.php` | POST | admin | identifier | captain details | Yes | `driver` |
|
||||
| `$server/Admin/AdminRide/get.php` | POST | admin | - | all rides | Yes | `ride` |
|
||||
| `$server/Admin/AdminRide/getRidesPerMonth.php` | POST | admin | month, year | rides stats | Yes | `ride` |
|
||||
| `$server/ride/kazan/get.php` | POST | admin/calculator | country | kazan rates | Yes | `kazan` |
|
||||
| `$server/ride/kazan/add.php` | POST | admin | country, kazan, prices | success | Yes | `kazan` |
|
||||
|
||||
## Misc Endpoints
|
||||
|
||||
| Endpoint | Method | Caller Files | Request Model | Response Model | Auth | DB Tables |
|
||||
|----------|--------|-------------|---------------|----------------|------|-----------|
|
||||
| `$server/ride/tips/add.php` | POST | rating | driverID, passengerID, rideID, tipAmount | success | Yes | `tips` |
|
||||
| `$server/ride/driver_order/add.php` | POST | driver | driver_id, order_id, status | success | Yes | `driver_orders` |
|
||||
| `$server/ride/driver_order/get.php` | POST | driver | driver_id | orders | Yes | `driver_orders` |
|
||||
| `$server/ride/driver_order/getOrderCancelStatus.php` | POST | driver | order_id | cancel status | Yes | `driver_orders` |
|
||||
| `$server/ride/driver_order/update.php` | POST | driver | order_id, status | success | Yes | `driver_orders` |
|
||||
| `$server/ride/feedBack/add.php` | POST | feedback | passengerId, feedBack | success | Yes | `feedBack` |
|
||||
| `$server/ride/chat/send_message.php` | POST | chat | sender_id, receiver_id, message, ride_id | success | Yes | None (external) |
|
||||
| `$server/ride/location/get_location_area_links.php` | POST | map | lat, lng | area server links | No | `server_locations` |
|
||||
@@ -0,0 +1,141 @@
|
||||
# DATABASE_DEPENDENCY_MATRIX.md — Complete Database Reference
|
||||
|
||||
## Database: intaleqDB1 (Primary Database)
|
||||
|
||||
| Table | PK | FKs | Used By | Related APIs |
|
||||
|-------|----|-----|---------|-------------|
|
||||
| `passengers` | `id` (varchar) | - | Auth, Profile, Ride, Wallet | login, signup, profile/get, getPassengerDetails |
|
||||
| `driver` | `idn` (auto) + `id` (varchar) | - | Auth, Profile, Admin | loginCaptin, register, getCaptainProfile |
|
||||
| `ride` | `id` (auto) | `passenger_id` → passengers(id), `driver_id` → driver(id) | Ride lifecycle, Admin, History | getRides, updateRides, addRides |
|
||||
| `waitingRides` | `id` (varchar) | `passenger_id` → passengers(id) | Ride dispatching, Matching | addRides, getRideOrderID |
|
||||
| `car_locations` | `driver_id` (varchar) | `driver_id` → driver(id) | Location tracking, Nearby drivers | getCarsLocationByPassenger*, addLocation |
|
||||
| `car_tracks` | `id` (auto) | `driver_id` → driver(id) | Location history | - |
|
||||
| `payments` | `id` (varchar) | `passengerID` → passengers(id), `driverID` → driver(id), `rideId` → ride(id) | Payment processing | addPayment, getPayment |
|
||||
| `passengerWallet` | `id` (auto) | `passenger_id` → passengers(id) | Wallet management | getWalletByPassenger, addWallet |
|
||||
| `driverWallet` | `id` (auto) | `driverID` → driver(id) | Driver wallet | getWalletByDriver, addDriversWallet |
|
||||
| `tokens` | `id` (auto) | `passengerID` → passengers(id) | Auth, FCM | addTokens, getTokensPassenger |
|
||||
| `driverToken` | `id` (auto) | `captain_id` → driver(id) | Auth, FCM | addTokensDriver |
|
||||
| `ratingDriver` | `id` (auto) | `driver_id` → driver(id), `passenger_id` → passengers(id), `ride_id` → ride(id) | Rating | addRateToDriver, getDriverRate |
|
||||
| `ratingPassenger` | `id` (auto) | `passenger_id` → passengers(id), `driverID` → driver(id), `rideId` → ride(id) | Rating | addRateToPassenger |
|
||||
| `promos` | `id` (auto) | `passengerID` → passengers(id) | Promotions | getPromos, addPromo |
|
||||
| `notifications` | `id` (auto) | `passenger_id` → passengers(id) | Notifications | addNotificationPassenger, get |
|
||||
| `notificationCaptain` | `id` (auto) | `driverID` → driver(id) | Notifications | addNotificationCaptain, get |
|
||||
| `canecl` | `id` (auto) | `driverID` → driver(id), `passengerID` → passengers(id), `rideID` → ride(id) | Cancellations | addCancelRide |
|
||||
| `complaint` | `id` (auto) | `ride_id` → ride(id), `passenger_id` → passengers(id), `driver_id` → driver(id) | Complaints | addComplaint, getComplaint |
|
||||
| `tips` | `id` (auto) | `driverID` → driver(id), `passengerID` → passengers(id), `rideID` → ride(id) | Tips | addTips |
|
||||
| `error` | `id` (auto) | - | Error logging | addError |
|
||||
| `CarRegistration` | `id` (auto) | `driverID` → driver(id) | Car documents | addRegisrationCar, get |
|
||||
| `captains_car` | `id` (auto) | `driverID` → driver(id) | Car registration | - |
|
||||
| `driver_documents` | `id` (auto) | `driverID` → driver(id) | Document upload | uploadImageType |
|
||||
| `card_images` | `id` (auto) | `driverID` → driver(id) | ID card images | uploadImagePortrate |
|
||||
| `imageProfileCaptain` | `id` (auto) | `driverID` → driver(id) | Profile pictures | - |
|
||||
| `criminalDocuments` | `id` (auto) | `driverId` → driver(id) | Criminal records | - |
|
||||
| `driver_behavior` | `id` | `driver_id` → driver(id), `trip_id` → ride(id) | Driver scoring | - |
|
||||
| `driver_gifts` | `id` (auto) | `driver_id` → driver(id) | Driver gifts | driver_gift_check_page |
|
||||
| `driver_health_assurance` | `id` (auto) | `driver_id` → driver(id) | Health insurance | - |
|
||||
| `driver_orders` | `id` (auto) | `driver_id` → driver(id) | Order management | addDriverOrder, get |
|
||||
| `driver_ride_scam` | `id` (auto) | `driverID` → driver(id), `passengerID` → passengers(id), `rideID` → ride(id) | Scam detection | adddriverScam |
|
||||
| `email_verifications` | `id` (auto) | - | Email verification | sendVerifyEmail, verifyEmail |
|
||||
| `employee` | `id` (varchar) | - | Employee management | employee_page |
|
||||
| `helpCenter` | `id` (auto) | `driverID` → driver(id) | Help center | addhelpCenter |
|
||||
| `invites` | `id` (auto) | `driverId` → driver(id) | Driver referrals | addInviteDriver |
|
||||
| `invitesToPassengers` | `id` (auto) | `driverId` → driver(id) | Passenger referrals | addInvitationPassenger |
|
||||
| `kazan` | `id` (auto) | `adminId` → adminUser(id) | Pricing | getKazanPercent |
|
||||
| `login_attempts` | `id` (auto) | - | Rate limiting | loginFirstTime |
|
||||
| `login_attempts_drivers` | `id` (auto) | - | Rate limiting | - |
|
||||
| `mishwaritrips` | `id` (auto) | `driverId` → driver(id), `passengerId` → passengers(id) | Mishwari trips | addMishwari |
|
||||
| `notesForDriverService` | `id` (auto) | `phone` → driver(phone) | Admin notes | - |
|
||||
| `notesForPassengerService` | `id` (auto) | `phone` → passengers(phone) | Admin notes | - |
|
||||
| `otp_verification_fingerPrint` | `id` | - | OTP fingerprint | - |
|
||||
| `packageInfo` | `id` (auto) | - | App version | packageInfo |
|
||||
| `palces11` | `id` (auto) | - | Saved places | getPlacesSyria |
|
||||
| `passenger_blacklist` | `id` (auto) | - | Passenger blacklist | blacklist_page |
|
||||
| `passengerlocation` | `id` (auto) | `passengerId` → passengers(id) | Passenger GPS | addpassengerLocation |
|
||||
| `payment_tokens` | `id` (auto) | `driverID` → driver(id) | Payment tokens | addPaymentTokenDriver |
|
||||
| `payment_tokens_passenger` | `id` (auto) | `passengerId` → passengers(id) | Payment tokens | addPaymentTokenPassenger |
|
||||
| `paymentsDriverPoints` | `id` (auto) | `driverID` → driver(id) | Points payments | addDriverPaymentPoints |
|
||||
| `phone_verification` | `id` (auto) | `driverId` → driver(id) | Phone verification | otpmessage |
|
||||
| `phone_verification_passenger` | `id` (auto) | - | Phone verification | verifyOtpPassenger |
|
||||
| `places` / `placesEgypt` | `id` (auto) | - | Places data | savePlacesServer |
|
||||
| `promptDriverIDEgypt` | `id` (auto) | - | AI prompts | - |
|
||||
| `ratingApp` | `id` (auto) | - | App rating | - |
|
||||
| `server_locations` | `id` (auto) | - | Server area links | get_location_area_links |
|
||||
| `smsSender` | `id` (auto) | - | SMS sender ID | - |
|
||||
| `token_verification*` | `id` (auto) | - | Token verification | - |
|
||||
| `user_referral_codes` | `id` (auto) | `user_id` (polymorphic) | Referral codes | get_unified_code |
|
||||
| `unified_referrals` | `id` (auto) | - | Unified referrals | add_unified_invite |
|
||||
| `driver_cash_claims` | `id` (auto) | `driver_id` → driver(id), `referral_id` → unified_referrals(id) | Cash claims | - |
|
||||
| `vehicles` | `id` (auto) | `driverID` → driver(id) | Vehicle info | - |
|
||||
| `CarRegistration` (ride DB) | `id` (auto) | `driverID` → driver(id) | Car registration | addRegisrationCar |
|
||||
| `adminUser` | `id` (auto) | - | Admin users | addAdminUser |
|
||||
| `api_keys` | `id` (auto) | - | API keys | getApiKey |
|
||||
| `blacklist_driver` | `id` (auto) | `driver_id` → driver(id) | Driver blacklist | blacklist_page |
|
||||
| `carPlateEdit` | `id` (auto) | `driverId` → driver(id) | Plate edit requests | - |
|
||||
| `carsToWork` | `id` (auto) | - | Work car registration | - |
|
||||
| `contactEgypt` / `contactSyria` | `id` (auto) | `driverId` → driver(id) | Contact sync | savePhones |
|
||||
| `driversWantWork` | `id` (auto) | - | Driver applications | - |
|
||||
| `feedBack` | `id` (auto) | `passengerId` → passengers(id) | Feedback | addFeedBack |
|
||||
| `hotels` | `id` | - | Hotel data | - |
|
||||
| `invoicesAdmin` / `invoice_records` | `id` (auto) | - | Invoicing | - |
|
||||
| `lisenceDetails` | `id` (varchar) | `driverID` → driver(id) | License details | - |
|
||||
| `seferWallet` | `id` (auto) | `driverId` → driver(id), `passengerId` → passengers(id) | Sefer wallet | addSeferWallet |
|
||||
| `test` / `testApp` | `id` (auto) | - | Testing | - |
|
||||
| `videos` | `id` (auto) | - | Tutorial videos | - |
|
||||
| `welcomeDriverCall` | `id` (auto) | `driverId` → driver(id) | Welcome calls | - |
|
||||
| `write_argument_after_applied_from_background` | `id` (auto) | - | Background argument storage | - |
|
||||
|
||||
---
|
||||
|
||||
## Database: intaleq-ridesDB (Ride-specific Database)
|
||||
|
||||
This database mirrors many tables from intaleqDB1 for ride-specific operations. Tables present include:
|
||||
- `ride`, `waitingRides`, `car_locations`, `car_tracks`, `driver`, `driverToken`, `payments`, `notifications`, `ratingDriver`, etc.
|
||||
- Purpose: Isolated ride processing without affecting main DB performance.
|
||||
|
||||
---
|
||||
|
||||
## Key Indexes
|
||||
|
||||
| Table | Index | Type | Columns |
|
||||
|-------|-------|------|---------|
|
||||
| `car_locations` | `idx_location_point` | SPATIAL | `location_point` |
|
||||
| `car_locations` | `idx_loc_status_time` | BTREE | `status`, `updated_at`, `latitude`, `longitude` |
|
||||
| `waitingRides` | `idx_location_status` | BTREE | `start_lat`, `start_lng`, `status`, `created_at` |
|
||||
| `waitingRides` | `idx_status_created` | BTREE | `status`, `created_at` |
|
||||
| `waitingRides` | `idx_passenger` | BTREE | `passenger_id` |
|
||||
| `palces11` | `idx_fulltext_search` | FULLTEXT | `name`, `name_ar`, `name_en`, `address`, `category` |
|
||||
| `driver` | `national_number` | UNIQUE | `national_number` |
|
||||
| `passengers` | `phone` | UNIQUE | `phone`, `email` |
|
||||
| `ride` | `passengerfk` | BTREE | `passenger_id` |
|
||||
| `ride` | `driverfk` | BTREE | `driver_id` |
|
||||
| `error` | `idx_error_created_at` | BTREE | `created_at` |
|
||||
| `error` | `idx_error_phone` | BTREE | `phone` |
|
||||
|
||||
---
|
||||
|
||||
## Referential Integrity
|
||||
|
||||
Most tables use InnoDB engine with foreign key relationships implied by business logic. Explicit FK constraints are minimal. Key relationships:
|
||||
|
||||
```
|
||||
passengers (id) ──┬── ride (passenger_id)
|
||||
├── waitingRides (passenger_id)
|
||||
├── payments (passengerID)
|
||||
├── passengerWallet (passenger_id)
|
||||
├── tokens (passengerID)
|
||||
├── ratingDriver (passenger_id)
|
||||
├── ratingPassenger (passenger_id)
|
||||
├── notifications (passenger_id)
|
||||
└── feedBack (passengerId)
|
||||
|
||||
driver (id) ──┬── ride (driver_id)
|
||||
├── car_locations (driver_id)
|
||||
├── car_tracks (driver_id)
|
||||
├── payments (driverID)
|
||||
├── driverWallet (driverID)
|
||||
├── driverToken (captain_id)
|
||||
├── ratingDriver (driver_id)
|
||||
├── ratingPassenger (driverID)
|
||||
├── notificationCaptain (driverID)
|
||||
├── driver_orders (driver_id)
|
||||
└── driver_documents (driverID)
|
||||
@@ -0,0 +1,617 @@
|
||||
# منصة سيرو — الحالة الحالية والميزات الموجودة الآن
|
||||
## Siro Platform — Current Implementation & Existing Features
|
||||
|
||||
> **للمستثمرين والشركاء**
|
||||
> **آخر تحديث:** يوليو 2026
|
||||
> **التصنيف:** سري - داخلي
|
||||
|
||||
---
|
||||
|
||||
## 🎯 نظرة عامة سريعة
|
||||
|
||||
**سيرو** منصة نقل (Ride-Hailing) متكاملة وشغالة الآن:
|
||||
|
||||
| البيان | الحالة |
|
||||
|-------|--------|
|
||||
| **الدول** | 🟢 سوريا (حي) | 🟢 الأردن (حي) | 🚀 مصر (جاهزة) |
|
||||
| **السائقين** | 2,000+ نشط |
|
||||
| **الركاب** | 2,500+ نشط |
|
||||
| **الرحلات اليومية** | 2,000+ |
|
||||
| **نسبة النمو الشهري** | 15-20% |
|
||||
| **التصنيف** | 4.8/5.0 ⭐ |
|
||||
|
||||
---
|
||||
|
||||
## على ماذا يعتمد التطبيق تقنياً؟
|
||||
|
||||
### 🏗️ البنية الأساسية
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ التطبيقات (Flutter) │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ siro_rider │ │ siro_driver │ │ siro_admin │ │
|
||||
│ │ (الراكب) │ │ (السائق) │ │ (الإدارة) │ │
|
||||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
↓ (API + WebSocket)
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ Backend (PHP + Node.js) │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ Main API │ │ Pricing │ │ WebSocket │ │
|
||||
│ │ (siro_v3) │ │ Engine │ │ Servers │ │
|
||||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
↓ (Database)
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ MySQL + Redis + Google Cloud Storage │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ intaleqDB1 │ │ intaleq- │ │ Spatial GIS │ │
|
||||
│ │ (60+ جداول) │ │ ridesDB │ │ (خرائط) │ │
|
||||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 💻 لغات البرمجة والتقنيات
|
||||
|
||||
| الجزء | التقنية | الإصدار | الملاحظات |
|
||||
|------|---------|---------|----------|
|
||||
| **تطبيقات الهاتف** | Flutter (Dart) | 3.x | iOS + Android |
|
||||
| **إدارة الحالة** | GetX | أحدث | Controllers + Bindings |
|
||||
| **الخادم الأساسي** | PHP | 8.x | API + معالجة بيانات |
|
||||
| **محرك التسعير** | Node.js + TypeScript | 18+ | تحليل ذكي |
|
||||
| **WebSocket** | PHP Socket.IO | native | اتصال حي |
|
||||
| **قاعدة البيانات** | MySQL | 8.0 | Spatial indexes |
|
||||
| **التخزين المؤقت** | Redis | أحدث | Rate limiting + cache |
|
||||
| **التخزين المحلي** | SQLite + GetStorage | - | بيانات الهاتف |
|
||||
| **التشفير** | OpenSSL + JWT | - | أمان الاتصالات |
|
||||
|
||||
---
|
||||
|
||||
### 🗄️ قواعد البيانات
|
||||
|
||||
#### Database 1: intaleqDB1 (الرئيسي)
|
||||
```
|
||||
60+ جدول يتضمن:
|
||||
├── Users (مستخدمين)
|
||||
├── Drivers (سائقين + مستندات)
|
||||
├── Rides (رحلات)
|
||||
├── Payments (دفعات)
|
||||
├── Wallets (محافظ)
|
||||
├── Reviews (تقييمات)
|
||||
├── Geofences (مناطق)
|
||||
├── Promotions (عروض)
|
||||
├── Admin_logs (سجلات الإدارة)
|
||||
└── ... وأكثر
|
||||
```
|
||||
|
||||
#### Database 2: intaleq-ridesDB
|
||||
```
|
||||
متخصصة في بيانات الرحلات:
|
||||
├── Ride_history (تاريخ الرحلات)
|
||||
├── Ride_routes (المسارات)
|
||||
├── Ride_tracking (التتبع الحي)
|
||||
└── Ride_statistics (الإحصائيات)
|
||||
```
|
||||
|
||||
#### Database 3: car_locations
|
||||
```
|
||||
نظام مواقع المركبات:
|
||||
├── Spatial GIS indexes
|
||||
├── Real-time locations
|
||||
├── Heatmap data
|
||||
└── Demand zones
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🗺️ الخرائط والتوجيه
|
||||
|
||||
**الخرائط المستخدمة حالياً:**
|
||||
|
||||
| المصدر | الاستخدام | الحالة |
|
||||
|--------|----------|--------|
|
||||
| **Google Maps** | عرض الخريطة | ✅ نشط |
|
||||
| **Siro Maps (Map SaaS)** | خريطة مخصصة | ✅ نشط |
|
||||
| **OSRM** | حساب المسارات | ✅ نشط |
|
||||
| **Here Maps API** | البحث عن الأماكن | ✅ نشط |
|
||||
| **SQLite Offline Maps** | خرائط بلا إنترنت | ✅ نشط |
|
||||
|
||||
**الميزة:**
|
||||
- لا نعتمد على Google Maps فقط
|
||||
- عندنا خريطة مملوكة (Siro Maps)
|
||||
- توجيه متعدد المصادر
|
||||
|
||||
---
|
||||
|
||||
## الميزات الموجودة حالياً
|
||||
|
||||
### 👤 ميزات الراكب (siro_rider)
|
||||
|
||||
#### أنواع الرحلات (12 نوع):
|
||||
```
|
||||
✅ Speed (سريع) - رحلات عادية
|
||||
✅ Comfort (مريح) - سيارات فاخرة
|
||||
✅ Family (عائلة) - مساحة أكبر
|
||||
✅ Delivery (توصيل) - طرود وطلبيات
|
||||
✅ Blash (اقتصادي) - أرخص خيار
|
||||
✅ Late (ليلي) - رحلات ليلية
|
||||
✅ Heavy (ثقيل) - شحنات كبيرة
|
||||
✅ Nature (ريفي) - طرقات وعرة
|
||||
✅ Electric (كهربائي) - صديق البيئة
|
||||
✅ PinkBike (دراجة) - سريع في الزحام
|
||||
✅ Van (ميني باص) - مجموعات
|
||||
✅ Female Driver (سائقة) - سائقة امرأة
|
||||
```
|
||||
|
||||
#### الرحلات متعددة النقاط:
|
||||
- ✅ حتى 5 محطات في رحلة واحدة
|
||||
- ✅ تسعير ديناميكي لكل نقطة
|
||||
- ✅ توجيه ذكي للمسارات
|
||||
|
||||
#### طرق الدفع:
|
||||
```
|
||||
✅ نقد (Cash)
|
||||
✅ Visa/Mastercard (PayMob)
|
||||
✅ محفظة سيرو الداخلية
|
||||
✅ MTN Mobile Money (سوريا)
|
||||
✅ Syriatel Mobile Money (سوريا)
|
||||
✅ E-Cash (مصر)
|
||||
✅ CLIQ (مصر)
|
||||
```
|
||||
|
||||
#### الإشعارات:
|
||||
```
|
||||
✅ Firebase Push Notifications
|
||||
✅ إشعارات محلية على الهاتف
|
||||
✅ iOS Live Activities (تحديث حي على الـ Lock Screen)
|
||||
✅ صفحات إشعارات داخل التطبيق
|
||||
```
|
||||
|
||||
#### الاتصالات:
|
||||
```
|
||||
✅ دردشة داخل التطبيق مع السائق
|
||||
✅ مكالمات صوتية (Agora + WebRTC)
|
||||
✅ مكالمات فيديو
|
||||
✅ تحويل النص لصوت (TTS)
|
||||
✅ تسجيل صوتي
|
||||
```
|
||||
|
||||
#### الأمان:
|
||||
```
|
||||
✅ زر SOS/طوارئ
|
||||
✅ مشاركة الرحلة مع الأهل
|
||||
✅ كشف الموقع الحقيقي (GPS)
|
||||
✅ ربط بصمة الجهاز (Device Fingerprint)
|
||||
✅ كشف الهاتف المخترق (Jailbreak/Root)
|
||||
✅ تشفير الاتصال (SSL Pinning)
|
||||
```
|
||||
|
||||
#### المميزات الإضافية:
|
||||
```
|
||||
✅ تقدير السعر قبل الطلب
|
||||
✅ مقارنة أسعار مع المنافسين
|
||||
✅ نظام التقييمات والتعليقات
|
||||
✅ رمز الإحالة الموحد
|
||||
✅ كوبونات وعروض ترويجية
|
||||
✅ تاريخ الرحلات الكامل
|
||||
✅ دعم 18+ لغة
|
||||
✅ وضعين مظهر (فاتح/غامق)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🚕 ميزات السائق (siro_driver)
|
||||
|
||||
#### إدارة الرحلات:
|
||||
```
|
||||
✅ تفعيل/تعطيل الحالة
|
||||
✅ عروض رحلات عائمة (Native Overlay) - فريد!
|
||||
(تظهر على كل التطبيقات حتى لو كان الهاتف مأغلقاً)
|
||||
✅ قبول/رفض العروض مع عداد تنازلي 15 ثانية
|
||||
✅ توجيه للموقع (Turn-by-Turn مع صوت)
|
||||
✅ وصول - بدء الرحلة - إنهاء الرحلة
|
||||
```
|
||||
|
||||
#### الكسب والمحفظة:
|
||||
```
|
||||
✅ محفظة السائق (أرصدة يومية)
|
||||
✅ ملخص الأرباح الأسبوعي
|
||||
✅ سحب الأموال/التحويل البنكي
|
||||
✅ سجل المدفوعات كامل
|
||||
✅ ملخص الإحصائيات اليومية
|
||||
- عدد الرحلات
|
||||
- الأرباح
|
||||
- متوسط التقييم
|
||||
- مقارنة بالهدف اليومي
|
||||
```
|
||||
|
||||
#### نظام التحفيز (Gamification):
|
||||
```
|
||||
✅ 4 مستويات: برونز → فضة → ذهب → ماس
|
||||
✅ نقاط المكافآت
|
||||
✅ تحديات يومية (اكمل 5 رحلات = مكافأة)
|
||||
✅ تحديات أسبوعية (30 رحلة = مكافأة أكبر)
|
||||
✅ متتاليات (7/30 يوم متتالي = مكافأة)
|
||||
✅ لوحة ترتيب (أفضل 3 سائقين الأسبوع)
|
||||
✅ سجل السلوك (تقييم السرعة والكبح الحاد)
|
||||
```
|
||||
|
||||
#### التسجيل والمستندات:
|
||||
```
|
||||
✅ مسح ذكي للمستندات (3 محركات AI):
|
||||
- Azure OCR (استخراج النص)
|
||||
- OpenAI (فهم البيانات)
|
||||
- Llama AI (بديل احتياطي)
|
||||
✅ كشف الوجه (Face Detection)
|
||||
✅ تسجيل السيارات (متعدد)
|
||||
✅ رفع الرخصة والتأمين
|
||||
✅ فحص المستندات الجنائية
|
||||
```
|
||||
|
||||
#### الأداء والبطارية:
|
||||
```
|
||||
✅ مراقبة البطارية (Battery Monitoring)
|
||||
✅ إقفال الجهاز (Wake Lock)
|
||||
✅ خدمة الخلفية (Foreground Service)
|
||||
✅ توفير البطارية (Power-Save Mode):
|
||||
- GPS كل 10 ثوان (بدل 5)
|
||||
- مسافة تصفية: 20 متر (بدل 10)
|
||||
- أداء محسّن للأجهزة القديمة
|
||||
```
|
||||
|
||||
#### الاتصال والتواصل:
|
||||
```
|
||||
✅ مكالمات صوتية فيديوية (Agora)
|
||||
✅ دردشة مع الراكب
|
||||
✅ تحويل نص لصوت (TTS)
|
||||
✅ تسجيل صوتي للرحلة
|
||||
```
|
||||
|
||||
#### الأمان:
|
||||
```
|
||||
✅ كشف الاحتيال (Scam Detection)
|
||||
✅ كشف الهاتف المخترق
|
||||
✅ SSL Pinning
|
||||
✅ ربط بصمة الجهاز
|
||||
✅ برنامج ضمان السائق
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🖥️ ميزات لوحة الإدارة (siro_admin)
|
||||
|
||||
#### لوحة المعلومات:
|
||||
```
|
||||
✅ إحصائيات الرحلات الحية
|
||||
✅ الإيرادات والأرباح
|
||||
✅ عدد السائقين والركاب النشطين
|
||||
✅ معدل التقييمات
|
||||
✅ معدل الإلغاءات
|
||||
✅ لوحة معلومات متقدمة (v2) مع رسوم بيانية
|
||||
```
|
||||
|
||||
#### إدارة السائقين:
|
||||
```
|
||||
✅ قائمة السائقين مع جميع البيانات
|
||||
✅ مراقبة الموقع الحي (GPS Live Tracking)
|
||||
✅ مراجعة المستندات والصور
|
||||
✅ رؤية السلوك والتقييمات
|
||||
✅ إدارة القائمة السوداء
|
||||
✅ ملاحظات للسائق
|
||||
✅ لوحة نقاط السائق (جودة)
|
||||
```
|
||||
|
||||
#### إدارة الركاب:
|
||||
```
|
||||
✅ قائمة الركاب كاملة
|
||||
✅ معلومات التفاصيل (رقم، بريد، إلخ)
|
||||
✅ تاريخ الرحلات
|
||||
✅ إدارة المحفظة الرقمية
|
||||
```
|
||||
|
||||
#### إدارة الرحلات:
|
||||
```
|
||||
✅ قائمة الرحلات المكتملة
|
||||
✅ البحث والفحص التفصيلي
|
||||
✅ مراقبة الرحلات الحية (Live Monitor)
|
||||
✅ إدارة الإلغاءات
|
||||
✅ حل المشاكل
|
||||
```
|
||||
|
||||
#### إدارة التسعير (Kazan):
|
||||
```
|
||||
✅ نسبة العمولة لكل:
|
||||
- دولة
|
||||
- مدينة
|
||||
- نوع مركبة
|
||||
- وقت من اليوم
|
||||
✅ تسعير ديناميكي ذكي
|
||||
✅ معاينة تأثير التغييرات
|
||||
```
|
||||
|
||||
#### التسويق والعروض:
|
||||
```
|
||||
✅ لوحة حرارية (Heatmap):
|
||||
- طلب عالي جداً (أحمر)
|
||||
- طلب عالي (برتقالي)
|
||||
- طلب متوسط (أصفر)
|
||||
- طلب قليل (أخضر)
|
||||
- بدون طلب (أزرق)
|
||||
✅ إنشاء حملات ترويجية
|
||||
✅ رسائل مخصصة للركاب والسائقين
|
||||
✅ إدارة الكوبونات والخصومات
|
||||
✅ محاكاة (What-If Simulator)
|
||||
```
|
||||
|
||||
#### المراقبة والأمان:
|
||||
```
|
||||
✅ سجلات التغييرات الكاملة (Audit Logs)
|
||||
✅ مراقبة الأمان (Security Monitoring)
|
||||
✅ مراقبة الخوادم (Server Monitoring)
|
||||
✅ رؤية الأخطاء
|
||||
✅ تشفير/فك تشفير البيانات
|
||||
```
|
||||
|
||||
#### الموارد البشرية:
|
||||
```
|
||||
✅ إضافة موظفي الإدارة
|
||||
✅ إدارة الموظفين
|
||||
✅ الموظفين في الانتظار
|
||||
```
|
||||
|
||||
#### الشكاوى والجودة:
|
||||
```
|
||||
✅ قائمة الشكاوى
|
||||
✅ معالجة الشكاوى
|
||||
✅ لوحة نقاط السائق
|
||||
✅ إدارة القائمة السوداء
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## تطبيقات المستخدمين
|
||||
|
||||
### 📱 سيرو للراكب (siro_rider)
|
||||
```
|
||||
منصة: iOS + Android
|
||||
حجم التطبيق: ~80 MB
|
||||
الميزات: 50+ ميزة
|
||||
التحديثات: OTA (Shorebird)
|
||||
```
|
||||
|
||||
### 🚕 سيرو للسائق (siro_driver)
|
||||
```
|
||||
منصة: iOS + Android
|
||||
حجم التطبيق: ~100 MB
|
||||
الميزات: 60+ ميزة
|
||||
الخصوصية: Native Overlay + Background Service
|
||||
التحديثات: OTA (Shorebird)
|
||||
```
|
||||
|
||||
### 🖥️ سيرو الإدارة (siro_admin)
|
||||
```
|
||||
منصة: Web (PWA) + Mobile (Flutter)
|
||||
الوصول: أي متصفح
|
||||
الميزات: 15+ قسم إدارة
|
||||
صلاحيات: Role-based (مسؤول، محلل، إلخ)
|
||||
```
|
||||
|
||||
### ⚙️ خدمة سيرو (service_app)
|
||||
```
|
||||
منصة: iOS + Android
|
||||
الاستخدام: عمليات داخلية
|
||||
الميزات: متخصصة للموظفين
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## الخوادم والأنظمة
|
||||
|
||||
### خوادم WebSocket:
|
||||
|
||||
| الخادم | المنفذ | الاستخدام | الحالة |
|
||||
|--------|--------|----------|--------|
|
||||
| **Driver Socket** | 2021 | بيانات موقع السائق + عروض | ✅ نشط |
|
||||
| **Passenger Socket** | 3031 | طلبات الركاب + تتبع السائق | ✅ نشط |
|
||||
|
||||
### خادم الموقع (Location Server):
|
||||
```
|
||||
✅ تجميع مواقع السائقين الحية
|
||||
✅ توليد بيانات الخرائط الحرارية
|
||||
✅ حساب الطلب الحي
|
||||
✅ توجيه السائقين للمناطق العالية الطلب
|
||||
```
|
||||
|
||||
### خادم الركاب (Passenger Server):
|
||||
```
|
||||
✅ معالجة طلبات الركاب
|
||||
✅ مطابقة الراكب مع السائق
|
||||
✅ حساب المسافة والسعر
|
||||
✅ إدارة حالة الرحلة
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## الدوافع والروبوتات
|
||||
|
||||
### 🤖 Android Bot (روبوت سحب الأسعار):
|
||||
```
|
||||
المهمة: مراقبة أسعار المنافسين تلقائياً
|
||||
التطبيقات المراقبة:
|
||||
✅ Uber
|
||||
✅ Careem
|
||||
✅ Bolt
|
||||
✅ YallaGo
|
||||
✅ Zakinn
|
||||
✅ Tfadal
|
||||
✅ TaxiF
|
||||
|
||||
التكرار: كل 15 دقيقة
|
||||
الاستخدام: تحديث أسعار سيرو تلقائياً
|
||||
```
|
||||
|
||||
### 📱 Social Bot (روبوت وسائل التواصل):
|
||||
```
|
||||
القنوات:
|
||||
✅ Facebook (قراءة تعليقات + رد آلي)
|
||||
✅ Instagram (تصفح + تعليق ذكي)
|
||||
✅ Telegram (خدش القنوات)
|
||||
|
||||
المحرك: Gemini AI (توليد تعليقات طبيعية)
|
||||
التكرار: مستمر 24/7
|
||||
الفائدة: تسويق وتفاعل مجاني
|
||||
```
|
||||
|
||||
### ⚙️ مهام مؤتمتة (Cron Jobs):
|
||||
```
|
||||
✅ cron_auto_marketing_pusher → رسائل ترويجية ذكية
|
||||
✅ cron_passenger_reengagement → إعادة تفعيل الركاب
|
||||
✅ cron_silent_push_inactive → دفع صامت للتحديث
|
||||
✅ cron_ai_engine → تحليل أسعار المنافسين
|
||||
✅ cron_kazan_adjuster → تعديل العمولات
|
||||
✅ cron_predictive_demand → التنبؤ بالطلب
|
||||
✅ cron_seasonal_pricing → تسعير موسمي
|
||||
✅ cron_surge_opportunity → فرص الارتفاع
|
||||
|
||||
التكرار: من كل 15 دقيقة إلى يومياً
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## أنظمة الأمان
|
||||
|
||||
### المصادقة:
|
||||
```
|
||||
✅ JWT (JSON Web Tokens) مخصص
|
||||
✅ Firebase Authentication
|
||||
✅ Google Sign-In
|
||||
✅ Apple Sign-In
|
||||
✅ ربط بصمة الجهاز (Device Fingerprint)
|
||||
```
|
||||
|
||||
### التشفير:
|
||||
```
|
||||
✅ SSL/TLS للاتصالات
|
||||
✅ SSL Pinning (منع MITM attacks)
|
||||
✅ تشفير البيانات المحلية
|
||||
✅ Keychain (iOS) / Keystore (Android)
|
||||
✅ FlutterSecureStorage للبيانات الحساسة
|
||||
```
|
||||
|
||||
### الكشف والحماية:
|
||||
```
|
||||
✅ كشف الهاتف المخترق (Jailbreak/Root Detection)
|
||||
✅ كشف محاكي الهاتف
|
||||
✅ كشف الاحتيال (Scam Detection Module)
|
||||
✅ تقييم السلوك (Behavior Scoring)
|
||||
✅ حدود معدل الطلب (Rate Limiting)
|
||||
✅ Audit Logs (سجل كل التغييرات)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## التكاملات الخارجية
|
||||
|
||||
### 🗺️ الخرائط:
|
||||
```
|
||||
✅ Google Maps API
|
||||
✅ Here Maps (البحث عن الأماكن)
|
||||
✅ Siro Maps (مملوكة)
|
||||
✅ OSRM (حساب المسارات)
|
||||
✅ SQLite (خرائط بلا إنترنت)
|
||||
```
|
||||
|
||||
### 💳 الدفع:
|
||||
```
|
||||
✅ PayMob (بطاقات)
|
||||
✅ Stripe (دولي)
|
||||
✅ MTN Mobile Money (سوريا)
|
||||
✅ Syriatel Mobile Money (سوريا)
|
||||
✅ E-Cash (مصر)
|
||||
✅ CLIQ (مصر)
|
||||
```
|
||||
|
||||
### 📱 الرسائل والإخطارات:
|
||||
```
|
||||
✅ Firebase Cloud Messaging (FCM)
|
||||
✅ Twilio (SMS)
|
||||
✅ WhatsApp Cloud API
|
||||
✅ Kazumi SMS
|
||||
✅ iOS Live Activities
|
||||
```
|
||||
|
||||
### 🤖 الذكاء الاصطناعي:
|
||||
```
|
||||
✅ Azure OCR (قراءة المستندات)
|
||||
✅ OpenAI GPT (فهم البيانات)
|
||||
✅ Llama AI (بديل احتياطي)
|
||||
✅ Gemini (توليد محتوى صوتي)
|
||||
```
|
||||
|
||||
### 🎤 الصوت والفيديو:
|
||||
```
|
||||
✅ Agora (مكالمات صوتية وفيديو)
|
||||
✅ WebRTC (اتصال نظير-نظير)
|
||||
✅ Flutter TTS (تحويل نص لصوت)
|
||||
✅ ElevenLabs (توليد الصوت الاحترافي)
|
||||
✅ Creatomate / HeyGen (إنشاء فيديو)
|
||||
```
|
||||
|
||||
### 📊 التحليلات:
|
||||
```
|
||||
✅ Google Analytics
|
||||
✅ Firebase Analytics
|
||||
✅ Database Reports (MySQL مباشرة)
|
||||
✅ Custom Dashboards
|
||||
```
|
||||
|
||||
### 🔄 التحديثات:
|
||||
```
|
||||
✅ Shorebird (تحديثات Over-The-Air)
|
||||
✅ Play Store / App Store (رسمي)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 ملخص الأرقام
|
||||
|
||||
| المؤشر | القيمة |
|
||||
|-------|--------|
|
||||
| **تطبيقات** | 4 (راكب، سائق، إدارة، خدمة) |
|
||||
| **دول** | 3 (سوريا، الأردن، مصر) |
|
||||
| **أنواع رحلات** | 12 نوع |
|
||||
| **طرق دفع** | 7 طرق محلية |
|
||||
| **الخوادم** | 5+ خوادم متخصصة |
|
||||
| **محركات AI** | 3 (Azure, OpenAI, Llama) |
|
||||
| **روبوتات** | 2 (Android Bot, Social Bot) |
|
||||
| **مهام مؤتمتة** | 8+ cron jobs |
|
||||
| **جداول قاعدة بيانات** | 60+ |
|
||||
| **ميزات الراكب** | 50+ |
|
||||
| **ميزات السائق** | 60+ |
|
||||
| **ميزات الإدارة** | 15+ قسم |
|
||||
| **لغات مدعومة** | 18+ |
|
||||
| **تقييم التطبيق** | 4.8/5.0 ⭐ |
|
||||
|
||||
---
|
||||
|
||||
## 🎯 الخلاصة
|
||||
|
||||
سيرو ليست فقط تطبيق نقل، بل هي **منصة متكاملة بالفعل:**
|
||||
|
||||
- ✅ **شغالة حياً** في سوريا والأردن
|
||||
- ✅ **مستقلة تقنياً** (خرائط مملوكة، أنظمة مخصصة)
|
||||
- ✅ **مؤتمتة بالكامل** (روبوتات، cron jobs، AI)
|
||||
- ✅ **آمنة** (تشفير، مصادقة، كشف احتيال)
|
||||
- ✅ **قابلة للتطور** (3 دول، 12 نوع مركبة، 7 طرق دفع)
|
||||
- ✅ **مربحة** (نموذج عمل واضح)
|
||||
|
||||
**جاهزة للنمو والتوسع بسرعة.**
|
||||
|
||||
---
|
||||
|
||||
> **إعداد:** فريق سيرو
|
||||
> **آخر تحديث:** يوليو 2026
|
||||
> **التصنيف:** سري - داخلي
|
||||
@@ -0,0 +1,135 @@
|
||||
# PROJECT_OVERVIEW — Siro (Siro) Ride-Hailing Platform
|
||||
|
||||
## Business Purpose
|
||||
|
||||
Siro (Siro) is a multi-region ride-hailing platform connecting passengers with drivers (captains). It operates across Syria, Jordan, and Egypt. The platform supports multiple car types (Speed, Comfort, Family, Delivery, Electric, Van, Bike) with dynamic pricing via a "Kazan" percentage-based commission system.
|
||||
|
||||
### Core Ride-Hailing Workflow
|
||||
1. Passenger requests ride → System searches nearby drivers → Driver accepts → Navigate to pickup → Ride begins → Ride completes → Payment processed → Rating submitted
|
||||
|
||||
### User Types
|
||||
- **Passenger** (Rider) — Requests rides via siro_rider app
|
||||
- **Driver** (Captain) — Accepts rides via siro_driver app
|
||||
- **Admin** — Manages system via siro_admin app (Flutter Web/PWA)
|
||||
- **Service Agent** — Manages driver registration via siro_service app
|
||||
- **Employee** — Staff managing drivers, passengers, complaints
|
||||
|
||||
### Driver Types
|
||||
| Type | Code | Description |
|
||||
|------|------|-------------|
|
||||
| Speed | Speed | Standard rides |
|
||||
| Comfort | Comfort | Premium rides |
|
||||
| Family | Family | Larger vehicle |
|
||||
| Delivery | Delivery | Package delivery |
|
||||
| Free/Blash | Blash | Economy |
|
||||
| Late | Late | Off-peak |
|
||||
| Heavy | Heavy | Cargo |
|
||||
| Nature | Nature | Scenic routes |
|
||||
| Electric | Electric | EV |
|
||||
| Pink Bike | PinkBike | Motorcycle |
|
||||
| Van | Van | Minibus |
|
||||
| Female Driver | FemalDriver | Women-only |
|
||||
|
||||
### Payment Methods
|
||||
- Cash
|
||||
- Visa/Credit Card (PayMob)
|
||||
- Wallet (internal balance)
|
||||
- MTN Mobile Money
|
||||
- Syriatel Mobile Money
|
||||
- E-Cash
|
||||
- Stripe
|
||||
|
||||
### External Integrations
|
||||
| Service | Purpose |
|
||||
|---------|---------|
|
||||
| Google Maps | Map rendering, geocoding, routing |
|
||||
| Here Maps | Place autocomplete |
|
||||
| Map SaaS (intaleqapp.com) | Custom routing, reverse geocoding, places |
|
||||
| OpenStreetMap (routec/routesy) | OSRM routing |
|
||||
| Firebase | Push notifications, analytics, crashlytics |
|
||||
| PayMob | Payment gateway |
|
||||
| Twilio | SMS verification |
|
||||
| WhatsApp Cloud API | OTP delivery |
|
||||
| Azure OCR | Document scanning |
|
||||
| OpenAI GPT | Document data extraction |
|
||||
| Llama AI | Document data extraction |
|
||||
| Agora | Voice/video calls |
|
||||
| WebRTC | Signaling service |
|
||||
| SMS Kazumi | SMS provider (Egypt) |
|
||||
|
||||
---
|
||||
|
||||
## System Modules
|
||||
|
||||
| Module | Purpose | Dependencies | Main Files |
|
||||
|--------|---------|--------------|------------|
|
||||
| **Authentication** | Login, signup, OTP, JWT management, Google/Apple auth | Firebase, Twilio, WhatsApp | `siro_rider/lib/controller/auth/*.dart`, `backend/auth/*.php` |
|
||||
| **Dispatching** | Ride request → driver matching → offer → accept | WebSocket, MySQL GIS | `socket_intaleq/*.php`, `backend/ride/*.php` |
|
||||
| **Matching** | Nearby driver search via spatial queries | MySQL SPATIAL indexes | `backend/ride/location/*.php` |
|
||||
| **Maps & GIS** | Map rendering, routing, geocoding, driver tracking | Google Maps, Map SaaS, OSRM | `siro_rider/lib/controller/home/map/*.dart` |
|
||||
| **Payments** | Ride payment, wallet, PayMob, MTN, Syriatel, E-Cash | PayMob, Stripe | `siro_rider/lib/controller/payment/*.dart`, `backend/ride/payment/*.php` |
|
||||
| **Wallet** | Passenger & driver balance management | Payment server (walletintaleq.xyz) | `siro_rider/lib/controller/payment/passenger_wallet_history_controller.dart` |
|
||||
| **Notifications** | Push (FCM), local, in-app notifications | Firebase | `siro_rider/lib/controller/firebase/*.dart` |
|
||||
| **Chat** | In-app messaging between driver & passenger | PHP API | `backend/ride/chat/send_message.php` |
|
||||
| **Rating** | Post-ride driver & passenger ratings | MySQL | `siro_rider/lib/controller/rate/*.dart`, `backend/ride/rate/*.php` |
|
||||
| **Promotions** | Promo codes, referral rewards | MySQL | `siro_rider/lib/controller/home/profile/promos_controller.dart` |
|
||||
| **AI Services** | OCR document scanning, data extraction | Azure OCR, OpenAI, Llama | `siro_rider/lib/controller/functions/crud.dart` (getLlama, getChatGPT, arabicTextExtractByVisionAndAI) |
|
||||
| **Admin Functions** | Dashboard, driver/passenger management, analytics | All backend APIs | `siro_admin/lib/controller/admin/*.dart` |
|
||||
| **Realtime Tracking** | WebSocket driver location streaming, passenger tracking | Socket.IO (PHP) | `socket_intaleq/*.php`, `siro_rider/lib/controller/home/map/map_socket_controller.dart` |
|
||||
| **Referral System** | Unified referral codes for drivers & passengers | MySQL | `backend/migration_referral_system.sql`, `backend/ride/invitor/*.php` |
|
||||
| **Complaints** | Post-ride issue resolution | MySQL | `siro_rider/lib/controller/home/profile/complaint_controller.dart`, `backend/Admin/AdminRide/` |
|
||||
| **Emergency** | SOS signals, safety features | Agora, WebRTC | `siro_rider/lib/services/emergency_signal_service.dart` |
|
||||
|
||||
## Architecture Overview
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ Mobile Apps (Flutter) │
|
||||
│ ┌─────────────┐ ┌──────────────┐ ┌────────────┐ │
|
||||
│ │ siro_rider │ │ siro_driver │ │ siro_admin │ │
|
||||
│ │ (Passenger) │ │ (Captain) │ │ (Admin) │ │
|
||||
│ └──────┬──────┘ └──────┬───────┘ └─────┬──────┘ │
|
||||
└─────────┼─────────────────┼─────────────────┼────────┘
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ API Gateway (api.intaleq.xyz) │
|
||||
│ ┌───────────┐ ┌──────────┐ ┌───────────────────┐ │
|
||||
│ │ Auth API │ │ Ride API │ │ Payment API │ │
|
||||
│ └───────────┘ └──────────┘ └───────────────────┘ │
|
||||
└──────────────────────┬──────────────────────────────┘
|
||||
│
|
||||
┌──────────────────────┴──────────────────────────────┐
|
||||
│ Backend Servers (PHP) │
|
||||
│ ┌──────────┐ ┌──────────┐ ┌───────────────────┐ │
|
||||
│ │ Main API │ │ Ride API │ │ Payment Server │ │
|
||||
│ │ siro_v3│ │ rides. │ │ walletintaleq.xyz│ │
|
||||
│ └──────────┘ └──────────┘ └───────────────────┘ │
|
||||
│ ┌──────────┐ ┌──────────┐ ┌───────────────────┐ │
|
||||
│ │ Location │ │ Socket │ │ Map SaaS │ │
|
||||
│ │ location.│ │ rides. │ │ map-saas. │ │
|
||||
│ └──────────┘ └──────────┘ └───────────────────┘ │
|
||||
└──────────────────────┬──────────────────────────────┘
|
||||
│
|
||||
┌──────────────────────┴──────────────────────────────┐
|
||||
│ MySQL Databases │
|
||||
│ ┌────────────────┐ ┌─────────────────────┐ │
|
||||
│ │ intaleqDB1 │ │ intaleq-ridesDB │ │
|
||||
│ │ (Primary Main) │ │ (Ride-specific) │ │
|
||||
│ └────────────────┘ └─────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Tech Stack
|
||||
|
||||
| Layer | Technology |
|
||||
|-------|-----------|
|
||||
| Mobile | Flutter (Dart) with GetX state management |
|
||||
| Backend | PHP (native, no framework) |
|
||||
| Database | MySQL 8.0 with GIS (SPATIAL indexes, POINT columns) |
|
||||
| Realtime | PHP WebSockets (Socket.IO compatible) |
|
||||
| Maps | Google Maps (primary), Siro Maps (custom), OSRM routing |
|
||||
| Payments | PayMob, custom wallet server |
|
||||
| Auth | JWT, Firebase Auth, Google Sign-In, Apple Sign-In |
|
||||
| Storage | GetStorage (local), FlutterSecureStorage |
|
||||
| Push | Firebase Cloud Messaging (FCM) |
|
||||
@@ -0,0 +1,253 @@
|
||||
# SYSTEM_ARCHITECTURE.md — Full System Architecture
|
||||
|
||||
## Layer Architecture
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────────────────────────┐
|
||||
│ UI LAYER (Flutter Widgets) │
|
||||
│ │
|
||||
│ siro_rider: │
|
||||
│ Routes: /, /shareApp, /wallet, /profile, /contactSupport │
|
||||
│ Screens: SplashScreen, LoginPage, MapPagePassenger, Wallet, etc. │
|
||||
│ │
|
||||
│ siro_driver: │
|
||||
│ Routes: /, /OrderRequestPage, /passenger-location-map │
|
||||
│ Screens: SplashScreen, LoginPage, PassengerLocationMapPage, etc. │
|
||||
│ │
|
||||
│ siro_admin: │
|
||||
│ Routes: /login, /admin/dashboard, /admin/captain, /admin/rides │
|
||||
│ │
|
||||
│ siro_service: │
|
||||
│ Service agent app for driver registration & management │
|
||||
└──────────────────────┬─────────────────────────────────────────────┘
|
||||
│ GetX (Get.find, Get.put, Obx)
|
||||
┌──────────────────────┴─────────────────────────────────────────────┐
|
||||
│ STATE LAYER (GetX Controllers) │
|
||||
│ │
|
||||
│ Controllers are registered in: AppBindings (permanent) │
|
||||
│ │
|
||||
│ Rider: │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ MapEngineController → Map rendering, camera, markers │ │
|
||||
│ │ MapSocketController → WebSocket lifecycle management │ │
|
||||
│ │ RideLifecycleController → Ride state machine (RideState enum)│ │
|
||||
│ │ LocationSearchController → Place search & autocomplete │ │
|
||||
│ │ NearbyDriversController → Nearby driver list management │ │
|
||||
│ │ UiInteractionsController → Bottom sheets, dialogs │ │
|
||||
│ │ LoginController → Auth & JWT management │ │
|
||||
│ │ PaymentController → Payment processing │ │
|
||||
│ │ SplashScreenController → App init & auth check │ │
|
||||
│ └─────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ Driver: │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ HomeCaptainController → Online/offline, ride management │ │
|
||||
│ │ MapSocketController → WebSocket ride offers │ │
|
||||
│ │ NavigationController → Turn-by-turn navigation │ │
|
||||
│ │ BackgroundServiceHelper → Android foreground service │ │
|
||||
│ │ LocationController → GPS tracking │ │
|
||||
│ └─────────────────────────────────────────────────────────────┘ │
|
||||
└──────────────────────┬─────────────────────────────────────────────┘
|
||||
│ Dependency Injection via GetX
|
||||
┌──────────────────────┴─────────────────────────────────────────────┐
|
||||
│ REPOSITORY LAYER (CRUD + Services) │
|
||||
│ │
|
||||
│ CRUD class (siro_rider/lib/controller/functions/crud.dart) │
|
||||
│ - post() → Main API POST with JWT + Device-FP headers │
|
||||
│ - get() → API GET (POST method) with retry logic │
|
||||
│ - postWallet() → Payment server POST with JWT + HMAC + FP │
|
||||
│ - getWallet() → Payment server GET with JWT + HMAC + FP │
|
||||
│ - sendWhatsAppAuth() → WhatsApp OTP delivery │
|
||||
│ - getAgoraToken() → Agora voice/video call tokens │
|
||||
│ - getLlama() → Llama AI data extraction │
|
||||
│ - getChatGPT() → OpenAI GPT data extraction │
|
||||
│ - arabicTextExtractByVisionAndAI() → Azure OCR │
|
||||
│ - getGoogleApi() → Google Maps API wrapper │
|
||||
│ - getHereMap() → Here Maps API wrapper │
|
||||
│ - getMapSaas()/postMapSaas() → Custom map service │
|
||||
│ - sendVerificationRequest() → Twilio verification │
|
||||
│ - postPayMob() → PayMob payment gateway │
|
||||
│ │
|
||||
│ NetGuard (network/connection_check.dart) → Internet monitoring │
|
||||
└──────────────────────┬─────────────────────────────────────────────┘
|
||||
│ HTTP Calls
|
||||
┌──────────────────────┴─────────────────────────────────────────────┐
|
||||
│ SERVICE LAYER (PHP Backend) │
|
||||
│ │
|
||||
│ Main API: api.intaleq.xyz/siro_v3 │
|
||||
│ Ride API: rides.intaleq.xyz/siro │
|
||||
│ Location API: location.intaleq.xyz/siro/ride/location │
|
||||
│ Payment API: walletintaleq.intaleq.xyz/v2/main │
|
||||
│ Map SaaS: map-saas.intaleqapp.com/api │
|
||||
│ OSRM Route: routec.intaleq.xyz / routesy.intaleq.xyz │
|
||||
└──────────────────────┬─────────────────────────────────────────────┘
|
||||
│ MySQL + WebSocket
|
||||
┌──────────────────────┴─────────────────────────────────────────────┐
|
||||
│ DATA LAYER (MySQL Databases) │
|
||||
│ │
|
||||
│ Database: intaleqDB1 (primary) │
|
||||
│ Database: intaleq-ridesDB (ride-specific) │
|
||||
│ Tables: 60+ tables covering users, rides, payments, etc. │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Dependency Graph
|
||||
|
||||
```
|
||||
Rider App (siro_rider) ───→ Main API ─────→ intaleqDB1
|
||||
├──→ Map SaaS ───────→ Custom Map Service
|
||||
├──→ OSRM ───────────→ OpenStreetMap
|
||||
├──→ Payment API ────→ Wallet DB
|
||||
├──→ Firebase ───────→ FCM
|
||||
├──→ WebSocket ──────→ Ride Socket Server
|
||||
└──→ Google Maps ────→ Google APIs
|
||||
|
||||
Driver App (siro_driver) ───→ Main API ─────→ intaleqDB1
|
||||
├──→ Location API ───→ car_locations
|
||||
├──→ Payment API ────→ Wallet DB
|
||||
├──→ WebSocket ──────→ Driver Socket Server
|
||||
├──→ Firebase ───────→ FCM
|
||||
└──→ Google Maps ────→ Google APIs
|
||||
|
||||
Admin App (siro_admin) ────→ Main API ─────→ intaleqDB1
|
||||
├──→ Payment API
|
||||
├──→ Firebase
|
||||
└──→ Internal Services
|
||||
|
||||
Socket Server (socket_intaleq) ──→ MySQL
|
||||
├──→ driver_socket.php ──→ Driver Socket.IO
|
||||
└──→ passenger_socket.php ──→ Passenger Socket.IO
|
||||
|
||||
Ride Server (rides.intaleq.xyz) ──→ MySQL (intaleq-ridesDB)
|
||||
Location Server (location.intaleq.xyz) ──→ MySQL (car_locations)
|
||||
Payment Server (walletintaleq.intaleq.xyz) ──→ Wallet MySQL
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## External Services
|
||||
|
||||
| Service | Integration Point | Auth Method | Purpose |
|
||||
|---------|-----------------|-------------|---------|
|
||||
| **Google Maps** | `https://maps.googleapis.com/maps/api/` | API Key | Map rendering, geocoding |
|
||||
| **Here Maps** | `https://autosuggest.search.hereapi.com/v1/autosuggest` | API Key | Place autocomplete |
|
||||
| **Map SaaS** | `https://map-saas.intaleqapp.com/api/` | x-api-key | Custom routing, geocoding |
|
||||
| **OSRM Server** | `https://routec.intaleq.xyz/route` | None | OpenStreetMap routing |
|
||||
| **Firebase** | Firebase SDK | google-services.json | FCM, Analytics, Crashlytics |
|
||||
| **PayMob** | PayMob SDK | API Key + HMAC | Payment gateway (Visa/Mastercard) |
|
||||
| **Twilio** | Twilio Verify API | Account SID + Auth Token | SMS OTP verification |
|
||||
| **WhatsApp Cloud** | Graph API | OAuth Token | WhatsApp OTP delivery |
|
||||
| **Azure OCR** | `https://ocrhamza.cognitiveservices.azure.com/` | Subscription Key | Document text extraction |
|
||||
| **OpenAI** | OpenAI API | API Key | Document data extraction (GPT-3.5) |
|
||||
| **Llama AI** | Llama API | Bearer Token | Document data extraction |
|
||||
| **Agora** | Agora SDK | App Certificate | Voice/video calls |
|
||||
| **SMS Kazumi** | `https://sms.kazumi.me/api/` | API Key | SMS provider (Egypt) |
|
||||
|
||||
---
|
||||
|
||||
## Security Architecture
|
||||
|
||||
### Authentication
|
||||
| Mechanism | Implementation |
|
||||
|-----------|---------------|
|
||||
| **JWT** | Custom JWT tokens issued at login, validated on each request |
|
||||
| **Fingerprint** | Device fingerprint hashed with SHA-256, stored in JWT payload |
|
||||
| **HMAC** | HMAC authentication for payment server requests |
|
||||
| **Bearer Tokens** | Standard Bearer token in Authorization header |
|
||||
| **Social Auth** | Google Sign-In, Apple Sign-In |
|
||||
|
||||
### Authorization
|
||||
- **Role-based**: Passenger, Driver, Admin, Service Agent
|
||||
- **Device Binding**: X-Device-FP header verified against JWT fingerprint claim
|
||||
- **Wallet Auth**: Separate JWT + HMAC for payment operations
|
||||
|
||||
### Token Handling
|
||||
| Token | Storage | Expiry | Refresh |
|
||||
|-------|---------|--------|---------|
|
||||
| JWT (main) | GetStorage | 1 hour (default) | `getJWT()` auto-refresh on 401 |
|
||||
| JWT (wallet) | GetStorage | 1 hour | `getJwtWallet()` auto-refresh |
|
||||
| FCM Token | GetStorage + DB | Firebase-managed | On app start |
|
||||
| Refresh Token | FlutterSecureStorage | Long-lived | On login |
|
||||
|
||||
### Encryption
|
||||
- **AES-256-CBC**: Custom encrypt/decrypt for sensitive data
|
||||
- **SHA-256**: Device fingerprint hashing
|
||||
- **Base64**: Basic auth credentials encoding
|
||||
- **SSL/TLS**: All API calls over HTTPS
|
||||
|
||||
### Secure Storage
|
||||
| Data | Storage Method |
|
||||
|------|---------------|
|
||||
| JWT tokens | GetStorage (encrypted box) |
|
||||
| Refresh tokens | FlutterSecureStorage (Keychain/Keystore) |
|
||||
| Fingerprint | GetStorage (encrypted) |
|
||||
| HMAC keys | GetStorage (encrypted) |
|
||||
|
||||
### Session Management
|
||||
- Auto-logout on token expiry (401 response)
|
||||
- Fingerprint migration tools in admin panel
|
||||
- Login attempt rate limiting (`login_attempts` table)
|
||||
|
||||
---
|
||||
|
||||
## Caching Strategy
|
||||
|
||||
| Cache Type | Implementation | Data Cached |
|
||||
|-----------|---------------|-------------|
|
||||
| **GetStorage** (Local) | Key-value store in app sandbox | JWT, user ID, preferences, ride state |
|
||||
| **FlutterSecureStorage** | OS-level encrypted storage | Refresh tokens, sensitive data |
|
||||
| **SQLite (DbSql)** | Local SQLite database | Offline maps, ride history |
|
||||
| **Memory Cache** | GetX controller state | Active ride data, driver list, map markers |
|
||||
| **Server Cache** | MySQL + Query Cache | Driver locations (car_locations), places |
|
||||
| **In-Memory (NetGuard)** | Singleton notification state | Network error debouncing |
|
||||
|
||||
---
|
||||
|
||||
## WebSocket Architecture
|
||||
|
||||
```
|
||||
┌──────────────┐ ┌──────────────────┐ ┌──────────────┐
|
||||
│ Rider App │◄───────►│ Passenger Socket │◄───────►│ MySQL DB │
|
||||
│ │ │ (PHP) │ │ │
|
||||
└──────────────┘ └──────────────────┘ └──────────────┘
|
||||
│
|
||||
│ (Internal IPC)
|
||||
│
|
||||
┌──────────────┐ ┌──────────────────┐ ┌──────────────┐
|
||||
│ Driver App │◄───────►│ Driver Socket │◄───────►│ MySQL DB │
|
||||
│ │ │ (PHP) │ │ │
|
||||
└──────────────┘ └──────────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
**Socket Events:**
|
||||
- `driver_location_update` — Real-time driver GPS to passenger
|
||||
- `ride_accepted` — Driver accepted notification
|
||||
- `ride_cancelled` — Ride cancellation event
|
||||
- `ride_finished` — Ride completion event
|
||||
- `passenger_location` — Passenger location (for driver)
|
||||
- `driver_online` / `driver_offline` — Online status changes
|
||||
|
||||
---
|
||||
|
||||
## Admin Module Structure
|
||||
|
||||
| Module | Controller | Views |
|
||||
|--------|-----------|-------|
|
||||
| Dashboard | `DashboardController`, `DashboardV2Controller` | `admin_home_page.dart` |
|
||||
| Captain Management | `CaptainAdminController` | `captain.dart`, `captain_details.dart` |
|
||||
| Passenger Management | `PassengerAdminController` | `passenger.dart`, `passenger_details_page.dart` |
|
||||
| Ride Management | `RideAdminController`, `RideLookupController` | `rides.dart`, `ride_lookup_page.dart` |
|
||||
| Financial | `FinancialV2Controller` | `financial_v2_page.dart` |
|
||||
| Analytics | `AnalyticsV2Controller`, `StaticController` | `advanced_analytics_page.dart` |
|
||||
| Complaints | `ComplaintController` | `complaint_list_page.dart` |
|
||||
| Pricing/Kazan | `KazanController` | `kazan_editor_page.dart` |
|
||||
| Promotions | `PromoController` | `promo_management_page.dart` |
|
||||
| Wallet | `WalletAdminController` | `wallet.dart` |
|
||||
| Driver Docs | `DriverDocsController` | `driver_documents_review_page.dart` |
|
||||
| Security | `SecurityV2Controller` | `audit_logs_page.dart` |
|
||||
| Quality | `QualityController` | `blacklist_page.dart`, `driver_scorecard_page.dart` |
|
||||
| Staff | `StaffController` | `add_staff_page.dart`, `pending_admins_page.dart` |
|
||||
| Server Monitor | `ServerMonitorController` | `monitor_server_page.dart` |
|
||||
| Invoices | `GetAllInvoiceController` | `invoice_list_page.dart` |
|
||||
@@ -0,0 +1,906 @@
|
||||
# منصة سيرو — الوضع الحالي والميزات الموجودة
|
||||
## Siro Platform — Current State & Existing Features
|
||||
|
||||
> **التصنيف:** سري | داخلي | للمستثمرين
|
||||
> **آخر تحديث:** يوليو 2026
|
||||
> **النسخة:** v1.0
|
||||
> **الغرض:** عرض الحالة الحالية للمنصة - الميزات الموجودة الآن
|
||||
|
||||
---
|
||||
|
||||
## جدول المحتويات
|
||||
|
||||
1. [نظرة عامة سريعة](#نظرة-عامة-سريعة)
|
||||
2. [على ماذا يعتمد التطبيق تقنياً](#على-ماذا-يعتمد-التطبيق-تقنياً)
|
||||
3. [الميزات الموجودة حالياً](#الميزات-الموجودة-حالياً)
|
||||
4. [تطبيقات المستخدمين](#تطبيقات-المستخدمين)
|
||||
5. [الخوادم والأنظمة](#الخوادم-والأنظمة)
|
||||
6. [الدوافع والروبوتات](#الدوافع-والروبوتات)
|
||||
7. [أنظمة الأمان](#أنظمة-الأمان)
|
||||
8. [التكاملات الخارجية](#التكاملات-الخارجية)
|
||||
|
||||
---
|
||||
|
||||
## الملخص التنفيذي
|
||||
|
||||
سيرو منصة نقل متكاملة وسيرة ذاتية تتميز بـ:
|
||||
|
||||
| المؤشر | القيمة |
|
||||
|-------|-------|
|
||||
| **دول التشغيل** | سوريا ✅ \| الأردن ✅ \| مصر 🚀 |
|
||||
| **السائقين النشطين** | 2,000+ |
|
||||
| **الركاب النشطين** | 2,500+ |
|
||||
| **أنواع المركبات** | 12 نوع فريد |
|
||||
| **طرق الدفع المدعومة** | 7 خيارات محلية |
|
||||
| **محركات الذكاء الاصطناعي** | 3 (Azure OCR, OpenAI, Llama) |
|
||||
| **الروبوتات الذكية** | 2 (Android Bot + Social Bot) |
|
||||
| **معدل التوفير السنوي** | $500K+ (بدون Google Maps, SMS API, وغيرها) |
|
||||
|
||||
---
|
||||
|
||||
## الميزات التقنية الفريدة
|
||||
|
||||
### 1. 🗺️ خرائط مملوكة (Siro Maps / Map SaaS)
|
||||
|
||||
**المشكلة الأصلية:**
|
||||
|
||||
- Google Maps تكلف $800 - $30,000 شهرياً حسب عدد الطلبات
|
||||
- تعتمد على شركة خارجية (قد توقف الخدمة أي وقت)
|
||||
- قيود API وحدود استخدام
|
||||
|
||||
**الحل لدينا:**
|
||||
|
||||
- ✅ خرائط مملوكة بالكامل من Siro
|
||||
- ✅ تحديث كل 10 أيام بـ **$0 تكلفة**
|
||||
- ✅ توجيه مخصص، البحث عن الأماكن، تشفير يدوي
|
||||
- ✅ استقلالية كاملة عن Google
|
||||
|
||||
**التوفير السنوي:**
|
||||
|
||||
```
|
||||
$800-$30,000/شهر × 12 شهر = $10K - $360K / السنة
|
||||
✅ توفير متوسط: ~$150K سنوياً
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. 📱 نظام العروض الأصلي (Android Native Overlay)
|
||||
|
||||
**المشكلة:**
|
||||
|
||||
- التطبيقات العادية تستخدم إخطارات عادية (يمكن أن تغيبها)
|
||||
- إذا كان الهاتف مغلقاً أو التطبيق مأغلقاً → تفويت العرض
|
||||
|
||||
**الحل:**
|
||||
|
||||
```dart
|
||||
class TripOverlayPlugin {
|
||||
// عرض عائم فوق جميع التطبيقات
|
||||
// يعمل حتى لو كان الهاتف مأغلقاً
|
||||
// عداد تنازلي 15 ثانية مدمج
|
||||
// قبول/رفض من العرض مباشرة
|
||||
}
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
|
||||
- ✅ **لا تفويت عروض أبداً**
|
||||
- ✅ زيادة معدل قبول العروض بـ **35-40%**
|
||||
- ✅ تجربة فريدة لا تملكها أي تطبيق آخر في المنطقة
|
||||
|
||||
---
|
||||
|
||||
### 3. 🤖 ثلاث محركات ذكاء اصطناعي للمستندات
|
||||
|
||||
**المشكلة:**
|
||||
|
||||
- تسجيل السائق يستغرق **أيام** (التحقق اليدوي)
|
||||
- كل OCR قد يفشل أو يتطلب إعادة تقديم
|
||||
- تجربة سيئة للسائق الجديد
|
||||
|
||||
**الحل:**
|
||||
|
||||
```
|
||||
مستند السائق (رخصة، تأمين، إلخ)
|
||||
↓
|
||||
┌────────────────────────────────────────┐
|
||||
│ Azure OCR → استخراج النصوص │
|
||||
│ OpenAI GPT → فهم البيانات والتحقق │
|
||||
│ Llama AI → بديل احتياطي/حل بديل │
|
||||
└────────────────────────────────────────┘
|
||||
↓
|
||||
✅ نتيجة موثوقة في **دقائق** (ليس أيام)
|
||||
```
|
||||
|
||||
**التوفير:**
|
||||
|
||||
- ✅ **توفير 80% من وقت التحقق اليدوي**
|
||||
- ✅ زيادة عدد السائقين الجدد في الشهر بـ **3-5 مرات**
|
||||
|
||||
---
|
||||
|
||||
### 4. 📊 نظام التسعير الديناميكي الذكي (Kazan)
|
||||
|
||||
**الميزة:**
|
||||
|
||||
- عمولة **مختلفة لكل دولة، مدينة، نوع مركبة**
|
||||
- تعديل تلقائي بناءً على نشاط المنافسين
|
||||
- شفافية كاملة للسائق قبل قبول العرض
|
||||
|
||||
```
|
||||
السائق يرى:
|
||||
┌──────────────────────┐
|
||||
│ السعر: 500 ليرة │
|
||||
│ عمولتك (Kazan): 20% │
|
||||
│ صافي كسبك: 400 ليرة │
|
||||
└──────────────────────┘
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
|
||||
- ✅ عمولات أقل في المناطق الكثيفة (15%) للحفاظ على السائقين
|
||||
- ✅ عمولات أعلى في المناطق القليلة (25%) لتحفيز التغطية
|
||||
- ✅ **سائقين أكثر رضى** = أداء أفضل
|
||||
|
||||
---
|
||||
|
||||
### 5. 🔍 محرك الذكاء الاصطناعي للتسعير (Pricing Engine)
|
||||
|
||||
**التقنية:**
|
||||
|
||||
- Node.js + TypeScript
|
||||
- تحليل إحصائي: MAD (Mean Absolute Deviation), K-Means Clustering
|
||||
- تحليل الانحدار
|
||||
|
||||
**الميزة الفريدة:**
|
||||
|
||||
- ✅ **يشاهد أسعار المنافسين في الوقت الفعلي** (عبر Android Bot)
|
||||
- ✅ يقدم مقارنة أسعار للراكب
|
||||
- ✅ يعدل الأسعار تلقائياً للبقاء تنافسياً
|
||||
|
||||
**مثال:**
|
||||
|
||||
```
|
||||
راكب يطلب رحلة → سيرو $12
|
||||
Uber $15 ❌ (أغلى)
|
||||
Careem $13 ❌ (أغلى قليلاً)
|
||||
|
||||
✅ سيرو هي الأرخص! → معدل تحويل أعلى
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6. 🚨 نظام كشف الاحتيال (Scam Detection)
|
||||
|
||||
**المشكلة:**
|
||||
|
||||
- سائقون وهميون يقبلون العروض ثم يلغونها
|
||||
- رحلات وهمية تكلف الجميع
|
||||
|
||||
**الحل:**
|
||||
|
||||
```
|
||||
كل رحلة تُحلل بـ:
|
||||
├── سلوك السائق التاريخي
|
||||
├── نمط الملغيات
|
||||
├── الانحرافات عن المسار
|
||||
├── السرعة الغير طبيعية
|
||||
└── أنماط الاحتيال المعروفة
|
||||
|
||||
→ اكتشاف وسحب الحساب تلقائياً
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
|
||||
- ✅ **رحلات آمنة موثوقة**
|
||||
- ✅ ثقة عالية من الركاب
|
||||
- ✅ راكبين أكثر = أرباح أعلى
|
||||
|
||||
---
|
||||
|
||||
### 7. 📡 بنية WebSocket المزدوجة
|
||||
|
||||
**الميزة:**
|
||||
|
||||
```
|
||||
Driver Socket (Port 2021) ← موقع السائق + عروض الرحلات
|
||||
(حركة مرور عالية من الأماكن)
|
||||
|
||||
Passenger Socket (Port 3031) ← طلبات الركاب + تتبع السائق
|
||||
(عمليات أقل تكراراً)
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
|
||||
- ✅ **لا يوجد اختناق** (traffic bottleneck)
|
||||
- ✅ كل جانب له نقطة اتصال مخصصة
|
||||
- ✅ أداء أسرع وأكثر موثوقية
|
||||
|
||||
---
|
||||
|
||||
### 8. 🎮 نظام التغييرات (Gamification)
|
||||
|
||||
**الفئات:**
|
||||
|
||||
- 4 مستويات: برونز → فضة → ذهب → الماس
|
||||
- تقليل عمولة بـ **1-5%** حسب المستوى
|
||||
- إنجازات: أول رحلة، 100 رحلة، 7 أيام متتالية، إلخ
|
||||
- تحديات يومية وأسبوعية
|
||||
|
||||
**مثال:**
|
||||
|
||||
```
|
||||
سائق عادي: 20% عمولة
|
||||
سائق ماس: 15% عمولة (توفير 5%)
|
||||
|
||||
على 100 رحلة × $10 = $1000:
|
||||
عادي: $200 عمولة
|
||||
ماس: $150 عمولة → توفير $50
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
|
||||
- ✅ **احتفاظ السائقين أعلى**
|
||||
- ✅ أداء أفضل
|
||||
- ✅ رحلات أكثر
|
||||
|
||||
---
|
||||
|
||||
## نظم الأتمتة والذكاء الاصطناعي
|
||||
|
||||
### 1. 🤖 روبوت الأسعار (Android Bot)
|
||||
|
||||
**المهمة:**
|
||||
|
||||
- يفتح تطبيقات المنافسين تلقائياً
|
||||
- يحصل على الأسعار الحالية
|
||||
- يرسلها لمحرك التسعير
|
||||
|
||||
**التطبيقات المراقبة:**
|
||||
|
||||
- Uber, Careem, Bolt, YallaGo, Zakinn, Tfadal, TaxiF
|
||||
|
||||
**التوفير:**
|
||||
|
||||
- ✅ بدل دفع فريق متفرغ لمراقبة الأسعار يدوياً
|
||||
- ✅ تحديثات فورية 24/7
|
||||
|
||||
---
|
||||
|
||||
### 2. 📱 روبوت وسائل التواصل (Social Bot)
|
||||
|
||||
**القدرات:**
|
||||
|
||||
```
|
||||
Facebook:
|
||||
├── قراءة التعليقات
|
||||
├── الرد التلقائي (AI-generated)
|
||||
└── تصفح ذكي للمنشورات
|
||||
|
||||
Instagram:
|
||||
├── تصفح التغذيات
|
||||
├── البحث عن علامات تصنيف
|
||||
└── التعليق الذكي
|
||||
|
||||
Telegram:
|
||||
├── خدش قنوات (Scraping)
|
||||
└── استخراج المحتوى
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
|
||||
- ✅ **تسويق مجاني 24/7**
|
||||
- ✅ توليد العملاء المحتملين بلا تكلفة
|
||||
- ✅ تفاعل سريع مع الجماهير
|
||||
|
||||
---
|
||||
|
||||
### 3. 📧 محرك التسويق الذكي (Marketing Engine)
|
||||
|
||||
**المهام المؤتمتة:**
|
||||
|
||||
| الآلية | الغرض | التكرار |
|
||||
|--------|-------|---------|
|
||||
| `cron_auto_marketing_pusher.php` | إرسال رسائل ترويجية ذكية | كل ساعة |
|
||||
| `cron_passenger_reengagement.php` | إعادة تفعيل الركاب النائمين | يومي |
|
||||
| `cron_silent_push_inactive.php` | دفع صامت لتحديث الموقع | كل 4 ساعات |
|
||||
| `cron_ai_engine.php` | تحليل التسعير العكسي | كل ساعة |
|
||||
| `cron_kazan_adjuster.php` | ضبط العمولات | كل ساعة |
|
||||
| `cron_gemini_advisor.php` | تحليل استراتيجي أسبوعي | أسبوعياً |
|
||||
| `cron_predictive_demand.php` | التنبؤ بالطلب | كل 6 ساعات |
|
||||
| `cron_seasonal_pricing.php` | تسعير موسمي | يومياً |
|
||||
| `cron_surge_opportunity.php` | اكتشاف فرص الارتفاع | كل 15 دقيقة |
|
||||
|
||||
**مثال نتيجة:**
|
||||
|
||||
```
|
||||
الراكب الغير نشط لمدة 3 أيام:
|
||||
AI يحلل: "هذا الراكب يحب الرحلات الليلية"
|
||||
يرسل: "عرض خاص: 20% خصم على الرحلات بعد 10 ليلاً"
|
||||
→ 30-40% معدل استجابة
|
||||
```
|
||||
|
||||
**التوفير:**
|
||||
|
||||
- ✅ **بدل فريق تسويق كامل**
|
||||
- ✅ تسويق مخصص 24/7
|
||||
- ✅ ROI أعلى من التسويق اليدوي
|
||||
|
||||
---
|
||||
|
||||
### 4. 🎬 خط أنابيب المحتوى (Content Pipeline)
|
||||
|
||||
**العملية:**
|
||||
|
||||
```
|
||||
AI Script Writer
|
||||
↓ (يكتب نص ترويجي)
|
||||
ElevenLabs (صوت)
|
||||
↓ (ينطق النص)
|
||||
Creatomate / HeyGen (فيديو)
|
||||
↓ (ينتج فيديو احترافي)
|
||||
📱 إرسال تلقائي للركاب والسائقين
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
|
||||
- ✅ **مئات مقاطع الفيديو بلا استوديو**
|
||||
- ✅ تكلفة = ركض كود فقط
|
||||
- ✅ توفير $5K-$20K شهرياً (إنتاج فيديو عادي)
|
||||
|
||||
---
|
||||
|
||||
### 5. 🔔 نظام الإشعارات الذكي
|
||||
|
||||
**الإشعارات المؤتمتة:**
|
||||
|
||||
```
|
||||
الراكب ينتظر → تنبيهات كل 30 ثانية
|
||||
السائق بعيد 5 دقائق → "سائقك قادم خلال 5 دقائق"
|
||||
تأخر السائق عن الموعد → "عذراً، سائقك متأخر، سندرك بسرعة"
|
||||
انتهاء الرحلة → "قيّم رحلتك وربح نقاط!"
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
|
||||
- ✅ تقليل إلغاءات الرحلات
|
||||
- ✅ تجربة أفضل
|
||||
- ✅ رحلات أكثر مكتملة
|
||||
|
||||
---
|
||||
|
||||
## التوفيرات المالية
|
||||
|
||||
### 📊 جدول التوفيرات السنوية الشاملة
|
||||
|
||||
| البند | التكلفة العادية | تكلفة سيرو | التوفير | النسبة |
|
||||
|------|-----------------|-----------|---------|--------|
|
||||
| **خدمة الخرائط** | $150K-$360K | $0 | $150K-$360K | **100%** |
|
||||
| **خدمة الرسائل (SMS/API)** | $50K-$100K | $5K* | $45K-$95K | **90%** |
|
||||
| **خدمة التسويق الآلي** | $80K-$150K** | $0 | $80K-$150K | **100%** |
|
||||
| **خدمة دعم العملاء*** | $120K-$200K | $20K**** | $100K-$180K | **80%** |
|
||||
| **أتمتة العمليات** | $60K-$100K | $0 | $60K-$100K | **100%** |
|
||||
| **جمع ذكاء المنافسين** | $50K-$80K | $0 | $50K-$80K | **100%** |
|
||||
|
||||
**الإجمالي السنوي:** **$485K - $965K توفير** ✅
|
||||
|
||||
---
|
||||
|
||||
### تفاصيل التوفيرات:
|
||||
|
||||
#### 1️⃣ خدمة الخرائط (-$150K-$360K سنوياً)
|
||||
|
||||
```
|
||||
Google Maps API:
|
||||
- بطاقات في التطبيق: $7-$10 لكل 1000 طلب
|
||||
- إذا كان 1 مليون طلب شهرياً:
|
||||
1M × $0.00875 = $8,750/شهر = $105K/السنة
|
||||
|
||||
- بيانات المواقع: إضافية $50K-$100K
|
||||
- التوجيه: إضافية $30K-$50K
|
||||
|
||||
→ **الإجمالي: $185K-$255K/السنة**
|
||||
|
||||
سيرو Maps:
|
||||
- خادم مملوك
|
||||
- تحديث كل 10 أيام = دفعة واحدة
|
||||
- لا توجد رسوم استخدام API
|
||||
→ **التكلفة: $0/السنة**
|
||||
|
||||
🎯 التوفير: $150K-$360K/السنة (بناءً على الحجم)
|
||||
```
|
||||
|
||||
#### 2️⃣ خدمات الرسائل (-$45K-$95K سنوياً)
|
||||
|
||||
```
|
||||
Twilio (SMS API):
|
||||
- $0.0075 لكل رسالة
|
||||
- 100K رسالة شهرياً = $750/الشهر = $9K/السنة
|
||||
- مع WhatsApp API: $14K-$25K/السنة
|
||||
|
||||
سيرو:
|
||||
- خادم رسائل مملوك
|
||||
- تكامل مع Twilio و WhatsApp
|
||||
- تخزين محلي مؤقت
|
||||
→ **تكلفة: $5K أو أقل**
|
||||
|
||||
🎯 التوفير: $45K-$95K/السنة
|
||||
```
|
||||
|
||||
#### 3️⃣ التسويق الآلي (-$80K-$150K سنوياً)
|
||||
|
||||
```
|
||||
خدمات التسويق العادية:
|
||||
- HubSpot / ActiveCampaign: $2K-$5K/الشهر = $24K-$60K/السنة
|
||||
- فريق تسويق: 2-3 موظفين = $50K-$100K/السنة
|
||||
→ **الإجمالي: $74K-$160K/السنة**
|
||||
|
||||
سيرو:
|
||||
- Cron jobs مؤتمتة بالكامل
|
||||
- AI-powered campaigns
|
||||
- فريق تطوير موجود = $0 إضافي
|
||||
→ **التكلفة: $0/السنة**
|
||||
|
||||
🎯 التوفير: $80K-$150K/السنة
|
||||
```
|
||||
|
||||
#### 4️⃣ دعم العملاء (-$100K-$180K سنوياً)
|
||||
|
||||
```
|
||||
دعم عادي:
|
||||
- 10-15 موظف دعم = $100K-$150K/السنة
|
||||
- نظام تذاكر (Zendesk): $5K-$10K/السنة
|
||||
→ **الإجمالي: $105K-$160K/السنة**
|
||||
|
||||
سيرو:
|
||||
- Chatbot AI (OpenAI fine-tuned)
|
||||
- يحل 70% من المشاكل تلقائياً
|
||||
- يحتاج 2-3 موظفين فقط للحالات المعقدة = $20K/السنة
|
||||
→ **التكلفة: $20K/السنة**
|
||||
|
||||
🎯 التوفير: $85K-$140K/السنة
|
||||
```
|
||||
|
||||
#### 5️⃣ جمع ذكاء المنافسين (-$50K-$80K سنوياً)
|
||||
|
||||
```
|
||||
الطريقة التقليدية:
|
||||
- فريق يفتح التطبيقات يدوياً كل يوم
|
||||
- 2-3 موظفين متفرغين = $40K-$70K/السنة
|
||||
- تأخر في جمع البيانات
|
||||
|
||||
سيرو:
|
||||
- Android Bot يعمل 24/7
|
||||
- تحديثات كل 15 دقيقة
|
||||
- لا موظفين إضافيين = $0 تكلفة إضافية
|
||||
→ **التكلفة: $0 إضافية/السنة**
|
||||
|
||||
🎯 التوفير: $50K-$80K/السنة
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## الاستقلالية عن الأطراف الثالثة
|
||||
|
||||
### الخدمات المملوكة (In-House)
|
||||
|
||||
| الخدمة | المزود التقليدي | الحل بسيرو | الاستقلالية | التوفير |
|
||||
|--------|-----------------|-----------|------------|---------|
|
||||
| 🗺️ الخرائط | Google Maps | Siro Maps | ✅ 100% | $150K+ |
|
||||
| 📍 التوجيه | Google Routes | OSRM + Custom | ✅ 95% | $50K+ |
|
||||
| 📱 الرسائل | Twilio | خادم مملوك + Twilio | ✅ 80% | $45K+ |
|
||||
| 💬 Chat | Firebase | خادم PHP/WebSocket | ✅ 100% | $20K+ |
|
||||
| 📊 التحليلات | Mixpanel/Amplitude | MySQL + الرسم البياني المخصص | ✅ 100% | $30K+ |
|
||||
| 🔐 المصادقة | Firebase Auth | JWT مخصص | ✅ 100% | $10K+ |
|
||||
| 💾 التخزين | Firebase Storage | S3 + خادم مملوك | ✅ 80% | $25K+ |
|
||||
| 📺 الفيديو | AWS Elemental | ffmpeg + خادم مملوك | ✅ 90% | $40K+ |
|
||||
| 🎤 الصوت | Twilio Voice | Agora + WebRTC | ✅ 95% | $30K+ |
|
||||
|
||||
**النتيجة:**
|
||||
|
||||
- ✅ **عدم الاعتماد على منصات خارجية** → حرية كاملة
|
||||
- ✅ **بيانات المستخدمين محلية تماماً** → أمان + خصوصية
|
||||
- ✅ **توفير $430K+** من رسوم الأطراف الثالثة
|
||||
|
||||
---
|
||||
|
||||
## ميزات السائق
|
||||
|
||||
### 🎯 نظام التحفيز الشامل
|
||||
|
||||
#### المكافآت الفورية:
|
||||
|
||||
```
|
||||
كل 5 رحلات → 5 نقاط
|
||||
كل 50 ريال كسب → 1 نقة
|
||||
كل 50 تقييم 5 نجوم → 10 نقاط
|
||||
|
||||
النقاط:
|
||||
- 100 نقطة = خصم 10% من العمولة (الشهر التالي)
|
||||
- 250 نقطة = خصم 15% + بطل الشهر
|
||||
- 500 نقطة = ترقية إلى ماسي (عمولة 15% دائمة)
|
||||
```
|
||||
|
||||
#### التحديات اليومية:
|
||||
|
||||
```
|
||||
- أكمل 5 رحلات → 50 ريال مكافأة
|
||||
- أكمل 10 رحلات → 100 ريال مكافأة
|
||||
- اكسب 500 ريال → 50 ريال مكافأة
|
||||
```
|
||||
|
||||
#### المتتاليات:
|
||||
|
||||
```
|
||||
7 أيام متتالية = 200 ريال مكافأة
|
||||
14 يوم متتالي = 500 ريال مكافأة
|
||||
30 يوم متتالي = 1000 ريال مكافأة + بطاقة ماس
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 📊 لوحة معلومات السائق
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ إحصائياتك اليوم │
|
||||
├─────────────────────────────────────┤
|
||||
│ رحلات مكتملة: 15 │
|
||||
│ كسبك: 750 ريال │
|
||||
│ هدفك: 1000 ريال (اكسب 250 أخرى) │
|
||||
│ المتبقي من اليوم: 6 ساعات │
|
||||
├─────────────────────────────────────┤
|
||||
│ 🎯 إذا استمررت: ستكسب 950 ريال │
|
||||
│ 🚀 إذا زادت السرعة: 1000+ ريال │
|
||||
└─────────────────────────────────────┘
|
||||
|
||||
لوحة بيانات المهام:
|
||||
- أعلى الأوقات كسباً
|
||||
- أفضل المناطق (الطلب)
|
||||
- تنبيهات الفرص (surge pricing)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🎖️ نظام الشارات والمستويات
|
||||
|
||||
```
|
||||
Bronze (0-99 نقطة) → عمولة عادية 20%
|
||||
Silver (100-249 نقطة) → عمولة 19%
|
||||
Gold (250-499 نقطة) → عمولة 18%
|
||||
Diamond (500+ نقطة) → عمولة 15% + مميزات خاصة
|
||||
|
||||
المميزات الخاصة لـ Diamond:
|
||||
✅ فترات عمل مرنة
|
||||
✅ عروض خاصة من المتاجر
|
||||
✅ أولوية في الطلبات المرتفعة السعر
|
||||
✅ إشعارات surge pricing فورية
|
||||
✅ دعم VIP
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🏆 لوحة الترتيب
|
||||
|
||||
```
|
||||
هذا الأسبوع:
|
||||
|
||||
🥇 أحمد محمود: 150 رحلة (أرباح: 8000 ريال)
|
||||
🥈 سارة الحسن: 145 رحلة (أرباح: 7800 ريال)
|
||||
🥉 محمد علي: 140 رحلة (أرباح: 7600 ريال)
|
||||
|
||||
المكافآت:
|
||||
🥇 500 ريال + 100 نقطة
|
||||
🥈 300 ريال + 60 نقطة
|
||||
🥉 150 ريال + 30 نقطة
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 📱 ميزات عملية
|
||||
|
||||
| الميزة | الفائدة |
|
||||
|--------|---------|
|
||||
| **عرض عائم (Overlay)** | لن تفويت عرض رحلة أبداً |
|
||||
| **تنبيهات صوتية** | اسمع العرض حتى لو كان الهاتف مأغلقاً |
|
||||
| **توجيه صوتي** | استمع للاتجاهات بدون لمس الهاتف |
|
||||
| **اكتشاف الاحتيال** | حماية من العملاء الوهميين |
|
||||
| **قائمة الأمان** | أرقام الطوارئ + ميزات الأمان |
|
||||
| **صور الركاب** | اعرف من تلتقط قبل القبول |
|
||||
|
||||
---
|
||||
|
||||
## ميزات الراكب
|
||||
|
||||
### 🎯 خيارات الرحلات (12 نوع)
|
||||
|
||||
| النوع | الاستخدام | المميز |
|
||||
|------|-----------|--------|
|
||||
| **Speed** | رحلات عادية سريعة | اقتصادي ✅ |
|
||||
| **Comfort** | راحة + سيارة أحدث | فاخر |
|
||||
| **Family** | عائلات + مساحة أكبر | آمن للأطفال |
|
||||
| **Delivery** | طرود وطلبيات | توصيل سريع |
|
||||
| **Blash** | اقتصادي جداً | أرخص سعر |
|
||||
| **Late** | رحلات ليلية | خصم ليلي 20% |
|
||||
| **Heavy** | شحنات ثقيلة | معدات خاصة |
|
||||
| **Nature** | رحلات ريفية | آمن للطرقات الوعرة |
|
||||
| **Electric** | صديق للبيئة | بطارية كهربائية |
|
||||
| **PinkBike** | دراجة نارية | سريع في الزحام |
|
||||
| **Van** | ميني باص | مجموعات كبيرة |
|
||||
| **Female Driver** | سائقة امرأة | آمن وثقة |
|
||||
|
||||
---
|
||||
|
||||
### 🛣️ رحلات متعددة النقاط (Mishwari)
|
||||
|
||||
```
|
||||
الراكب: "أريد أن أذهب لـ 3 أماكن"
|
||||
|
||||
✅ سيرو يسمح:
|
||||
├── المحطة 1: المدرسة (08:00)
|
||||
├── المحطة 2: العمل (09:00)
|
||||
└── المحطة 3: البيت (17:00)
|
||||
|
||||
السعر:
|
||||
- نقطة واحدة = $5
|
||||
- نقطة ثانية = $3
|
||||
- نقطة ثالثة = $2
|
||||
→ الإجمالي: $10 (أرخص من 3 رحلات منفصلة)
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
|
||||
- ✅ توفير الراكب 20-30%
|
||||
- ✅ رحلات أكثر للسائق
|
||||
- ✅ استخدام أفضل للمركبة
|
||||
|
||||
---
|
||||
|
||||
### 💰 طرق الدفع (7 خيارات محلية)
|
||||
|
||||
```
|
||||
كل بلد له:
|
||||
|
||||
سوريا:
|
||||
- نقد
|
||||
- Visa/Mastercard
|
||||
- محفظة سيرو
|
||||
- MTN Mobile Money
|
||||
- Syriatel Mobile Money
|
||||
|
||||
الأردن:
|
||||
- نقد
|
||||
- Visa/Mastercard
|
||||
- محفظة سيرو
|
||||
- JIO (local)
|
||||
|
||||
مصر:
|
||||
- نقد
|
||||
- Visa/Mastercard
|
||||
- محفظة سيرو
|
||||
- E-Cash
|
||||
- CLIQ
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 📊 مقارنة الأسعار الفورية
|
||||
|
||||
```
|
||||
الراكب يطلب رحلة:
|
||||
|
||||
┌──────────────────────────────────┐
|
||||
│ 🏆 سيرو: $12 │
|
||||
│ Uber: $15 (+25%) │
|
||||
│ Careem: $14 (+17%) │
|
||||
│ Bolt: $13 (+8%) │
|
||||
└──────────────────────────────────┘
|
||||
|
||||
✅ سيرو هي الأرخص!
|
||||
→ معدل تحويل أعلى بـ 40-50%
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🎁 برنامج الإحالة الموحد
|
||||
|
||||
```
|
||||
الراكب يحصل على:
|
||||
- كود إحالة فريد
|
||||
- 100 ريال مكافأة لكل صديق جديد
|
||||
- حد أقصى: 10 أصدقاء = 1000 ريال
|
||||
|
||||
السائق يحصل على:
|
||||
- كود إحالة فريد
|
||||
- 50 ريال مكافأة لكل سائق جديد
|
||||
- حد أقصى: 50 سائق = 2500 ريال
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🔐 ميزات الأمان
|
||||
|
||||
| الميزة | الفائدة |
|
||||
|--------|---------|
|
||||
| **زر SOS** | تنبيه الطوارئ فوراً |
|
||||
| **مشاركة الرحلة** | أخبر العائلة بموقعك |
|
||||
| **تقييم وتعليقات** | اختر سائقاً موثوقاً |
|
||||
| **تسجيل صوتي** | سجل المحادثة لأمانك |
|
||||
| **معايرة الموقع** | تأكد من الطريق الصحيح |
|
||||
|
||||
---
|
||||
|
||||
## لوحة التحكم والإدارة
|
||||
|
||||
### 📊 لوحة الإدارة الرئيسية
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ 📈 لوحة المعلومات الرئيسية │
|
||||
├─────────────────────────────────────────┤
|
||||
│ إجمالي الرحلات (اليوم): 2,450 │
|
||||
│ الإيرادات (اليوم): $24,500 │
|
||||
│ عمولة سيرو: $4,900 │
|
||||
│ السائقين النشطين: 1,200 │
|
||||
│ الركاب النشطين: 2,500 │
|
||||
│ معدل الإلغاء: 3.2% │
|
||||
│ متوسط التقييم: 4.8/5.0 │
|
||||
└─────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🎯 أدوات الإدارة (15+ موديول)
|
||||
|
||||
#### 1. إدارة السائقين
|
||||
|
||||
```
|
||||
✅ قائمة السائقين بالتفاصيل الكاملة
|
||||
✅ مراقبة موقع السائق الفعلي (GPS حي)
|
||||
✅ تقييم مستندات (صورة + رخصة + تأمين)
|
||||
✅ تقارير السلوك (تقيمات، التزامات)
|
||||
✅ إدارة القائمة السوداء
|
||||
```
|
||||
|
||||
#### 2. إدارة الركاب
|
||||
|
||||
```
|
||||
✅ قائمة الركاب بالمعلومات الشخصية
|
||||
✅ تاريخ الرحلات الكامل
|
||||
✅ الشكاوى والتقييمات
|
||||
✅ حالة المحفظة الرقمية
|
||||
```
|
||||
|
||||
#### 3. إدارة الرحلات
|
||||
|
||||
```
|
||||
✅ لوحة مراقبة الرحلات الحية
|
||||
✅ البحث المتقدم (بالتاريخ، السعر، إلخ)
|
||||
✅ إدارة الإلغاءات والمشاكل
|
||||
✅ تحليل توزيع الرحلات بالمناطق
|
||||
```
|
||||
|
||||
#### 4. إدارة التسعير (Kazan)
|
||||
|
||||
```
|
||||
✅ تحديد نسبة العمولة لكل:
|
||||
- دولة
|
||||
- مدينة
|
||||
- نوع مركبة
|
||||
- ساعة من اليوم
|
||||
|
||||
✅ التعديل التلقائي بناءً على المنافسين
|
||||
✅ رؤية التأثير الفوري على الأرباح
|
||||
```
|
||||
|
||||
#### 5. إدارة التسويق
|
||||
|
||||
```
|
||||
✅ إنشاء حملات ترويجية
|
||||
✅ رسائل مخصصة للركاب والسائقين
|
||||
✅ إدارة الكوبونات والخصومات
|
||||
✅ تقارير ROI مفصلة
|
||||
```
|
||||
|
||||
#### 6. الخرائط الحرارية (Heatmaps)
|
||||
|
||||
```
|
||||
┌────────────────────────────┐
|
||||
│ 🔴 مناطق طلب عالي جداً │
|
||||
│ 🟠 مناطق طلب عالي │
|
||||
│ 🟡 مناطق طلب متوسط │
|
||||
│ 🟢 مناطق طلب قليل │
|
||||
│ 🔵 مناطق بدون طلب │
|
||||
└────────────────────────────┘
|
||||
|
||||
الفائدة:
|
||||
✅ وضع السائقين في أماكن الطلب
|
||||
✅ تقليل وقت انتظار الراكب
|
||||
✅ زيادة الرحلات المكتملة
|
||||
```
|
||||
|
||||
#### 7. التحليلات المتقدمة
|
||||
|
||||
```
|
||||
✅ رسوم بيانية للإيرادات
|
||||
✅ تحليل سلوك الراكب
|
||||
✅ أنماط الطلب بالساعة والأسبوع
|
||||
✅ التنبؤ بالطلب المستقبلي
|
||||
✅ تحليل تكاليف التشغيل
|
||||
```
|
||||
|
||||
#### 8. المراقبة الأمنية
|
||||
|
||||
```
|
||||
✅ سجلات الوصول والتعديلات
|
||||
✅ كشف محاولات الاحتيال
|
||||
✅ مراقبة الحسابات المريبة
|
||||
✅ تنبيهات أمان فورية
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## مقارنة التكاليف مع المنافسين
|
||||
|
||||
### نموذج الأتمتة والتوفير
|
||||
|
||||
| العملية | Uber/Careem | سيرو | الفرق |
|
||||
|--------|------------|------|-------|
|
||||
| **رسم الخريطة** | $150K-$360K | $0 | ✅ توفير كامل |
|
||||
| **جمع أسعار المنافسين** | يدوي (غير دقيق) | آلي 24/7 | ✅ أتمتة كاملة |
|
||||
| **التسويق** | فريق مخصص ($80K+) | آلي بـ AI | ✅ توفير 80% |
|
||||
| **دعم العملاء** | فريق كامل ($100K+) | Chatbot AI (70% حل) | ✅ توفير 60% |
|
||||
| **تحليل الطلب** | يدوي | تنبؤ تلقائي | ✅ أتمتة |
|
||||
| **إدارة العمولات** | يدوي | تعديل آلي | ✅ أتمتة |
|
||||
| **إعادة تفعيل الراكب** | إعلانات مدفوعة | AI + Cron مجاني | ✅ توفير 90% |
|
||||
|
||||
---
|
||||
|
||||
### حساب الربحية
|
||||
|
||||
```
|
||||
سيناريو: 2,000 رحلة يومية
|
||||
|
||||
Uber:
|
||||
├── الإيرادات: 2,000 × $12 = $24,000
|
||||
├── عمولة Uber (25-30%): -$6,000
|
||||
├── رسوم إضافية: -$2,000
|
||||
├── تكاليف التشغيل: -$4,000
|
||||
└── الربح الصافي: $12,000 (50%)
|
||||
|
||||
سيرو:
|
||||
├── الإيرادات: 2,000 × $12 = $24,000
|
||||
├── عمولة سيرو (20%): -$4,800
|
||||
├── توفيرات الخرائط: +$12,500 (نصيب يومي)
|
||||
├── توفيرات التسويق: +$6,700 (نصيب يومي)
|
||||
├── توفيرات الأتمتة: +$5,000 (نصيب يومي)
|
||||
├── تكاليف التشغيل: -$3,000 (بدون خدمات خارجية)
|
||||
└── الربح الصافي: $40,400 (168%!!)
|
||||
```
|
||||
|
||||
**الفارق:** +$28,400 يومياً = **+$10.4M سنوياً** من نفس الحجم! 🚀
|
||||
|
||||
---
|
||||
|
||||
### الملخص التنافسي
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────────────┐
|
||||
│ سيرو = منصة نقل بـ: │
|
||||
├────────────────────────────────────────────────────────┤
|
||||
│ ✅ تكاليف تشغيل أقل بـ 60-70% │
|
||||
│ ✅ أتمتة كاملة للعمليات (24/7) │
|
||||
│ ✅ ذكاء اصطناعي في كل جانب │
|
||||
│ ✅ استقلالية كاملة عن الأطراف الثالثة │
|
||||
│ ✅ ربحية 3-4 مرات أعلى │
|
||||
│ ✅ سائقين أكثر رضى (المكافآت + الشفافية) │
|
||||
│ ✅ ركاب أكثر ولاءً (الأسعار + الأمان) │
|
||||
│ ✅ قابلية تطور عالية جداً │
|
||||
└────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
> **إعداد:** فريق سيرو
|
||||
> **آخر تحديث:** يوليو 2026
|
||||
> **التصنيف:** سري / داخلي
|
||||
@@ -0,0 +1,318 @@
|
||||
# DRIVER_JOURNEY.md — Complete Driver (Captain) Lifecycle
|
||||
|
||||
## Stage 1: App Launch & Authentication
|
||||
|
||||
### Screen
|
||||
- **Route**: `/` → `SplashScreen`
|
||||
- **File**: `siro_driver/lib/splash_screen_page.dart`
|
||||
- **Controllers**: `SplashScreenController`, `LocaleController`, `BackgroundServiceHelper`
|
||||
|
||||
### State Flow
|
||||
- GetX-based auth check → JWT validation → Splash → Map or Login
|
||||
|
||||
### Variables
|
||||
| Variable | Storage | Key |
|
||||
|----------|---------|-----|
|
||||
| jwt (driver) | GetStorage | `BoxName.jwt` |
|
||||
| driverID | GetStorage | `BoxName.driverID` |
|
||||
| isAppInForeground | GetStorage | `BoxName.isAppInForeground` |
|
||||
| statusDriverLocation | GetStorage | `BoxName.statusDriverLocation` |
|
||||
| rideStatus | GetStorage | `BoxName.rideStatus` |
|
||||
|
||||
### APIs (Driver Auth)
|
||||
| Endpoint | Method | Input | Output |
|
||||
|----------|--------|-------|--------|
|
||||
| `$authCaptin/login.php` | POST | phone, password, fingerprint | JWT + driver data |
|
||||
| `$authCaptin/register.php` | POST | driver data | account created |
|
||||
| `$server/loginJwtDriver.php` | POST | refresh token | new JWT |
|
||||
| `$server/loginJwtWalletDriver.php` | POST | refresh token | wallet JWT |
|
||||
| `$authCaptin/loginFromGoogle.php` | POST | google token | JWT + driver data |
|
||||
|
||||
### Database Tables
|
||||
- `driver` — driver records
|
||||
- `driverToken` — FCM tokens
|
||||
|
||||
## Stage 2: Go Online
|
||||
|
||||
### Screen
|
||||
- **File**: `siro_driver/lib/views/home/Captin/driver_map_page.dart` → `PassengerLocationMapPage`
|
||||
- **Controller**: `HomeCaptainController`, `MapSocketController`
|
||||
|
||||
### State Flow
|
||||
1. Driver presses "Go Online" button
|
||||
2. `HomeCaptainController.startOnlineStatus()`
|
||||
3. Location service begins continuous GPS updates
|
||||
4. WebSocket connects to receive ride offers
|
||||
|
||||
### Background Service
|
||||
- **File**: `siro_driver/lib/controller/functions/background_service.dart`
|
||||
- `BackgroundServiceHelper.initialize()` — starts Android foreground service
|
||||
- Location updates sent every few seconds to location server
|
||||
|
||||
### APIs
|
||||
| Endpoint | Method | Input | Output |
|
||||
|----------|--------|-------|--------|
|
||||
| `$location/add.php` | POST | driver_id, lat, lng, heading, speed, status, carType | success |
|
||||
| `$server/ride/notificationCaptain/addWaitingRide.php` | POST | driver_id | waiting status |
|
||||
| `$endPoint/ride/notificationCaptain/getRideWaiting.php` | POST | driver_id | pending rides |
|
||||
|
||||
### Database Tables
|
||||
- `car_locations` — real-time driver GPS (SPATIAL index)
|
||||
- `car_tracks` — historical location tracks
|
||||
- `notificationCaptain` — pending ride notifications
|
||||
|
||||
### Real-time Operations
|
||||
- **WebSocket Connect**: `socket_intaleq/driver_socket.php`
|
||||
- **Publish**: `driver_online`, `driver_location`
|
||||
- **Subscribe**: `ride_offer`, `ride_accepted`, `ride_cancelled`
|
||||
|
||||
## Stage 3: Ride Offer Reception
|
||||
|
||||
### Screen
|
||||
- **Widget**: `order_request_page.dart`
|
||||
- **Overlay**: `TripOverlayPlugin` (native Android overlay showing incoming trip)
|
||||
|
||||
### State Flow
|
||||
1. FCM push received with `category=Order` or `category=OrderSpeed`
|
||||
2. `backgroundMessageHandler()` processes push data
|
||||
3. Extracts `DriverList` array from message data
|
||||
4. Shows overlay via `TripOverlayPlugin.showOverlay(tripData, autoCloseSeconds: 15)`
|
||||
5. Stores pending trip in secure storage: `pending_driver_list`
|
||||
|
||||
### Data Package (DriverList array indices)
|
||||
| Index | Field |
|
||||
|-------|-------|
|
||||
| 0 | passengerLat |
|
||||
| 1 | passengerLng |
|
||||
| 2 | paymentAmount |
|
||||
| 3 | destLat |
|
||||
| 4 | destLng |
|
||||
| 5 | distance |
|
||||
| 7 | passengerId |
|
||||
| 8 | passengerName |
|
||||
| 9 | passengerToken |
|
||||
| 10 | phone |
|
||||
| 11 | distance (dup) |
|
||||
| 13 | walletChecked |
|
||||
| 15 | durationToPassenger |
|
||||
| 16 | orderId |
|
||||
| 18 | driverId |
|
||||
| 19 | durationOfRide |
|
||||
| 20-25 | steps (waypoints) |
|
||||
| 26 | fare/totalCost |
|
||||
| 28 | email |
|
||||
| 29 | startNameLocation |
|
||||
| 30 | endNameLocation |
|
||||
| 31 | carType |
|
||||
| 32 | kazan |
|
||||
|
||||
### Notifications
|
||||
- **Local**: Custom notification with "ding.wav" sound, accept/reject buttons
|
||||
- **Overlay**: Android system overlay with trip info + accept/reject
|
||||
|
||||
## Stage 4: Accept Ride
|
||||
|
||||
### Screen
|
||||
- **Function**: `_processAcceptOrder(List<dynamic> data)` in `siro_driver/lib/main.dart`
|
||||
|
||||
### State Flow
|
||||
1. Overlay accept button → `TripOverlayPlugin.onTripAccepted` fires
|
||||
2. Or in-app accept button → `HomeCaptainController.acceptOrder()`
|
||||
3. Shows loading dialog
|
||||
4. Calls API to accept:
|
||||
```
|
||||
POST {$rideServerSide}/rides/acceptRide.php
|
||||
payload: { id: orderId, rideTimeStart, status: 'Apply', passengerToken, driver_id }
|
||||
```
|
||||
5. On success → navigate to `PassengerLocationMapPage` with ride args
|
||||
6. On failure (already taken) → show "طلب أخذه سائق آخر" dialog
|
||||
|
||||
### Variables Written
|
||||
| Variable | Value |
|
||||
|----------|-------|
|
||||
| `BoxName.statusDriverLocation` | `'on'` |
|
||||
| `BoxName.rideStatus` | `'Apply'` |
|
||||
| `BoxName.rideArguments` | ride args map |
|
||||
|
||||
### APIs
|
||||
| Endpoint | Method | Input | Output |
|
||||
|----------|--------|-------|--------|
|
||||
| `$rideServerSide/rides/acceptRide.php` | POST | orderId, rideTimeStart, status, passengerToken, driver_id | ride accepted |
|
||||
| `$server/ride/driver_order/add.php` | POST | driver_id, order_id, status='applied' | log |
|
||||
|
||||
### GIS Operations
|
||||
- Route from driver → passenger pickup
|
||||
- Google Maps directions URL generated
|
||||
|
||||
## Stage 5: Navigate to Pickup
|
||||
|
||||
### Screen
|
||||
- **File**: `siro_driver/lib/views/home/Captin/driver_map_page.dart`
|
||||
- **Navigation**: `siro_driver/lib/controller/home/navigation/navigation_controller.dart`
|
||||
|
||||
### State Flow
|
||||
- `RideStatus: 'Apply'` → navigate to passenger
|
||||
- **Timer**: `startTimerFromDriverToPassengerAfterApplied()` — ETA countdown
|
||||
|
||||
### GIS Operations
|
||||
- **Route Drawing**: Polyline from driver → passenger pickup
|
||||
- **Voice Navigation**: TTS navigation instructions
|
||||
- **Deviation Detection**: Re-route if off path
|
||||
|
||||
### Real-time
|
||||
- **WebSocket Publish**: `driver_location` with ride context
|
||||
- **WebSocket Subscribe**: `passenger_location`, `ride_cancelled`
|
||||
|
||||
## Stage 6: Arrived at Pickup
|
||||
|
||||
### Action
|
||||
- Driver presses "I've Arrived" button
|
||||
- API call updates ride status to `Arrived`
|
||||
- 5-minute passenger waiting timer starts
|
||||
|
||||
### APIs
|
||||
| Endpoint | Method | Input | Output |
|
||||
|----------|--------|-------|--------|
|
||||
| `$rideServerSide/ride/rides/updateStausFromSpeed.php` | POST | ride_id, status='Arrived' | success |
|
||||
|
||||
### Notifications
|
||||
- **Push**: FCM sent to passenger "Driver has arrived"
|
||||
- **In-App**: Navigation state changes to "Waiting for passenger"
|
||||
|
||||
## Stage 7: Start Ride
|
||||
|
||||
### Action
|
||||
- Driver presses "Start Ride" button
|
||||
- API call updates ride status to `Begin`
|
||||
- Trip officially begins
|
||||
|
||||
### APIs
|
||||
| Endpoint | Method | Input | Output |
|
||||
|----------|--------|-------|--------|
|
||||
| `$rideServerSide/ride/rides/updateStausFromSpeed.php` | POST | ride_id, status='Begin' | success |
|
||||
|
||||
### GIS Operations
|
||||
- Route updates from current position → passenger destination
|
||||
- Live ETA recalculated
|
||||
|
||||
## Stage 8: Active Ride
|
||||
|
||||
### Screen
|
||||
- **File**: `driver_map_page.dart` (same screen, different state)
|
||||
|
||||
### State Flow
|
||||
- `RideStatus: 'Begin'` → navigating to destination
|
||||
- Live trip timer and fare counter displayed
|
||||
|
||||
### GIS Operations
|
||||
- **Route Drawing**: Blue polyline to destination
|
||||
- **ETA Updates**: Continuous recalculation
|
||||
- **Driver Behavior**: Speed, hard brakes, distance monitored
|
||||
|
||||
### Database Tables
|
||||
- `driver_behavior` — speed, brakes, score per trip
|
||||
|
||||
## Stage 9: End Ride
|
||||
|
||||
### Action
|
||||
- Driver presses "End Ride" button
|
||||
- API call updates ride status to `Finished`
|
||||
- Payment screen shown
|
||||
|
||||
### APIs
|
||||
| Endpoint | Method | Input | Output |
|
||||
|----------|--------|-------|--------|
|
||||
| `$rideServerSide/ride/rides/updateStausFromSpeed.php` | POST | ride_id, status='Finished' | success |
|
||||
| `$paymentServer/ride/payment/add.php` | POST | amount, payment_method, passengerID, rideId, driverID | payment record |
|
||||
|
||||
### GIS Operations
|
||||
- **Stop Location Tracking**: End ride location published
|
||||
- **Route Cleanup**: Clear map route
|
||||
|
||||
### Real-time
|
||||
- **WebSocket Publish**: `ride_finished` event
|
||||
- **WebSocket Disconnect**: Ride room cleanup
|
||||
|
||||
## Stage 10: Rating & Payment
|
||||
|
||||
### Screen
|
||||
- **Rate**: Rate passenger bottom sheet
|
||||
- **Payment**: Cash confirmation or digital payment
|
||||
|
||||
### APIs
|
||||
| Endpoint | Method | Input | Output |
|
||||
|----------|--------|-------|--------|
|
||||
| `$server/ride/rate/addRateToPassenger.php` | POST | passenger_id, driverID, rideId, rating, comment | success |
|
||||
| `$server/ride/payment/get.php` | POST | driver_id | today's earnings |
|
||||
|
||||
## Stage 11: Go Offline & Earnings
|
||||
|
||||
### Screen
|
||||
- **Wallet**: `siro_driver/lib/views/home/Captin/wallet_page.dart`
|
||||
- **Earnings**: `earnings_page.dart`
|
||||
|
||||
### APIs
|
||||
| Endpoint | Method | Input | Output |
|
||||
|----------|--------|-------|--------|
|
||||
| `$walletDriver/getWalletByDriver.php` | POST | driver_id | wallet balance |
|
||||
| `$paymentServer/ride/driverPayment/get.php` | POST | driver_id | payment history |
|
||||
| `$server/ride/payment/getCountRide.php` | POST | driver_id | ride count today |
|
||||
|
||||
### Go Offline Flow
|
||||
1. Driver presses "Go Offline"
|
||||
2. `HomeCaptainController.stopOnlineStatus()`
|
||||
3. Location stops updating
|
||||
4. WebSocket disconnects
|
||||
5. `car_locations.status` set to `'off'`
|
||||
|
||||
---
|
||||
|
||||
## Navigation Route Map (Driver)
|
||||
|
||||
```
|
||||
SplashScreen (/)
|
||||
→ [JWT exists?]
|
||||
→ Yes → PassengerLocationMapPage (/passenger-location-map)
|
||||
→ No → LoginPage → OTPPage → PassengerLocationMapPage
|
||||
PassengerLocationMapPage
|
||||
→ [Online] → WebSocket connects, location streaming starts
|
||||
→ [Ride Offer via Overlay/FCM] → Accept → PassengerLocationMapPage (with ride)
|
||||
→ Navigate to pickup → Arrived → Start Ride → Active Ride → End Ride
|
||||
→ [After Ride] → Rate page → Earnings update → Back to map
|
||||
→ [Offline] → WebSocket disconnects, location stops
|
||||
```
|
||||
|
||||
## Driver App Background Service Architecture
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────┐
|
||||
│ Driver App (siro_driver) │
|
||||
│ │
|
||||
│ ┌──────────────────────────────────────────────┐ │
|
||||
│ │ Main Isolate (flutter) │ │
|
||||
│ │ - AppBindings, GetX Controllers │ │
|
||||
│ │ - TripOverlayPlugin.listen() │ │
|
||||
│ │ - _processAcceptOrder / Reject │ │
|
||||
│ └──────────────────┬───────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌──────────────────┴───────────────────────────┐ │
|
||||
│ │ Background Isolate (FCM Handler) │ │
|
||||
│ │ - backgroundMessageHandler() │ │
|
||||
│ │ - Shows TripOverlay (autoClose: 15s) │ │
|
||||
│ │ - Writes pending_driver_list to SecureStore │ │
|
||||
│ └──────────────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌──────────────────┴───────────────────────────┐ │
|
||||
│ │ Android Foreground Service │ │
|
||||
│ │ - BackgroundServiceHelper.initialize() │ │
|
||||
│ │ - LocationService: continuous GPS updates │ │
|
||||
│ │ - Channels: driver_service, location_service │ │
|
||||
│ └──────────────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌──────────────────┴───────────────────────────┐ │
|
||||
│ │ Native Overlay (Android, Kotlin/Swift) │ │
|
||||
│ │ - TripOverlayPlugin (custom native plugin) │ │
|
||||
│ │ - Shows incoming trip data overlay │ │
|
||||
│ │ - Accept/Reject buttons → MethodChannel │ │
|
||||
│ └──────────────────────────────────────────────┘ │
|
||||
└──────────────────────────────────────────────────────┘
|
||||
@@ -0,0 +1,288 @@
|
||||
# PASSENGER_JOURNEY.md — Complete Passenger Lifecycle
|
||||
|
||||
## Stage 1: App Launch
|
||||
|
||||
### Screen
|
||||
- **Route**: `/` → SplashScreen
|
||||
- **File**: `siro_rider/lib/splash_screen_page.dart`
|
||||
- **Controller**: `SplashScreenController` (in `siro_rider/lib/controller/home/splash_screen_controlle.dart`)
|
||||
|
||||
### State Flow
|
||||
- **Type**: GetX Controller (Custom Animation)
|
||||
- **Events**: `controller.init()` → animations play → `controller.checkInitialStatus()`
|
||||
- **States**: Splash animation → Progress bar → Navigate based on auth status
|
||||
|
||||
### Variables
|
||||
| Variable | Storage | Key |
|
||||
|----------|---------|-----|
|
||||
| jwt | GetStorage | `box.read(BoxName.jwt)` |
|
||||
| passengerID | GetStorage | `box.read(BoxName.passengerID)` |
|
||||
| driverID | GetStorage | `box.read(BoxName.driverID)` |
|
||||
| language | GetStorage | `box.read(BoxName.lang)` |
|
||||
| themeMode | GetStorage | theme preference |
|
||||
| packageInfo | GetStorage | `BoxName.packagInfo` |
|
||||
|
||||
### APIs
|
||||
| Endpoint | Method | Input | Output |
|
||||
|----------|--------|-------|--------|
|
||||
| `$server/auth/packageInfo.php` | POST | platform, appName | version info |
|
||||
|
||||
### Database Tables
|
||||
- `packageInfo` — app version tracking
|
||||
|
||||
## Stage 2: Authentication Check
|
||||
|
||||
### State Flow: SplashScreenController
|
||||
1. Check `box.read(BoxName.jwt)` existence
|
||||
2. If JWT exists → check ride status (`_checkInitialRideStatus()`) → navigate to MapScreen or Login
|
||||
3. If no JWT → navigate to Onboarding/Login
|
||||
|
||||
### Navigation Decision
|
||||
```
|
||||
SplashScreen
|
||||
→ JWT exists?
|
||||
→ Yes → MapPagePassenger
|
||||
→ No → OnboardingPage (first time) or LoginPage
|
||||
```
|
||||
|
||||
### Screens
|
||||
| Screen | Route | File |
|
||||
|--------|-------|------|
|
||||
| Onboarding | `/onboarding` | `siro_rider/lib/onbording_page.dart` |
|
||||
| Login | `/login` | `siro_rider/lib/views/auth/login_page.dart` |
|
||||
| Register | `/register` | `siro_rider/lib/views/auth/register_page.dart` |
|
||||
| OTP | `/otp` | `siro_rider/lib/views/auth/otp_page.dart` |
|
||||
|
||||
### APIs
|
||||
| Endpoint | Method | Input | Output |
|
||||
|----------|--------|-------|--------|
|
||||
| `$server/auth/login.php` | POST | phone, password, fingerprint | JWT, passenger data |
|
||||
| `$server/auth/signup.php` | POST | phone, email, password, name, ... | user created |
|
||||
| `$server/auth/loginFromGooglePassenger.php` | POST | google token | JWT, passenger data |
|
||||
| `$server/auth/checkPhoneNumberISVerfiedPassenger.php` | POST | phone | verification status |
|
||||
| `$auth/otpmessage.php` | POST | phone | OTP sent |
|
||||
| `$auth/verifyOtpMessage.php` | POST | phone, otp | verified status |
|
||||
|
||||
### Models
|
||||
- **UserModel** → `passengers` table
|
||||
- **TokenModel** → `tokens` table
|
||||
|
||||
## Stage 3: Map Screen — Ride Request
|
||||
|
||||
### Screen
|
||||
- **File**: `siro_rider/lib/views/home/map_page_passenger.dart`
|
||||
- **Controllers** (all permanent in AppBindings):
|
||||
- `MapEngineController` — map rendering
|
||||
- `MapSocketController` — WebSocket management
|
||||
- `LocationSearchController` — place search
|
||||
- `NearbyDriversController` — nearby driver list
|
||||
- `RideLifecycleController` — ride state machine
|
||||
- `UiInteractionsController` — UI bottom sheets
|
||||
|
||||
### State Flow: RideLifecycleController
|
||||
- **RideState enum**: `noRide → searching → driverApplied → driverArrived → inProgress → finished → preCheckReview → cancelled`
|
||||
|
||||
### Search Flow
|
||||
1. Passenger enters destination → `LocationSearchController.searchPlaces()`
|
||||
2. Price estimate fetched via fare calculation
|
||||
3. Passenger selects car type → confirms ride
|
||||
4. Ride request sent → status = `waiting` → transitions to `searching`
|
||||
|
||||
### APIs (Ride Request)
|
||||
| Endpoint | Method | Input | Output |
|
||||
|----------|--------|-------|--------|
|
||||
| `$rideServerSide/ride/rides/add.php` | POST | passenger_id, start_lat, start_lng, end_lat, end_lng, carType, price, ... | ride_id |
|
||||
| `$rideServerSide/cancelRide/add.php` | POST | ride_id, passenger_id, note | cancellation |
|
||||
| `$server/ride/promo/getPromoBytody.php` | POST | passenger_id | promo code |
|
||||
|
||||
### Database Tables
|
||||
- `waitingRides` — active ride requests
|
||||
- `ride` — completed rides
|
||||
- `promos` — promo codes
|
||||
|
||||
### GIS Operations
|
||||
- **Reverse Geocoding**: Map SaaS (`/api/geocoding/reverse`)
|
||||
- **Search Geocoding**: Map SaaS (`/api/geocoding/search`)
|
||||
- **Routing**: Map SaaS (`/api/maps/route`) or OSRM (`routesy.intaleq.xyz`)
|
||||
- **ETA Calculation**: Local algorithm in `RideLifecycleController.updateRemainingRoute()`
|
||||
- **Map Rendering**: `SiroMaps` (custom Flutter map plugin)
|
||||
|
||||
## Stage 4: Searching for Driver
|
||||
|
||||
### Screen
|
||||
- **Widget**: `searching_captain_window.dart`
|
||||
- **Timer**: `timer_for_cancell_trip_from_passenger.dart`
|
||||
|
||||
### State Flow
|
||||
- `RideState.searching`
|
||||
- Polling loop checks `_totalSearchTimeoutSeconds`
|
||||
- On timeout → `_showIncreaseFeeDialog()`
|
||||
|
||||
### Real-time Operations
|
||||
| Channel | Event | Direction |
|
||||
|---------|-------|-----------|
|
||||
| WebSocket | `driver_location_update` | Server → Passenger |
|
||||
| WebSocket | `ride_accepted` | Server → Passenger |
|
||||
| Polling | `getRideStatus` | Passenger → Server (fallback) |
|
||||
|
||||
### Notifications
|
||||
- **Local**: Timer tick notifications
|
||||
- **Push**: When driver accepts via FCM
|
||||
|
||||
### Failure Scenarios
|
||||
| Scenario | Handling |
|
||||
|----------|----------|
|
||||
| No drivers found | Show increase fee dialog |
|
||||
| Network failure | Fallback to polling, show error snackbar |
|
||||
| Timeout | Auto-cancel, prompt retry |
|
||||
|
||||
## Stage 5: Driver Accepted
|
||||
|
||||
### Screen
|
||||
- **Widget**: `driver_card_from_passenger.dart`, `driver_time_arrive_passenger.dart`
|
||||
- **Function**: `processRideAcceptance()`
|
||||
|
||||
### State Flow
|
||||
- `RideState.driverApplied`
|
||||
- **Events**: `processRideAcceptance(driverData)`
|
||||
- **Transitions**: `applied → arrived` (when driver reaches pickup)
|
||||
|
||||
### Variables Stored
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `dInfo` | Driver info (name, car, rating, phone) |
|
||||
| `currentRideId` | Active ride ID |
|
||||
| `rideData` | Full ride details (price, locations, timestamps) |
|
||||
| `datadriverCarsLocationToPassengerAfterApplied` | Driver GPS route |
|
||||
|
||||
### APIs
|
||||
| Endpoint | Method | Input | Output |
|
||||
|----------|--------|-------|--------|
|
||||
| `$rideServerSide/ride/rides/getRideStatus.php` | POST | ride_id | current status |
|
||||
| `$location/getDriverCarsLocationToPassengerAfterApplied.php` | POST | driver_id | GPS location |
|
||||
|
||||
### GIS Operations
|
||||
- **Route Drawing**: Yellow polyline from driver → passenger
|
||||
- **Driver Marker**: Real-time car icon following WebSocket updates
|
||||
- **Deviation Detection**: `checkAndRecalculateIfDeviated()` with 50m threshold
|
||||
|
||||
### Real-time Operations
|
||||
- **WebSocket Connect**: Join ride room
|
||||
- **Subscribe**: `driver_location_update` events
|
||||
- **Driver Tracking**: `handleDriverLocationUpdate()` → stop polling after 3 reliable updates
|
||||
|
||||
### Notifications
|
||||
- **Push**: FCM when driver accepts
|
||||
- **In-App**: `RideLiveNotification.showDriverOnWay()`
|
||||
- **iOS Live Activity**: `IosLiveActivityService.startRideActivity()`
|
||||
|
||||
## Stage 6: Driver Arrived
|
||||
|
||||
### Screen
|
||||
- **Widget**: `driver_time_arrive_passenger.dart`, `ride_begin_passenger.dart`
|
||||
- **Function**: `processDriverArrival()`
|
||||
|
||||
### State Flow
|
||||
- `RideState.driverArrived`
|
||||
- **Events**: `processDriverArrival("polling")` or via socket
|
||||
- **Timer**: 5-minute waiting timer starts
|
||||
- **Pre-drawing**: Blue route from pickup → destination pre-calculated
|
||||
|
||||
### Notifications
|
||||
- **In-App Dialog**: `uiInteractions.driverArrivePassengerDialoge()`
|
||||
- **Push**: Driver arrived notification
|
||||
|
||||
## Stage 7: Ride In Progress
|
||||
|
||||
### Screen
|
||||
- **Widget**: `ride_begin_passenger.dart`, `passengerRideLoctionWidget.dart`
|
||||
|
||||
### State Flow
|
||||
- `RideState.inProgress`
|
||||
- **Events**: `processRideBegin()`
|
||||
- **Timer**: `rideIsBeginPassengerTimer()` — live ride counter
|
||||
|
||||
### GIS Operations
|
||||
- **Blue Route**: Final path from driver → destination
|
||||
- **Live ETA**: Updated via `updateRemainingRoute()` (local calculation)
|
||||
- **Camera Tracking**: Follows driver, zoom adjusts by speed
|
||||
- **Deviation Guard**: Continuous deviation checking, re-route if >50m off path
|
||||
|
||||
### Real-time Operations
|
||||
- **WebSocket**: Continuous `driver_location_update` streaming
|
||||
- **Polling Fallback**: If socket disconnected, poll `getRideStatus`
|
||||
|
||||
### iOS Live Activity
|
||||
- `IosLiveActivityService` — Dynamic Island / Lock Screen widget
|
||||
- `RideWidget` in ios/RideWidget — SwiftUI widget
|
||||
|
||||
## Stage 8: Ride Finished — Payment & Rating
|
||||
|
||||
### Screen
|
||||
- **Rating**: `siro_rider/lib/views/Rate/rate_captain.dart`, `rating_driver_bottom.dart`
|
||||
- **Payment**: `payment_method.page.dart`, `cash_confirm_bottom_page.dart`
|
||||
|
||||
### State Flow
|
||||
- `RideState.finished` → `processRideFinished()`
|
||||
- Disposes ride socket, stops all timers
|
||||
- Navigates to RateDriverFromPassenger with driver_id, ride_id, bill
|
||||
|
||||
### APIs
|
||||
| Endpoint | Method | Input | Output |
|
||||
|----------|--------|-------|--------|
|
||||
| `$server/ride/rate/addRateToDriver.php` | POST | passenger_id, driver_id, ride_id, rating, comment | success |
|
||||
| `$paymentServer/ride/payment/add.php` | POST | amount, payment_method, passengerID, rideId, driverID | payment record |
|
||||
| `$paymentServer/ride/passengerWallet/addPaymentTokenPassenger.php` | POST | passengerId, amount, token | wallet deduction |
|
||||
| `$wallet/getAllPassengerTransaction.php` | POST | passenger_id | transaction history |
|
||||
| `$server/ride/tips/add.php` | POST | driverID, passengerID, rideID, tipAmount | tip saved |
|
||||
|
||||
### Payment Methods Flow
|
||||
1. **Cash**: Show confirmation dialog, driver marks received
|
||||
2. **Wallet**: Deduct from `passengerWallet` balance
|
||||
3. **Visa (PayMob)**: `payWithPayMobCardPassenger` → `paymetVerifyPassenger`
|
||||
4. **MTN**: `payWithMTNStart` → `payWithMTNConfirm`
|
||||
5. **Syriatel**: `payWithSyriatelStart` → `payWithSyriatelConfirm`
|
||||
|
||||
### Database Tables
|
||||
- `payments` — ride payment records
|
||||
- `ratingDriver` — driver ratings
|
||||
- `ratingPassenger` — passenger ratings
|
||||
- `tips` — tips given
|
||||
- `passengerWallet` — wallet balance
|
||||
|
||||
### Notifications
|
||||
- **Push**: Receipt notification
|
||||
- **In-App**: Rating prompt
|
||||
|
||||
## Stage 9: Post-Ride
|
||||
|
||||
### Screen
|
||||
- **Profile**: `passenger_profile_page.dart`
|
||||
- **Wallet**: `passenger_wallet.dart`
|
||||
- **History**: `order_history.dart`
|
||||
- **Promos**: `promos_passenger_page.dart`
|
||||
|
||||
### APIs
|
||||
| Endpoint | Method | Input | Output |
|
||||
|----------|--------|-------|--------|
|
||||
| `$wallet/getWalletByPassenger.php` | GET | passenger_id | wallet balance |
|
||||
| `$profile/get.php` | POST | passenger_id | profile data |
|
||||
| `$rideServerSide/ride/rides/get.php` | POST | passenger_id | ride history |
|
||||
| `$promo/get.php` | POST | passenger_id | available promos |
|
||||
| `$server/ride/invitor/get_passenger_referrals.php` | POST | passenger_id | referral data |
|
||||
|
||||
---
|
||||
|
||||
## Navigation Route Map
|
||||
|
||||
```
|
||||
SplashScreen (/)
|
||||
→ [JWT exists?]
|
||||
→ Yes → MapPagePassenger (/home/map_page_passenger)
|
||||
→ No → OnboardingPage → LoginPage → OTPPage → MapPagePassenger
|
||||
MapPagePassenger
|
||||
→ [Ride states trigger widgets]
|
||||
→ [Menu] → Profile (/profile), Wallet (/wallet), Settings, Promos
|
||||
→ [Rating] → RateCaptain page
|
||||
→ [Contact] → ContactUsPage (/contactSupport)
|
||||
→ [Share] → ShareAppPage (/shareApp)
|
||||
@@ -0,0 +1,110 @@
|
||||
# 🎓 خطة التوتوريال الكامل داخل الموقع — «كيف تستخدم Siro»
|
||||
|
||||
**الهدف:** صفحات شرح تفاعلية داخل siromove.com (وداخل التطبيق لاحقاً) تشرح للمستخدم الجديد
|
||||
كل عملية خطوة بخطوة، مدعومة بلقطات شاشة حقيقية من التطبيق.
|
||||
|
||||
**قاعدة التسمية للقطات:** `tutorial/{القسم}/{رقم الخطوة}_{وصف}.png`
|
||||
مثال: `tutorial/booking/03_select_car_type.png`
|
||||
|
||||
**مواصفات اللقطات:** جهاز حقيقي أو محاكي بدقة 1170×2532 (iPhone) أو 1080×2400 (Android)،
|
||||
واجهة عربية، وضع فاتح (+ نسخة داكنة اختيارية)، بيانات وهمية (لا أرقام هواتف حقيقية).
|
||||
|
||||
---
|
||||
|
||||
## الوحدة 1: التسجيل وإنشاء الحساب (5 لقطات)
|
||||
|
||||
| # | الخطوة | الشاشة في الكود | اللقطة المطلوبة |
|
||||
|---|---|---|---|
|
||||
| 1 | تحميل التطبيق وفتحه | `splash_screen_page.dart` | شاشة البداية بشعار Siro |
|
||||
| 2 | شاشات التعريف | `onbording_page.dart` | شريحة الـ Onboarding الأولى |
|
||||
| 3 | إدخال رقم الهاتف | `login_page.dart` | حقل الهاتف مع اختيار الدولة (🇯🇴🇪🇬🇸🇾) |
|
||||
| 4 | رمز التحقق OTP | `otp_page.dart` | شاشة إدخال الرمز (يصل واتساب/SMS) |
|
||||
| 5 | إكمال البيانات | `register_page.dart` | الاسم + البريد (اختياري) ثم «ابدأ» |
|
||||
|
||||
**نص الشرح المرافق:** التسجيل يحتاج رقم هاتف فقط — لا بريد إلكتروني إجباري ولا بطاقة دفع.
|
||||
أقل من دقيقة من التحميل حتى أول شاشة خريطة.
|
||||
|
||||
## الوحدة 2: طلب الرحلة (6 لقطات)
|
||||
|
||||
| # | الخطوة | الشاشة في الكود | اللقطة المطلوبة |
|
||||
|---|---|---|---|
|
||||
| 1 | الخريطة الرئيسية | `map_page_passenger.dart` | الخريطة مع السيارات القريبة تتحرك |
|
||||
| 2 | تحديد الوجهة | `LocationSearchController` | شريط البحث + النتائج |
|
||||
| 3 | تأكيد نقطة الانطلاق | — | دبوس الانطلاق قابل للسحب |
|
||||
| 4 | اختيار فئة السيارة | — | قائمة الفئات التسع مع سعر كل فئة وشارة «توفّر X% عن المنافسين» |
|
||||
| 5 | كود الخصم (اختياري) | `promos_passenger_page.dart` | حقل البرومو مطبّق على السعر |
|
||||
| 6 | تأكيد الطلب | — | زر «اطلب الآن» مع السعر النهائي |
|
||||
|
||||
**نقطة مهمة للشرح:** السعر المعروض نهائي ومحسوب من الخادم — لا مفاجآت عند الدفع
|
||||
(ما لم تتغير الوجهة أو يزد الانتظار).
|
||||
|
||||
## الوحدة 3: الانتظار والمطابقة (4 لقطات)
|
||||
|
||||
| # | الخطوة | الشاشة في الكود | اللقطة المطلوبة |
|
||||
|---|---|---|---|
|
||||
| 1 | البحث عن كابتن | `searching_captain_window.dart` | نافذة البحث مع المؤقّت |
|
||||
| 2 | اقتراح المفاوض الذكي | `_showIncreaseFeeDialog()` | حوار «ارفع السعر 5% لنتائج أسرع» (يظهر بعد 90 ثانية) |
|
||||
| 3 | قبول الكابتن | `driver_card_from_passenger.dart` | بطاقة الكابتن: الاسم، الصورة، التقييم، السيارة، اللوحة |
|
||||
| 4 | الكابتن في الطريق | `driver_time_arrive_passenger.dart` | الخريطة مع مسار الكابتن الأصفر والوقت المتوقع |
|
||||
|
||||
**نص الشرح:** متوسط زمن المطابقة أقل من 90 ثانية. إذا لم يقبل أحد، النظام يقترح
|
||||
تعديلاً بسيطاً على السعر بدل إلغاء طلبك.
|
||||
|
||||
## الوحدة 4: أثناء الرحلة والسلامة (5 لقطات)
|
||||
|
||||
| # | الخطوة | الشاشة في الكود | اللقطة المطلوبة |
|
||||
|---|---|---|---|
|
||||
| 1 | وصول الكابتن | `driverArrivePassengerDialoge()` | إشعار «الكابتن وصل» + مهلة انتظار 5 دقائق |
|
||||
| 2 | بدء الرحلة | `ride_begin_passenger.dart` | المسار الأزرق + العداد الحي |
|
||||
| 3 | مشاركة الرحلة | شاشة المراقبة الحية | رابط متابعة لطرف ثالث (للأهل) |
|
||||
| 4 | زر الطوارئ SOS | — | زر SOS + شرح «هزّ الهاتف 5 مرات» |
|
||||
| 5 | الاتصال بالكابتن | WebRTC داخلي | شاشة المكالمة داخل التطبيق (بدون كشف رقمك) |
|
||||
|
||||
## الوحدة 5: الإلغاء (3 لقطات)
|
||||
|
||||
| # | الخطوة | الشاشة في الكود | اللقطة المطلوبة |
|
||||
|---|---|---|---|
|
||||
| 1 | زر الإلغاء | `timer_for_cancell_trip_from_passenger.dart` | مكان الزر أثناء البحث/الانتظار |
|
||||
| 2 | اختيار السبب | `cancelRide/add.php` | قائمة أسباب الإلغاء |
|
||||
| 3 | تأكيد الإلغاء | — | رسالة التأكيد + سياسة الرسوم |
|
||||
|
||||
**نقاط يجب شرحها بوضوح:**
|
||||
- الإلغاء قبل قبول الكابتن: مجاني دائماً.
|
||||
- الإلغاء بعد وصول الكابتن أو تجاوز المهلة: قد تُطبَّق رسوم.
|
||||
- سياسة السائق: 3 إلغاءات متتالية = إيقاف مؤقت (شفافية للطرفين).
|
||||
|
||||
## الوحدة 6: الدفع والتقييم (6 لقطات)
|
||||
|
||||
| # | الخطوة | الشاشة في الكود | اللقطة المطلوبة |
|
||||
|---|---|---|---|
|
||||
| 1 | نهاية الرحلة | `processRideFinished()` | شاشة الفاتورة النهائية |
|
||||
| 2 | اختيار طريقة الدفع | `payment_method.page.dart` | القائمة: كاش/محفظة/بطاقة/MTN/Syriatel/Cliq |
|
||||
| 3 | الدفع كاش | `cash_confirm_bottom_page.dart` | حوار تأكيد الكاش |
|
||||
| 4 | الدفع بالمحفظة | `passenger_wallet.dart` | الخصم من الرصيد + شاشة الشحن بمكافأة («ادفع 20 خذ 21») |
|
||||
| 5 | تقييم الكابتن | `rate_captain.dart` | النجوم + الإكرامية (Tip) |
|
||||
| 6 | سجل الرحلات | `order_history.dart` | قائمة الرحلات السابقة والفواتير |
|
||||
|
||||
## الوحدة 7: مواصلاتي — للطلاب (5 لقطات)
|
||||
|
||||
| # | الخطوة | الشاشة | اللقطة المطلوبة |
|
||||
|---|---|---|---|
|
||||
| 1 | تبويب مواصلاتي | `siro_rider` تبويب Transit | اختيار الجامعة |
|
||||
| 2 | تفعيل العضوية | — | إدخال الرقم الجامعي (تفعيل فوري إذا كان بالكشف) |
|
||||
| 3 | استعراض الخطوط | — | قائمة الخطوط المعتمدة وجداولها |
|
||||
| 4 | التتبع الحي | خريطة الخط | الباص يتحرك على المسار + المحطات |
|
||||
| 5 | «فاتك الباص؟» | زر التحويل | الزر البارز لطلب سيارة بديلة |
|
||||
|
||||
---
|
||||
|
||||
## خطة التنفيذ على الموقع
|
||||
|
||||
1. **الصفحة:** `siromove.com/tutorial` — صفحة واحدة بتبويبات (وحدة لكل تبويب)، RTL،
|
||||
بنفس هوية تقرير الإرث الرقمي البصرية.
|
||||
2. **العرض:** لكل خطوة سطر شرح + لقطة شاشة داخل إطار هاتف (CSS phone frame) —
|
||||
حتى تجهز اللقطات، توضع صور Placeholder رمادية بنفس اسم الملف المطلوب.
|
||||
3. **التصوير:** جلسة واحدة (~ساعتان) بحساب تجريبي على بيئة staging تنتج الـ 34 لقطة
|
||||
المذكورة أعلاه دفعة واحدة، بالترتيب أعلاه.
|
||||
4. **لاحقاً:** تحويل كل وحدة إلى فيديو قصير (30-60 ثانية) بنفس اللقطات، ودمج
|
||||
التوتوريال داخل التطبيق كـ Coach Marks عند أول استخدام.
|
||||
|
||||
**إجمالي اللقطات المطلوبة: 34 لقطة** (5+6+4+5+3+6+5)
|
||||
@@ -0,0 +1,358 @@
|
||||
# تقرير فني: دورة حياة الرحلة وتتبع نظام الموقع في تطبيق السائق (Siro Driver)
|
||||
|
||||
## 1. منطق الاتصال بالشبكة وفحوصات السلامة (Connection & Safety Logic)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
يتم التحكم في حالة اتصال السائق بالشبكة وتفعيل استقبال الطلبات في ملف التحكم
|
||||
</div>
|
||||
|
||||
[HomeCaptainController](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/home_captain_controller.dart)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
من خلال الدالة
|
||||
</div>
|
||||
|
||||
[onButtonSelected](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/home_captain_controller.dart#L278)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
والتي تقوم بإجراء الفحوصات المتتالية التالية قبل السماح للسائق بالدخول في حالة النشاط (`isActive = true`):
|
||||
</div>
|
||||
|
||||
### أ. فحص عقوبة إلغاء الرحلات (Cancellation Penalty Check)
|
||||
<div dir="rtl" align="right">
|
||||
تتحقق الدالة
|
||||
</div>
|
||||
|
||||
[checkAndShowBlockDialog](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/home_captain_controller.dart#L347)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
من وجود تاريخ حظر نشط مخزن في الذاكرة المحلية تحت المفتاح `blockUntilDate`. إذا كان الوقت الحالي قبل وقت انتهاء الحظر، يتم إجبار السائق على وضع عدم الاتصال وعرض نافذة حوار مانعة تعرض عداداً تنازلياً لوقت فك الحظر. تفرض هذه العقوبة تلقائياً لمدة 4 ساعات عند إلغاء السائق لـ 3 رحلات في اليوم الواحد.
|
||||
</div>
|
||||
|
||||
### ب. فحص حد الإرهاق اليومي (Fatigue Monitoring Check)
|
||||
<div dir="rtl" align="right">
|
||||
يقوم النظام بمراقبة ساعات القيادة المتواصلة للسائق لمنع الحوادث عبر الدالة
|
||||
</div>
|
||||
|
||||
[_checkFatigueBeforeOnline](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/home_captain_controller.dart#L222)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
إذا بلغ مجموع ثواني النشاط المخزنة في `fatigue_total_seconds` ما يعادل 12 ساعة عمل، يتم استدعاء الدالة
|
||||
</div>
|
||||
|
||||
[_forceOfflineDueToFatigue](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/home_captain_controller.dart#L242)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
والتي تقطع الاتصال فوراً وتمنع السائق من العمل. لا يتم تصفير هذا العداد إلا إذا بقي السائق في وضع عدم الاتصال بشكل مستمر لمدة لا تقل عن 6 ساعات متواصلة (يتم تتبعها عبر قراءة تاريخ `fatigue_last_offline`).
|
||||
</div>
|
||||
|
||||
### ج. فحص الحد الأدنى لنقاط المحفظة (Wallet Points Threshold)
|
||||
<div dir="rtl" align="right">
|
||||
يتم استدعاء خاصية
|
||||
</div>
|
||||
|
||||
[minPointsThreshold](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/home_captain_controller.dart#L267)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
والتي تعتمد على الدولة الحالية المخزنة في إعدادات التطبيق. إذا كان الرصيد الحالي للنقاط أدنى من الحد المسموح به (والذي يساوي `-200` نقطة في سوريا ومصر، و `-3` نقاط في الأردن)، يتم منع السائق من استقبال الطلبات وإيقاف تحديثات الموقع فوراً.
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 2. نظام التتبع وتحسين استهلاك البطارية والمعالج (GPS & Performance Optimization)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
لمعالجة مشاكل استنزاف البطارية وارتفاع حرارة الأجهزة الضعيفة، تم تطبيق استراتيجيات تحسين الأداء التالية في
|
||||
</div>
|
||||
|
||||
[MapDriverController](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/map_driver_controller.dart)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
و
|
||||
</div>
|
||||
|
||||
[HomeCaptainController](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/home_captain_controller.dart)
|
||||
|
||||
### أ. تجميع قنوات البث ومستمع الحركة الموحد (Centralized GPS Stream & 500ms Timer Polling)
|
||||
<div dir="rtl" align="right">
|
||||
بدلاً من فتح قنوات بث (Streams) متعددة ومستقلة للـ GPS، تم تركيز البث في كلاس مركزي موحد هو
|
||||
</div>
|
||||
|
||||
[LocationController](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/functions/location_controller.dart)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
حيث يقوم مستمع التوجيه والملاحة في الدالة
|
||||
</div>
|
||||
|
||||
[startListeningStepNavigation](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/map_driver_controller.dart#L306)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
بعمل استعلام دوري خفيف (Polling) كل 500 ملي ثانية لقراءة إحداثيات `locationController.myLocation` الجاهزة مسبقاً، مما يمنع استدعاء العتاد المادي لجهاز الاستقبال عدة مرات متزامنة.
|
||||
</div>
|
||||
|
||||
### ب. فلترة ضجيج الإحداثيات (Jitter Noise Filtering)
|
||||
<div dir="rtl" align="right">
|
||||
لمنع التحديثات المتكررة وغير المفيدة التي تنتج عن عدم دقة حساس الـ GPS عند الوقوف، يقوم الكود بمقارنة إحداثيات الموقع الجديد مع آخر موقع تم تسجيله عبر الدالة
|
||||
</div>
|
||||
|
||||
`Geolocator.distanceBetween`
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
فإذا كانت المسافة المقطوعة أقل من 3 أمتار، يتم تجاهل التحديث بالكامل وعدم تعديل المسار أو إرسال بيانات للسيرفر.
|
||||
</div>
|
||||
|
||||
### ج. التحكم الذكي في حركة الكاميرا والـ UI Throttling
|
||||
<div dir="rtl" align="right">
|
||||
يتم التحكم في حركة الكاميرا لمتابعة حركة السائق على الخريطة الرئيسية عبر مؤقت دوري يعمل كل 8 ثوانٍ:
|
||||
</div>
|
||||
|
||||
```dart
|
||||
_cameraFollowTimer = Timer.periodic(const Duration(seconds: 8), (timer) { ... });
|
||||
```
|
||||
<div dir="rtl" align="right">
|
||||
وتشترط الدالة تحرك السائق لمسافة تزيد عن 15 متراً عن آخر موقع تحركت إليه الكاميرا لتنفيذ الحركة الدائرية والتقريب، مما يقلل بشكل كبير من استهلاك معالج الرسوميات (GPU) في عمليات إعادة رسم الخريطة (Re-rendering) أثناء الوقوف. كذلك، تم تفعيل وسيلة
|
||||
</div>
|
||||
|
||||
`_uiThrottleMs = 400`
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
لكبح تكرار استدعاء الدالة `update()` المسؤولة عن تحديث الواجهات.
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 3. استقبال وإدارة الطلبات ونافذة الواجهة العائمة (Order Requests & Overlay System)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
يتم استقبال إشعارات الرحلات الجديدة إما عبر سوكيت الويب (WebSockets) أو إشعارات Firebase (FCM). عند وصول إشعار والبرنامج في الخلفية، يتم تفعيل شاشة الواجهة العائمة المفتوحة عبر حزمة
|
||||
</div>
|
||||
|
||||
`FlutterOverlayWindow`
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
والتي تظهر للسائق تفاصيل الطلب بشكل مباشر.
|
||||
</div>
|
||||
|
||||
### أ. تهيئة البيانات ودعم الصيغ المتعددة (Smart Data Handling)
|
||||
<div dir="rtl" align="right">
|
||||
يقوم الكلاس
|
||||
</div>
|
||||
|
||||
[OrderRequestController](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/order_request_controller.dart)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
بتحليل البيانات المستقبلة في الدالة
|
||||
</div>
|
||||
|
||||
[_initializeData](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/order_request_controller.dart#L126)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
حيث تدعم بشكل مرن استقبال البيانات سواء كانت على شكل قائمة مرتبة (List) قادمة من إشعارات Firebase، أو على شكل خريطة مفاتيح (Map) قادمة من سوكيت الويب.
|
||||
</div>
|
||||
|
||||
### ب. مؤقت قبول الطلب وصوت التنبيه
|
||||
<div dir="rtl" align="right">
|
||||
عند فتح شاشة الطلب، يتم تشغيل صوت تنبيه متكرر وتفعيل مؤقت تنازلي مدته 15 ثانية عبر الدالة
|
||||
</div>
|
||||
|
||||
[startTimer](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/order_request_controller.dart#L555)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
إذا انتهت الـ 15 ثانية دون استجابة السائق، يتم إيقاف الصوت وإغلاق الشاشة تلقائياً.
|
||||
</div>
|
||||
|
||||
### ج. فحص القبول المسبق للطلب (Socket ride_taken Listening)
|
||||
<div dir="rtl" align="right">
|
||||
لتفادي قبول طلب تم أخذه بالفعل من قبل كابتن آخر، يقوم الكنترولر في الدالة
|
||||
</div>
|
||||
|
||||
[_listenForRideTaken](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/order_request_controller.dart#L587)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
بالاستماع لحدث السوكيت `ride_taken`. عند استقبال الحدث ومطابقة معرف الرحلة، يتم إلغاء إشعار النظام فوراً، وإغلاق شاشة الطلب وعرض تنبيه للسائق بأن "الطلب تم قبوله من قبل سائق آخر".
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 4. نظام الملاحة التفاعلي ورسم المسارات (Interactive Navigation & Mapping)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
يعتمد تطبيق السائق على خرائط انطلق المبنية على محرك مابليبرا (MapLibre)، ويتم استدعاء ورسم مسارات الملاحة التفاعلية في تطبيق السائق بدقة وتفصيل عالية عبر الفئات والأساليب التالية:
|
||||
</div>
|
||||
|
||||
### أ. رسم المسارات المزدوجة ونوافذ المعلومات في شاشة طلب الرحلة (Dual-Route & Info Windows in Order Request)
|
||||
<div dir="rtl" align="right">
|
||||
في شاشة استقبال الطلب
|
||||
</div>
|
||||
|
||||
[OrderRequestController](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/order_request_controller.dart)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
يقوم التطبيق بالاستعلام ورسم مسارين جغرافيين في نفس الوقت عبر الدالة
|
||||
</div>
|
||||
|
||||
[_calculateFullJourney](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/order_request_controller.dart#L226)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
حيث يستدعي:
|
||||
1. مسار الانطلاق (Pickup Route): من موقع السائق الحالي إلى موقع الراكب (يرسم باللون الأصفر/الذهبي).
|
||||
2. مسار الرحلة الرئيسي (Trip Route): من موقع الراكب إلى الوجهة النهائية (يرسم باللون الأسود/الأزرق).
|
||||
|
||||
ولعرض تفاصيل المسافة والوقت كصندوق معلومات عائم (Info Window) مباشرة فوق الخريطة، يتم استدعاء الدالة
|
||||
</div>
|
||||
|
||||
[_updateMarkers](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/order_request_controller.dart#L468)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
والتي تقوم بطلب مولد الماركرز
|
||||
</div>
|
||||
|
||||
[MarkerGenerator.createCustomMarkerBitmap](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/views/home/Captin/orderCaptin/marker_generator.dart)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
لتوليد صور ماركر مخصصة ديناميكياً تحتوي على الوقت والمسافة كصندوق معلومات يعلو الخريطة فوق نقطة الركوب (أقرب مسافة وزمن وصول للسائق) ونقطة الوصول (المسافة والزمن المقدرين للرحلة الكلية للراكب).
|
||||
</div>
|
||||
|
||||
### ب. تسلسل رسم وحذف المسارات أثناء دورة حياة الرحلة (Lifecycle Route Transitions)
|
||||
<div dir="rtl" align="right">
|
||||
تخضع مسارات الخريطة لعملية تحديث وحذف دورية أثناء الرحلة في الكنترولر
|
||||
</div>
|
||||
|
||||
[MapDriverController](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/map_driver_controller.dart)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
وفق التسلسل التالي:
|
||||
1. **عند قبول الطلب**: يتم مسح خط الوجهة، ورسم خط الملاحة الجاري باتجاه الراكب (باللون الأصفر) عبر استدعاء
|
||||
</div>
|
||||
|
||||
[getRoute](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/map_driver_controller.dart#L1885)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
2. **عند وصول السائق لموقع الراكب**: بمجرد ضغط السائق على زر "وصلت" وتأكيده، يتم استدعاء الدالة
|
||||
</div>
|
||||
|
||||
[clearPolyline](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/map_driver_controller.dart#L422)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
والتي تقوم بمسح وحذف المسار الجاري الأول (الخط الأصفر الموصل للراكب) بالكامل من الخريطة لتنظيف الشاشة.
|
||||
3. **عند بدء الرحلة الفعلي**: يتم الاستعلام ورسم المسار الأزرق/الأسود الجديد المؤدي للوجهة النهائية مباشرة باتجاه وجهة الراكب عبر إعادة استدعاء دالة المسار `getRoute` للوجهة.
|
||||
</div>
|
||||
|
||||
### ج. تفادي انهيار الخرائط عند المسافات الصفرية (Same-Device Crash Protection)
|
||||
<div dir="rtl" align="right">
|
||||
عند تشغيل اختبارات الرحلة وكون موقع السائق والراكب متطابقين تماماً (مسافة أقل من 10 أمتار)، ينهار محرك الملاحة المكتوب بلغة C++ بسبب إحداثيات الصندوق المحيط (Bounds) ذات العرض الصفرى مطلقةً استثناء `std::domain_error`. لمنع ذلك، يقوم الكود بفحص المسافة، وفي حال كانت متطابقة يقوم بإظهار نافذة تنبيه
|
||||
</div>
|
||||
|
||||
[_showSameDeviceWarning](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/map_driver_controller.dart#L2171)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
ثم الانتقال قسرياً لتطبيق زوم تقريبي آمن بدلاً من احتواء الحدود الصفرية.
|
||||
</div>
|
||||
|
||||
### د. تحديث المسار المقطوع بنظام النافذة المنزلقة (Bidirectional Sliding Window)
|
||||
<div dir="rtl" align="right">
|
||||
لمنع إعادة رسم كامل خط المسار (Polyline) عند كل إرسال للموقع، يتم استخدام نافذة بحث منزلقة ثنائية الاتجاه تتكون من 60 نقطة (30 للخلف و 30 للأمام) في الدالة
|
||||
</div>
|
||||
|
||||
[_updateTraveledPolylineSmart](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/map_driver_controller.dart#L2743)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
تحدد الدالة أقرب نقطة لموقع السائق الحالي على المسار المخزن، وتقوم بقطع الـ Polyline إلى جزأين: مسار مقطوع بلون رمادي ومسار متبقي بلون أزرق/أصفر، وتحديث الخريطة فقط عند تجاوز إزاحة تزيد عن 50 متراً.
|
||||
</div>
|
||||
|
||||
### هـ. رسم خطوط المشي المنقطة (Passenger Walk Dotted Line)
|
||||
<div dir="rtl" align="right">
|
||||
عندما يكون موقع الراكب الفعلي بعيداً عن أقرب طريق إسفلتي متاح للسيارات، يتم استدعاء الدالة
|
||||
</div>
|
||||
|
||||
[_updatePassengerWalkLine](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/map_driver_controller.dart#L2857)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
والتي تقوم برسم خط منقط بلون أزرق رمادي مميز يمتد من نهاية طريق السيارات الإسفلتي إلى موقع الراكب الحقيقي لتوجيه السائق سيراً على الأقدام إذا لزم الأمر.
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 5. محرك تسعير الرحلة الديناميكي (Dynamic Pricing Engine)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
أثناء سير الرحلة، يعمل مؤقت دوري كل ثانية لحساب السعر الفعلي بشكل لحظي وعرضه في واجهة السائق عبر الدالة
|
||||
</div>
|
||||
|
||||
[rideIsBeginPassengerTimer](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/map_driver_controller.dart#L1570)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
ويعتمد الحساب على القواعد البرمجية التالية:
|
||||
</div>
|
||||
|
||||
### أ. تجميد الأسعار للرحلات الثابتة (Fixed Price Protection)
|
||||
<div dir="rtl" align="right">
|
||||
إذا كان نوع الرحلة من الفئات ذات السعر الثابت مثل `Speed` أو `Fixed Price` أو `Awfar Car`، يتم إيقاف الحساب الديناميكي وتثبيت السعر المعروض على القيمة المتفق عليها مسبقاً في عرض السعر الأولي للراكب.
|
||||
</div>
|
||||
|
||||
### ب. تسعير الفئات المتغيرة (Comfort / Electric / Van / Delivery)
|
||||
<div dir="rtl" align="right">
|
||||
للفئات المتغيرة، يتم حساب السعر التراكمي عبر دمج المسافة الفعلية المقطوعة مع وقت الرحلة الفعلي طبقاً للمعادلة:
|
||||
</div>
|
||||
|
||||
```
|
||||
Price = (Distance_KM * Per_KM_Rate) + (Duration_Minutes * Per_Minute_Rate)
|
||||
```
|
||||
<div dir="rtl" align="right">
|
||||
حيث يتم تطبيق تسعيرة الدقيقة بناءً على ساعة الرحلة الحالية لمراعاة أوقات الذروة (طبيعي، متأخر، أو حركة مرورية كثيفة)، بالإضافة إلى ضرب الناتج في عمولة السيرفر (كازان) المحددة بنسبة مئوية.
|
||||
</div>
|
||||
|
||||
### ج. تخفيضات المسافات الطويلة (Long Distance Reduction Rules)
|
||||
<div dir="rtl" align="right">
|
||||
إذا تجاوزت المسافة المقطوعة 35 كم أو 40 كم، يطبق محرك التسعير قواعد خاصة:
|
||||
- يتم تجميد تسعيرة الدقيقة وتثبيتها على قيمة ثابتة للرحلات الطويلة تعادل 600 ل.س/دقيقة.
|
||||
- يتم تطبيق نسبة خصم ديناميكية (تصل إلى 35%) على تسعيرة الكيلومتر لتخفيض الأعباء على الراكب مع الحفاظ على ربحية السائق.
|
||||
- يضمن الكود دائماً عدم نزول السعر الفعلي النهائي عن السعر المتفق عليه مسبقاً (Quoted Price).
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 6. حماية الرحلة من الإنهاء المبكر الخاطئ (Anti-Fraud & Exit Validation)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
عندما يسحب السائق شريط إنهاء الرحلة، يمر الطلب بفحص أمني دقيق للتأكد من عدم وجود تلاعب أو إنهاء وهمي للرحلة.
|
||||
</div>
|
||||
|
||||
### أ. شرط الإزاحة الأمنية (Displacement Validation Check)
|
||||
<div dir="rtl" align="right">
|
||||
يتم استدعاء الدالة
|
||||
</div>
|
||||
|
||||
[_validateTripDistance](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/map_driver_controller.dart#L1458)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
والتي تقوم بحساب المسافة المستقيمة الفاصلة بين موقع انطلاق الرحلة (موقع الراكب الأصلي) والموقع الجغرافي الحالي للسائق. يشترط النظام أن تتجاوز هذه المسافة قيمة **خُمس المسافة الإجمالية المخططة للرحلة** (`plannedDistance / 5`).
|
||||
</div>
|
||||
|
||||
### ب. التنبيه الصوتي المانع والتراجع (TTS Rejection Alert)
|
||||
<div dir="rtl" align="right">
|
||||
إذا حاول السائق إنهاء الرحلة قبل قطع حد الخُمس المسموح، يتم رفض الطلب فوراً وإغلاق أي نوافذ تحميل، وتفعيل قارئ النصوص الصوتي لإصدار تنبيه صوتي باللغة الإنجليزية عبر الهاتف:
|
||||
</div>
|
||||
|
||||
> "You haven't moved sufficiently!"
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
مع إظهار رسالة خطأ تحذيرية في الواجهة وإعادة زر إنهاء الرحلة لوضعه النشط للسماح بإكمال الرحلة.
|
||||
</div>
|
||||
|
||||
### ج. إتمام المعاملة المالية الموازية (Parallel Transaction Completion)
|
||||
<div dir="rtl" align="right">
|
||||
عند اجتياز فحص المسافة بنجاح، يتم تفعيل دالة الإنهاء الفعلي
|
||||
</div>
|
||||
|
||||
[finishRideFromDriver1](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/home/captin/map_driver_controller.dart#L1363)
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
والتي تقوم بإرسال طلبات التحديث المالي وإغلاق الرحلة في آن واحد إلى سيرفر العمليات وسيرفر المحفظة المالي بالتوازي عبر استدعاء
|
||||
</div>
|
||||
|
||||
`Future.wait([...])`
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
مما يقلل وقت المعاملة على أجهزة السائقين ويمنع تعليق التطبيق. بعد نجاح المعاملات، يتم توجيه السائق تلقائياً إلى صفحة تقييم الراكب وإرسال تقرير السلوك الفني.
|
||||
</div>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,252 @@
|
||||
|
||||
# تقرير محاكاة دورة حياة الرحلة — Siro Rider 🚖
|
||||
|
||||
> **الهدف:** التحقق من صحة رسم الخطوط (Polylines) والـ Markers في كل مرحلة من مراحل الرحلة
|
||||
|
||||
---
|
||||
|
||||
## 🎬 تسجيل المحاكاة
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 📸 لقطات كل مرحلة
|
||||
|
||||
````carousel
|
||||

|
||||
<!-- slide -->
|
||||

|
||||
<!-- slide -->
|
||||

|
||||
<!-- slide -->
|
||||

|
||||
<!-- slide -->
|
||||

|
||||
<!-- slide -->
|
||||

|
||||
<!-- slide -->
|
||||

|
||||
````
|
||||
|
||||
---
|
||||
|
||||
## 🔍 تحليل كل مرحلة
|
||||
|
||||
### 1️⃣ `noRide` — لا رحلة
|
||||
| العنصر | السلوك المتوقع | النتيجة |
|
||||
|--------|---------------|---------|
|
||||
| Polylines | لا شيء | ✅ |
|
||||
| Markers | سيارات قريبة (nearbyCar) + موقع الراكب | ✅ |
|
||||
| Master Timer | كل 6 ثوانٍ → `getCarsLocationByPassenger()` | ✅ |
|
||||
|
||||
---
|
||||
|
||||
### 2️⃣ `searching` — البحث عن سائق
|
||||
| العنصر | السلوك المتوقع | النتيجة |
|
||||
|--------|---------------|---------|
|
||||
| Polylines | خط الرحلة الأصلي (أزرق فاتح، للمعاينة فقط) | ✅ |
|
||||
| Markers | نقطة A (بداية) + نقطة B (وجهة) | ✅ |
|
||||
| Master Timer | كل 8 ثوانٍ → `getRideStatus()` | ✅ |
|
||||
| Socket | `initConnectionWithSocket()` | ✅ |
|
||||
|
||||
---
|
||||
|
||||
### 3️⃣ `driverApplied` — السائق قبل الرحلة
|
||||
|
||||
> [!IMPORTANT]
|
||||
> هذه المرحلة تحتوي على **ثلاثة خطوط** يجب رسمها صحيحاً
|
||||
|
||||
| العنصر | السلوك المتوقع | النتيجة |
|
||||
|--------|---------------|---------|
|
||||
| `driver_route_solid` | خط أصفر صلب من موقع السائق إلى نقطة الالتقاط | ✅ |
|
||||
| `passenger_walk_line` | خط منقط رمادي من آخر نقطة طريق إلى الراكب الدقيق | ✅ |
|
||||
| `walk_end_marker` | أيقونة مشي 🚶 عند آخر نقطة قريبة من الطريق | ✅ |
|
||||
| Car Marker | سيارة عند موقع السائق بالاتجاه الصحيح | ✅ |
|
||||
| `calculateDriverToPassengerRoute()` | رسم المسار عبر API انطلق | ✅ |
|
||||
|
||||
**الكود المقابل:**
|
||||
```dart
|
||||
// في processRideAcceptance():
|
||||
await calculateDriverToPassengerRoute(driverPos, passengerLocation);
|
||||
// في calculateDriverToPassengerRoute():
|
||||
polyLines = {...polyLines, Polyline(
|
||||
polylineId: PolylineId('driver_route_solid'),
|
||||
points: decodedPoints,
|
||||
color: Colors.amber, // مسار القدوم باللون الأصفر
|
||||
width: 5,
|
||||
)};
|
||||
// في _updatePassengerWalkLine():
|
||||
final walkDashes = _buildDashedLine(lastRoadPt, passengerLocation, ...);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4️⃣ السائق يتحرك — Real-time Updates
|
||||
| العنصر | السلوك المتوقع | النتيجة |
|
||||
|--------|---------------|---------|
|
||||
| `updateRemainingRoute()` | قص نقاط المسار المكتملة | ✅ |
|
||||
| Car Marker | يتحرك تدريجياً على المسار | ✅ |
|
||||
| `passenger_walk_line` | يتحدث مع تحرك السائق | ✅ |
|
||||
| ETA Display | يتقلص مع كل تحديث | ✅ |
|
||||
| `checkAndRecalculateIfDeviated()` | إعادة حساب عند الانحراف >30م | ✅ |
|
||||
|
||||
**آلية التحديث:**
|
||||
```
|
||||
Socket → handleDriverLocationUpdate() → updateDriverMarker() + updateRemainingRoute()
|
||||
↓ (إذا Socket فاشل)
|
||||
Watchdog Timer → getDriverCarsLocationToPassengerAfterApplied() (polling fallback)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5️⃣ `driverArrived` — السائق وصل
|
||||
|
||||
> [!WARNING]
|
||||
> **أهم نقطة للتحقق:** يجب مسح الخطوط القديمة ورسم مسار الرحلة الجديد
|
||||
|
||||
| العنصر | السلوك المتوقع | النتيجة |
|
||||
|--------|---------------|---------|
|
||||
| حذف `driver_route_solid` | ✅ يُحذف | ✅ |
|
||||
| حذف `passenger_walk_line` | ✅ يُحذف | ✅ |
|
||||
| رسم `main_route` | خط أزرق من نقطة الالتقاط للوجهة | ✅ |
|
||||
| Car Marker | عند نقطة الالتقاط | ✅ |
|
||||
| Firebase Notification | "السائق وصل!" | ✅ |
|
||||
| Timer 5 دقائق | `startTimerDriverWaitPassenger5Minute()` | ✅ |
|
||||
|
||||
**الكود المقابل:**
|
||||
```dart
|
||||
// في processDriverArrival():
|
||||
await calculateDriverToPassengerRoute(
|
||||
driverCarsLocationToPassengerAfterApplied.last,
|
||||
myDestination,
|
||||
isBeginPhase: true, // ← مهم جداً
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6️⃣ `inProgress` — الرحلة بدأت
|
||||
|
||||
> [!IMPORTANT]
|
||||
> **`isBeginPhase: true`** يجعل الخط أزرق بدلاً من أصفر
|
||||
|
||||
| العنصر | السلوك المتوقع | النتيجة |
|
||||
|--------|---------------|---------|
|
||||
| مسح الخطوط القديمة | `driver_route*`, `main_route`, `route_direct` | ✅ |
|
||||
| رسم `main_route` | خط أزرق `#2196F3` من السائق/الراكب للوجهة | ✅ |
|
||||
| Car Marker | عند نقطة الانطلاق (أزرق) | ✅ |
|
||||
| `rideIsBeginPassengerTimer()` | عداد الرحلة يعمل | ✅ |
|
||||
| `runWhenRideIsBegin()` | polling كل 4 ثوانٍ | ✅ |
|
||||
|
||||
**الكود المقابل:**
|
||||
```dart
|
||||
// في processRideBegin():
|
||||
polyLines = polyLines.where((p) =>
|
||||
p.polylineId.value != 'main_route' &&
|
||||
p.polylineId.value != 'route_direct' &&
|
||||
!p.polylineId.value.startsWith('driver_route')
|
||||
).toSet();
|
||||
|
||||
await calculateDriverToPassengerRoute(driverPos, myDestination,
|
||||
isBeginPhase: true); // ← يرسم خط أزرق للوجهة
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7️⃣ السيارة تسير — En Route
|
||||
| العنصر | السلوك المتوقع | النتيجة |
|
||||
|--------|---------------|---------|
|
||||
| `main_route` يتقلص | يُقص من الأمام مع تحرك السيارة | ✅ |
|
||||
| Car Marker | يتحرك على المسار الأزرق | ✅ |
|
||||
| ETA يتحدث | مسافة ووقت يتقلصان | ✅ |
|
||||
| Progress Bar | يمتلئ تدريجياً | ✅ |
|
||||
|
||||
---
|
||||
|
||||
### 8️⃣ `finished` — انتهت الرحلة
|
||||
| العنصر | السلوك المتوقع | النتيجة |
|
||||
|--------|---------------|---------|
|
||||
| `mapEngine.clearPolyline()` | مسح جميع الخطوط | ✅ |
|
||||
| `markers = {}` | مسح جميع الـ Markers | ✅ |
|
||||
| `disposeRideSocket()` | إغلاق WebSocket | ✅ |
|
||||
| `stopAllTimers()` | إيقاف كل التايمرات | ✅ |
|
||||
| Rating Screen | فتح `RatingDriverBottomSheet` | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ ملاحظات مهمة من تحليل الكود
|
||||
|
||||
### 1. الخط المنقط `_updatePassengerWalkLine()`
|
||||
|
||||
```dart
|
||||
// يعمل فقط في حالتي Apply و Arrived
|
||||
bool shouldShowWalkPath =
|
||||
(statusRide == 'Apply' || statusRide == 'Arrived') &&
|
||||
_currentDriverRoutePoints.isNotEmpty &&
|
||||
passengerLocation.latitude != 0;
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> يُرسم الخط المنقط من **آخر نقطة على الطريق** (`_currentDriverRoutePoints.last`) وليس من موقع السائق. هذا صحيح تماماً لأنه يمثل المسافة المشي من الطريق للراكب.
|
||||
|
||||
### 2. انحراف السائق `checkAndRecalculateIfDeviated()`
|
||||
|
||||
```dart
|
||||
final bool distanceDeviation = minDistance > _deviationThresholdMeters; // 30م
|
||||
if (distanceDeviation || _routeHeadingMismatchCount >= 2) {
|
||||
await calculateDriverToPassengerRoute(...); // إعادة الرسم
|
||||
}
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
> الإعادة التلقائية تعمل عند انحراف أكثر من **30 متراً** أو عند اختلاف الاتجاه مرتين متتاليتين.
|
||||
|
||||
### 3. آلية Socket + Polling الهجينة
|
||||
|
||||
```
|
||||
Socket متصل + يُرسل موقع < 20 ثانية → نعتمد على Socket فقط
|
||||
Socket صامت 15-30 ثانية → نستدعي API مرة واحدة
|
||||
Socket صامت > 30 ثانية → نبدأ polling كل 6 ثوانٍ
|
||||
Socket يعود → نوقف polling
|
||||
```
|
||||
|
||||
### 4. مشكلة محتملة في `updateRemainingRoute()`
|
||||
|
||||
```dart
|
||||
// في حالة Begin، الكود يحذف أي driver_route ولا يرسم شيئاً جديداً
|
||||
if (statusRide == 'Begin' || currentRideState.value == RideState.inProgress) {
|
||||
polyLines = polyLines
|
||||
.where((p) => !p.polylineId.value.startsWith('driver_route'))
|
||||
.toSet();
|
||||
// ← لا يرسم main_route هنا!
|
||||
}
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> **ملاحظة:** `updateRemainingRoute()` في حالة `inProgress` يحذف `driver_route*` لكنه **لا يُحدِّث** `main_route`. المسار الأزرق يُرسم مرة واحدة في `processRideBegin()` ويُقص فقط عبر هذه الدالة. تأكد من أن `main_route` لا يُحذف خطأً في هذه الدالة.
|
||||
|
||||
---
|
||||
|
||||
## ✅ خلاصة نتائج المحاكاة
|
||||
|
||||
| المرحلة | رسم الخطوط | حركة الـ Marker | التزامن | التحقق |
|
||||
|---------|-----------|----------------|---------|--------|
|
||||
| noRide | — | سيارات قريبة | Master Timer | ✅ |
|
||||
| searching | Trip preview (فاتح) | A + B | Socket init | ✅ |
|
||||
| driverApplied | أصفر + منقط | سيارة + A + B | Socket / Polling | ✅ |
|
||||
| driverMoving | أصفر يتقلص + منقط يتحدث | سيارة تتحرك | Real-time | ✅ |
|
||||
| driverArrived | **أزرق جديد** (مسح القديم) | سيارة عند A | Firebase | ✅ |
|
||||
| inProgress | أزرق كامل | سيارة أزرق | Socket / Polling | ✅ |
|
||||
| enRoute | أزرق يتقلص | سيارة تتحرك | Real-time | ✅ |
|
||||
| finished | **مسح الكل** | لا شيء | — | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## 🗂️ الملفات المرجعية
|
||||
|
||||
- [ride_lifecycle_controller.dart](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_rider/lib/controller/home/map/ride_lifecycle_controller.dart) — المنطق الرئيسي
|
||||
- [map_socket_controller.dart](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_rider/lib/controller/home/map/map_socket_controller.dart) — إدارة WebSocket
|
||||
- [map_screen_binding.dart](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_rider/lib/controller/home/map/map_screen_binding.dart) — تسجيل الـ Controllers
|
||||
- [siro_ride_simulation.html](file:///Users/hamzaaleghwairyeen/.gemini/antigravity-ide/brain/3690cabc-80e2-4e43-af35-66c30922ddee/siro_ride_simulation.html) — ملف المحاكاة التفاعلية
|
||||
|
||||
@@ -0,0 +1,751 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ar" dir="rtl">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Siro Admin – محاكاة لوحة التحكم والعمليات</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Tajawal:wght@300;400;500;700;900&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg: #090a0f;
|
||||
--surface: #11131c;
|
||||
--surface-elevated: #1a1d2b;
|
||||
--border: #23273c;
|
||||
--primary: #4776e6;
|
||||
--primary-glow: rgba(71, 118, 230, 0.3);
|
||||
--accent: #8e2de2;
|
||||
--success: #10b981;
|
||||
--warning: #f59e0b;
|
||||
--danger: #ef4444;
|
||||
--info: #06b6d4;
|
||||
--text-primary: #f3f4f6;
|
||||
--text-secondary: #9ca3af;
|
||||
--divider: #1f2937;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Tajawal', sans-serif;
|
||||
background-color: var(--bg);
|
||||
color: var(--text-primary);
|
||||
min-height: 100vh;
|
||||
overflow-x: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
/* Header styling with Glassmorphism */
|
||||
header {
|
||||
background: rgba(17, 19, 28, 0.85);
|
||||
backdrop-filter: blur(12px);
|
||||
border-bottom: 1px solid var(--border);
|
||||
padding: 16px 24px;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.brand {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.logo-container {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
background: linear-gradient(135deg, var(--primary), var(--accent));
|
||||
border-radius: 10px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-weight: 900;
|
||||
color: #ffffff;
|
||||
font-size: 20px;
|
||||
box-shadow: 0 0 15px var(--primary-glow);
|
||||
}
|
||||
|
||||
.brand h1 {
|
||||
font-size: 20px;
|
||||
font-weight: 700;
|
||||
background: linear-gradient(to left, #ffffff, var(--text-secondary));
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
|
||||
.header-status {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.status-badge {
|
||||
background: rgba(16, 185, 129, 0.1);
|
||||
border: 1px solid var(--success);
|
||||
color: var(--success);
|
||||
padding: 6px 12px;
|
||||
border-radius: 20px;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.pulse {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
background-color: var(--success);
|
||||
border-radius: 50%;
|
||||
animation: pulse-animation 2s infinite;
|
||||
}
|
||||
|
||||
@keyframes pulse-animation {
|
||||
0% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.7); }
|
||||
70% { transform: scale(1); box-shadow: 0 0 0 6px rgba(16, 185, 129, 0); }
|
||||
100% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); }
|
||||
}
|
||||
|
||||
/* Main layout setup */
|
||||
.dashboard-container {
|
||||
display: grid;
|
||||
grid-template-columns: 280px 1fr;
|
||||
flex: 1;
|
||||
height: calc(100vh - 73px);
|
||||
}
|
||||
|
||||
/* Sidebar controls */
|
||||
.sidebar {
|
||||
background-color: var(--surface);
|
||||
border-left: 1px solid var(--border);
|
||||
padding: 24px;
|
||||
overflow-y: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.menu-section-title {
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
color: var(--text-secondary);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.sidebar-btn {
|
||||
width: 100%;
|
||||
background: var(--surface-elevated);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 12px;
|
||||
padding: 12px 16px;
|
||||
color: var(--text-primary);
|
||||
font-family: inherit;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
transition: all 0.2s ease;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.sidebar-btn:hover {
|
||||
border-color: var(--primary);
|
||||
background: rgba(71, 118, 230, 0.05);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.sidebar-btn.active {
|
||||
border-color: var(--primary);
|
||||
background: linear-gradient(135deg, var(--primary), var(--accent));
|
||||
color: #ffffff;
|
||||
box-shadow: 0 4px 15px var(--primary-glow);
|
||||
}
|
||||
|
||||
/* Workspace Panel */
|
||||
.workspace {
|
||||
display: grid;
|
||||
grid-template-rows: auto 1fr;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Top stats row */
|
||||
.stats-row {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
gap: 16px;
|
||||
padding: 24px;
|
||||
background-color: rgba(9, 10, 15, 0.5);
|
||||
}
|
||||
|
||||
.stat-card {
|
||||
background-color: var(--surface);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 16px;
|
||||
padding: 20px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.stat-card::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
height: 3px;
|
||||
background: linear-gradient(to left, var(--primary), var(--accent));
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s;
|
||||
}
|
||||
|
||||
.stat-card:hover::after {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.stat-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
color: var(--text-secondary);
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
font-size: 28px;
|
||||
font-weight: 800;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.stat-change {
|
||||
font-size: 12px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.stat-change.up { color: var(--success); }
|
||||
.stat-change.down { color: var(--danger); }
|
||||
|
||||
/* Action view area */
|
||||
.action-view {
|
||||
padding: 0 24px 24px 24px;
|
||||
overflow-y: auto;
|
||||
display: grid;
|
||||
grid-template-columns: 2fr 1fr;
|
||||
gap: 24px;
|
||||
}
|
||||
|
||||
/* Card Panels */
|
||||
.panel-card {
|
||||
background-color: var(--surface);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 16px;
|
||||
padding: 24px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.panel-title {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
border-bottom: 1px solid var(--border);
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
|
||||
/* Simulation Canvas Map */
|
||||
.map-panel {
|
||||
position: relative;
|
||||
height: 320px;
|
||||
background-color: #0b0d19;
|
||||
border-radius: 12px;
|
||||
overflow: hidden;
|
||||
border: 1px solid var(--border);
|
||||
}
|
||||
|
||||
canvas {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.map-controls {
|
||||
position: absolute;
|
||||
bottom: 12px;
|
||||
right: 12px;
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.map-btn {
|
||||
background: rgba(17, 19, 28, 0.9);
|
||||
border: 1px solid var(--border);
|
||||
color: #fff;
|
||||
padding: 6px 12px;
|
||||
border-radius: 8px;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
.map-btn:hover {
|
||||
background: var(--primary);
|
||||
}
|
||||
|
||||
/* Logs view */
|
||||
.logs-container {
|
||||
max-height: 280px;
|
||||
overflow-y: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.log-item {
|
||||
padding: 10px 14px;
|
||||
border-radius: 10px;
|
||||
font-size: 13px;
|
||||
line-height: 1.4;
|
||||
background-color: var(--surface-elevated);
|
||||
border-right: 3px solid var(--border);
|
||||
}
|
||||
|
||||
.log-item.success { border-color: var(--success); }
|
||||
.log-item.warning { border-color: var(--warning); }
|
||||
.log-item.danger { border-color: var(--danger); }
|
||||
.log-item.info { border-color: var(--info); }
|
||||
|
||||
/* Forms */
|
||||
.form-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
label {
|
||||
font-size: 13px;
|
||||
color: var(--text-secondary);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
input, select {
|
||||
background-color: var(--surface-elevated);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 10px;
|
||||
padding: 12px;
|
||||
color: #fff;
|
||||
font-family: inherit;
|
||||
font-size: 14px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
input:focus, select:focus {
|
||||
border-color: var(--primary);
|
||||
}
|
||||
|
||||
.submit-btn {
|
||||
background: linear-gradient(135deg, var(--primary), var(--accent));
|
||||
color: #fff;
|
||||
border: none;
|
||||
padding: 12px;
|
||||
border-radius: 10px;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
font-family: inherit;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
|
||||
.submit-btn:hover {
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
/* List queues (Captains documents) */
|
||||
.doc-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
background-color: var(--surface-elevated);
|
||||
padding: 12px 16px;
|
||||
border-radius: 12px;
|
||||
border: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.doc-info {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.doc-name { font-weight: 600; font-size: 14px; }
|
||||
.doc-details { font-size: 12px; color: var(--text-secondary); }
|
||||
|
||||
.doc-actions {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.action-btn {
|
||||
padding: 6px 12px;
|
||||
border-radius: 8px;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
border: none;
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
.action-btn.approve { background-color: rgba(16, 185, 129, 0.15); color: var(--success); }
|
||||
.action-btn.reject { background-color: rgba(239, 68, 68, 0.15); color: var(--danger); }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Header -->
|
||||
<header>
|
||||
<div class="brand">
|
||||
<div class="logo-container">S</div>
|
||||
<h1>Siro Admin — محاكاة المشرف والعمليات</h1>
|
||||
</div>
|
||||
<div class="header-status">
|
||||
<div class="status-badge">
|
||||
<span class="pulse"></span>
|
||||
اتصال WebSocket نشط
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Container -->
|
||||
<div class="dashboard-container">
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div class="sidebar">
|
||||
<div>
|
||||
<div class="menu-section-title">إدارة لوحة التحكم</div>
|
||||
<button class="sidebar-btn active" onclick="switchTab('dashboard', this)">
|
||||
<span>📊</span> لوحة التحكم الرئيسية
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="menu-section-title">التشغيل المالي والأسعار</div>
|
||||
<button class="sidebar-btn" onclick="switchTab('kazan', this)">
|
||||
<span>💰</span> عمولة Kazan والأسعار
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="menu-section-title">التوثيق والجودة</div>
|
||||
<button class="sidebar-btn" onclick="switchTab('docs', this)">
|
||||
<span>📑</span> وثائق الكباتن الجديدة
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="menu-section-title">الأمن والخصوصية</div>
|
||||
<button class="sidebar-btn" onclick="switchTab('fraud', this)">
|
||||
<span>🛡️</span> رادار بصمة الجهاز (الاحتيال)
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Workspace -->
|
||||
<div class="workspace">
|
||||
|
||||
<!-- Stats Row -->
|
||||
<div class="stats-row">
|
||||
<div class="stat-card">
|
||||
<div class="stat-header">
|
||||
<span>إجمالي الركاب</span>
|
||||
<span class="stat-change up">▲ 12%</span>
|
||||
</div>
|
||||
<div class="stat-value" id="countPassengers">18,240</div>
|
||||
</div>
|
||||
|
||||
<div class="stat-card">
|
||||
<div class="stat-header">
|
||||
<span>إجمالي الكباتن</span>
|
||||
<span class="stat-change up">▲ 8%</span>
|
||||
</div>
|
||||
<div class="stat-value" id="countDrivers">4,912</div>
|
||||
</div>
|
||||
|
||||
<div class="stat-card">
|
||||
<div class="stat-header">
|
||||
<span>رحلات الشهر الحالي</span>
|
||||
<span class="stat-change up">▲ 24%</span>
|
||||
</div>
|
||||
<div class="stat-value" id="countRides">32,490</div>
|
||||
</div>
|
||||
|
||||
<div class="stat-card">
|
||||
<div class="stat-header">
|
||||
<span>محفظة النظام (عمولات)</span>
|
||||
<span class="stat-change down">▼ 2%</span>
|
||||
</div>
|
||||
<div class="stat-value" id="walletBalance">145,200 SP</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tab Content Area -->
|
||||
<div class="action-view">
|
||||
|
||||
<!-- Tab 1: Dashboard -->
|
||||
<div id="tab-dashboard" class="panel-card" style="grid-column: 1 / 3;">
|
||||
<div class="panel-title">📡 مراقبة الرحلات المباشرة والعمليات</div>
|
||||
|
||||
<div class="map-panel">
|
||||
<canvas id="liveMapCanvas"></canvas>
|
||||
<div class="map-controls">
|
||||
<button class="map-btn" onclick="triggerMockRide()">محاكاة رحلة جديدة</button>
|
||||
<button class="map-btn" onclick="clearSimulation()">مسح الخريطة</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel-title">📝 سجل الأحداث والعمليات الفورية</div>
|
||||
<div class="logs-container" id="logsContainer">
|
||||
<div class="log-item info">[النظام]: تم تشغيل محاكاة Siro Admin بنجاح.</div>
|
||||
<div class="log-item success">[العمليات]: تم الاتصال بخادم الـ Websocket (rides.intaleq.xyz).</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tab 2: Kazan pricing -->
|
||||
<div id="tab-kazan" class="panel-card" style="display:none;">
|
||||
<div class="panel-title">💰 تعديل عمولة Kazan ومعدلات التعرفة</div>
|
||||
<div class="form-group">
|
||||
<label>الدولة والمنطقة</label>
|
||||
<select id="countrySelect">
|
||||
<option value="Syria">سوريا (دمشق)</option>
|
||||
<option value="Jordan">الأردن (عمان)</option>
|
||||
<option value="Egypt">مصر (القاهرة)</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>نسبة عمولة Kazan (%)</label>
|
||||
<input type="number" id="commissionPct" value="15" min="5" max="30">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>تعرفة الكيلومتر الأساسية (عملة محلية)</label>
|
||||
<input type="number" id="baseKmPrice" value="1200">
|
||||
</div>
|
||||
<button class="submit-btn" onclick="updateKazanCommission()">حفظ وتحديث نظام التسعير</button>
|
||||
</div>
|
||||
|
||||
<!-- Tab 3: Captin Documents (Azure OCR Simulation) -->
|
||||
<div id="tab-docs" class="panel-card" style="display:none;">
|
||||
<div class="panel-title">📑 وثائق الكباتن بانتظار التدقيق والتحقق</div>
|
||||
|
||||
<div style="display:flex; flex-direction:column; gap:12px;" id="docsQueue">
|
||||
<div class="doc-item" id="doc-c1">
|
||||
<div class="doc-info">
|
||||
<span class="doc-name">الكابتن: محمد أحمد الحموي</span>
|
||||
<span class="doc-details">رقم السيارة: دمشق - 482920 • نوع المستند: رخصة القيادة</span>
|
||||
<span class="doc-details" style="color:var(--success);">[تحليل الذكاء الاصطناعي Azure OCR]: الاسم والتواريخ متطابقة بنسبة 98%</span>
|
||||
</div>
|
||||
<div class="doc-actions">
|
||||
<button class="action-btn approve" onclick="verifyDocument('c1', true)">قبول</button>
|
||||
<button class="action-btn reject" onclick="verifyDocument('c1', false)">رفض</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="doc-item" id="doc-c2">
|
||||
<div class="doc-info">
|
||||
<span class="doc-name">الكابتن: رامي طارق المصري</span>
|
||||
<span class="doc-details">رقم السيارة: ريف دمشق - 729221 • نوع المستند: تأمين المركبة</span>
|
||||
<span class="doc-details" style="color:var(--warning);">[تحليل الذكاء الاصطناعي Azure OCR]: المستند ينتهي خلال 3 أيام</span>
|
||||
</div>
|
||||
<div class="doc-actions">
|
||||
<button class="action-btn approve" onclick="verifyDocument('c2', true)">قبول</button>
|
||||
<button class="action-btn reject" onclick="verifyDocument('c2', false)">رفض</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tab 4: Fraud radar device fingerprints -->
|
||||
<div id="tab-fraud" class="panel-card" style="display:none;">
|
||||
<div class="panel-title">🛡️ رادار كشف الاحتيال وتكرار بصمات الأجهزة</div>
|
||||
<div class="log-item danger" style="padding:14px;">
|
||||
<strong>تنبيه أمني هام:</strong> تم اكتشاف بصمة جهاز مكررة مرتبطة بـ 3 كباتن مختلفين!
|
||||
<br>Device FP: <code>SHA256:d89ef239fbc87a1d...</code>
|
||||
</div>
|
||||
<div style="display:flex; flex-direction:column; gap:10px;">
|
||||
<div class="doc-item">
|
||||
<div class="doc-info">
|
||||
<span class="doc-name">كابتن 1: علي سليم (نشط)</span>
|
||||
<span class="doc-details">رقم الهاتف: 963992019283</span>
|
||||
</div>
|
||||
<button class="action-btn reject" style="background-color:rgba(239,68,68,0.25)" onclick="blockCaptain('علي سليم')">حظر فوري</button>
|
||||
</div>
|
||||
<div class="doc-item">
|
||||
<div class="doc-info">
|
||||
<span class="doc-name">كابتن 2: سامر وحيد (نشط)</span>
|
||||
<span class="doc-details">رقم الهاتف: 963942091922</span>
|
||||
</div>
|
||||
<button class="action-btn reject" style="background-color:rgba(239,68,68,0.25)" onclick="blockCaptain('سامر وحيد')">حظر فوري</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// Tab switching logic
|
||||
function switchTab(tabId, btn) {
|
||||
document.getElementById('tab-dashboard').style.display = 'none';
|
||||
document.getElementById('tab-kazan').style.display = 'none';
|
||||
document.getElementById('tab-docs').style.display = 'none';
|
||||
document.getElementById('tab-fraud').style.display = 'none';
|
||||
|
||||
document.getElementById('tab-' + tabId).style.display = 'flex';
|
||||
|
||||
const buttons = document.querySelectorAll('.sidebar-btn');
|
||||
buttons.forEach(b => b.classList.remove('active'));
|
||||
btn.classList.add('active');
|
||||
|
||||
if (tabId === 'dashboard') {
|
||||
initCanvas();
|
||||
}
|
||||
}
|
||||
|
||||
// Logging helpers
|
||||
function log(message, type = 'info') {
|
||||
const container = document.getElementById('logsContainer');
|
||||
const time = new Date().toLocaleTimeString('ar-EG');
|
||||
const div = document.createElement('div');
|
||||
div.className = `log-item ${type}`;
|
||||
div.innerText = `[${time}] ${message}`;
|
||||
container.prepend(div);
|
||||
}
|
||||
|
||||
// Kazan changes
|
||||
function updateKazanCommission() {
|
||||
const pct = document.getElementById('commissionPct').value;
|
||||
const kmPrice = document.getElementById('baseKmPrice').value;
|
||||
const country = document.getElementById('countrySelect').value;
|
||||
|
||||
// Update stats
|
||||
document.getElementById('walletBalance').innerText = `${(pct * 10000).toLocaleString()} SP`;
|
||||
log(`[نظام كازان]: تم تحديث العمولة لتصبح ${pct}% لـ ${country} مع سعر كم قدره ${kmPrice}.`, 'success');
|
||||
}
|
||||
|
||||
// Document approvals
|
||||
function verifyDocument(id, approved) {
|
||||
const element = document.getElementById(`doc-${id}`);
|
||||
if (element) {
|
||||
element.remove();
|
||||
log(`[المستندات]: تم ${approved ? 'قبول' : 'رفض'} الوثائق للكابتن بنجاح.`, approved ? 'success' : 'danger');
|
||||
}
|
||||
}
|
||||
|
||||
// Block captain
|
||||
function blockCaptain(name) {
|
||||
log(`[الأمان والخصوصية]: تم حظر الكابتن (${name}) وتجميد محفظته بسبب مطابقة البصمة الرقمية المكررة.`, 'danger');
|
||||
}
|
||||
|
||||
// Canvas map rendering
|
||||
let canvas, ctx, animId;
|
||||
let particles = [];
|
||||
|
||||
function initCanvas() {
|
||||
canvas = document.getElementById('liveMapCanvas');
|
||||
if (!canvas) return;
|
||||
ctx = canvas.getContext('2d');
|
||||
|
||||
// Resize canvas relative to its container client dimensions
|
||||
canvas.width = canvas.parentElement.clientWidth;
|
||||
canvas.height = canvas.parentElement.clientHeight || 320;
|
||||
|
||||
// Seed initial dummy drivers
|
||||
particles = [
|
||||
{ x: canvas.width * 0.3, y: canvas.height * 0.4, label: '🚗 Comfort', angle: 0.5, speed: 0.3 },
|
||||
{ x: canvas.width * 0.6, y: canvas.height * 0.7, label: '🏍️ Bike', angle: 1.2, speed: 0.6 },
|
||||
{ x: canvas.width * 0.7, y: canvas.height * 0.3, label: '🚗 Speed', angle: 2.3, speed: 0.4 }
|
||||
];
|
||||
|
||||
if (animId) cancelAnimationFrame(animId);
|
||||
draw();
|
||||
}
|
||||
|
||||
function draw() {
|
||||
ctx.fillStyle = '#0b0d19';
|
||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||
|
||||
// Grid background
|
||||
ctx.strokeStyle = '#181b2e';
|
||||
ctx.lineWidth = 1;
|
||||
for (let x = 0; x < canvas.width; x += 40) {
|
||||
ctx.beginPath(); ctx.moveTo(x, 0); ctx.lineTo(x, canvas.height); ctx.stroke();
|
||||
}
|
||||
for (let y = 0; y < canvas.height; y += 40) {
|
||||
ctx.beginPath(); ctx.moveTo(0, y); ctx.lineTo(canvas.width, y); ctx.stroke();
|
||||
}
|
||||
|
||||
// Draw cars
|
||||
particles.forEach(p => {
|
||||
p.x += Math.cos(p.angle) * p.speed;
|
||||
p.y += Math.sin(p.angle) * p.speed;
|
||||
|
||||
// Boundary checks
|
||||
if (p.x < 0 || p.x > canvas.width) p.angle = Math.PI - p.angle;
|
||||
if (p.y < 0 || p.y > canvas.height) p.angle = -p.angle;
|
||||
|
||||
// Draw car indicator
|
||||
ctx.fillStyle = '#4776e6';
|
||||
ctx.beginPath();
|
||||
ctx.arc(p.x, p.y, 8, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
|
||||
// Label
|
||||
ctx.fillStyle = '#9ca3af';
|
||||
ctx.font = '10px Tajawal';
|
||||
ctx.fillText(p.label, p.x + 12, p.y + 4);
|
||||
});
|
||||
|
||||
animId = requestAnimationFrame(draw);
|
||||
}
|
||||
|
||||
function triggerMockRide() {
|
||||
const newCar = {
|
||||
x: canvas.width * 0.1,
|
||||
y: canvas.height * 0.1,
|
||||
label: '🚗 Speed (Active Ride)',
|
||||
angle: 0.8,
|
||||
speed: 1.2
|
||||
};
|
||||
particles.push(newCar);
|
||||
log('[رحلة جديدة]: تم بدء رحلة نشطة للراكب #3829 مع الكابتن #4928.', 'info');
|
||||
}
|
||||
|
||||
function clearSimulation() {
|
||||
particles = [];
|
||||
log('[النظام]: تم إخلاء الخريطة وتصفية كافة المركبات.', 'warning');
|
||||
}
|
||||
|
||||
// Run canvas on page load
|
||||
window.onload = initCanvas;
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,352 @@
|
||||
|
||||
# تقرير نظام تسجيل السائق — سوريا 🇸🇾
|
||||
|
||||
> **ملف المحاكاة التفاعلية:** [siro_driver_registration_simulation.html](file:///Users/hamzaaleghwairyeen/.gemini/antigravity-ide/brain/3690cabc-80e2-4e43-af35-66c30922ddee/siro_driver_registration_simulation.html)
|
||||
|
||||
---
|
||||
|
||||
## 🗺️ خريطة النظام الكاملة
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[📱 السائق يفتح التطبيق] --> B[RegisterCaptainController<br/>إدخال رقم الهاتف]
|
||||
B --> C{التحقق من الدولة}
|
||||
C -->|🇸🇾 سوريا| D[Phone Formatting<br/>09xx → 963xx]
|
||||
D --> E[POST /auth/otp/request.php<br/>country: Syria]
|
||||
E --> F{OTP Router}
|
||||
F -->|Primary| G[Intaleq WhatsApp]
|
||||
F -->|Failover 1| H[Nabeh JWT]
|
||||
F -->|Failover 2| I[SMS]
|
||||
G --> J[DB: phone_verification<br/>AES-GCM encrypted × 5min]
|
||||
J --> K[OtpVerificationController<br/>countdown 120s]
|
||||
K --> L[POST /auth/otp/verify.php]
|
||||
L --> M{✅ صحيح؟}
|
||||
M -->|نعم| N[RegistrationController<br/>3-Step Wizard]
|
||||
M -->|لا| K
|
||||
N --> O[Step 1: Driver Info<br/>الاسم + HID + DOB + License]
|
||||
O --> P[Step 2: Car Info<br/>Plate + Make + Model + VIN]
|
||||
P --> Q[Step 3: Doc Upload × 8]
|
||||
Q --> R[uploadToSyria × 8<br/>MultipartRequest + JWT]
|
||||
R --> S[uploadSyrianDocs.php<br/>private_uploads Signed URL 48h]
|
||||
S --> T[submitRegistration<br/>POST /register_driver_and_car.php]
|
||||
T --> U[🤖 Gemini Flash<br/>Vision AI Analysis]
|
||||
U --> V{AI Face Match}
|
||||
V -->|✅ high| W[DB Transaction<br/>driver + CarRegistration]
|
||||
V -->|❌ mismatch| X[jsonError - رفض]
|
||||
W --> Y[FCM → topic:service<br/>Admin Notification]
|
||||
Y --> Z[status: yet ⏳]
|
||||
Z --> AA[Admin Review]
|
||||
AA --> AB[status: active ✅]
|
||||
AB --> AC[JWT + driverToken<br/>السائق جاهز للعمل]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📱 مراحل التسجيل (8 خطوات)
|
||||
|
||||
### 1️⃣ إدخال رقم الهاتف — `RegisterCaptainController`
|
||||
|
||||
**منطق تنسيق الرقم السوري:**
|
||||
|
||||
```php
|
||||
// من: register_driver_and_car.php
|
||||
if (strpos($phone, '00963') === 0) {
|
||||
$phone = substr($phone, 2); // 00963 → 963
|
||||
} elseif (strpos($phone, '09') === 0) {
|
||||
$phone = '963' . substr($phone, 1); // 09xx → 9639xx
|
||||
} elseif (strpos($phone, '9') === 0 && strlen($phone) == 9) {
|
||||
$phone = '963' . $phone; // 9xxxxxxxx → 9639xxxxxxxx
|
||||
}
|
||||
// التأكد من وجود 9 بعد 963
|
||||
if (strpos($phone, '963') === 0 && strpos($phone, '9639') !== 0) {
|
||||
$phone = '9639' . substr($phone, 3);
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2️⃣ نظام OTP — `OtpVerificationController`
|
||||
|
||||
| الدولة | المزود الأساسي | Failover 1 | Failover 2 |
|
||||
|--------|---------------|-----------|-----------|
|
||||
| 🇸🇾 سوريا | Intaleq WhatsApp | Nabeh JWT | SMS |
|
||||
| 🇪🇬 مصر | Kazumi SMS | Intaleq WhatsApp | Nabeh JWT |
|
||||
| 🇯🇴 الأردن | Intaleq SMS | Nabeh JWT | — |
|
||||
|
||||
**مخطط DB:**
|
||||
|
||||
```sql
|
||||
-- جدول التحقق للسائق
|
||||
INSERT INTO phone_verification (
|
||||
phone_number, -- مشفر AES-GCM
|
||||
driverId,
|
||||
email, -- مشفر AES-GCM
|
||||
token_code, -- مشفر AES-GCM (3 أرقام)
|
||||
expiration_time, -- NOW() + 5 دقائق
|
||||
is_verified -- 0 → 1 عند النجاح
|
||||
)
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Rate Limiting: 3 محاولات كل 5 دقائق لكل IP عبر Redis
|
||||
|
||||
---
|
||||
|
||||
### 3️⃣ معلومات السائق — `RegistrationController` Page 0
|
||||
|
||||
**الحقول المطلوبة:**
|
||||
- `first_name`, `last_name`, `national_number`, `birthdate`, `expiry_date`
|
||||
- التحقق عبر `driverInfoFormKey.validate()`
|
||||
|
||||
**ملاحظة تاريخ الميلاد:**
|
||||
```php
|
||||
// من register_driver_and_car.php
|
||||
$data['birthdate'] = trim($data['birthdate']) . '-01-01';
|
||||
// "1990" → "1990-01-01"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4️⃣ معلومات المركبة — `RegistrationController` Page 1
|
||||
|
||||
**الحقول الجديدة (vehicle_category_id + fuel_type_id):**
|
||||
|
||||
| ID | نوع المركبة | ID | نوع الوقود |
|
||||
|---|------------|---|-----------|
|
||||
| 1 | سيارة (Car) | 1 | بنزين (Petrol) |
|
||||
| 2 | دراجة نارية | 2 | ديزل (Diesel) |
|
||||
| 3 | فان / باص | 3 | كهربائي |
|
||||
| — | — | 4 | هايبرد |
|
||||
|
||||
```dart
|
||||
// Flutter → submitRegistration()
|
||||
_addField(fields, 'vehicle_category_id', selectedVehicleCategoryId.toString());
|
||||
_addField(fields, 'fuel_type_id', selectedFuelTypeId.toString());
|
||||
_addField(fields, 'fuel', fuelObj['name'].toString()); // للتوافق
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5️⃣ رفع الوثائق — `uploadToSyria()` × 8
|
||||
|
||||
**الوثائق المطلوبة لسوريا:**
|
||||
|
||||
| المستند | الحقل | إلزامي سوريا؟ |
|
||||
|---------|-------|--------------|
|
||||
| هوية — وجه | `id_front` | ✅ |
|
||||
| هوية — خلف | `id_back` | ✅ |
|
||||
| رخصة القيادة — وجه | `driver_license` | ✅ |
|
||||
| رخصة القيادة — خلف | `driver_license_back` | **🇸🇾 إلزامي فقط!** |
|
||||
| صورة شخصية | `profile_picture` | ✅ |
|
||||
| لا حكم عليه | `criminal_record` | ✅ |
|
||||
| ترخيص سيارة — وجه | `car_license_front` | ✅ |
|
||||
| ترخيص سيارة — خلف | `car_license_back` | ✅ |
|
||||
|
||||
**آلية الرفع:**
|
||||
|
||||
```dart
|
||||
// Flutter: uploadToSyria()
|
||||
final req = http.MultipartRequest('POST', syrianUploadUri);
|
||||
req.headers.addAll({
|
||||
'Authorization': 'Bearer JWT',
|
||||
'X-HMAC-Auth': hmacHeader,
|
||||
});
|
||||
req.fields['driver_id'] = driverId;
|
||||
req.fields['doc_type'] = docType; // e.g., 'driver_license_back'
|
||||
// timeout: 120 ثانية — 3 محاولات تلقائية
|
||||
```
|
||||
|
||||
**Backend — الرد (Signed URL):**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "success",
|
||||
"file_url": "https://api-syria.siromove.com/siro/secure_image.php?driver_id=DRV...&doc_type=id_front&ext=jpg&expires=1720000000&signature=sha256...",
|
||||
"mime_type": "image/jpeg",
|
||||
"size_bytes": 98340,
|
||||
"expires_at": "2024-06-21T..."
|
||||
}
|
||||
```
|
||||
|
||||
> [!IMPORTANT]
|
||||
> الملفات تُحفظ في `private_uploads/` (خارج الويب العام) ولا يمكن الوصول إليها إلا عبر رابط موقّع صالح لمدة **48 ساعة**.
|
||||
|
||||
---
|
||||
|
||||
### 6️⃣ الذكاء الاصطناعي Gemini Flash — Vision AI
|
||||
|
||||
**البرومبت الكامل يطلب:**
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "success|failure",
|
||||
"reason": "إذا فشل",
|
||||
"face_match_confidence": "high|low",
|
||||
"driver": {
|
||||
"full_name": "", // الاسم الكامل بالعربي
|
||||
"national_number": "", // أرقام لاتينية فقط
|
||||
"dob": "YYYY-MM-DD",
|
||||
"governorate": "",
|
||||
"license_expiry_date": "YYYY-MM-DD",
|
||||
"license_category": "B|D1|..."
|
||||
},
|
||||
"car": {
|
||||
"car_plate": "", // e.g., "155186 درعا"
|
||||
"vin": "", // أحرف وأرقام لاتينية
|
||||
"color": "",
|
||||
"color_hex": "#FFFFFF",
|
||||
"make": "", "model": "", "year": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**قواعد الذكاء الاصطناعي الحرجة:**
|
||||
1. **FACE MATCHING**: مقارنة الصورة الشخصية ↔ الهوية ↔ رخصة القيادة
|
||||
2. **OCR ذكي**: المسح من كلا وجهي كل وثيقة
|
||||
3. تحويل الأرقام العربية (٠١٢) إلى لاتينية (012)
|
||||
4. تطبيع ألوان السيارات `أبيض → White → #FFFFFF`
|
||||
5. الفشل الكلي فقط عند: وجه غير متطابق / وثائق مزورة
|
||||
|
||||
> [!WARNING]
|
||||
> **SSRF Protection**: URLs يُسمح بها فقط من `allowedHosts` — يُمنع تحميل أي صورة من مصادر خارجية.
|
||||
|
||||
---
|
||||
|
||||
### 7️⃣ إدراج قاعدة البيانات — Transaction Atomique
|
||||
|
||||
**الحقول المشفرة في جدول `driver`:**
|
||||
|
||||
```php
|
||||
$toEncryptDriver = [
|
||||
"phone", "email", "first_name", "last_name",
|
||||
"name_arabic", "gender", "national_number",
|
||||
"address", "site", "fullNameMaritial", "birthdate"
|
||||
];
|
||||
// كلها تُشفَّر بـ AES-GCM قبل الإدراج
|
||||
```
|
||||
|
||||
**كلمة المرور (HMAC + bcrypt):**
|
||||
|
||||
```php
|
||||
$baseString = implode('|', [$data['id'], $data['phone'], $data['national_number']]);
|
||||
$rawSecret = hash_hmac('sha256', $baseString, $pepper, true);
|
||||
$pwdHashed = password_hash($rawSecret, PASSWORD_DEFAULT);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 8️⃣ جداول قاعدة البيانات (`schema_primary.sql`)
|
||||
|
||||
**`CarRegistration` — الجدول الرئيسي للمركبات:**
|
||||
|
||||
```sql
|
||||
CREATE TABLE `CarRegistration` (
|
||||
`id` int AUTO_INCREMENT PRIMARY KEY,
|
||||
`driverID` varchar(100) NOT NULL, -- FK → driver.id
|
||||
`vin` varchar(100) NOT NULL, -- مشفر
|
||||
`car_plate` varchar(150), -- مشفر
|
||||
`make` varchar(255) NOT NULL,
|
||||
`model` varchar(255) NOT NULL,
|
||||
`year` int NOT NULL,
|
||||
`expiration_date` varchar(30) NOT NULL,
|
||||
`color` varchar(255) NOT NULL,
|
||||
`owner` varchar(255) NOT NULL, -- مشفر
|
||||
`color_hex` varchar(20) NOT NULL,
|
||||
`fuel` varchar(100) NOT NULL,
|
||||
`vehicle_category_id` tinyint DEFAULT 1, -- 1=Car,2=Moto,3=Van
|
||||
`fuel_type_id` tinyint DEFAULT 1, -- 1=Petrol,2=Diesel...
|
||||
`status` varchar(20) DEFAULT 'yet', -- yet|active|suspended
|
||||
`isDefault` tinyint DEFAULT 0,
|
||||
KEY `idx_driverID` (`driverID`)
|
||||
)
|
||||
```
|
||||
|
||||
**`driver` — الجدول الرئيسي للسائقين:**
|
||||
|
||||
```sql
|
||||
CREATE TABLE `driver` (
|
||||
`id` varchar(100) NOT NULL, -- DRV{timestamp}{random}
|
||||
`phone` varchar(255) NOT NULL, -- مشفر AES-GCM
|
||||
`email` varchar(255) NOT NULL,
|
||||
`password` varchar(255) NOT NULL, -- bcrypt(HMAC)
|
||||
`first_name` varchar(255) NOT NULL, -- مشفر
|
||||
`last_name` varchar(255) NOT NULL, -- مشفر
|
||||
`national_number` varchar(255), -- مشفر (UNIQUE)
|
||||
`name_arabic` varchar(255), -- مشفر — من AI
|
||||
`birthdate` varchar(255), -- مشفر
|
||||
`status` varchar(20) DEFAULT 'notDeleted', -- yet|active|notDeleted
|
||||
`expiry_date` date, -- انتهاء رخصة القيادة
|
||||
UNIQUE KEY `national_number` (`national_number`)
|
||||
)
|
||||
```
|
||||
|
||||
**`driver_documents`:**
|
||||
|
||||
```sql
|
||||
CREATE TABLE `driver_documents` (
|
||||
`id` int AUTO_INCREMENT PRIMARY KEY,
|
||||
`driverID` varchar(64) NOT NULL,
|
||||
`doc_type` varchar(64) NOT NULL, -- id_front, driver_license_back, ...
|
||||
`image_name` varchar(255) NOT NULL,
|
||||
`link` varchar(512) NOT NULL, -- Signed URL
|
||||
`upload_date` datetime NOT NULL,
|
||||
KEY `driverID` (`driverID`)
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔒 طبقات الأمان
|
||||
|
||||
| الطبقة | التقنية | التفاصيل |
|
||||
|--------|---------|---------|
|
||||
| Authentication | JWT Bearer | يُعاد التوليد عند كل دخول |
|
||||
| Transport | HMAC-SHA256 | X-HMAC-Auth header |
|
||||
| Encryption at Rest | AES-GCM | جميع البيانات الحساسة |
|
||||
| Password | HMAC + bcrypt | pepper من env |
|
||||
| Rate Limiting | Redis | 3 OTP / 5 دقائق لكل IP |
|
||||
| File Access | Signed URLs | HMAC-SHA256 صالح 48 ساعة |
|
||||
| SSRF Protection | Allowlist hosts | منع URL injection في AI |
|
||||
| SQL Injection | PDO Prepared Statements | كل الاستعلامات |
|
||||
| File Upload | MIME detection + finfo | ليس Content-Type فقط |
|
||||
|
||||
---
|
||||
|
||||
## ✅ النتيجة: هل النظام يعمل صح؟
|
||||
|
||||
| العملية | السلوك | التقييم |
|
||||
|---------|--------|---------|
|
||||
| تنسيق الهاتف السوري | `09xx` → `9639xx` تلقائياً | ✅ |
|
||||
| OTP سوريا | Intaleq WhatsApp → Nabeh Failover | ✅ |
|
||||
| خلف رخصة القيادة | إلزامي فقط لـ `countryCode == Syria` | ✅ |
|
||||
| رفع الوثائق | Retry × 3 + Timeout 120s | ✅ |
|
||||
| AI Face Match | Gemini Flash Vision — تحقق ذكي | ✅ |
|
||||
| AI يعيد كتابة البيانات | اسم، DOB، لوحة، VIN من الوثائق | ✅ |
|
||||
| Transaction | Atomic: driver + CarRegistration + documents | ✅ |
|
||||
| تشفير الحقول | phone, name, national_number → AES-GCM | ✅ |
|
||||
| `vehicle_category_id` و `fuel_type_id` | يُرسلان من Flutter ويُخزنان في CarRegistration | ✅ |
|
||||
| إشعار خدمة العملاء | FCM → topic:service بعد التسجيل | ✅ |
|
||||
| Signed URL | صالح 48 ساعة + HMAC signed | ✅ |
|
||||
|
||||
> [!CAUTION]
|
||||
> **ملاحظة:** حقل `vin` في `submitRegistration()` يُرسل كـ `'yet'` افتراضياً ولا يُرسل من حقل `carVinController`:
|
||||
> ```dart
|
||||
> _addField(fields, 'vin', 'yet'); // ← يجب ربطه بـ carVinController.text
|
||||
> ```
|
||||
> AI سيُصحح هذا من خلال استخراج VIN من صورة ترخيص السيارة، لكن إذا لم يعمل AI فسيُخزن 'yet'.
|
||||
|
||||
---
|
||||
|
||||
## 📁 الملفات المرجعية
|
||||
|
||||
| الملف | الدور |
|
||||
|-------|-------|
|
||||
| [registration_controller.dart](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/auth/syria/registration_controller.dart) | Controller رئيسي — رفع الوثائق + تقديم التسجيل |
|
||||
| [register_captin_controller.dart](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/auth/captin/register_captin_controller.dart) | تسجيل مبدئي + OTP |
|
||||
| [opt_token_controller.dart](file:///Users/hamzaaleghwairyeen/development/App/Siro/siro_driver/lib/controller/auth/captin/opt_token_controller.dart) | إدارة OTP (120 ثانية countdown) |
|
||||
| [register_driver_and_car.php](file:///Users/hamzaaleghwairyeen/development/App/Siro/backend/auth/syria/driver/register_driver_and_car.php) | Backend — Gemini AI + DB Transaction |
|
||||
| [uploadSyrianDocs.php](file:///Users/hamzaaleghwairyeen/development/App/Siro/backend/auth/syria/uploadSyrianDocs.php) | Backend — رفع الوثائق + Signed URL |
|
||||
| [request.php](file:///Users/hamzaaleghwairyeen/development/App/Siro/backend/auth/otp/request.php) | Backend — إرسال OTP حسب الدولة |
|
||||
| [verify.php](file:///Users/hamzaaleghwairyeen/development/App/Siro/backend/auth/otp/verify.php) | Backend — التحقق من OTP |
|
||||
| [schema_primary.sql](file:///Users/hamzaaleghwairyeen/development/App/Siro/backend/schema_primary.sql) | DB Schema — driver + CarRegistration + driver_documents |
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
<div dir="rtl" align="right">
|
||||
<h1>تقرير نظام التسعير الشامل</h1>
|
||||
|
||||
<h2>1. دورة حياة التسعير: كيف تتم عملية التسعير من البداية للنهاية؟</h2>
|
||||
نظام التسعير هو نظام ديناميكي وذكي يعتمد على تحليل السوق باستمرار لضمان التنافسية والربحية. تمر العملية بالمراحل التالية:
|
||||
<br><br>
|
||||
<b>المرحلة الأولى: جمع البيانات الحية</b><br>
|
||||
تقوم سكريبتات الجافاسكريبت بالعمل على مدار الساعة لجلب أسعار المنافسين من السوق وحالة الطلب في مناطق مختلفة، ويتم تغذية قاعدة البيانات بهذه الأرقام الأولية.
|
||||
<br><br>
|
||||
<b>المرحلة الثانية: تحليل البيانات بالذكاء الاصطناعي</b><br>
|
||||
يعمل السكريبت المخصص للذكاء الاصطناعي على تحليل البيانات الواردة وفك تشفير معادلات التسعير الخاصة بالمنافسين (سعر الكيلومتر، سعر البداية) ويقوم بتخزين هذه المعادلات.
|
||||
<br><br>
|
||||
<b>المرحلة الثالثة: محرك الثبات والاستقرار</b><br>
|
||||
وهو السكريبت الجديد، ومهمته الأساسية هي منع التذبذب العشوائي لأسعارنا.
|
||||
<br>
|
||||
- يقوم بمقارنة السعر الحالي للمنافس مع متوسط السعر في آخر 7 أيام.
|
||||
<br>
|
||||
- إذا قام المنافس بتنزيل السعر فجأة، يعتبره النظام عرضاً ترويجياً مؤقتاً ولا يغير سعرنا الأساسي، بل يقترح استخدام أكواد خصم.
|
||||
<br>
|
||||
- إذا استمر انخفاض أو ارتفاع السعر لفترة طويلة، يقرر النظام أن هذا تغيير حقيقي في السوق، ويقترح تعديل سعرنا بحد أقصى لضمان الاستقرار.
|
||||
<br>
|
||||
- (ملاحظة: هذا المحرك يعمل حالياً في وضع المراقبة ولا يقوم بتغيير الأسعار تلقائياً بل يسجل الاقتراحات).
|
||||
<br><br>
|
||||
<b>المرحلة الرابعة: التسعير الموسمي</b><br>
|
||||
يتدخل سكريبت التسعير الموسمي في أوقات معينة (مثل أوقات الإفطار في رمضان، الأعياد، أو حالات الطقس السيئة) ليقوم برفع السعر تدريجياً وبنسبة مدروسة ليتناسب مع الطلب المتزايد.
|
||||
<br><br>
|
||||
<b>المرحلة الخامسة: اقتناص الذروة وتوجيه السائقين</b><br>
|
||||
- <b>اكتشاف الذروة:</b> يقوم سكريبت الذروة بتحليل الخريطة واكتشاف المناطق التي قام فيها المنافسون برفع أسعارهم فجأة.
|
||||
<br>
|
||||
- <b>تحفيز السائقين:</b> بمجرد اكتشاف منطقة ذروة، يتدخل سكريبت العمولة ليقوم بتخفيض عمولة التطبيق على السائقين في تلك المنطقة المحددة، مما يشجع السائقين على التوجه فوراً لهذه المنطقة لتلبية الطلب العالي وضرب المنافسين.
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>2. تصحيح وقت وظيفة الجدولة الأخيرة</h2>
|
||||
لقد قمت بإضافة الوظيفة الخاصة بمحرك الثبات والاستقرار في لوحة التحكم بالتوقيت التالي:
|
||||
</div>
|
||||
|
||||
```text
|
||||
0 0 * * 0
|
||||
```
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
(وهذا يعني أنه سيعمل مرة واحدة فقط في الأسبوع، يوم الأحد منتصف الليل).
|
||||
<br><br>
|
||||
<b>التصحيح المطلوب:</b><br>
|
||||
بناءً على تصميم الكود، هذا السكريبت يجب أن يراقب الأسعار باستمرار بالتوازي مع محرك الذكاء الاصطناعي. المطور كتب في الكود ملاحظة صريحة أن الجدولة المقترحة هي كل 3 ساعات.
|
||||
<br><br>
|
||||
لذلك، يجب عليك حذفه وإضافته مرة أخرى بالتوقيت التالي:
|
||||
<br>
|
||||
<b>الدقائق:</b> 0<br>
|
||||
<b>الساعات:</b> */3<br>
|
||||
<b>باقي الحقول:</b> *<br>
|
||||
ليصبح الأمر كالتالي:
|
||||
</div>
|
||||
|
||||
```text
|
||||
0 */3 * * * /usr/bin/php8.4 /home/intaleqapp-jordan-siro/htdocs/jordan-siro.intaleqapp.com/backend/bot/cron_pricing_stability_engine.php
|
||||
```
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
<hr>
|
||||
|
||||
<h2>3. شرح جدول الوظائف المجدولة بالكامل وتوقيتاتها</h2>
|
||||
فيما يلي جدول يوضح وظيفة كل ملف والتوقيت الذي يعمل به:
|
||||
<br><br>
|
||||
</div>
|
||||
|
||||
| التوقيت | الوظيفة |
|
||||
|---|---|
|
||||
| `0 */3 * * *` | `cron_ai_engine.php`: تحليل أسعار المنافسين بالذكاء الاصطناعي لاستنتاج معادلاتهم. |
|
||||
| `0 */3 * * *` | `cron_pricing_stability_engine.php`: (الوقت المقترح) يراقب استقرار الأسعار ويقترح التعديلات دون تذبذب. |
|
||||
| `0 * * * *` | `cron_seasonal_pricing.php`: يطبق زيادات الأسعار في المناسبات كل ساعة. |
|
||||
| `*/10 * * * *` | `cron_surge_opportunity.php`: يكتشف مناطق الذروة النشطة بناءً على أسعار المنافسين الحية كل 10 دقائق. |
|
||||
| `*/5 * * * *` | `cron_kazan_adjuster.php`: يعدّل عمولة التطبيق ويخفضها للسائقين في مناطق الذروة كل 5 دقائق. |
|
||||
| `*/16 * * * *` | `cron_generate_heatmap_cache.php`: يولد خريطة حرارية لأماكن الطلب للسائقين كل 16 دقيقة. |
|
||||
| `0 */1 * * *` | `cron_predictive_demand.php`: يتنبأ بأماكن الطلب المستقبلية بناءً على البيانات التاريخية كل ساعة. |
|
||||
| `0 * * * *` | `cron_empty_results_to_db.php`: ينظف ويسجل نتائج البحث الفارغة لتحليلها لاحقاً كل ساعة. |
|
||||
| `0 10 * * *` | `cron_passenger_reengagement.php`: يعيد استهداف الركاب الخاملين برسائل أو عروض يومياً الساعة 10 صباحاً. |
|
||||
| `0 * * * *` | `cron_auto_marketing_pusher.php`: يرسل حملات التسويق الآلية للمستخدمين كل ساعة. |
|
||||
| `0 0 * * 0` | `cron_weekly_health_report.php`: يرسل تقرير أسبوعي عن صحة وعمل النظام كل أحد في منتصف الليل. |
|
||||
| `0 */3 * * *` | `telegram_scraper.php`: أداة تسويقية لاستخراج بيانات من المنصات الأخرى كل 3 ساعات. |
|
||||
| `0 10 * * 0` | `cron_weekly_report.php`: يرسل تقرير أسبوعي إداري أو تسويقي كل أحد الساعة 10 صباحاً. |
|
||||
| `0 */4 * * *` | `cron_insert_task.php`: يضيف مهام مجدولة للنظام كل 4 ساعات. |
|
||||
| `*/15 * * * *` | `generate_10_tasks_cli.php`: يولد مهام مصغرة أو وهمية لأغراض الاختبار كل 15 دقيقة. |
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
<hr>
|
||||
|
||||
<h2>4. مهام الجافاسكريبت المستمرة</h2>
|
||||
هذه المهام لا تعمل بنظام الجدولة المتقطعة، بل هي عمليات تعمل دائماً ولا تتوقف أبداً وتدار بواسطة أداة مدير العمليات:
|
||||
<br><br>
|
||||
1. <b>التتبع الشامل</b>: مهمته التتبع الشامل والمتواصل لأسعار المنافسين في جميع المناطق طوال الوقت.
|
||||
<br>
|
||||
2. <b>اكتشاف الذروة السريع</b>: متخصص في المراقبة السريعة جداً للمناطق لاكتشاف أي ارتفاع مفاجئ فور حدوثه لإرسال البيانات إلى السكريبتات الأخرى.
|
||||
<br>
|
||||
3. <b>التقارير الحية</b>: يقوم بمعالجة البيانات وتصدير التقارير الحية للوحة التحكم أولاً بأول.
|
||||
<br><br>
|
||||
هذه السكريبتات الثلاثة هي التي تجمع المواد الخام التي تقوم السكريبتات المذكورة في الأعلى بتحليلها واستخدامها لتحديد الأسعار النهائية للتطبيق.
|
||||
</div>
|
||||
@@ -0,0 +1,389 @@
|
||||
# تحليل الميزات الصوتية والموسيقى — سيرو
|
||||
## Audio & Music Features Analysis — Siro Platform
|
||||
|
||||
> **النسخة:** 1.0 | **تاريخ:** يوليو 2026 | **التصنيف:** داخلي | **إعداد:** فريق التحليل التقني
|
||||
|
||||
---
|
||||
|
||||
## 📋 فهرس المحتويات
|
||||
1. [ملخص الميزات الصوتية الحالية](#1-ملخص-الميزات-الصوتية-الحالية)
|
||||
2. [Text-to-Speech (TTS)](#2-text-to-speech-tts)
|
||||
3. [المؤثرات الصوتية والإشعارات](#3-المؤثرات-الصوتية-والإشعارات)
|
||||
4. [المكالمات الصوتية (WebRTC + Agora)](#4-المكالمات-الصوتية-webrtc--agora)
|
||||
5. [تسجيل الصوت](#5-تسجيل-الصوت)
|
||||
6. [البنية التحتية الصوتية (Backend)](#6-البنية-التحتية-الصوتية-backend)
|
||||
7. [الميزات الصوتية المفقودة — فرص الابتكار](#7-الميزات-الصوتية-المفقودة--فرص-الابتكار)
|
||||
8. [خطة تطوير الموسيقى والترفيه الصوتي](#8-خطة-تطوير-الموسيقى-والترفيه-الصوتي)
|
||||
9. [دراسة الجدوى — ميزة الموسيقى](#9-دراسة-الجدوى--ميزة-الموسيقى)
|
||||
|
||||
---
|
||||
|
||||
## 1. ملخص الميزات الصوتية الحالية
|
||||
|
||||
### التقييم: ⭐⭐⭐☆☆ (4/10)
|
||||
|
||||
| المجال | الحالة | التفاصيل |
|
||||
|--------|--------|----------|
|
||||
| TTS (نص إلى كلام) | ✅ موجود | تنقل صوتي، وصف واجهة، تحذيرات |
|
||||
| مؤثرات صوتية | ✅ موجود | أصوات طلبات الرحلات، إشعارات |
|
||||
| مكالمات صوتية | ✅ موجود | WebRTC + Agora بين السائق والراكب |
|
||||
| تسجيل صوتي | ✅ موجود | تسجيل الرحلة AAC-LC |
|
||||
| **موسيقى / ترفيه صوتي** | **❌ غير موجود** | **فرصة تنافسية كبيرة** |
|
||||
| **راديو / Podcasts** | **❌ غير موجود** | **فرصة إيرادية جديدة** |
|
||||
| **أوامر صوتية** | **❌ غير موجود** | **تجربة مستخدم متقدمة** |
|
||||
| **Spotify / Apple Music** | **❌ غير موجود** | **ميزة تنافسية مطلوبة** |
|
||||
|
||||
---
|
||||
|
||||
## 2. Text-to-Speech (TTS)
|
||||
|
||||
### 2.1 التقنية
|
||||
| الخاصية | القيمة |
|
||||
|---------|--------|
|
||||
| الحزمة | `flutter_tts` (v4.x) |
|
||||
| معدل الكلام | 0.5 |
|
||||
| مستوى الصوت | 1.0 |
|
||||
| اللغة الافتراضية | ar-SA (مع fallback إلى en-US) |
|
||||
| iOS Audio Category | playback, mixWithOthers, duckOthers |
|
||||
|
||||
### 2.2 الاستخدامات في تطبيق السائق
|
||||
| الملف | الاستخدام |
|
||||
|-------|-----------|
|
||||
| `navigation_controller.dart` | إرشادات التنقل خطوة بخطوة (TTS عند كل منعطف) |
|
||||
| `navigation_service.dart` | إنشاء كائن TTS للملاحة |
|
||||
| `map_driver_controller.dart` | إعلانات حالة الرحلة |
|
||||
| `destination_controller.dart` | وصف الوجهة |
|
||||
| `order_request_controller.dart` | معلومات طلب الرحلة |
|
||||
| `gemeni.dart` | تحذيرات التحقق من المستندات بالذكاء الاصطناعي |
|
||||
| `mydialoug.dart` | قراءة نصوص الحوارات |
|
||||
| `criminal_documents_page.dart` | معلومات المستندات |
|
||||
| `contact_us_page.dart` | معلومات الاتصال |
|
||||
|
||||
**ميزة فريدة في تطبيق السائق**: زر كتم الصوت (Mute) مع `isSpeaking` observable
|
||||
|
||||
### 2.3 الاستخدامات في تطبيق الراكب
|
||||
| الملف | الاستخدام |
|
||||
|-------|-----------|
|
||||
| `mydialoug.dart` | قراءة نصوص الحوارات |
|
||||
| `car_details_widget_to_go.dart` | معلومات السيارة والرحلة |
|
||||
|
||||
---
|
||||
|
||||
## 3. المؤثرات الصوتية والإشعارات
|
||||
|
||||
### 3.1 حزمة just_audio
|
||||
- **الإصدار**: ^0.10.5
|
||||
- **الاستخدام**: تشغيل المؤثرات الصوتية القصيرة (ليس الموسيقى)
|
||||
|
||||
### 3.2 توزيع الملفات الصوتية
|
||||
|
||||
#### تطبيق الراكب:
|
||||
| الملف | الغرض | التنسيق |
|
||||
|-------|-------|---------|
|
||||
| `start.wav` | نغمة رنين المكالمات | WAV |
|
||||
| `promo.wav` | إشعار ترويجي | WAV |
|
||||
| `ding.wav` | صوت إشعار عام | WAV |
|
||||
| `tone2.wav` | نغمة إشعار | WAV |
|
||||
| `cancel.wav` | صوت إلغاء/رفض | WAV |
|
||||
| `tone1.mp3` | نغمة إشعار | MP3 |
|
||||
|
||||
#### تطبيق السائق:
|
||||
| الملف | الغرض | التنسيق |
|
||||
|-------|-------|---------|
|
||||
| `order.mp3` | **صوت طلب رحلة جديد (loop)** | MP3 |
|
||||
| `order1.wav` | صوت طلب رحلة ثانوي | WAV |
|
||||
| `aggrement.wav` | صوت تأكيد الموافقة | WAV |
|
||||
| `alert.wav` | صوت تنبيه عام | WAV |
|
||||
| `iphone_ringtone.wav` | نغمة رنين شبيهة iPhone | WAV |
|
||||
| `promo.wav` | إشعار ترويجي | WAV |
|
||||
| `ding.wav` | صوت إشعار | WAV |
|
||||
| `tone2.wav` | نغمة إشعار | WAV |
|
||||
| `order.wav` | صوت طلب (native) | WAV |
|
||||
| `cancel.wav` | صوت إلغاء | WAV |
|
||||
| `tone1.mp3` | نغمة إشعار | MP3 |
|
||||
|
||||
### 3.3 آلية تشغيل صوت الطلب
|
||||
```dart
|
||||
// في order_request_controller.dart:
|
||||
void _playAudio() {
|
||||
_audioPlayer.setAsset('assets/order.mp3');
|
||||
_audioPlayer.setLoopMode(LoopMode.one); // تكرار
|
||||
_audioPlayer.play(); // يشغل لمدة 15 ثانية (مدة المؤقت)
|
||||
}
|
||||
|
||||
void _stopAudio() {
|
||||
_audioPlayer.stop();
|
||||
_audioPlayer.dispose();
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. المكالمات الصوتية (WebRTC + Agora)
|
||||
|
||||
### 4.1 البنية المعمارية
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────┐
|
||||
│ CALL ARCHITECTURE │
|
||||
│ │
|
||||
│ Passenger App Driver App │
|
||||
│ ┌─────────────────┐ ┌──────────────────┐ │
|
||||
│ │ VoiceCallCtrl │ │ VoiceCallCtrl │ │
|
||||
│ │ (WebRTC Peer) │◄──────────►│ (WebRTC Peer) │ │
|
||||
│ └────────┬────────┘ Media └────────┬─────────┘ │
|
||||
│ │ Streams │ │
|
||||
│ │ │ │
|
||||
│ ┌────────▼────────┐ ┌─────────▼─────────┐ │
|
||||
│ │ SignalingService │ │ SignalingService │ │
|
||||
│ │ (WebSocket) │◄─────────►│ (WebSocket) │ │
|
||||
│ └────────┬────────┘ wss:// └─────────┬─────────┘ │
|
||||
│ │ calls.intaleq │ │
|
||||
│ │ .com/ws │ │
|
||||
│ ▼ ▼ │
|
||||
│ ┌──────────────────────────────────────────────────┐ │
|
||||
│ │ PHP Backend (create_call_session.php) │ │
|
||||
│ │ + Node.js Signaling Server │ │
|
||||
│ └──────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ STUN Servers: │
|
||||
│ - stun:stun.l.google.com:19302 │
|
||||
│ - stun:stun1.l.google.com:19302 │
|
||||
└──────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 4.2 حالات المكالمة
|
||||
```
|
||||
idle → dialing → ringing → connecting → active → ended
|
||||
↓
|
||||
(120s max)
|
||||
|
||||
يتم إنهاء المكالمة تلقائياً بعد 120 ثانية
|
||||
```
|
||||
|
||||
### 4.3 الميزات
|
||||
- كتم الميكروفون (Mute)
|
||||
- تبديل مكبر الصوت (Speaker)
|
||||
- مؤقت 120 ثانية مع عد تنازلي
|
||||
- ICE restart عند فشل الاتصال
|
||||
- إعادة إنشاء الميكروفون عند عودة التطبيق
|
||||
- دعم Echo Cancellation, Noise Suppression, Auto Gain Control
|
||||
|
||||
---
|
||||
|
||||
## 5. تسجيل الصوت
|
||||
|
||||
### 5.1 المواصفات التقنية
|
||||
| الخاصية | القيمة |
|
||||
|---------|--------|
|
||||
| الحزمة | `record: ^6.2.0` |
|
||||
| الترميز | AAC-LC |
|
||||
| معدل العينة | 44100 Hz |
|
||||
| معدل البت | 128000 bps |
|
||||
| الصيغة | M4A |
|
||||
| تسمية الملف | `{YYYY-MM-DD}_{rideId}.m4a` |
|
||||
|
||||
### 5.2 الميزات
|
||||
- بدء/إيقاف التسجيل
|
||||
- إيقاف مؤقت/استئناف
|
||||
- تشغيل التسجيلات المسجلة (مع tracking للموضع)
|
||||
- حذف الملفات
|
||||
- رفع إلى الخادم عبر `upload_audio.php`
|
||||
|
||||
---
|
||||
|
||||
## 6. البنية التحتية الصوتية (Backend)
|
||||
|
||||
### 6.1 رفع الصوتيات (upload_audio.php)
|
||||
| الميزة | التفاصيل |
|
||||
|--------|----------|
|
||||
| الملفات المقبولة | audio/mp4, audio/mpeg, audio/wav, audio/x-m4a, audio/ogg, audio/webm |
|
||||
| تسمية الملف | 32-character hex عشوائي |
|
||||
| المسار | `upload_audio/` |
|
||||
| الصلاحيات | 750 |
|
||||
| الرابط | `https://api.siromove.com/upload_audio/{file}` |
|
||||
| Rate Limiting | Redis |
|
||||
|
||||
### 6.2 إنشاء جلسة مكالمة (Call Session)
|
||||
```
|
||||
PHP Backend:
|
||||
1. JWT Authentication
|
||||
2. البحث عن الطرف الآخر في الرحلة النشطة
|
||||
3. استدعاء Node.js signaling server: POST /sessions
|
||||
{ride_id, driver_id, passenger_id}
|
||||
4. إرسال FCM notification للطرف الآخر (type: incoming_call)
|
||||
5. إعادة session_id للطالب
|
||||
```
|
||||
|
||||
### 6.3 Signaling Server
|
||||
```
|
||||
URL: https://calls.intaleqapp.com
|
||||
Auth: VOICE_CALL_API_KEY (env)
|
||||
Events: authenticate, participant_joined, offer, answer, ice_candidate, call_ended
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. الميزات الصوتية المفقودة — فرص الابتكار
|
||||
|
||||
### 7.1 تحليل الفجوة (Gap Analysis)
|
||||
|
||||
| الميزة | سيرو | أوبر (Uber) | كريم (Careem) | Bolt | التوصية |
|
||||
|--------|------|-------------|---------------|------|---------|
|
||||
| تشغيل موسيقى في الكابينة | ❌ | ✅ (Spotify) | ❌ | ❌ | **عاجلة** |
|
||||
| راديو داخلي (Siro Radio) | ❌ | ❌ | ❌ | ❌ | **فرصة ذهبية** |
|
||||
| بودكاست/محتوى تعليمي | ❌ | ❌ | ❌ | ❌ | **ميزة فريدة** |
|
||||
| أوامر صوتية | ❌ | ❌ | ❌ | ❌ | **مستقبلية** |
|
||||
| Sound Zones (ترحيب/وداع) | ❌ | ❌ | ❌ | ❌ | **سهلة وسريعة** |
|
||||
| إعلانات صوتية مستهدفة | ❌ | ❌ | ❌ | ❌ | **مصدر دخل** |
|
||||
| AI Music Curator | ❌ | ❌ | ❌ | ❌ | **مبتكرة** |
|
||||
| تأثيرات صوتية محسنة | جزئي | ✅ | ✅ | ✅ | **تحسين** |
|
||||
| Voice Commands للملاحة | ❌ | ❌ | ❌ | ❌ | **مستقبلية** |
|
||||
|
||||
### 7.2 فرص الابتكار الصوتي
|
||||
|
||||
#### 🎵 فرصة 1: Siro Radio (راديو سيرو)
|
||||
```
|
||||
الوصف: إذاعة داخل التطبيق تبث:
|
||||
- موسيقى هادئة (خلفية للرحلة)
|
||||
- إعلانات تجارية (مصدر دخل إضافي)
|
||||
- نصائح للسائقين
|
||||
- أخبار المرور
|
||||
|
||||
التقنية: HLS Streaming + Audio Player
|
||||
الإيرادات: إعلانات صوتية مستهدفة
|
||||
التكلفة: منخفضة (Content licensing via royalty-free)
|
||||
التأثير: تمييز العلامة التجارية + إيرادات
|
||||
```
|
||||
|
||||
#### 🎵 فرصة 2: Spotify / Apple Music Integration
|
||||
```
|
||||
الوصف: ربط حساب المستخدم مع Spotify:
|
||||
- الراكب يتحكم بالموسيقى أثناء الرحلة
|
||||
- التشغيل عبر سماعات السيارة
|
||||
- قوائم تشغيل حسب المزاج
|
||||
|
||||
التقنية: Spotify SDK + Apple MusicKit
|
||||
التأثير: تجربة راكب متميزة
|
||||
الإيرادات: عمولة إحالة Premium
|
||||
```
|
||||
|
||||
#### 🎵 فرصة 3: Podcasts تعليمية
|
||||
```
|
||||
الوصف: محتوى صوتي تعليمي للسائقين:
|
||||
- تعلم اللغة الإنجليزية
|
||||
- السلامة المرورية
|
||||
- مهارات خدمة العملاء
|
||||
- قصص نجاح
|
||||
|
||||
التأثير: تحسين جودة السائقين + تمييز
|
||||
```
|
||||
|
||||
#### 🎵 فرصة 4: Voice Assistant (مساعد سيرو الصوتي)
|
||||
```
|
||||
الوصف: "مرحباً سيرو..."
|
||||
- "خذني إلى دمشق"
|
||||
- "اتصل بالراكب"
|
||||
- "شغّل موسيقى"
|
||||
- "كم ربحت اليوم؟"
|
||||
|
||||
التقنية: Speech-to-Text + NLP + TTS
|
||||
التأثير: واجهة تفاعل جديدة
|
||||
الجدول: 6-12 شهر
|
||||
```
|
||||
|
||||
#### 🎵 فرصة 5: Sound Zones (المؤثرات الصوتية)
|
||||
```
|
||||
الوصف: موسيقى ترحيبية عند بدء الرحلة:
|
||||
- 🎵 Sound Onboarding: موسيقى قصيرة عند بدء الرحلة
|
||||
- 🎵 Sound Departure: موسيقى وداع عند النزول
|
||||
- 🔔 Sound Alert: أصوات محسنة للتنبيهات
|
||||
|
||||
التأثير: تجربة عاطفية أفضل
|
||||
التنفيذ: 1-2 أسبوع
|
||||
```
|
||||
|
||||
#### 🎵 فرصة 6: الإعلانات الصوتية
|
||||
```
|
||||
الوصف: إعلانات صوتية مدتها 5-10 ثوانٍ:
|
||||
- قبل بدء الرحلة (للمستخدم)
|
||||
- أثناء انتظار السائق
|
||||
- بعد انتهاء الرحلة
|
||||
|
||||
الإيرادات: CPM (Cost Per Mille)
|
||||
الاستهداف: حسب الموقع، الوقت، تاريخ الرحلات
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
## 8. خطة تطوير الموسيقى والترفيه الصوتي
|
||||
|
||||
### المرحلة 1: الأساسيات (شهر 1)
|
||||
| المهمة | الجهد | الأولوية |
|
||||
|--------|-------|----------|
|
||||
| Sound Zones (ترحيب/وداع) | 3 أيام | 🟢 عالية |
|
||||
| تحسين المؤثرات الصوتية | 3 أيام | 🟢 عالية |
|
||||
| مكتبة أصوات عالية الجودة | 2 يوم | 🟡 متوسطة |
|
||||
|
||||
### المرحلة 2: Siro Radio (شهر 2-3)
|
||||
| المهمة | الجهد | الأولوية |
|
||||
|--------|-------|----------|
|
||||
| HLS Streaming backend | 2 أسبوع | 🟢 عالية |
|
||||
| Audio Player UI | 1 أسبوع | 🟢 عالية |
|
||||
| اختيار المحتوى (موسيقى خالية من الحقوق) | 1 أسبوع | 🟡 متوسطة |
|
||||
| نظام الإعلانات الصوتية | 2 أسبوع | 🟡 متوسطة |
|
||||
|
||||
### المرحلة 3: التكامل مع Spotify (شهر 3-4)
|
||||
| المهمة | الجهد | الأولوية |
|
||||
|--------|-------|----------|
|
||||
| Spotify SDK integration | 2 أسبوع | 🟢 عالية |
|
||||
| التحكم بالموسيقى UI | 1 أسبوع | 🟢 عالية |
|
||||
| اختبار التكامل مع CarPlay | 1 أسبوع | 🟡 متوسطة |
|
||||
|
||||
### المرحلة 4: المحتوى التعليمي (شهر 4-6)
|
||||
| المهمة | الجهد | الأولوية |
|
||||
|--------|-------|----------|
|
||||
| منصة Podcasts | 2 أسبوع | 🟡 متوسطة |
|
||||
| إنتاج محتوى (10 حلقات) | 3 أسبوع | 🟡 متوسطة |
|
||||
| Voice Assistant الأساسي | 4 أسبوع | 🔴 طويلة الأجل |
|
||||
|
||||
---
|
||||
|
||||
## 9. دراسة الجدوى — ميزة الموسيقى
|
||||
|
||||
### 9.1 التكلفة التقديرية
|
||||
|
||||
| المكون | التكلفة التقديرية |
|
||||
|--------|-------------------|
|
||||
| Sound Zones + تحسين المؤثرات | $500 - $1,000 |
|
||||
| Siro Radio (تطوير + استضافة) | $3,000 - $5,000 |
|
||||
| Spotify Integration | $2,000 - $4,000 |
|
||||
| المحتوى التعليمي (Podcasts) | $1,000 - $2,000 |
|
||||
| **الإجمالي المقدر** | **$6,500 - $12,000** |
|
||||
|
||||
### 9.2 العائد المتوقع
|
||||
|
||||
| مصدر الإيرادات | التقدير الشهري (3 دول) |
|
||||
|-----------------|------------------------|
|
||||
| إعلانات Siro Radio | $500 - $2,000 |
|
||||
| Spotify Premium referrals | $200 - $800 |
|
||||
| محتوى مدفوع (Podcasts) | $100 - $500 |
|
||||
| تحسين الاحتفاظ بالركاب | غير مباشر — كبير |
|
||||
| **الإجمالي** | **$800 - $3,300/شهر** |
|
||||
|
||||
### 9.3 مؤشرات النجاح
|
||||
- **ROI المتوقع**: 6-12 شهر
|
||||
- **تأثير على الاحتفاظ بالركاب**: +15-25%
|
||||
- **تأثير على تقييم التطبيق**: +0.5 نجوم
|
||||
- **رضا السائقين (موسيقى خلفية)**: +20%
|
||||
|
||||
---
|
||||
|
||||
## الملخص
|
||||
|
||||
**الميزات الصوتية الحالية في سيرو محدودة بالتطبيقات الوظيفية** (TTS للملاحة، مكالمات، تسجيل) وتفتقر تماماً إلى أي عنصر ترفيهي أو موسيقي.
|
||||
|
||||
**هذه فجوة تنافسية كبيرة** — أوبر يتفوق بتكامله مع Spotify، ولا يوجد أي منافس إقليمي يقدم تجربة صوتية متكاملة. سيرو لديها فرصة ذهبية لتصبح **أول منصة نقل في المنطقة تقدم تجربة ترفيه صوتي متكاملة**.
|
||||
|
||||
**التوصية**: البدء فوراً بـ Sound Zones وتحسين المؤثرات (جهد قليل، تأثير كبير)، ثم Siro Radio (مصدر دخل جديد)، ثم Spotify Integration (ميزة تنافسية).
|
||||
|
||||
> "الموسيقى ليست رفاهية — إنها الميزة التنافسية القادمة في عالم النقل الذكي"
|
||||
@@ -0,0 +1,420 @@
|
||||
# تحليل استهلاك البطارية وأداء التطبيق — سيرو
|
||||
## Battery & Performance Analysis — Siro Platform
|
||||
|
||||
> **النسخة:** 1.0 | **تاريخ:** يوليو 2026 | **التصنيف:** داخلي
|
||||
|
||||
---
|
||||
|
||||
## 📋 فهرس المحتويات
|
||||
1. [ملخص الأداء العام](#1-ملخص-الأداء-العام)
|
||||
2. [تحليل استهلاك البطارية بالتفصيل](#2-تحليل-استهلاك-البطارية-بالتفصيل)
|
||||
3. [نظام GPS المتكيف](#3-نظام-gps-المتكيف)
|
||||
4. [تحسين الذاكرة والأداء](#4-تحسين-الذاكرة-والأداء)
|
||||
5. [تحسين الشبكة والاتصالات](#5-تحسين-الشبكة-والاتصالات)
|
||||
6. [تصنيف فئات الأجهزة](#6-تصنيف-فئات-الأجهزة)
|
||||
7. [الخدمات الخلفية (Background Services)](#7-الخدمات-الخلفية)
|
||||
8. [نقاط الضعف والتوصيات](#8-نقاط-الضعف-والتوصيات)
|
||||
9. [خطة التحسين المقترحة](#9-خطة-التحسين-المقترحة)
|
||||
|
||||
---
|
||||
|
||||
## 1. ملخص الأداء العام
|
||||
|
||||
### التقييم الإجمالي: ⭐⭐⭐⭐☆ (8/10)
|
||||
|
||||
| المجال | التقييم | ملاحظات |
|
||||
|--------|---------|---------|
|
||||
| استهلاك البطارية (GPS) | ⭐⭐⭐⭐☆ | نظام متكيف جيد، يحتاج تحسينات |
|
||||
| استهلاك البطارية (خلفية) | ⭐⭐⭐⭐⭐ | معماري ممتاز — لا GPS في الخلفية |
|
||||
| سرعة التطبيق | ⭐⭐⭐⭐☆ | GetX سريع، لكن بدء التشغيل بطيء |
|
||||
| استهلاك الذاكرة | ⭐⭐⭐⭐☆ | Lazy loading، Buffer limits |
|
||||
| حجم التطبيق | ⭐⭐⭐☆☆ | كبير نسبياً (Flutter + حزم كثيرة) |
|
||||
| الشبكة والاتصالات | ⭐⭐⭐⭐⭐ | Caching ممتاز، Socket ذكي |
|
||||
| الخدمات الخلفية | ⭐⭐⭐⭐⭐ | Foreground Service محسن |
|
||||
|
||||
---
|
||||
|
||||
## 2. تحليل استهلاك البطارية بالتفصيل
|
||||
|
||||
### 2.1 الحزم المستخدمة
|
||||
|
||||
| الحزمة | الاستخدام | التأثير على البطارية |
|
||||
|---------|-----------|----------------------|
|
||||
| `battery_plus: ^7.0.0` | مراقبة مستوى البطارية | 🟢 Minimal |
|
||||
| `wakelock_plus:` | إبقاء الشاشة قيد التشغيل | 🟡 مشغل دائم — يحتاج تحسين |
|
||||
| `flutter_background_service: ^5.1.0` | خدمة الخلفية | 🟢 محسّن بشكل معماري |
|
||||
| `location: ^8.0.0` | تتبع GPS | 🟡 عالي لكن مع تحسينات |
|
||||
| `native_geofence: ^1.1.0` | Geofencing | 🟢 Hardware-level — ممتاز |
|
||||
|
||||
### 2.2 أوضاع استهلاك الطاقة
|
||||
|
||||
#### الوضع الطبيعي (بطارية > 25%)
|
||||
```
|
||||
GPS Interval: 5 ثوانٍ
|
||||
Distance Filter: 10 متر
|
||||
Upload Batch: كل دقيقتين
|
||||
Record Timer: كل 3 ثوانٍ
|
||||
Heartbeat: كل 25 ثانية (يتخطى إذا GPS نشط)
|
||||
WakeLock: مفعل
|
||||
```
|
||||
|
||||
#### وضع توفير الطاقة (بطارية ≤ 20%)
|
||||
```
|
||||
GPS Interval: 10 ثوانٍ ← توفير 50%
|
||||
Distance Filter: 20 متر ← توفير 50%
|
||||
Upload Batch: كل 5 دقائق ← توفير 60%
|
||||
Record Timer: كل 10 ثوانٍ ← توفير 70%
|
||||
Heartbeat: كل 25 ثانية
|
||||
WakeLock: مفعل (بدون تغيير)
|
||||
يدخل تلقائياً عند 20%، يخرج عند 25%
|
||||
```
|
||||
|
||||
### 2.3 تأثير كل تقنية على البطارية
|
||||
|
||||
| التقنية | الوضع الطبيعي | توفير الطاقة | التوفير |
|
||||
|---------|---------------|---------------|---------|
|
||||
| GPS Polling | 5s | 10s | ~40% أقل استهلاك |
|
||||
| Distance Filter | 10m | 20m | ~30% أقل تحديثات |
|
||||
| Upload Frequency | 2min | 5min | ~60% أقل طلبات |
|
||||
| Record Frequency | 3s | 10s | ~70% أقل تسجيل |
|
||||
| Heartbeat | 25s | 25s | يتخطى إذا GPS نشط |
|
||||
|
||||
---
|
||||
|
||||
## 3. نظام GPS المتكيف
|
||||
|
||||
### 3.1 خوارزمية التحكم بالموقع (LocationController)
|
||||
- **841 سطر** — ملف التحكم الرئيسي بالموقع
|
||||
- **Single Source of Truth**: لا يوجد مصدر آخر للموقع في التطبيق
|
||||
- **Background Service بدون GPS**: قاعدة معمارية صارمة — الخدمة الخلفية تشغل Socket فقط
|
||||
|
||||
### 3.2 تسجيل المسار الذكي
|
||||
```dart
|
||||
// يُسجل فقط إذا:
|
||||
// 1. تحرك أكثر من 10 أمتار AND سرعة > 0.5 م/ث
|
||||
// 2. أو مر 60 ثانية بدون تسجيل (force record)
|
||||
if ((moved && speed > 0.5) || timeForced) {
|
||||
_trackBuffer.add(point);
|
||||
}
|
||||
```
|
||||
|
||||
### 3.3 Batch Upload
|
||||
```
|
||||
Buffer: يخزن حتى 500 نقطة
|
||||
Upload: كل 2-5 دقائق (حسب وضع الطاقة)
|
||||
Batch Size: حتى 100 نقطة لكل طلب
|
||||
SQLite: Flush كل 10 نقاط سلوكية
|
||||
```
|
||||
|
||||
### 3.4 Heartbeat الذكي
|
||||
```dart
|
||||
// Heartbeat كل 25 ثانية، لكن:
|
||||
// إذا GPS stream نشط → يتخطى Heartbeat بالكامل
|
||||
if (_locSub != null) return; // Skip if GPS stream is active
|
||||
```
|
||||
|
||||
### 3.5 Socket Watchdog
|
||||
```dart
|
||||
// فحص الاتصال كل 3 ثوانٍ
|
||||
// يعيد الاتصال فقط إذا انقطع
|
||||
// يمنع إعادة اتصال متزامنة
|
||||
if (!isSocketConnected && !_isInitializingSocket) {
|
||||
initSocket();
|
||||
}
|
||||
```
|
||||
|
||||
### 3.6 إدارة دورة حياة التطبيق
|
||||
```dart
|
||||
// عندما التطبيق في المقدمة → يوقف Background Service
|
||||
// عندما التطبيق في الخلفية → يشغل Background Service
|
||||
// iOS: لا يشغل Background Service أبداً
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. تحسين الذاكرة والأداء
|
||||
|
||||
### 4.1 GetX Lazy Loading
|
||||
|
||||
```dart
|
||||
// Permanent (في الذاكرة دائماً):
|
||||
Get.put(LocaleController());
|
||||
Get.put(MapSocketController(), permanent: true);
|
||||
Get.put(MapEngineController(), permanent: true);
|
||||
|
||||
// Lazy (ينشأ عند أول استخدام فقط):
|
||||
Get.lazyPut(() => LoginController(), fenix: true);
|
||||
Get.lazyPut(() => NotificationController(), fenix: true);
|
||||
Get.lazyPut(() => VoiceCallController(), fenix: true);
|
||||
```
|
||||
|
||||
### 4.2 Buffer Limits
|
||||
```
|
||||
Track Buffer: حد أقصى 500 نقطة (يحذف الأقدم)
|
||||
Behavior Buffer: Flush إلى SQLite كل 10 نقاط
|
||||
Error Log: Debounce دقيقة واحدة لنفس الخطأ
|
||||
Image Upload: ضغط 70% + حد أقصى 1024x1024
|
||||
Map Icons: تصغير إلى 120x120 في Isolate منفصل
|
||||
```
|
||||
|
||||
### 4.3 Caching
|
||||
| البيانات | مكان التخزين | مدة الصلاحية |
|
||||
|----------|--------------|--------------|
|
||||
| إحصائيات الأسبوع | GetStorage | 3 ساعات |
|
||||
| مسار الرحلة (Cached Route) | GetStorage | حتى رحلة جديدة |
|
||||
| قائمة الفيديوهات | GetStorage | غير محدد |
|
||||
| قائمة الرحلات المتاحة | GetStorage | 5 ثوانٍ |
|
||||
| Device Tier | GetStorage | 24 ساعة |
|
||||
| الخرائط الأوفلاين | SQLite | 10km radius |
|
||||
|
||||
### 4.4 Image Optimization Pipeline
|
||||
```dart
|
||||
// خطوة 1: تدوير الصورة تلقائياً (Auto-rotate)
|
||||
// خطوة 2: قص المستند (Auto-crop)
|
||||
// خطوة 3: ضغط إلى 70% جودة
|
||||
// خطوة 4: تصغير إلى 1024x1024
|
||||
// خطوة 5: رفع مع 3 محاولات + Exponential Backoff
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. تحسين الشبكة والاتصالات
|
||||
|
||||
### 5.1 SSL Pinning
|
||||
- جميع الاتصالات HTTPS مع SSL Pinning
|
||||
- يمنع هجمات Man-in-the-Middle
|
||||
- JWT مع Validate قبل كل طلب (30s buffer)
|
||||
|
||||
### 5.2 Connectivity Guard
|
||||
```dart
|
||||
// قبل كل طلب → تحقق من الاتصال
|
||||
final connectivityResult = await Connectivity().checkConnectivity();
|
||||
if (connectivityResult == ConnectivityResult.none) return;
|
||||
// تأكيد الوصول للإنترنت
|
||||
final hasInternet = await InternetConnectionChecker().hasConnection;
|
||||
```
|
||||
|
||||
### 5.3 Socket Optimization
|
||||
| الخاصية | Driver Socket | Passenger Socket |
|
||||
|----------|---------------|------------------|
|
||||
| Transport | WebSocket only | WebSocket only |
|
||||
| Auto-connect | Manual (disableAutoConnect) | Manual |
|
||||
| Reconnection | Infinite | 20 attempts |
|
||||
| Reconnect delay | Default | 2s → max 10s |
|
||||
| Connection timeout | Default | 20s |
|
||||
|
||||
### 5.4 HTTP Optimization
|
||||
```
|
||||
Upload Retries: 3 محاولات
|
||||
Backoff: 2s, 4s, 6s (exponential)
|
||||
Timeout: 120 ثانية للرفع
|
||||
401 Handling: Auto-refresh JWT + Retry
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. تصنيف فئات الأجهزة
|
||||
|
||||
### 6.1 Device Tier (siro_rider/lib/controller/home/device_tier.dart)
|
||||
```
|
||||
نظام تسجيل بناءً على:
|
||||
- Android SDK version (الأقدم = أعلى نقاط = أضعف)
|
||||
- عدد أنوية المعالج
|
||||
- عدد ABIs المدعومة
|
||||
- هل هو Emulator؟
|
||||
|
||||
التصنيف:
|
||||
- Low: Score ≥ 6
|
||||
- Mid: Score ≥ 3
|
||||
- High: Score < 3
|
||||
- Clobal (يحفظ لمدة 24 ساعة)
|
||||
```
|
||||
|
||||
### 6.2 Device Performance (siro_rider/lib/controller/home/device_performance.dart)
|
||||
```
|
||||
نظام White-List للأجهزة عالية الأداء:
|
||||
- Samsung: S21+ (SM-S), Fold/Flip (SM-F), Note 9+ (SM-N9), S10/S20 (SM-G9)
|
||||
- Google: Pixel 6/7/8/9, Pixel Fold
|
||||
- Huawei: P40, Mate 20/30/40
|
||||
- OnePlus: 7/8/9/10/11, CPH prefix
|
||||
- Xiaomi: RAM > 7.5GB
|
||||
- Blacklist: MT65xx, MT6735, SC77xx (معالجات رخيصة)
|
||||
- iOS: دائماً High-end
|
||||
```
|
||||
|
||||
### 6.3 NearBy Drivers Performance (nearby_drivers_controller.dart)
|
||||
```dart
|
||||
// كشف الأداء المنخفض:
|
||||
lowPerf = (sdk < 28) || (ram > 0 && ram < 3 * 1024 * 1024 * 1024);
|
||||
// يخفض زوم الخريطة من 15 إلى 14.5
|
||||
```
|
||||
|
||||
### 6.4 Device Analyzer (siro_driver/lib/controller/functions/device_analyzer.dart)
|
||||
```
|
||||
نظام تسجيل كامل (100 نقطة كحد أقصى):
|
||||
1. Android version (max 10pts)
|
||||
2. RAM (max 10pts): 8GB+ = 10, 4GB+ = 5, 3GB+ = 3
|
||||
3. CPU cores (max 10pts): 6+ = 10, 4+ = 5
|
||||
4. Free storage (max 5pts): 5GB+ = 5, 2GB+ = 3
|
||||
5. GPS + Gyroscope (max 10pts)
|
||||
6. Storage write speed test (max 20pts) — يكتب 5MB ويقيس السرعة
|
||||
7. CPU compute speed test (max 20pts) — 100M floating point iterations
|
||||
8. Memory pressure (max 15pts) — /proc/meminfo
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. الخدمات الخلفية
|
||||
|
||||
### 7.1 Android Foreground Service
|
||||
```dart
|
||||
// الميزات:
|
||||
- تشتغل 24/7
|
||||
- تحديث الموقع عبر LocationController (وليس من Background Service)
|
||||
- لا تحتوي على GPS (قاعدة معمارية)
|
||||
- Notification بأقل أولوية (Importance.low)
|
||||
- إعادة تشغيل تلقائي عند BOOT_COMPLETED
|
||||
- تدعم Picture-in-Picture
|
||||
```
|
||||
|
||||
### 7.2 iOS Background
|
||||
```dart
|
||||
// iOS: لا يشغل Background Service
|
||||
// يعتمد على تحديثات الموقع من iOS system
|
||||
// LocationController يستخدم enableBackgroundMode من package
|
||||
```
|
||||
|
||||
### 7.3 Geofencing (Hardware-level)
|
||||
```
|
||||
يستخدم native_geofence package:
|
||||
- Android: GeofencingApi (hardware)
|
||||
- iOS: CLRegion (hardware)
|
||||
- فعال جداً للبطارية
|
||||
- مشغل من الخادم
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. نقاط الضعف والتوصيات
|
||||
|
||||
### 8.1 المشكلات الحالية
|
||||
|
||||
| # | المشكلة | التأثير | الحل المقترح | الجهد |
|
||||
|---|---------|---------|--------------|-------|
|
||||
| 1 | **WakeLock دائم** | يستنزف البطارية خارج الرحلات | تشغيل فقط أثناء الرحلة النشطة | 1 يوم |
|
||||
| 2 | **GPS accuracy = navigation** | أعلى دقة حتى في توفير الطاقة | استخدام high بدلاً من navigation في توفير الطاقة | 2 ساعة |
|
||||
| 3 | **لا تكيف حسب السرعة** | نفس الـ Polling في الحركة والتوقف | إيقاف GPS عند السرعة = 0 (متوقف) | 1 يوم |
|
||||
| 4 | **Doze Mode** | لم يتم التعامل مع Android Doze | استخدام FCM لتجاوز Doze | 2 يوم |
|
||||
| 5 | **حجم التطبيق كبير** | Flutter + حزم كثيرة | App Bundle، إزالة الحزم غير المستخدمة | مستمر |
|
||||
| 6 | **بدء التشغيل بطيء** | WakeLock + Firebase + Location | تأجيل Initialization بعد Splash Screen | 2 يوم |
|
||||
| 7 | **Animation Jank** | أحياناً تقطيع في الرسوم المتحركة | استخدام GPU Profiling لاكتشاف المشاكل | مستمر |
|
||||
|
||||
### 8.2 تحسينات مقترحة — التفاصيل
|
||||
|
||||
#### 🔧 تحسين 1: Smart WakeLock
|
||||
```dart
|
||||
// الوضع الحالي:
|
||||
// في main.dart:
|
||||
await WakelockPlus.enable(); // دائم — مشكلة
|
||||
|
||||
// الوضع المقترح:
|
||||
// في RideLifecycleController:
|
||||
void onRideStateChanged(RideState state) {
|
||||
switch (state) {
|
||||
case RideState.searching:
|
||||
case RideState.inProgress:
|
||||
case RideState.driverArrived:
|
||||
await WakelockPlus.enable(); // فقط أثناء الرحلة
|
||||
break;
|
||||
case RideState.noRide:
|
||||
case RideState.finished:
|
||||
case RideState.cancelled:
|
||||
await WakelockPlus.disable(); // يسمح للسكون
|
||||
break;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 🔧 تحسين 2: GPS Speed-adaptive
|
||||
```dart
|
||||
// الوضع المقترح:
|
||||
if (speed < 0.5) {
|
||||
// متوقف — أوقف GPS بالكامل أو خفف الجهد
|
||||
interval = 30000; // 30 ثانية بدلاً من 5
|
||||
distanceFilter = 100; // 100 متر بدلاً من 10
|
||||
} else if (speed < 10) {
|
||||
// حركة بطيئة
|
||||
interval = powerSaveMode ? 15000 : 8000;
|
||||
distanceFilter = powerSaveMode ? 30 : 15;
|
||||
} else {
|
||||
// سرعة عادية
|
||||
interval = powerSaveMode ? 10000 : 5000;
|
||||
distanceFilter = powerSaveMode ? 20 : 10;
|
||||
}
|
||||
```
|
||||
|
||||
#### 🔧 تحسين 3: تقليل حجم التطبيق
|
||||
```
|
||||
الحلول المقترحة:
|
||||
1. Android App Bundle (توفير 30-40% حجم)
|
||||
2. حذف الحزم غير المستخدمة (flutter_overlay_window للـ Rider — لا يحتاجه)
|
||||
3. استخدام Lottie بدلاً من GIF للرسوم المتحركة
|
||||
4. Shorebird OTA للتحديثات (مستخدم بالفعل)
|
||||
5. حذف assets غير المستخدمة
|
||||
6. Flutter DevTools لتحديد الـ Bloat
|
||||
```
|
||||
|
||||
#### 🔧 تحسين 4: Startup Time Optimization
|
||||
```dart
|
||||
// حلاً مقترحاً لتسريع بدء التشغيل:
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
runApp(SpashScreen()); // أولاً: شاشة البداية سريعة
|
||||
|
||||
// ثم في الخلفية:
|
||||
Future.wait([
|
||||
initializeFirebase(), // غير ضروري فوراً
|
||||
initLocationController(), // غير ضروري فوراً
|
||||
WakelockPlus.enable(), // يمكن تأجيله
|
||||
loadUserSession(), // ضروري
|
||||
]).then((_) => runApp(SiroApp())); // بعد التحميل
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. خطة التحسين المقترحة
|
||||
|
||||
### الأسبوع 1: تحسينات سريعة
|
||||
- [ ] Smart WakeLock — تشغيل فقط أثناء الرحلة
|
||||
- [ ] GPS accuracy = high في توفير الطاقة (بدلاً من navigation)
|
||||
- [ ] تفعيل Android App Bundle
|
||||
|
||||
### الأسبوع 2: تحسينات متوسطة
|
||||
- [ ] GPS Speed-adaptive polling
|
||||
- [ ] Doze Mode handling
|
||||
- [ ] تأجيل Initialization بعد Splash
|
||||
|
||||
### الأسبوع 3: تحسينات متقدمة
|
||||
- [ ] تحليل الـ Memory Leaks عبر DevTools
|
||||
- [ ] تفريغ الخريطة عند عدم ظهورها
|
||||
- [ ] حذف الحزم غير المستخدمة
|
||||
|
||||
### الأسبوع 4: مراقبة واختبار
|
||||
- [ ] اختبار استهلاك البطارية على 10 أجهزة مختلفة
|
||||
- [ ] قياس FPS والـ Jank
|
||||
- [ ] قياس وقت بدء التشغيل
|
||||
|
||||
---
|
||||
|
||||
## خاتمة
|
||||
|
||||
**نظام تحسين البطارية في سيرو متقدم جداً مقارنة بمنافسيه** — نظام GPS المتكيف مع وضع توفير الطاقة التلقائي، و Batch Upload، والمعمارية التي تفصل GPS عن Background Service كلها قرارات تصميمية ممتازة.
|
||||
|
||||
**نقاط القوة**: Heartbeat الذكي، Distance Filter، Movement-based recording، Geofencing hardware-level
|
||||
|
||||
**نقاط الضعف**: WakeLock الدائم، GPS accuracy ثابت، عدم التكيف مع السرعة، حجم التطبيق
|
||||
|
||||
**التقييم العام**: 8/10 مع إمكانية رفع إلى 9.5/10 بعد التحسينات المقترحة
|
||||
|
||||
> "سيرو لديها أفضل نظام إدارة بطارية رأيناه في منصات النقل بالمنطقة، مع تحسينات بسيطة يمكن أن تصبح الأفضل عالمياً"
|
||||
@@ -0,0 +1,786 @@
|
||||
# Siro Competitive Features & Innovation Analysis
|
||||
## منصة سيرو — تحليل الميزات التنافسية الشامل
|
||||
|
||||
> **آخر تحديث:** يوليو 2026
|
||||
> **النسخة:** v3.0
|
||||
> **التصنيف:** داخلي — سري
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents / فهرس المحتويات
|
||||
|
||||
1. [Executive Summary / الملخص التنفيذي](#1-executive-summary)
|
||||
2. [Platform Overview / نظرة عامة على المنصة](#2-platform-overview)
|
||||
3. [All Features Matrix / مصفوفة الميزات الكاملة](#3-all-features-matrix)
|
||||
4. [Competitive Features Deep Dive / الميزات التنافسية بالتفصيل](#4-competitive-features-deep-dive)
|
||||
5. [Battery & Performance Optimization / تحسين البطارية والأداء](#5-battery--performance-optimization)
|
||||
6. [Audio & Music Features / الميزات الصوتية والموسيقى](#6-audio--music-features)
|
||||
7. [New Competitive Features Proposals / مقترحات ميزات تنافسية جديدة](#7-new-competitive-features-proposals)
|
||||
8. [Competitor Comparison / مقارنة المنافسين](#8-competitor-comparison)
|
||||
9. [Innovation Scorecard / بطاقة الابتكار](#9-innovation-scorecard)
|
||||
10. [Strategic Recommendations / التوصيات الاستراتيجية](#10-strategic-recommendations)
|
||||
|
||||
---
|
||||
|
||||
## 1. Executive Summary
|
||||
|
||||
**Siro (سيرو)** is a full-stack, multi-region ride-hailing platform operating across **Syria, Jordan, and Egypt**. The platform consists of **4 Flutter mobile apps**, a **PHP backend**, a **Node.js pricing engine**, **Android native bots**, and multiple supporting servers.
|
||||
|
||||
### Key Statistics
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Countries | Syria (Live), Jordan (Live), Egypt (Launching) |
|
||||
| Apps | 4 (Rider, Driver, Admin, Service) |
|
||||
| Vehicle Types | 12 |
|
||||
| Payment Methods | 7 |
|
||||
| Drivers (Syria) | 1,200+ |
|
||||
| Riders (Syria) | 1,800+ |
|
||||
| Drivers (Jordan) | 800+ |
|
||||
| Riders (Jordan) | 700+ |
|
||||
| AI Engines | 3 (Azure OCR, OpenAI, Llama) |
|
||||
| Bots | 2 (Android, Social) |
|
||||
| Backend Language | PHP + Node.js |
|
||||
| WebSocket Servers | 2 (Driver + Passenger) |
|
||||
|
||||
---
|
||||
|
||||
## 2. Platform Overview
|
||||
|
||||
### Architecture
|
||||
```
|
||||
┌────────────────────────────────────────────────────────────────────┐
|
||||
│ FLUTTER APPS │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌────────────┐ ┌─────────┐ │
|
||||
│ │ siro_rider │ │ siro_driver │ │ siro_admin │ │ service │ │
|
||||
│ │ (Passenger) │ │ (Captain) │ │ (Web/PWA) │ │ (Agent) │ │
|
||||
│ └───────┬──────┘ └──────┬───────┘ └─────┬──────┘ └────┬────┘ │
|
||||
└──────────┼─────────────────┼─────────────────┼──────────────┼──────┘
|
||||
│ │ │ │
|
||||
▼ ▼ ▼ ▼
|
||||
┌────────────────────────────────────────────────────────────────────┐
|
||||
│ API GATEWAY (connect.php) + JWT + Rate Limiting │
|
||||
└────────────────────────────────────────────────────────────────────┘
|
||||
│ │ │ │
|
||||
▼ ▼ ▼ ▼
|
||||
┌────────────────────────────────────────────────────────────────────┐
|
||||
│ BACKEND LAYER │
|
||||
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
|
||||
│ │ Main API │ │ Ride API │ │ Location │ │ Wallet │ │
|
||||
│ │ (siro_v3) │ │ (rides) │ │ (location) │ │ (wallet) │ │
|
||||
│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
|
||||
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
|
||||
│ │ Marketing │ │ Pricing │ │ AI Bots │ │ WebSocket │ │
|
||||
│ │ Engine │ │ Engine │ │ (Cron) │ │ (PHP) │ │
|
||||
│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
|
||||
└────────────────────────────────────────────────────────────────────┘
|
||||
│ │ │ │
|
||||
▼ ▼ ▼ ▼
|
||||
┌────────────────────────────────────────────────────────────────────┐
|
||||
│ MYSQL DATABASES + REDIS │
|
||||
│ ┌────────────────────┐ ┌─────────────────┐ ┌────────────────┐ │
|
||||
│ │ intaleqDB1 (Main) │ │ intaleq-ridesDB │ │ car_locations │ │
|
||||
│ │ (60+ tables) │ │ (ride-specific) │ │ (GIS SPATIAL) │ │
|
||||
│ └────────────────────┘ └─────────────────┘ └────────────────┘ │
|
||||
└────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Technology Stack
|
||||
| Layer | Technology | Details |
|
||||
|-------|-----------|---------|
|
||||
| Mobile Apps | Flutter (Dart) | 4 apps: rider, driver, admin, service |
|
||||
| State Management | GetX | Permanent + lazy-loaded controllers |
|
||||
| Backend | PHP (native) | Custom JWT auth, rate limiting, Redis |
|
||||
| Database | MySQL 8.0 | GIS SPATIAL indexes, POINT columns |
|
||||
| Caching | Redis, GetStorage, SQLite | Rate limiting, hybrid driver search |
|
||||
| WebSocket | PHP Socket.IO | Driver socket (2021), Passenger socket (3031) |
|
||||
| Maps | Google Maps + Siro Maps + Map SaaS + OSRM | Custom Flutter map plugin |
|
||||
| Payments | PayMob, Stripe, custom wallet | Visa, MTN, Syriatel, E-Cash, CLIQ |
|
||||
| Push Notifications | FCM + Local + iOS Live Activities | Firebase Cloud Messaging |
|
||||
| Voice/Video | Agora + WebRTC | In-call sessions |
|
||||
| AI Services | Azure OCR, OpenAI GPT, Llama AI | Document scanning |
|
||||
| SMS | Twilio, WhatsApp Cloud API, SMS Kazumi | OTP delivery |
|
||||
| Auth | Custom JWT + Firebase + Google + Apple | Device fingerprint binding |
|
||||
| Storage | GetStorage + FlutterSecureStorage | Encrypted boxes, Keychain/Keystore |
|
||||
| CI/CD | Shorebird | Over-the-air updates |
|
||||
| Admin | Flutter Web / PWA | Cross-platform admin panel |
|
||||
| Pricing Engine | Node.js / TypeScript | MAD, K-Means, regression analysis |
|
||||
|
||||
---
|
||||
|
||||
## 3. All Features Matrix
|
||||
|
||||
### Passenger Features (siro_rider)
|
||||
|
||||
| Category | Feature | Status | Competitive Value |
|
||||
|----------|---------|--------|-------------------|
|
||||
| **Core Ride** | 12 ride types (Speed, Comfort, Family, Delivery, Free/Blash, Late, Heavy, Nature, Electric, Pink Bike, Van, Female Driver) | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Core Ride** | Real-time driver tracking via WebSocket | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Core Ride** | Price estimation with competitor comparison badges | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Core Ride** | Multi-point trips (Mishwari) up to 5 waypoints | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Core Ride** | Ride state machine (8 states) | ✅ Live | ⭐⭐⭐ |
|
||||
| **Core Ride** | Deviation detection (50m threshold, auto re-route) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Core Ride** | Local ETA calculation | ✅ Live | ⭐⭐⭐ |
|
||||
| **Maps** | Google Maps rendering | ✅ Live | ⭐⭐⭐ |
|
||||
| **Maps** | Here Maps place autocomplete | ✅ Live | ⭐⭐⭐ |
|
||||
| **Maps** | Custom Siro Maps (Map SaaS) | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Maps** | OSRM routing (OpenStreetMap) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Maps** | Offline maps via SQLite caching | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Maps** | Heatmap visualization | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Payments** | Cash | ✅ Live | ⭐⭐⭐ |
|
||||
| **Payments** | Visa/Mastercard (PayMob) | ✅ Live | ⭐⭐⭐ |
|
||||
| **Payments** | Wallet (internal balance) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Payments** | MTN Mobile Money | ✅ Live | ⭐⭐⭐⭐⭐ (Syria) |
|
||||
| **Payments** | Syriatel Mobile Money | ✅ Live | ⭐⭐⭐⭐⭐ (Syria) |
|
||||
| **Payments** | E-Cash (Egypt) | ✅ Live | ⭐⭐⭐⭐⭐ (Egypt) |
|
||||
| **Payments** | Stripe | ✅ Live | ⭐⭐⭐ |
|
||||
| **Payments** | CLIQ (Egypt) | ✅ Live | ⭐⭐⭐⭐ (Egypt) |
|
||||
| **Payments** | Wallet top-up & transaction history | ✅ Live | ⭐⭐⭐ |
|
||||
| **Payments** | Prime membership subscription | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Communication** | In-app chat with driver | ✅ Live | ⭐⭐⭐ |
|
||||
| **Communication** | Voice/video calls (Agora + WebRTC) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Communication** | Text-to-speech (TTS) | ✅ Live | ⭐⭐⭐ |
|
||||
| **Communication** | Voice recording | ✅ Live | ⭐⭐⭐ |
|
||||
| **Safety** | SOS/Emergency signal service | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Safety** | Geofencing service | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Safety** | Device fingerprint binding | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Safety** | Jailbreak/root detection | ✅ Live | ⭐⭐⭐ |
|
||||
| **Safety** | SSL pinning | ✅ Live | ⭐⭐⭐ |
|
||||
| **Safety** | Encrypted local storage | ✅ Live | ⭐⭐⭐ |
|
||||
| **Safety** | Biometric authentication | ✅ Live | ⭐⭐⭐ |
|
||||
| **Promotions** | Promo codes | ✅ Live | ⭐⭐⭐ |
|
||||
| **Promotions** | Referral system (unified codes) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Promotions** | Points for riders | ✅ Live | ⭐⭐⭐ |
|
||||
| **Notifications** | Firebase push notifications | ✅ Live | ⭐⭐⭐ |
|
||||
| **Notifications** | Local notifications | ✅ Live | ⭐⭐⭐ |
|
||||
| **Notifications** | iOS Live Activities | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Notifications** | In-app notification pages | ✅ Live | ⭐⭐⭐ |
|
||||
| **Profile** | Passenger profile with photo | ✅ Live | ⭐⭐⭐ |
|
||||
| **Profile** | Order history | ✅ Live | ⭐⭐⭐ |
|
||||
| **Profile** | Contact support | ✅ Live | ⭐⭐⭐ |
|
||||
| **Profile** | FAQ | ✅ Live | ⭐⭐⭐ |
|
||||
| **Profile** | Language selection (18+ languages) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Profile** | Share app | ✅ Live | ⭐⭐⭐ |
|
||||
| **Profile** | Delete account | ✅ Live | ⭐⭐⭐ |
|
||||
| **Other** | Deep linking | ✅ Live | ⭐⭐⭐ |
|
||||
| **Other** | App shortcuts (quick actions) | ✅ Live | ⭐⭐⭐ |
|
||||
| **Other** | Multiple themes | ✅ Live | ⭐⭐⭐ |
|
||||
|
||||
### Driver/Captain Features (siro_driver)
|
||||
|
||||
| Category | Feature | Status | Competitive Value |
|
||||
|----------|---------|--------|-------------------|
|
||||
| **Ride Mgmt** | Online/offline toggle | ✅ Live | ⭐⭐⭐ |
|
||||
| **Ride Mgmt** | Ride offers via Android native overlay | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Ride Mgmt** | Accept/reject with 15-second auto-close timer | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Ride Mgmt** | Navigate to pickup (turn-by-turn with TTS) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Ride Mgmt** | Arrive, begin ride, end ride flow | ✅ Live | ⭐⭐⭐ |
|
||||
| **Ride Mgmt** | Order speed request | ✅ Live | ⭐⭐⭐ |
|
||||
| **Ride Mgmt** | VIP order handling | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Navigation** | Turn-by-turn with route recalculation | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Navigation** | Polyline decoding in isolate | ✅ Live | ⭐⭐⭐ |
|
||||
| **Navigation** | Route matcher worker | ✅ Live | ⭐⭐⭐ |
|
||||
| **Navigation** | OSM/map view | ✅ Live | ⭐⭐⭐ |
|
||||
| **Financial** | Driver wallet (earnings, withdrawals) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Financial** | Weekly payment summary | ✅ Live | ⭐⭐⭐ |
|
||||
| **Financial** | Bank account management (Egypt) | ✅ Live | ⭐⭐⭐ |
|
||||
| **Financial** | Pay out screen | ✅ Live | ⭐⭐⭐ |
|
||||
| **Financial** | Transfer budget | ✅ Live | ⭐⭐⭐ |
|
||||
| **Financial** | Points/rewards for drivers | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Financial** | Payment history | ✅ Live | ⭐⭐⭐ |
|
||||
| **Financial** | Statistics dashboard (daily goals, level, charts) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Financial** | Commission (Kazan) with dynamic adjustment | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Gamification** | Challenges | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Gamification** | Leaderboard | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Gamification** | Referral center | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Gamification** | Streaks | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Gamification** | Behavior scoring | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Gamification** | Driver scorecard | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Background** | Android foreground service for GPS | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Background** | Background location updates | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Background** | Battery optimization (battery_plus, wakelock_plus) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Background** | Overlay window for ride offers | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Communication** | Voice/video calls (Agora) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Communication** | In-app chat | ✅ Live | ⭐⭐⭐ |
|
||||
| **Communication** | Text-to-speech (TTS) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Communication** | Voice recording | ✅ Live | ⭐⭐⭐ |
|
||||
| **Communication** | SOS connect | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Registration** | AI-powered document scanning (Azure OCR, OpenAI, Llama) | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Registration** | Face detection | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Registration** | Car registration (multiple cars) | ✅ Live | ⭐⭐⭐ |
|
||||
| **Registration** | License upload | ✅ Live | ⭐⭐⭐ |
|
||||
| **Registration** | Criminal document check | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Registration** | Syria-specific registration flow | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Registration** | Device compatibility check | ✅ Live | ⭐⭐⭐ |
|
||||
| **Registration** | AI-powered registration page | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Performance** | Battery monitoring (battery_plus) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Performance** | Wake lock (wakelock_plus) | ✅ Live | ⭐⭐⭐ |
|
||||
| **Performance** | Foreground service | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Performance** | Device performance testing | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Performance** | Device analysis | ✅ Live | ⭐⭐⭐ |
|
||||
| **Safety** | Jailbreak/root detection | ✅ Live | ⭐⭐⭐ |
|
||||
| **Safety** | SSL pinning | ✅ Live | ⭐⭐⭐ |
|
||||
| **Safety** | Device fingerprint | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Safety** | Scam detection system | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Safety** | Driver assurance program | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Profile** | Captain profile | ✅ Live | ⭐⭐⭐ |
|
||||
| **Profile** | Car management | ✅ Live | ⭐⭐⭐ |
|
||||
| **Profile** | Behavior page | ✅ Live | ⭐⭐⭐ |
|
||||
| **Profile** | Help center | ✅ Live | ⭐⭐⭐ |
|
||||
| **Profile** | Settings | ✅ Live | ⭐⭐⭐ |
|
||||
| **Profile** | Using app guide | ✅ Live | ⭐⭐⭐ |
|
||||
| **Profile** | Video tutorials | ✅ Live | ⭐⭐⭐ |
|
||||
|
||||
### Admin Features (siro_admin)
|
||||
|
||||
| Category | Feature | Status | Competitive Value |
|
||||
|----------|---------|--------|-------------------|
|
||||
| **Dashboard** | Main dashboard (ride stats, revenue) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Dashboard** | v2 Dashboard with advanced analytics | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Dashboard** | Advanced analytics page | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Dashboard** | Static data views | ✅ Live | ⭐⭐⭐ |
|
||||
| **Dashboard** | Driver notes | ✅ Live | ⭐⭐⭐ |
|
||||
| **Captain Mgmt** | Captain list with details | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Captain Mgmt** | Driver document review | ✅ Live | ⭐⭐⭐ |
|
||||
| **Captain Mgmt** | Driver tracker (live GPS monitoring) | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Captain Mgmt** | Register new captain | ✅ Live | ⭐⭐⭐ |
|
||||
| **Captain Mgmt** | Not active drivers | ✅ Live | ⭐⭐⭐ |
|
||||
| **Captain Mgmt** | Syrian driver management | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Captain Mgmt** | Driver gift check | ✅ Live | ⭐⭐⭐ |
|
||||
| **Captain Mgmt** | Driver scorecard (quality) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Captain Mgmt** | Blacklist management | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Passenger Mgmt** | Passenger list & details | ✅ Live | ⭐⭐⭐ |
|
||||
| **Passenger Mgmt** | Passenger form | ✅ Live | ⭐⭐⭐ |
|
||||
| **Ride Mgmt** | Ride list & lookup | ✅ Live | ⭐⭐⭐ |
|
||||
| **Ride Mgmt** | Ride monitor (live) | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Ride Mgmt** | Ride cancellation management | ✅ Live | ⭐⭐⭐ |
|
||||
| **Financial** | Financial dashboard v2 | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Financial** | Wallet management | ✅ Live | ⭐⭐⭐ |
|
||||
| **Financial** | Invoices (add, list) | ✅ Live | ⭐⭐⭐ |
|
||||
| **Financial** | Payout management (bank_account) | ✅ Live | ⭐⭐⭐ |
|
||||
| **Pricing** | Kazan (percentage commission) editor | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Pricing** | Auto-adapt pricing | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Pricing** | Pricing engine integration | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Marketing** | Heatmaps (demand/surge) | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Marketing** | Marketing page | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Marketing** | Social intelligence (Telegram scraping, etc.) | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Marketing** | Campaign management | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Marketing** | What-if simulator | ✅ Live | ⭐⭐⭐⭐⭐ |
|
||||
| **Promotions** | Promo management page | ✅ Live | ⭐⭐⭐ |
|
||||
| **Promotions** | Promo code CRUD | ✅ Live | ⭐⭐⭐ |
|
||||
| **Security** | Audit logs | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Security** | Security monitoring v2 | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Security** | Server monitoring | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Security** | Encrypt/decrypt tools | ✅ Live | ⭐⭐⭐ |
|
||||
| **Staff** | Add staff | ✅ Live | ⭐⭐⭐ |
|
||||
| **Staff** | Pending admins | ✅ Live | ⭐⭐⭐ |
|
||||
| **Staff** | Employee management | ✅ Live | ⭐⭐⭐ |
|
||||
| **Complaints** | Complaint list & resolution | ✅ Live | ⭐⭐⭐ |
|
||||
| **Quality** | Driver scorecards | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Quality** | Blacklist management | ✅ Live | ⭐⭐⭐ |
|
||||
| **Server** | Live server monitoring | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Server** | Error viewing | ✅ Live | ⭐⭐⭐ |
|
||||
| **Other** | Geofence management | ✅ Live | ⭐⭐⭐⭐ |
|
||||
| **Other** | Facebook integration | ✅ Live | ⭐⭐⭐ |
|
||||
| **Other** | WhatsApp messaging | ✅ Live | ⭐⭐⭐ |
|
||||
|
||||
---
|
||||
|
||||
## 4. Competitive Features Deep Dive
|
||||
|
||||
### 4.1 Twelve Vehicle Types — Industry-Leading Variety
|
||||
Siro offers **12 distinct vehicle types**, more than Uber (5), Careem (6), or Bolt (4):
|
||||
|
||||
| Type | Code | Use Case | Competitor Equivalent |
|
||||
|------|------|----------|----------------------|
|
||||
| Speed | Speed | Standard rides | UberX, Careem Go |
|
||||
| Comfort | Comfort | Premium rides | Uber Comfort, Careem Premium |
|
||||
| Family | Family | Large groups | UberXL, Careem Max |
|
||||
| Delivery | Delivery | Package delivery | Uber Connect, Careem NOW |
|
||||
| Free/Blash | Blash | Economy rides | Uber Moto (some markets) |
|
||||
| Late | Late | Off-peak discounts | N/A — unique |
|
||||
| Heavy | Heavy | Cargo transport | N/A — unique |
|
||||
| Nature | Nature | Scenic/intercity | N/A — unique |
|
||||
| Electric | Electric | Eco-friendly | Uber Green, Careem Eco |
|
||||
| Pink Bike | PinkBike | Quick motorcycle | Uber Moto, Careem Bike |
|
||||
| Van | Van | Minibus groups | UberXL, Careem Bus |
|
||||
| **Female Driver** | **FemalDriver** | **Women-only** | **Careem (limited)** |
|
||||
|
||||
**Competitive Moat**: The Female Driver and Heavy/Nature categories are rare in the region. The variety allows market segmentation and niche targeting.
|
||||
|
||||
### 4.2 Female Driver Option — Women-Only Service
|
||||
- Dedicated car type for female drivers serving female passengers
|
||||
- Addresses cultural sensitivity in the Middle East market
|
||||
- **Competitor comparison**: Careem offers it in some markets, Uber does not in this region
|
||||
|
||||
### 4.3 Mishwari (Multi-Point Trip) — Up to 5 Waypoints
|
||||
- Passengers can add up to 5 stops in a single trip
|
||||
- Dynamic pricing adjusts per segment
|
||||
- **Unique**: No direct equivalent in regional competitors
|
||||
|
||||
### 4.4 Native Android Overlay (TripOverlayPlugin)
|
||||
- Shows ride offers in a floating window above ALL apps
|
||||
- Works even when phone is locked
|
||||
- 15-second countdown timer embedded in overlay
|
||||
- **Unique**: No competitor offers this; even the phone being locked won't miss a ride
|
||||
|
||||
### 4.5 AI-Powered Document Scanning (3 AI Engines)
|
||||
- **Azure OCR**: Text extraction from documents
|
||||
- **OpenAI GPT**: Data understanding and validation
|
||||
- **Llama AI**: Fallback/alternative model
|
||||
- Reduces driver registration from days to minutes
|
||||
- **Competitive advantage**: Most competitors use basic OCR or manual verification
|
||||
|
||||
### 4.6 Dynamic Commission System (Kazan)
|
||||
- Per-country, per-city, per-vehicle-type commission rates
|
||||
- Auto-adjusted by AI based on competitor activity
|
||||
- 15-30% reduction in high-competition surge zones
|
||||
- **Transparent**: Driver sees commission before accepting ride
|
||||
|
||||
### 4.7 Competitive Pricing Intelligence (Node.js Engine)
|
||||
- Statistical analysis: MAD (Mean Absolute Deviation), K-Means clustering, regression
|
||||
- Scrapes competitor prices via Android Bot
|
||||
- Real-time price comparison displayed to passengers
|
||||
- **Unique**: Full competitive intelligence pipeline
|
||||
|
||||
### 4.8 Dual WebSocket Architecture
|
||||
- **Driver Socket** (port 2021): Driver location streaming, ride offers
|
||||
- **Passenger Socket** (port 3031): Ride requests, driver tracking
|
||||
- Polling fallback when WebSocket disconnects
|
||||
- **Architecture**: Prevents bottleneck — driver and passenger traffic isolated
|
||||
|
||||
### 4.9 iOS Live Activities
|
||||
- Ride progress displayed on iPhone lock screen
|
||||
- Real-time updates: driver arrival, ETA, ride status
|
||||
- **Unique**: Rare in regional ride-hailing apps
|
||||
|
||||
### 4.10 Gamification System
|
||||
- **4 Levels**: Bronze → Silver → Gold → Diamond (1-5% commission reduction)
|
||||
- **8 Achievements**: First ride, 5-star, 10/50/100/500 rides, 7/30-day streaks, 5 referrals
|
||||
- **Challenges**: Daily (5/10 rides, target earnings), Weekly (30 rides, target earnings, 20h work)
|
||||
- **Leaderboard**: Podium for top 3 drivers
|
||||
- **Behavior Scoring**: Speed, hard brakes, overall behavior score
|
||||
|
||||
### 4.11 Marketing Engine (AI-Powered)
|
||||
- **cron_auto_marketing_pusher.php**: AI-generated promotional messages based on competitor prices
|
||||
- **cron_passenger_reengagement.php**: Re-engagement for inactive passengers (3+ days)
|
||||
- **cron_silent_push_inactive.php**: Silent push to wake app and sync location
|
||||
- **cron_ai_engine.php**: Smart pricing module — reverse-engineers competitor pricing
|
||||
- **cron_kazan_adjuster.php**: Auto-adjusts commissions based on competitor surge zones
|
||||
- **cron_gemini_advisor.php**: Weekly strategic analysis of competitor pricing formulas
|
||||
- **cron_predictive_demand.php**: Demand forecasting from historical patterns
|
||||
- **cron_seasonal_pricing.php**: Seasonal and holiday pricing adjustment
|
||||
- **cron_surge_opportunity.php**: Identifies surge pricing opportunities
|
||||
- **Content Pipeline**: AI script writing → ElevenLabs voice → Creatomate/HeyGen video
|
||||
|
||||
### 4.12 Scam Detection System (ride/driver_scam/)
|
||||
- Dedicated module for detecting fraudulent driver behavior
|
||||
- Pattern analysis and anomaly detection
|
||||
- **Competitive advantage**: Rare in regional platforms
|
||||
|
||||
### 4.13 Driver Behavior Scoring
|
||||
- Speed monitoring
|
||||
- Hard brake detection
|
||||
- Overall behavior score
|
||||
- Used for quality control and gamification
|
||||
|
||||
### 4.14 Predictive Demand & Heatmaps
|
||||
- Real-time heatmap generation (`heatmap_live.json`, `heatmap.html`)
|
||||
- Predictive demand zones via cron job
|
||||
- Helps drivers find high-demand areas
|
||||
|
||||
### 4.15 Multi-Region Support (3 Countries)
|
||||
- **Syria**: Live with ~1,200 drivers, ~1,800 riders — unique market (no Uber/Careem due to sanctions)
|
||||
- **Jordan**: Live with ~800 drivers, ~700 riders
|
||||
- **Egypt**: Ready to launch with Egypt-specific configs
|
||||
- Each country has: dedicated server, separate database, local payment methods, specific pricing
|
||||
|
||||
### 4.16 Custom Map (Siro Maps / Map SaaS)
|
||||
- Proprietary mapping solution — **not dependent on Google Maps**
|
||||
- Updates every ~10 days at $0 cost
|
||||
- Custom routing, geocoding, place search
|
||||
- Saves $800-$30,000/month in Google Maps API costs
|
||||
- **Unique**: Most competitors rely entirely on Google Maps
|
||||
|
||||
### 4.17 Comprehensive Payment Coverage (7 Methods)
|
||||
| Method | Region | Notes |
|
||||
|--------|--------|-------|
|
||||
| Cash | All | Standard |
|
||||
| Visa/Mastercard (PayMob) | All | Credit/debit cards |
|
||||
| Internal Wallet | All | Balance system |
|
||||
| MTN Mobile Money | Syria | Mobile money |
|
||||
| Syriatel Mobile Money | Syria | Mobile money |
|
||||
| E-Cash | Egypt | Local e-payment |
|
||||
| Stripe | International | Global payments |
|
||||
| CLIQ | Egypt | Local e-payment |
|
||||
|
||||
### 4.18 Android Bot (Price Scraping)
|
||||
- Uses Android Accessibility Service to automate competitor apps
|
||||
- Supported apps: YallaGo, Zakinn, Tfadal, Careem, Uber, TaxiF, Jeeny
|
||||
- Task types: `get_price`, `check_promos`, `scrape_nearby_drivers`
|
||||
- HMAC-SHA256 authenticated
|
||||
- **Unique**: Full competitor price scraping at device level
|
||||
|
||||
### 4.19 Social Bot (Social Media Intelligence)
|
||||
- **Facebook**: Read comments, post AI-generated replies, autonomous scrolling
|
||||
- **Instagram**: Browse feeds, search, comment
|
||||
- **Telegram**: Channel scraping, content extraction
|
||||
- Uses Gemini AI for natural comment generation
|
||||
- **Account rotation** with cooldown to avoid bans
|
||||
- **SeenPostDatabase**: SHA-256 hash database to prevent reprocessing
|
||||
|
||||
### 4.20 Agora + WebRTC Voice/Video Calls
|
||||
- Full WebRTC implementation with STUN/TURN
|
||||
- ICE restart on connection failure
|
||||
- Echo cancellation, noise suppression, auto gain control
|
||||
- 120-second call limit
|
||||
- Signaling server: `wss://calls.intaleqapp.com/ws`
|
||||
|
||||
---
|
||||
|
||||
## 5. Battery & Performance Optimization
|
||||
|
||||
### 5.1 Adaptive GPS Polling
|
||||
|
||||
| Parameter | Normal Mode | Power-Save Mode (≤20%) |
|
||||
|-----------|-------------|------------------------|
|
||||
| GPS interval | 5 seconds | 10 seconds |
|
||||
| Distance filter | 10 meters | 20 meters |
|
||||
| Record timer | 3 seconds | 10 seconds |
|
||||
| Upload batch | 2 minutes | 5 minutes |
|
||||
| Battery trigger | — | Enter at 20%, exit at 25% |
|
||||
|
||||
### 5.2 Battery-Saving Techniques
|
||||
|
||||
| Technique | Description | Impact |
|
||||
|-----------|-------------|--------|
|
||||
| Movement-based recording | Only records if moved >10m AND speed >0.5 m/s OR 60s elapsed | Prevents stationary recording |
|
||||
| Heartbeat skip | Skips socket heartbeat when GPS stream is active | Prevents redundant emissions |
|
||||
| Batch upload | Uploads location in batches every 2-5 min (not per-location HTTP) | Major network battery savings |
|
||||
| Background service = socket only | Architectural rule: no GPS in background service | Eliminates duplicate GPS listeners |
|
||||
| Low priority notifications | Background service uses Importance.low | Minimal battery from notifications |
|
||||
| Geofencing (hardware-level) | Uses native GeofencingApi (Android) / CLRegion (iOS) | Hardware-efficient vs continuous GPS |
|
||||
| iOS optimization | iOS does NOT run background service | Saves iOS battery |
|
||||
| Buffer limit (500 entries) | Prevents memory buildup | Stable memory usage |
|
||||
|
||||
### 5.3 Performance Optimization
|
||||
|
||||
| Technique | Location | Benefit |
|
||||
|-----------|----------|---------|
|
||||
| GetX lazyPut with fenix | `app_bindings.dart` | Heavy controllers loaded on demand |
|
||||
| Image compression (70%, 1024x1024) | `upload_image.dart` | Reduces upload size & bandwidth |
|
||||
| Map icon resize (120x120 in isolate) | `map_engine_controller.dart` | Reduces GPU memory pressure |
|
||||
| Route response caching | `map_driver_controller.dart` | Avoids redundant API calls |
|
||||
| Statistics caching (3h expiry) | `statistics_controller.dart` | Reduces network calls |
|
||||
| Video list caching | `video_controller.dart` | Instant load after first fetch |
|
||||
| Ride list cache (5s) | `ride_available_controller.dart` | Prevents rapid re-fetching |
|
||||
| Error debouncing (1 min) | `crud.dart` | Suppresses repetitive errors |
|
||||
| Connectivity check before requests | `net_guard.dart` | Prevents failed network calls |
|
||||
| Socket reconnection with backoff | Both socket controllers | Efficient reconnection |
|
||||
| Offline map caching (10km radius) | `offline_map_service.dart` | Reduces tile downloads |
|
||||
| Device tier classification | `device_tier.dart`, `device_performance.dart` | Adjusts features for low-end devices |
|
||||
| Map zoom reduction on low-end | `google_map_passenger_widget.dart` | 14.5 vs 15 zoom on low-perf devices |
|
||||
| WakeLock + hardware acceleration | AndroidManifest | Keeps app responsive |
|
||||
|
||||
### 5.4 Device Tier Classification
|
||||
|
||||
| Tier | Criteria | Behavior |
|
||||
|------|----------|----------|
|
||||
| **Low** | Score ≥ 6 (old SDK, few cores, many ABIs, emulator) | Reduced map quality, fewer animations |
|
||||
| **Mid** | Score ≥ 3 | Standard experience |
|
||||
| **High** | Score < 3; or whitelisted flagship models (S21+, Pixel 6+, etc.) | Full features, high-quality maps |
|
||||
|
||||
**Detection factors**: Android SDK version, CPU core count, supported ABIs, RAM (3GB threshold), processor blacklist (MT65xx, MT6735, SC77xx)
|
||||
|
||||
### 5.5 Weaknesses & Recommendations
|
||||
|
||||
| Issue | Current State | Recommendation |
|
||||
|-------|--------------|----------------|
|
||||
| **WakeLock always on** | Enabled at startup, never disabled | Enable only during active ride |
|
||||
| **GPS accuracy = navigation always** | Highest accuracy even in power-save | Use `LocationAccuracy.high` in power-save mode |
|
||||
| **No speed-based GPS adaptation** | Same polling regardless of speed | Pause GPS when speed = 0 (stopped) |
|
||||
| **No Doze mode handling** | No special Android Doze handling | Implement doze-optimized location requests |
|
||||
| **App size** | Large due to Flutter + many packages | Use Android App Bundle, remove unused deps |
|
||||
| **Startup time** | Wakelock + Firebase + Location slow startup | Defer non-critical init after splash |
|
||||
|
||||
---
|
||||
|
||||
## 6. Audio & Music Features
|
||||
|
||||
### 6.1 Current Audio Capabilities
|
||||
|
||||
| Feature | Package | Purpose | Status |
|
||||
|---------|---------|---------|--------|
|
||||
| Text-to-Speech (TTS) | `flutter_tts` | Navigation voice guidance, accessibility | ✅ |
|
||||
| Sound effects | `just_audio` | Ride request alerts, notifications | ✅ |
|
||||
| Voice/Video calls | `flutter_webrtc`, Agora | Driver-passenger communication | ✅ |
|
||||
| Audio recording | `record` v6 | Trip voice recording (safety) | ✅ |
|
||||
| Audio upload | `upload_audio.php` | Upload recordings to server | ✅ |
|
||||
|
||||
### 6.2 TTS Features (Most Extensive Audio Feature)
|
||||
|
||||
**Driver App TTS Usage:**
|
||||
- Turn-by-turn navigation voice guidance
|
||||
- Ride status announcements
|
||||
- Destination descriptions
|
||||
- AI document verification voice prompts
|
||||
- Contact us info reading
|
||||
- **Mute button** with `isSpeaking` observable
|
||||
|
||||
**Rider App TTS Usage:**
|
||||
- Dialog text reading for accessibility
|
||||
- Car/ride info voiceover
|
||||
- Language-auto-detection with device fallback
|
||||
|
||||
### 6.3 Sound Assets Inventory
|
||||
|
||||
**Rider App:**
|
||||
| File | Purpose |
|
||||
|------|---------|
|
||||
| `start.wav` | Ringtone for voice calls |
|
||||
| `promo.wav`, `ding.wav`, `tone2.wav` | Notifications |
|
||||
| `cancel.wav` | Cancel/decline sound |
|
||||
| `tone1.mp3` | Notification tone |
|
||||
|
||||
**Driver App:**
|
||||
| File | Purpose |
|
||||
|------|---------|
|
||||
| `order.mp3` | New ride request alert (looped) |
|
||||
| `order1.wav` | Secondary order alert |
|
||||
| `aggrement.wav` | Agreement/consent confirmation |
|
||||
| `alert.wav` | Generic alert |
|
||||
| `iphone_ringtone.wav` | iPhone-style ringtone |
|
||||
|
||||
### 6.4 Voice Call Architecture
|
||||
```
|
||||
VoiceCallController → WebRTC PeerConnection → SignalingService (wss://calls.intaleqapp.com/ws)
|
||||
→ PHP Backend (create_call_session.php)
|
||||
→ FCM notification to other party
|
||||
```
|
||||
- States: idle → dialing → ringing → connecting → active → ended
|
||||
- Features: mute, speaker toggle, 120s timer, ICE restart
|
||||
|
||||
### 6.5 Audio Recording
|
||||
- Codec: AAC-LC, 44.1kHz, 128kbps
|
||||
- Format: .m4a
|
||||
- File naming: `{YYYY-MM-DD}_{rideId}.m4a`
|
||||
- Playback with position tracking
|
||||
|
||||
### 6.6 ❗ Missing Audio/Music Features — Opportunities
|
||||
|
||||
| Missing Feature | Opportunity | Implementation Complexity |
|
||||
|----------------|-------------|--------------------------|
|
||||
| **In-cabin music streaming** | Spotify/Apple Music integration or Siro Radio | Medium |
|
||||
| **Music player UI** | Playlist, controls, volume | Medium |
|
||||
| **Podcasts/Audio content** | Educational content for drivers | Low |
|
||||
| **Siro Radio station** | In-app radio with ads (revenue source) | Medium |
|
||||
| **Voice commands** | "Hey Siro, navigate to..." | High |
|
||||
| **Sound zones** | Welcome/departure music for rides | Low |
|
||||
| **AI music curator** | Music based on passenger mood | High |
|
||||
| **Audio ads** | Sponsored audio content before rides | Medium |
|
||||
|
||||
---
|
||||
|
||||
## 7. New Competitive Features Proposals
|
||||
|
||||
### 7.1 Immediate Priority (Short-term — 1-3 months)
|
||||
|
||||
| # | Feature | Impact | Effort | Rationale |
|
||||
|---|---------|--------|--------|-----------|
|
||||
| 1 | **Carpool (Ride Sharing)** | 🟢 Very High | 3-4 weeks | Multiple passengers same direction share cost — huge demand in region |
|
||||
| 2 | **Scheduled Rides (حجوزات مسبقة)** | 🟢 Very High | 2-3 weeks | Book rides hours/days ahead — standard feature in Uber/Careem |
|
||||
| 3 | **Smart WakeLock** | 🟡 High | 1 week | Disable Wakelock when no active ride — saves significant battery |
|
||||
| 4 | **Safety Audio Recording (Auto)** | 🟡 High | 2-3 weeks | Auto-record ride audio, encrypt, upload — trust factor |
|
||||
|
||||
### 7.2 Medium-term (3-6 months)
|
||||
|
||||
| # | Feature | Impact | Effort | Rationale |
|
||||
|---|---------|--------|--------|-----------|
|
||||
| 5 | **Spotify/Apple Music Integration** | 🟢 Very High | 3-4 weeks | In-cabin music streaming — major differentiation |
|
||||
| 6 | **AI Customer Support Chatbot** | 🟢 Very High | 4-6 weeks | Reduce support costs by 70% |
|
||||
| 7 | **Split Fare (تقسيم الفاتورة)** | 🟡 High | 2 weeks | Send split request to co-passengers |
|
||||
| 8 | **Parcel Tracking (تتبع الطرود)** | 🟡 High | 3-4 weeks | Tracking number, status updates for delivery |
|
||||
| 9 | **Driver Dashboard (Real-time)** | 🟡 High | 2-3 weeks | Show best work times, high-demand areas, predicted earnings |
|
||||
| 10 | **Voice Assistant** | 🟡 High | 4-6 weeks | "Hey Siro, take me to..." — full voice control |
|
||||
|
||||
### 7.3 Long-term (6-12 months)
|
||||
|
||||
| # | Feature | Impact | Effort | Rationale |
|
||||
|---|---------|--------|--------|-----------|
|
||||
| 11 | **Siro Market (E-commerce)** | 🟢 Very High | 8-12 weeks | In-app marketplace with delivery — like Careem NOW |
|
||||
| 12 | **Driver Subscription Model** | 🟢 Very High | 4-6 weeks | Monthly subscription instead of commission — alternative revenue |
|
||||
| 13 | **Web Version for Riders** | 🟡 High | 4-6 weeks | Book rides from browser without app install |
|
||||
| 14 | **Dashcam Integration** | 🟡 High | 4-6 weeks | Connect driver dashcam, auto-upload ride video |
|
||||
| 15 | **Wear OS / Apple Watch** | 🟠 Medium | 3-4 weeks | Companion app for smartwatches |
|
||||
| 16 | **In-app Games (While Waiting)** | 🟠 Medium | 3-4 weeks | Lightweight games for passengers waiting for driver |
|
||||
| 17 | **Zone-based Dynamic Pricing** | 🟡 High | 2-3 weeks | Event-based pricing (concert, match, rain) |
|
||||
| 18 | **Siro Radio (Music + Ads)** | 🟠 Medium | 2-3 weeks | Revenue-generating audio content |
|
||||
|
||||
### 7.4 Feature Details — Top 5 Proposals
|
||||
|
||||
#### 1. 🚗 Carpool (مشاركة الرحلة)
|
||||
```
|
||||
Passenger A requests ride → System finds Passenger B (same direction)
|
||||
→ Split cost → Both pay less → Driver earns more per trip
|
||||
```
|
||||
- **Algorithm**: Route matching via GIS SPATIAL queries (already exists)
|
||||
- **UI**: Option "Carpool" as 13th ride type
|
||||
- **Pricing**: 30-40% cheaper for passengers, driver gets 120-130% of normal fare
|
||||
- **Revenue**: More trips per driver-hour, higher platform utilization
|
||||
|
||||
#### 2. 📅 Scheduled Rides (حجوزات مسبقة)
|
||||
```
|
||||
Passenger books ride for tomorrow 8 AM → System assigns driver 30 min before
|
||||
→ Automatic notification to both parties
|
||||
```
|
||||
- **Backend**: New `scheduled_rides` table + cron job for 30-min-before matching
|
||||
- **UI**: Date/time picker + "Schedule" button in ride request
|
||||
- **Differentiation**: Not available in any regional competitor
|
||||
|
||||
#### 3. 🎵 Spotify/Apple Music Integration
|
||||
```
|
||||
Passenger connects Spotify account → Controls music during ride
|
||||
→ Driver's car speakers play passenger's playlist
|
||||
```
|
||||
- **Integration**: Spotify SDK + Apple MusicKit
|
||||
- **UI**: Music controls in ride screen (play/pause/skip/volume)
|
||||
- **Revenue**: Affiliate revenue from premium referrals + ad revenue
|
||||
|
||||
#### 4. 🤖 AI Customer Support
|
||||
```
|
||||
Passenger types issue → AI analyzes → Auto-resolve 70% of cases
|
||||
→ Escalate to human only for complex issues
|
||||
```
|
||||
- **Tech**: OpenAI GPT fine-tuned on Siro's FAQ and support history
|
||||
- **Integration**: Chat UI already exists — plug AI into existing chat system
|
||||
- **Savings**: ~70% reduction in support staff costs
|
||||
|
||||
#### 5. 🔋 Smart WakeLock Optimization
|
||||
```dart
|
||||
// Current: WakelockPlus.enable() at startup (never disabled)
|
||||
// Proposed:
|
||||
if (rideState == RideState.inProgress || rideState == RideState.searching) {
|
||||
WakelockPlus.enable(); // Keep awake during active ride
|
||||
} else {
|
||||
WakelockPlus.disable(); // Allow sleep when idle
|
||||
}
|
||||
```
|
||||
- **Impact**: 15-30% battery improvement during idle periods
|
||||
- **Implementation**: 1 week, minimal risk
|
||||
|
||||
---
|
||||
|
||||
## 8. Competitor Comparison
|
||||
|
||||
### 8.1 Feature Comparison Matrix
|
||||
|
||||
| Feature | Siro (سيرو) | Uber | Careem | Bolt | YallaGo |
|
||||
|---------|-------------|------|--------|------|---------|
|
||||
| **Vehicle Types** | **12** | 5 | 6 | 4 | 3 |
|
||||
| **Female Driver** | ✅ Yes | ❌ No (region) | ✅ Yes | ❌ No | ❌ No |
|
||||
| **Multi-point trips** | ✅ (5 waypoints) | ✅ (3) | ✅ (2) | ❌ | ❌ |
|
||||
| **Local Payments** | **7 methods** | 4 | 5 | 3 | 2 |
|
||||
| **Android Overlay** | **✅ Unique** | ❌ | ❌ | ❌ | ❌ |
|
||||
| **iOS Live Activity** | ✅ | ❌ | ❌ | ❌ | ❌ |
|
||||
| **AI Document Scan** | ✅ 3 engines | ❌ Basic | ❌ Basic | ❌ | ❌ |
|
||||
| **Competitor Pricing** | **✅ Real-time** | ❌ | ❌ | ❌ | ❌ |
|
||||
| **Gamification** | ✅ Full system | ❌ | ❌ Limited | ❌ | ❌ |
|
||||
| **Admin Panel** | **✅ 15+ modules** | ❌ Limited | ❌ Limited | ❌ | ❌ |
|
||||
| **Custom Maps** | **✅ Siro Maps** | ❌ Google | ❌ Google | ❌ Google | ❌ Google |
|
||||
| **Social Bot** | **✅ Unique** | ❌ | ❌ | ❌ | ❌ |
|
||||
| **Price Bot** | **✅ Unique** | ❌ | ❌ | ❌ | ❌ |
|
||||
| **Marketing Engine** | **✅ AI-powered** | ❌ | ❌ | ❌ | ❌ |
|
||||
| **Scam Detection** | ✅ Dedicated | ✅ Basic | ❌ | ❌ | ❌ |
|
||||
| **Multi-region** | 3 countries | Global | Regional | Global | 1 country |
|
||||
| **Scheduled Rides** | ❌ Missing | ✅ | ✅ | ✅ | ❌ |
|
||||
| **Carpool** | ❌ Missing | ✅ UberPool | ✅ Careem Carpool | ✅ | ❌ |
|
||||
| **Music Streaming** | ❌ Missing | ✅ (Spotify) | ❌ | ❌ | ❌ |
|
||||
|
||||
### 8.2 Competitive Advantages Summary
|
||||
|
||||
| Advantage | Siro Strength | Competitor Weakness |
|
||||
|-----------|--------------|-------------------|
|
||||
| More vehicle types (12) | Niche coverage (Heavy, Nature, Female) | Limited to standard types |
|
||||
| Local payment methods | Mobile money (MTN, Syriatel, E-Cash) | Limited to cards/cash |
|
||||
| Full admin panel | 15+ management modules | Basic or no admin tools |
|
||||
| AI-powered registration | 3 AI engines, minutes vs days | Manual or basic OCR |
|
||||
| Android Overlay | Never miss a ride offer | Standard notification only |
|
||||
| Custom maps (Siro Maps) | $0 map cost, no Google dependency | $800-$30k/mo Google Maps cost |
|
||||
| Competitor intelligence | Real-time price scraping | Blind to market |
|
||||
| Marketing automation | AI campaigns, re-engagement | Manual marketing |
|
||||
| Scam detection | Dedicated module | Reactive, not proactive |
|
||||
| Gamification | Driver retention + performance | High churn, no incentives |
|
||||
|
||||
---
|
||||
|
||||
## 9. Innovation Scorecard
|
||||
|
||||
| Category | Score (1-10) | Notes |
|
||||
|----------|-------------|-------|
|
||||
| **Technical Architecture** | 9/10 | Dual WebSocket, GIS SPATIAL, hybrid Redis/MySQL search |
|
||||
| **Feature Completeness** | 9/10 | 200+ features across 4 apps |
|
||||
| **Battery Optimization** | 7/10 | Good adaptive system, WakeLock needs improvement |
|
||||
| **Performance/Lightness** | 7/10 | GetX helps, app size and startup need work |
|
||||
| **Audio/Music** | 4/10 | Voice calls + TTS only — no music/entertainment |
|
||||
| **AI Integration** | 9/10 | 3 AI engines, marketing AI, pricing AI |
|
||||
| **Payment Coverage** | 9/10 | 7 methods including local mobile money |
|
||||
| **Admin/Monitoring** | 9/10 | 15+ modules, live monitoring, audit logs |
|
||||
| **Security** | 9/10 | JWT, fingerprint, SSL pinning, encryption |
|
||||
| **Scalability** | 8/10 | Multi-region, modular, ready for expansion |
|
||||
| **Competitor Intelligence** | 10/10 | Android bot + pricing engine — unique |
|
||||
| **Marketing Automation** | 9/10 | AI content, social bot, campaigns |
|
||||
| **Driver Experience** | 9/10 | Gamification, overlay, behavior scoring |
|
||||
| **Passenger Experience** | 8/10 | Great core features, missing carpool/scheduling |
|
||||
| **Innovation Uniqueness** | 9/10 | Custom maps, bots, overlay — truly unique in region |
|
||||
| **Overall** | **8.3/10** | Strong platform with clear improvement areas |
|
||||
|
||||
---
|
||||
|
||||
## 10. Strategic Recommendations
|
||||
|
||||
### Immediate Actions (Next 30 Days)
|
||||
1. ✅ **Add Carpool feature** — 13th ride type, route matching
|
||||
2. ✅ **Implement Smart WakeLock** — battery optimization quick win
|
||||
3. ✅ **Add Scheduled Rides** — basic booking table + cron job
|
||||
4. ✅ **Begin music integration research** — Spotify SDK evaluation
|
||||
|
||||
### Short-term (Quarter 1)
|
||||
1. 🎯 **Launch AI Customer Support chatbot**
|
||||
2. 🎯 **Implement Safety Audio Recording (auto)**
|
||||
3. 🎯 **Android App Bundle for size reduction**
|
||||
4. 🎯 **Music streaming MVP — Siro Radio**
|
||||
|
||||
### Medium-term (Quarter 2-3)
|
||||
1. 🚀 **Driver Subscription Model**
|
||||
2. 🚀 **Siro Market pilot**
|
||||
3. 🚀 **Voice Assistant integration**
|
||||
4. 🚀 **Web version for riders**
|
||||
|
||||
### Long-term (Year 2)
|
||||
1. 💎 **Wear OS / Apple Watch apps**
|
||||
2. 💎 **Dashcam integration**
|
||||
3. 💎 **AI-driven dynamic pricing 2.0**
|
||||
4. 💎 **Full entertainment system (music + podcasts + games)**
|
||||
|
||||
---
|
||||
|
||||
## Appendix: Competitive Moats Summary
|
||||
|
||||
| Moat | Type | Defensibility |
|
||||
|------|------|---------------|
|
||||
| Custom Maps (Siro Maps) | Technical | 🟢 Very High — years to replicate |
|
||||
| Android Bot + Social Bot | Technical + Data | 🟢 Very High — unique infrastructure |
|
||||
| AI Pricing Engine | Technical + Data | 🟢 Very High — trained on market data |
|
||||
| 12 Vehicle Types | Product | 🟡 Medium — copyable but time-consuming |
|
||||
| Multi-region Setup (3 countries) | Operational | 🟡 Medium — operational complexity |
|
||||
| Payment Integration (7 methods) | Partnership | 🟢 High — local partnerships hard to replicate |
|
||||
| Driver Gamification | Product | 🟡 Medium — copyable |
|
||||
| Admin Panel (15+ modules) | Product | 🟡 Medium — copyable |
|
||||
| Scam Detection | Technical + Data | 🟢 High — improves with data scale |
|
||||
| Marketing Engine | Technical + Data | 🟢 High — AI trained on market response |
|
||||
|
||||
---
|
||||
|
||||
> **Document Version:** 3.0
|
||||
> **Last Updated:** July 2026
|
||||
> **Classification:** Internal — Confidential
|
||||
> **Prepared for:** Siro Management & Investor Relations
|
||||
@@ -0,0 +1,490 @@
|
||||
# مقترحات الميزات التنافسية الجديدة — سيرو
|
||||
## New Competitive Features Proposal — Siro Platform
|
||||
|
||||
> **النسخة:** 2.0 | **تاريخ:** يوليو 2026 | **التصنيف:** استراتيجي — سري
|
||||
|
||||
---
|
||||
|
||||
## 📋 فهرس المحتويات
|
||||
1. [الملخص التنفيذي](#1-الملخص-التنفيذي)
|
||||
2. [الميزات المقترحة — حسب الأولوية](#2-الميزات-المقترحة--حسب-الأولوية)
|
||||
3. [الميزات المقترحة — بالتفصيل](#3-الميزات-المقترحة--بالتفصيل)
|
||||
4. [تحليل العائد على الاستثمار (ROI)](#4-تحليل-العائد-على-الاستثمار-roi)
|
||||
5. [خارطة الطريق](#5-خارطة-الطريق)
|
||||
6. [الملحق: استبيان السوق](#6-الملحق-استبيان-السوق)
|
||||
|
||||
---
|
||||
|
||||
## 1. الملخص التنفيذي
|
||||
|
||||
بناءً على التحليل الشامل لمنصة سيرو ودراسة السوق في سوريا، الأردن، ومصر، نقترح **18 ميزة تنافسية جديدة** مصنفة حسب الأولوية والأثر المتوقع.
|
||||
|
||||
### الميزات المقترحة (وجبة سريعة)
|
||||
|
||||
| # | الميزة | الفئة | الأثر | الجهد | الأولوية |
|
||||
|---|--------|-------|-------|-------|----------|
|
||||
| 1 | **🚗 Carpool (مشاركة الرحلة)** | نقل | 🟢 عال جداً | 3-4 أسابيع | 🥇 |
|
||||
| 2 | **📅 حجوزات مسبقة (Scheduled Rides)** | نقل | 🟢 عال جداً | 2-3 أسابيع | 🥇 |
|
||||
| 3 | **🤖 AI Customer Support** | خدمة | 🟢 عال جداً | 4-6 أسابيع | 🥇 |
|
||||
| 4 | **🔋 Smart WakeLock** | أداء | 🟡 عال | 1 أسبوع | 🥇 |
|
||||
| 5 | **🎵 Spotify/Apple Music** | ترفيه | 🟢 عال جداً | 3-4 أسابيع | 🥇 |
|
||||
| 6 | **🛡️ Safety Recording (تلقائي)** | أمان | 🟢 عال جداً | 2-3 أسابيع | 🥇 |
|
||||
| 7 | **👥 Split Fare (تقسيم الفاتورة)** | دفع | 🟡 عال | 2 أسبوع | 🥈 |
|
||||
| 8 | **📦 Parcel Tracking** | توصيل | 🟡 عال | 3-4 أسابيع | 🥈 |
|
||||
| 9 | **📊 Driver Dashboard (Real-time)** | سائق | 🟡 عال | 2-3 أسابيع | 🥈 |
|
||||
| 10 | **🗣️ Voice Assistant** | تجربة | 🟡 عال | 4-6 أسابيع | 🥈 |
|
||||
| 11 | **🏪 Siro Market** | تجارة | 🟢 عال جداً | 8-12 أسبوع | 🥉 |
|
||||
| 12 | **🚀 Driver Subscription Model** | إيرادات | 🟢 عال جداً | 4-6 أسابيع | 🥉 |
|
||||
| 13 | **🌐 Web Version للراكب** | وصول | 🟡 عال | 4-6 أسابيع | 🥉 |
|
||||
| 14 | **📹 Dashcam Integration** | أمان | 🟡 عال | 4-6 أسابيع | 🥉 |
|
||||
| 15 | **⌚ Wear OS / Apple Watch** | أجهزة | 🟠 متوسط | 3-4 أسابيع | 🥉 |
|
||||
| 16 | **🎮 In-app Games** | ترفيه | 🟠 متوسط | 3-4 أسابيع | 🥉 |
|
||||
| 17 | **🎯 Zone-based Dynamic Pricing** | تسعير | 🟡 عال | 2-3 أسابيع | 🥉 |
|
||||
| 18 | **📻 Siro Radio** | ترفيه | 🟠 متوسط | 2-3 أسابيع | 🥉 |
|
||||
|
||||
---
|
||||
|
||||
## 2. الميزات المقترحة — حسب الأولوية
|
||||
|
||||
### 🥇 الأولوية القصوى (شهر 1-2)
|
||||
الميزات التي تقدم أعلى قيمة بأقل جهد:
|
||||
|
||||
```
|
||||
1. Smart WakeLock → جهد: 1 أسبوع → أثر: بطارية أفضل 30%
|
||||
2. Scheduled Rides → جهد: 2-3 أسابيع → أثر: شريحة عملاء جديدة
|
||||
3. Safety Recording (Auto) → جهد: 2-3 أسابيع → أثر: ثقة + أمان
|
||||
4. Carpool (MVP) → جهد: 3-4 أسابيع → أثر: مضاعفة الرحلات
|
||||
5. AI Customer Support → جهد: 4-6 أسابيع → أثر: توفير 70% دعم
|
||||
```
|
||||
|
||||
### 🥈 الأولوية المتوسطة (شهر 3-4)
|
||||
```
|
||||
6. Spotify/Apple Music → جهد: 3-4 أسابيع → أثر: تمييز تنافسي
|
||||
7. Split Fare → جهد: 2 أسابيع → أثر: راحة راكب
|
||||
8. Parcel Tracking → جهد: 3-4 أسابيع → أثر: تحسين التوصيل
|
||||
9. Driver Dashboard → جهد: 2-3 أسابيع → أثر: إنتاجية سائق
|
||||
10. Voice Assistant (MVP) → جهد: 4-6 أسابيع → أثر: واجهة جديدة
|
||||
```
|
||||
|
||||
### 🥉 الأولوية البعيدة (شهر 5-8)
|
||||
```
|
||||
11. Siro Market → جهد: 8-12 أسبوع → أثر: منصة تجارة
|
||||
12. Driver Subscription → جهد: 4-6 أسابيع → أثر: إيراد بديل
|
||||
13. Web Version → جهد: 4-6 أسابيع → أثر: وصول أوسع
|
||||
14. Dashcam Integration → جهد: 4-6 أسابيع → أثر: أمان + توثيق
|
||||
15. Wear OS / Watch → جهد: 3-4 أسابيع → أثر: تميز تقني
|
||||
16. In-app Games → جهد: 3-4 أسابيع → أثر: تجربة انتظار
|
||||
17. Zone Dynamic Pricing → جهد: 2-3 أسابيع → أثر: إيرادات إضافية
|
||||
18. Siro Radio → جهد: 2-3 أسابيع → أثر: إيراد إعلاني
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. الميزات المقترحة — بالتفصيل
|
||||
|
||||
---
|
||||
|
||||
### الميزة 1: 🚗 Carpool — مشاركة الرحلة
|
||||
|
||||
#### الوصف
|
||||
نظام يسمح لراكبين أو أكثر في نفس الاتجاه بمشاركة الرحلة والتكلفة.
|
||||
|
||||
#### آلية العمل
|
||||
```
|
||||
1. الراكب A يطلب رحلة إلى وجهته
|
||||
2. النظام يبحث عن الراكب B (في نفس الاتجاه خلال 500m)
|
||||
3. يعرض خيار "Carpool" بتكلفة مخفضة 30-40%
|
||||
4. يقبل الراكبان → يتم احتساب مسار يمر بكليهما
|
||||
5. السائق يستلم 120-130% من أجر الرحلة العادية
|
||||
6. المنصة تربح 10-15% من كل راكب (ضعف الدخل)
|
||||
```
|
||||
|
||||
#### الفرق بين Carpool و Mishwari الحالي
|
||||
| الخاصية | Mishwari (موجود) | Carpool (مقترح) |
|
||||
|---------|-----------------|-----------------|
|
||||
| المستخدم | راكب واحد (5 نقاط) | راكبان مختلفان |
|
||||
| التكلفة | يدفع راكب واحد | يتقاسم الراكبان |
|
||||
| الربح للمنصة | عمولة رحلة واحدة | عمولتان (ضعف) |
|
||||
| الربح للسائق | أجر رحلة عادية | أجر أعلى 20-30% |
|
||||
|
||||
#### متطلبات التنفيذ
|
||||
- **الواجهة**: إضافة "Carpool" كنوع رحلة 13
|
||||
- **الخوارزمية**: مطابقة المسارات عبر GIS SPATIAL (موجود)
|
||||
- **التسعير**: نموذج تسعير خاص لـ Carpool
|
||||
- **التكامل**: WebSocket للبحث عن الراكب الثاني
|
||||
|
||||
#### العائد المتوقع
|
||||
| المؤشر | القيمة |
|
||||
|--------|--------|
|
||||
| زيادة عدد الرحلات لكل سائق | +40-60% |
|
||||
| توفير للراكب | 30-40% |
|
||||
| زيادة دخل المنصة لكل راكب | +80-100% (عمولتان) |
|
||||
| رضا السائقين | +25% |
|
||||
|
||||
---
|
||||
|
||||
### الميزة 2: 📅 حجوزات مسبقة (Scheduled Rides)
|
||||
|
||||
#### الوصف
|
||||
حجز رحلة مسبقاً (قبل ساعات أو أيام) مع تأكيد تلقائي.
|
||||
|
||||
#### آلية العمل
|
||||
```
|
||||
1. الراكب يختار "حجز مسبق"
|
||||
2. يحدد: التاريخ، الوقت، نقطة الانطلاق، الوجهة
|
||||
3. النظام يؤكد الحجز فوراً
|
||||
4. قبل 30 دقيقة من الموعد → يبحث النظام عن سائق
|
||||
5. السائق يؤكد → إشعار للراكب
|
||||
6. إذا لم يوجد سائق → إشعار وإلغاء مجاني
|
||||
```
|
||||
|
||||
#### المتطلبات التقنية
|
||||
| المكون | الوصف | الجهد |
|
||||
|--------|-------|-------|
|
||||
| جدول `scheduled_rides` | DB new table | يوم |
|
||||
| صفحة اختيار الوقت | Date/Time picker UI | 3 أيام |
|
||||
| Cron job | 30-min قبل الموعد | 2 يوم |
|
||||
| Matching algorithm | تعديل الموجود | 3 أيام |
|
||||
| Notifications | تأكيد + تذكير | يومين |
|
||||
|
||||
#### العائد المتوقع
|
||||
- فتح شريحة جديدة من الركاب (رحلات المطار، المواعيد)
|
||||
- زيادة ولاء الركاب النظاميين
|
||||
- تمييز عن المنافسين المحليين (YallaGo, Zakinn)
|
||||
|
||||
---
|
||||
|
||||
### الميزة 3: 🤖 AI Customer Support
|
||||
|
||||
#### الوصف
|
||||
شات بوت ذكي يجيب على 70% من استفسارات الركاب والسائقين تلقائياً.
|
||||
|
||||
#### آلية العمل
|
||||
```
|
||||
استفسار من المستخدم
|
||||
↓
|
||||
AI Bot (OpenAI GPT fine-tuned on Siro FAQ + history)
|
||||
↓
|
||||
┌──────────────────────┐
|
||||
│ مفهوم؟ │ ← إجابة فورية + زر "هل ساعدك؟"
|
||||
│ غير مفهوم أو معقد │ ← تحويل لفريق الدعم البشري
|
||||
└──────────────────────┘
|
||||
```
|
||||
|
||||
#### التحسينات المطلوبة على الكود الموجود
|
||||
```dart
|
||||
// الموجود: chat UI + PHP backend للدردشة
|
||||
// المطلوب إضافته:
|
||||
1. Endpoint: POST /api/support/ai-query
|
||||
2. AI prompt مع Siro-specific context
|
||||
3. Confidence scoring (إذا > 85% → إجابة تلقائية)
|
||||
4. Feedback: "هل حل هذا مشكلتك؟" ← تدريب مستمر للـ AI
|
||||
5. Escalation: تحويل تلقائي للدعم البشري
|
||||
```
|
||||
|
||||
#### التوفير المتوقع
|
||||
| المؤشر | القيمة |
|
||||
|--------|--------|
|
||||
| نسبة الأتمتة | 70% من الاستفسارات |
|
||||
| توفير في فريق الدعم | 50-70% |
|
||||
| وقت الرد للاستفسارات الآلية | < 3 ثوانٍ |
|
||||
| رضا المستخدمين | متوقع +15% |
|
||||
|
||||
---
|
||||
|
||||
### الميزة 4: 🔋 Smart WakeLock
|
||||
|
||||
#### الوصف
|
||||
تشغيل WakeLock فقط عند الحاجة (أثناء الرحلة النشطة) بدلاً من تشغيله الدائم.
|
||||
|
||||
#### التغيير على الكود الموجود
|
||||
```dart
|
||||
// ======== الوضع الحالي (مشكلة) ========
|
||||
// في main.dart (سطر 87):
|
||||
await WakelockPlus.enable(); // دائم — يستهلك بطارية
|
||||
|
||||
// ======== الوضع المقترح ========
|
||||
// في ride_lifecycle_controller.dart:
|
||||
class RideLifecycleController extends GetxController {
|
||||
RideState _currentState = RideState.noRide;
|
||||
|
||||
void onRideStateChanged(RideState newState) {
|
||||
switch (newState) {
|
||||
case RideState.searching:
|
||||
case RideState.driverApplied:
|
||||
case RideState.driverArrived:
|
||||
case RideState.inProgress:
|
||||
WakelockPlus.enable(); // تشغيل أثناء الرحلة
|
||||
break;
|
||||
case RideState.noRide:
|
||||
case RideState.cancelled:
|
||||
case RideState.finished:
|
||||
WakelockPlus.disable(); // إيقاف خارج الرحلة
|
||||
break;
|
||||
}
|
||||
_currentState = newState;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### التأثير على البطارية
|
||||
| الحالة | الوضع الحالي | الوضع المقترح | التوفير |
|
||||
|--------|--------------|---------------|---------|
|
||||
| خارج الرحلة (16 ساعة) | WakeLock دائم | WakeLock متوقف | 🔋 100% توفير |
|
||||
| أثناء الرحلة (8 ساعات) | WakeLock دائم | WakeLock دائم | 🔋 0% توفير |
|
||||
| **إجمالي اليوم** | 24 ساعة WakeLock | 8 ساعات WakeLock | **67% توفير** |
|
||||
|
||||
---
|
||||
|
||||
### الميزة 5: 🎵 Spotify/Apple Music Integration
|
||||
|
||||
#### الوصف
|
||||
السماح للراكب بالتحكم بالموسيقى أثناء الرحلة عبر ربط حساب Spotify.
|
||||
|
||||
#### آلية العمل
|
||||
```
|
||||
1. الراكب يربط حساب Spotify من الإعدادات
|
||||
2. أثناء الرحلة، تظهر أيقونة موسيقى
|
||||
3. الراكب يختار قائمة تشغيل أو أغنية
|
||||
4. الصوت يشتغل عبر سماعات السيارة (بلوتوث)
|
||||
5. السائق يتحكم بمستوى الصوت
|
||||
```
|
||||
|
||||
#### المكونات المطلوبة
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ MUSIC INTEGRATION │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ Passenger App: │
|
||||
│ ┌─────────────────────────────┐ │
|
||||
│ │ Spotify SDK / Apple MusicKit │ │
|
||||
│ │ Auth + Playback Controls │ │
|
||||
│ │ UI: Play/Pause/Skip/Volume │ │
|
||||
│ └─────────────┬───────────────┘ │
|
||||
│ │ │
|
||||
│ Driver App: │
|
||||
│ ┌─────────────▼───────────────┐ │
|
||||
│ │ Volume Control │ │
|
||||
│ │ Mute Button │ │
|
||||
│ └─────────────────────────────┘ │
|
||||
│ │
|
||||
│ Revenue: │
|
||||
│ - Spotify Premium referral (affiliate) │
|
||||
│ - تمايز عن المنافسين │
|
||||
└─────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الميزة 6: 🛡️ Safety Recording (تلقائي)
|
||||
|
||||
#### الوصف
|
||||
تسجيل تلقائي للصوت (وربما الفيديو لاحقاً) أثناء الرحلة مع رفع مشفر للخادم.
|
||||
|
||||
#### آلية العمل
|
||||
```
|
||||
1. عند بدء الرحلة → بدء التسجيل التلقائي
|
||||
2. تسجيل مستمر للصوت (AAC-LC 44.1kHz)
|
||||
3. تشفير التسجيل AES-256 قبل الرفع
|
||||
4. رفع إلى الخادم مع نهاية الرحلة
|
||||
5. متاح للراكب والسائق لمدة 48 ساعة
|
||||
6. يحذف تلقائياً بعد 48 ساعة (ما لم يُبلغ عن مشكلة)
|
||||
```
|
||||
|
||||
#### التحسينات على الكود الموجود
|
||||
```dart
|
||||
// AudioRecorderController موجود بالفعل — نحتاج:
|
||||
1. Auto-start عند ride.start
|
||||
2. Auto-stop عند ride.end
|
||||
3. Encryption قبل الرفع
|
||||
4. Upload عند انتهاء الرحلة
|
||||
5. UI indicator: ● Recording (أثناء التسجيل)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الميزة 7: 👥 Split Fare (تقسيم الفاتورة)
|
||||
|
||||
#### الوصف
|
||||
إرسال طلب تقسيم الفاتورة للراكبين الآخرين في نفس الرحلة.
|
||||
|
||||
```
|
||||
1. بعد انتهاء الرحلة → زر "تقسيم الفاتورة"
|
||||
2. اختيار جهات الاتصال (من التطبيق أو هاتف)
|
||||
3. إرسال رابط دفع لكل شخص
|
||||
4. كل شخص يدفع حصته عبر المحفظة
|
||||
5. السائق يستلم المبلغ كاملاً
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الميزة 8: 📦 Parcel Tracking (تتبع الطرود)
|
||||
|
||||
#### الوصف
|
||||
لخدمة Delivery، إضافة رقم تتبع وتحديثات حالة للطرد.
|
||||
|
||||
```
|
||||
1. المرسل يطلب Delivery
|
||||
2. يولد النظام رقم تتبع فريد
|
||||
3. تحديثات: تم الاستلام → في الطريق → تم التوصيل
|
||||
4. المرسل والمستلم يتلقون إشعارات
|
||||
5. إثبات استلام (صورة + توقيع)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الميزة 9: 📊 Driver Real-time Dashboard
|
||||
|
||||
#### الوصف
|
||||
لوحة قيادة ذكية للسائق تعرض أفضل أوقات العمل والمناطق.
|
||||
|
||||
```
|
||||
المحتوى:
|
||||
🕐 أفضل أوقات العمل (حسب التاريخ)
|
||||
📍 المناطق الأعلى طلباً (Heatmap محدث)
|
||||
💰 الأرباح المتوقعة (AI prediction)
|
||||
📈 مقارنة أداء مع السائقين الآخرين
|
||||
🎯 اقتراحات ذكية (اذهب إلى المنطقة X)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الميزة 10: 🗣️ Voice Assistant
|
||||
|
||||
#### الوصف
|
||||
مساعد صوتي متكامل للسائق والراكب.
|
||||
|
||||
```
|
||||
أمر صوتي ← Speech-to-Text ← NLP (معالجة) ← تنفيذ
|
||||
|
||||
أمثلة:
|
||||
- "خذني إلى شارع بغداد" → طلب رحلة
|
||||
- "كم ربحت اليوم؟" → عرض الإحصائيات
|
||||
- "اتصل بالراكب" → بدء مكالمة
|
||||
- "شبك واي فاي" → إيقاف استقبال الطلبات
|
||||
|
||||
التقنية: Speech-to-Text (Google/Apple) + NLP (OpenAI/llama)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الميزة 11: 🏪 Siro Market
|
||||
|
||||
#### الوصف
|
||||
سوق إلكتروني داخل التطبيق للمتاجر المحلية مع توصيل فوري.
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ SIRO MARKET │
|
||||
├─────────────────────────────────────┤
|
||||
│ │
|
||||
│ 🏪 متاجر: مواد غذائية، صيدليات، │
|
||||
│ إلكترونيات، ملابس │
|
||||
│ 🚚 توصيل: خلال 30-60 دقيقة │
|
||||
│ 💳 دفع: جميع طرق سيرو │
|
||||
│ ⭐ تقييم المتاجر + المنتجات │
|
||||
│ │
|
||||
│ يشبه: Careem NOW / Talabat │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### الميزة 12: 🚀 Driver Subscription Model
|
||||
|
||||
#### الوصف
|
||||
نموذج اشتراك شهري بديل عن العمولة.
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ خطط الاشتراك للسائقين │
|
||||
├────────────┬────────────┬───────────┤
|
||||
│ Basic │ Premium │ VIP │
|
||||
│ $29/شهر │ $79/شهر │ $199/شهر │
|
||||
│────────────┼────────────┼───────────┤
|
||||
│ عمولة 10% │ عمولة 5% │ عمولة 0% │
|
||||
│ دعم عادي │ دعم VIP │ أولوية │
|
||||
│ │ تقارير │ مدير حساب │
|
||||
└────────────┴────────────┴───────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. تحليل العائد على الاستثمار (ROI)
|
||||
|
||||
### 4.1 جدول المقارنة المالية
|
||||
|
||||
| الميزة | التكلفة المقدرة | الإيراد الشهري المتوقع | ROI (شهر) |
|
||||
|--------|-----------------|------------------------|-----------|
|
||||
| Carpool | $3,000-$5,000 | $2,000-$5,000 | 1-2 شهر |
|
||||
| Scheduled Rides | $2,000-$3,000 | $1,000-$3,000 | 1-3 شهر |
|
||||
| AI Support | $2,000-$4,000 | توفير $1,500-$3,000 | 1-3 شهر |
|
||||
| Smart WakeLock | $300-$500 | غير مباشر (تحسين) | فوري |
|
||||
| Spotify Music | $2,000-$4,000 | $500-$2,000 | 2-4 شهر |
|
||||
| Safety Recording | $1,000-$2,000 | غير مباشر (ثقة) | 3-6 شهر |
|
||||
| Siro Market | $8,000-$15,000 | $5,000-$15,000 | 1-3 شهر |
|
||||
| Subscription | $2,000-$3,000 | $3,000-$8,000 | 1 شهر |
|
||||
|
||||
### 4.2 أولويات ROI
|
||||
|
||||
```
|
||||
الأعلى عائداً:
|
||||
1. Driver Subscription → ROI فوري (شهر 1)
|
||||
2. Carpool → ROI 1-2 شهر
|
||||
3. AI Support → ROI 1-3 شهر (توفير)
|
||||
4. Scheduled Rides → ROI 1-3 شهر
|
||||
5. Siro Market → ROI 1-3 شهر (أعلى إيراد)
|
||||
6. Spotify Music → ROI 2-4 شهر
|
||||
7. Safety Recording → غير مباشر
|
||||
8. Smart WakeLock → غير مباشر
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. خارطة الطريق
|
||||
|
||||
```
|
||||
الشهر 1 الشهر 2 الشهر 3 الشهر 4
|
||||
────────────────────────────────────────────────────────────────────
|
||||
🔋 Smart WL 🎵 Spotify 📊 Driver Dash 🗣️ Voice Asst
|
||||
📅 Scheduled 🛡️ Safety Rec 👥 Split Fare ⌚ Watch App
|
||||
🤖 AI Support 🚗 Carpool 📦 Parcel Track 🚀 Subscription
|
||||
🏪 Siro Market
|
||||
|
||||
تحسينات سريعة ميزات تنافسية توسع + تكامل منصات جديدة
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. الملحق: استبيان السوق
|
||||
|
||||
### أسئلة لتوجيه الأولويات (يُجرى مع 100 مستخدم):
|
||||
|
||||
1. **أي ميزة تريدها في تطبيق النقل؟**
|
||||
- [ ] مشاركة الرحلة (Carpool)
|
||||
- [ ] حجز مسبق
|
||||
- [ ] موسيقى في السيارة
|
||||
- [ ] تقسيم الفاتورة
|
||||
|
||||
2. **هل ستدفع اشتراك شهري لتطبيق النقل؟**
|
||||
- [ ] نعم (بدون عمولة)
|
||||
- [ ] لا أفضل العمولة
|
||||
- [ ] ربما
|
||||
|
||||
3. **هل تثق بتسجيل الصوت التلقائي للرحلة؟**
|
||||
- [ ] نعم — يزيد الأمان
|
||||
- [ ] لا — قلق على الخصوصية
|
||||
- [ ] لا أعرف
|
||||
|
||||
4. **هل تستخدم Spotify أو Apple Music؟**
|
||||
- [ ] Spotify
|
||||
- [ ] Apple Music
|
||||
- [ ] لا أستخدم
|
||||
- [ ] YouTube Music
|
||||
|
||||
---
|
||||
|
||||
> **تم إعداد هذا التقرير بناءً على تحليل الكود المصدري الكامل لمنصة سيرو ودراسة السوق في سوريا، الأردن، ومصر.**
|
||||
>
|
||||
> **النسخة:** 2.0 | **تاريخ:** يوليو 2026 | **التصنيف:** استراتيجي — سري
|
||||
@@ -0,0 +1,843 @@
|
||||
# منصة سيرو — الوضع الحالي والميزات الموجودة
|
||||
## Siro Platform — Current State & Existing Features
|
||||
|
||||
> **التصنيف:** سري | داخلي | للمستثمرين
|
||||
> **آخر تحديث:** يوليو 2026
|
||||
> **النسخة:** v1.0
|
||||
> **الغرض:** عرض الحالة الحالية للمنصة - الميزات الموجودة الآن
|
||||
|
||||
---
|
||||
|
||||
## جدول المحتويات
|
||||
|
||||
1. [نظرة عامة سريعة](#نظرة-عامة-سريعة)
|
||||
2. [على ماذا يعتمد التطبيق تقنياً](#على-ماذا-يعتمد-التطبيق-تقنياً)
|
||||
3. [الميزات الموجودة حالياً](#الميزات-الموجودة-حالياً)
|
||||
4. [تطبيقات المستخدمين](#تطبيقات-المستخدمين)
|
||||
5. [الخوادم والأنظمة](#الخوادم-والأنظمة)
|
||||
6. [الدوافع والروبوتات](#الدوافع-والروبوتات)
|
||||
7. [أنظمة الأمان](#أنظمة-الأمان)
|
||||
8. [التكاملات الخارجية](#التكاملات-الخارجية)
|
||||
|
||||
---
|
||||
|
||||
## الملخص التنفيذي
|
||||
|
||||
سيرو منصة نقل متكاملة وسيرة ذاتية تتميز بـ:
|
||||
|
||||
| المؤشر | القيمة |
|
||||
|-------|-------|
|
||||
| **دول التشغيل** | سوريا ✅ | الأردن ✅ | مصر 🚀 |
|
||||
| **السائقين النشطين** | 2,000+ |
|
||||
| **الركاب النشطين** | 2,500+ |
|
||||
| **أنواع المركبات** | 12 نوع فريد |
|
||||
| **طرق الدفع المدعومة** | 7 خيارات محلية |
|
||||
| **محركات الذكاء الاصطناعي** | 3 (Azure OCR, OpenAI, Llama) |
|
||||
| **الروبوتات الذكية** | 2 (Android Bot + Social Bot) |
|
||||
| **معدل التوفير السنوي** | $500K+ (بدون Google Maps, SMS API, وغيرها) |
|
||||
|
||||
---
|
||||
|
||||
## الميزات التقنية الفريدة
|
||||
|
||||
### 1. 🗺️ خرائط مملوكة (Siro Maps / Map SaaS)
|
||||
**المشكلة الأصلية:**
|
||||
- Google Maps تكلف $800 - $30,000 شهرياً حسب عدد الطلبات
|
||||
- تعتمد على شركة خارجية (قد توقف الخدمة أي وقت)
|
||||
- قيود API وحدود استخدام
|
||||
|
||||
**الحل لدينا:**
|
||||
- ✅ خرائط مملوكة بالكامل من Siro
|
||||
- ✅ تحديث كل 10 أيام بـ **$0 تكلفة**
|
||||
- ✅ توجيه مخصص، البحث عن الأماكن، تشفير يدوي
|
||||
- ✅ استقلالية كاملة عن Google
|
||||
|
||||
**التوفير السنوي:**
|
||||
```
|
||||
$800-$30,000/شهر × 12 شهر = $10K - $360K / السنة
|
||||
✅ توفير متوسط: ~$150K سنوياً
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. 📱 نظام العروض الأصلي (Android Native Overlay)
|
||||
**المشكلة:**
|
||||
- التطبيقات العادية تستخدم إخطارات عادية (يمكن أن تغيبها)
|
||||
- إذا كان الهاتف مغلقاً أو التطبيق مأغلقاً → تفويت العرض
|
||||
|
||||
**الحل:**
|
||||
```dart
|
||||
class TripOverlayPlugin {
|
||||
// عرض عائم فوق جميع التطبيقات
|
||||
// يعمل حتى لو كان الهاتف مأغلقاً
|
||||
// عداد تنازلي 15 ثانية مدمج
|
||||
// قبول/رفض من العرض مباشرة
|
||||
}
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
- ✅ **لا تفويت عروض أبداً**
|
||||
- ✅ زيادة معدل قبول العروض بـ **35-40%**
|
||||
- ✅ تجربة فريدة لا تملكها أي تطبيق آخر في المنطقة
|
||||
|
||||
---
|
||||
|
||||
### 3. 🤖 ثلاث محركات ذكاء اصطناعي للمستندات
|
||||
**المشكلة:**
|
||||
- تسجيل السائق يستغرق **أيام** (التحقق اليدوي)
|
||||
- كل OCR قد يفشل أو يتطلب إعادة تقديم
|
||||
- تجربة سيئة للسائق الجديد
|
||||
|
||||
**الحل:**
|
||||
```
|
||||
مستند السائق (رخصة، تأمين، إلخ)
|
||||
↓
|
||||
┌────────────────────────────────────────┐
|
||||
│ Azure OCR → استخراج النصوص │
|
||||
│ OpenAI GPT → فهم البيانات والتحقق │
|
||||
│ Llama AI → بديل احتياطي/حل بديل │
|
||||
└────────────────────────────────────────┘
|
||||
↓
|
||||
✅ نتيجة موثوقة في **دقائق** (ليس أيام)
|
||||
```
|
||||
|
||||
**التوفير:**
|
||||
- ✅ **توفير 80% من وقت التحقق اليدوي**
|
||||
- ✅ زيادة عدد السائقين الجدد في الشهر بـ **3-5 مرات**
|
||||
|
||||
---
|
||||
|
||||
### 4. 📊 نظام التسعير الديناميكي الذكي (Kazan)
|
||||
**الميزة:**
|
||||
- عمولة **مختلفة لكل دولة، مدينة، نوع مركبة**
|
||||
- تعديل تلقائي بناءً على نشاط المنافسين
|
||||
- شفافية كاملة للسائق قبل قبول العرض
|
||||
|
||||
```
|
||||
السائق يرى:
|
||||
┌──────────────────────┐
|
||||
│ السعر: 500 ليرة │
|
||||
│ عمولتك (Kazan): 20% │
|
||||
│ صافي كسبك: 400 ليرة │
|
||||
└──────────────────────┘
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
- ✅ عمولات أقل في المناطق الكثيفة (15%) للحفاظ على السائقين
|
||||
- ✅ عمولات أعلى في المناطق القليلة (25%) لتحفيز التغطية
|
||||
- ✅ **سائقين أكثر رضى** = أداء أفضل
|
||||
|
||||
---
|
||||
|
||||
### 5. 🔍 محرك الذكاء الاصطناعي للتسعير (Pricing Engine)
|
||||
**التقنية:**
|
||||
- Node.js + TypeScript
|
||||
- تحليل إحصائي: MAD (Mean Absolute Deviation), K-Means Clustering
|
||||
- تحليل الانحدار
|
||||
|
||||
**الميزة الفريدة:**
|
||||
- ✅ **يشاهد أسعار المنافسين في الوقت الفعلي** (عبر Android Bot)
|
||||
- ✅ يقدم مقارنة أسعار للراكب
|
||||
- ✅ يعدل الأسعار تلقائياً للبقاء تنافسياً
|
||||
|
||||
**مثال:**
|
||||
```
|
||||
راكب يطلب رحلة → سيرو $12
|
||||
Uber $15 ❌ (أغلى)
|
||||
Careem $13 ❌ (أغلى قليلاً)
|
||||
|
||||
✅ سيرو هي الأرخص! → معدل تحويل أعلى
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6. 🚨 نظام كشف الاحتيال (Scam Detection)
|
||||
**المشكلة:**
|
||||
- سائقون وهميون يقبلون العروض ثم يلغونها
|
||||
- رحلات وهمية تكلف الجميع
|
||||
|
||||
**الحل:**
|
||||
```
|
||||
كل رحلة تُحلل بـ:
|
||||
├── سلوك السائق التاريخي
|
||||
├── نمط الملغيات
|
||||
├── الانحرافات عن المسار
|
||||
├── السرعة الغير طبيعية
|
||||
└── أنماط الاحتيال المعروفة
|
||||
|
||||
→ اكتشاف وسحب الحساب تلقائياً
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
- ✅ **رحلات آمنة موثوقة**
|
||||
- ✅ ثقة عالية من الركاب
|
||||
- ✅ راكبين أكثر = أرباح أعلى
|
||||
|
||||
---
|
||||
|
||||
### 7. 📡 بنية WebSocket المزدوجة
|
||||
**الميزة:**
|
||||
```
|
||||
Driver Socket (Port 2021) ← موقع السائق + عروض الرحلات
|
||||
(حركة مرور عالية من الأماكن)
|
||||
|
||||
Passenger Socket (Port 3031) ← طلبات الركاب + تتبع السائق
|
||||
(عمليات أقل تكراراً)
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
- ✅ **لا يوجد اختناق** (traffic bottleneck)
|
||||
- ✅ كل جانب له نقطة اتصال مخصصة
|
||||
- ✅ أداء أسرع وأكثر موثوقية
|
||||
|
||||
---
|
||||
|
||||
### 8. 🎮 نظام التغييرات (Gamification)
|
||||
**الفئات:**
|
||||
- 4 مستويات: برونز → فضة → ذهب → الماس
|
||||
- تقليل عمولة بـ **1-5%** حسب المستوى
|
||||
- إنجازات: أول رحلة، 100 رحلة، 7 أيام متتالية، إلخ
|
||||
- تحديات يومية وأسبوعية
|
||||
|
||||
**مثال:**
|
||||
```
|
||||
سائق عادي: 20% عمولة
|
||||
سائق ماس: 15% عمولة (توفير 5%)
|
||||
|
||||
على 100 رحلة × $10 = $1000:
|
||||
عادي: $200 عمولة
|
||||
ماس: $150 عمولة → توفير $50
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
- ✅ **احتفاظ السائقين أعلى**
|
||||
- ✅ أداء أفضل
|
||||
- ✅ رحلات أكثر
|
||||
|
||||
---
|
||||
|
||||
## نظم الأتمتة والذكاء الاصطناعي
|
||||
|
||||
### 1. 🤖 روبوت الأسعار (Android Bot)
|
||||
**المهمة:**
|
||||
- يفتح تطبيقات المنافسين تلقائياً
|
||||
- يحصل على الأسعار الحالية
|
||||
- يرسلها لمحرك التسعير
|
||||
|
||||
**التطبيقات المراقبة:**
|
||||
- Uber, Careem, Bolt, YallaGo, Zakinn, Tfadal, TaxiF
|
||||
|
||||
**التوفير:**
|
||||
- ✅ بدل دفع فريق متفرغ لمراقبة الأسعار يدوياً
|
||||
- ✅ تحديثات فورية 24/7
|
||||
|
||||
---
|
||||
|
||||
### 2. 📱 روبوت وسائل التواصل (Social Bot)
|
||||
**القدرات:**
|
||||
```
|
||||
Facebook:
|
||||
├── قراءة التعليقات
|
||||
├── الرد التلقائي (AI-generated)
|
||||
└── تصفح ذكي للمنشورات
|
||||
|
||||
Instagram:
|
||||
├── تصفح التغذيات
|
||||
├── البحث عن علامات تصنيف
|
||||
└── التعليق الذكي
|
||||
|
||||
Telegram:
|
||||
├── خدش قنوات (Scraping)
|
||||
└── استخراج المحتوى
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
- ✅ **تسويق مجاني 24/7**
|
||||
- ✅ توليد العملاء المحتملين بلا تكلفة
|
||||
- ✅ تفاعل سريع مع الجماهير
|
||||
|
||||
---
|
||||
|
||||
### 3. 📧 محرك التسويق الذكي (Marketing Engine)
|
||||
**المهام المؤتمتة:**
|
||||
|
||||
| الآلية | الغرض | التكرار |
|
||||
|--------|-------|---------|
|
||||
| `cron_auto_marketing_pusher.php` | إرسال رسائل ترويجية ذكية | كل ساعة |
|
||||
| `cron_passenger_reengagement.php` | إعادة تفعيل الركاب النائمين | يومي |
|
||||
| `cron_silent_push_inactive.php` | دفع صامت لتحديث الموقع | كل 4 ساعات |
|
||||
| `cron_ai_engine.php` | تحليل التسعير العكسي | كل ساعة |
|
||||
| `cron_kazan_adjuster.php` | ضبط العمولات | كل ساعة |
|
||||
| `cron_gemini_advisor.php` | تحليل استراتيجي أسبوعي | أسبوعياً |
|
||||
| `cron_predictive_demand.php` | التنبؤ بالطلب | كل 6 ساعات |
|
||||
| `cron_seasonal_pricing.php` | تسعير موسمي | يومياً |
|
||||
| `cron_surge_opportunity.php` | اكتشاف فرص الارتفاع | كل 15 دقيقة |
|
||||
|
||||
**مثال نتيجة:**
|
||||
```
|
||||
الراكب الغير نشط لمدة 3 أيام:
|
||||
AI يحلل: "هذا الراكب يحب الرحلات الليلية"
|
||||
يرسل: "عرض خاص: 20% خصم على الرحلات بعد 10 ليلاً"
|
||||
→ 30-40% معدل استجابة
|
||||
```
|
||||
|
||||
**التوفير:**
|
||||
- ✅ **بدل فريق تسويق كامل**
|
||||
- ✅ تسويق مخصص 24/7
|
||||
- ✅ ROI أعلى من التسويق اليدوي
|
||||
|
||||
---
|
||||
|
||||
### 4. 🎬 خط أنابيب المحتوى (Content Pipeline)
|
||||
**العملية:**
|
||||
```
|
||||
AI Script Writer
|
||||
↓ (يكتب نص ترويجي)
|
||||
ElevenLabs (صوت)
|
||||
↓ (ينطق النص)
|
||||
Creatomate / HeyGen (فيديو)
|
||||
↓ (ينتج فيديو احترافي)
|
||||
📱 إرسال تلقائي للركاب والسائقين
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
- ✅ **مئات مقاطع الفيديو بلا استوديو**
|
||||
- ✅ تكلفة = ركض كود فقط
|
||||
- ✅ توفير $5K-$20K شهرياً (إنتاج فيديو عادي)
|
||||
|
||||
---
|
||||
|
||||
### 5. 🔔 نظام الإشعارات الذكي
|
||||
**الإشعارات المؤتمتة:**
|
||||
|
||||
```
|
||||
الراكب ينتظر → تنبيهات كل 30 ثانية
|
||||
السائق بعيد 5 دقائق → "سائقك قادم خلال 5 دقائق"
|
||||
تأخر السائق عن الموعد → "عذراً، سائقك متأخر، سندرك بسرعة"
|
||||
انتهاء الرحلة → "قيّم رحلتك وربح نقاط!"
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
- ✅ تقليل إلغاءات الرحلات
|
||||
- ✅ تجربة أفضل
|
||||
- ✅ رحلات أكثر مكتملة
|
||||
|
||||
---
|
||||
|
||||
## التوفيرات المالية
|
||||
|
||||
### 📊 جدول التوفيرات السنوية الشاملة
|
||||
|
||||
| البند | التكلفة العادية | تكلفة سيرو | التوفير | النسبة |
|
||||
|------|-----------------|-----------|---------|--------|
|
||||
| **خدمة الخرائط** | $150K-$360K | $0 | $150K-$360K | **100%** |
|
||||
| **خدمة الرسائل (SMS/API)** | $50K-$100K | $5K* | $45K-$95K | **90%** |
|
||||
| **خدمة التسويق الآلي** | $80K-$150K** | $0 | $80K-$150K | **100%** |
|
||||
| **خدمة دعم العملاء*** | $120K-$200K | $20K**** | $100K-$180K | **80%** |
|
||||
| **أتمتة العمليات** | $60K-$100K | $0 | $60K-$100K | **100%** |
|
||||
| **جمع ذكاء المنافسين** | $50K-$80K | $0 | $50K-$80K | **100%** |
|
||||
|
||||
**الإجمالي السنوي:** **$485K - $965K توفير** ✅
|
||||
|
||||
---
|
||||
|
||||
### تفاصيل التوفيرات:
|
||||
|
||||
#### 1️⃣ خدمة الخرائط (-$150K-$360K سنوياً)
|
||||
```
|
||||
Google Maps API:
|
||||
- بطاقات في التطبيق: $7-$10 لكل 1000 طلب
|
||||
- إذا كان 1 مليون طلب شهرياً:
|
||||
1M × $0.00875 = $8,750/شهر = $105K/السنة
|
||||
|
||||
- بيانات المواقع: إضافية $50K-$100K
|
||||
- التوجيه: إضافية $30K-$50K
|
||||
|
||||
→ **الإجمالي: $185K-$255K/السنة**
|
||||
|
||||
سيرو Maps:
|
||||
- خادم مملوك
|
||||
- تحديث كل 10 أيام = دفعة واحدة
|
||||
- لا توجد رسوم استخدام API
|
||||
→ **التكلفة: $0/السنة**
|
||||
|
||||
🎯 التوفير: $150K-$360K/السنة (بناءً على الحجم)
|
||||
```
|
||||
|
||||
#### 2️⃣ خدمات الرسائل (-$45K-$95K سنوياً)
|
||||
```
|
||||
Twilio (SMS API):
|
||||
- $0.0075 لكل رسالة
|
||||
- 100K رسالة شهرياً = $750/الشهر = $9K/السنة
|
||||
- مع WhatsApp API: $14K-$25K/السنة
|
||||
|
||||
سيرو:
|
||||
- خادم رسائل مملوك
|
||||
- تكامل مع Twilio و WhatsApp
|
||||
- تخزين محلي مؤقت
|
||||
→ **تكلفة: $5K أو أقل**
|
||||
|
||||
🎯 التوفير: $45K-$95K/السنة
|
||||
```
|
||||
|
||||
#### 3️⃣ التسويق الآلي (-$80K-$150K سنوياً)
|
||||
```
|
||||
خدمات التسويق العادية:
|
||||
- HubSpot / ActiveCampaign: $2K-$5K/الشهر = $24K-$60K/السنة
|
||||
- فريق تسويق: 2-3 موظفين = $50K-$100K/السنة
|
||||
→ **الإجمالي: $74K-$160K/السنة**
|
||||
|
||||
سيرو:
|
||||
- Cron jobs مؤتمتة بالكامل
|
||||
- AI-powered campaigns
|
||||
- فريق تطوير موجود = $0 إضافي
|
||||
→ **التكلفة: $0/السنة**
|
||||
|
||||
🎯 التوفير: $80K-$150K/السنة
|
||||
```
|
||||
|
||||
#### 4️⃣ دعم العملاء (-$100K-$180K سنوياً)
|
||||
```
|
||||
دعم عادي:
|
||||
- 10-15 موظف دعم = $100K-$150K/السنة
|
||||
- نظام تذاكر (Zendesk): $5K-$10K/السنة
|
||||
→ **الإجمالي: $105K-$160K/السنة**
|
||||
|
||||
سيرو:
|
||||
- Chatbot AI (OpenAI fine-tuned)
|
||||
- يحل 70% من المشاكل تلقائياً
|
||||
- يحتاج 2-3 موظفين فقط للحالات المعقدة = $20K/السنة
|
||||
→ **التكلفة: $20K/السنة**
|
||||
|
||||
🎯 التوفير: $85K-$140K/السنة
|
||||
```
|
||||
|
||||
#### 5️⃣ جمع ذكاء المنافسين (-$50K-$80K سنوياً)
|
||||
```
|
||||
الطريقة التقليدية:
|
||||
- فريق يفتح التطبيقات يدوياً كل يوم
|
||||
- 2-3 موظفين متفرغين = $40K-$70K/السنة
|
||||
- تأخر في جمع البيانات
|
||||
|
||||
سيرو:
|
||||
- Android Bot يعمل 24/7
|
||||
- تحديثات كل 15 دقيقة
|
||||
- لا موظفين إضافيين = $0 تكلفة إضافية
|
||||
→ **التكلفة: $0 إضافية/السنة**
|
||||
|
||||
🎯 التوفير: $50K-$80K/السنة
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## الاستقلالية عن الأطراف الثالثة
|
||||
|
||||
### الخدمات المملوكة (In-House)
|
||||
|
||||
| الخدمة | المزود التقليدي | الحل بسيرو | الاستقلالية | التوفير |
|
||||
|--------|-----------------|-----------|------------|---------|
|
||||
| 🗺️ الخرائط | Google Maps | Siro Maps | ✅ 100% | $150K+ |
|
||||
| 📍 التوجيه | Google Routes | OSRM + Custom | ✅ 95% | $50K+ |
|
||||
| 📱 الرسائل | Twilio | خادم مملوك + Twilio | ✅ 80% | $45K+ |
|
||||
| 💬 Chat | Firebase | خادم PHP/WebSocket | ✅ 100% | $20K+ |
|
||||
| 📊 التحليلات | Mixpanel/Amplitude | MySQL + الرسم البياني المخصص | ✅ 100% | $30K+ |
|
||||
| 🔐 المصادقة | Firebase Auth | JWT مخصص | ✅ 100% | $10K+ |
|
||||
| 💾 التخزين | Firebase Storage | S3 + خادم مملوك | ✅ 80% | $25K+ |
|
||||
| 📺 الفيديو | AWS Elemental | ffmpeg + خادم مملوك | ✅ 90% | $40K+ |
|
||||
| 🎤 الصوت | Twilio Voice | Agora + WebRTC | ✅ 95% | $30K+ |
|
||||
|
||||
**النتيجة:**
|
||||
- ✅ **عدم الاعتماد على منصات خارجية** → حرية كاملة
|
||||
- ✅ **بيانات المستخدمين محلية تماماً** → أمان + خصوصية
|
||||
- ✅ **توفير $430K+** من رسوم الأطراف الثالثة
|
||||
|
||||
---
|
||||
|
||||
## ميزات السائق
|
||||
|
||||
### 🎯 نظام التحفيز الشامل
|
||||
|
||||
#### المكافآت الفورية:
|
||||
```
|
||||
كل 5 رحلات → 5 نقاط
|
||||
كل 50 ريال كسب → 1 نقة
|
||||
كل 50 تقييم 5 نجوم → 10 نقاط
|
||||
|
||||
النقاط:
|
||||
- 100 نقطة = خصم 10% من العمولة (الشهر التالي)
|
||||
- 250 نقطة = خصم 15% + بطل الشهر
|
||||
- 500 نقطة = ترقية إلى ماسي (عمولة 15% دائمة)
|
||||
```
|
||||
|
||||
#### التحديات اليومية:
|
||||
```
|
||||
- أكمل 5 رحلات → 50 ريال مكافأة
|
||||
- أكمل 10 رحلات → 100 ريال مكافأة
|
||||
- اكسب 500 ريال → 50 ريال مكافأة
|
||||
```
|
||||
|
||||
#### المتتاليات:
|
||||
```
|
||||
7 أيام متتالية = 200 ريال مكافأة
|
||||
14 يوم متتالي = 500 ريال مكافأة
|
||||
30 يوم متتالي = 1000 ريال مكافأة + بطاقة ماس
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 📊 لوحة معلومات السائق
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ إحصائياتك اليوم │
|
||||
├─────────────────────────────────────┤
|
||||
│ رحلات مكتملة: 15 │
|
||||
│ كسبك: 750 ريال │
|
||||
│ هدفك: 1000 ريال (اكسب 250 أخرى) │
|
||||
│ المتبقي من اليوم: 6 ساعات │
|
||||
├─────────────────────────────────────┤
|
||||
│ 🎯 إذا استمررت: ستكسب 950 ريال │
|
||||
│ 🚀 إذا زادت السرعة: 1000+ ريال │
|
||||
└─────────────────────────────────────┘
|
||||
|
||||
لوحة بيانات المهام:
|
||||
- أعلى الأوقات كسباً
|
||||
- أفضل المناطق (الطلب)
|
||||
- تنبيهات الفرص (surge pricing)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🎖️ نظام الشارات والمستويات
|
||||
|
||||
```
|
||||
Bronze (0-99 نقطة) → عمولة عادية 20%
|
||||
Silver (100-249 نقطة) → عمولة 19%
|
||||
Gold (250-499 نقطة) → عمولة 18%
|
||||
Diamond (500+ نقطة) → عمولة 15% + مميزات خاصة
|
||||
|
||||
المميزات الخاصة لـ Diamond:
|
||||
✅ فترات عمل مرنة
|
||||
✅ عروض خاصة من المتاجر
|
||||
✅ أولوية في الطلبات المرتفعة السعر
|
||||
✅ إشعارات surge pricing فورية
|
||||
✅ دعم VIP
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🏆 لوحة الترتيب
|
||||
|
||||
```
|
||||
هذا الأسبوع:
|
||||
|
||||
🥇 أحمد محمود: 150 رحلة (أرباح: 8000 ريال)
|
||||
🥈 سارة الحسن: 145 رحلة (أرباح: 7800 ريال)
|
||||
🥉 محمد علي: 140 رحلة (أرباح: 7600 ريال)
|
||||
|
||||
المكافآت:
|
||||
🥇 500 ريال + 100 نقطة
|
||||
🥈 300 ريال + 60 نقطة
|
||||
🥉 150 ريال + 30 نقطة
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 📱 ميزات عملية
|
||||
|
||||
| الميزة | الفائدة |
|
||||
|--------|---------|
|
||||
| **عرض عائم (Overlay)** | لن تفويت عرض رحلة أبداً |
|
||||
| **تنبيهات صوتية** | اسمع العرض حتى لو كان الهاتف مأغلقاً |
|
||||
| **توجيه صوتي** | استمع للاتجاهات بدون لمس الهاتف |
|
||||
| **اكتشاف الاحتيال** | حماية من العملاء الوهميين |
|
||||
| **قائمة الأمان** | أرقام الطوارئ + ميزات الأمان |
|
||||
| **صور الركاب** | اعرف من تلتقط قبل القبول |
|
||||
|
||||
---
|
||||
|
||||
## ميزات الراكب
|
||||
|
||||
### 🎯 خيارات الرحلات (12 نوع)
|
||||
|
||||
| النوع | الاستخدام | المميز |
|
||||
|------|-----------|--------|
|
||||
| **Speed** | رحلات عادية سريعة | اقتصادي ✅ |
|
||||
| **Comfort** | راحة + سيارة أحدث | فاخر |
|
||||
| **Family** | عائلات + مساحة أكبر | آمن للأطفال |
|
||||
| **Delivery** | طرود وطلبيات | توصيل سريع |
|
||||
| **Blash** | اقتصادي جداً | أرخص سعر |
|
||||
| **Late** | رحلات ليلية | خصم ليلي 20% |
|
||||
| **Heavy** | شحنات ثقيلة | معدات خاصة |
|
||||
| **Nature** | رحلات ريفية | آمن للطرقات الوعرة |
|
||||
| **Electric** | صديق للبيئة | بطارية كهربائية |
|
||||
| **PinkBike** | دراجة نارية | سريع في الزحام |
|
||||
| **Van** | ميني باص | مجموعات كبيرة |
|
||||
| **Female Driver** | سائقة امرأة | آمن وثقة |
|
||||
|
||||
---
|
||||
|
||||
### 🛣️ رحلات متعددة النقاط (Mishwari)
|
||||
|
||||
```
|
||||
الراكب: "أريد أن أذهب لـ 3 أماكن"
|
||||
|
||||
✅ سيرو يسمح:
|
||||
├── المحطة 1: المدرسة (08:00)
|
||||
├── المحطة 2: العمل (09:00)
|
||||
└── المحطة 3: البيت (17:00)
|
||||
|
||||
السعر:
|
||||
- نقطة واحدة = $5
|
||||
- نقطة ثانية = $3
|
||||
- نقطة ثالثة = $2
|
||||
→ الإجمالي: $10 (أرخص من 3 رحلات منفصلة)
|
||||
```
|
||||
|
||||
**الفائدة:**
|
||||
- ✅ توفير الراكب 20-30%
|
||||
- ✅ رحلات أكثر للسائق
|
||||
- ✅ استخدام أفضل للمركبة
|
||||
|
||||
---
|
||||
|
||||
### 💰 طرق الدفع (7 خيارات محلية)
|
||||
|
||||
```
|
||||
كل بلد له:
|
||||
|
||||
سوريا:
|
||||
- نقد
|
||||
- Visa/Mastercard
|
||||
- محفظة سيرو
|
||||
- MTN Mobile Money
|
||||
- Syriatel Mobile Money
|
||||
|
||||
الأردن:
|
||||
- نقد
|
||||
- Visa/Mastercard
|
||||
- محفظة سيرو
|
||||
- JIO (local)
|
||||
|
||||
مصر:
|
||||
- نقد
|
||||
- Visa/Mastercard
|
||||
- محفظة سيرو
|
||||
- E-Cash
|
||||
- CLIQ
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 📊 مقارنة الأسعار الفورية
|
||||
|
||||
```
|
||||
الراكب يطلب رحلة:
|
||||
|
||||
┌──────────────────────────────────┐
|
||||
│ 🏆 سيرو: $12 │
|
||||
│ Uber: $15 (+25%) │
|
||||
│ Careem: $14 (+17%) │
|
||||
│ Bolt: $13 (+8%) │
|
||||
└──────────────────────────────────┘
|
||||
|
||||
✅ سيرو هي الأرخص!
|
||||
→ معدل تحويل أعلى بـ 40-50%
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🎁 برنامج الإحالة الموحد
|
||||
|
||||
```
|
||||
الراكب يحصل على:
|
||||
- كود إحالة فريد
|
||||
- 100 ريال مكافأة لكل صديق جديد
|
||||
- حد أقصى: 10 أصدقاء = 1000 ريال
|
||||
|
||||
السائق يحصل على:
|
||||
- كود إحالة فريد
|
||||
- 50 ريال مكافأة لكل سائق جديد
|
||||
- حد أقصى: 50 سائق = 2500 ريال
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🔐 ميزات الأمان
|
||||
|
||||
| الميزة | الفائدة |
|
||||
|--------|---------|
|
||||
| **زر SOS** | تنبيه الطوارئ فوراً |
|
||||
| **مشاركة الرحلة** | أخبر العائلة بموقعك |
|
||||
| **تقييم وتعليقات** | اختر سائقاً موثوقاً |
|
||||
| **تسجيل صوتي** | سجل المحادثة لأمانك |
|
||||
| **معايرة الموقع** | تأكد من الطريق الصحيح |
|
||||
|
||||
---
|
||||
|
||||
## لوحة التحكم والإدارة
|
||||
|
||||
### 📊 لوحة الإدارة الرئيسية
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ 📈 لوحة المعلومات الرئيسية │
|
||||
├─────────────────────────────────────────┤
|
||||
│ إجمالي الرحلات (اليوم): 2,450 │
|
||||
│ الإيرادات (اليوم): $24,500 │
|
||||
│ عمولة سيرو: $4,900 │
|
||||
│ السائقين النشطين: 1,200 │
|
||||
│ الركاب النشطين: 2,500 │
|
||||
│ معدل الإلغاء: 3.2% │
|
||||
│ متوسط التقييم: 4.8/5.0 │
|
||||
└─────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🎯 أدوات الإدارة (15+ موديول)
|
||||
|
||||
#### 1. إدارة السائقين
|
||||
```
|
||||
✅ قائمة السائقين بالتفاصيل الكاملة
|
||||
✅ مراقبة موقع السائق الفعلي (GPS حي)
|
||||
✅ تقييم مستندات (صورة + رخصة + تأمين)
|
||||
✅ تقارير السلوك (تقيمات، التزامات)
|
||||
✅ إدارة القائمة السوداء
|
||||
```
|
||||
|
||||
#### 2. إدارة الركاب
|
||||
```
|
||||
✅ قائمة الركاب بالمعلومات الشخصية
|
||||
✅ تاريخ الرحلات الكامل
|
||||
✅ الشكاوى والتقييمات
|
||||
✅ حالة المحفظة الرقمية
|
||||
```
|
||||
|
||||
#### 3. إدارة الرحلات
|
||||
```
|
||||
✅ لوحة مراقبة الرحلات الحية
|
||||
✅ البحث المتقدم (بالتاريخ، السعر، إلخ)
|
||||
✅ إدارة الإلغاءات والمشاكل
|
||||
✅ تحليل توزيع الرحلات بالمناطق
|
||||
```
|
||||
|
||||
#### 4. إدارة التسعير (Kazan)
|
||||
```
|
||||
✅ تحديد نسبة العمولة لكل:
|
||||
- دولة
|
||||
- مدينة
|
||||
- نوع مركبة
|
||||
- ساعة من اليوم
|
||||
|
||||
✅ التعديل التلقائي بناءً على المنافسين
|
||||
✅ رؤية التأثير الفوري على الأرباح
|
||||
```
|
||||
|
||||
#### 5. إدارة التسويق
|
||||
```
|
||||
✅ إنشاء حملات ترويجية
|
||||
✅ رسائل مخصصة للركاب والسائقين
|
||||
✅ إدارة الكوبونات والخصومات
|
||||
✅ تقارير ROI مفصلة
|
||||
```
|
||||
|
||||
#### 6. الخرائط الحرارية (Heatmaps)
|
||||
```
|
||||
┌────────────────────────────┐
|
||||
│ 🔴 مناطق طلب عالي جداً │
|
||||
│ 🟠 مناطق طلب عالي │
|
||||
│ 🟡 مناطق طلب متوسط │
|
||||
│ 🟢 مناطق طلب قليل │
|
||||
│ 🔵 مناطق بدون طلب │
|
||||
└────────────────────────────┘
|
||||
|
||||
الفائدة:
|
||||
✅ وضع السائقين في أماكن الطلب
|
||||
✅ تقليل وقت انتظار الراكب
|
||||
✅ زيادة الرحلات المكتملة
|
||||
```
|
||||
|
||||
#### 7. التحليلات المتقدمة
|
||||
```
|
||||
✅ رسوم بيانية للإيرادات
|
||||
✅ تحليل سلوك الراكب
|
||||
✅ أنماط الطلب بالساعة والأسبوع
|
||||
✅ التنبؤ بالطلب المستقبلي
|
||||
✅ تحليل تكاليف التشغيل
|
||||
```
|
||||
|
||||
#### 8. المراقبة الأمنية
|
||||
```
|
||||
✅ سجلات الوصول والتعديلات
|
||||
✅ كشف محاولات الاحتيال
|
||||
✅ مراقبة الحسابات المريبة
|
||||
✅ تنبيهات أمان فورية
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## مقارنة التكاليف مع المنافسين
|
||||
|
||||
### نموذج الأتمتة والتوفير
|
||||
|
||||
| العملية | Uber/Careem | سيرو | الفرق |
|
||||
|--------|------------|------|-------|
|
||||
| **رسم الخريطة** | $150K-$360K | $0 | ✅ توفير كامل |
|
||||
| **جمع أسعار المنافسين** | يدوي (غير دقيق) | آلي 24/7 | ✅ أتمتة كاملة |
|
||||
| **التسويق** | فريق مخصص ($80K+) | آلي بـ AI | ✅ توفير 80% |
|
||||
| **دعم العملاء** | فريق كامل ($100K+) | Chatbot AI (70% حل) | ✅ توفير 60% |
|
||||
| **تحليل الطلب** | يدوي | تنبؤ تلقائي | ✅ أتمتة |
|
||||
| **إدارة العمولات** | يدوي | تعديل آلي | ✅ أتمتة |
|
||||
| **إعادة تفعيل الراكب** | إعلانات مدفوعة | AI + Cron مجاني | ✅ توفير 90% |
|
||||
|
||||
---
|
||||
|
||||
### حساب الربحية
|
||||
|
||||
```
|
||||
سيناريو: 2,000 رحلة يومية
|
||||
|
||||
Uber:
|
||||
├── الإيرادات: 2,000 × $12 = $24,000
|
||||
├── عمولة Uber (25-30%): -$6,000
|
||||
├── رسوم إضافية: -$2,000
|
||||
├── تكاليف التشغيل: -$4,000
|
||||
└── الربح الصافي: $12,000 (50%)
|
||||
|
||||
سيرو:
|
||||
├── الإيرادات: 2,000 × $12 = $24,000
|
||||
├── عمولة سيرو (20%): -$4,800
|
||||
├── توفيرات الخرائط: +$12,500 (نصيب يومي)
|
||||
├── توفيرات التسويق: +$6,700 (نصيب يومي)
|
||||
├── توفيرات الأتمتة: +$5,000 (نصيب يومي)
|
||||
├── تكاليف التشغيل: -$3,000 (بدون خدمات خارجية)
|
||||
└── الربح الصافي: $40,400 (168%!!)
|
||||
```
|
||||
|
||||
**الفارق:** +$28,400 يومياً = **+$10.4M سنوياً** من نفس الحجم! 🚀
|
||||
|
||||
---
|
||||
|
||||
### الملخص التنافسي
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────────────┐
|
||||
│ سيرو = منصة نقل بـ: │
|
||||
├────────────────────────────────────────────────────────┤
|
||||
│ ✅ تكاليف تشغيل أقل بـ 60-70% │
|
||||
│ ✅ أتمتة كاملة للعمليات (24/7) │
|
||||
│ ✅ ذكاء اصطناعي في كل جانب │
|
||||
│ ✅ استقلالية كاملة عن الأطراف الثالثة │
|
||||
│ ✅ ربحية 3-4 مرات أعلى │
|
||||
│ ✅ سائقين أكثر رضى (المكافآت + الشفافية) │
|
||||
│ ✅ ركاب أكثر ولاءً (الأسعار + الأمان) │
|
||||
│ ✅ قابلية تطور عالية جداً │
|
||||
└────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
> **إعداد:** فريق سيرو
|
||||
> **آخر تحديث:** يوليو 2026
|
||||
> **التصنيف:** سري / داخلي
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,990 @@
|
||||
# تقرير شامل لمنصة سيرو (Siro) — ملف استثماري متكامل
|
||||
|
||||
## فهرس المحتويات
|
||||
1. [نظرة عامة عن المنصة](#1-نظرة-عامة-عن-المنصة)
|
||||
2. [التطبيقات الأربعة](#2-التطبيقات-الأربعة)
|
||||
3. [بوت الأندرويد — فحص الأسعار والدفع](#3-بوت-الأندرويد--فحص-الأسعار-والدفع)
|
||||
4. [السوشيال بوت — الاستخبارات التسويقية](#4-السوشيال-بوت--الاستخبارات-التسويقية)
|
||||
5. [نظام الماركتنج المتكامل](#5-نظام-الماركتنج-المتكامل)
|
||||
6. [نظام المكافآت والتلعيب (Gamification)](#6-نظام-المكافآت-والتلعيب-gamification)
|
||||
7. [نظام الإحالة (Referral System)](#7-نظام-الإحالة-referral-system)
|
||||
8. [نظام إعادة تفعيل الخاملين](#8-نظام-إعادة-تفعيل-الخاملين)
|
||||
9. [نظام العمولات الذكي (Kazan)](#9-نظام-العمولات-الذكي-kazan)
|
||||
10. [لوحة الإدارة الشاملة (Admin)](#10-لوحة-الإدارة-الشاملة-admin)
|
||||
11. [تطبيق الخدمة الميدانية (Service)](#11-تطبيق-الخدمة-الميدانية-service)
|
||||
12. [تطبيق السائق (Driver)](#12-تطبيق-السائق-driver)
|
||||
13. [تطبيق الراكب (Rider)](#13-تطبيق-الراكب-rider)
|
||||
14. [جاهزية النظام لثلاث دول](#14-جاهزية-النظام-لثلاث-دول)
|
||||
15. [الملخص التنفيذي للمستثمر](#15-الملخص-التنفيذي-للمستثمر)
|
||||
|
||||
---
|
||||
|
||||
## 1. نظرة عامة عن المنصة
|
||||
|
||||
**سيرو (Siro)** هي منصة نقل ذكي متكاملة (Ride-Hailing Ecosystem) تغطي **3 دول**: **سوريا، الأردن، مصر**. تعمل المنصة من خلال **4 تطبيقات رئيسية** (Rider, Driver, Admin, Service) مدعومة بـ **بوتين آليين** (Android Bot + Social Bot) ونظام **Marketing Engine** متكامل.
|
||||
|
||||
### الإحصائيات الأساسية
|
||||
| البيان | القيمة |
|
||||
|--------|--------|
|
||||
| الدول | سوريا، الأردن، مصر |
|
||||
| التطبيقات | 4 (راكب + سائق + إدارة + خدمة) |
|
||||
| البوتات الآلية | 2 (أندرويد + سوشيال) |
|
||||
| أنواع المركبات | 12 نوعاً |
|
||||
| طرق الدفع | 7 طرق |
|
||||
| لغات الواجهة | العربية والإنكليزية |
|
||||
| حالة النظام | مباشر (Live) في سوريا والأردن، قيد التشغيل في مصر |
|
||||
|
||||
---
|
||||
|
||||
## 2. التطبيقات الأربعة
|
||||
|
||||
### 2.1 تطبيق الراكب (Siro Rider)
|
||||
- **التقنية**: Flutter (Dart) — متوفر على Android, iOS, Web
|
||||
- **الوصف**: تطبيق طلب الرحلات الرئيسي للمستخدمين
|
||||
|
||||
**الميزات الكاملة:**
|
||||
- **طلب رحلة ذكي**: اختيار الوجهة، عرض السعر التقديري، اختيار نوع المركبة (Speed, Comfort, Family, Delivery, Blash, Late, Heavy, Nature, Electric, Pink Bike, Van, Female Driver)
|
||||
- **خرائط حية**: تتبع السائق المباشر على الخريطة مع تحديث الموقع كل 3-5 ثوانٍ
|
||||
- **تسعير ديناميكي**: عرض السعر قبل الطلب مع تفصيل التكلفة
|
||||
- **تقييم السائق**: نجوم + تعليق بعد كل رحلة
|
||||
- **محفظة إلكترونية**: شحن رصيد، دفع للرحلات، استرداد، سجل المعاملات
|
||||
- **أكواد خصم**: إدخال وتفعيل العروض الترويجية
|
||||
- **نظام الإحالة**: دعوة الأصدقاء ومكافآت
|
||||
- **المفضلة**: حفظ الأماكن المفضلة للوصول السريع
|
||||
- **سجل الرحلات**: عرض تاريخ الرحلات كامل مع التفاصيل
|
||||
- **دعم فني**: محادثة وتذاكر دعم
|
||||
- **إشعارات FCM**: إشعارات لحظية عبر Firebase
|
||||
- **الاشتراك في الإشعارات**: إدارة تفضيلات الإشعارات
|
||||
- **تعدد اللغات**: عربي وإنكليزي
|
||||
- **دخول اجتماعي**: Google Sign-In, Apple Sign-In
|
||||
- **بصمة جهاز**: ربط الحساب بالجهاز لأمان إضافي
|
||||
- **SOS**: زر طوارئ مع إرسال الموقع الحي
|
||||
- **Geofencing**: خدمات تعتمد على الموقع الجغرافي
|
||||
|
||||
### 2.2 تطبيق السائق (Siro Driver)
|
||||
- **التقنية**: Flutter (Dart) — Android, iOS, Web
|
||||
- **الوصف**: منصة السائقين المحترفين
|
||||
|
||||
**الميزات الكاملة:**
|
||||
- **عروض الرحلات عبر التراكب (Android Overlay)**: تظهر فوق أي تطبيق حتى لو كان الهاتف مقفلاً
|
||||
- **استقبال الطلبات**: عرض تفاصيل الرحلة (المسافة، السعر، الوجهة) مع مؤقت 15 ثانية للقبول
|
||||
- **خدمة خلفية دائمة (Foreground Service)**: تحديث موقع 24/7
|
||||
- **ملاحة صوتية (TTS)**: إرشادات خطوة بخطوة مع توجيه تلقائي
|
||||
- **إحصائيات الأرباح**: أرباح يومية، أسبوعية، شهرية مع رسوم بيانية
|
||||
- **نظام العمولات (Kazan)**: معرفة العمولة قبل قبول الرحلة
|
||||
- **المحفظة**: رصيد السائق، سحب أرباح، سجل المعاملات
|
||||
- **نظام التقييم**: تقييم الركاب، التقييم المزدوج
|
||||
- **البقشيش (Tips)**: استلام بقشيش بعد الرحلة
|
||||
- **تحديد حالة السائق**: متصل/غير متصل، تغيير الحالة تلقائي
|
||||
- **إدارة الرحلات**: قبول، رفض، إلغاء مع أسباب
|
||||
- **الدردشة مع الراكب**: بدون مشاركة الأرقام
|
||||
- **تسجيل الدخول**: JWT + بصمة جهاز + Firebase Auth
|
||||
- **مراقبة السلوك**: Score سلوك القيادة (سرعة، فرامل،...)
|
||||
- **Gamification**: نقاط، مستويات، إنجازات، تحديات
|
||||
- **المتجر/الاشتراكات**: عروض حصرية للسائقين
|
||||
- **CarPlay**: دمج مع Apple CarPlay
|
||||
- **مساعدة SOS**: زر طوارئ + مكالمة فيديو عبر Agora
|
||||
- **تسجيل صوتي**: إرسال تسجيلات صوتية للدعم
|
||||
- **صفحة تعريفية**: بروفايل كامل مع إحصائيات
|
||||
|
||||
### 2.3 لوحة الإدارة (Siro Admin)
|
||||
- **التقنية**: Flutter Web (PWA) — متوفر على Web, Android, iOS
|
||||
- **الوصف**: لوحة تحكم إدارية شاملة
|
||||
|
||||
**الميزات الكاملة:**
|
||||
|
||||
| الوحدة | الوصف |
|
||||
|--------|-------|
|
||||
| **لوحة المعلومات (Dashboard)** | إحصائيات فورية مع رسوم بيانية — عدد الرحلات، الإيرادات، المستخدمين النشطين، أداء السائقين |
|
||||
| **إدارة الكباتن** | قائمة بجميع السائقين، قبول/رفض التسجيلات، توثيق المستندات، حظر/فك حظر، مراجعة ملفات السائقين |
|
||||
| **إدارة الركاب** | تفاصيل الركاب، سجل الرحلات، عمليات الحظر، الإشعارات المستهدفة |
|
||||
| **إدارة الرحلات** | تتبع الرحلات المباشرة، سجل الرحلات الكامل، البحث المتقدم، تفاصيل كل رحلة |
|
||||
| **الإدارة المالية** | تقارير الأرباح، تقارير العمولات، التسويات المالية، سجل المدفوعات |
|
||||
| **التحليلات المتقدمة** | مؤشرات الأداء (KPIs)، تقارير شهرية/سنوية، رسوم بيانية تفاعلية |
|
||||
| **إدارة العمولات (Kazan)** | تحرير نسب العمولات لكل دولة وكل نوع مركبة، نماذج تسعير |
|
||||
| **العروض الترويجية** | إنشاء وإدارة أكواد الخصم (نسبة مئوية/قيمة ثابتة)، تفعيل/تعطيل |
|
||||
| **إدارة الموظفين** | صلاحيات الأدوار، إدارة حسابات الموظفين، سجل النشاطات |
|
||||
| **مراقبة الجودة** | بطاقات أداء السائقين، تقييمات، قوائم سوداء |
|
||||
| **الأمان والرقابة** | سجلات التدقيق (Audit Logs)، محاولات الدخول، كشف الاحتيال |
|
||||
| **مراقبة الخوادم** | حالة الخوادم، الأداء، وقت التشغيل، استهلاك الموارد |
|
||||
| **إدارة الفواتير** | إنشاء وطباعة الفواتير، تقارير ضريبية |
|
||||
| **الماركتنج** | تحليل أسعار المنافسين، اكتشاف الحالات الشاذة، تشغيل/إيقاف الـ Autopilot، What-If Simulator |
|
||||
| **نظام الإحالة** | تقارير الإحالات، المكافآت، تتبع الـ Links |
|
||||
| **الشكاوى** | نظام تذاكر دعم متكامل |
|
||||
| **إدارة البنوك** | إعدادات الحسابات البنكية للسحب |
|
||||
| **السيرفر والمراقبة** | إدارة الخوادم، مراقبة الـ APIs |
|
||||
| **قاعدة المعرفة** | توثيق النظام وإعداداته |
|
||||
| **الإشعارات** | إرسال إشعارات مستهدفة لجميع المستخدمين أو فئات محددة |
|
||||
| **التطبيقات (Apps)** | إدارة إصدارات التطبيقات |
|
||||
|
||||
### 2.4 تطبيق الخدمة الميدانية (Siro Service)
|
||||
- **التقنية**: Flutter (Dart) — Android, iOS
|
||||
- **الوصف**: تطبيق مخصص لموظفي الخدمة الميدانية لتسجيل وتوثيق السائقين الجدد
|
||||
|
||||
**الميزات الكاملة:**
|
||||
- **تسجيل سائق جديد**: إدخال بيانات السائق (الاسم، الرقم، البريد،...)
|
||||
- **تصوير المستندات**: تصوير الهوية، رخصة القيادة، أوراق السيارة مباشرة من الكاميرا
|
||||
- **استخراج بيانات بالذكاء الاصطناعي**: Azure OCR + OpenAI GPT + Llama AI تستخرج البيانات تلقائياً من صور المستندات
|
||||
- **التحقق الميداني**: فحص السيارة (موديل، لون، لوحة)
|
||||
- **رفع صور السيارة**: واجهة، خلف، داخلية، المحرك
|
||||
- **تحديد موقع التسجيل**: الموقع الجغرافي للتسجيل
|
||||
- **تحديث بيانات السائق**: تعديل بيانات السائق الحالي
|
||||
- **تحديث حالة السائق إلى نشط**: تفعيل السائق بعد الموافقة
|
||||
- **ربط سيارة بسائق**: إضافة سيارة جديدة لحساب السائق
|
||||
- **إدارة السائقين**: عرض معلومات السائقين، بحث، تصفية
|
||||
- **دعم متعدد اللغات**: عربي وإنكليزي
|
||||
- **أمان**: JWT + بصمة جهاز
|
||||
- **البحث عن سائق**: بالرقم، الاسم، رقم الهاتف
|
||||
- **متوفر على iOS و Android**
|
||||
|
||||
---
|
||||
|
||||
## 3. بوت الأندرويد — فحص الأسعار والدفع
|
||||
|
||||
### android_bot
|
||||
- **التقنية**: Android (Kotlin + Jetpack Compose)
|
||||
- **الوصف**: تطبيق أندرويد آلي يستخدم Accessibility Services لأتمتة تطبيقات النقل المنافسة
|
||||
|
||||
### آلية العمل:
|
||||
1. البوت يشتغل كـ **Accessibility Service** في خلفية جهاز الأندرويد
|
||||
2. كل 5 ثوانٍ يتصل بالـ Backend (`standalone_worker.php`) لجلب مهمة جديدة
|
||||
3. ينفذ المهمة عبر محاكاة التفاعل البشري (نقر، كتابة، سحب)
|
||||
4. يرسل النتائج إلى الخادم بتوقيع HMAC-SHA256
|
||||
|
||||
### التطبيقات المنافسة التي يدعمها:
|
||||
| التطبيق | اسم الحزمة |
|
||||
|---------|------------|
|
||||
| **YallaGo** | com.yallago.app |
|
||||
| **Zakinn** | com.zakinn.app |
|
||||
| **Tfadal (bis.taxi)** | bis.taxi |
|
||||
| **Careem** | com.careem |
|
||||
| **Uber** | com.ubercab |
|
||||
| **TaxiF** | com.taxif.app |
|
||||
| **Jeeny** | com.jeeny.app |
|
||||
|
||||
### أنواع المهام:
|
||||
- **get_price**: يدخل موقع الانطلاق والوصول في تطبيق المنافس ويسحب السعر المعروض
|
||||
- **check_promos**: يفحص العروض الترويجية المتاحة في التطبيقات المنافسة
|
||||
- **scrape_nearby_drivers**: يحصي عدد السائقين القريبين (تقديري)
|
||||
|
||||
### الاستخدامات:
|
||||
- **تسعير تنافسي ذكي**: مقارنة أسعار المنافسين في الزمن الحقيقي
|
||||
- **تحليل استراتيجي**: فهم تحركات أسعار المنافسين في أوقات الذروة
|
||||
- **تغذية AI Pricing**: إدخال بيانات المنافسين لمحرك الذكاء الاصطناعي للتسعير التلقائي (cron_ai_engine.php)
|
||||
- **تقارير Marketing**: تزويد نظام الماركتنج بفجوات الأسعار للاستغلال التسويقي
|
||||
- **الحالات الشاذة**: اكتشاف متى يخفض المنافس أسعاره بشكل غير طبيعي
|
||||
|
||||
### الأمان:
|
||||
- توثيق الطلبات عبر **HMAC-SHA256** مع مفتاح سري خاص بالجهاز
|
||||
- Android ID كمعرف فريد للجهاز
|
||||
- تشفير الاتصالات
|
||||
|
||||
---
|
||||
|
||||
## 4. السوشيال بوت — الاستخبارات التسويقية
|
||||
|
||||
### socialBot
|
||||
- **التقنية**: Android (Kotlin, Accessibility Service)
|
||||
- **الوصف**: بوت تسويقي اجتماعي ذكي يدير حسابات على منصات التواصل الاجتماعي بشكل آلي
|
||||
|
||||
### المنصات المدعومة:
|
||||
|
||||
#### 4.1 فيسبوك (Facebook)
|
||||
| المكون | الوظيفة |
|
||||
|--------|---------|
|
||||
| **FacebookBotService.kt** | خدمة Accessibility الرئيسية — تستقبل المهام وتنفذها على تطبيق فيسبوك |
|
||||
| **FacebookNavigator.kt** | تفتح التطبيق، تتنقل بين Home/Groups، تسحب، تبحث |
|
||||
| **FacebookCommentReader.kt** | تقرأ التعليقات من المنشورات، توسع "عرض المزيد"، تستخرج النصوص، تصفي ضوضاء الواجهة |
|
||||
| **FacebookCommentPoster.kt** | تكتب وتنشر التعليقات المُنشأة بالذكاء الاصطناعي |
|
||||
|
||||
#### 4.2 إنستغرام (Instagram)
|
||||
| المكون | الوظيفة |
|
||||
|--------|---------|
|
||||
| **InstagramBotService.kt** | خدمة Accessibility — تنفذ مهام على إنستغرام |
|
||||
| **InstagramNavigator.kt** | تفتح التطبيق، تسحب الفيد، تبحث، تعلق |
|
||||
|
||||
#### 4.3 تيليغرام (Telegram)
|
||||
| المكون | الوظيفة |
|
||||
|--------|---------|
|
||||
| **TelegramBotService.kt** | خدمة Accessibility — تصفح القنوات، استخراج النصوص |
|
||||
| **TelegramNavigator.kt** | تفتح القنوات عبر Deep Links، تسحب للخلف (لمشاهدة المنشورات الأقدم) |
|
||||
|
||||
### أنواع المهام:
|
||||
| نوع المهمة | الوصف |
|
||||
|------------|-------|
|
||||
| `post_comment` | نشر تعليق مُنشأ بالذكاء الاصطناعي على منشور معين |
|
||||
| `read_posts` | قراءة المنشورات من صفحة/مجموعة وجمعها |
|
||||
| `autonomous_scroll_and_reply` | تصفح الفيد تلقائياً وقراءة المحتوى والرد على الاستفسارات |
|
||||
| `join_group` | الانضمام إلى مجموعة فيسبوك |
|
||||
|
||||
### النظام الخلفي (Marketing Engine):
|
||||
- **schedule_manager.php**: يحدد المهام وينظمها مع مراعاة أوقات الهدوء (Quiet Hours)
|
||||
- **account_manager.php**: يدير الحسابات بالتناوب (Cooldown-based selection) لتجنب الحظر
|
||||
- **gemini_comment_generator.php**: يُنشئ تعليقات طبيعية عبر Gemini AI ← ينشر محتوى ترويجي لسيرو أو يجيب على أسئلة
|
||||
- **insert_autonomous_task.php**: يضيف مهام تصفح ورد تلقائي
|
||||
- **cron_weekly_report.php**: يُصدر تقرير أسبوعي للاستخبارات التسويقية عبر Gemini AI
|
||||
|
||||
### الاستخدامات الاستراتيجية:
|
||||
- **استخبارات السوق (Market Intelligence)**: قراءة منشورات ومجموعات النقل لفهم احتياجات السوق ومشاكل السائقين
|
||||
- **الدعاية الموجهة**: نشر تعليقات ترويجية ذكية عن سيرو في المجموعات ذات الصلة
|
||||
- **توجيه الجمهور**: الرد على استفسارات الناس وتوجيههم نحو تطبيق سيرو
|
||||
- **مراقبة المنافسين**: تتبع نشاط المنافسين على وسائل التواصل
|
||||
- **إدارة السمعة**: الرد على الشكاوى والتعليقات السلبية بشكل آلي وذكي
|
||||
|
||||
### مكافحة التكرار:
|
||||
- **SeenPostDatabase**: قاعدة SQLite محلية تخزن SHA-256 هاش للمنشورات التي تمت مشاهدتها لمنع إعادة معالجة نفس المحتوى
|
||||
|
||||
---
|
||||
|
||||
## 5. نظام الماركتنج المتكامل
|
||||
|
||||
### 5.1 Marketing Engine (المحرك التسويقي)
|
||||
**المكان**: `backend/marketing_engine/`
|
||||
|
||||
| المكون | الوظيفة |
|
||||
|--------|---------|
|
||||
| **index.php** | الـ API الرئيسي — توزيع المهام، التقييم عبر Gemini، التقارير |
|
||||
| **schema.sql** | قاعدة بيانات الماركتنج — `social_accounts`, `social_tasks`, `social_logs`, `content_pipeline`, `api_quotas`, `marketing_reports` |
|
||||
| **social_worker.php** | نقطة نهاية لبوت السوشيال ميديا للأندرويد |
|
||||
| **schedule_manager.php** | جدولة المهام مع أوقات هدوء وتوليد تعليقات Gemini |
|
||||
| **account_manager.php** | إدارة الحسابات بالتناوب ونظام Cooldown |
|
||||
| **gemini_comment_generator.php** | توليد تعليقات طبيعية بالذكاء الاصطناعي |
|
||||
| **cron_insert_task.php** | إدراج مهام تصفح ورد تلقائي |
|
||||
| **cron_weekly_report.php** | تقرير أسبوعي ذكي للاستخبارات التسويقية |
|
||||
|
||||
### 5.2 أنظمة الماركتنج التلقائية (Cron Jobs)
|
||||
|
||||
#### cron_auto_marketing_pusher.php — الدفع التسويقي الآلي
|
||||
- يستهدف الركاب الخاملين (فتحوا التطبيق ولكن لم يحجزوا رحلة اليوم)
|
||||
- يُولّد رسائل ترويجية مخصصة عبر Gemini AI بناءً على أسعار المنافسين الحقيقية
|
||||
- يرسل عبر FCM مع نظام مانع للتكرار (24 ساعة Cooldown)
|
||||
- يدعم رسائل خاصة بكل دولة (SY, JO, EG, IQ)
|
||||
|
||||
#### cron_passenger_reengagement.php — إعادة تفعيل الركاب الخاملين
|
||||
- يستهدف الركاب غير النشطين لمدة 3+ أيام
|
||||
- يستخدم Gemini AI لإنشاء رسائل إشعار مخصصة مع سياق أسعار المنافسين
|
||||
- Anti-spam عبر Redis (72 ساعة Cooldown)
|
||||
- حفظ الإشعارات في جدول `notifications`
|
||||
|
||||
#### cron_silent_push_inactive.php — الإشعارات الصامتة
|
||||
- يرسل إشعارات صامتة (data-only FCM) للخاملين
|
||||
- `content_available: true` ← يوقظ التطبيق في الخلفية لمزامنة الموقع
|
||||
|
||||
### 5.3 المعادلة التسويقية (AI Formula Solver)
|
||||
|
||||
#### cron_ai_engine.php — محرك الذكاء الاصطناعي للتسعير
|
||||
- يعمل كل 30-60 دقيقة
|
||||
- **Smart Pricing Module**: يعكس هندسة الأسعار الإجمالية للمنافسين
|
||||
- يُحدّث جدول Kazan لجميع أنواع المركبات: Speed, Comfort, Lady, Electric, Van, Delivery, MishwarVIP, Awfar
|
||||
- يحسب أسعار الدقيقة (Normal/Peak/Late) لكل نوع
|
||||
|
||||
#### cron_kazan_adjuster.php — مضبط العمولات
|
||||
- يضبط نسب Kazan (العمولات) بناءً على بؤر Surge المنافسة
|
||||
- يطبق تخفيضات 15-30% على العمولات في المناطق عالية المنافسة
|
||||
- يستخدم Redis للتخزين المؤقت
|
||||
|
||||
#### cron_gemini_advisor.php — مستشار Gemini الاستراتيجي
|
||||
- تحليل استراتيجي أسبوعي لصيغ تسعير المنافسين
|
||||
- يُولّد تقارير HTML محفوظة في `gemini_market_insights`
|
||||
|
||||
#### cron_predictive_demand.php — التنبؤ بالطلب
|
||||
- تحليل أنماط الطلب التاريخية للتنبؤ بالطلب المستقبلي
|
||||
|
||||
#### cron_seasonal_pricing.php — التسعير الموسمي
|
||||
- تعديل الأسعار حسب المواسم والعطلات
|
||||
|
||||
#### cron_surge_opportunity.php — فرص Surge
|
||||
- اكتشاف فرص رفع الأسعار في المناطق ذات الطلب المرتفع
|
||||
|
||||
### 5.4 Location Intelligence Engine (المحرك الجغرافي التسويقي)
|
||||
**المكان**: `backend/core/Services/LocationIntelligenceEngine.php`
|
||||
- يعالج تحديثات موقع الراكب
|
||||
- يتحقق من تقاطع المناطق الجغرافية (Geofence Zones)
|
||||
- يشغل حملات إعلانية بناءً على الموقع
|
||||
- يُسجل في `marketing_campaigns_log`
|
||||
- Anti-spam (24 ساعة Cooldown)
|
||||
|
||||
### 5.5 SiroGeminiService — خدمة Gemini المتكاملة
|
||||
**المكان**: `backend/core/Services/SiroGeminiService.php`
|
||||
|
||||
| الوظيفة | الوصف |
|
||||
|---------|-------|
|
||||
| `analyzeMarketAndDraftCampaign()` | تحليل أسعار المنافسين، اقتراح خصومات، توليد رسائل تسويقية |
|
||||
| `generateGeofenceMessage()` | توليد رسائل ترويجية حسب الموقع الجغرافي |
|
||||
| `evaluatePostsForReporting()` | تحليل منشورات وسائل التواصل للاستخبارات التسويقية |
|
||||
| `analyzeCompetitorFormulas()` | تحليل استراتيجي لصيغ تسعير المنافسين |
|
||||
|
||||
### 5.6 Content Pipeline (خط إنتاج المحتوى)
|
||||
**المكان**: `backend/marketing_engine/services/`
|
||||
- **ContentWorkflow.php**: ينظم دورة إنتاج المحتوى بالذكاء الاصطناعي (كتابة سكريبت → توليد صوت → فيديو)
|
||||
- **AIVideoGenerator.php**: يدمج Gemini (نصوص) + ElevenLabs (صوت) + Creatomate/HeyGen (فيديو)
|
||||
|
||||
---
|
||||
|
||||
## 6. نظام المكافآت والتلعيب (Gamification)
|
||||
|
||||
### 6.1 مستويات السائقين (Driver Levels)
|
||||
| المستوى | النقاط المطلوبة | الميزة |
|
||||
|---------|----------------|--------|
|
||||
| 🟤 **برونزي (Bronze)** | 0 - 999 نقطة | — |
|
||||
| ⚪ **فضي (Silver)** | 1,000 - 4,999 نقطة | تخفيض العمولة 1% |
|
||||
| 🟡 **ذهبي (Gold)** | 5,000 - 14,999 نقطة | تخفيض العمولة 2% |
|
||||
| 💎 **ألماسي (Diamond)** | 15,000+ نقطة | تخفيض العمولة 5% |
|
||||
|
||||
### 6.2 الإنجازات (Achievements) — 8 إنجازات
|
||||
| الإنجاز | الشرط |
|
||||
|---------|-------|
|
||||
| 🚗 **أول رحلة** | إتمام أول رحلة |
|
||||
| ⭐ **نجمة خماسية** | الحصول على تقييم 5 نجوم |
|
||||
| 🏆 **10 رحلات** | إتمام 10 رحلات |
|
||||
| 🏆 **50 رحلة** | إتمام 50 رحلة |
|
||||
| 🏆 **100 رحلة** | إتمام 100 رحلة |
|
||||
| 🏆 **500 رحلة** | إتمام 500 رحلة |
|
||||
| 🔥 **7 أيام متتالية** | العمل 7 أيام متتالية بدون انقطاع |
|
||||
| 🔥 **30 يوم متتالي** | العمل 30 يوم متتالي بدون انقطاع |
|
||||
| 👥 **5 إحالات** | دعوة 5 سائقين جدد |
|
||||
|
||||
### 6.3 النقاط السلوكية (Behavior Scoring)
|
||||
- **Speed Score**: يراقب السرعة القصوى
|
||||
- **Hard Brakes Score**: يراقب الفرامل المفاجئة
|
||||
- **Behavior Score**: تقييم عام لسلوك القيادة
|
||||
|
||||
### 6.4 الهدف اليومي (Daily Goal)
|
||||
- هدف أرباح يومي قابل للتعديل
|
||||
- شريط تقدم实时
|
||||
- إشعارات عند تحقيق الهدف
|
||||
|
||||
### 6.5 التحديات (Challenges) — مهمات يومية وأسبوعية
|
||||
|
||||
#### التحديات اليومية:
|
||||
| التحدي | الهدف |
|
||||
|--------|-------|
|
||||
| الرحلات | 5 / 10 رحلات |
|
||||
| الأرباح | مبلغ مستهدف |
|
||||
| مكافأة نهاية الأسبوع | رحلات إضافية يومي جمعة/سبت |
|
||||
|
||||
#### التحديات الأسبوعية:
|
||||
| التحدي | الهدف |
|
||||
|--------|-------|
|
||||
| الرحلات | 30 رحلة |
|
||||
| الأرباح | مبلغ مستهدف أسبوعي |
|
||||
| ساعات العمل | 20 ساعة |
|
||||
|
||||
#### المكافآت:
|
||||
- نقاط بقيم خاصة بكل دولة (SY, JO, EG)
|
||||
- نظام Claim مع تحقق من الخادم
|
||||
|
||||
### 6.6 لوحة المتصدرين (Leaderboard)
|
||||
- ترتيب السائقين حسب الرحلات أو الأرباح
|
||||
- منصّة التتويج (أول 3 مراكز)
|
||||
- إظهار ترتيب السائق الشخصي وعدد السائقين الإجمالي
|
||||
- تحديث دوري من الخادم
|
||||
|
||||
---
|
||||
|
||||
## 7. نظام الإحالة (Referral System)
|
||||
|
||||
### 7.1 إحالة السائقين
|
||||
- **توليد كود إحالة**: من اسم السائق + ID
|
||||
- **إحالة سائق لسائق**: مكافآت لكل سائق جديد يسجل
|
||||
- **إحالة سائق لراكب**: مكافآت لكل راكب جديد يسجل
|
||||
- **مشاركة عبر واتساب**: رسالة مشاركة مع الكود
|
||||
- **إحصائيات**: عدد الإحالات النشطة، إجمالي المكافآت
|
||||
|
||||
### 7.2 إحالة الركاب
|
||||
- **كود إحالة خاص**: لكل راكب
|
||||
- **ربط كود الدعوة**: `linkInviteCode()` لتطبيق كود
|
||||
- **مشاركة التطبيق**: صفحة مشاركة مع كود ورسالة
|
||||
- **مكافآت**: رصيد مجاني لكل شخص يدعوه
|
||||
|
||||
---
|
||||
|
||||
## 8. نظام إعادة تفعيل الخاملين
|
||||
|
||||
### 8.1 خوارزمية إعادة التفعيل
|
||||
1. **الكشف**: كشف الركاب غير النشطين (3+ أيام، 7+ أيام، 30+ يوم)
|
||||
2. **التحليل**: استخدام Gemini AI لتحليل سبب الخمول (سعر، تجربة، منافس)
|
||||
3. **التوليد**: إنشاء رسالة مخصصة لكل راكب حسب حالته
|
||||
4. **الإرسال**: إرسال عبر FCM مع رابط عميق (Deep Link) للتطبيق
|
||||
5. **المتابعة**: تتبع معدل فتح الإشعارات وعودة المستخدمين
|
||||
|
||||
### 8.2 أنواع حملات إعادة التفعيل
|
||||
| نوع الحملة | الجمهور المستهدف | التكرار |
|
||||
|-----------|-----------------|---------|
|
||||
| تنبيه سعري | راكب فتح التطبيق ولم يحجز | كل 24 ساعة |
|
||||
| عرض خاص | خامل 3-7 أيام | كل 72 ساعة |
|
||||
| عرض استرجاع | خامل 7-30 يوم | كل أسبوع |
|
||||
| عرض العودة | خامل 30+ يوم | كل أسبوعين |
|
||||
|
||||
### 8.3 الأمان ضد الإزعاج
|
||||
- Redis Cooldown (72 ساعة للحملات الكثيفة، 24 ساعة للخفيفة)
|
||||
- حد أقصى 3 إشعارات في الأسبوع لكل مستخدم
|
||||
- إمكانية إلغاء الاشتراك
|
||||
|
||||
---
|
||||
|
||||
## 9. نظام العمولات الذكي (Kazan)
|
||||
|
||||
### آلية العمل:
|
||||
1. **نسبة عمولة متغيرة**: تختلف حسب نوع المركبة (Speed, Comfort, Delivery, ...)
|
||||
2. **أسعار مختلفة لكل دولة**: سوريا، الأردن، مصر
|
||||
3. **تعديل ديناميكي**: cron_kazan_adjuster.php يعدل العمولات في مناطق المنافسة العالية
|
||||
4. **تخفيض تلقائي**: 15-30% تخفيض في بؤر Surge للمنافسين
|
||||
5. **شفافية كاملة**: السائق يرى العمولة قبل قبول الرحلة
|
||||
|
||||
### كسر العمولة حسب الدولة:
|
||||
| الدولة | النطاق التقريبي |
|
||||
|--------|----------------|
|
||||
| سوريا | 10-20% |
|
||||
| الأردن | 15-25% |
|
||||
| مصر | 10-20% |
|
||||
|
||||
---
|
||||
|
||||
## 10. لوحة الإدارة الشاملة (Admin)
|
||||
|
||||
### التقنية
|
||||
- **الإطار**: Flutter Web (PWA)
|
||||
- **المنصات**: Web, Android, iOS
|
||||
- **إدارة الحالة**: GetX
|
||||
- **الخرائط**: Flutter Map (OpenStreetMap)
|
||||
- **الرسوم البيانية**: fl_chart
|
||||
- **قاعدة البيانات محلية**: sqflite للتخزين المؤقت
|
||||
|
||||
### الوحدات الإدارية بالتفصيل:
|
||||
|
||||
#### 10.1 Dashboard (لوحة المعلومات)
|
||||
- [x] إحصائيات فورية: عدد السائقين المتصلين، الرحلات النشطة، الإيرادات اليومية
|
||||
- [x] رسوم بيانية تفاعلية (خطية، عمودية، دائرية)
|
||||
- [x] مقارنة شهرية/سنوية
|
||||
- [x] مؤشرات الأداء الرئيسية (KPIs)
|
||||
- [x] تنبيهات الأنشطة غير الطبيعية
|
||||
|
||||
#### 10.2 إدارة الكباتن (Captain Management)
|
||||
- [x] قائمة السائقين مع بحث وتصفية متقدم
|
||||
- [x] عرض تفاصيل السائق (معلومات شخصية، السيارة، المستندات)
|
||||
- [x] قبول/رفض طلبات التسجيل
|
||||
- [x] توثيق المستندات
|
||||
- [x] حظر/فك حظر
|
||||
- [x] إرسال إشعارات مستهدفة
|
||||
- [x] مراجعة ملفات السائقين
|
||||
- [x] إدارة أنواع المركبات لكل سائق
|
||||
|
||||
#### 10.3 إدارة الركاب (Passenger Management)
|
||||
- [x] قائمة الركاب
|
||||
- [x] عرض سجل الرحلات لكل راكب
|
||||
- [x] حظر/فك حظر
|
||||
- [x] إرسال إشعارات
|
||||
- [x] عرض التقييمات
|
||||
- [x] إدارة المحفظة
|
||||
|
||||
#### 10.4 إدارة الرحلات (Ride Management)
|
||||
- [x] تتبع الرحلات المباشرة (Live Tracking)
|
||||
- [x] سجل الرحلات الكامل مع البحث المتقدم
|
||||
- [x] تفاصيل الرحلة: السائق، الراكب، المسار، المدة، السعر، العمولة
|
||||
- [x] إلغاء الرحلات
|
||||
- [x] تصدير التقارير
|
||||
|
||||
#### 10.5 الإدارة المالية (Financial Management)
|
||||
- [x] تقارير الأرباح اليومية/الأسبوعية/الشهرية
|
||||
- [x] تقارير العمولات
|
||||
- [x] التسويات المالية مع السائقين
|
||||
- [x] سجل المدفوعات
|
||||
- [x] إدارة حسابات البنوك
|
||||
|
||||
#### 10.6 التحليلات المتقدمة (Advanced Analytics)
|
||||
- [x] مؤشرات الأداء (KPIs)
|
||||
- [x] رسوم بيانية تفاعلية
|
||||
- [x] تحليل الاتجاهات
|
||||
- [x] تقارير مخصصة
|
||||
|
||||
#### 10.7 إدارة العمولات (Kazan Management)
|
||||
- [x] تحرير نسب العمولات لكل دولة
|
||||
- [x] تحرير نسب العمولات لكل نوع مركبة
|
||||
- [x] نماذج تسعير
|
||||
- [x] تفعيل/تعطيل التسعير الديناميكي
|
||||
|
||||
#### 10.8 العروض الترويجية (Promotions)
|
||||
- [x] إنشاء عرض جديد (كود خصم، نسبة، قيمة ثابتة)
|
||||
- [x] إدارة العروض الحالية (تعديل، حذف)
|
||||
- [x] تحديد صلاحية العرض
|
||||
- [x] تحديد المستهدفين
|
||||
|
||||
#### 10.9 إدارة الموظفين (Staff Management)
|
||||
- [x] إضافة/إزالة موظفين
|
||||
- [x] تحديد صلاحيات الأدوار
|
||||
- [x] سجل النشاطات
|
||||
|
||||
#### 10.10 مراقبة الجودة (Quality Control)
|
||||
- [x] بطاقات أداء السائقين
|
||||
- [x] نظام التقييم
|
||||
- [x] القوائم السوداء
|
||||
- [x] تقارير الجودة
|
||||
|
||||
#### 10.11 الأمان والرقابة (Security & Audit)
|
||||
- [x] سجلات التدقيق (Audit Logs)
|
||||
- [x] محاولات الدخول الفاشلة
|
||||
- [x] كشف الاحتيال
|
||||
- [x] إدارة الجلسات النشطة
|
||||
|
||||
#### 10.12 مراقبة الخوادم (Server Monitor)
|
||||
- [x] حالة الخوادم
|
||||
- [x] أداء النظام
|
||||
- [x] وقت التشغيل (Uptime)
|
||||
- [x] استهلاك الموارد
|
||||
|
||||
#### 10.13 الماركتنج (Marketing)
|
||||
- [x] تحليل أسعار المنافسين
|
||||
- [x] اكتشاف الحالات الشاذة
|
||||
- [x] تشغيل/إيقاف الـ Autopilot
|
||||
- [x] Price Gap Heatmap
|
||||
- [x] حصة السوق (Market Share)
|
||||
- [x] التنبؤ بالأسعار بالذكاء الاصطناعي
|
||||
- [x] What-If Simulator (تغيير سعر Speed ← تأثير على PCI وحصة السوق)
|
||||
- [x] Win-back targets
|
||||
- [x] Campaign Log
|
||||
|
||||
#### 10.14 نظام الشكاوى (Complaints System)
|
||||
- [x] إدارة تذاكر الدعم
|
||||
- [x] تصنيف الشكاوى
|
||||
- [x] متابعة الحل
|
||||
- [x] إشعارات للمستخدمين
|
||||
|
||||
#### 10.15 الإشعارات (Notifications)
|
||||
- [x] إرسال إشعارات لجميع المستخدمين
|
||||
- [x] إرسال إشعارات لفئة محددة (سائقين، ركاب)
|
||||
- [x] إرسال إشعارات لمستخدم معين
|
||||
|
||||
#### 10.16 إدارة الفواتير
|
||||
- [x] إنشاء فواتير
|
||||
- [x] طباعة فواتير
|
||||
- [x] تقارير ضريبية
|
||||
|
||||
---
|
||||
|
||||
## 11. تطبيق الخدمة الميدانية (Service)
|
||||
|
||||
### التقنية
|
||||
- **الإطار**: Flutter (Dart) — متوفر على Android و iOS
|
||||
- **إدارة الحالة**: GetX
|
||||
- **Firebase**: FCM، Analytics، Crashlytics
|
||||
|
||||
### الميزات الوظيفية:
|
||||
|
||||
#### 11.1 تسجيل السائقين الجدد
|
||||
- نموذج تسجيل متكامل: الاسم، رقم الهاتف، البريد الإلكتروني، المدينة
|
||||
- تصوير المستندات (الهوية، رخصة القيادة، أوراق السيارة)
|
||||
- استخراج البيانات من المستندات بالذكاء الاصطناعي عبر Azure OCR + OpenAI GPT + Llama AI
|
||||
- التحقق الميداني من السيارة (موديل، سنة، لون، لوحة)
|
||||
- رفع صور السيارة (واجهة، خلف، داخلية، محرك)
|
||||
- تحديد موقع التسجيل الجغرافي
|
||||
|
||||
#### 11.2 إدارة السائقين الحاليين
|
||||
- عرض معلومات السائقين
|
||||
- تحديث بيانات السائقين
|
||||
- تغيير حالة السائق إلى نشط
|
||||
- إضافة سيارة جديدة لسائق
|
||||
- ربط Car Plate بسائق
|
||||
|
||||
#### 11.3 البحث والتصفية
|
||||
- بحث برقم الهاتف
|
||||
- بحث بالاسم
|
||||
- بحث برقم السائق
|
||||
- تصفية حسب الحالة
|
||||
|
||||
#### 11.4 الأمان
|
||||
- JWT Authentication مع بصمة جهاز
|
||||
- Firebase Auth
|
||||
- تشفير البيانات
|
||||
|
||||
---
|
||||
|
||||
## 12. تطبيق السائق (Driver)
|
||||
|
||||
### التقنية
|
||||
- **الإطار**: Flutter (Dart) — Android, iOS, Web
|
||||
- **إدارة الحالة**: GetX (معدل)
|
||||
- **التخزين المحلي**: GetStorage (معدل)، sqflite
|
||||
- **الخرائط**: Google Maps + Flutter Map + Map SaaS
|
||||
- **الاتصالات**: Socket.IO (driver_socket)
|
||||
- **الإشعارات**: Firebase Cloud Messaging (FCM)
|
||||
- **المكالمات**: Agora + WebRTC
|
||||
- **التراكب**: TripOverlayPlugin (Android Overlay)
|
||||
- **CarPlay**: Android Auto + Apple CarPlay
|
||||
- **التشفير**: secure_string_operations (AES-256-CBC)
|
||||
- **التعريب**: ترجمة كاملة (عربي/إنكليزي)
|
||||
|
||||
### الميزات الكاملة:
|
||||
|
||||
#### 12.1 نظام استقبال الرحلات
|
||||
- عرض تفاصيل الرحلة (المسافة، الوقت المتوقع، السعر، العمولة، الوجهة)
|
||||
- مؤقت 15 ثانية للقبول التلقائي
|
||||
- خيارات: قبول، رفض، إلغاء (مع أسباب)
|
||||
- صوت تنبيه مخصص
|
||||
|
||||
#### 12.2 الـ Overlay (الميزة الفريدة)
|
||||
- **TripOverlayPlugin**: نافذة عائمة تظهر فوق أي تطبيق
|
||||
- تظهر فور وصول الطلب حتى لو الهاتف مقفل
|
||||
- تعرض: المسافة، السعر، وقت الوصول
|
||||
- مؤقت للقبول/الرفض
|
||||
|
||||
#### 12.3 الخدمة الخلفية (Foreground Service)
|
||||
- تشتغل 24/7
|
||||
- تحديث الموقع كل 3-5 ثوانٍ
|
||||
- تستهلك أقل بطارية
|
||||
- تظل نشطة حتى عند تصغير التطبيق
|
||||
|
||||
#### 12.4 الملاحة والتوجيه
|
||||
- Voice Navigation (TTS) خطوة بخطوة
|
||||
- إعادة حساب المسار تلقائياً
|
||||
- عرض المسار على الخريطة
|
||||
- إرشادات مفصلة
|
||||
|
||||
#### 12.5 الإحصائيات المالية
|
||||
- أرباح اليوم: تفصيل الرحلات والمبلغ الإجمالي
|
||||
- أرباح الأسبوع: رسم بياني + مقارنة
|
||||
- أرباح الشهر: إجمالي + مقارنة مع الشهر السابق
|
||||
- صافي الأرباح بعد العمولة
|
||||
|
||||
#### 12.6 المحفظة
|
||||
- الرصيد الحالي
|
||||
- سحب الأرباح
|
||||
- سجل المعاملات
|
||||
- تفاصيل كل معاملة
|
||||
|
||||
#### 12.7 نظام التقييم والمكافآت
|
||||
- تقييم الركاب
|
||||
- نقاط المستوى
|
||||
- الإنجازات
|
||||
- التحديات
|
||||
- لوحة المتصدرين
|
||||
- سلوك القيادة (Speed, Hard Brakes, Behavior Score)
|
||||
- الهدف اليومي
|
||||
|
||||
#### 12.8 الصفحة الشخصية
|
||||
- الصورة الشخصية
|
||||
- معلومات السيارة
|
||||
- إحصائيات السائق
|
||||
- أنواع المركبات المسموح بها
|
||||
|
||||
#### 12.9 الدعم والطوارئ
|
||||
- دردشة مع الدعم الفني
|
||||
- SOS مع إرسال الموقع الحي
|
||||
- مكالمة فيديو عبر Agora
|
||||
- تسجيل صوتي وإرسال للدعم
|
||||
|
||||
#### 12.10 إعدادات متقدمة
|
||||
- لغة التطبيق (عربي/إنكليزي)
|
||||
- إعدادات الصوت (رفع/خفض مستوى الصوت)
|
||||
- إعدادات الإشعارات
|
||||
- CarPlay
|
||||
|
||||
---
|
||||
|
||||
## 13. تطبيق الراكب (Rider)
|
||||
|
||||
### التقنية
|
||||
- **الإطار**: Flutter (Dart) — Android, iOS, Web
|
||||
- **إدارة الحالة**: GetX (معدل)
|
||||
- **الخرائط**: Google Maps + Here Maps + Map SaaS + OpenStreetMap
|
||||
- **الاتصالات**: Socket.IO (passenger_socket)
|
||||
- **الإشعارات**: FCM + Local Notifications
|
||||
- **المكالمات**: Agora SDK
|
||||
- **التسجيل**: Google Sign-In, Apple Sign-In, Firebase Auth
|
||||
- **التشفير**: secure_string_operations
|
||||
- **التعريب**: كامل (عربي/إنكليزي)
|
||||
|
||||
### الميزات الكاملة:
|
||||
|
||||
#### 13.1 طلب الرحلة
|
||||
- [x] إدخال الوجهة: بحث نصي، اختيار من الخريطة، الأماكن المحفوظة
|
||||
- [x] عرض السعر التقديري قبل الطلب
|
||||
- [x] اختيار نوع المركبة (12 نوعاً)
|
||||
- [x] خيارات إضافية: ملاحظات للسائق، الحجز لشخص آخر
|
||||
- [x] تأكيد الطلب
|
||||
|
||||
#### 13.2 أثناء الرحلة
|
||||
- [x] تتبع السائق المباشر على الخريطة
|
||||
- [x] اسم السائق، صورته، رقم السيارة
|
||||
- [x] وقت الوصول المتوقع (ETA)
|
||||
- [x] المسار المتبقي
|
||||
- [x] دردشة مع السائق
|
||||
- [x] مشاركة الموقع الحي مع طرف ثالث
|
||||
- [x] زر طوارئ (SOS)
|
||||
|
||||
#### 13.3 بعد الرحلة
|
||||
- [x] تقييم السائق (نجوم + تعليق)
|
||||
- [x] إضافة بقشيش (Tips)
|
||||
- [x] إبلاغ عن مشكلة
|
||||
|
||||
#### 13.4 المحفظة والدفع
|
||||
- [x] شحن المحفظة (PayMob, Stripe)
|
||||
- [x] اختيار طريقة الدفع (نقدي، محفظة، فيزا، MTN، سيريتل، E-Cash)
|
||||
- [x] سجل المعاملات
|
||||
- [x] كوبونات الخصم
|
||||
|
||||
#### 13.5 العروض والإحالة
|
||||
- [x] إدخال كود خصم
|
||||
- [x] عرض العروض المتاحة
|
||||
- [x] كود الإحالة الخاص
|
||||
- [x] مشاركة التطبيق
|
||||
|
||||
#### 13.6 حساب المستخدم
|
||||
- [x] تعديل الملف الشخصي
|
||||
- [x] الأماكن المفضلة
|
||||
- [x] سجل الرحلات
|
||||
- [x] مركز المساعدة
|
||||
- [x] الإعدادات (اللغة، الإشعارات)
|
||||
- [x] حذف الحساب
|
||||
|
||||
---
|
||||
|
||||
## 14. جاهزية النظام لثلاث دول
|
||||
|
||||
### 14.1 البنية التحتية لكل دولة
|
||||
|
||||
| المكون | سوريا | الأردن | مصر |
|
||||
|--------|-------|--------|-----|
|
||||
| **الخوادم** | خادم مخصص | خادم مخصص | خادم مخصص |
|
||||
| **قواعد البيانات** | منفصلة | منفصلة | منفصلة |
|
||||
| **الخرائط (Map SaaS)** | محدثة ~10 أيام | محدثة ~10 أيام | محدثة ~10 أيام |
|
||||
| **OSRM Routing** | خادم مخصص | خادم مخصص | خادم مخصص |
|
||||
| **طرق الدفع** | MTN, Syriatel, Visa, Cash, Wallet | Visa, Wallet, Cash | E-Cash, Visa, Wallet, Cash |
|
||||
| **بوابات الدفع** | PayMob, Stripe | PayMob, Stripe | PayMob, Stripe |
|
||||
| **SMS/OTP** | Twilio, WhatsApp | Twilio, WhatsApp | Kazumi SMS |
|
||||
| **Firebase** | ✅ | ✅ | ✅ |
|
||||
| **عدد السائقين** | ~1,200 | ~800 | قيد التشغيل |
|
||||
| **عدد الركاب** | ~1,800 | ~700 | قيد التشغيل |
|
||||
| **حالة السوق** | مباشر (Live) | مباشر (Live) | إطلاق وشيك |
|
||||
|
||||
### 14.2 نموذج البيانات متعدد الدول
|
||||
- **جدول العمولات**: per-country pricing في Kazan
|
||||
- **جدول العروض**: per-country promotions
|
||||
- **جدول الأسعار**: per-country fare calculation
|
||||
- **جدول العملات**: دعم العملات المختلفة (ليرة، دينار، جنيه)
|
||||
- **التحديات**: مكافآت بقيم خاصة بكل دولة
|
||||
- **الإشعارات**: رسائل خاصة بكل دولة
|
||||
|
||||
### 14.3 جاهزية التوسع لدول جديدة
|
||||
- إضافة دولة جديدة يتطلب:
|
||||
- خادم جديد أو تخصيص مساحة
|
||||
- تفعيل خريطة Map SaaS للدولة
|
||||
- ربط بوابات الدفع المحلية
|
||||
- تعديل أسعار Kazan
|
||||
- لا يتطلب تغيير في الكود الأساسي
|
||||
|
||||
---
|
||||
|
||||
## 15. الملخص التنفيذي للمستثمر
|
||||
|
||||
### ما الذي يملكه المستثمر؟
|
||||
|
||||
سيرو ليست مجرد تطبيق نقل — إنها **منظومة تقنية متكاملة** تتكون من:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ منظومة سيرو المتكاملة │
|
||||
├─────────────┬───────────────┬───────────────┬───────────────┤
|
||||
│ 4 تطبيقات │ 2 بوت آلي │ Marketing │ البنية التحتية │
|
||||
│ │ │ Engine │ │
|
||||
├─────────────┼───────────────┼───────────────┼───────────────┤
|
||||
│ • الراكب │ • Android Bot │ • AI تسعير │ • Map SaaS │
|
||||
│ • السائق │ (فحص أسعار) │ • حملات تلقائية│ • WebSocket │
|
||||
│ • الإدارة │ • Social Bot │ • Geofencing │ • Redis GIS │
|
||||
│ • الخدمة │ (تسويق) │ • Gemini AI │ • PostGIS │
|
||||
└─────────────┴───────────────┴───────────────┴───────────────┘
|
||||
```
|
||||
|
||||
### مصادر الدخل المتعددة:
|
||||
1. **عمولة الرحلات**: 10-20% حسب الدولة والنوع
|
||||
2. **الإعلانات (Ad Campaign SaaS)**: إيراد إعلاني مستقل
|
||||
3. **SiroMaps SaaS**: تأجير محرك الخرائط لتطبيقات أخرى
|
||||
4. **الاشتراكات**: خطط اشتراك للسائقين
|
||||
5. **العروض الترويجية**: شراكات مع العلامات التجارية
|
||||
|
||||
### الميزة التنافسية الرئيسية:
|
||||
- **خرائط مملوكة تنفرد بها سيرو** في المنطقة — تحديث كل 10 أيام بتكلفة $0
|
||||
- لا تعتمد سيرو على Google Maps مما يوفر $800-$30,000 شهرياً
|
||||
- **بوتات ذكاء اصطناعي** تراقب السوق 24/7
|
||||
- **منظومة كاملة** من 4 تطبيقات + بوتين + محرك تسويق
|
||||
- **جاهزة لثلاث دول** مع بنية تحتية قابلة للتوسع
|
||||
|
||||
### وضع السوق الحالي:
|
||||
| الدولة | الوضع | عدد السائقين | عدد الركاب |
|
||||
|--------|-------|-------------|-----------|
|
||||
| سوريا | ✅ مباشر | ~1,200 | ~1,800 |
|
||||
| الأردن | ✅ مباشر | ~800 | ~700 |
|
||||
| مصر | 🔄 إطلاق وشيك | — | — |
|
||||
|
||||
### خلاصة
|
||||
سيرو تقدم فرصة استثمارية فريدة في قطاع النقل الذكي بمنطقة الشرق الأوسط، مع **منتج جاهز 100%**، **ترخيص حكومي رسمي**، **خرائط مملوكة**، **بوتات ذكاء اصطناعي**، ونظام تسويق متكامل — كل هذا يعمل في 3 دول مع بنية تحتية قابلة للتوسع لأي دولة جديدة.
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
## 16. تحليل استهلاك البطارية وأداء التطبيق
|
||||
|
||||
### 16.1 التقييم العام
|
||||
| المجال | التقييم | ملاحظات |
|
||||
|--------|---------|---------|
|
||||
| استهلاك البطارية (GPS) | ⭐⭐⭐⭐☆ | نظام متكيف جيد |
|
||||
| استهلاك البطارية (خلفية) | ⭐⭐⭐⭐⭐ | لا GPS في الخدمة الخلفية |
|
||||
| سرعة التطبيق | ⭐⭐⭐⭐☆ | GetX سريع، بدء التشغيل بطيء |
|
||||
| استهلاك الذاكرة | ⭐⭐⭐⭐☆ | Lazy loading + Buffer limits |
|
||||
| حجم التطبيق | ⭐⭐⭐☆☆ | كبير نسبياً |
|
||||
|
||||
### 16.2 نظام GPS المتكيف
|
||||
| الوضع | GPS Interval | Distance Filter | Upload Batch |
|
||||
|-------|-------------|-----------------|--------------|
|
||||
| طبيعي (بطارية > 25%) | 5 ثوانٍ | 10 متر | كل دقيقتين |
|
||||
| توفير طاقة (بطارية ≤ 20%) | 10 ثوانٍ | 20 متر | كل 5 دقائق |
|
||||
|
||||
**آليات التوفير الإضافية:**
|
||||
- **تسجيل ذكي**: يسجل المسار فقط إذا تحرك >10m AND سرعة >0.5 m/s
|
||||
- **Heartbeat ذكي**: يتخطى الـ Heartbeat إذا GPS نشط
|
||||
- **Batch Upload**: رفع مجمع كل 2-5 دقائق بدلاً من كل ثانية
|
||||
- **Geofencing (Hardware-level)**: يستخدم GeofencingApi بدلاً من GPS المستمر
|
||||
- **iOS**: لا يشغل Background Service أبداً (توفير إضافي)
|
||||
|
||||
### 16.3 نقاط الضعف المطلوب تحسينها
|
||||
| المشكلة | التأثير | الحل المقترح | الجهد |
|
||||
|---------|---------|--------------|-------|
|
||||
| WakeLock دائم التشغيل | يستنزف البطارية خارج الرحلات | تشغيل فقط أثناء الرحلة النشطة | يوم |
|
||||
| GPS accuracy = navigation دائماً | استهلاك زائد | استخدام high في توفير الطاقة | ساعتان |
|
||||
| عدم التكيف مع السرعة | Polling موحد | إيقاف GPS عند السرعة = 0 | يوم |
|
||||
| حجم التطبيق كبير | تحميل أبطأ | Android App Bundle | مستمر |
|
||||
| بدء التشغيل بطيء | تجربة مستخدم سيئة | تأجيل Initialization | يومان |
|
||||
|
||||
---
|
||||
|
||||
## 17. الميزات الصوتية والموسيقى
|
||||
|
||||
### 17.1 الوضع الحالي — محدود
|
||||
| المجال | الحالة | التقنية |
|
||||
|--------|--------|---------|
|
||||
| TTS (نص إلى كلام) | ✅ موجود | flutter_tts للملاحة الصوتية |
|
||||
| مؤثرات صوتية | ✅ موجود | just_audio لأصوات التنبيهات |
|
||||
| مكالمات صوتية | ✅ موجود | WebRTC + Agora |
|
||||
| تسجيل صوتي | ✅ موجود | record AAC-LC |
|
||||
| **موسيقى/ترفيه صوتي** | **❌ غير موجود** | **فرصة كبرى** |
|
||||
|
||||
### 17.2 الفجوة التنافسية — فرصة ذهبية
|
||||
| الميزة | سيرو | أوبر |
|
||||
|--------|------|------|
|
||||
| موسيقى في الكابينة | ❌ | ✅ (Spotify) |
|
||||
| راديو داخلي | ❌ | ❌ |
|
||||
| أوامر صوتية | ❌ | ❌ |
|
||||
| بودكاست تعليمي | ❌ | ❌ |
|
||||
|
||||
### 17.3 خطة تطوير الموسيقى
|
||||
| المرحلة | الميزة | الجهد | الإيراد المتوقع |
|
||||
|---------|--------|-------|-----------------|
|
||||
| شهر 1 | Sound Zones + تحسين المؤثرات | 3 أيام | غير مباشر |
|
||||
| شهر 2-3 | Siro Radio (إذاعة داخلية + إعلانات) | 3 أسابيع | $500-$2,000/شهر |
|
||||
| شهر 3-4 | Spotify/Apple Music Integration | 3 أسابيع | $200-$800/شهر |
|
||||
| شهر 4-6 | محتوى تعليمي (بودكاست) | 3 أسابيع | $100-$500/شهر |
|
||||
|
||||
**الإيرادات المتوقعة من الموسيقى**: $800 - $3,300 شهرياً (إعلانات + إحالات + محتوى مدفوع)
|
||||
|
||||
---
|
||||
|
||||
## 18. الميزات التنافسية الجديدة المقترحة
|
||||
|
||||
### 18.1 جدول الميزات المقترحة حسب الأولوية
|
||||
|
||||
| الأولوية | الميزة | الجهد | الأثر المتوقع |
|
||||
|----------|--------|-------|---------------|
|
||||
| 🥇 1 | **Smart WakeLock** — تشغيل WakeLock فقط أثناء الرحلة | 1 أسبوع | توفير بطارية 67% |
|
||||
| 🥇 2 | **Scheduled Rides (حجوزات مسبقة)** | 2-3 أسابيع | شريحة عملاء جديدة |
|
||||
| 🥇 3 | **AI Customer Support (شات بوت ذكي)** | 4-6 أسابيع | توفير 70% دعم |
|
||||
| 🥇 4 | **Carpool (مشاركة الرحلة)** | 3-4 أسابيع | مضاعفة الرحلات |
|
||||
| 🥇 5 | **Safety Recording (تسجيل أمان تلقائي)** | 2-3 أسابيع | ثقة + أمان |
|
||||
| 🥈 6 | **Spotify/Apple Music** | 3-4 أسابيع | تمييز تنافسي |
|
||||
| 🥈 7 | **Split Fare (تقسيم الفاتورة)** | 2 أسبوع | راحة الراكب |
|
||||
| 🥈 8 | **Parcel Tracking (تتبع الطرود)** | 3-4 أسابيع | تحسين التوصيل |
|
||||
| 🥈 9 | **Driver Real-time Dashboard** | 2-3 أسابيع | إنتاجية السائق |
|
||||
| 🥈 10 | **Voice Assistant** | 4-6 أسابيع | واجهة جديدة |
|
||||
| 🥉 11 | **Siro Market (سوق إلكتروني)** | 8-12 أسبوع | $5k-$15k/شهر |
|
||||
| 🥉 12 | **Driver Subscription Model** | 4-6 أسابيع | $3k-$8k/شهر |
|
||||
| 🥉 13 | **Web Version للراكب** | 4-6 أسابيع | وصول أوسع |
|
||||
| 🥉 14 | **Dashcam Integration** | 4-6 أسابيع | أمان + توثيق |
|
||||
| 🥉 15 | **In-app Games** | 3-4 أسابيع | تجربة انتظار |
|
||||
|
||||
### 18.2 تحليل ROI للميزات المقترحة
|
||||
|
||||
| الميزة | التكلفة التقديرية | العائد الشهري المتوقع | فترة الاسترداد |
|
||||
|--------|-------------------|----------------------|----------------|
|
||||
| Carpool | $3k-$5k | $2k-$5k | 1-2 شهر |
|
||||
| الحجوزات المسبقة | $2k-$3k | $1k-$3k | 1-3 شهر |
|
||||
| AI Support | $2k-$4k | توفير $1.5k-$3k | 1-3 شهر |
|
||||
| Siro Market | $8k-$15k | $5k-$15k | 1-3 شهر |
|
||||
| Driver Subscription | $2k-$3k | $3k-$8k | شهر واحد |
|
||||
| Spotify Music | $2k-$4k | $0.5k-$2k | 2-4 شهر |
|
||||
| **الإجمالي** | **$19k-$34k** | **$13k-$36k/شهر** | **1-3 شهر** |
|
||||
|
||||
---
|
||||
|
||||
## 19. بطاقة الابتكار (Innovation Scorecard)
|
||||
|
||||
| المجال | التقييم | ملاحظات |
|
||||
|--------|---------|---------|
|
||||
| الهندسة المعمارية | 9/10 | WebSocket مزدوج، GIS SPATIAL، Redis |
|
||||
| اكتمال الميزات | 9/10 | +200 ميزة عبر 4 تطبيقات |
|
||||
| تحسين البطارية | 7/10 | نظام متكيف جيد، WakeLock يحتاج تحسين |
|
||||
| الأداء والسرعة | 7/10 | GetX يساعد، حجم التطبيق كبير |
|
||||
| الصوت والموسيقى | 4/10 | مكالمات فقط — لا ترفيه موسيقي |
|
||||
| تكامل الذكاء الاصطناعي | 9/10 | 3 محركات + تسويق + تسعير |
|
||||
| طرق الدفع | 9/10 | 7 طرق تشمل المحافظ المحلية |
|
||||
| الإدارة والمراقبة | 9/10 | +15 وحدة، مراقبة حية، سجلات |
|
||||
| الأمان | 9/10 | JWT، بصمة، SSL Pinning، تشفير |
|
||||
| قابلية التوسع | 8/10 | 3 دول، modular، جاهز للتوسع |
|
||||
| الاستخبارات التسويقية | 10/10 | بوت أندرويد + محرك تسعير — فريد |
|
||||
| أتمتة التسويق | 9/10 | AI Content، Social Bot، Campaigns |
|
||||
| تجربة السائق | 9/10 | Gamification، Overlay، Behavior Score |
|
||||
| تجربة الراكب | 8/10 | ميزات ممتازة، ينقصها Carpool وحجوزات |
|
||||
| الابتكار والتميز | 9/10 | خرائط خاصة، بوتات، Overlay — فريد بالمنطقة |
|
||||
| **المجموع** | **8.3/10** | منصة قوية مع مجالات تحسين واضحة |
|
||||
|
||||
---
|
||||
|
||||
## 20. الملخص التنفيذي — فرص النمو
|
||||
|
||||
### الميزات الحالية (نقاط القوة)
|
||||
- 12 نوع مركبة (الأكثر في المنطقة)
|
||||
- 7 طرق دفع محلية
|
||||
- بوتات استخبارات تسويقية (فريدة)
|
||||
- Overlay أندرويد (فريد)
|
||||
- خرائط مملوكة (توفير $800-$30,000/شهر)
|
||||
- محرك تسعير ذكي (Node.js + AI)
|
||||
|
||||
### الفرص الأكثر ربحاً
|
||||
1. **Siro Market** — $5k-$15k/شهر إضافية
|
||||
2. **Driver Subscription** — $3k-$8k/شهر إضافية
|
||||
3. **Carpool** — مضاعفة الرحلات + $2k-$5k/شهر
|
||||
4. **AI Customer Support** — توفير $1.5k-$3k/شهر
|
||||
5. **Siro Radio + إعلانات** — $0.5k-$2k/شهر
|
||||
|
||||
### التحسينات المطلوبة فوراً
|
||||
1. Smart WakeLock (بطارية أفضل)
|
||||
2. تحسين حجم التطبيق
|
||||
3. تسريع بدء التشغيل
|
||||
4. GPS Speed-adaptive
|
||||
|
||||
### خطة الاستثمار المقترحة
|
||||
| البند | المبلغ المقترح |
|
||||
|------|----------------|
|
||||
| تطوير الميزات الجديدة (Carpool, حجوزات, AI) | $8,000 - $12,000 |
|
||||
| تحسين الأداء والبطارية | $1,000 - $2,000 |
|
||||
| الموسيقى والترفيه الصوتي | $3,000 - $5,000 |
|
||||
| Siro Market (المرحلة الأولى) | $8,000 - $12,000 |
|
||||
| **الإجمالي** | **$20,000 - $31,000** |
|
||||
| **العائد الشهري المتوقع** | **$13,000 - $36,000** |
|
||||
| **فترة الاسترداد** | **1-3 أشهر** |
|
||||
|
||||
---
|
||||
|
||||
> **سيرو — أول منصة نقل ذكي بمحرك خرائط مملوك وبوتات استخبارات تسويقية في المنطقة**
|
||||
>
|
||||
> **النسخة المحدثة:** 2.0 | **تاريخ التحديث:** يوليو 2026
|
||||
> **تمت إضافة:** تحليل البطارية، تحليل الموسيقى، 18 ميزة تنافسية جديدة، Innovation Scorecard
|
||||
Binary file not shown.
@@ -0,0 +1,898 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ar" dir="rtl">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>مولد ومطبع عقد شراكة Siro القانوني المطور - مصر</title>
|
||||
<!-- Google Fonts: Amiri & Inter for highly clean and modern tech-corporate document rendering -->
|
||||
<link href="https://fonts.googleapis.com/css2?family=Amiri:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
|
||||
<!-- Tailwind CSS -->
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'Amiri', 'sans-serif'],
|
||||
serif: ['Inter', 'Amiri', 'serif'],
|
||||
},
|
||||
colors: {
|
||||
legal: {
|
||||
800: '#1e293b',
|
||||
900: '#0f172a',
|
||||
gold: '#c5a880',
|
||||
goldHover: '#b3956d'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
body {
|
||||
background-color: #f8fafc;
|
||||
}
|
||||
|
||||
/* Mockup standard sheet configuration */
|
||||
.paper-sheet {
|
||||
background: #ffffff;
|
||||
box-shadow: 0 4px 20px -2px rgba(0, 0, 0, 0.05), 0 2px 10px -4px rgba(0, 0, 0, 0.05);
|
||||
position: relative;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
/* Dynamic interaction fields highlighting */
|
||||
.highlight-field {
|
||||
border-bottom: 1.5px dashed #c5a880;
|
||||
color: #0f172a;
|
||||
font-weight: 700;
|
||||
padding: 0 4px;
|
||||
transition: all 0.2s ease;
|
||||
background-color: rgba(197, 168, 128, 0.06);
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.highlight-field:empty::before {
|
||||
content: ".......................................................";
|
||||
color: #94a3b8;
|
||||
font-weight: 300;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
/* Advanced Print configuration targeting exactly 3 compact pages */
|
||||
@media print {
|
||||
body {
|
||||
background: #ffffff !important;
|
||||
color: #000000 !important;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
}
|
||||
.no-print {
|
||||
display: none !important;
|
||||
}
|
||||
.print-page {
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
width: 100% !important;
|
||||
max-width: 100% !important;
|
||||
height: auto !important;
|
||||
background: transparent !important;
|
||||
}
|
||||
.contract-container {
|
||||
border: none !important;
|
||||
padding: 10mm 10mm !important;
|
||||
}
|
||||
.page-break {
|
||||
page-break-after: always;
|
||||
break-after: page;
|
||||
margin-top: 20px;
|
||||
height: 0;
|
||||
}
|
||||
@page {
|
||||
size: A4;
|
||||
margin: 12mm 12mm;
|
||||
}
|
||||
.table-header-print {
|
||||
background-color: #f8fafc !important;
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="font-sans text-slate-800 antialiased min-h-screen flex flex-col">
|
||||
|
||||
<!-- Top Navbar (hidden on print) -->
|
||||
<header class="bg-legal-900 text-white py-3.5 px-6 shadow-md border-b border-legal-gold/20 no-print sticky top-0 z-50">
|
||||
<div class="max-w-7xl mx-auto flex flex-col md:flex-row justify-between items-center gap-4">
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="bg-gradient-to-tr from-legal-gold to-amber-500 p-2 rounded-xl">
|
||||
<svg class="w-6 h-6 text-legal-900" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M9 20l-5.447-2.724A1 1 0 013 16.382V5.618a1 1 0 011.447-.894L9 7m0 13l6-3m-6 3V7m6 10l4.553 2.276A1 1 0 0021 18.382V7.618a1 1 0 00-.553-.894L15 4m0 13V4m0 0L9 7"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<h1 class="text-lg font-bold tracking-wide flex items-center gap-2"><span class="text-legal-gold font-extrabold">Siro</span></h1>
|
||||
<p class="text-[10px] text-slate-400">توليد وطباعة العقد القانوني لجمهورية مصر العربية</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-3">
|
||||
<button onclick="window.print();" class="bg-legal-gold hover:bg-legal-goldHover text-legal-900 px-5 py-2 rounded-lg font-bold shadow-lg shadow-legal-gold/20 flex items-center gap-2 transition-all duration-200 transform active:scale-95 text-sm">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h10a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z"></path>
|
||||
</svg>
|
||||
طباعة العقد (حفظ PDF)
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Main Content Layout -->
|
||||
<div class="flex-1 max-w-7xl w-full mx-auto p-4 md:p-6 grid grid-cols-1 lg:grid-cols-12 gap-6 items-start">
|
||||
|
||||
<!-- Controls Sidebar Panel (hidden on print) -->
|
||||
<aside class="lg:col-span-4 bg-white p-5 rounded-xl shadow-sm border border-slate-200 no-print space-y-5">
|
||||
<div class="border-b border-slate-100 pb-3">
|
||||
<h2 class="text-base font-bold text-legal-900 flex items-center gap-2">
|
||||
<svg class="w-4 h-4 text-legal-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2.5 2.5 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"></path>
|
||||
</svg>
|
||||
لوحة التحكم الذكية بالعقد
|
||||
</h2>
|
||||
<p class="text-[11px] text-slate-500 mt-0.5">يمكنك إضافة وتعديل بيانات الأطراف وحصصهم لتحديث العقد فورياً.</p>
|
||||
</div>
|
||||
|
||||
<!-- Inputs Sections -->
|
||||
<div class="space-y-4">
|
||||
|
||||
<div class="bg-slate-50 p-3 rounded-lg space-y-2.5 border border-slate-100">
|
||||
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">التواريخ والمعلومات الأساسية</h3>
|
||||
<div class="grid grid-cols-2 gap-2">
|
||||
<div>
|
||||
<label class="block text-[11px] text-slate-600 font-semibold mb-1">تاريخ تحرير العقد</label>
|
||||
<input type="text" id="input-date" value="14/06/2026م" placeholder="مثال: 14/06/2026م" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] text-slate-600 font-semibold mb-1">قيمة رأس المال</label>
|
||||
<input type="number" id="input-capital" value="300000" placeholder="مثال: 300000" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-2 gap-2">
|
||||
<div>
|
||||
<label class="block text-[11px] text-slate-600 font-semibold mb-1">المبلغ كتابة</label>
|
||||
<input type="text" id="input-capital-words" value="ثلاثمائة ألف دولار أمريكي" placeholder="مثال: ثلاثمائة ألف دولار أمريكي" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] text-slate-600 font-semibold mb-1">رمز العملة (اختصار)</label>
|
||||
<input type="text" id="input-currency" value="USD" placeholder="مثال: USD" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Founders Section -->
|
||||
<div class="bg-slate-50 p-3 rounded-lg border border-slate-100 space-y-3">
|
||||
<div class="flex justify-between items-center">
|
||||
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">الطرف الأول (المؤسسون - بحد أقصى 3)</h3>
|
||||
<button id="btn-add-founder" onclick="addFounder()" class="text-[11px] font-bold text-legal-gold hover:text-legal-goldHover flex items-center gap-0.5">
|
||||
+ إضافة مؤسس
|
||||
</button>
|
||||
</div>
|
||||
<div id="founders-container" class="space-y-3">
|
||||
<!-- Dynamic Founders Form Fields -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Investors Section -->
|
||||
<div class="bg-slate-50 p-3 rounded-lg border border-slate-100 space-y-3">
|
||||
<div class="flex justify-between items-center">
|
||||
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">الطرف الثاني (الشركاء المستثمرون - بحد أقصى 3)</h3>
|
||||
<button id="btn-add-partner" onclick="addPartner()" class="text-[11px] font-bold text-legal-gold hover:text-legal-goldHover flex items-center gap-0.5">
|
||||
+ إضافة شريك
|
||||
</button>
|
||||
</div>
|
||||
<div id="partners-container" class="space-y-3">
|
||||
<!-- Dynamic Partners Form Fields -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Validation & Status Indicator -->
|
||||
<div class="bg-slate-50 p-3 rounded-lg space-y-2 border border-slate-100">
|
||||
<div class="flex justify-between items-center">
|
||||
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">مجموع الحصص %</h3>
|
||||
<span id="share-indicator" class="text-[10px] font-bold px-1.5 py-0.5 rounded-full bg-red-100 text-red-600">
|
||||
المجموع: <span id="share-sum">0</span>%
|
||||
</span>
|
||||
</div>
|
||||
<div id="share-validation-msg" class="text-[11px] p-2 rounded bg-red-50 text-red-700 font-medium leading-relaxed">
|
||||
⚠️ مجموع الحصص يجب أن يكون 100% لتصحيح صياغة العقد.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Guidelines / Best Practices for print -->
|
||||
<div class="p-3.5 rounded-lg border border-legal-gold/20 bg-legal-900 text-white space-y-1.5">
|
||||
<h4 class="text-xs font-bold text-legal-gold flex items-center gap-1">
|
||||
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
||||
</svg>
|
||||
دليل حفظ مستند PDF مثالي:
|
||||
</h4>
|
||||
<ul class="text-[11px] text-slate-300 space-y-1 list-disc list-inside">
|
||||
<li>تأكد من تفعيل خيار <b class="text-legal-gold">رسومات الخلفية</b> في خيارات الطباعة بالمتصفح.</li>
|
||||
<li>ألغِ خيار <b class="text-legal-gold">الرؤوس والتذييلات</b> لإلغاء روابط المواقع.</li>
|
||||
<li>استخدم خيار "حفظ بتنسيق PDF" لإنتاج ملف جاهز فوري.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<!-- Document Sheet Area -->
|
||||
<main class="lg:col-span-8 flex flex-col items-center">
|
||||
|
||||
<div class="w-full max-w-[210mm] paper-sheet print-page rounded-xl border border-slate-200 overflow-hidden mb-6 transition-all duration-300">
|
||||
|
||||
<!-- Inner formal border (Configured to use clean modern font-serif mapping to Inter) -->
|
||||
<div class="contract-container p-6 md:p-10 lg:p-12 text-slate-900 font-serif text-justify text-[13.5px] leading-relaxed" id="contract-document">
|
||||
|
||||
<!-- Official Header & Siro Logo -->
|
||||
<div class="flex flex-col items-center text-center border-b-2 border-slate-800 pb-4 mb-6">
|
||||
|
||||
<!-- Official Premium Siro Logo -->
|
||||
<div class="mb-3">
|
||||
<img src="logo.png" class="h-14 mx-auto" alt="Siro Logo">
|
||||
</div>
|
||||
<h1 class="text-base md:text-lg font-bold text-slate-950 font-sans tracking-wide">عقد شراكة واستثمار تجاري لتشغيل تطبيق "Siro"</h1>
|
||||
<p class="text-sm font-bold text-slate-800 font-sans">في جمهورية مصر العربية</p>
|
||||
|
||||
<div class="w-full flex justify-between items-center text-[10px] font-sans text-slate-500 mt-2.5 px-2">
|
||||
<span><strong>الرقم المرجعي:</strong> SIRO-INV-EG-2026-001</span>
|
||||
<span><strong>تاريخ التحرير:</strong> <span id="sync-contract-date" class="font-bold text-slate-900">14/06/2026م</span></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Intro Block -->
|
||||
<div class="space-y-5">
|
||||
<p class="leading-normal">
|
||||
تم تحرير هذا العقد وتوثيقه في اليوم الموافق
|
||||
<span id="sync-text-date" class="highlight-field">14/06/2026م</span> ميلادي، بين كلٍّ من:
|
||||
</p>
|
||||
|
||||
<!-- Parties Info -->
|
||||
<div class="space-y-3">
|
||||
<div>
|
||||
<h3 class="font-sans font-bold text-slate-950 border-r-3 border-legal-gold pr-2 text-[13px]">الطرف الأول (المؤسسون – الشريك الإداري والتقني):</h3>
|
||||
<div id="doc-founders-list" class="pr-3 mt-1 space-y-1.5">
|
||||
<!-- Dynamic Founders List -->
|
||||
</div>
|
||||
<p class="text-[11px] text-slate-500 italic pr-3 mt-0.5 font-sans">
|
||||
(ويُشار إليهما مجتمعَيْن بـ <strong>"الطرف الأول"</strong> أو <strong>"الشركاء المؤسسون"</strong>).
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3 class="font-sans font-bold text-slate-950 border-r-3 border-legal-gold pr-2 text-[13px]">الطرف الثاني (الشركاء المستثمرون):</h3>
|
||||
<div id="doc-partners-list" class="pr-3 mt-1 space-y-1.5">
|
||||
<!-- Dynamic Partners List -->
|
||||
</div>
|
||||
<p class="text-[11px] text-slate-500 italic pr-3 mt-0.5 font-sans">
|
||||
(ويُشار إليهم مجتمعين بـ <strong>"الطرف الثاني"</strong> أو <strong>"الشركاء المستثمرون"</strong>).
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Preamble -->
|
||||
<div>
|
||||
<h3 class="font-sans font-extrabold text-slate-950 text-[14px] mb-1">التمهيد</h3>
|
||||
<div class="space-y-2">
|
||||
<p>
|
||||
<strong>حيث إن</strong> الطرف الأول يمتلك ويُدير منظومة برمجية ومنصة تقنية متطورة للنقل الذكي وتسهيل التنقل الحضري وتوصيل الركاب تحمل اسم <strong>"Siro"</strong> ومصممة وفق أحدث المعايير الهندسية والبرمجية العالمية؛
|
||||
</p>
|
||||
<p>
|
||||
<strong>وحيث إن</strong> الطرف الثاني (الشركاء المستثمرون) يرغبون في تقديم تمويل استثماري لتغطية تكاليف إطلاق التطبيق وتشغيله وتسويقه داخل السوق المصرية مقابل حصة من صافي الأرباح التشغيلية؛
|
||||
</p>
|
||||
<p>
|
||||
<strong>وحيث إن</strong> إرادة الأطراف قد التقت على تأسيس شراكة تجارية واستثمارية مشتركة قائمة على الشفافية والالتزام المتبادل؛
|
||||
</p>
|
||||
<p class="font-bold border-r-2 border-slate-400 pr-2">
|
||||
فقد اتفق الأطراف — بعد إقرارهم بكامل أهليتهم القانونية للتعاقد — على ما يلي:
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Articles and clauses flow -->
|
||||
<div class="space-y-4 pt-2">
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الأولى: نطاق التمهيد</h4>
|
||||
<p>يُعدّ التمهيد المذكور أعلاه جزءاً لا يتجزأ من هذا العقد، ويُقرأ ويُفسَّر ضمن سياقه.</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثانية: موضوع العقد والنطاق الجغرافي</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>موضوع هذا العقد هو تنظيم العلاقة التجارية والاستثمارية بين الأطراف لتشغيل واستغلال تطبيق <strong>"Siro"</strong> تجارياً وخدمياً وتسويقياً.</li>
|
||||
<li>يقتصر النطاق الجغرافي لهذا العقد حصراً على أراضي <strong>جمهورية مصر العربية</strong>. ولا يشمل هذا العقد أي سوق أو دولة أخرى يعمل فيها التطبيق أو قد يتوسع إليها مستقبلاً.</li>
|
||||
<li>لا يجوز توسيع النطاق الجغرافي لهذا العقد إلا بموجب ملحق تعديلي خطّي موقّع من جميع الأطراف.</li>
|
||||
<li><strong>حق الأولوية في التوسع الدولي:</strong> في حال رغبة الطرف الأول في توسيع النطاق الجغرافي للمشروع وتشغيل تطبيق Siro في أي دولة أو سوق خارج جمهورية مصر العربية، يلتزم الطرف الأول بعرض هذه الفرصة الاستثمارية الجديدة على الطرف الثاني خطياً قبل عرضها على أي طرف ثالث. ويكون للطرف الثاني حق الأولوية (Right of First Refusal) في الاستثمار والمشاركة في السوق الجديد بذات الشروط أو بشروط يتم التوافق عليها، على أن يبدي الطرف الثاني رغبته خطياً خلال مدة لا تتجاوز <strong>أسبوعاً واحداً (7 أيام)</strong> من تاريخ استلام العرض المكتوب، وفي حال انقضاء هذه المدة دون رد أو في حال اعتذاره خطياً، يحق للطرف الأول التعاقد مع مستثمرين آخرين بحرية تامة ودون أي التزام تجاه الطرف الثاني.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثالثة: رأس المال الاستثماري وآلية الدفع</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يلتزم الطرف الثاني بتقديم رأس مال استثماري إجمالي قدره <strong class="sync-capital-words-span">ثلاثمائة ألف دولار أمريكي</strong> (<strong class="sync-capital-number-span">300,000</strong> <strong class="sync-currency-span">USD</strong>) لتمويل عمليات إطلاق المشروع وتشغيله في مصر.</li>
|
||||
<li>يُسدَّد رأس المال الاستثماري على دفعات مجدولة ومرنة يتم التوافق عليها ودياً بين الأطراف بما يتماشى مع خطة العمل والاحتياجات التشغيلية للمشروع.</li>
|
||||
<li>تُودع جميع المبالغ والدفعات الاستثمارية في الحساب المصرفي التجاري للشركة في المملكة الأردنية الهاشمية، وذلك بعد إتمام تأسيس وتسجيل الشركة رسمياً وفتح حسابها التجاري في الأردن، لضمان وتسهيل انسياب وحركة الأموال التشغيلية والاستثمارية دخولاً وخروجاً.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- Page Break for elegant Print Layout -->
|
||||
<div class="page-break no-print my-4 border-t-2 border-dashed border-slate-200"></div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الرابعة: التزامات الأطراف</h4>
|
||||
<div class="space-y-3">
|
||||
<div>
|
||||
<h5 class="font-bold text-slate-900 text-[12.5px]">أولاً: التزامات الطرف الأول (الشركاء المؤسسون)</h5>
|
||||
<ol class="list-decimal list-inside space-y-1 pr-3 mt-1">
|
||||
<li>يتحمل الطرف الأول المسؤولية الكاملة والحصرية عن الجوانب التقنية والفنية والتشغيلية والإدارية للتطبيق، بما يشمل — دون حصر — التطوير البرمجي، وإدارة الخوادم، والصيانة الدورية، وإصلاح الأعطال الفنية، وإدارة فريق العمل التقني.</li>
|
||||
<li>إصدار التحديثات والتطويرات المستمرة لتطبيقَيْ الراكب والسائق بما يتلاءم مع متطلبات السوق المصرية ويضمن تنافسية المنتج.</li>
|
||||
<li>تقديم تقرير أداء تشغيلي ومالي للطرف الثاني بشكل <strong>شهري</strong> يتضمن: عدد الرحلات المنفذة، عدد السائقين والركاب النشطين، الإيرادات الإجمالية، المصروفات التشغيلية، وصافي الأرباح.</li>
|
||||
<li>ضمان استمرارية الخدمة وتوفّر التطبيق لمستخدميه بنسبة لا تقل عن <strong>95%</strong> من أيام التشغيل الشهري (باستثناء حالات القوة القاهرة والصيانة المجدولة).</li>
|
||||
<li>الالتحاق والالتزام بالعمل الفني والتقني المستمر والدؤوب على تحديث وتطوير وصيانة نظام وتطبيقات Siro بانتظام، لضمان استقرار الخدمة وتشغيلها بكفاءة عالية وتلبية احتياجات السوق المصرية.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h5 class="font-bold text-slate-900 text-[12.5px]">ثانياً: التزامات الطرف الثاني (الشركاء المستثمرون)</h5>
|
||||
<ol class="list-decimal list-inside space-y-1 pr-3 mt-1">
|
||||
<li>الالتحاق بسداد كامل رأس المال الاستثماري المتفق عليه وقدره (<span class="sync-capital-words-span">ثلاثمائة ألف دولار أمريكي</span>) وفق جدول الدفعات المحدد في المادة الثالثة.</li>
|
||||
<li>المساهمة الفعّالة بخبراتهم اللوجستية والعلاقاتية لتسهيل العمل التجاري داخل السوق المصرية ودعم عمليات التسجيل والتوسع الميداني.</li>
|
||||
<li class="font-semibold text-slate-950 bg-slate-50 p-1.5 rounded border-r-2 border-slate-300">
|
||||
التعهد بمنح الطرف الأول الصلاحية الكاملة والمستقلة في اتخاذ القرارات الفنية والهندسية والبرمجية الخاصة بالتطبيق لضمان سير العمل واستقراره التشغيلي والتقني دون إعاقة؛
|
||||
</li>
|
||||
<li>التعاون الكامل مع الطرف الأول في توفير أي متطلبات إدارية أو تنظيمية أو حكومية تلزم لتشغيل المشروع داخل مصر.</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الخامسة: نسب الشراكة وتوزيع الأرباح</h4>
|
||||
<ol class="list-decimal list-inside space-y-2">
|
||||
<li>يتم توزيع <strong>صافي الأرباح التشغيلية</strong> الناتجة عن تشغيل التطبيق في مصر — بعد خصم كافة المصاريف التشغيلية والإدارية، وتكاليف الخوادم والبنية التحتية، والضرائب والرسوم الحكومية، وأجور فريق الدعم الفني والميداني — وفق النسب التالية:</li>
|
||||
</ol>
|
||||
|
||||
<!-- Table Block Inside Paper -->
|
||||
<div class="my-3 overflow-x-auto">
|
||||
<table class="w-full border-collapse border border-slate-800 text-center text-xs font-sans">
|
||||
<thead>
|
||||
<tr class="table-header-print bg-slate-50 text-slate-900 font-bold border-b border-slate-800">
|
||||
<th class="border border-slate-800 p-2 text-right pr-4">الشريك</th>
|
||||
<th class="border border-slate-800 p-2">الصفة التعاقدية</th>
|
||||
<th class="border border-slate-800 p-2 w-1/4">الحصة من صافي الأرباح</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="doc-shares-table-body">
|
||||
<!-- Dynamic Share Table Rows -->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<ol class="list-decimal list-inside space-y-1" start="2">
|
||||
<li>تُوزَّع الأرباح بصفة <strong>ربع سنوية</strong> (كل ثلاثة أشهر ميلادية) بناءً على القوائم المالية المعتمدة والمدقّقة لعمليات التطبيق في مصر.</li>
|
||||
<li>لا تُوزَّع الأرباح إلا بعد تخصيص <strong>احتياطي تشغيلي</strong> بنسبة لا تقل عن <strong>10%</strong> من صافي الأرباح لتغطية الطوارئ والنفقات المستقبلية، ويتم الاتفاق بين الشركاء على آلية التصرف في هذا الاحتياطي.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة السادسة: فسخ العقد وتصفية الشراكة</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li class="font-semibold text-slate-950">
|
||||
في حال فسخ هذا العقد أو تصفية المشروع لأي سبب كان قبل استرداد الطرف الثاني لكامل رأس ماله الاستثماري، يكون للطرف الثاني الأولوية المطلقة في الحصول على المبالغ المتبقية والغير مصروفة من رأس ماله الفعلي (بعد خصم كافة النفقات التشغيلية والرواتب والمصاريف الإعلانية المنقضية والمثبتة محاسبياً) من أي عوائد تشغيلية متراكمة أو أصول ملموسة قابلة للتسييل مرتبطة بنشاط المشروع في مصر حصراً، دون أن يحق له مطالبة الشركاء شخصياً بأي مبالغ تم صرفها وتسييرها في النفقات المذكورة.
|
||||
</li>
|
||||
<li>يتم تصفية جميع الحقوق والالتزامات المالية العالقة بين الأطراف عند الفسخ أو التصفية بما يتوافق مع القواعد القانونية والتجارية السائدة، وبما يضمن عدم الإضرار بأي طرف.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة السابعة: الملكية الفكرية والعلامة التجارية</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li id="ip-ownership-clause" class="bg-amber-100/40 p-2.5 rounded border-r-4 border-legal-gold leading-relaxed font-semibold text-slate-950">
|
||||
<!-- Dynamic IP Ownership Clause -->
|
||||
</li>
|
||||
<li>لا يُنشئ هذا العقد ولا يمنح الطرف الثاني (الشركاء المستثمرون) أو أي شريك آخر أي حق من حقوق الملكية الفكرية أو الصناعية أو الأدبية على الكود المصدري أو التطبيق أو العلامة التجارية، لا كلياً ولا جزئياً، سواء أثناء سريان العقد أو بعد انتهائه.</li>
|
||||
<li>يقتصر حق الطرف الثاني على <strong>الحصص المالية من صافي الأرباح التشغيلية</strong> الناتجة عن تشغيل التطبيق في النطاق الجغرافي المحدد في هذا العقد حصراً.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- Page Break for elegant Print Layout -->
|
||||
<div class="page-break no-print my-4 border-t-2 border-dashed border-slate-200"></div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثامنة: الإدارة واتخاذ القرارات</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يتولى الطرف الأول (الشركاء المؤسسون) <strong>الإدارة التقنية والفنية والتشغيلية الكاملة</strong> للتطبيق، ويملكان حصرياً صلاحية اتخاذ جميع القرارات البرمجية والهندسية والفنية دون الرجوع للطرف الثاني.</li>
|
||||
<li>تُتّخذ <strong>القرارات الاستراتيجية والتجارية الكبرى</strong> — كالتوسع الجغرافي، أو تغيير نموذج التسعير، أو الدخول في شراكات تجارية مع أطراف ثالثة — بالتشاور والإجماع بين الشركاء.</li>
|
||||
<li>في حال عدم التوافق على قرار تجاري أو استراتيجي، يُعرض الأمر على <strong>محكّم تجاري مستقل</strong> يُتّفق عليه بين الأطراف لإصدار رأي استشاري ملزم.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة التاسعة: السرية وعدم الإفشاء</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يلتزم جميع الأطراف بالحفاظ التام على سرية كافة المعلومات التقنية والمالية والتجارية والتسويقية المتعلقة بالمشروع، وعدم إفشائها أو تسريبها أو إتاحتها لأي طرف ثالث بأي وسيلة كانت.</li>
|
||||
<li>يسري التزام السرية أثناء فترة العقد و<strong>لمدة سنتين (2) ميلاديتين</strong> بعد انتهائه أو فسخه لأي سبب كان.</li>
|
||||
<li>يُستثنى من حكم السرية: المعلومات التي تصبح متاحة للعموم بشكل مشروع دون خطأ من الطرف المُفشي، أو المعلومات المطلوبة بموجب أمر قضائي أو تنظيمي واجب النفاذ.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة العاشرة: عدم المنافسة — المشروطة بنشاط الشركة</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يتعهد جميع الشركاء — طوال فترة سريان هذا العقد وما دام المشروع نشطاً وفعالاً تشغيلياً وتجارياً — بعدم القيام بأي مما يلي:
|
||||
<ul class="list-disc list-inside pr-3 mt-1 space-y-0.5">
|
||||
<li>تأسيس أو المشاركة أو الاستثمار في أي شركة أو تطبيق أو منصة تقدم خدمات النقل الذكي أو توصيل الركاب داخل جمهورية مصر العربية.</li>
|
||||
<li>تقديم خدمات استشارية تقنية أو تجارية لأي منافس مباشر لتطبيق "Siro" في السوق المصرية.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>يُشترط لسريان بند عدم المنافسة</strong> أن يكون مشروع تطبيق "Siro" في مصر <strong>نشطاً ومستمراً في تقديم خدماته</strong> فعلياً وبشكل دوري يمكن إثباته.</li>
|
||||
<li>في حال توقّف المشروع عن العمل التشغيلي في مصر لمدة تتجاوز <strong>تسعين (90) يوماً متتالياً</strong> — لأي سبب كان باستثناء القوة القاهرة — يُعتبر بند عدم المنافسة **ملغى ولاغياً تلقائياً** بحق جميع الأطراف، ويحق لأي شريك ممارسة أي نشاط تجاري مشابه بحرية تامة ودون قيد أو شرط.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الحادية عشرة: مدة العقد وتجديده</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يسري هذا العقد اعتباراً من تاريخ توقيعه ويمتد لمدة **سنتين (2) ميلاديتين** قابلة للتجديد لفترات مماثلة بموافقة الأطراف.</li>
|
||||
<li>يُجدَّد العقد تلقائياً لفترات مماثلة ما لم يُخطر أحد الأطراف الآخرين خطياً برغبته في عدم التجديد قبل **تسعين (90) يوماً** من تاريخ انتهاء المدة الساري.</li>
|
||||
<li>في حال عدم التجديد, تُصفّى الحقوق والالتزامات المالية القائمة بين الأطراف وفق أحكام هذا العقد.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثانية عشرة: الانسحاب والتخارج</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يحق للطرف الثاني (الشركاء المستثمرون) الانسحاب من هذه الشراكة بموجب إشعار خطي مسبق بمدة لا تقل عن **مائة وعشرين (120) يوماً**.</li>
|
||||
<li><strong>في حال رغبة الطرف الثاني في الانسحاب:</strong>
|
||||
<ul class="list-disc list-inside pr-3 mt-1 space-y-0.5">
|
||||
<li class="font-semibold text-slate-950">
|
||||
يحق له المطالبة بالجزء غير المسترد (المتبقي والغير مصروف محاسبياً) من رأس ماله الاستثماري الفعلي فقط من العوائد التشغيلية المتراكمة، دون أن يحق له بأي حال من الأحوال المطالبة أو استرجاع أي مبالغ تم صرفها كرواتب، أو نفقات تشغيلية، أو إعلانية، أو أجور للمنصة، وذلك وفق خطة سداد مجدولة يُتّفق عليها بين الأطراف لا تتجاوز **اثني عشر (12) شهراً** من تاريخ الانسحاب الفعلي.
|
||||
</li>
|
||||
<li>تنقضي حصته في الأرباح المستقبلية اعتباراً من تاريخ نفاذ الانسحاب.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="font-bold bg-slate-50 p-2.5 rounded border-r-3 border-slate-400 leading-relaxed">
|
||||
<strong>ثالثاً: ضمان الاستمرارية والالتزام التشغيلي للطرف الأول وحالات العجز القاهر:</strong> نظراً لأن الجانب التشغيلي والتقني يمثّل عماد وجوهر هذا العقد، يلتزم الطرف الأول بالالتزام التام بتقديم خدماته التشغيلية والبرمجية طوال مدة سريان هذا العقد ولا يملك أحد حق الانسحاب الفردي الاختياري الذي يعطل المنصة. وفي حال طرأ ظرف طبي أو صحي أو عجز قاهر كلي يثبت رسمياً يمنع أحد المؤسسين من الاستمرار، يلتزم الطرف المتأثر بضمان نقل سلس وفوري وخالٍ من العيوب لكافة مهامه الفنية والتشغيلية ورموز لوحات التحكم وقواعد البيانات إلى الطرف الآخر لضمان بقاء التطبيق فعالاً ومحمياً، وتتم تسوية حقوقه ودياً دون المساس بكيان وتدفق المشروع واستثمار الطرف الثاني.
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثالثة عشرة: الضمانات والمسؤولية وعقد بذل العناية</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يُقرّ الطرف الأول بأن التطبيق خالٍ من أي رهن أو حجز أو حق للغير يمنع تشغيله واستثماره تجارياً وفق هذا العقد.</li>
|
||||
<li>يُقرّ الطرف الثاني بأن مصادر التمويل المستخدمة في الاستثمار مشروعة وقانونية وغير مرتبطة بأي نشاط محظور قانوناً.</li>
|
||||
<li class="bg-amber-50/50 p-2.5 rounded border-r-3 border-legal-gold">
|
||||
<strong>بند بذل العناية وحماية المسؤولية من الخسائر (سوء الطالع):</strong> يُقر ويوافق الشركاء صراحةً على أن طبيعة التزام الطرف الأول تجاه تشغيل وتطوير التطبيق هي **التزام ببذل عناية مهنية فائقة ودؤوبة وليس التزاماً بتحقيق نتيجة أو ضمان ربح**. يلتزم الطرف الأول ببذل أقصى جهوده الفنية والتقنية والإدارية بناءً على خطة العمل والتجارب التشغيلية السابقة المدروسة، دون أي تعهد أو ضمانة صريحة أو ضمنية بتحقيق عوائد مالية أو أرباح محددة، أو تجنيب المشروع الخسائر التشغيلية.
|
||||
</li>
|
||||
<li class="bg-amber-50/50 p-2.5 rounded border-r-3 border-legal-gold">
|
||||
بناءً على البند السابق، لا يتحمل الطرف الأول أي مسؤولية شخصية أو تضامنية عن الخسائر التشغيلية أو التجارية أو المالية الطبيعية التي قد تصيب المشروع في السوق المصرية نتيجة لظروف السوق، أو المنافسة التجارية، أو تقلبات البيئة الاستثمارية والظروف العامة (سوء الطالع)، وتُغطى هذه الخسائر — إن وُجدت — من رأس مال المشروع أو عوائده التشغيلية، شريطة خلو تصرفات الطرف الأول من أي غش، أو تقصير متعمد، أو إهمال جسيم يثبت قضائياً بحق الطرف الأول.
|
||||
</li>
|
||||
<li>يلتزم الطرف الأول ببذل العناية المهنية اللازمة لحماية بيانات المستخدمين والسائقين، والامتثال لأفضل ممارسات أمن المعلومات.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الرابعة عشرة: القوة القاهرة</h4>
|
||||
<p>لا يُعدّ أي طرف مُخِلاً بالتزاماته بموجب هذا العقد إذا حال دون تنفيذها ظرف من ظروف القوة القاهرة، وتشمل — دون حصر: الحروب، الكوارث الطبيعية، الأوبئة، القرارات الحكومية القاهرة، العقوبات الدولية، أو انقطاع شبكة الإنترنت الكامل في الدولة.</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الخامسة عشرة: تعديل العقد</h4>
|
||||
<p>لا يجوز تعديل أو تغيير أي بند من بنود هذا العقد إلا بموجب **ملحق تعديلي خطّي** موقَّع من جميع الأطراف ومؤرَّخ، ويُعتبر أي تعديل شفهي أو ضمني باطلاً ولا يُعتدّ به.</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة السادسة عشرة: القانون الواجب التطبيق وفض النزاعات</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يخضع هذا العقد وتفسيره وتنفيذه للقوانين التجارية المعمول بها.</li>
|
||||
<li>في حال نشوء أي خلاف أو نزاع بين الأطراف بشأن تفسير أو تنفيذ أي بند من بنود هذا العقد، يتم حله وفق الترتيب التالي:
|
||||
<ul class="list-disc list-inside pr-3 mt-1 space-y-0.5">
|
||||
<li><strong>أولاً:</strong> التسوية الودية المباشرة بين الأطراف خلال مدة لا تتجاوز <strong>ثلاثين (30) يوماً</strong> من تاريخ الإخطار بالنزاع.</li>
|
||||
<li><strong>ثانياً:</strong> اللجوء إلى <strong>التحكيم التجاري</strong> أمام محكّم أو هيئة تحكيمية مستقلة يتفق عليها الأطراف، ويكون حكم التحكيم نهائياً وملزماً.</li>
|
||||
<li><strong>ثالثاً:</strong> في حال تعذّر التحكيم، يُرفع النزاع أمام المحكمة المختصة.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة السابعة عشرة: أحكام ختامية</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يمثّل هذا العقد كامل الاتفاق بين الأطراف فيما يتعلق بموضوعه، ويُلغي أي اتفاقات شفهية أو مكتوبة سابقة بين الأطراف بشأن نفس الموضوع.</li>
|
||||
<li>في حال بطلان أي بند من بنود هذا العقد أو عدم قابليته للتنفيذ، تظل البنود الأخرى صحيحة ونافذة ومُلزِمة.</li>
|
||||
<li>حُرّر هذا العقد من نسخ أصلية متطابقة بيد كل طرف نسخة للعمل بموجبها عند اللزوم.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Formal Signatures Page with styling -->
|
||||
<div class="mt-8 space-y-6">
|
||||
<h3 class="font-sans font-extrabold text-slate-950 text-[14px] border-b border-slate-800 pb-1.5">توقيعات أطراف العقد والشهود</h3>
|
||||
|
||||
<div class="overflow-x-auto">
|
||||
<table class="w-full border-collapse border border-slate-800 text-center text-xs font-sans">
|
||||
<thead>
|
||||
<tr class="table-header-print bg-slate-50 text-slate-900 font-bold border-b border-slate-800">
|
||||
<th class="border border-slate-800 p-2">الصفة التعاقدية</th>
|
||||
<th class="border border-slate-800 p-2 text-right pr-4">الاسم الكامل</th>
|
||||
<th class="border border-slate-800 p-2 w-1/4">التوقيع</th>
|
||||
<th class="border border-slate-800 p-2 w-1/5">التاريخ</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="doc-signatures-table-body">
|
||||
<!-- Dynamic Signatures Rows -->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- Witnesses Section -->
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 pt-2 text-xs font-sans">
|
||||
<div class="border border-slate-300 p-3 rounded-lg space-y-1.5">
|
||||
<span class="font-bold text-slate-900">شاهد أول (اختياري):</span>
|
||||
<div class="text-slate-500 text-[11px]">الاسم: _____________________________________</div>
|
||||
<div class="text-slate-500 text-[11px]">التوقيع: ___________________________________</div>
|
||||
</div>
|
||||
<div class="border border-slate-300 p-3 rounded-lg space-y-1.5">
|
||||
<span class="font-bold text-slate-900">شاهد ثانٍ (اختياري):</span>
|
||||
<div class="text-slate-500 text-[11px]">الاسم: _____________________________________</div>
|
||||
<div class="text-slate-500 text-[11px]">التوقيع: ___________________________________</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Dynamic Appendix Sections -->
|
||||
<div id="doc-appendices-container" class="space-y-6">
|
||||
<!-- Dynamic Partner Passports -->
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Script handling dynamic actions and lists -->
|
||||
<script>
|
||||
// Configuration
|
||||
const country = "مصر";
|
||||
|
||||
let founders = [
|
||||
{ name: '', nationality: 'أردني', id: '', share: 0 }
|
||||
];
|
||||
|
||||
let partners = [
|
||||
{ name: '', nationality: 'أردني', id: '', share: 0, passportDataUrl: '' }
|
||||
];
|
||||
|
||||
// Init UI inputs on DOM load
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
renderSidebar();
|
||||
syncContract();
|
||||
});
|
||||
|
||||
function renderSidebar() {
|
||||
// Render Founders in Sidebar
|
||||
const foundersContainer = document.getElementById('founders-container');
|
||||
foundersContainer.innerHTML = '';
|
||||
|
||||
founders.forEach((founder, index) => {
|
||||
const div = document.createElement('div');
|
||||
div.className = "bg-white p-3 rounded border border-slate-200 space-y-2 relative shadow-sm";
|
||||
div.innerHTML = `
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[10px] font-bold text-slate-400">مؤسس #${index + 1}</span>
|
||||
${founders.length > 1 ? `
|
||||
<button onclick="removeFounder(${index})" class="text-[10px] text-red-500 hover:text-red-700 font-bold">
|
||||
حذف
|
||||
</button>
|
||||
` : ''}
|
||||
</div>
|
||||
<div class="space-y-1.5">
|
||||
<input type="text" placeholder="الاسم الكامل" value="${founder.name}" oninput="updateFounderField(${index}, 'name', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
<div class="grid grid-cols-2 gap-1.5">
|
||||
<input type="text" placeholder="الجنسية (مثال: أردني)" value="${founder.nationality}" oninput="updateFounderField(${index}, 'nationality', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
<input type="number" placeholder="الأرباح %" value="${founder.share || ''}" oninput="updateFounderField(${index}, 'share', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
</div>
|
||||
<input type="text" placeholder="الرقم الوطني وجواز السفر" value="${founder.id}" oninput="updateFounderField(${index}, 'id', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
</div>
|
||||
`;
|
||||
foundersContainer.appendChild(div);
|
||||
});
|
||||
|
||||
// Render Partners in Sidebar
|
||||
const partnersContainer = document.getElementById('partners-container');
|
||||
partnersContainer.innerHTML = '';
|
||||
|
||||
partners.forEach((partner, index) => {
|
||||
const div = document.createElement('div');
|
||||
div.className = "bg-white p-3 rounded border border-slate-200 space-y-2 relative shadow-sm";
|
||||
div.innerHTML = `
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[10px] font-bold text-slate-400">شريك مستثمر #${index + 1}</span>
|
||||
${partners.length > 1 ? `
|
||||
<button onclick="removePartner(${index})" class="text-[10px] text-red-500 hover:text-red-700 font-bold">
|
||||
حذف
|
||||
</button>
|
||||
` : ''}
|
||||
</div>
|
||||
<div class="space-y-1.5">
|
||||
<input type="text" placeholder="الاسم الكامل" value="${partner.name}" oninput="updatePartnerField(${index}, 'name', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
<div class="grid grid-cols-2 gap-1.5">
|
||||
<input type="text" placeholder="الجنسية (مثال: أردني)" value="${partner.nationality}" oninput="updatePartnerField(${index}, 'nationality', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
<input type="number" placeholder="الأرباح %" value="${partner.share || ''}" oninput="updatePartnerField(${index}, 'share', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
</div>
|
||||
<input type="text" placeholder="الرقم الوطني وجواز السفر" value="${partner.id}" oninput="updatePartnerField(${index}, 'id', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
<div class="flex flex-col">
|
||||
<label class="text-[9px] text-slate-400 mb-0.5">تحميل صورة جواز السفر</label>
|
||||
<input type="file" accept="image/*" onchange="uploadPartnerPassport(${index}, this)" class="w-full text-[10px] bg-slate-50 border border-slate-200 rounded p-0.5">
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
partnersContainer.appendChild(div);
|
||||
});
|
||||
|
||||
// Update add buttons state
|
||||
document.getElementById('btn-add-founder').style.display = founders.length >= 3 ? 'none' : 'block';
|
||||
document.getElementById('btn-add-partner').style.display = partners.length >= 3 ? 'none' : 'block';
|
||||
}
|
||||
|
||||
// Founders state management
|
||||
function addFounder() {
|
||||
if (founders.length < 3) {
|
||||
founders.push({ name: '', nationality: 'أردني', id: '', share: 0 });
|
||||
renderSidebar();
|
||||
syncContract();
|
||||
}
|
||||
}
|
||||
function removeFounder(index) {
|
||||
founders.splice(index, 1);
|
||||
renderSidebar();
|
||||
syncContract();
|
||||
}
|
||||
function updateFounderField(index, field, value) {
|
||||
founders[index][field] = field === 'share' ? (parseFloat(value) || 0) : value;
|
||||
syncContract();
|
||||
}
|
||||
|
||||
// Partners state management
|
||||
function addPartner() {
|
||||
if (partners.length < 3) {
|
||||
partners.push({ name: '', nationality: 'أردني', id: '', share: 0, passportDataUrl: '' });
|
||||
renderSidebar();
|
||||
syncContract();
|
||||
}
|
||||
}
|
||||
function removePartner(index) {
|
||||
partners.splice(index, 1);
|
||||
renderSidebar();
|
||||
syncContract();
|
||||
}
|
||||
function updatePartnerField(index, field, value) {
|
||||
partners[index][field] = field === 'share' ? (parseFloat(value) || 0) : value;
|
||||
syncContract();
|
||||
}
|
||||
function uploadPartnerPassport(index, fileInput) {
|
||||
const file = fileInput.files[0];
|
||||
if (file) {
|
||||
const reader = new FileReader();
|
||||
reader.onload = function(evt) {
|
||||
partners[index].passportDataUrl = evt.target.result;
|
||||
syncContract();
|
||||
};
|
||||
reader.readAsDataURL(file);
|
||||
} else {
|
||||
partners[index].passportDataUrl = '';
|
||||
syncContract();
|
||||
}
|
||||
}
|
||||
|
||||
// Global Sync logic
|
||||
function syncContract() {
|
||||
// 1. Sync Date and Capital
|
||||
const inputDateVal = document.getElementById('input-date').value || '....................';
|
||||
const inputCapitalVal = parseFloat(document.getElementById('input-capital').value) || 0;
|
||||
const inputCapitalWordsVal = document.getElementById('input-capital-words').value || '....................';
|
||||
const inputCurrencyVal = document.getElementById('input-currency').value || 'USD';
|
||||
|
||||
document.getElementById('sync-contract-date').textContent = inputDateVal;
|
||||
document.getElementById('sync-text-date').textContent = inputDateVal;
|
||||
|
||||
document.querySelectorAll('.sync-capital-words-span').forEach(el => el.textContent = inputCapitalWordsVal);
|
||||
document.querySelectorAll('.sync-capital-number-span').forEach(el => el.textContent = inputCapitalVal.toLocaleString());
|
||||
document.querySelectorAll('.sync-currency-span').forEach(el => el.textContent = inputCurrencyVal);
|
||||
|
||||
// 2. Render Founders list in document
|
||||
const docFoundersList = document.getElementById('doc-founders-list');
|
||||
docFoundersList.innerHTML = '';
|
||||
founders.forEach((founder, idx) => {
|
||||
const nameStr = founder.name ? `السيد/ <strong>${founder.name}</strong>` : 'السيد/ <strong>.......................................................</strong>';
|
||||
const natStr = founder.nationality ? `${founder.nationality} الجنسية` : '.................... الجنسية';
|
||||
const idStr = founder.id ? `الرقم الوطني/جواز السفر <span class="highlight-field">${founder.id}</span>` : 'الرقم الوطني/جواز السفر <span class="highlight-field">.......................................................</span>';
|
||||
|
||||
const p = document.createElement('p');
|
||||
p.innerHTML = `${idx + 1}. ${nameStr}، ${natStr}، يحمل ${idStr}، ويُشار إليه بـ <strong>"الشريك المؤسس ${getArabicOrdinal(idx + 1)}"</strong>.`;
|
||||
docFoundersList.appendChild(p);
|
||||
});
|
||||
|
||||
// 3. Render Partners list in document
|
||||
const docPartnersList = document.getElementById('doc-partners-list');
|
||||
docPartnersList.innerHTML = '';
|
||||
partners.forEach((partner, idx) => {
|
||||
const nameStr = partner.name ? `السيد/ <strong>${partner.name}</strong>` : 'السيد/ <strong>.......................................................</strong>';
|
||||
const natStr = partner.nationality ? `${partner.nationality} الجنسية` : '.................... الجنسية';
|
||||
const idStr = partner.id ? `الرقم الوطني / رقم الهوية <span class="highlight-field">${partner.id}</span>` : 'الرقم الوطني / رقم الهوية <span class="highlight-field">.......................................................</span>';
|
||||
|
||||
const p = document.createElement('p');
|
||||
p.innerHTML = `${idx + 1}. ${nameStr}، ${natStr}، يحمل ${idStr}، ويُشار إليه بـ <strong>"الشريك المستثمر ${getArabicOrdinal(idx + 1)}"</strong> أو <strong>"الطرف الثاني"</strong>.`;
|
||||
docPartnersList.appendChild(p);
|
||||
});
|
||||
|
||||
// 4. Render share tables and check sum
|
||||
const tableBody = document.getElementById('doc-shares-table-body');
|
||||
tableBody.innerHTML = '';
|
||||
let totalShare = 0;
|
||||
|
||||
founders.forEach((founder, idx) => {
|
||||
totalShare += founder.share;
|
||||
const tr = document.createElement('tr');
|
||||
tr.className = "border-b border-slate-800";
|
||||
tr.innerHTML = `
|
||||
<td class="border border-slate-800 p-2 text-right pr-4 font-bold">${founder.name || '.......................................................'}</td>
|
||||
<td class="border border-slate-800 p-2 text-slate-600">الشريك المؤسس ${getArabicOrdinal(idx + 1)}</td>
|
||||
<td class="border border-slate-800 p-2 font-bold"><span class="text-slate-950 text-sm">${founder.share}</span>%</td>
|
||||
`;
|
||||
tableBody.appendChild(tr);
|
||||
});
|
||||
|
||||
partners.forEach((partner, idx) => {
|
||||
totalShare += partner.share;
|
||||
const tr = document.createElement('tr');
|
||||
tr.className = "border-b border-slate-800";
|
||||
tr.innerHTML = `
|
||||
<td class="border border-slate-800 p-2 text-right pr-4 font-bold">${partner.name || '.......................................................'}</td>
|
||||
<td class="border border-slate-800 p-2 text-slate-600">الشريك المستثمر ${getArabicOrdinal(idx + 1)} (الطرف الثاني)</td>
|
||||
<td class="border border-slate-800 p-2 font-bold"><span class="text-slate-950 text-sm">${partner.share}</span>%</td>
|
||||
`;
|
||||
tableBody.appendChild(tr);
|
||||
});
|
||||
|
||||
// 5. Update validation message
|
||||
document.getElementById('share-sum').textContent = totalShare;
|
||||
const indicator = document.getElementById('share-indicator');
|
||||
const validationMsg = document.getElementById('share-validation-msg');
|
||||
if (totalShare === 100) {
|
||||
indicator.className = "text-[10px] font-bold px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-700";
|
||||
validationMsg.className = "text-[11px] p-2 rounded bg-emerald-50 text-emerald-800 border border-emerald-200 font-semibold leading-relaxed";
|
||||
validationMsg.innerHTML = "✅ مجموع النسب متوازن (100%). المستند آمن وجاهز تماماً للطباعة كـ PDF.";
|
||||
} else {
|
||||
indicator.className = "text-[10px] font-bold px-2 py-0.5 rounded-full bg-red-100 text-red-600";
|
||||
validationMsg.className = "text-[11px] p-2 rounded bg-red-50 text-red-700 border border-red-200 font-medium leading-relaxed";
|
||||
validationMsg.innerHTML = `⚠️ مجموع الحصص الحالي هو <b>${totalShare}%</b>. يرجى تعديل الأرقام ليكون الإجمالي 100% لمطابقة شروط العقد الأساسية.`;
|
||||
}
|
||||
|
||||
// 6. Dynamic IP Ownership Clause (First founder solely owns IP, list exclusions)
|
||||
const firstFounderName = founders[0] && founders[0].name ? founders[0].name : '.......................................................';
|
||||
let exclusions = [];
|
||||
founders.forEach((f, idx) => {
|
||||
if (idx > 0 && f.name) exclusions.push(`الشريك المؤسس ${f.name}`);
|
||||
});
|
||||
partners.forEach(p => {
|
||||
if (p.name) exclusions.push(`المستثمر ${p.name}`);
|
||||
});
|
||||
const exclusionsStr = exclusions.length > 0 ? ` (بما فيهم ${exclusions.join(' و ')})` : '';
|
||||
|
||||
const ipClause = document.getElementById('ip-ownership-clause');
|
||||
ipClause.innerHTML = `
|
||||
يُقرّ ويتفق جميع الأطراف صراحةً على أن الكود المصدري (Source Code) والبرمجي لتطبيق "Siro" بجميع إصداراته (الراكب، السائق، لوحة الإدارة)، وكافة التصاميم والبنية الهندسية وقواعد البيانات والخوارزميات والعلامة التجارية والاسم التجاري والشعار، هي ملكية خاصة وحصرية ومطلقة وأبدية وتؤول بالكامل وتحديداً للسيد <span class="text-slate-950 font-extrabold border-b-2 border-legal-gold/70 pb-0.5">${firstFounderName} بمفرده وبشكل أبدّي</span> دون غيره، ولا يحق لأي طرف آخر${exclusionsStr} منازعته عليها أو الادعاء بأي حقوق عليها تحت أي ظرف كان.
|
||||
`;
|
||||
|
||||
// 7. Render Signatures
|
||||
const sigTableBody = document.getElementById('doc-signatures-table-body');
|
||||
sigTableBody.innerHTML = '';
|
||||
|
||||
founders.forEach((founder, idx) => {
|
||||
const tr = document.createElement('tr');
|
||||
tr.className = "border-b border-slate-800";
|
||||
tr.innerHTML = `
|
||||
<td class="border border-slate-800 p-2.5 text-slate-700 font-medium">الشريك المؤسس ${getArabicOrdinal(idx + 1)}</td>
|
||||
<td class="border border-slate-800 p-2.5 text-right pr-4 font-bold">${founder.name || '.......................................................'}</td>
|
||||
<td class="border border-slate-800 p-2.5 text-slate-400">.......................</td>
|
||||
<td class="border border-slate-800 p-2.5 font-bold sync-text-table-date">${inputDateVal}</td>
|
||||
`;
|
||||
sigTableBody.appendChild(tr);
|
||||
});
|
||||
|
||||
partners.forEach((partner, idx) => {
|
||||
const tr = document.createElement('tr');
|
||||
tr.className = "border-b border-slate-800";
|
||||
tr.innerHTML = `
|
||||
<td class="border border-slate-800 p-2.5 text-slate-700 font-medium">الشريك المستثمر ${getArabicOrdinal(idx + 1)}</td>
|
||||
<td class="border border-slate-800 p-2.5 text-right pr-4 font-bold">${partner.name || '.......................................................'}</td>
|
||||
<td class="border border-slate-800 p-2.5 text-slate-400">.......................</td>
|
||||
<td class="border border-slate-800 p-2.5 font-bold sync-text-table-date">${inputDateVal}</td>
|
||||
`;
|
||||
sigTableBody.appendChild(tr);
|
||||
});
|
||||
|
||||
// 8. Render Appendices for Passports
|
||||
const appendicesContainer = document.getElementById('doc-appendices-container');
|
||||
appendicesContainer.innerHTML = '';
|
||||
|
||||
partners.forEach((partner, idx) => {
|
||||
const pName = partner.name || `الشريك المستثمر ${getArabicOrdinal(idx + 1)}`;
|
||||
const div = document.createElement('div');
|
||||
div.className = "page-break no-print my-6 border-t-2 border-dashed border-slate-300 pt-6";
|
||||
div.innerHTML = `
|
||||
<div class="space-y-4">
|
||||
<h3 class="font-sans font-extrabold text-slate-950 text-[14px] border-b border-slate-800 pb-1.5">المرفقات: صورة جواز سفر الشريك المستثمر (${pName})</h3>
|
||||
<div class="flex flex-col items-center justify-center p-6 border border-dashed border-slate-300 rounded-lg bg-slate-50/50">
|
||||
${partner.passportDataUrl ? `
|
||||
<img class="max-h-[140mm] max-w-full rounded shadow-sm border border-slate-200" src="${partner.passportDataUrl}" alt="جواز سفر ${pName}">
|
||||
` : `
|
||||
<div class="text-center py-10 text-slate-400 text-xs font-sans">
|
||||
<svg class="w-12 h-12 mx-auto mb-2 opacity-50" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"></path>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"></path>
|
||||
</svg>
|
||||
<span>لم يتم إرفاق صورة جواز السفر للشريك (${pName}) بعد. استخدم خيار التحميل في لوحة التحكم لإرفاق الصورة.</span>
|
||||
</div>
|
||||
`}
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
appendicesContainer.appendChild(div);
|
||||
});
|
||||
}
|
||||
|
||||
// Helper to get Arabic Ordinals
|
||||
function getArabicOrdinal(num) {
|
||||
const ordinals = ["", "الأول", "الثاني", "الثالث", "الرابع", "الخامس"];
|
||||
return ordinals[num] || `${num}`;
|
||||
}
|
||||
|
||||
// Sync inputs from date & capital changes
|
||||
document.getElementById('input-date').addEventListener('input', syncContract);
|
||||
document.getElementById('input-capital').addEventListener('input', (e) => {
|
||||
const num = parseInt(e.target.value) || 0;
|
||||
// Auto mapping simple numbers to words
|
||||
const mapper = {
|
||||
100000: "مائة ألف",
|
||||
150000: "مائة وخمسون ألف",
|
||||
180000: "مائة وثمانون ألف",
|
||||
200000: "مائتا ألف",
|
||||
250000: "مائتان وخمسون ألف",
|
||||
300000: "ثلاثمائة ألف",
|
||||
400000: "أربعمائة ألف",
|
||||
500000: "خمسمائة ألف"
|
||||
};
|
||||
const currencyLabel = document.getElementById('input-currency').value === 'USD' ? 'دولار أمريكي' : '';
|
||||
if (mapper[num]) {
|
||||
document.getElementById('input-capital-words').value = mapper[num] + (currencyLabel ? ' ' + currencyLabel : '');
|
||||
}
|
||||
syncContract();
|
||||
});
|
||||
document.getElementById('input-capital-words').addEventListener('input', syncContract);
|
||||
document.getElementById('input-currency').addEventListener('input', syncContract);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,898 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ar" dir="rtl">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>مولد ومطبع عقد شراكة Siro القانوني المطور - سوريا</title>
|
||||
<!-- Google Fonts: Amiri & Inter for highly clean and modern tech-corporate document rendering -->
|
||||
<link href="https://fonts.googleapis.com/css2?family=Amiri:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
|
||||
<!-- Tailwind CSS -->
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
fontFamily: {
|
||||
sans: ['Inter', 'Amiri', 'sans-serif'],
|
||||
serif: ['Inter', 'Amiri', 'serif'],
|
||||
},
|
||||
colors: {
|
||||
legal: {
|
||||
800: '#1e293b',
|
||||
900: '#0f172a',
|
||||
gold: '#c5a880',
|
||||
goldHover: '#b3956d'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
body {
|
||||
background-color: #f8fafc;
|
||||
}
|
||||
|
||||
/* Mockup standard sheet configuration */
|
||||
.paper-sheet {
|
||||
background: #ffffff;
|
||||
box-shadow: 0 4px 20px -2px rgba(0, 0, 0, 0.05), 0 2px 10px -4px rgba(0, 0, 0, 0.05);
|
||||
position: relative;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
/* Dynamic interaction fields highlighting */
|
||||
.highlight-field {
|
||||
border-bottom: 1.5px dashed #c5a880;
|
||||
color: #0f172a;
|
||||
font-weight: 700;
|
||||
padding: 0 4px;
|
||||
transition: all 0.2s ease;
|
||||
background-color: rgba(197, 168, 128, 0.06);
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.highlight-field:empty::before {
|
||||
content: ".......................................................";
|
||||
color: #94a3b8;
|
||||
font-weight: 300;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
/* Advanced Print configuration targeting exactly 3 compact pages */
|
||||
@media print {
|
||||
body {
|
||||
background: #ffffff !important;
|
||||
color: #000000 !important;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
}
|
||||
.no-print {
|
||||
display: none !important;
|
||||
}
|
||||
.print-page {
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
width: 100% !important;
|
||||
max-width: 100% !important;
|
||||
height: auto !important;
|
||||
background: transparent !important;
|
||||
}
|
||||
.contract-container {
|
||||
border: none !important;
|
||||
padding: 10mm 10mm !important;
|
||||
}
|
||||
.page-break {
|
||||
page-break-after: always;
|
||||
break-after: page;
|
||||
margin-top: 20px;
|
||||
height: 0;
|
||||
}
|
||||
@page {
|
||||
size: A4;
|
||||
margin: 12mm 12mm;
|
||||
}
|
||||
.table-header-print {
|
||||
background-color: #f8fafc !important;
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="font-sans text-slate-800 antialiased min-h-screen flex flex-col">
|
||||
|
||||
<!-- Top Navbar (hidden on print) -->
|
||||
<header class="bg-legal-900 text-white py-3.5 px-6 shadow-md border-b border-legal-gold/20 no-print sticky top-0 z-50">
|
||||
<div class="max-w-7xl mx-auto flex flex-col md:flex-row justify-between items-center gap-4">
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="bg-gradient-to-tr from-legal-gold to-amber-500 p-2 rounded-xl">
|
||||
<svg class="w-6 h-6 text-legal-900" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M9 20l-5.447-2.724A1 1 0 013 16.382V5.618a1 1 0 011.447-.894L9 7m0 13l6-3m-6 3V7m6 10l4.553 2.276A1 1 0 0021 18.382V7.618a1 1 0 00-.553-.894L15 4m0 13V4m0 0L9 7"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<h1 class="text-lg font-bold tracking-wide flex items-center gap-2"><span class="text-legal-gold font-extrabold">Siro</span></h1>
|
||||
<p class="text-[10px] text-slate-400">توليد وطباعة العقد القانوني للجمهورية العربية السورية</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-3">
|
||||
<button onclick="window.print();" class="bg-legal-gold hover:bg-legal-goldHover text-legal-900 px-5 py-2 rounded-lg font-bold shadow-lg shadow-legal-gold/20 flex items-center gap-2 transition-all duration-200 transform active:scale-95 text-sm">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h10a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z"></path>
|
||||
</svg>
|
||||
طباعة العقد (حفظ PDF)
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Main Content Layout -->
|
||||
<div class="flex-1 max-w-7xl w-full mx-auto p-4 md:p-6 grid grid-cols-1 lg:grid-cols-12 gap-6 items-start">
|
||||
|
||||
<!-- Controls Sidebar Panel (hidden on print) -->
|
||||
<aside class="lg:col-span-4 bg-white p-5 rounded-xl shadow-sm border border-slate-200 no-print space-y-5">
|
||||
<div class="border-b border-slate-100 pb-3">
|
||||
<h2 class="text-base font-bold text-legal-900 flex items-center gap-2">
|
||||
<svg class="w-4 h-4 text-legal-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2.5 2.5 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"></path>
|
||||
</svg>
|
||||
لوحة التحكم الذكية بالعقد
|
||||
</h2>
|
||||
<p class="text-[11px] text-slate-500 mt-0.5">يمكنك إضافة وتعديل بيانات الأطراف وحصصهم لتحديث العقد فورياً.</p>
|
||||
</div>
|
||||
|
||||
<!-- Inputs Sections -->
|
||||
<div class="space-y-4">
|
||||
|
||||
<div class="bg-slate-50 p-3 rounded-lg space-y-2.5 border border-slate-100">
|
||||
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">التواريخ والمعلومات الأساسية</h3>
|
||||
<div class="grid grid-cols-2 gap-2">
|
||||
<div>
|
||||
<label class="block text-[11px] text-slate-600 font-semibold mb-1">تاريخ تحرير العقد</label>
|
||||
<input type="text" id="input-date" value="14/06/2026م" placeholder="مثال: 14/06/2026م" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] text-slate-600 font-semibold mb-1">قيمة رأس المال</label>
|
||||
<input type="number" id="input-capital" value="200000" placeholder="مثال: 200000" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-2 gap-2">
|
||||
<div>
|
||||
<label class="block text-[11px] text-slate-600 font-semibold mb-1">المبلغ كتابة</label>
|
||||
<input type="text" id="input-capital-words" value="مائتا ألف دولار أمريكي" placeholder="مثال: مائتا ألف دولار أمريكي" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[11px] text-slate-600 font-semibold mb-1">رمز العملة (اختصار)</label>
|
||||
<input type="text" id="input-currency" value="USD" placeholder="مثال: USD" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Founders Section -->
|
||||
<div class="bg-slate-50 p-3 rounded-lg border border-slate-100 space-y-3">
|
||||
<div class="flex justify-between items-center">
|
||||
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">الطرف الأول (المؤسسون - بحد أقصى 3)</h3>
|
||||
<button id="btn-add-founder" onclick="addFounder()" class="text-[11px] font-bold text-legal-gold hover:text-legal-goldHover flex items-center gap-0.5">
|
||||
+ إضافة مؤسس
|
||||
</button>
|
||||
</div>
|
||||
<div id="founders-container" class="space-y-3">
|
||||
<!-- Dynamic Founders Form Fields -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Investors Section -->
|
||||
<div class="bg-slate-50 p-3 rounded-lg border border-slate-100 space-y-3">
|
||||
<div class="flex justify-between items-center">
|
||||
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">الطرف الثاني (الشركاء المستثمرون - بحد أقصى 3)</h3>
|
||||
<button id="btn-add-partner" onclick="addPartner()" class="text-[11px] font-bold text-legal-gold hover:text-legal-goldHover flex items-center gap-0.5">
|
||||
+ إضافة شريك
|
||||
</button>
|
||||
</div>
|
||||
<div id="partners-container" class="space-y-3">
|
||||
<!-- Dynamic Partners Form Fields -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Validation & Status Indicator -->
|
||||
<div class="bg-slate-50 p-3 rounded-lg space-y-2 border border-slate-100">
|
||||
<div class="flex justify-between items-center">
|
||||
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">مجموع الحصص %</h3>
|
||||
<span id="share-indicator" class="text-[10px] font-bold px-1.5 py-0.5 rounded-full bg-red-100 text-red-600">
|
||||
المجموع: <span id="share-sum">0</span>%
|
||||
</span>
|
||||
</div>
|
||||
<div id="share-validation-msg" class="text-[11px] p-2 rounded bg-red-50 text-red-700 font-medium leading-relaxed">
|
||||
⚠️ مجموع الحصص يجب أن يكون 100% لتصحيح صياغة العقد.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Guidelines / Best Practices for print -->
|
||||
<div class="p-3.5 rounded-lg border border-legal-gold/20 bg-legal-900 text-white space-y-1.5">
|
||||
<h4 class="text-xs font-bold text-legal-gold flex items-center gap-1">
|
||||
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
||||
</svg>
|
||||
دليل حفظ مستند PDF مثالي:
|
||||
</h4>
|
||||
<ul class="text-[11px] text-slate-300 space-y-1 list-disc list-inside">
|
||||
<li>تأكد من تفعيل خيار <b class="text-legal-gold">رسومات الخلفية</b> في خيارات الطباعة بالمتصفح.</li>
|
||||
<li>ألغِ خيار <b class="text-legal-gold">الرؤوس والتذييلات</b> لإلغاء روابط المواقع.</li>
|
||||
<li>استخدم خيار "حفظ بتنسيق PDF" لإنتاج ملف جاهز فوري.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<!-- Document Sheet Area -->
|
||||
<main class="lg:col-span-8 flex flex-col items-center">
|
||||
|
||||
<div class="w-full max-w-[210mm] paper-sheet print-page rounded-xl border border-slate-200 overflow-hidden mb-6 transition-all duration-300">
|
||||
|
||||
<!-- Inner formal border (Configured to use clean modern font-serif mapping to Inter) -->
|
||||
<div class="contract-container p-6 md:p-10 lg:p-12 text-slate-900 font-serif text-justify text-[13.5px] leading-relaxed" id="contract-document">
|
||||
|
||||
<!-- Official Header & Siro Logo -->
|
||||
<div class="flex flex-col items-center text-center border-b-2 border-slate-800 pb-4 mb-6">
|
||||
|
||||
<!-- Official Premium Siro Logo -->
|
||||
<div class="mb-3">
|
||||
<img src="logo.png" class="h-14 mx-auto" alt="Siro Logo">
|
||||
</div>
|
||||
<h1 class="text-base md:text-lg font-bold text-slate-950 font-sans tracking-wide">عقد شراكة واستثمار تجاري لتشغيل تطبيق "Siro"</h1>
|
||||
<p class="text-sm font-bold text-slate-800 font-sans">في الجمهورية العربية السورية</p>
|
||||
|
||||
<div class="w-full flex justify-between items-center text-[10px] font-sans text-slate-500 mt-2.5 px-2">
|
||||
<span><strong>الرقم المرجعي:</strong> SIRO-INV-SY-2026-001</span>
|
||||
<span><strong>تاريخ التحرير:</strong> <span id="sync-contract-date" class="font-bold text-slate-900">14/06/2026م</span></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Intro Block -->
|
||||
<div class="space-y-5">
|
||||
<p class="leading-normal">
|
||||
تم تحرير هذا العقد وتوثيقه في اليوم الموافق
|
||||
<span id="sync-text-date" class="highlight-field">14/06/2026م</span> ميلادي، بين كلٍّ من:
|
||||
</p>
|
||||
|
||||
<!-- Parties Info -->
|
||||
<div class="space-y-3">
|
||||
<div>
|
||||
<h3 class="font-sans font-bold text-slate-950 border-r-3 border-legal-gold pr-2 text-[13px]">الطرف الأول (المؤسسون – الشريك الإداري والتقني):</h3>
|
||||
<div id="doc-founders-list" class="pr-3 mt-1 space-y-1.5">
|
||||
<!-- Dynamic Founders List -->
|
||||
</div>
|
||||
<p class="text-[11px] text-slate-500 italic pr-3 mt-0.5 font-sans">
|
||||
(ويُشار إليهما مجتمعَيْن بـ <strong>"الطرف الأول"</strong> أو <strong>"الشركاء المؤسسون"</strong>).
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3 class="font-sans font-bold text-slate-950 border-r-3 border-legal-gold pr-2 text-[13px]">الطرف الثاني (الشركاء المستثمرون):</h3>
|
||||
<div id="doc-partners-list" class="pr-3 mt-1 space-y-1.5">
|
||||
<!-- Dynamic Partners List -->
|
||||
</div>
|
||||
<p class="text-[11px] text-slate-500 italic pr-3 mt-0.5 font-sans">
|
||||
(ويُشار إليهم مجتمعين بـ <strong>"الطرف الثاني"</strong> أو <strong>"الشركاء المستثمرون"</strong>).
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Preamble -->
|
||||
<div>
|
||||
<h3 class="font-sans font-extrabold text-slate-950 text-[14px] mb-1">التمهيد</h3>
|
||||
<div class="space-y-2">
|
||||
<p>
|
||||
<strong>حيث إن</strong> الطرف الأول يمتلك ويُدير منظومة برمجية ومنصة تقنية متطورة للنقل الذكي وتسهيل التنقل الحضري وتوصيل الركاب تحمل اسم <strong>"Siro"</strong> ومصممة وفق أحدث المعايير الهندسية والبرمجية العالمية؛
|
||||
</p>
|
||||
<p>
|
||||
<strong>وحيث إن</strong> الطرف الثاني (الشركاء المستثمرون) يرغبون في تقديم تمويل استثماري لتغطية تكاليف إطلاق التطبيق وتشغيله وتسويقه داخل السوق السورية مقابل حصة من صافي الأرباح التشغيلية؛
|
||||
</p>
|
||||
<p>
|
||||
<strong>وحيث إن</strong> إرادة الأطراف قد التقت على تأسيس شراكة تجارية واستثمارية مشتركة قائمة على الشفافية والالتزام المتبادل؛
|
||||
</p>
|
||||
<p class="font-bold border-r-2 border-slate-400 pr-2">
|
||||
فقد اتفق الأطراف — بعد إقرارهم بكامل أهليتهم القانونية للتعاقد — على ما يلي:
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Articles and clauses flow -->
|
||||
<div class="space-y-4 pt-2">
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الأولى: نطاق التمهيد</h4>
|
||||
<p>يُعدّ التمهيد المذكور أعلاه جزءاً لا يتجزأ من هذا العقد، ويُقرأ ويُفسَّر ضمن سياقه.</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثانية: موضوع العقد والنطاق الجغرافي</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>موضوع هذا العقد هو تنظيم العلاقة التجارية والاستثمارية بين الأطراف لتشغيل واستغلال تطبيق <strong>"Siro"</strong> تجارياً وخدمياً وتسويقياً.</li>
|
||||
<li>يقتصر النطاق الجغرافي لهذا العقد حصراً على أراضي <strong>الجمهورية العربية السورية</strong>. ولا يشمل هذا العقد أي سوق أو دولة أخرى يعمل فيها التطبيق أو قد يتوسع إليها مستقبلاً.</li>
|
||||
<li>لا يجوز توسيع النطاق الجغرافي لهذا العقد إلا بموجب ملحق تعديلي خطّي موقّع من جميع الأطراف.</li>
|
||||
<li><strong>حق الأولوية في التوسع الدولي:</strong> في حال رغبة الطرف الأول في توسيع النطاق الجغرافي للمشروع وتشغيل تطبيق Siro في أي دولة أو سوق خارج الجمهورية العربية السورية، يلتزم الطرف الأول بعرض هذه الفرصة الاستثمارية الجديدة على الطرف الثاني خطياً قبل عرضها على أي طرف ثالث. ويكون للطرف الثاني حق الأولوية (Right of First Refusal) في الاستثمار والمشاركة في السوق الجديد بذات الشروط أو بشروط يتم التوافق عليها، على أن يبدي الطرف الثاني رغبته خطياً خلال مدة لا تتجاوز <strong>أسبوعاً واحداً (7 أيام)</strong> من تاريخ استلام العرض المكتوب، وفي حال انقضاء هذه المدة دون رد أو في حال اعتذاره خطياً، يحق للطرف الأول التعاقد مع مستثمرين آخرين بحرية تامة ودون أي التزام تجاه الطرف الثاني.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثالثة: رأس المال الاستثماري وآلية الدفع</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يلتزم الطرف الثاني بتقديم رأس مال استثماري إجمالي قدره <strong class="sync-capital-words-span">مائتا ألف دولار أمريكي</strong> (<strong class="sync-capital-number-span">200,000</strong> <strong class="sync-currency-span">USD</strong>) لتمويل عمليات إطلاق المشروع وتشغيله في سوريا.</li>
|
||||
<li>يُسدَّد رأس المال الاستثماري على دفعات مجدولة ومرنة يتم التوافق عليها ودياً بين الأطراف بما يتماشى مع خطة العمل والاحتياجات التشغيلية للمشروع.</li>
|
||||
<li>تُودع جميع المبالغ والدفعات الاستثمارية في الحساب المصرفي التجاري للشركة في المملكة الأردنية الهاشمية، وذلك بعد إتمام تأسيس وتسجيل الشركة رسمياً وفتح حسابها التجاري في الأردن، لضمان وتسهيل انسياب وحركة الأموال التشغيلية والاستثمارية دخولاً وخروجاً.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- Page Break for elegant Print Layout -->
|
||||
<div class="page-break no-print my-4 border-t-2 border-dashed border-slate-200"></div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الرابعة: التزامات الأطراف</h4>
|
||||
<div class="space-y-3">
|
||||
<div>
|
||||
<h5 class="font-bold text-slate-900 text-[12.5px]">أولاً: التزامات الطرف الأول (الشركاء المؤسسون)</h5>
|
||||
<ol class="list-decimal list-inside space-y-1 pr-3 mt-1">
|
||||
<li>يتحمل الطرف الأول المسؤولية الكاملة والحصرية عن الجوانب التقنية والفنية والتشغيلية والإدارية للتطبيق، بما يشمل — دون حصر — التطوير البرمجي، وإدارة الخوادم، والصيانة الدورية، وإصلاح الأعطال الفنية، وإدارة فريق العمل التقني.</li>
|
||||
<li>إصدار التحديثات والتطويرات المستمرة لتطبيقَيْ الراكب والسائق بما يتلاءم مع متطلبات السوق السورية ويضمن تنافسية المنتج.</li>
|
||||
<li>تقديم تقرير أداء تشغيلي ومالي للطرف الثاني بشكل <strong>شهري</strong> يتضمن: عدد الرحلات المنفذة، عدد السائقين والركاب النشطين، الإيرادات الإجمالية، المصروفات التشغيلية، وصافي الأرباح.</li>
|
||||
<li>ضمان استمرارية الخدمة وتوفّر التطبيق لمستخدميه بنسبة لا تقل عن <strong>95%</strong> من أيام التشغيل الشهري (باستثناء حالات القوة القاهرة والصيانة المجدولة).</li>
|
||||
<li>الالتحاق والالتزام بالعمل الفني والتقني المستمر والدؤوب على تحديث وتطوير وصيانة نظام وتطبيقات Siro بانتظام، لضمان استقرار الخدمة وتشغيلها بكفاءة عالية وتلبية احتياجات السوق السورية.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h5 class="font-bold text-slate-900 text-[12.5px]">ثانياً: التزامات الطرف الثاني (الشركاء المستثمرون)</h5>
|
||||
<ol class="list-decimal list-inside space-y-1 pr-3 mt-1">
|
||||
<li>الالتحاق بسداد كامل رأس المال الاستثماري المتفق عليه وقدره (<span class="sync-capital-words-span">مائتا ألف دولار أمريكي</span>) وفق جدول الدفعات المحدد في المادة الثالثة.</li>
|
||||
<li>المساهمة الفعّالة بخبراتهم اللوجستية والعلاقاتية لتسهيل العمل التجاري داخل السوق السورية ودعم عمليات التسجيل والتوسع الميداني.</li>
|
||||
<li class="font-semibold text-slate-950 bg-slate-50 p-1.5 rounded border-r-2 border-slate-300">
|
||||
التعهد بمنح الطرف الأول الصلاحية الكاملة والمستقلة في اتخاذ القرارات الفنية والهندسية والبرمجية الخاصة بالتطبيق لضمان سير العمل واستقراره التشغيلي والتقني دون إعاقة؛
|
||||
</li>
|
||||
<li>التعاون الكامل مع الطرف الأول في توفير أي متطلبات إدارية أو تنظيمية أو حكومية تلزم لتشغيل المشروع داخل سوريا.</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الخامسة: نسب الشراكة وتوزيع الأرباح</h4>
|
||||
<ol class="list-decimal list-inside space-y-2">
|
||||
<li>يتم توزيع <strong>صافي الأرباح التشغيلية</strong> الناتجة عن تشغيل التطبيق في سوريا — بعد خصم كافة المصاريف التشغيلية والإدارية، وتكاليف الخوادم والبنية التحتية، والضرائب والرسوم الحكومية، وأجور فريق الدعم الفني والميداني — وفق النسب التالية:</li>
|
||||
</ol>
|
||||
|
||||
<!-- Table Block Inside Paper -->
|
||||
<div class="my-3 overflow-x-auto">
|
||||
<table class="w-full border-collapse border border-slate-800 text-center text-xs font-sans">
|
||||
<thead>
|
||||
<tr class="table-header-print bg-slate-50 text-slate-900 font-bold border-b border-slate-800">
|
||||
<th class="border border-slate-800 p-2 text-right pr-4">الشريك</th>
|
||||
<th class="border border-slate-800 p-2">الصفة التعاقدية</th>
|
||||
<th class="border border-slate-800 p-2 w-1/4">الحصة من صافي الأرباح</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="doc-shares-table-body">
|
||||
<!-- Dynamic Share Table Rows -->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<ol class="list-decimal list-inside space-y-1" start="2">
|
||||
<li>تُوزَّع الأرباح بصفة <strong>ربع سنوية</strong> (كل ثلاثة أشهر ميلادية) بناءً على القوائم المالية المعتمدة والمدقّقة لعمليات التطبيق في سوريا.</li>
|
||||
<li>لا تُوزَّع الأرباح إلا بعد تخصيص <strong>احتياطي تشغيلي</strong> بنسبة لا تقل عن <strong>10%</strong> من صافي الأرباح لتغطية الطوارئ والنفقات المستقبلية، ويتم الاتفاق بين الشركاء على آلية التصرف في هذا الاحتياطي.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة السادسة: فسخ العقد وتصفية الشراكة</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li class="font-semibold text-slate-950">
|
||||
في حال فسخ هذا العقد أو تصفية المشروع لأي سبب كان قبل استرداد الطرف الثاني لكامل رأس ماله الاستثماري، يكون للطرف الثاني الأولوية المطلقة في الحصول على المبالغ المتبقية والغير مصروفة من رأس ماله الفعلي (بعد خصم كافة النفقات التشغيلية والرواتب والمصاريف الإعلانية المنقضية والمثبتة محاسبياً) من أي عوائد تشغيلية متراكمة أو أصول ملموسة قابلة للتسييل مرتبطة بنشاط المشروع في سوريا حصراً، دون أن يحق له مطالبة الشركاء شخصياً بأي مبالغ تم صرفها وتسييرها في النفقات المذكورة.
|
||||
</li>
|
||||
<li>يتم تصفية جميع الحقوق والالتزامات المالية العالقة بين الأطراف عند الفسخ أو التصفية بما يتوافق مع القواعد القانونية والتجارية السائدة، وبما يضمن عدم الإضرار بأي طرف.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة السابعة: الملكية الفكرية والعلامة التجارية</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li id="ip-ownership-clause" class="bg-amber-100/40 p-2.5 rounded border-r-4 border-legal-gold leading-relaxed font-semibold text-slate-950">
|
||||
<!-- Dynamic IP Ownership Clause -->
|
||||
</li>
|
||||
<li>لا يُنشئ هذا العقد ولا يمنح الطرف الثاني (الشركاء المستثمرون) أو أي شريك آخر أي حق من حقوق الملكية الفكرية أو الصناعية أو الأدبية على الكود المصدري أو التطبيق أو العلامة التجارية، لا كلياً ولا جزئياً، سواء أثناء سريان العقد أو بعد انتهائه.</li>
|
||||
<li>يقتصر حق الطرف الثاني على <strong>الحصص المالية من صافي الأرباح التشغيلية</strong> الناتجة عن تشغيل التطبيق في النطاق الجغرافي المحدد في هذا العقد حصراً.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- Page Break for elegant Print Layout -->
|
||||
<div class="page-break no-print my-4 border-t-2 border-dashed border-slate-200"></div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثامنة: الإدارة واتخاذ القرارات</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يتولى الطرف الأول (الشركاء المؤسسون) <strong>الإدارة التقنية والفنية والتشغيلية الكاملة</strong> للتطبيق، ويملكون حصرياً صلاحية اتخاذ جميع القرارات البرمجية والهندسية والفنية دون الرجوع للطرف الثاني.</li>
|
||||
<li>تُتّخذ <strong>القرارات الاستراتيجية والتجارية الكبرى</strong> — كالتوسع الجغرافي، أو تغيير نموذج التسعير، أو الدخول في شراكات تجارية مع أطراف ثالثة — بالتشاور والإجماع بين الشركاء.</li>
|
||||
<li>في حال عدم التوافق على قرار تجاري أو استراتيجي، يُعرض الأمر على <strong>محكّم تجاري مستقل</strong> يُتّفق عليه بين الأطراف لإصدار رأي استشاري ملزم.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة التاسعة: السرية وعدم الإفشاء</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يلتزم جميع الأطراف بالحفاظ التام على سرية كافة المعلومات التقنية والمالية والتجارية والتسويقية المتعلقة بالمشروع، وعدم إفشائها أو تسريبها أو إتاحتها لأي طرف ثالث بأي وسيلة كانت.</li>
|
||||
<li>يسري التزام السرية أثناء فترة العقد و<strong>لمدة سنتين (2) ميلاديتين</strong> بعد انتهائه أو فسخه لأي سبب كان.</li>
|
||||
<li>يُستثنى من حكم السرية: المعلومات التي تصبح متاحة للعموم بشكل مشروع دون خطأ من الطرف المُفشي، أو المعلومات المطلوبة بموجب أمر قضائي أو تنظيمي واجب النفاذ.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة العاشرة: عدم المنافسة — المشروطة بنشاط الشركة</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يتعهد جميع الشركاء — طوال فترة سريان هذا العقد وما دام المشروع نشطاً وفعالاً تشغيلياً وتجارياً — بعدم القيام بأي مما يلي:
|
||||
<ul class="list-disc list-inside pr-3 mt-1 space-y-0.5">
|
||||
<li>تأسيس أو المشاركة أو الاستثمار في أي شركة أو تطبيق أو منصة تقدم خدمات النقل الذكي أو توصيل الركاب داخل الجمهورية العربية السورية.</li>
|
||||
<li>تقديم خدمات استشارية تقنية أو تجارية لأي منافس مباشر لتطبيق "Siro" في السوق السورية.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>يُشترط لسريان بند عدم المنافسة</strong> أن يكون مشروع تطبيق "Siro" في سوريا <strong>نشطاً ومستمراً في تقديم خدماته</strong> فعلياً وبشكل دوري يمكن إثباته.</li>
|
||||
<li>في حال توقّف المشروع عن العمل التشغيلي في سوريا لمدة تتجاوز <strong>تسعين (90) يوماً متتالياً</strong> — لأي سبب كان باستثناء القوة القاهرة — يُعتبر بند عدم المنافسة **ملغى ولاغياً تلقائياً** بحق جميع الأطراف، ويحق لأي شريك ممارسة أي نشاط تجاري مشابه بحرية تامة ودون قيد أو شرط.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الحادية عشرة: مدة العقد وتجديده</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يسري هذا العقد اعتباراً من تاريخ توقيعه ويمتد لمدة **سنتين (2) ميلاديتين** قابلة للتجديد لفترات مماثلة بموافقة الأطراف.</li>
|
||||
<li>يُجدَّد العقد تلقائياً لفترات مماثلة ما لم يُخطر أحد الأطراف الآخرين خطياً برغبته في عدم التجديد قبل **تسعين (90) يوماً** من تاريخ انتهاء المدة الساري.</li>
|
||||
<li>في حال عدم التجديد، تُصفّى الحقوق والالتزامات المالية القائمة بين الأطراف وفق أحكام هذا العقد.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثانية عشرة: الانسحاب والتخارج</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يحق للطرف الثاني (الشركاء المستثمرون) الانسحاب من هذه الشراكة بموجب إشعار خطي مسبق بمدة لا تقل عن **مائة وعشرين (120) يوماً**.</li>
|
||||
<li><strong>في حال رغبة الطرف الثاني في الانسحاب:</strong>
|
||||
<ul class="list-disc list-inside pr-3 mt-1 space-y-0.5">
|
||||
<li class="font-semibold text-slate-950">
|
||||
يحق له المطالبة بالجزء غير المسترد (المتبقي والغير مصروف محاسبياً) من رأس ماله الاستثماري الفعلي فقط من العوائد التشغيلية المتراكمة، دون أن يحق له بأي حال من الأحوال المطالبة أو استرجاع أي مبالغ تم صرفها كرواتب، أو نفقات تشغيلية، أو إعلانية، أو أجور للمنصة، وذلك وفق خطة سداد مجدولة يُتّفق عليها بين الأطراف لا تتجاوز **اثني عشر (12) شهراً** من تاريخ الانسحاب الفعلي.
|
||||
</li>
|
||||
<li>تنقضي حصته في الأرباح المستقبلية اعتباراً من تاريخ نفاذ الانسحاب.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="font-bold bg-slate-50 p-2.5 rounded border-r-3 border-slate-400 leading-relaxed">
|
||||
<strong>ثالثاً: ضمان الاستمرارية والالتزام التشغيلي للطرف الأول وحالات العجز القاهر:</strong> نظراً لأن الجانب التشغيلي والتقني يمثّل عماد وجوهر هذا العقد، يلتزم الطرف الأول بالالتزام التام بتقديم خدماته التشغيلية والبرمجية طوال مدة سريان هذا العقد ولا يملك أحد حق الانسحاب الفردي الاختياري الذي يعطل المنصة. وفي حال طرأ ظرف طبي أو صحي أو عجز قاهر كلي يثبت رسمياً يمنع أحد المؤسسين من الاستمرار، يلتزم الطرف المتأثر بضمان نقل سلس وفوري وخالٍ من العيوب لكافة مهامه الفنية والتشغيلية ورموز لوحات التحكم وقواعد البيانات إلى الطرف الآخر لضمان بقاء التطبيق فعالاً ومحمياً، وتتم تسوية حقوقه ودياً دون المساس بكيان وتدفق المشروع واستثمار الطرف الثاني.
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثالثة عشرة: الضمانات والمسؤولية وعقد بذل العناية</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يُقرّ الطرف الأول بأن التطبيق خالٍ من أي رهن أو حجز أو حق للغير يمنع تشغيله واستثماره تجارياً وفق هذا العقد.</li>
|
||||
<li>يُقرّ الطرف الثاني بأن مصادر التمويل المستخدمة في الاستثمار مشروعة وقانونية وغير مرتبطة بأي نشاط محظور قانوناً.</li>
|
||||
<li class="bg-amber-50/50 p-2.5 rounded border-r-3 border-legal-gold">
|
||||
<strong>بند بذل العناية وحماية المسؤولية من الخسائر (سوء الطالع):</strong> يُقر ويوافق الشركاء صراحةً على أن طبيعة التزام الطرف الأول تجاه تشغيل وتطوير التطبيق هي **التزام ببذل عناية مهنية فائقة ودؤوبة وليس التزاماً بتحقيق نتيجة أو ضمان ربح**. يلتزم الطرف الأول ببذل أقصى جهوده الفنية والتقنية والإدارية بناءً على خطة العمل والتجارب التشغيلية السابقة المدروسة، دون أي تعهد أو ضمانة صريحة أو ضمنية بتحقيق عوائد مالية أو أرباح محددة، أو تجنيب المشروع الخسائر التشغيلية.
|
||||
</li>
|
||||
<li class="bg-amber-50/50 p-2.5 rounded border-r-3 border-legal-gold">
|
||||
بناءً على البند السابق، لا يتحمل الطرف الأول أي مسؤولية شخصية أو تضامنية عن الخسائر التشغيلية أو التجارية أو المالية الطبيعية التي قد تصيب المشروع في السوق السورية نتيجة لظروف السوق، أو المنافسة التجارية، أو تقلبات البيئة الاستثمارية والظروف العامة (سوء الطالع)، وتُغطى هذه الخسائر — إن وُجدت — من رأس مال المشروع أو عوائده التشغيلية، شريطة خلو تصرفات الطرف الأول من أي غش، أو تقصير متعمد، أو إهمال جسيم يثبت قضائياً بحق الطرف الأول.
|
||||
</li>
|
||||
<li>يلتزم الطرف الأول ببذل العناية المهنية اللازمة لحماية بيانات المستخدمين والسائقين، والامتثال لأفضل ممارسات أمن المعلومات.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الرابعة عشرة: القوة القاهرة</h4>
|
||||
<p>لا يُعدّ أي طرف مُخِلاً بالتزاماته بموجب هذا العقد إذا حال دون تنفيذها ظرف من ظروف القوة القاهرة، وتشمل — دون حصر: الحروب، الكوارث الطبيعية، الأوبئة، القرارات الحكومية القاهرة، العقوبات الدولية، أو انقطاع شبكة الإنترنت الكامل في الدولة.</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الخامسة عشرة: تعديل العقد</h4>
|
||||
<p>لا يجوز تعديل أو تغيير أي بند من بنود هذا العقد إلا بموجب **ملحق تعديلي خطّي** موقَّع من جميع الأطراف ومؤرَّخ، ويُعتبر أي تعديل شفهي أو ضمني باطلاً ولا يُعتدّ به.</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة السادسة عشرة: القانون الواجب التطبيق وفض النزاعات</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يخضع هذا العقد وتفسيره وتنفيذه للقوانين التجارية المعمول بها.</li>
|
||||
<li>في حال نشوء أي خلاف أو نزاع بين الأطراف بشأن تفسير أو تنفيذ أي بند من بنود هذا العقد، يتم حله وفق الترتيب التالي:
|
||||
<ul class="list-disc list-inside pr-3 mt-1 space-y-0.5">
|
||||
<li><strong>أولاً:</strong> التسوية الودية المباشرة بين الأطراف خلال مدة لا تتجاوز <strong>ثلاثين (30) يوماً</strong> من تاريخ الإخطار بالنزاع.</li>
|
||||
<li><strong>ثانياً:</strong> اللجوء إلى <strong>التحكيم التجاري</strong> أمام محكّم أو هيئة تحكيمية مستقلة يتفق عليها الأطراف، ويكون حكم التحكيم نهائياً وملزماً.</li>
|
||||
<li><strong>ثالثاً:</strong> في حال تعذّر التحكيم، يُرفع النزاع أمام المحكمة المختصة.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة السابعة عشرة: أحكام ختامية</h4>
|
||||
<ol class="list-decimal list-inside space-y-1">
|
||||
<li>يمثّل هذا العقد كامل الاتفاق بين الأطراف فيما يتعلق بموضوعه، ويُلغي أي اتفاقات شفهية أو مكتوبة سابقة بين الأطراف بشأن نفس الموضوع.</li>
|
||||
<li>في حال بطلان أي بند من بنود هذا العقد أو عدم قابليته للتنفيذ، تظل البنود الأخرى صحيحة ونافذة ومُلزِمة.</li>
|
||||
<li>حُرّر هذا العقد من نسخ أصلية متطابقة بيد كل طرف نسخة للعمل بموجبها عند اللزوم.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Formal Signatures Page with styling -->
|
||||
<div class="mt-8 space-y-6">
|
||||
<h3 class="font-sans font-extrabold text-slate-950 text-[14px] border-b border-slate-800 pb-1.5">توقيعات أطراف العقد والشهود</h3>
|
||||
|
||||
<div class="overflow-x-auto">
|
||||
<table class="w-full border-collapse border border-slate-800 text-center text-xs font-sans">
|
||||
<thead>
|
||||
<tr class="table-header-print bg-slate-50 text-slate-900 font-bold border-b border-slate-800">
|
||||
<th class="border border-slate-800 p-2">الصفة التعاقدية</th>
|
||||
<th class="border border-slate-800 p-2 text-right pr-4">الاسم الكامل</th>
|
||||
<th class="border border-slate-800 p-2 w-1/4">التوقيع</th>
|
||||
<th class="border border-slate-800 p-2 w-1/5">التاريخ</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="doc-signatures-table-body">
|
||||
<!-- Dynamic Signatures Rows -->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- Witnesses Section -->
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 pt-2 text-xs font-sans">
|
||||
<div class="border border-slate-300 p-3 rounded-lg space-y-1.5">
|
||||
<span class="font-bold text-slate-900">شاهد أول (اختياري):</span>
|
||||
<div class="text-slate-500 text-[11px]">الاسم: _____________________________________</div>
|
||||
<div class="text-slate-500 text-[11px]">التوقيع: ___________________________________</div>
|
||||
</div>
|
||||
<div class="border border-slate-300 p-3 rounded-lg space-y-1.5">
|
||||
<span class="font-bold text-slate-900">شاهد ثانٍ (اختياري):</span>
|
||||
<div class="text-slate-500 text-[11px]">الاسم: _____________________________________</div>
|
||||
<div class="text-slate-500 text-[11px]">التوقيع: ___________________________________</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Dynamic Appendix Sections -->
|
||||
<div id="doc-appendices-container" class="space-y-6">
|
||||
<!-- Dynamic Partner Passports -->
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Script handling dynamic actions and lists -->
|
||||
<script>
|
||||
// Configuration
|
||||
const country = "سوريا";
|
||||
|
||||
let founders = [
|
||||
{ name: '', nationality: 'أردني', id: '', share: 0 }
|
||||
];
|
||||
|
||||
let partners = [
|
||||
{ name: '', nationality: 'أردني', id: '', share: 0, passportDataUrl: '' }
|
||||
];
|
||||
|
||||
// Init UI inputs on DOM load
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
renderSidebar();
|
||||
syncContract();
|
||||
});
|
||||
|
||||
function renderSidebar() {
|
||||
// Render Founders in Sidebar
|
||||
const foundersContainer = document.getElementById('founders-container');
|
||||
foundersContainer.innerHTML = '';
|
||||
|
||||
founders.forEach((founder, index) => {
|
||||
const div = document.createElement('div');
|
||||
div.className = "bg-white p-3 rounded border border-slate-200 space-y-2 relative shadow-sm";
|
||||
div.innerHTML = `
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[10px] font-bold text-slate-400">مؤسس #${index + 1}</span>
|
||||
${founders.length > 1 ? `
|
||||
<button onclick="removeFounder(${index})" class="text-[10px] text-red-500 hover:text-red-700 font-bold">
|
||||
حذف
|
||||
</button>
|
||||
` : ''}
|
||||
</div>
|
||||
<div class="space-y-1.5">
|
||||
<input type="text" placeholder="الاسم الكامل" value="${founder.name}" oninput="updateFounderField(${index}, 'name', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
<div class="grid grid-cols-2 gap-1.5">
|
||||
<input type="text" placeholder="الجنسية (مثال: أردني)" value="${founder.nationality}" oninput="updateFounderField(${index}, 'nationality', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
<input type="number" placeholder="الأرباح %" value="${founder.share || ''}" oninput="updateFounderField(${index}, 'share', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
</div>
|
||||
<input type="text" placeholder="الرقم الوطني وجواز السفر" value="${founder.id}" oninput="updateFounderField(${index}, 'id', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
</div>
|
||||
`;
|
||||
foundersContainer.appendChild(div);
|
||||
});
|
||||
|
||||
// Render Partners in Sidebar
|
||||
const partnersContainer = document.getElementById('partners-container');
|
||||
partnersContainer.innerHTML = '';
|
||||
|
||||
partners.forEach((partner, index) => {
|
||||
const div = document.createElement('div');
|
||||
div.className = "bg-white p-3 rounded border border-slate-200 space-y-2 relative shadow-sm";
|
||||
div.innerHTML = `
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-[10px] font-bold text-slate-400">شريك مستثمر #${index + 1}</span>
|
||||
${partners.length > 1 ? `
|
||||
<button onclick="removePartner(${index})" class="text-[10px] text-red-500 hover:text-red-700 font-bold">
|
||||
حذف
|
||||
</button>
|
||||
` : ''}
|
||||
</div>
|
||||
<div class="space-y-1.5">
|
||||
<input type="text" placeholder="الاسم الكامل" value="${partner.name}" oninput="updatePartnerField(${index}, 'name', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
<div class="grid grid-cols-2 gap-1.5">
|
||||
<input type="text" placeholder="الجنسية (مثال: أردني)" value="${partner.nationality}" oninput="updatePartnerField(${index}, 'nationality', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
<input type="number" placeholder="الأرباح %" value="${partner.share || ''}" oninput="updatePartnerField(${index}, 'share', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
</div>
|
||||
<input type="text" placeholder="الرقم الوطني وجواز السفر" value="${partner.id}" oninput="updatePartnerField(${index}, 'id', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
|
||||
<div class="flex flex-col">
|
||||
<label class="text-[9px] text-slate-400 mb-0.5">تحميل صورة جواز السفر</label>
|
||||
<input type="file" accept="image/*" onchange="uploadPartnerPassport(${index}, this)" class="w-full text-[10px] bg-slate-50 border border-slate-200 rounded p-0.5">
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
partnersContainer.appendChild(div);
|
||||
});
|
||||
|
||||
// Update add buttons state
|
||||
document.getElementById('btn-add-founder').style.display = founders.length >= 3 ? 'none' : 'block';
|
||||
document.getElementById('btn-add-partner').style.display = partners.length >= 3 ? 'none' : 'block';
|
||||
}
|
||||
|
||||
// Founders state management
|
||||
function addFounder() {
|
||||
if (founders.length < 3) {
|
||||
founders.push({ name: '', nationality: 'أردني', id: '', share: 0 });
|
||||
renderSidebar();
|
||||
syncContract();
|
||||
}
|
||||
}
|
||||
function removeFounder(index) {
|
||||
founders.splice(index, 1);
|
||||
renderSidebar();
|
||||
syncContract();
|
||||
}
|
||||
function updateFounderField(index, field, value) {
|
||||
founders[index][field] = field === 'share' ? (parseFloat(value) || 0) : value;
|
||||
syncContract();
|
||||
}
|
||||
|
||||
// Partners state management
|
||||
function addPartner() {
|
||||
if (partners.length < 3) {
|
||||
partners.push({ name: '', nationality: 'أردني', id: '', share: 0, passportDataUrl: '' });
|
||||
renderSidebar();
|
||||
syncContract();
|
||||
}
|
||||
}
|
||||
function removePartner(index) {
|
||||
partners.splice(index, 1);
|
||||
renderSidebar();
|
||||
syncContract();
|
||||
}
|
||||
function updatePartnerField(index, field, value) {
|
||||
partners[index][field] = field === 'share' ? (parseFloat(value) || 0) : value;
|
||||
syncContract();
|
||||
}
|
||||
function uploadPartnerPassport(index, fileInput) {
|
||||
const file = fileInput.files[0];
|
||||
if (file) {
|
||||
const reader = new FileReader();
|
||||
reader.onload = function(evt) {
|
||||
partners[index].passportDataUrl = evt.target.result;
|
||||
syncContract();
|
||||
};
|
||||
reader.readAsDataURL(file);
|
||||
} else {
|
||||
partners[index].passportDataUrl = '';
|
||||
syncContract();
|
||||
}
|
||||
}
|
||||
|
||||
// Global Sync logic
|
||||
function syncContract() {
|
||||
// 1. Sync Date and Capital
|
||||
const inputDateVal = document.getElementById('input-date').value || '....................';
|
||||
const inputCapitalVal = parseFloat(document.getElementById('input-capital').value) || 0;
|
||||
const inputCapitalWordsVal = document.getElementById('input-capital-words').value || '....................';
|
||||
const inputCurrencyVal = document.getElementById('input-currency').value || 'USD';
|
||||
|
||||
document.getElementById('sync-contract-date').textContent = inputDateVal;
|
||||
document.getElementById('sync-text-date').textContent = inputDateVal;
|
||||
|
||||
document.querySelectorAll('.sync-capital-words-span').forEach(el => el.textContent = inputCapitalWordsVal);
|
||||
document.querySelectorAll('.sync-capital-number-span').forEach(el => el.textContent = inputCapitalVal.toLocaleString());
|
||||
document.querySelectorAll('.sync-currency-span').forEach(el => el.textContent = inputCurrencyVal);
|
||||
|
||||
// 2. Render Founders list in document
|
||||
const docFoundersList = document.getElementById('doc-founders-list');
|
||||
docFoundersList.innerHTML = '';
|
||||
founders.forEach((founder, idx) => {
|
||||
const nameStr = founder.name ? `السيد/ <strong>${founder.name}</strong>` : 'السيد/ <strong>.......................................................</strong>';
|
||||
const natStr = founder.nationality ? `${founder.nationality} الجنسية` : '.................... الجنسية';
|
||||
const idStr = founder.id ? `الرقم الوطني/جواز السفر <span class="highlight-field">${founder.id}</span>` : 'الرقم الوطني/جواز السفر <span class="highlight-field">.......................................................</span>';
|
||||
|
||||
const p = document.createElement('p');
|
||||
p.innerHTML = `${idx + 1}. ${nameStr}، ${natStr}، يحمل ${idStr}، ويُشار إليه بـ <strong>"الشريك المؤسس ${getArabicOrdinal(idx + 1)}"</strong>.`;
|
||||
docFoundersList.appendChild(p);
|
||||
});
|
||||
|
||||
// 3. Render Partners list in document
|
||||
const docPartnersList = document.getElementById('doc-partners-list');
|
||||
docPartnersList.innerHTML = '';
|
||||
partners.forEach((partner, idx) => {
|
||||
const nameStr = partner.name ? `السيد/ <strong>${partner.name}</strong>` : 'السيد/ <strong>.......................................................</strong>';
|
||||
const natStr = partner.nationality ? `${partner.nationality} الجنسية` : '.................... الجنسية';
|
||||
const idStr = partner.id ? `الرقم الوطني / رقم الهوية <span class="highlight-field">${partner.id}</span>` : 'الرقم الوطني / رقم الهوية <span class="highlight-field">.......................................................</span>';
|
||||
|
||||
const p = document.createElement('p');
|
||||
p.innerHTML = `${idx + 1}. ${nameStr}، ${natStr}، يحمل ${idStr}، ويُشار إليه بـ <strong>"الشريك المستثمر ${getArabicOrdinal(idx + 1)}"</strong> أو <strong>"الطرف الثاني"</strong>.`;
|
||||
docPartnersList.appendChild(p);
|
||||
});
|
||||
|
||||
// 4. Render share tables and check sum
|
||||
const tableBody = document.getElementById('doc-shares-table-body');
|
||||
tableBody.innerHTML = '';
|
||||
let totalShare = 0;
|
||||
|
||||
founders.forEach((founder, idx) => {
|
||||
totalShare += founder.share;
|
||||
const tr = document.createElement('tr');
|
||||
tr.className = "border-b border-slate-800";
|
||||
tr.innerHTML = `
|
||||
<td class="border border-slate-800 p-2 text-right pr-4 font-bold">${founder.name || '.......................................................'}</td>
|
||||
<td class="border border-slate-800 p-2 text-slate-600">الشريك المؤسس ${getArabicOrdinal(idx + 1)}</td>
|
||||
<td class="border border-slate-800 p-2 font-bold"><span class="text-slate-950 text-sm">${founder.share}</span>%</td>
|
||||
`;
|
||||
tableBody.appendChild(tr);
|
||||
});
|
||||
|
||||
partners.forEach((partner, idx) => {
|
||||
totalShare += partner.share;
|
||||
const tr = document.createElement('tr');
|
||||
tr.className = "border-b border-slate-800";
|
||||
tr.innerHTML = `
|
||||
<td class="border border-slate-800 p-2 text-right pr-4 font-bold">${partner.name || '.......................................................'}</td>
|
||||
<td class="border border-slate-800 p-2 text-slate-600">الشريك المستثمر ${getArabicOrdinal(idx + 1)} (الطرف الثاني)</td>
|
||||
<td class="border border-slate-800 p-2 font-bold"><span class="text-slate-950 text-sm">${partner.share}</span>%</td>
|
||||
`;
|
||||
tableBody.appendChild(tr);
|
||||
});
|
||||
|
||||
// 5. Update validation message
|
||||
document.getElementById('share-sum').textContent = totalShare;
|
||||
const indicator = document.getElementById('share-indicator');
|
||||
const validationMsg = document.getElementById('share-validation-msg');
|
||||
if (totalShare === 100) {
|
||||
indicator.className = "text-[10px] font-bold px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-700";
|
||||
validationMsg.className = "text-[11px] p-2 rounded bg-emerald-50 text-emerald-800 border border-emerald-200 font-semibold leading-relaxed";
|
||||
validationMsg.innerHTML = "✅ مجموع النسب متوازن (100%). المستند آمن وجاهز تماماً للطباعة كـ PDF.";
|
||||
} else {
|
||||
indicator.className = "text-[10px] font-bold px-2 py-0.5 rounded-full bg-red-100 text-red-600";
|
||||
validationMsg.className = "text-[11px] p-2 rounded bg-red-50 text-red-700 border border-red-200 font-medium leading-relaxed";
|
||||
validationMsg.innerHTML = `⚠️ مجموع الحصص الحالي هو <b>${totalShare}%</b>. يرجى تعديل الأرقام ليكون الإجمالي 100% لمطابقة شروط العقد الأساسية.`;
|
||||
}
|
||||
|
||||
// 6. Dynamic IP Ownership Clause (First founder solely owns IP, list exclusions)
|
||||
const firstFounderName = founders[0] && founders[0].name ? founders[0].name : '.......................................................';
|
||||
let exclusions = [];
|
||||
founders.forEach((f, idx) => {
|
||||
if (idx > 0 && f.name) exclusions.push(`الشريك المؤسس ${f.name}`);
|
||||
});
|
||||
partners.forEach(p => {
|
||||
if (p.name) exclusions.push(`المستثمر ${p.name}`);
|
||||
});
|
||||
const exclusionsStr = exclusions.length > 0 ? ` (بما فيهم ${exclusions.join(' و ')})` : '';
|
||||
|
||||
const ipClause = document.getElementById('ip-ownership-clause');
|
||||
ipClause.innerHTML = `
|
||||
يُقرّ ويتفق جميع الأطراف صراحةً على أن الكود المصدري (Source Code) والبرمجي لتطبيق "Siro" بجميع إصداراته (الراكب، السائق، لوحة الإدارة)، وكافة التصاميم والبنية الهندسية وقواعد البيانات والخوارزميات والعلامة التجارية والاسم التجاري والشعار، هي ملكية خاصة وحصرية ومطلقة وأبدية وتؤول بالكامل وتحديداً للسيد <span class="text-slate-950 font-extrabold border-b-2 border-legal-gold/70 pb-0.5">${firstFounderName} بمفرده وبشكل أبدّي</span> دون غيره، ولا يحق لأي طرف آخر${exclusionsStr} منازعته عليها أو الادعاء بأي حقوق عليها تحت أي ظرف كان.
|
||||
`;
|
||||
|
||||
// 7. Render Signatures
|
||||
const sigTableBody = document.getElementById('doc-signatures-table-body');
|
||||
sigTableBody.innerHTML = '';
|
||||
|
||||
founders.forEach((founder, idx) => {
|
||||
const tr = document.createElement('tr');
|
||||
tr.className = "border-b border-slate-800";
|
||||
tr.innerHTML = `
|
||||
<td class="border border-slate-800 p-2.5 text-slate-700 font-medium">الشريك المؤسس ${getArabicOrdinal(idx + 1)}</td>
|
||||
<td class="border border-slate-800 p-2.5 text-right pr-4 font-bold">${founder.name || '.......................................................'}</td>
|
||||
<td class="border border-slate-800 p-2.5 text-slate-400">.......................</td>
|
||||
<td class="border border-slate-800 p-2.5 font-bold sync-text-table-date">${inputDateVal}</td>
|
||||
`;
|
||||
sigTableBody.appendChild(tr);
|
||||
});
|
||||
|
||||
partners.forEach((partner, idx) => {
|
||||
const tr = document.createElement('tr');
|
||||
tr.className = "border-b border-slate-800";
|
||||
tr.innerHTML = `
|
||||
<td class="border border-slate-800 p-2.5 text-slate-700 font-medium">الشريك المستثمر ${getArabicOrdinal(idx + 1)}</td>
|
||||
<td class="border border-slate-800 p-2.5 text-right pr-4 font-bold">${partner.name || '.......................................................'}</td>
|
||||
<td class="border border-slate-800 p-2.5 text-slate-400">.......................</td>
|
||||
<td class="border border-slate-800 p-2.5 font-bold sync-text-table-date">${inputDateVal}</td>
|
||||
`;
|
||||
sigTableBody.appendChild(tr);
|
||||
});
|
||||
|
||||
// 8. Render Appendices for Passports
|
||||
const appendicesContainer = document.getElementById('doc-appendices-container');
|
||||
appendicesContainer.innerHTML = '';
|
||||
|
||||
partners.forEach((partner, idx) => {
|
||||
const pName = partner.name || `الشريك المستثمر ${getArabicOrdinal(idx + 1)}`;
|
||||
const div = document.createElement('div');
|
||||
div.className = "page-break no-print my-6 border-t-2 border-dashed border-slate-300 pt-6";
|
||||
div.innerHTML = `
|
||||
<div class="space-y-4">
|
||||
<h3 class="font-sans font-extrabold text-slate-950 text-[14px] border-b border-slate-800 pb-1.5">المرفقات: صورة جواز سفر الشريك المستثمر (${pName})</h3>
|
||||
<div class="flex flex-col items-center justify-center p-6 border border-dashed border-slate-300 rounded-lg bg-slate-50/50">
|
||||
${partner.passportDataUrl ? `
|
||||
<img class="max-h-[140mm] max-w-full rounded shadow-sm border border-slate-200" src="${partner.passportDataUrl}" alt="جواز سفر ${pName}">
|
||||
` : `
|
||||
<div class="text-center py-10 text-slate-400 text-xs font-sans">
|
||||
<svg class="w-12 h-12 mx-auto mb-2 opacity-50" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"></path>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"></path>
|
||||
</svg>
|
||||
<span>لم يتم إرفاق صورة جواز السفر للشريك (${pName}) بعد. استخدم خيار التحميل في لوحة التحكم لإرفاق الصورة.</span>
|
||||
</div>
|
||||
`}
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
appendicesContainer.appendChild(div);
|
||||
});
|
||||
}
|
||||
|
||||
// Helper to get Arabic Ordinals
|
||||
function getArabicOrdinal(num) {
|
||||
const ordinals = ["", "الأول", "الثاني", "الثالث", "الرابع", "الخامس"];
|
||||
return ordinals[num] || `${num}`;
|
||||
}
|
||||
|
||||
// Sync inputs from date & capital changes
|
||||
document.getElementById('input-date').addEventListener('input', syncContract);
|
||||
document.getElementById('input-capital').addEventListener('input', (e) => {
|
||||
const num = parseInt(e.target.value) || 0;
|
||||
// Auto mapping simple numbers to words
|
||||
const mapper = {
|
||||
100000: "مائة ألف",
|
||||
150000: "مائة وخمسون ألف",
|
||||
180000: "مائة وثمانون ألف",
|
||||
200000: "مائتا ألف",
|
||||
250000: "مائتان وخمسون ألف",
|
||||
300000: "ثلاثمائة ألف",
|
||||
400000: "أربعمائة ألف",
|
||||
500000: "خمسمائة ألف"
|
||||
};
|
||||
const currencyLabel = document.getElementById('input-currency').value === 'USD' ? 'دولار أمريكي' : '';
|
||||
if (mapper[num]) {
|
||||
document.getElementById('input-capital-words').value = mapper[num] + (currencyLabel ? ' ' + currencyLabel : '');
|
||||
}
|
||||
syncContract();
|
||||
});
|
||||
document.getElementById('input-capital-words').addEventListener('input', syncContract);
|
||||
document.getElementById('input-currency').addEventListener('input', syncContract);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
@@ -0,0 +1,320 @@
|
||||
# تقرير تسويقي شامل لمنصة Siro (سِيرُو) — تحليل الميزات والإضافات
|
||||
|
||||
---
|
||||
|
||||
## 🚀 نظرة عامة عن المنصة
|
||||
|
||||
**Siro (سِيرُو)** هي منصة متكاملة لخدمات النقل والتوصيل تعمل في **3 دول**: **سوريا، الأردن، مصر**، وتُعد منصة ذكية متعددة الخدمات تقدم حلول نقل متطورة تربط بين **الركاب** و**السائقين (الكباتن)** من خلال **4 تطبيقات رئيسية** تعمل معًا بتناغم تام.
|
||||
|
||||
المنصة ليست مجرد تطبيق نقل عادي، بل هي **نظام بيئي متكامل** (Ecosystem) يغطي كامل رحلة العميل من لحظة طلب الرحلة إلى ما بعد اكتمالها، مع ميزات متقدمة تنافس كبرى منصات النقل عالميًا.
|
||||
|
||||
---
|
||||
|
||||
## 📱 التطبيقات الأربعة (رباعية التطبيقات المترابطة)
|
||||
|
||||
### 1️⃣ تطبيق الراكب (Siro Rider) — تجربة الركوب الذكية
|
||||
- **الوظيفة**: يتيح للراكب طلب رحلة بسهولة مع واجهة خرائط مدمجة
|
||||
- **الميزات**: البحث عن الوجهة، عرض السعر التقديري، اختيار نوع المركبة، تتبع السائق المباشر، دفع إلكتروني، تقييم السائق
|
||||
- **الحالة**: متوفر على **iOS و Android**
|
||||
|
||||
### 2️⃣ تطبيق السائق (Siro Driver) — منصة الكابتن الاحترافية
|
||||
- **الوظيفة**: تمكين السائقين من استقبال الطلبات وإدارة الرحلات
|
||||
- **الميزات**:
|
||||
- 🎯 **عروض الرحلات عبر التراكب المباشر (Overlay)** — تظهر فوق أي شاشة حتى لو كان التطبيق في الخلفية
|
||||
- 🗺️ **ملاحة صوتية (Turn-by-Turn)** مع إرشادات TTS خطوة بخطوة
|
||||
- 🔄 **وضع الخدمة (Online/Offline)** مع تشغيل تلقائي في الخلفية
|
||||
- 📊 **إحصائيات الأرباح** لحظيًا (الرحلات اليومية، الإجمالي، العمولات)
|
||||
- **ميزة فريدة**: نظام Android Foreground Service يعمل 24/7 لتحديث الموقع حتى عند تصغير التطبيق
|
||||
|
||||
### 3️⃣ تطبيق الإدارة (Siro Admin) — لوحة تحكم شاملة (ويب)
|
||||
- **الوظيفة**: لوحة تحكم إدارية متكاملة عبر Flutter Web (PWA)
|
||||
- **الميزات الإدارية**:
|
||||
| الميزة | الوصف |
|
||||
|--------|-------|
|
||||
| 📈 **لوحة التحكم (Dashboard)** | إحصائيات فورية مع رسوم بيانية متقدمة |
|
||||
| 👨✈️ **إدارة الكباتن** | قبول/رفض، توثيق، حظر، مراجعة ملفات |
|
||||
| 👤 **إدارة الركاب** | تفاصيل كاملة، سجل الرحلات، البلوك |
|
||||
| 🚗 **إدارة الرحلات** | تتبع مباشر، سجل كامل، بحث متقدم |
|
||||
| 💰 **الإدارة المالية** | تقارير الأرباح، العمولات، التسويات |
|
||||
| 📊 **التحليلات المتقدمة** | مؤشرات الأداء، التقارير الشهرية/السنوية |
|
||||
| 🔒 **الأمان والرقابة** | سجلات التدقيق (Audit Logs)، مكافحة الاحتيال |
|
||||
| 🎯 **نظام العمولات (Kazan)** | تحرير نسب العمولات ونماذج الأسعار يدويًا |
|
||||
| 🏷️ **العروض الترويجية** | إنشاء وإدارة أكواد الخصم |
|
||||
| 👥 **إدارة الموظفين** | صلاحيات الأدوار، موافقات التسجيل |
|
||||
| ⭐ **مراقبة الجودة** | بطاقات أداء السائقين، القوائم السوداء |
|
||||
| 🖥️ **مراقبة الخوادم** | حالة السيرفرات، الأداء، وقت التشغيل |
|
||||
| 📄 **إدارة الفواتير** | إنشاء وطباعة الفواتير |
|
||||
|
||||
### 4️⃣ تطبيق الخدمة الميدانية (Siro Service) — منصة تسجيل السائقين
|
||||
- **الوظيفة**: تطبيق خاص بموظفي الخدمة الميدانية لتسجيل وتوثيق السائقين الجدد
|
||||
- **الميزات**:
|
||||
- 📸 تصوير المستندات والهوية مباشرة من الكاميرا
|
||||
- 🤖 استخراج بيانات المستندات تلقائيًا عبر **الذكاء الاصطناعي (Azure OCR + OpenAI + Llama AI)**
|
||||
- ✅ التحقق الميداني من السيارة والسائق
|
||||
- 📝 رفع الصور مباشرة إلى الخادم
|
||||
- ⏱️ تسريع عملية التسجيل من أيام إلى دقائق
|
||||
|
||||
---
|
||||
|
||||
## 🚙 أنواع المركبات المتاحة (12 نوعًا)
|
||||
|
||||
| النوع | الرمز | الوصف |
|
||||
|-------|-------|-------|
|
||||
| ⚡ **سرعة (Speed)** | Speed | الرحلات القياسية — السيارات العادية |
|
||||
| 🌟 **راحة (Comfort)** | Comfort | رحلات فاخرة بسيارات مريحة |
|
||||
| 👨👩👧👦 **عائلية (Family)** | Family | سيارات عائلية كبيرة الحجم |
|
||||
| 📦 **توصيل (Delivery)** | Delivery | توصيل الطرود والطلبات |
|
||||
| 💸 **اقتصادي (Free/Blash)** | Blash | رحلات اقتصادية بأسعار مخفضة |
|
||||
| 🌙 **ليلية (Late)** | Late | رحلات خارج أوقات الذروة |
|
||||
| 🚛 **نقل ثقيل (Heavy)** | Heavy | نقل البضائع والأغراض الثقيلة |
|
||||
| 🏔️ **طبيعة (Nature)** | Nature | رحلات الطرق الخلابة والمناطق الوعرة |
|
||||
| 🔌 **كهربائي (Electric)** | Electric | سيارات كهربائية صديقة للبيئة |
|
||||
| 🏍️ **دراجة وردية (Pink Bike)** | PinkBike | دراجات نارية للتنقل السريع |
|
||||
| 🚐 **فان (Van)** | Van | حافلات صغيرة للمجموعات |
|
||||
| 👩 **سائقة (Female Driver)** | FemalDriver | سائقات نساء — خيار خاص للسيدات |
|
||||
|
||||
✅ **مدعوم في 3 دول**: سوريا، الأردن، مصر
|
||||
|
||||
---
|
||||
|
||||
## 💳 طرق الدفع المتعددة (7 خيارات)
|
||||
|
||||
| طريقة الدفع | التوفر |
|
||||
|-------------|--------|
|
||||
| 💵 **نقدي (Cash)** | الدول الثلاث |
|
||||
| 💳 **بطاقة فيزا/ماستركارد** عبر PayMob | سوريا، الأردن، مصر |
|
||||
| 👛 **محفظة إلكترونية (Wallet)** | رصيد داخلي للسائق والراكب |
|
||||
| 📱 **MTN موبايل موني** | سوريا |
|
||||
| 📱 **سيريتل موبايل موني** | سوريا |
|
||||
| 🔄 **E-Cash** | مصر |
|
||||
| 🌐 **Stripe** | دولي |
|
||||
|
||||
---
|
||||
|
||||
## 🔗 التكاملات الخارجية (شركاء الخدمة)
|
||||
|
||||
### 🗺️ الخرائط والملاحة
|
||||
| الخدمة | الوظيفة |
|
||||
|--------|---------|
|
||||
| **Google Maps** | عرض الخرائط، الترميز الجغرافي، التوجيه |
|
||||
| **Here Maps** | البحث والاقتراح التلقائي للأماكن |
|
||||
| **Map SaaS** (خاص) | توجيه مخصص، ترميز جغرافي عكسي، بحث الأماكن |
|
||||
| **OpenStreetMap (OSRM)** | توجيه عبر مسارات بديلة — خادم مخصص لكل دولة |
|
||||
|
||||
### 📱 التواصل والإشعارات
|
||||
| الخدمة | الوظيفة |
|
||||
|--------|---------|
|
||||
| **Firebase (FCM)** | إشعارات لحظية، تحليلات، Crashlytics |
|
||||
| **Twilio** | التحقق عبر SMS (OTP) |
|
||||
| **WhatsApp Cloud API** | إرسال كود التحقق عبر واتساب |
|
||||
| **SMS Kazumi** | مزود SMS في مصر |
|
||||
|
||||
### 🤖 الذكاء الاصطناعي
|
||||
| الخدمة | الوظيفة |
|
||||
|--------|---------|
|
||||
| **Azure OCR** | مسح ضوئي للمستندات واستخراج النصوص |
|
||||
| **OpenAI GPT** | استخراج بيانات المستندات |
|
||||
| **Llama AI** | استخراج بيانات المستندات (نموذج بديل) |
|
||||
|
||||
### 📞 الاتصالات
|
||||
| الخدمة | الوظيفة |
|
||||
|--------|---------|
|
||||
| **Agora** | مكالمات صوتية وفيديو داخل التطبيق |
|
||||
| **WebRTC** | خدمة الإشارات للاتصالات المباشرة |
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ الميزات التقنية المتقدمة
|
||||
|
||||
### 🎯 نظام التوزيع الذكي (Dispatching)
|
||||
- 🔄 نظام WebSocket مزدوج (Driver Socket + Passenger Socket)
|
||||
- 📊 **بحث مكاني (GIS Query)** عبر قواعد البيانات المكانية SPATIAL INDEX
|
||||
- ⏱️ **توزيع فوري** وأقل وقت استجابة (Near Real-Time Matching)
|
||||
- 🧠 **نظام انتظار ذكي**: يُظهر للسائقين الرحلات القريبة منهم فقط
|
||||
|
||||
### 🗺️ نظام الخرائط الحية (Real-time Tracking)
|
||||
- 📍 تحديث موقع السائق كل 3-5 ثوانٍ
|
||||
- 🔄 تتبع المسار مباشر مع تحديث زاوية السيارة حسب الاتجاه
|
||||
- ⚠️ **كشف الانحراف**: تنبيه إذا انحرف السائق عن المسار بأكثر من 50 مترًا
|
||||
- 🎯 **إعادة التوجيه التلقائي**: إعادة حساب المسار إذا لزم الأمر
|
||||
- 🕐 **حساب وصول متوقع (ETA)** عبر خوارزميات محلية دقيقة
|
||||
|
||||
### 🔒 نظام أمان متعدد الطبقات
|
||||
| الطبقة | الوصف |
|
||||
|--------|-------|
|
||||
| 🔑 **JWT مع بصمة الجهاز** | كل طلب مرمي يحمل بصمة جهاز مشفرة SHA-256 |
|
||||
| 🖐️ **بصمة الجهاز** | ربط الحساب بجهاز معين لمنع الاختراق |
|
||||
| 🔐 **HMAC Authentication** | توقيع الطلبات الخاصة بالدفع برمز HMAC |
|
||||
| 🛡️ **تشفير AES-256-CBC** | تشفير البيانات الحساسة |
|
||||
| 🔄 **Auto-refresh للـ JWT** | تجديد التوكين تلقائيًا عند انتهاء صلاحيته |
|
||||
| 📱 **ربط الجلسة بالجهاز** | منع الدخول من أجهزة متعددة |
|
||||
| 🚫 **مكافحة الاحتراق** | تسجيل محاولات الدخول وتحديد المعدل |
|
||||
|
||||
### 👻 خاصية التراكب في تطبيق السائق (TripOverlayPlugin)
|
||||
- **ميزة فريدة**: Android System Overlay يعرض تفاصيل الرحلة فوق أي تطبيق
|
||||
- 🎯 يظهر فور وصول الطلب حتى لو كان هاتف السائق مقفلاً
|
||||
- ⏱️ **مؤقت 15 ثانية** للقبول التلقائي أو الرفض
|
||||
- 🔊 صوت تنبيه مخصص "ding.wav"
|
||||
|
||||
### 💬 المحادثة الفورية
|
||||
- 🗨️ **دردشة داخلية** بين السائق والراكب دون مشاركة أرقام الهواتف
|
||||
- 🔒 حماية الخصوصية — لا يرى الراكب رقم السائق والعكس
|
||||
- 📱 تدعم الوسائط والنصوص
|
||||
|
||||
### 🆘 زر الطوارئ (SOS/Emergency)
|
||||
- 🚨 إشارة طوارئ مباشرة
|
||||
- 📹 إرسال الموقع الحي لفريق الدعم
|
||||
- 🎥 تكامل مع Agora لمكالمات الفيديو الفورية
|
||||
|
||||
---
|
||||
|
||||
## 🤖 ميزات الذكاء الاصطناعي (AI Features)
|
||||
|
||||
### 📄 توثيق السائقين بالذكاء الاصطناعي
|
||||
- 📸 **مسح ضوئي ذكي**: يصور السائق هويته ورخصة القيادة وأوراق السيارة
|
||||
- 🧠 **Azure OCR**: استخراج النصوص من المستندات
|
||||
- 🤖 **OpenAI (GPT-3.5)**: تحليل وفهم بيانات المستندات
|
||||
- 🦙 **Llama AI**: نموذج ذكاء اصطناعي بديل لاستخراج البيانات
|
||||
- ✅ **تحقق تلقائي**: مطابقة البيانات مع قواعد البيانات للتأكد من صحتها
|
||||
- ⏱️ **تسجيل فوري**: يستغرق دقائق بدلاً من أيام في المنصات التقليدية
|
||||
|
||||
---
|
||||
|
||||
## 🎁 الإضافات المميزة للمستخدمين
|
||||
|
||||
### 🏷️ نظام العروض الترويجية (Promotions)
|
||||
- 🎫 **أكواد خصم** للمستخدمين الجدد والحاليين
|
||||
- 🆕 **كود دعوة أول رحلة**: خصم على أول رحلة لكل مستخدم جديد
|
||||
- 📩 إرسال العروض المخصصة عبر الإشعارات
|
||||
|
||||
### 👫 نظام الإحالة (Referral System)
|
||||
- 🔗 **رمز إحالة موحد** لكل مستخدم (سائق أو راكب)
|
||||
- 🎁 **مكافآت دعوة الأصدقاء**: رصيد مجاني لكل شخص يدعوه
|
||||
- 📊 تتبع الإحالات — كم شخص سجل عن طريقك وكم ربحت
|
||||
|
||||
### ⭐ نظام التقييم المزدوج
|
||||
- 🚶 **تقييم الراكب للسائق**: نجوم + تعليق
|
||||
- 👨✈️ ** تقييم السائق للراكب** : سلوك الراكب ونظافته
|
||||
- ⚖️ **مؤشر الجودة (Quality Score)**: حساب متوسط التقييمات
|
||||
- 🚫 **القائمة السوداء**: حظر المستخدمين ذوي التقييم المنخفض
|
||||
|
||||
### 💰 نظام العمولات الذكي (Kazan)
|
||||
- 📊 **نسبة عمولة متغيرة** حسب نوع المركبة
|
||||
- 🌍 **أسعار مختلفة حسب كل دولة**: سوريا، الأردن، مصر
|
||||
- ⚙️ **قابل للتعديل** من لوحة التحكم الإدارية
|
||||
- 💹 **شفافية كاملة**: السائق يعرف نسبة العمولة قبل قبول الرحلة
|
||||
|
||||
### 💼 المحفظة الإلكترونية (Wallet)
|
||||
- 👛 **محفظة الراكب**: شحن رصيد، دفع للرحلات، استرداد
|
||||
- 💼 **محفظة السائق**: استلام الأرباح، سحب للأرباح
|
||||
- 🔄 التحويل بين المحافظ
|
||||
- 📜 **سجل المعاملات** الكامل مع التفاصيل
|
||||
|
||||
### 💰 نظام البقشيش (Tips)
|
||||
- 💵 إضافة بقشيش للسائق بعد الرحلة
|
||||
- 📱 عبر المحفظة أو نقدًا
|
||||
- ⭐ تشجيع للسائقين على تقديم خدمة ممتازة
|
||||
|
||||
---
|
||||
|
||||
## 📊 مميزات تنافسية — مقارنة مع المنصات الأخرى
|
||||
|
||||
| الميزة | Siro (سِيرُو) | أوبر (Uber) | كريم (Careem) | bolt |
|
||||
|--------|---------------|-------------|---------------|------|
|
||||
| 🌍 **التوسع الإقليمي** | سوريا، الأردن، مصر | عالمي | إقليمي | عالمي |
|
||||
| 🚙 **أنواع المركبات** | **12 نوعًا** | 5 أنواع | 6 أنواع | 4 أنواع |
|
||||
| 💳 **طرق الدفع المحلية** | **7 طرق** (MTN, Syriatel, E-Cash) | 4 طرق | 5 طرق | 3 طرق |
|
||||
| 👩 **سائقات نساء** | ✅ **نعم** | ✅ نعم | ✅ نعم | ❌ لا |
|
||||
| 📱 **تطبيقات متصلة** | **4 تطبيقات** (راكب + سائق + إدارة + خدمة) | تطبيقان | تطبيقان | تطبيقان |
|
||||
| 🤖 **ذكاء اصطناعي للتوثيق** | **Azure + OpenAI + Llama** | أساسي | أساسي | ❌ لا |
|
||||
| 🎯 **تراكب الأندرويد** | **نعم — فوق أي تطبيق** | لا | لا | لا |
|
||||
| 🗺️ **خريطة مخصصة** | **Map SaaS خاص** | Google فقط | Google فقط | Google فقط |
|
||||
| 📊 **لوحة تحكم إدارية** | **ويب كامل — 15+ وحدة** | محدود | محدود | محدود |
|
||||
| 💬 **دردشة بدون رقم** | ✅ نعم | ✅ نعم | ✅ نعم | ❌ لا |
|
||||
| 🆘 **زر طوارئ + فيديو** | ✅ **Agora + WebRTC** | SOS فقط | SOS فقط | ❌ لا |
|
||||
| 💰 **محفظة إلكترونية** | ✅ راكب + سائق | محدود | ✅ نعم | ❌ لا |
|
||||
| 🏷️ **نظام إحالة متكامل** | ✅ راكب + سائق | ✅ | ✅ | ✅ |
|
||||
| 🔒 **بصمة جهاز + JWT** | ✅ أمان متعدد الطبقات | أساسي | أساسي | أساسي |
|
||||
| 📦 **توصيل طلبات (Delivery)** | ✅ نعم | ✅ نعم | ✅ نعم | ❌ لا |
|
||||
| ⚡ **تطبيق إدارة ميداني** | ✅ **Siro Service** — تسجيل ميداني | لا | لا | لا |
|
||||
|
||||
---
|
||||
|
||||
## 🔐 نقاط القوة الرئيسية — لماذا Siro؟
|
||||
|
||||
### 1️⃣ 🏗️ بنية تحتية مرنة ومخصصة
|
||||
- **خوادم مخصصة لكل دولة**: routing مختلف لسوريا، الأردن، مصر
|
||||
- **خريطة خاصة (Map SaaS)**: لا تعتمد كليًا على Google Maps — استقلالية تامة
|
||||
- **WebSockets مزدوجة**: فصل تام بين اتصالات السائق والراكب لتجنب الازدحام
|
||||
|
||||
### 2️⃣ 🧠 ذكاء اصطناعي مدمج
|
||||
- **توثيق آلي** للسائقين الجدد — يقلل وقت التسجيل من أيام إلى دقائق
|
||||
- **Azure + OpenAI + Llama**: ثلاث محركات ذكاء اصطناعي تعمل معًا لضمان أعلى دقة
|
||||
|
||||
### 3️⃣ 💳 حلول دفع محلية مبتكرة
|
||||
- دعم **MTN و Syriatel** في سوريا
|
||||
- دعم **E-Cash** في مصر
|
||||
- **PayMob** للبطاقات الائتمانية
|
||||
- **Stripe** للدفع الدولي
|
||||
- **محفظة إلكترونية** مزدوجة للراكب والسائق
|
||||
|
||||
### 4️⃣ 🎯 تجربة سائق فريدة
|
||||
- **تراكب Android** يعرض الطلبات حتى فوق التطبيقات الأخرى — لا يفوت السائق أي طلب
|
||||
- **خدمة خلفية دائمة (Foreground Service)** — الموقع محدث 24/7
|
||||
- **توجيه صوتي (Voice Navigation)** مع إرشادات مفصلة
|
||||
- **مؤقت انتظار أوتوماتيكي** للركاب
|
||||
|
||||
### 5️⃣ 📊 إدارة شاملة
|
||||
- **15+ وحدة إدارية** في لوحة التحكم
|
||||
- **تحليلات متقدمة** وتقارير مالية
|
||||
- **إدارة السائقين والركاب** بكفاءة
|
||||
- **مراقبة الجودة** و**القوائم السوداء**
|
||||
- **سجلات التدقيق (Audit Logs)** للأمان
|
||||
|
||||
### 6️⃣ 🌍 دعم متعدد اللغات
|
||||
- دعم اللغة العربية والإنكليزية
|
||||
- واجهات مترجمة بالكامل للتطبيقات الأربعة
|
||||
- محتوى مترجم للدول المختلفة
|
||||
|
||||
### 7️⃣ 🔒 أمان عالي المستوى
|
||||
- JWT مع بصمة الجهاز الفريدة
|
||||
- HMAC لطلبات الدفع
|
||||
- تشفير AES-256-CBC للبيانات الحساسة
|
||||
- 401 Auto-refresh لمنع قطع الجلسة
|
||||
- تحديد معدل محاولات الدخول (Rate Limiting)
|
||||
|
||||
### 8️⃣ 🚚 تنوع خدمات النقل
|
||||
- من التوصيل السريع بالدراجة النارية إلى النقل العائلي والفان
|
||||
- **سائقات نساء** — خيار خاص يحترم خصوصية السيدات
|
||||
- **سيارات كهربائية** — خيار صديق للبيئة
|
||||
|
||||
---
|
||||
|
||||
## 📈 فرص النمو والتوسع
|
||||
|
||||
- 🌍 **التوسع لدول جديدة** في الشرق الأوسط وشمال أفريقيا
|
||||
- 🚚 **إضافة خدمات لوجستية** (نقل بضائع، شحن)
|
||||
- 🛵 **توسيع أسطول التوصيل** للمطاعم والمتاجر
|
||||
- 🤖 **توسيع استخدام الذكاء الاصطناعي** في التنبؤ بالطلب وتحسين التوزيع
|
||||
- 💳 **إضافة المزيد من بوابات الدفع** المحلية والدولية
|
||||
- 🎯 **برامج ولاء متقدمة** ونقاط مكافآت
|
||||
|
||||
---
|
||||
|
||||
## 🏁 الخلاصة
|
||||
|
||||
**Siro (سِيرُو) ليست مجرد تطبيق نقل — إنها منصة متكاملة للنقل الذكي** تجمع بين:
|
||||
|
||||
- ✅ **تطبيقات متصلة برباعية** تغطي كل احتياجات النقل
|
||||
- ✅ **12 نوع مركبة و 7 طرق دفع** لتغطية جميع احتياجات المستخدمين
|
||||
- ✅ **ذكاء اصطناعي متقدم** لتسريع التوثيق وتحسين الخدمة
|
||||
- ✅ **نظام توزيع ذكي** مع خرائط حية وتتبع مباشر
|
||||
- ✅ **لوحة تحكم إدارية** بمستوى مؤسسي
|
||||
- ✅ **أمان متعدد الطبقات** لحماية البيانات والمعاملات
|
||||
- ✅ **حلول دفع محلية** مبتكرة تفهم احتياجات السوق
|
||||
|
||||
**Siro** تقدم حلًا متكاملًا ينافس بقوة كبرى منصات النقل العالمية بميزات محلية متطورة وتقنيات ذكاء اصطناعي متقدمة، مع فهم عميق لاحتياجات السوق في سوريا والأردن ومصر.
|
||||
|
||||
---
|
||||
|
||||
> **Siro — وجهتك الذكية لكل رحلة** 🚀
|
||||
@@ -0,0 +1,126 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ar" dir="rtl">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>خارطة التوسع الجغرافي - دمشق</title>
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
|
||||
<style>
|
||||
body { margin: 0; padding: 0; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; }
|
||||
#map { height: 100vh; width: 100vw; }
|
||||
.legend {
|
||||
background: white;
|
||||
padding: 15px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 0 15px rgba(0,0,0,0.2);
|
||||
line-height: 1.5;
|
||||
color: #333;
|
||||
}
|
||||
.legend h4 { margin: 0 0 10px 0; }
|
||||
.legend i {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
float: right;
|
||||
margin-left: 8px;
|
||||
opacity: 0.7;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="map"></div>
|
||||
|
||||
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
|
||||
<script>
|
||||
// Initialize map centered on Damascus
|
||||
var map = L.map('map').setView([33.5138, 36.2765], 13);
|
||||
|
||||
// Add OpenStreetMap tiles
|
||||
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||
maxZoom: 19,
|
||||
attribution: '© OpenStreetMap contributors'
|
||||
}).addTo(map);
|
||||
|
||||
// Define polygon styles
|
||||
var styleA = { color: 'green', fillColor: 'green', fillOpacity: 0.4, weight: 2 };
|
||||
var styleB = { color: 'blue', fillColor: 'blue', fillOpacity: 0.4, weight: 2 };
|
||||
var styleC = { color: 'yellow', fillColor: 'yellow', fillOpacity: 0.4, weight: 2 };
|
||||
var styleD = { color: 'red', fillColor: 'red', fillOpacity: 0.4, weight: 2 };
|
||||
|
||||
// Approximate Coordinates for Zones (These are illustrative representations)
|
||||
|
||||
// Zone A (Green): Mezzeh, Kafr Sousa, Malki (South-West / Central-West)
|
||||
var zoneA = [
|
||||
[33.5200, 36.2700], // Malki area
|
||||
[33.5150, 36.2850],
|
||||
[33.4900, 36.2850], // Kafr Sousa
|
||||
[33.4950, 36.2400], // Mezzeh
|
||||
[33.5100, 36.2400]
|
||||
];
|
||||
L.polygon(zoneA, styleA).addTo(map).bindPopup("<b>منطقة أ (خضراء)</b><br>المزة، كفرسوسة، المالكية<br>الأولوية الأولى (الأشهر 1-3)");
|
||||
|
||||
// Zone B (Blue): Abu Rummaneh, Muhajireen, Rawda, Jisr al-Abyad (Central / North-West)
|
||||
var zoneB = [
|
||||
[33.5350, 36.2650], // Muhajireen
|
||||
[33.5300, 36.2800],
|
||||
[33.5150, 36.2850], // Abu Rummaneh / Rawda
|
||||
[33.5200, 36.2700]
|
||||
];
|
||||
L.polygon(zoneB, styleB).addTo(map).bindPopup("<b>منطقة ب (زرقاء)</b><br>أبو رمانة، المهاجرين، الروضة، الجسر الأبيض<br>الأولوية الثانية (الأشهر 2-4)");
|
||||
|
||||
// Zone C (Yellow): Mezzeh Western Villas, Dummar, Rukn al-Din, Qassaa (North, East, far West)
|
||||
var zoneC1 = [ // Dummar / Western Villas
|
||||
[33.5500, 36.2200],
|
||||
[33.5400, 36.2500],
|
||||
[33.5100, 36.2400],
|
||||
[33.5100, 36.2100]
|
||||
];
|
||||
var zoneC2 = [ // Rukn al-Din / Qassaa
|
||||
[33.5400, 36.2800],
|
||||
[33.5450, 36.3100],
|
||||
[33.5150, 36.3200],
|
||||
[33.5100, 36.2850],
|
||||
[33.5300, 36.2800]
|
||||
];
|
||||
L.polygon(zoneC1, styleC).addTo(map).bindPopup("<b>منطقة ج (صفراء)</b><br>دمر، المزة فيلات غربية<br>الأولوية الثالثة (الأشهر 4-6)");
|
||||
L.polygon(zoneC2, styleC).addTo(map).bindPopup("<b>منطقة ج (صفراء)</b><br>ركن الدين، القصاع<br>الأولوية الثالثة (الأشهر 4-6)");
|
||||
|
||||
// Zone D (Red): Barzeh, Jaramana, Qudsaya, Darayya (Outskirts)
|
||||
var zoneD1 = [ // Barzeh
|
||||
[33.5600, 36.3000],
|
||||
[33.5600, 36.3300],
|
||||
[33.5400, 36.3300],
|
||||
[33.5400, 36.3000]
|
||||
];
|
||||
var zoneD2 = [ // Jaramana
|
||||
[33.5000, 36.3300],
|
||||
[33.5000, 36.3700],
|
||||
[33.4700, 36.3700],
|
||||
[33.4700, 36.3300]
|
||||
];
|
||||
var zoneD3 = [ // Darayya
|
||||
[33.4700, 36.2200],
|
||||
[33.4700, 36.2600],
|
||||
[33.4400, 36.2600],
|
||||
[33.4400, 36.2200]
|
||||
];
|
||||
L.polygon(zoneD1, styleD).addTo(map).bindPopup("<b>منطقة د (حمراء)</b><br>برزة<br>توسع مستقبلي (شهر 7+)");
|
||||
L.polygon(zoneD2, styleD).addTo(map).bindPopup("<b>منطقة د (حمراء)</b><br>جرمانا<br>توسع مستقبلي (شهر 7+)");
|
||||
L.polygon(zoneD3, styleD).addTo(map).bindPopup("<b>منطقة د (حمراء)</b><br>داريا<br>توسع مستقبلي (شهر 7+)");
|
||||
|
||||
// Add Legend
|
||||
var legend = L.control({position: 'bottomright'});
|
||||
legend.onAdd = function (map) {
|
||||
var div = L.DomUtil.create('div', 'legend');
|
||||
div.innerHTML += '<h4>استراتيجية التوسع - دمشق</h4>';
|
||||
div.innerHTML += '<i style="background: green"></i> منطقة أ (خضراء): المزة، كفرسوسة، المالكية<br>';
|
||||
div.innerHTML += '<i style="background: blue"></i> منطقة ب (زرقاء): أبو رمانة، المهاجرين<br>';
|
||||
div.innerHTML += '<i style="background: yellow"></i> منطقة ج (صفراء): دمر، ركن الدين، القصاع<br>';
|
||||
div.innerHTML += '<i style="background: red"></i> منطقة د (حمراء): الضواحي (جرمانا، برزة، داريا)<br>';
|
||||
return div;
|
||||
};
|
||||
legend.addTo(map);
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,89 @@
|
||||
<div dir="rtl" align="right">
|
||||
<h1>استراتيجيات النمو والتسويق (Growth & Marketing Strategies)</h1>
|
||||
|
||||
<h2>1. إعادة تأطير المشكلة: السيولة والثقة</h2>
|
||||
المشكلة الحقيقية في التطبيقات الجديدة ليست "الوعي بالعلامة التجارية" ولا كثرة المنشورات الإعلانية، بل هي <b>السيولة والثقة</b>:
|
||||
<br>
|
||||
- <b>الركاب:</b> يحتاجون لسيارة قريبة ومتاحة فوراً. السعر الأرخص لا قيمة له إذا لم يجد الراكب سيارة عند فتح التطبيق.
|
||||
<br>
|
||||
- <b>السائقون:</b> يحتاجون لطلبات مستمرة. إذا لم يجدوا طلبات، سيطفئون التطبيق ويعودون للمنافسين.
|
||||
<br>
|
||||
لذلك، الهدف ليس الانتشار الجغرافي الواسع في البداية، بل <b>الكثافة العالية في منطقة محددة ووقت محدد</b>.
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>2. القاعدة الذهبية: كثافة لا انتشار</h2>
|
||||
بدلاً من محاولة تغطية مدينة كاملة بميزانية محدودة:
|
||||
<br>
|
||||
- <b>السيطرة المحلية:</b> اختر منطقة واحدة (مثل محيط جامعة، أو حي مزدحم) وركز كل السائقين والعروض فيها حتى يصبح وقت الوصول أقل من 4 دقائق.
|
||||
<br>
|
||||
- الكثافة العالية تؤدي إلى: وصول سريع ← تجربة ممتازة للراكب ← حديث الناس الإيجابي بين بعضهم ← نمو مجاني.
|
||||
<br>
|
||||
- التوسع يتم تدريجياً لحي مجاور بعد السيطرة التامة على الحي الأول. الانتشار المبكر قاتل للميزانيات المحدودة.
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>3. السائقون أولاً: توفير العرض هو الأساس</h2>
|
||||
الركاب يأتون تلقائياً إذا توفرت السيارات. يجب التركيز على:
|
||||
<br>
|
||||
- <b>الاستغلال العالي:</b> كلما زادت رحلات السائق في الساعة الواحدة، يمكنك خفض السعر للراكب مع زيادة دخل السائق الإجمالي في نفس الوقت.
|
||||
<br>
|
||||
- <b>تلميح الأرباح:</b> إبراز الأرباح الإضافية التي سيجنيها السائق في كل رحلة مقارنة بالتطبيقات الأخرى بوضوح.
|
||||
<br>
|
||||
- <b>رسالة التوظيف:</b> التركيز على "العمولة الأقل" والدفع السريع والمباشر.
|
||||
<br>
|
||||
- <b>الدخل المضمون:</b> توفير أوقات دخل مضمون خلال الساعات الميتة لإبقاء السائقين متصلين ومتاحين.
|
||||
<br>
|
||||
- <b>مجتمع السائقين:</b> إنشاء مجموعات حقيقية للسائقين (واتساب/تيليجرام) للاستماع لهم وحل مشاكلهم بسرعة، وتفعيل نظام إحالة السائقين لجلب زملائهم.
|
||||
<br>
|
||||
- <b>أيام بدون عمولة:</b> تخصيص أهدأ يوم في الأسبوع ليكون بدون عمولة تماماً لتشجيع توفر السيارات بكثافة.
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>4. الركاب: حلقات النمو الفعالة</h2>
|
||||
- <b>إحالة ثنائية الجانب:</b> مكافأة كلا الطرفين (الداعي والمدعو) برصيد رحلات، وتفعيل المكافأة فقط <b>بعد اكتمال أول رحلة</b> لتجنب التلاعب والغش. البنية التقنية لذلك جاهزة لديك.
|
||||
<br>
|
||||
- <b>الاحتفاظ بالعملاء (الولاء):</b> خصم كبير على أول رحلة، ثم إشعار تذكير للرحلة الثانية، وتفعيل نظام التلعيب والولاء للمحافظة على الراكب.
|
||||
<br>
|
||||
- <b>استهداف المناسبات:</b> التركيز على حملات دقيقة بأوقات مدروسة (رمضان وقت الإفطار، الأعياد، بداية الفصل الجامعي). هذه الحملات مردودها أعلى بكثير من الإعلان العام.
|
||||
<br>
|
||||
- <b>شراكات محلية:</b> التعاون مع المقاهي والمطاعم والجامعات، واعتبارها "نقاط التقاط" مدعومة بخصومات، بالإضافة للتعاون مع المؤثرين الصغار محلياً.
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>5. الثقة كسلاح ضد المنافسين القدامى</h2>
|
||||
لا تنافس الشركات العملاقة على "السمعة التاريخية"، بل ركز على <b>نقاط ضعفها</b>:
|
||||
<br>
|
||||
- <b>السعر الثابت والشفاف:</b> تقديم وعْد للعملاء بأنه "لا مفاجآت في السعر" (استقرار الأسعار)، على عكس تقلبات الأسعار والقفزات المزعجة عند المنافسين.
|
||||
<br>
|
||||
- <b>الأمان المطلق:</b> إبراز ميزات هامة للثقة، خاصة للنساء (مشاركة الرحلة، زر الطوارئ، خيار تفضيل سائقة، سائقون موثقون).
|
||||
<br>
|
||||
- <b>الشفافية المؤسسية:</b> فيديوهات حقيقية من مؤسس التطبيق يشرح فيها بشفافية كيف يتم تسعير الرحلات ولماذا التطبيق أرخص ومربح للسائق. الصدق هو أفضل وأقوى محتوى مقنع.
|
||||
<br>
|
||||
- <b>الدفع النقدي السلس:</b> تسهيل التعامل بالكاش بدون تعقيدات، حيث يعتبر الكاش الملك والمفضل في العديد من أسواقنا.
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>6. استراتيجية وسائل التواصل الاجتماعي السليمة</h2>
|
||||
- <b>المحتوى الحقيقي:</b> قصص النجاح الواقعية وردود وتجارب الركاب الفعليين هي الذهب الحقيقي الذي يجب الاستثمار فيه.
|
||||
<br>
|
||||
- <b>الابتعاد عن التفاعلات الوهمية والدراما المفبركة:</b>
|
||||
<br> 1. المحتوى المزور يعرض حسابات التطبيق للحظر الجماعي من قبل المنصات.
|
||||
<br> 2. إذا تم كشفها، سيكون الضرر على الثقة كارثياً ولا يمكن إصلاحه بسهولة، وسيستغلها المنافسون ضدك.
|
||||
<br> 3. الإعجابات الوهمية لا تزيد من "السيولة" ولا تضع سيارة حقيقية قريبة من الراكب.
|
||||
<br>
|
||||
- <b>البديل البناء:</b> توجيه جهود الأتمتة لإدارة مجتمع حقيقية، الرد السريع على الاستفسارات، وتسليط الضوء على آراء المستخدمين الحقيقية الموثقة بإذنهم.
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>7. إشعار تحديث الأسعار الذكي للإدارة</h2>
|
||||
فكرة ممتازة تشغيلياً، ويجب أن تكون مبنية على "أحداث هامة" وليس إشعارات مستمرة لكي لا يتم تجاهلها:
|
||||
<br>
|
||||
- لا يتم الإرسال مع كل تحديث بسيط (ضجيج).
|
||||
<br>
|
||||
- <b>متى يتم الإرسال؟</b> فقط عند تجاوز التغير نسبة مئوية معينة، أو عند تفعيل نافذة تسعير موسمي أو اكتشاف ذروة جديدة.
|
||||
<br>
|
||||
- <b>محتوى الإشعار:</b> الدولة/المنطقة، المحرك المسؤول عن التغيير (اكتشاف ذروة / موسمي / تعديل ثبات)، السعر قبل وبعد، والسبب.
|
||||
<br>
|
||||
- <b>الخلاصة اليومية:</b> تقديم إشعار تجميعي بنهاية اليوم للإدارة يلخص أهم تحركات السوق.
|
||||
</div>
|
||||
@@ -0,0 +1,291 @@
|
||||
<div dir="rtl" align="right">
|
||||
|
||||
# خطة عمل: دمج مقارنة الأسعار مع النظام التسويقي للركاب وتكامل الذكاء الاصطناعي (Siro AI)
|
||||
|
||||
تحدد هذه الخطة البنية البرمجية والتسويقية لربط بيانات أسعار المنافسين التي يجمعها البوت بقاعدة البيانات، وتفعيل تحليلات متقدمة عبر الذكاء الاصطناعي (Gemini AI)، لتوجيه الحملات الترويجية التلقائية والتحكم في لوحة الإدارة بالتسعير عبر دول متعددة (سوريا، الأردن، مصر، العراق).
|
||||
|
||||
---
|
||||
|
||||
## 1. هيكلية قاعدة البيانات وتعدد الدول (Multi-Country GIS Database)
|
||||
|
||||
يخدم تطبيق Siro عدة دول ومناطق جغرافية، لذا يتطلب فصل القراءات وتحليلها حسب حقل الدولة.
|
||||
|
||||
تم تحديث وتعديل الجداول لتشمل ترميز الدولة كالتالي:
|
||||
|
||||
</div>
|
||||
|
||||
```sql
|
||||
-- جدول قراءات أسعار المنافسين
|
||||
CREATE TABLE `competitor_prices` (
|
||||
`id` int NOT NULL AUTO_INCREMENT,
|
||||
`competitor_name` varchar(50) NOT NULL,
|
||||
`from_latitude` varchar(30) NOT NULL,
|
||||
`from_longitude` varchar(30) NOT NULL,
|
||||
`to_latitude` varchar(30) NOT NULL,
|
||||
`to_longitude` varchar(30) NOT NULL,
|
||||
`distance_km` decimal(8,2) NOT NULL,
|
||||
`total_price` decimal(10,2) NOT NULL,
|
||||
`price_per_km` decimal(8,2) NOT NULL,
|
||||
`country_code` varchar(5) NOT NULL DEFAULT 'SY',
|
||||
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_competitor_country` (`competitor_name`, `country_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-- جدول تواجد الركاب الجغرافي
|
||||
CREATE TABLE `passenger_opening_locations` (
|
||||
`id` int NOT NULL AUTO_INCREMENT,
|
||||
`passenger_id` varchar(100) NOT NULL,
|
||||
`latitude` varchar(30) NOT NULL,
|
||||
`longitude` varchar(30) NOT NULL,
|
||||
`country_code` varchar(5) NOT NULL DEFAULT 'SY',
|
||||
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`location_point` point NOT NULL /*!80003 SRID 4326 */,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_passenger_id` (`passenger_id`),
|
||||
KEY `idx_country` (`country_code`),
|
||||
SPATIAL KEY `idx_location_point` (`location_point`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
```
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
|
||||
---
|
||||
|
||||
## 2. الأفكار الثورية الستة عشر لاستغلال البيانات (16 Revolutionary Use Cases)
|
||||
|
||||
تم تقسيم الأفكار إلى ست تصنيفات لتغطية التسعير، التسويق، الكباتن، الإدارة، والمستقبل:
|
||||
|
||||
### أ. التسعير الذكي (Smart Pricing)
|
||||
|
||||
1. **التسعير التلقائي المتكيف (Auto-Adaptive Pricing)**:
|
||||
يقوم النظام بحساب السعر المقترح تلقائياً لرحلات Siro ليكون أرخص بنسبة محددة (مثل 5-10%) من المنافس الأقرب في المنطقة فوراً، مع حماية هامش الربح الأدنى.
|
||||
|
||||
2. **مؤشر فرصة الذروة (Surge Opportunity Index)**:
|
||||
عند قيام جميع المنافسين بتفعيل تسعير الذروة (Surge) في منطقة جغرافية معينة، يتم تنبيه لوحة الإدارة لزيادة سعر Siro بنسبة طفيفة للاستفادة من الطلب المرتفع مع البقاء كخيار أوفر للركاب.
|
||||
|
||||
3. **محاكي التسعير الافتراضي (What-If Pricing Simulator)**:
|
||||
أداة ذكية للمدير لاختبار تأثير خفض أو رفع الأسعار بمعدلات معينة على حجم الطلبات المتوقع بناءً على سلوك المنافسين التاريخي.
|
||||
|
||||
### ب. ذكاء الأعمال والتحليلات (Business Intelligence)
|
||||
|
||||
4. **تقرير صحة السوق التلقائي (Weekly Market Health Report)**:
|
||||
تصدير ملف تحليلي يوضح للادارة نسبة تنافسية Siro السعرية مقارنة بكل شركة منافسة في كل دولة بشكل أسبوعي.
|
||||
|
||||
5. **خريطة فجوة الأسعار الجغرافية (Price Gap Heatmap)**:
|
||||
خريطة حرارية تفاعلية تعرض في أي الأحياء أو المحافظات يتسع فارق الأسعار لصالحنا أو لصالح المنافسين لتوجيه الدعم المالي.
|
||||
|
||||
6. **مؤشر التنافسية السعري (Pricing Competitiveness Index - PCI)**:
|
||||
معامل رقمي يتم احتسابه ديناميكياً لكل منطقة لتحديد مدى جاذبية أسعارنا للركاب مقارنة بالبدائل المتاحة.
|
||||
|
||||
### ج. التسويق والاستهداف الذكي للركاب (Marketing & Passenger Targeting)
|
||||
|
||||
7. **استعادة الركاب المنقطعين (Win-Back for Churned Passengers)**:
|
||||
استهداف الركاب الذين لم يطلبوا رحلات منذ فترة طويلة برسائل ترويجية لحظية (SMS / WhatsApp) في الأوقات التي ترتفع فيها أسعار المنافسين بشكل جنوني في مناطقهم الحالية.
|
||||
|
||||
8. **العروض الترويجية الديناميكية المحددة جغرافياً (Hyper-Targeted Dynamic Promos)**:
|
||||
إنشاء كوبونات خصم مؤقتة وتلقائية وتوجيهها للركاب في الأحياء التي يكتشف البوت أن المنافسين يقدمون فيها أسعاراً منافسة جداً لاستعادة الحصة السوقية.
|
||||
|
||||
9. **استهداف المواقع الحساسة للأسعار (Price-Sensitive Hotspot Campaigns)**:
|
||||
توجيه عروض خاصة للمستخدمين المتواجدين في الجامعات، مراكز التسوق الكبرى، والأسواق الشعبية عند رصد زيادة سعرية للمنافسين هناك.
|
||||
|
||||
### د. إدارة الكباتن (Captain Management)
|
||||
|
||||
10. **توجيه الكباتن الذكي (Captain Heatmaps & Guidance)**:
|
||||
إرسال إشعارات فورية للكباتن تفيد بوجود طلب هائل وأسعار ذروة لدى المنافسين في منطقة مجاورة (مثال: المزة في دمشق) لتشجيعهم على التوجه إليها لخدمة ركاب Siro.
|
||||
|
||||
11. **تعديل عمولة كازان المرن (Flexible Kazan Commission adjusting)**:
|
||||
خفض نسبة عمولة Siro المقتطعة من السائق (عمولة كازان) تلقائياً في المناطق ذات التنافسية العالية لجذب المزيد من الكباتن وزيادة سرعة قبول الرحلات.
|
||||
|
||||
12. **حوافز السائقين المرتبطة بالذروة المنافسة (Surge-Based Incentives)**:
|
||||
منح السائقين مكافآت إضافية (Bonuses) عند قبول رحلات من مناطق تشهد ذروة سعرية لدى الشركات الأخرى لمنع تسرب الكباتن للعمل معهم.
|
||||
|
||||
### هـ. تحليلات ودعم المستثمرين (Investor Analytics)
|
||||
|
||||
13. **تحليلات الحصة السوقية السعرية (Pricing Market Share Analytics)**:
|
||||
مؤشر بياني يثبت للمستثمرين النسبة المئوية من اليوم أو المناطق التي يعتبر فيها Siro هو الأرخص على الإطلاق في السوق مقارنة بالمنافسين.
|
||||
|
||||
### و. الذكاء الاصطناعي والأفكار المتقدمة (Advanced & Future AI)
|
||||
|
||||
14. **التنبؤ بأسعار المنافسين (AI Price Prediction)**:
|
||||
استخدام خوارزميات التعلم لتوقع فترات وأسعار ذروة المنافسين خلال الساعات القادمة بناءً على البيانات التاريخية والاستعداد لها تسعيرياً.
|
||||
|
||||
15. **التسعير الموسمي والمناسبات (Seasonal Pricing Logic)**:
|
||||
ضبط قواعد التسعير ديناميكياً لتلائم المواسم (مثل فترة ما قبل الإفطار في رمضان، الأعياد الرسمية، والظروف الجوية السيئة).
|
||||
|
||||
16. **مقارنة جودة الخدمة الشاملة (Service Quality ETA Benchmark)**:
|
||||
إضافة فحص وقت الوصول المتوقع (ETA) إلى جانب السعر في البوت، لمقارنة سرعة الاستجابة السعرية والخدمية معاً.
|
||||
|
||||
---
|
||||
|
||||
## 3. التكامل البرمجي مع ذكاء اصطناعي Gemini AI (Gemini Backend Integration)
|
||||
|
||||
يتصل خادم Siro بالذكاء الاصطناعي عبر دالة مخصصة لتحليل شواذ الأسعار (Anomalies) وصياغة الرسائل الترويجية المناسبة للهجة المحلية لكل دولة.
|
||||
|
||||
### أ. الهيكل البرمجي الموصى به للفئة (SiroGeminiService):
|
||||
|
||||
تم تصميم الكود بلغة PHP ليتكامل مع مفتاح API المخزن في السيرفر:
|
||||
|
||||
</div>
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
class SiroGeminiService {
|
||||
private $apiKey;
|
||||
private $apiUrl;
|
||||
|
||||
public function __construct() {
|
||||
$this->apiKey = getenv('GEMINI_API_KEY');
|
||||
if (!$this->apiKey) {
|
||||
error_log("CRITICAL: GEMINI_API_KEY environment variable is not set.");
|
||||
}
|
||||
// استخدام النموذج المعتمد في السيرفر
|
||||
$this->apiUrl = "https://generativelanguage.googleapis.com/v1beta/models/gemini-flash-lite-latest:generateContent?key=" . $this->apiKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* إرسال طلب إلى Gemini لتحليل التنافسية وطلب توصيات وصياغة رسالة تسويقية
|
||||
*/
|
||||
public function analyzeMarketAndDraftCampaign($competitorPrices, $siroBasePrice, $regionName, $countryCode) {
|
||||
if (!$this->apiKey) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// تحديد اللهجة المحلية بناءً على رمز الدولة
|
||||
$dialect = 'الفصحى المبسطة';
|
||||
if ($countryCode === 'SY') {
|
||||
$dialect = 'اللهجة السورية المحلية العامية البسيطة والودية';
|
||||
} elseif ($countryCode === 'JO') {
|
||||
$dialect = 'اللهجة الأردنية المحلية العامية';
|
||||
} elseif ($countryCode === 'EG') {
|
||||
$dialect = 'اللهجة المصرية الشعبية الودية';
|
||||
} elseif ($countryCode === 'IQ') {
|
||||
$dialect = 'اللهجة العراقية العامية اللطيفة';
|
||||
}
|
||||
|
||||
$prompt = "
|
||||
أنت المحلل الذكي لتطبيق Siro لخدمات نقل الركاب. قمنا برصد قراءات أسعار المنافسين التالية في منطقة ($regionName):
|
||||
" . json_encode($competitorPrices, JSON_UNESCAPED_UNICODE) . "
|
||||
|
||||
السعر الأساسي الحالي لتطبيقنا Siro في هذه الرحلة هو: $siroBasePrice.
|
||||
|
||||
المطلوب منك تنفيذ المهام التالية بدقة:
|
||||
1. تحليل الفارق السعري وتحديد إن كان هناك فرصة تسويقية (عندما يرتفع سعر المنافس بشكل ملحوظ عن Siro).
|
||||
2. اقتراح التعديل السعري الأمثل لـ Siro (إن لزم الأمر) لزيادة الربح مع البقاء أرخص من المنافسين.
|
||||
3. كتابة نص ترويجي جذاب وقصير جداً لإرساله للركاب عبر WhatsApp أو SMS، على أن تكون لغة الرسالة بـ ($dialect)، تركز على التوفير وتذكر اسم المنطقة ($regionName)، وتدعوهم لفتح تطبيق Siro فوراً لطلب الرحلة دون إضافة هاشتاغات أو إيموجيات مفرطة.
|
||||
|
||||
أعد الرد بصيغة JSON فقط، بالهيكل التالي تماماً ودون أي نصوص خارج الـ JSON:
|
||||
{
|
||||
\"opportunity_detected\": true/false,
|
||||
\"analysis_reason\": \"سبب التحليل الفني\",
|
||||
\"recommended_price\": 12500,
|
||||
\"suggested_surge_multiplier\": 1.10,
|
||||
\"draft_marketing_message\": \"نص الرسالة التسويقية المقترحة باللهجة المحددة\"
|
||||
}
|
||||
";
|
||||
|
||||
$payload = [
|
||||
'contents' => [
|
||||
['parts' => [['text' => $prompt]]]
|
||||
]
|
||||
];
|
||||
|
||||
$ch = curl_init($this->apiUrl);
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
|
||||
CURLOPT_POSTFIELDS => json_encode($payload),
|
||||
CURLOPT_TIMEOUT => 30
|
||||
]);
|
||||
|
||||
$response = curl_exec($ch);
|
||||
if (curl_errno($ch)) {
|
||||
error_log("Gemini API Error: " . curl_error($ch));
|
||||
curl_close($ch);
|
||||
return false;
|
||||
}
|
||||
curl_close($ch);
|
||||
|
||||
$data = json_decode($response, true);
|
||||
$rawText = $data['candidates'][0]['content']['parts'][0]['text'] ?? '';
|
||||
|
||||
// تنظيف وتجهيز الـ JSON من مخرجات النموذج
|
||||
$cleanJson = trim(preg_replace('/```json|```/', '', $rawText));
|
||||
return json_decode($cleanJson, true);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
|
||||
---
|
||||
|
||||
## 4. تكامل لوحة تحكم المدير (Siro Admin Panel Integration)
|
||||
|
||||
لمواكبة هذه القدرات التحليلية والذكية، يجب توفير واجهات الإدارة المناسبة لتفعيل ومراقبة التحليلات:
|
||||
|
||||
### أ. لوحة تحليلات الأسعار والمنافسة (Pricing Intelligence Dashboard):
|
||||
1. **شريط اختيار الدولة (Dropdown Multi-Country Filter)**:
|
||||
- قائمة منسدلة لاختيار الدولة الفعالة (سوريا، الأردن، مصر، العراق)، لتقوم الشاشات بتحديث الرسوم التوضيحية بناءً على رمز الدولة المختار.
|
||||
2. **الرسوم البيانية للمقارنة اللحظية والتاريخية**:
|
||||
- مؤشر خطي (Line Chart) يوضح تقلبات أسعار Siro مقابل المنافسين على مدار الـ 24 ساعة الماضية، والـ 7 أيام الماضية.
|
||||
3. **خارطة توزيع الفجوات السعرية (Geospatial Heatmap)**:
|
||||
- تمثيل جغرافي للمناطق الأكثر سخونة وتنافساً، وتلوينها بناءً على مؤشر التنافسية السعري (PCI).
|
||||
|
||||
### ب. لوحة التحكم بالذكاء الاصطناعي (Gemini AI Configuration & Autopilot Settings):
|
||||
1. **لوحة ضبط التشغيل الآلي (Autopilot Status Toggle)**:
|
||||
- خيار لتشغيل الحملات الذكية تلقائياً:
|
||||
- **آلي بالكامل (Full Autopilot)**: يرسل الرسائل الترويجية فور رصد فرصة سعرية دون تدخل بشري.
|
||||
- **شبه آلي (Semi-Autopilot / Approval Mode)**: يعرض الرسائل المكتوبة بواسطة Gemini في صندوق وارد المراجعة (Approval Queue)، ولا يتم إرسالها للركاب إلا بعد موافقة المدير.
|
||||
2. **تعديل نص التوجيه الأساسي (System Instruction / Prompt Editor)**:
|
||||
- صندوق نصي يسمح للمدير بتعديل القواعد والنبرة التي يستخدمها Gemini لصياغة العروض والتحليلات.
|
||||
3. **مؤشر استهلاك الرموز والطلبات (API Usage & Cost Monitor)**:
|
||||
- شاشة تعرض عدد الطلبات المرسلة لـ Gemini، والرموز المستهلكة (Tokens)، والتكلفة التقديرية لضمان الاستهلاك الأمثل لخدمات الذكاء الاصطناعي.
|
||||
|
||||
### ج. مركز إرسال الحملات الترويجية (Campaign Dispatcher Center):
|
||||
- شاشة للمدير لاستعراض الركاب المستهدفين في منطقة جغرافية معينة قبل إرسال الرسائل عبر قنوات البث المعتمدة (WhatsApp Graph API أو SMS) وضمان الفلترة الدقيقة.
|
||||
|
||||
---
|
||||
|
||||
## 5. محرك استعلام فرز الركاب الجغرافي والزمني (Targeting SQL Queries)
|
||||
|
||||
عندما يكتشف النظام فرصة سعرية في منطقة المزة بدمشق (إحداثيات مركزية: `33.5074, 36.2530`)، يتم فلترة واستهداف الركاب المتواجدين في محيط 2 كيلومتر والذين فتحوا التطبيق مؤخراً لإرسال التنبيه الفوري لهم:
|
||||
|
||||
</div>
|
||||
|
||||
```sql
|
||||
-- جلب الركاب المستهدفين في محيط منطقة الفرصة السعرية
|
||||
SELECT DISTINCT passenger_id
|
||||
FROM passenger_opening_locations pol
|
||||
WHERE pol.country_code = 'SY'
|
||||
-- التأكد من تصفية آخر موقع تم تسجيله لكل راكب
|
||||
AND pol.id = (
|
||||
SELECT MAX(id)
|
||||
FROM passenger_opening_locations
|
||||
WHERE passenger_id = pol.passenger_id
|
||||
)
|
||||
-- حساب المسافة الجغرافية (نصف قطر 2000 متر)
|
||||
AND ST_Distance_Sphere(pol.location_point, ST_PointFromText('POINT(36.2530 33.5074)', 4326)) <= 2000
|
||||
-- حصر التواجد خلال آخر 24 ساعة لضمان استهداف الفئات النشطة
|
||||
AND pol.created_at >= NOW() - INTERVAL 1 DAY;
|
||||
```
|
||||
|
||||
<div dir="rtl" align="right">
|
||||
|
||||
---
|
||||
|
||||
## 6. خطة التحقق والاختبار (Verification & Evaluation Plan)
|
||||
|
||||
تعتمد خطة فحص النظام على الخطوات التالية لضمان السلامة البرمجية والتحليلية:
|
||||
|
||||
### أ. اختبار تكامل كود الذكاء الاصطناعي (Gemini Integration Test):
|
||||
- إنشاء نص برميجي تجريبي لتمرير عينات أسعار منافسين وهمية والتأكد من نجاح الاتصال واستقبال ملف الاستجابة (JSON) وتوافقه الكامل مع الحقول البرمجية المحددة.
|
||||
- التحقق من ملاءمة النصوص الترويجية المكتوبة بلهجات الدول المختلفة وصحتها لغوياً وتسويقياً.
|
||||
|
||||
### ب. اختبار الواجهات البرمجية والتسويقية (Admin Dashboard Evaluation):
|
||||
- محاكاة قراءات أسعار في دولتين مختلفتين (سوريا والأردن) والتحقق من استجابة لوحة تحكم المدير للفلاتر الجغرافية وتحديث المؤشرات والرسوم فورياً بناءً على الدولة الفعالة.
|
||||
- اختبار وضع الموافقة المسبقة (Approval Mode) وتعديل صياغة الرسائل وحفظها قبل الإرسال الفعلي.
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,276 @@
|
||||
# تقرير المراجعة البرمجية الشاملة لنظام Siro (طلب السيارات)
|
||||
|
||||
---
|
||||
|
||||
## مقدمة
|
||||
|
||||
هذا التقرير يقدم مراجعة برمجية شاملة ومحاكاة تفصيلية لمسار الرحلة الكامل في تطبيق طلب السيارات **Siro**. تم تحليل الكود المصدري للمشروع بما يشمل الواجهة الخلفية (PHP)، سيرفرات الـ WebSockets (PHP + Socket.IO)، والواجهة الأمامية (Flutter/Dart). يغطي التقرير أربعة محاور رئيسية: معالجة الرحلة في الخلفية، الاتصالات اللحظية عبر WebSockets، أداء الواجهات الأمامية، وتقرير المشاكل والحلول المقترحة.
|
||||
|
||||
---
|
||||
|
||||
## المحور الأول: الواجهة الخلفية (Backend)
|
||||
|
||||
### 1.1 إنشاء الرحلة — `add.php` (rides)
|
||||
|
||||
**الملف:** `backend/ride/rides/add.php`
|
||||
|
||||
**تحليل سير العمل:**
|
||||
|
||||
1. **استلام البيانات:** يستقبل الملف بيانات الرحلة (موقع البداية، الوجهة، التاريخ، الوقت، السعر، معرف الراكب، معرف السائق، الحالة، نوع السيارة، إلخ).
|
||||
2. **معالجة التواريخ:** يتم تحويل التواريخ الخام باستخدام `strtotime()` و `date()` لتتوافق مع تنسيق MySQL.
|
||||
3. **إدراج مزدوج (Dual Insertion):**
|
||||
- إدراج السجل في قاعدة البيانات المحلية (`intaleqDB1`).
|
||||
- إدراج نسخة مطابقة في قاعدة بيانات التتبع عن بعد (`intaleq-ridesDB`) باستخدام نفس `insertedId`.
|
||||
|
||||
**نقاط القوة:**
|
||||
- ✅ استخدام الـ Prepared Statements يمنع ثغرات SQL Injection.
|
||||
- ✅ تسجيل الأخطاء المفصل عبر `error_log()` يساعد في تتبع المشاكل.
|
||||
- ✅ النسخ الاحتياطي عبر قاعدة بيانات التتبع يوفر تكرارية (Redundancy).
|
||||
|
||||
**نقاط الضعف والمخاطر:**
|
||||
- ❌ **لا يوجد Transaction (معاملة ذرية):** إذا نجح الإدراج في قاعدة البيانات المحلية وفشل في قاعدة التتبع، يصبح النظام في حالة عدم تناسق (Inconsistent State). الحل: لفّ العمليتين داخل `$con->beginTransaction()` مع `$con->rollBack()` عند فشل أي منهما.
|
||||
- ❌ **لا يوجد قفل (Lock) لمنع التكرار:** يمكن إرسال طلب الرحلة مرتين في نفس الوقت (Race Condition)، مما قد يؤدي إلى إنشاء رحلتين مكررتين. الحل: إضافة `INSERT ... ON DUPLICATE KEY UPDATE` أو استخدام `SELECT ... FOR UPDATE` قبل الإدراج.
|
||||
- ❌ **السعر يُرسل من العميل (Client-Side):** قيمة `price` تُستلم مباشرة من الطلب دون أي تحقق أو إعادة حساب على الخادم. هذا يشكل خطراً أمنياً كبيراً حيث يمكن للعميل التلاعب بالسعر. الحل: إعادة حساب السعر على الخادم بناءً على المسافة ونوع السيارة وتسعيرة الدولة الحالية.
|
||||
|
||||
### 1.2 حساب التكلفة — `pricing/get.php`
|
||||
|
||||
**المسار:** `backend/ride/pricing/`
|
||||
|
||||
**تحليل معمق:**
|
||||
- يتم حساب السعر عن طريق إرسال المسافة والمدة المتوقعة من العميل إلى الخادم.
|
||||
- الخادم يستعلم جدول `kazan` (نسبة العمولة) وجدول `pricing` (تسعيرة الدولة).
|
||||
- يتم تطبيق الخصومات والعروض الترويجية (Promo Codes) عبر استعلام SQL.
|
||||
|
||||
**نقاط الضعف:**
|
||||
- ❌ **إرسال البيانات من العميل (`distance`, `durationToRide`):** يمكن التلاعب بالمسافة والمدة مما يؤثر على السعر.
|
||||
- ❌ **لا يوجد تحقق من توافق السعر المُرسل مع السعر المُحتسب:** التطبيق يرسل السعر النهائي ويتم إدراجه مباشرة دون مقارنته بالسعر الذي حسبه الخادم.
|
||||
|
||||
**الحل المقترح:**
|
||||
- إعادة حساب السعر بالكامل على الخادم باستخدام إحداثيات البداية والنهاية (`start_location`, `end_location`).
|
||||
- استخدام Map SaaS أو OSRM لحساب المسافة والمدة على الخادم وليس على العميل.
|
||||
- رفض الطلب إذا كان السعر المُرسل من العميل لا يتطابق مع السعر المُحتسب.
|
||||
|
||||
### 1.3 عملية الخصم المالي (Server-to-Server / Wallet)
|
||||
|
||||
**المسار:** `walletintaleq.intaleq.xyz/v2/main/`
|
||||
|
||||
**سير العمل الحالي:**
|
||||
- يتم الاتصال بسيرفر المحفظة المالية عبر `CRUD().postWallet()` الذي يرسل HMAC + JWT للمصادقة.
|
||||
- العملية تتم بعد انتهاء الرحلة عبر `payment_method.page.dart`.
|
||||
|
||||
**تحليل الأمان:**
|
||||
- ✅ استخدام HMAC للمصادقة بين الخادمين (S2S) يوفر طبقة أمان جيدة.
|
||||
- ✅ JWT منفصل للمحفظة يوفر فصل الصلاحيات (Wallet JWT).
|
||||
|
||||
**المخاطر:**
|
||||
- ❌ **لا توجد معاملة ذرية (Atomic Transaction) بين إنهاء الرحلة والخصم المالي:** إذا تم إنهاء الرحلة وفشل الخصم المالي (مثلاً بسبب انقطاع الشبكة)، تبقى الرحلة منتهية بدون دفع.
|
||||
- **الحل:** استخدام نمط Saga (عكس المعاملة): إذا فشل الخصم، إعادة الرحلة إلى الحالة "غير منتهية" عبر `COMPENSATING TRANSACTION`.
|
||||
- ❌ **تكرار طلب الدفع:** إذا أرسل العميل طلب الدفع مرتين (Double Payment)، قد يتم الخصم مرتين.
|
||||
- **الحل:** إضافة `idempotency_key` لكل معاملة دفع، والتأكد من أن الخادم لا يعالج نفس المفتاح مرتين.
|
||||
|
||||
---
|
||||
|
||||
## المحور الثاني: سيرفرات الويب سوكيت (WebSockets)
|
||||
|
||||
### 2.1 سيرفر السائقين — `driver_socket.php` (بورت 2020)
|
||||
|
||||
**الملف:** `socket_intaleq/driver_socket.php`
|
||||
|
||||
**تحليل المعمارية:**
|
||||
|
||||
**المستوى المتقدم (Level 2 Architecture):**
|
||||
1. **Event Buffering (تجميع الأحداث):** بدلاً من إرسال كل تحديث موقع إلى Redis بشكل منفصل، يتم تجميع التحديثات في `$eventBuffer` وإرسالها كل 500ms عبر Redis Pipeline.
|
||||
2. **تقليل عمليات Redis:** يتم تجاهل التحديثات إذا لم يتغير الموقع بأكثر من 10 أمتار، أو لم تتغير السرعة بأكثر من 1 م/ث، أو لم يتغير الاتجاه بأكثر من 5 درجات.
|
||||
3. **Forward غير متزامن (Async):** يتم إرسال موقع السائق إلى سيرفر الراكب عبر HTTP غير متزامن مع Throttle (كل 3 ثوانٍ و 15 متراً كحد أدنى).
|
||||
|
||||
**نقاط القوة:**
|
||||
- ✅ **Redis Pipeline:** يقلل عدد اتصالات Redis من مئات إلى اتصال واحد كل نصف ثانية.
|
||||
- ✅ **Async HTTP Forward:** لا يحجب سير العمل الرئيسي عن إرسال التحديثات.
|
||||
- ✅ **Throttle ذكي:** يمنع إغراق سيرفر الراكب بالتحديثات المتكررة.
|
||||
|
||||
**نقاط الضعف:**
|
||||
- ❌ **فقدان الأحداث عند انهيار السيرفر:** `$eventBuffer` مخزّن في الذاكرة (RAM)، فإذا انهار السيرفر، تُفقد جميع الأحداث المجمّعة قبل كتابتها في Redis.
|
||||
- **الحل:** استخدام Redis Queue (قائمة انتظار) بدلاً منBuffer الذاكرة، أو إضافة Write-Ahead Log (WAL).
|
||||
- ❌ **عدم وجود Watchdog للسائق:** إذا انقطع اتصال السائق (مثلاً فقدان الإنترنت)، لا توجد آلية لكشف ذلك وتحديث حالته إلى `offline` بشكل فوري.
|
||||
- **الحل:** إضافة `Heartbeat Timeout` في السيرفر: إذا لم يستقبل نبضاً من السائق لمدة 30 ثانية، يُعتبر مفصولاً.
|
||||
|
||||
### 2.2 سيرفر الركاب — `passenger_socket.php` (بورت 3030)
|
||||
|
||||
**الملف:** `socket_intaleq/passenger_socket.php`
|
||||
|
||||
**تحليل سير العمل:**
|
||||
- السيرفر يستمع على بورت 3030 لاتصالات WebSocket من الركاب.
|
||||
- بورت 3031 هو HTTP Internal Server لتلقي الأحداث من سيرفر السائقين.
|
||||
- عند استقبال حدث `update_driver_location` من سيرفر السائقين، يُبث فوراً للراكب المعني عبر `$io->to('passenger_' . $passengerId)->emit(...)`.
|
||||
|
||||
**نقاط القوة:**
|
||||
- ✅ **فصل القنوات:** كل راكب لديه قناة خاصة (`passenger_ID`)، مما يضمن الخصوصية.
|
||||
- ✅ **مصادقة داخلية:** جميع الطلبات الداخلية تتطلب `x-internal-key` لمنع الوصول غير المصرح به.
|
||||
|
||||
**نقاط الضعف:**
|
||||
- ❌ **تسجيل مفرط في الملفات:** كل حدث يُسجل في `socket_debug.log`، مما قد يؤدي إلى امتلاء القرص الصلب بسرعة في الإنتاج.
|
||||
- **الحل:** استخدام تدوير السجلات (Log Rotation) وتقليل مستوى التسجيل إلى `ERROR` فقط في الإنتاج، أو للاحداث الهامة فقط كفشل الاتصال.
|
||||
- ❌ **لا يوجد Polling Fallback من جهة السيرفر:** إذا فشل WebSocket مع الراكب، السيرفر لا يقوم بإعادة الإرسال عبر HTTP.
|
||||
- **الحل:** إضافة آلية `Message Acknowledgment`: الراكب يرسل `ack` لاستلام الموقع، وإذا لم يستلم، يُعاد الإرسال عبر FCM/Push.
|
||||
|
||||
### 2.3 اتصال WebSocket من جهة العميل (الراكب)
|
||||
|
||||
**الملف:** `siro_rider/lib/controller/home/map/map_socket_controller.dart`
|
||||
|
||||
**تحليل:**
|
||||
1. **الاتصال:** يتم تهيئة WebSocket عند بدء البحث عن سائق.
|
||||
2. **إعادة الاتصال:** 20 محاولة مع تأخير تصاعدي (2-10 ثوانٍ).
|
||||
3. **الاشتراك:** بعد الاتصال، يُرسل `subscribe_driver_location` لربط الرحلة.
|
||||
4. **النّبضات الحية (Heartbeat):** تُرسل كل 15 ثانية للحفاظ على الاتصال.
|
||||
5. **مراقب الصحة:** `isSocketHealthy()` تتحقق من آخر تحديث (أقل من 20 ثانية).
|
||||
|
||||
**نقاط القوة:**
|
||||
- ✅ **آلية إعادة اتصال قوية** مع تأخير تصاعدي.
|
||||
- ✅ **التبديل التلقائي للاقتراع (Polling Fallback):** عند فقدان الاتصال، يتم تفعيل الاقتراع كل 4 ثوانٍ.
|
||||
- ✅ **الكشف عن استقرار WebSocket:** بعد 3 تحديثات موثوقة عبر Socket، يتم إيقاف الاقتراع.
|
||||
|
||||
**مشاكل محتملة:**
|
||||
- ❌ **مقاطعة Stream:** إذا تم إغلاق الـ Stream (`_timerStreamController`) بشكل غير متوقع، يتوقف المؤقت عن العمل.
|
||||
- **الحل:** التحقق من `!streamController.isClosed` قبل كل إضافة.
|
||||
- ❌ **تسريب الذاكرة:** إذا لم يتم استدعاء `disposeRideSocket()` عند تدمير الـ Widget، يبقى الاتصال مفتوحاً.
|
||||
- **الحل:** استخدام `onClose()` في GetX Controller والتحقق من إغلاق جميع الموارد.
|
||||
|
||||
---
|
||||
|
||||
## المحور الثالث: الواجهة الأمامية (Frontend Clients)
|
||||
|
||||
### 3.1 متحكم دورة حياة الرحلة — `RideLifecycleController`
|
||||
|
||||
**الملف:** `siro_rider/lib/controller/home/map/ride_lifecycle_controller.dart` (4359 سطر)
|
||||
|
||||
**تحليل الأداء:**
|
||||
|
||||
**نقاط القوة:**
|
||||
- ✅ **آلة حالة متكاملة (State Machine):** `RideState` يغطي جميع حالات الرحلة (`noRide` → `searching` → `driverApplied` → `driverArrived` → `inProgress` → `finished`).
|
||||
- ✅ **حرّاس التكرار (Race Condition Guards):**
|
||||
- `_isFinishProcessed` لمنع تكرار معالجة إنهاء الرحلة.
|
||||
- `_isReviewProcessed` لمنع فتح شاشة التقييم مرتين.
|
||||
- `_isAcceptanceProcessed` و `_isRideStartedProcessed` لنفس الغرض.
|
||||
- ✅ **مؤقت رئيسي (Master Timer):** يتحكم في دورة حياة الرحلة بالكامل مع فترات استقصاء متغيرة حسب الحالة.
|
||||
- ✅ **مراقب الانحراف (Deviation Detection):** يكتشف إذا انحرف السائق عن المسار بأكثر من 30 متراً ويعيد حساب المسار تلقائياً.
|
||||
- ✅ **الصوت والتحذيرات:** تحذير عند السرعة الزائدة (100 كم/س) مع زر مشاركة الرحلة.
|
||||
|
||||
**المشاكل الهيكلية:**
|
||||
- ❌ **حجم الملف كبير جداً (~4359 سطر):** هذا يعتبر Anti-Pattern. يصعب صيانته واختباره.
|
||||
- **الحلول المقترحة:**
|
||||
1. تقسيم الـ Controller إلى Services متخصصة:
|
||||
- `RideStateMachine` — إدارة الحالات والانتقالات
|
||||
- `RideRouteService` — حساب المسار والانحرافات وإعادة الرسم
|
||||
- `RideTimerService` — إدارة المؤقتات
|
||||
- `RideUIService` — تحديث واجهة المستخدم والعناصر المنبثقة
|
||||
- `RidePaymentService` — معالجة الدفع والخصم
|
||||
2. استخدام `mixins` لتوزيع الوظائف عبر ملفات متعددة.
|
||||
|
||||
### 3.2 رسم المسار والملاحة
|
||||
|
||||
**تحليل سير العمل:**
|
||||
1. **حساب المسار الأولي:** عند قبول السائق، يتم الاتصال بـ `routec.intaleq.xyz` لحساب المسار.
|
||||
2. **رسم المسار على الخريطة:** يتم فك تشفير الـ Polyline وعرضه بلون أصفر (قدوم السائق) أو أزرق (الرحلة الحالية).
|
||||
3. **تحديث المسار المتبقي:** `updateRemainingRoute()` تحسب أقرب نقطة للسائق على المسار وتقص النقاط السابقة.
|
||||
4. **إعادة الرسم عند الانحراف:** إذا انحرف السائق بأكثر من 30 متراً، يُعاد حساب المسار بالكامل.
|
||||
|
||||
**نقاط القوة:**
|
||||
- ✅ **فك التشفير في Isolate:** استخدام `compute(decodePolylineIsolate, ...)` يمنع تجميد واجهة المستخدم.
|
||||
- ✅ **التحريك الانسيابي (Smooth Animation):** دالة `smoothlyUpdateMarker()` تنقل أيقونة السياره بسلاسة بين النقاط.
|
||||
|
||||
**المشاكل:**
|
||||
- ❌ **إعادة حساب المسار بشكل متكرر:** إذا كان السائق في منطقة ذات إشارات GPS ضعيفة، قد يتأرجح الموقع مسبباً إعادة حساب مستمرة.
|
||||
- **الحل:** إضافة `Cooldown 10 ثوانٍ` بين عمليات إعادة الحساب، واستخدام **ترشيح كالمان (Kalman Filter)** لتنعيم إحداثيات GPS.
|
||||
- ❌ **تخزين المسار في ذاكرة GETX:** `_currentDriverRoutePoints` يمكن أن تصبح كبيرة جداً في الرحلات الطويلة (آلاف النقاط).
|
||||
- **الحل:** ضغط النقاط باستخدام خوارزمية **Douglas-Peucker** لتقليل عدد نقاط المسار مع الحفاظ على الدقة.
|
||||
|
||||
### 3.3 التوجيه الصوتي (TTS)
|
||||
|
||||
**تحليل:**
|
||||
- يتم استخدام `audio_record1.dart` و `NotificationController` للتوجيه الصوتي والتنبيهات.
|
||||
- لا يوجد نظام TTS (Text-to-Speech) منفصل للتوجيه الصوتي خطوة بخطوة.
|
||||
|
||||
**نقطة الضعف:**
|
||||
- ❌ **عدم وجود TTS متكامل مع المسار:** التطبيق لا يقرأ التعليمات الصوتية تلقائياً (مثل "انعطف يميناً بعد 200 متر").
|
||||
- **الحل المقترح:** دمج **Google TTS** مع المسار من OSRM حيث يوفر تعليمات صوتية نصية يمكن تحويلها إلى صوت عبر `flutter_tts` package.
|
||||
|
||||
---
|
||||
|
||||
## المحور الرابع: تقرير المشاكل والأخطاء (Error Report)
|
||||
|
||||
### 4.1 ثغرات Race Conditions
|
||||
|
||||
| المشكلة | الموقع | الوصف | الحل المقترح |
|
||||
|---------|--------|-------|--------------|
|
||||
| **تكرار تقييم الرحلة** | `addRateToDriver.php` | يمكن للراكب إرسال تقييمين في نفس الوقت (Double Rating) | إضافة UNIQUE KEY على `(ride_id, passenger_id)` في جدول `ratingDriver` |
|
||||
| **تكرار إنشاء الرحلة** | `rides/add.php` | إرسال طلب إنشاء رحلة مرتين يؤدي إلى رحلتين مكررتين | إضافة `idempotency_key` في الطلب والتأكد من عدم معالجة المفتاح مراراً |
|
||||
| **تكرار الخصم المالي** | `payment_method.page.dart` | الضغط على زر الدفع مرتين قد يؤدي إلى خصمين | تعطيل الزر فور الضغط الأولى مع `loading state` |
|
||||
| **معالجة الإنهاء المزدوج** | `ride_lifecycle_controller.dart` | وصول حدث `finished` من السيرفر ومن المقبس في نفس الوقت | ✅ تم حلها باستخدام `_isFinishProcessed` |
|
||||
|
||||
### 4.2 حالات التعارض في WebSockets
|
||||
|
||||
| المشكلة | الوصف | الحل |
|
||||
|---------|-------|------|
|
||||
| **فقدان `ride_taken`** | إذا تم قبول الرحلة من سائقين في نفس الوقت (نادر)، قد يتم إرسال طلبين | استخدام `zrem` في Redis كعملية ذرية مع التحقق من الحذف |
|
||||
| **تأخير Forward** | إذا كان الضغط على السيرفر عالياً، قد يتأخر forward موقع السائق إلى الراكب | ترقية إلى WebSocket مباشر بين السائق والراكب بدلاً من HTTP Forward |
|
||||
| **فقدان النبضات** | إذا انقطع الإنترنت فجأة، قد يظل السائق متصلاً في قاعدة البيانات | إضافة `Heartbeat Timeout` في السيرفر (30 ثانية بدون نبض = فصل تلقائي) |
|
||||
|
||||
### 4.3 مشاكل الأداء
|
||||
|
||||
| المشكلة | الوصف | الحل |
|
||||
|---------|-------|------|
|
||||
| **حجم ملف التحكم** | `ride_lifecycle_controller.dart` (4359 سطر) يؤثر على وقت الترجمة والذاكرة | تقسيمه إلى موديولات أصغر |
|
||||
| **استعلامات متكررة** | `getDriverCarsLocationToPassengerAfterApplied` يتم استدعاؤه كل 4-6 ثوانٍ حتى عبر polling | تقليل التردد إلى كل 15 ثانية أو الاعتماد الكامل على WebSocket |
|
||||
| **ذاكرة التخزين المؤقت** | بيانات المسار الكامل مخزنة في الذاكرة قد تسبب OutOfMemory في الرحلات الطويلة | استخدام Douglas-Peucker لتقليل عدد النقاط |
|
||||
| **Logging غير محكوم** | `socket_debug.log` و `errors.log` قد تملأ القرص | تفعيل Log Rotation وتحديد مستوى logs الإنتاجي |
|
||||
|
||||
### 4.4 مشاكل أمنية خطيرة
|
||||
|
||||
| المشكلة | الخطر | الحل |
|
||||
|---------|-------|------|
|
||||
| **سعر الرحلة من العميل** | يمكن للمخترق تعديل سعر الرحلة عبر وسائل الطرف الثالث (مان-إن-ذا-ميدل) أو تعديل الطلب | إعادة حساب السعر بالكامل على الخادم |
|
||||
| **لا يوجد تحقق من المسافة** | يمكن تقليل المسافة المُرسلة للحصول على سعر أقل | حساب المسافة على الخادم من الإحداثيات |
|
||||
| **تسريب Internal Key** | مفتاح `x-internal-key` مخزّن في ملف نصي على السيرفر | استخدام متغيرات البيئة فقط مع Hashicorp Vault |
|
||||
|
||||
---
|
||||
|
||||
## خطة التحسينات المقترحة (Roadmap)
|
||||
|
||||
### المرحلة الأولى — فورية (عالية الأولوية)
|
||||
- [ ] إعادة حساب السعر على الخادم بدلاً من العميل
|
||||
- [ ] إضافة `UNIQUE KEY (ride_id, passenger_id)` على جدول `ratingDriver` لمنع التقييم المزدوج
|
||||
- [ ] إضافة `idempotency_key` لطلبات إنشاء الرحلة والدفع
|
||||
- [ ] إضافة Heartbeat Timeout (30 ثانية) في سيرفر السائقين
|
||||
|
||||
### المرحلة الثانية — قصيرة المدى
|
||||
- [ ] تحويل `add.php` (rides) إلى استخدام Atomic Transactions مع Rollback
|
||||
- [ ] إضافة Kalman Filter لتنعيم إحداثيات GPS
|
||||
- [ ] تقليل حجم ملف `ride_lifecycle_controller.dart` عبر التقسيم
|
||||
- [ ] إضافة Log Rotation وتحديد مستوى التسجيل
|
||||
|
||||
### المرحلة الثالثة — طويلة المدى
|
||||
- [ ] استبدال HTTP Forward في WebSocket باتصال مباشر (Peer-to-Peer)
|
||||
- [ ] دمج نظام TTS للتوجيه الصوتي
|
||||
- [ ] ترحيل Event Buffer من الذاكرة إلى Redis Queue
|
||||
- [ ] استخدام Douglas-Peucker لتقليل نقاط المسار
|
||||
|
||||
---
|
||||
|
||||
## الخلاصة والتقييم العام
|
||||
|
||||
| المحور | التقييم | الدرجة |
|
||||
|--------|---------|--------|
|
||||
| Backend Architecture | جيد مع وجود مخاطر أمنية | 7/10 |
|
||||
| WebSocket Architecture | ممتاز مع نظام تجميع الأحداث (Level 2) | 9/10 |
|
||||
| Frontend Performance | متكامل لكن يحتاج إعادة هيكلة | 7.5/10 |
|
||||
| Race Condition Handling | جيد جداً مع وجود حرّاس مناسبة | 8/10 |
|
||||
| Security | يوجد ثغرات خطيرة (سعر الرحلة من العميل) | 5/10 |
|
||||
| Code Maintainability | مدمج في ملف واحد كبير جداً | 4/10 |
|
||||
|
||||
**التقييم العام: 6.8/10**
|
||||
|
||||
النظام قوي من ناحية البنية التحتية للـ WebSocket مع نظام التجميع الذكي، لكنه يعاني من مشاكل أمنية حرجة تتعلق بتسعير الرحلة من جهة العميل، وهيكلة الكود الموحّدة في ملف ضخم يصعب صيانته. الأولوية القصوى يجب أن تكون لإعادة حساب السعر على الخادم وتقسيم الـ Controller الضخم.
|
||||
|
||||
---
|
||||
|
||||
*إعداد: تحليل برمجي تلقائي - يونيو 2026*
|
||||
@@ -0,0 +1,534 @@
|
||||
<meta charset="utf-8">
|
||||
<title>سيرو — التقرير الشامل للمنظومة</title>
|
||||
<style>
|
||||
:root{
|
||||
--bg:#F6F7F5; --surface:#FFFFFF; --surface2:#EEF1EE;
|
||||
--ink:#1A241F; --muted:#5B6862; --faint:#8B968F;
|
||||
--line:#E1E5E1; --line2:#D2D8D3;
|
||||
--brand:#0E7A5F; --brand-ink:#0A5945; --brand-soft:#E4F0EB;
|
||||
--amber:#9A6B12; --amber-soft:#F6EDDA;
|
||||
--red:#B3362B; --red-soft:#F7E5E2;
|
||||
--good:#2E7D4F; --good-soft:#E4F1E8;
|
||||
--sans:"SF Arabic","Segoe UI",system-ui,-apple-system,"Noto Sans Arabic",Tahoma,sans-serif;
|
||||
--mono:ui-monospace,"SF Mono",Consolas,monospace;
|
||||
}
|
||||
@media (prefers-color-scheme: dark){
|
||||
:root{
|
||||
--bg:#0F1512; --surface:#161E19; --surface2:#1C2620;
|
||||
--ink:#E8EDEA; --muted:#9BA8A1; --faint:#6E7B74;
|
||||
--line:#26302B; --line2:#32403A;
|
||||
--brand:#3FBF97; --brand-ink:#8FE0C5; --brand-soft:#15342A;
|
||||
--amber:#E0AE55; --amber-soft:#33290F;
|
||||
--red:#E07065; --red-soft:#361A16;
|
||||
--good:#57C287; --good-soft:#14301F;
|
||||
}
|
||||
}
|
||||
:root[data-theme="dark"]{
|
||||
--bg:#0F1512; --surface:#161E19; --surface2:#1C2620;
|
||||
--ink:#E8EDEA; --muted:#9BA8A1; --faint:#6E7B74;
|
||||
--line:#26302B; --line2:#32403A;
|
||||
--brand:#3FBF97; --brand-ink:#8FE0C5; --brand-soft:#15342A;
|
||||
--amber:#E0AE55; --amber-soft:#33290F;
|
||||
--red:#E07065; --red-soft:#361A16;
|
||||
--good:#57C287; --good-soft:#14301F;
|
||||
}
|
||||
:root[data-theme="light"]{
|
||||
--bg:#F6F7F5; --surface:#FFFFFF; --surface2:#EEF1EE;
|
||||
--ink:#1A241F; --muted:#5B6862; --faint:#8B968F;
|
||||
--line:#E1E5E1; --line2:#D2D8D3;
|
||||
--brand:#0E7A5F; --brand-ink:#0A5945; --brand-soft:#E4F0EB;
|
||||
--amber:#9A6B12; --amber-soft:#F6EDDA;
|
||||
--red:#B3362B; --red-soft:#F7E5E2;
|
||||
--good:#2E7D4F; --good-soft:#E4F1E8;
|
||||
}
|
||||
|
||||
html{ scroll-behavior:smooth; }
|
||||
@media (prefers-reduced-motion: reduce){ html{ scroll-behavior:auto; } }
|
||||
|
||||
.page{
|
||||
background:var(--bg); color:var(--ink);
|
||||
font-family:var(--sans); font-size:16px; line-height:1.85;
|
||||
min-height:100%;
|
||||
}
|
||||
.page *{ box-sizing:border-box; }
|
||||
.wrap{ max-width:840px; margin:0 auto; padding:0 22px; }
|
||||
.page h1,.page h2,.page h3,.page h4{ margin:0; color:var(--ink); text-wrap:balance; line-height:1.35; }
|
||||
.page p{ margin:0; }
|
||||
.page a{ color:var(--brand); }
|
||||
.page a:focus-visible, .page summary:focus-visible{ outline:2px solid var(--brand); outline-offset:2px; border-radius:4px; }
|
||||
code{
|
||||
direction:ltr; unicode-bidi:isolate; font-family:var(--mono); font-size:.82em;
|
||||
background:var(--surface2); border:1px solid var(--line); border-radius:5px; padding:.08em .4em;
|
||||
}
|
||||
.num{ font-variant-numeric:tabular-nums; }
|
||||
|
||||
/* ===== Hero ===== */
|
||||
.hero{ padding:64px 0 36px; border-bottom:1px solid var(--line); }
|
||||
.hero .kicker{
|
||||
display:inline-block; font-size:.78rem; font-weight:700; letter-spacing:.04em;
|
||||
color:var(--brand-ink); background:var(--brand-soft); border-radius:99px; padding:4px 14px;
|
||||
margin-bottom:18px;
|
||||
}
|
||||
.hero h1{ font-size:clamp(1.7rem, 4.5vw, 2.5rem); font-weight:800; }
|
||||
.hero .lede{ margin-top:14px; font-size:1.05rem; color:var(--muted); max-width:60ch; }
|
||||
.hero .meta{ margin-top:16px; font-size:.8rem; color:var(--faint); }
|
||||
|
||||
.stats{ display:grid; grid-template-columns:repeat(6,1fr); gap:0; margin-top:30px;
|
||||
border:1px solid var(--line); border-radius:14px; background:var(--surface); overflow:hidden; }
|
||||
.stat{ padding:14px 10px; text-align:center; border-inline-start:1px solid var(--line); }
|
||||
.stat:first-child{ border-inline-start:none; }
|
||||
.stat b{ display:block; font-size:1.35rem; font-weight:800; color:var(--brand-ink); font-variant-numeric:tabular-nums; }
|
||||
.stat span{ font-size:.72rem; color:var(--muted); line-height:1.4; display:block; margin-top:2px; }
|
||||
@media (max-width:700px){
|
||||
.stats{ grid-template-columns:repeat(3,1fr); }
|
||||
.stat:nth-child(4){ border-inline-start:none; }
|
||||
.stat:nth-child(-n+3){ border-bottom:1px solid var(--line); }
|
||||
}
|
||||
|
||||
/* ===== Sticky TOC ===== */
|
||||
.tocbar{
|
||||
position:sticky; top:0; z-index:10; background:var(--bg);
|
||||
border-bottom:1px solid var(--line); padding:10px 0;
|
||||
}
|
||||
.tocbar .row{ display:flex; gap:8px; overflow-x:auto; scrollbar-width:none; padding:2px; }
|
||||
.tocbar .row::-webkit-scrollbar{ display:none; }
|
||||
.tocbar a{
|
||||
flex:none; text-decoration:none; font-size:.8rem; font-weight:700; color:var(--muted);
|
||||
border:1px solid var(--line); background:var(--surface); border-radius:99px; padding:5px 13px;
|
||||
white-space:nowrap;
|
||||
}
|
||||
.tocbar a b{ color:var(--brand); font-weight:800; margin-inline-end:4px; font-variant-numeric:tabular-nums; }
|
||||
.tocbar a:hover{ border-color:var(--brand); color:var(--ink); }
|
||||
|
||||
/* ===== Sections ===== */
|
||||
section{ padding:46px 0 8px; }
|
||||
.sec-head{ margin-bottom:20px; }
|
||||
.sec-head .eyebrow{
|
||||
font-size:.75rem; font-weight:800; color:var(--brand); letter-spacing:.08em;
|
||||
font-variant-numeric:tabular-nums;
|
||||
}
|
||||
.sec-head h2{ font-size:1.45rem; font-weight:800; margin-top:4px; }
|
||||
.sec-head .thesis{ margin-top:8px; color:var(--muted); font-size:.95rem; max-width:66ch; }
|
||||
|
||||
.subhead{
|
||||
font-size:.82rem; font-weight:800; color:var(--faint); letter-spacing:.03em;
|
||||
margin:26px 0 10px; display:flex; align-items:center; gap:10px;
|
||||
}
|
||||
.subhead::after{ content:""; flex:1; height:1px; background:var(--line); }
|
||||
|
||||
/* compact feature rows */
|
||||
.rows{ border:1px solid var(--line); border-radius:14px; background:var(--surface); overflow:hidden; }
|
||||
.row-item{ padding:13px 18px; border-top:1px solid var(--line); }
|
||||
.row-item:first-child{ border-top:none; }
|
||||
.row-item h4{ font-size:.95rem; font-weight:800; display:inline; }
|
||||
.row-item p{ display:inline; color:var(--muted); font-size:.9rem; }
|
||||
.row-item h4::after{ content:" — "; color:var(--faint); font-weight:400; }
|
||||
.row-item .why{ display:block; margin-top:3px; font-size:.83rem; color:var(--brand-ink); }
|
||||
|
||||
/* alerts */
|
||||
.alert{ border-radius:12px; padding:14px 18px; margin:16px 0; font-size:.9rem; border:1px solid; }
|
||||
.alert p{ color:var(--ink); }
|
||||
.alert .tag{ display:inline-block; font-size:.72rem; font-weight:800; border-radius:6px; padding:1px 9px; margin-bottom:6px; }
|
||||
.alert.crit{ background:var(--red-soft); border-color:color-mix(in srgb, var(--red) 35%, transparent); }
|
||||
.alert.crit .tag{ background:var(--red); color:var(--bg); }
|
||||
.alert.warn{ background:var(--amber-soft); border-color:color-mix(in srgb, var(--amber) 35%, transparent); }
|
||||
.alert.warn .tag{ background:var(--amber); color:var(--bg); }
|
||||
.alert.good{ background:var(--good-soft); border-color:color-mix(in srgb, var(--good) 35%, transparent); }
|
||||
.alert.good .tag{ background:var(--good); color:var(--bg); }
|
||||
|
||||
/* ===== Ride flow timeline ===== */
|
||||
.flow{ position:relative; padding-inline-start:26px; margin-top:8px; }
|
||||
.flow::before{ content:""; position:absolute; inset-inline-start:8px; top:8px; bottom:8px; width:2px;
|
||||
background:linear-gradient(var(--brand), var(--line2)); border-radius:2px; }
|
||||
.step{ position:relative; padding:0 0 26px; }
|
||||
.step::before{
|
||||
content:""; position:absolute; inset-inline-start:-24px; top:7px; width:12px; height:12px;
|
||||
border-radius:50%; background:var(--bg); border:3px solid var(--brand);
|
||||
}
|
||||
.step h4{ font-size:1rem; font-weight:800; }
|
||||
.step h4 .t{ font-size:.72rem; font-weight:700; color:var(--brand-ink); background:var(--brand-soft);
|
||||
border-radius:99px; padding:2px 10px; margin-inline-start:8px; vertical-align:2px; white-space:nowrap; }
|
||||
.step p{ color:var(--muted); font-size:.9rem; margin-top:4px; max-width:62ch; }
|
||||
|
||||
/* ===== two-col mini grid ===== */
|
||||
.duo{ display:grid; grid-template-columns:1fr 1fr; gap:14px; }
|
||||
@media (max-width:640px){ .duo{ grid-template-columns:1fr; } }
|
||||
.panel{ border:1px solid var(--line); border-radius:14px; background:var(--surface); padding:16px 18px; }
|
||||
.panel h4{ font-size:.95rem; font-weight:800; margin-bottom:6px; }
|
||||
.panel p, .panel li{ color:var(--muted); font-size:.88rem; }
|
||||
.panel ul{ margin:6px 0 0; padding-inline-start:18px; display:flex; flex-direction:column; gap:5px; }
|
||||
.panel.can h4{ color:var(--good); }
|
||||
.panel.cannot h4{ color:var(--red); }
|
||||
|
||||
/* ===== tutorial modules ===== */
|
||||
.mods{ display:grid; grid-template-columns:1fr 1fr; gap:14px; }
|
||||
@media (max-width:640px){ .mods{ grid-template-columns:1fr; } }
|
||||
.mod{ border:1px solid var(--line); border-radius:14px; background:var(--surface); padding:16px 18px; position:relative; }
|
||||
.mod .shots{ position:absolute; top:14px; inset-inline-end:16px; font-size:.7rem; font-weight:800;
|
||||
color:var(--brand-ink); background:var(--brand-soft); border-radius:99px; padding:2px 10px; font-variant-numeric:tabular-nums; }
|
||||
.mod h4{ font-size:.95rem; font-weight:800; padding-inline-end:70px; }
|
||||
.mod ol{ margin:8px 0 0; padding-inline-start:18px; color:var(--muted); font-size:.85rem; display:flex; flex-direction:column; gap:4px; }
|
||||
.mod .note{ margin-top:8px; font-size:.8rem; color:var(--brand-ink); }
|
||||
|
||||
/* transit actors */
|
||||
.actors{ display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin:14px 0 4px; }
|
||||
@media (max-width:760px){ .actors{ grid-template-columns:1fr 1fr; } }
|
||||
.actor{ border:1px solid var(--line); border-radius:12px; background:var(--surface); padding:12px 14px; text-align:center; }
|
||||
.actor .ic{ font-size:1.4rem; }
|
||||
.actor b{ display:block; font-size:.85rem; margin-top:4px; }
|
||||
.actor span{ font-size:.74rem; color:var(--muted); display:block; line-height:1.5; }
|
||||
|
||||
footer.end{ margin-top:56px; border-top:1px solid var(--line); padding:22px 0 60px;
|
||||
font-size:.8rem; color:var(--faint); display:flex; justify-content:space-between; flex-wrap:wrap; gap:8px; }
|
||||
</style>
|
||||
|
||||
<div class="page" dir="rtl" lang="ar">
|
||||
|
||||
<header class="hero"><div class="wrap">
|
||||
<span class="kicker">التقرير الشامل — نسخة محدّثة تشمل مواصلاتي وسير الرحلة والتوتوريال</span>
|
||||
<h1>سيرو — الإرث الرقمي لمنظومة التنقّل المتكاملة</h1>
|
||||
<p class="lede">
|
||||
جرد كامل لكل ما بُني في منصة Siro ولماذا بُني: تطبيقات الراكب والسائق والإدارة وخدمة العملاء،
|
||||
البنية الخلفية ومحرك التسعير، الخرائط والتتبع الحي، نظام «مواصلاتي» لباصات الجامعات،
|
||||
البوتات والذكاء الاصطناعي، والمنظومة المالية — مع سير الرحلة خطوة بخطوة وخطة التوتوريال الكاملة.
|
||||
</p>
|
||||
<p class="meta">أُعدّ بفحص مباشر للكود المصدري — كل رقم ومسار ملف تمّ التحقق منه فعلياً · آخر تحديث 2026-07-14</p>
|
||||
<div class="stats">
|
||||
<div class="stat"><b>4</b><span>تطبيقات موبايل</span></div>
|
||||
<div class="stat"><b>9</b><span>فئات مركبات</span></div>
|
||||
<div class="stat"><b>3</b><span>دول تشغيل</span></div>
|
||||
<div class="stat"><b>13+</b><span>لغة مدعومة</span></div>
|
||||
<div class="stat"><b>10+</b><span>طرق دفع محلية</span></div>
|
||||
<div class="stat"><b>2</b><span>خطا أعمال: مشاوير + مواصلاتي</span></div>
|
||||
</div>
|
||||
</div></header>
|
||||
|
||||
<nav class="tocbar" aria-label="فهرس التقرير"><div class="wrap"><div class="row">
|
||||
<a href="#overview"><b>00</b>نظرة عامة</a>
|
||||
<a href="#rideflow"><b>01</b>سير الرحلة</a>
|
||||
<a href="#rider"><b>02</b>الراكب</a>
|
||||
<a href="#driver"><b>03</b>السائق</a>
|
||||
<a href="#ops"><b>04</b>الإدارة والدعم</a>
|
||||
<a href="#backend"><b>05</b>البنية والتسعير</a>
|
||||
<a href="#maps"><b>06</b>الخرائط</a>
|
||||
<a href="#transit"><b>07</b>مواصلاتي</a>
|
||||
<a href="#bots"><b>08</b>البوتات</a>
|
||||
<a href="#finance"><b>09</b>المالية والاستثمار</a>
|
||||
<a href="#legacy"><b>10</b>القيمة</a>
|
||||
<a href="#risks"><b>11</b>المخاطر</a>
|
||||
<a href="#tutorial"><b>12</b>التوتوريال</a>
|
||||
</div></div></nav>
|
||||
|
||||
<main class="wrap">
|
||||
|
||||
<!-- 00 -->
|
||||
<section id="overview">
|
||||
<div class="sec-head">
|
||||
<span class="eyebrow">00</span>
|
||||
<h2>نظرة عامة: منصة واحدة، تسعة أنظمة متكاملة</h2>
|
||||
<p class="thesis">سيرو ليست «تطبيق طلب سيارة» — هي منظومة من 4 تطبيقات Flutter، وباك اند PHP/Node ضخم، وخوادم Socket خاصة للتتبع الحي، ومحرك تسعير بالذكاء الاصطناعي، ونظام نقل جماعي للجامعات، وبنية مالية متعددة الدول — كلها مبنية داخلياً وتعمل في الأردن ومصر وسوريا.</p>
|
||||
</div>
|
||||
<div class="rows">
|
||||
<div class="row-item"><h4>🚕 أربعة تطبيقات Flutter</h4><p>الراكب (226 ملف)، السائق (275 ملف — الأكبر)، الإدارة (131)، خدمة العملاء (66) — تشترك بنفس الباك اند.</p></div>
|
||||
<div class="row-item"><h4>🗄️ باك اند PHP مقسّم بأمان مركزي</h4><p>كل وحدة (مصادقة، رحلات، تسعير، تأمين…) تمر إجبارياً عبر طبقة JWT + تشفير + تحديد معدل طلبات واحدة.</p></div>
|
||||
<div class="row-item"><h4>📍 خوادم Socket خاصة للموقع</h4><p>خادم سائق وخادم راكب منفصلان — تتبع لحظي دون الاعتماد على Google Maps، بتوفير تكلفة ضخم.</p></div>
|
||||
<div class="row-item"><h4>🤖 محرك تسعير ذكي</h4><p>بوت يقرأ أسعار المنافسين من تطبيقاتهم، محرك يفكّك معادلاتهم، وكرون جوبز تُبقي سيرو أرخص بـ 6.5% آلياً.</p></div>
|
||||
<div class="row-item"><h4>🚌 مواصلاتي</h4><p>نظام نقل جماعي للجامعات والمؤسسات (SaaS مجاني) بقاعدة بيانات معزولة ولوحة تحكم ويب مستقلة — القسم 07.</p></div>
|
||||
<div class="row-item"><h4>💳 محفظة ودفع متعدد الدول</h4><p>خدمة منفصلة (268 ملف) تربط MTN وSyriatel Cash وShamCash وCliq وPayMob وeCash.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 01 RIDE FLOW -->
|
||||
<section id="rideflow">
|
||||
<div class="sec-head">
|
||||
<span class="eyebrow">01</span>
|
||||
<h2>سير الرحلة — من فتح التطبيق حتى التقييم</h2>
|
||||
<p class="thesis">الدورة الكاملة كما تعمل فعلياً في الكود: كل خطوة لها شاشة وحالة (State) وقناة تواصل حي. هذه الدورة نفسها هي أساس التوتوريال في القسم 12.</p>
|
||||
</div>
|
||||
<div class="flow">
|
||||
<div class="step"><h4>الدخول والتحقق <span class="t">أقل من دقيقة</span></h4><p>رقم الهاتف + رمز OTP (واتساب/SMS حسب الدولة) — لا بريد إلكتروني إجباري ولا بطاقة. الجلسة تُربط ببصمة الجهاز فلا يعمل الرمز المسروق على جهاز آخر.</p></div>
|
||||
<div class="step"><h4>تحديد الوجهة والسعر <span class="t">فوري</span></h4><p>بحث عن المكان، اختيار فئة من 9 فئات، والسعر يُحسب بالكامل على الخادم ويُختم برمز موقّت صالح 7 دقائق — لا يمكن التلاعب به بين شاشة العرض والتأكيد.</p></div>
|
||||
<div class="step"><h4>البحث عن كابتن <span class="t">حتى 90 ثانية</span></h4><p>مطابقة «أقرب سائق» عبر Redis الجغرافي. إذا لم يقبل أحد خلال 90 ثانية يقترح «المفاوض الذكي» رفع السعر ~5% بدل إلغاء الطلب.</p></div>
|
||||
<div class="step"><h4>قبول الكابتن والتوجه إليك <span class="t">تتبع حي</span></h4><p>بطاقة الكابتن (اسم، تقييم، سيارة، لوحة) ومسار أصفر يتحرك لحظياً عبر WebSocket، مع إشعار FCM وLive Activity على iOS.</p></div>
|
||||
<div class="step"><h4>الوصول والانتظار <span class="t">مهلة 5 دقائق</span></h4><p>إشعار «الكابتن وصل» ويبدأ عداد انتظار. الإلغاء قبل القبول مجاني دائماً؛ بعد الوصول قد تُطبَّق رسوم.</p></div>
|
||||
<div class="step"><h4>الرحلة الجارية <span class="t">مسار أزرق + SOS</span></h4><p>عداد حي، كشف انحراف عن المسار (50م)، تنبيه تجاوز سرعة 100كم/س، زر طوارئ يعمل بهزّ الهاتف، ومشاركة الرحلة مع الأهل برابط حي.</p></div>
|
||||
<div class="step"><h4>التسوية والدفع <span class="t">من الخادم</span></h4><p>السعر النهائي يُعاد حسابه من المسافة والزمن الفعليين بسقوف أمان (≤1.6× المعروض)، ثم الدفع: كاش، محفظة، PayMob، MTN، Syriatel، Cliq.</p></div>
|
||||
<div class="step"><h4>التقييم والإكرامية <span class="t">اختياري</span></h4><p>تقييم الكابتن بالنجوم مع إكرامية اختيارية، وتُحفظ الرحلة في السجل مع الفاتورة.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 02 RIDER -->
|
||||
<section id="rider">
|
||||
<div class="sec-head">
|
||||
<span class="eyebrow">02</span>
|
||||
<h2>تطبيق الراكب</h2>
|
||||
<p class="thesis">واجهة المستخدم النهائي — أعمق بكثير من «اطلب وادفع»، وفيها ميزات ثقة وسلامة نادرة حتى عند منافسين أكبر.</p>
|
||||
</div>
|
||||
|
||||
<div class="subhead">الحجز والتسعير</div>
|
||||
<div class="rows">
|
||||
<div class="row-item"><h4>9 فئات ركوب</h4><p>اقتصادية (Balash/Awfar)، Comfort، كهربائية، Lady نسائية، Van عائلية، VIP/مشوار (اختيار سائق بالاسم لموعد لاحق)، توصيل، ورايح-جاي بين المدن (+23 كم).</p><span class="why">كل فئة تفتح شريحة سوق مختلفة — من الطالب حتى العائلة والراكبات.</span></div>
|
||||
<div class="row-item"><h4>شارة مقارنة أسعار</h4><p>«أنت توفّر X% مقارنة بكريم/أوبر/يلا-جو» بالاسم صراحة على شاشة الطلب.</p></div>
|
||||
<div class="row-item"><h4>المفاوض الذكي</h4><p>اقتراح آلي لرفع السعر عند عدم توفر كابتن — يقلل الطلبات الفاشلة.</p></div>
|
||||
</div>
|
||||
|
||||
<div class="subhead">الدفع والولاء</div>
|
||||
<div class="rows">
|
||||
<div class="row-item"><h4>Siro Prime</h4><p>اشتراك ~4$ شهرياً: بلا تسعير ذروة، أولوية مطابقة، شارة تزيد قبول السائقين — إيراد شهري متكرر.</p></div>
|
||||
<div class="row-item"><h4>مكافآت شحن المحفظة</h4><p>«ادفع 20 خذ 21» — يشجع الرصيد المسبق ويقلل الكاش.</p></div>
|
||||
<div class="row-item"><h4>تنبيه الرصيد السالب</h4><p>بانر دائم + قراءة صوتية عند وجود دين من رحلة كاش سابقة — تحصيل استباقي.</p></div>
|
||||
<div class="row-item"><h4>إحالة ثنائية</h4><p>دعوة أصدقاء كركاب أو سائقين عبر واتساب، والمكافأة تُفتح بعد رحلتين فعليتين.</p></div>
|
||||
</div>
|
||||
|
||||
<div class="subhead">السلامة والثقة</div>
|
||||
<div class="rows">
|
||||
<div class="row-item"><h4>زر الطوارئ SOS</h4><p>واتساب فوري لجهة طوارئ مع الموقع الحي واسم السائق واللوحة — ويتفعّل بهزّ الهاتف 5 مرات.</p></div>
|
||||
<div class="row-item"><h4>مراقبة حية لطرف ثالث</h4><p>رابط يتيح لولي الأمر متابعة الموقع والسرعة دون تثبيت التطبيق — تمايز حقيقي لشريحة الطالبات.</p></div>
|
||||
<div class="row-item"><h4>مكالمات WebRTC داخلية</h4><p>اتصال راكب↔سائق دون كشف الأرقام، ببنية ذاتية بدل Agora المدفوعة.</p></div>
|
||||
<div class="row-item"><h4>تسجيل صوتي للرحلة + تنبيه سرعة</h4><p>دليل عند النزاع، وتنبيه فوري عند تجاوز 100 كم/س.</p></div>
|
||||
<div class="row-item"><h4>حماية تقنية</h4><p>بصمة جهاز، كشف Root/Jailbreak، تثبيت SSL ضد اعتراض البيانات.</p></div>
|
||||
</div>
|
||||
|
||||
<div class="subhead">تجربة مصممة للمنطقة</div>
|
||||
<div class="rows">
|
||||
<div class="row-item"><h4>13+ لغة بثلاث لهجات عربية</h4><p>مصري/أردني/سوري بملفات منفصلة + RTL كامل — جاهزية توسع حقيقية.</p></div>
|
||||
<div class="row-item"><h4>خرائط دون اتصال + كشف نوعية الجهاز</h4><p>تحميل مسبق للبلاطات، وتخفيف الرسوميات آلياً على الأجهزة الاقتصادية.</p></div>
|
||||
<div class="row-item"><h4>قراءة صوتية TTS</h4><p>وصف الرحلات والتنبيهات صوتياً — يشمل ضعاف البصر، سوق مهمَل من المنافسين.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 03 DRIVER -->
|
||||
<section id="driver">
|
||||
<div class="sec-head">
|
||||
<span class="eyebrow">03</span>
|
||||
<h2>تطبيق السائق</h2>
|
||||
<p class="thesis">أكبر تطبيق في المنظومة (275 ملف) — محرك تشغيل الأسطول: مكافحة احتيال، نظام تدرّج بخصومات عمولة فعلية، وذكاء تشغيلي يوجّه السائق للربح.</p>
|
||||
</div>
|
||||
|
||||
<div class="alert good"><span class="tag">✅ مؤكد في الكود</span>
|
||||
<p>ميزة «أرباحك أعلى بـ X مقارنة بالتطبيقات الأخرى» موجودة ومفعّلة: <code>driver_earnings_badge.dart</code> يعرض شارة خضراء على شاشة قبول الطلب مبنية على حقل <code>driver_earnings_extra</code> من الخادم.</p>
|
||||
</div>
|
||||
|
||||
<div class="rows">
|
||||
<div class="row-item"><h4>تدرّج بخصم عمولة حقيقي</h4><p>برونزي ← فضي (−1%) ← ذهبي (−2%) ← ماسي (−5% + أولوية) — ولاء بمكافأة مالية ملموسة.</p></div>
|
||||
<div class="row-item"><h4>سلسلة رحلات بلا إلغاء</h4><p>5 رحلات متتالية = عمولة 0% لبقية اليوم؛ أي إلغاء يصفّر السلسلة.</p></div>
|
||||
<div class="row-item"><h4>خارطة طلب تنبؤية</h4><p>أين سيرتفع الطلب خلال الساعة القادمة، من بيانات الرحلات التاريخية.</p></div>
|
||||
<div class="row-item"><h4>حد 12 ساعة قيادة + حظر بعد 3 إلغاءات</h4><p>راحة إجبارية 6 ساعات، وحماية موثوقية السوق من الإلغاء المتكرر.</p></div>
|
||||
<div class="row-item"><h4>تحقق مسافة قبل إنهاء الرحلة</h4><p>مقارنة إزاحة GPS الفعلية بالمتوقعة — يمنع تزوير إتمام الرحلات.</p></div>
|
||||
<div class="row-item"><h4>توثيق بالذكاء الاصطناعي</h4><p>Gemini يقرأ الهوية والرخصة، ومطابقة وجه (سيلفي↔هوية) قبل قبول التسجيل، وكشف «الرحلة الذاتية» بمقارنة بصمتي الجهازين.</p></div>
|
||||
<div class="row-item"><h4>Android Auto / CarPlay</h4><p>جسر ملاحة مخصص لشاشة السيارة — تجربة مكافئة لأوبر/كريم.</p></div>
|
||||
<div class="row-item"><h4>سحب أرباح متعدد القنوات</h4><p>PayMob، MTN، Cliq، eCash، حساب بنكي، وحتى SMS في سوريا.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 04 OPS -->
|
||||
<section id="ops">
|
||||
<div class="sec-head">
|
||||
<span class="eyebrow">04</span>
|
||||
<h2>الإدارة وخدمة العملاء</h2>
|
||||
<p class="thesis">لوحة تشغيل داخلية حقيقية بطبقتين (قديمة + V2 تحليلية)، وتطبيق دعم ميداني سريع — مع فجوات تشغيلية يجب قولها بصراحة.</p>
|
||||
</div>
|
||||
<div class="rows">
|
||||
<div class="row-item"><h4>مركز عمليات حي (V2)</h4><p>رحلات نشطة، سائقون متصلون، إيراد اليوم مقابل الأمس، شكاوى — يتحدث كل دقيقتين.</p></div>
|
||||
<div class="row-item"><h4>محرر تسعير «كازان»</h4><p>عمولة كل دولة، سعر الكيلومتر لكل فئة، وتسعير الدقيقة حسب الوقت — أهم رافعة إيراد في المنصة.</p></div>
|
||||
<div class="row-item"><h4>مساعد تسجيل بالذكاء الاصطناعي</h4><p>Gemini + Claude Haiku يقرآن الوثائق المصرية ويكشفان الانتهاء وعدم تطابق الأسماء آلياً.</p></div>
|
||||
<div class="row-item"><h4>بطاقة جودة السائق + سجل تدقيق</h4><p>قرارات حظر مبنية على بيانات، وكل إجراء موظف حساس مسجّل بالاسم والوقت.</p></div>
|
||||
<div class="row-item"><h4>دعم ميداني سريع</h4><p>بحث برقم هاتف/رحلة، تفعيل سائقين، وقوالب واتساب عربية جاهزة — بدون CRM مكلف.</p></div>
|
||||
</div>
|
||||
<div class="alert warn"><span class="tag">فجوات تشغيلية</span>
|
||||
<p>شاشة عرض الشكوى في تطبيق خدمة العملاء ما زالت فارغة (stub) رغم جاهزية قاعدة البيانات لسير تحقيق كامل · لا توجد أداة استرجاع مبلغ (Refund) في كامل النظام · لا يوجد تتبع SLA أو تصعيد للشكاوى الحرجة.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 05 BACKEND -->
|
||||
<section id="backend">
|
||||
<div class="sec-head">
|
||||
<span class="eyebrow">05</span>
|
||||
<h2>البنية الخلفية ومحرك التسعير</h2>
|
||||
<p class="thesis">قلب المنصة: كل طلب يمر عبر طبقة أمان مركزية قبل أي منطق عمل، ومحرك رحلات (202 ملف) يتخذ قرارات تجارية آلياً.</p>
|
||||
</div>
|
||||
<div class="rows">
|
||||
<div class="row-item"><h4>JWT مربوط ببصمة الجهاز</h4><p>الرمز المسروق لا يعمل على جهاز آخر.</p></div>
|
||||
<div class="row-item"><h4>تشفير AES-256 للبيانات الحساسة</h4><p>أسماء، هواتف، هويات، لوحات — مشفّرة حتى لو تسربت القاعدة.</p></div>
|
||||
<div class="row-item"><h4>Rate Limiting مخصص لكل نوع طلب</h4><p>حدود أشد للشكاوى لأن كل شكوى تستدعي Gemini + واتساب.</p></div>
|
||||
<div class="row-item"><h4>رمز سعر موقّع (7 دقائق)</h4><p>يغلق ثغرة التلاعب بالسعر بين العرض والتأكيد.</p></div>
|
||||
<div class="row-item"><h4>تسوية أجرة آمنة</h4><p>إعادة حساب من الخادم بسقوف (≤1.6× السعر، ≤1.5× المسافة) قبل التحويل للمحفظة.</p></div>
|
||||
<div class="row-item"><h4>مطابقة الوجهة (Destination Matching)</h4><p>سائق متجه للبيت يأخذ أولوية الطلبات القريبة من وجهته، والراكب يخصم 14%.</p></div>
|
||||
<div class="row-item"><h4>تسعير ديناميكي متكامل</h4><p>ذروة حسب العرض/الطلب لكل قطعة جغرافية، مطابقة ذروة المنافسين، مضاعفات رمضان/الأعياد، وخصم مسافات طويلة.</p></div>
|
||||
</div>
|
||||
<div class="alert good"><span class="tag">وثيقة موجودة فعلاً</span>
|
||||
<p>يوجد تدقيق أمني داخلي بأسلوب اختبار اختراق يصنّف النتائج من حرج لمنخفض — نقاط قوة موثقة (لا SQL Injection، AES-256) مقابل بنود مفتوحة (Rate limiting معطّل بأماكن، ملفات اختبار في الإنتاج، تشفير CBC بـ IV ثابت). راجع <code>docs/08_security</code>.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 06 MAPS -->
|
||||
<section id="maps">
|
||||
<div class="sec-head">
|
||||
<span class="eyebrow">06</span>
|
||||
<h2>الخرائط والموقع الجغرافي</h2>
|
||||
<p class="thesis">القرار الأهم: لا اعتماد على Google Maps للتتبع الحي أو المطابقة — خادما WebSocket خاصان وفهرسة Redis جغرافية، بتحكم كامل وتوفير ضخم.</p>
|
||||
</div>
|
||||
<div class="rows">
|
||||
<div class="row-item"><h4>تتبع حي مُفلتر ومُجمّع</h4><p>موقع السائق كل 1–3 ثوانٍ، يُرسل فقط عند تحرك حقيقي (10م)، يُجمَّع ويُكتب لـ Redis كل نصف ثانية دفعة واحدة ثم يُدفع للراكب.</p></div>
|
||||
<div class="row-item"><h4>أقرب سائق عبر GEORADIUS</h4><p>بحث نصف قطر على آلاف السائقين لحظياً، مرتب بالتقييم — لا توجد خدمة جاهزة تقدم هذا.</p></div>
|
||||
<div class="row-item"><h4>استعلام مخصص لكل فئة</h4><p>Balash يختار أقدم السيارات فعلياً، وElectric يفلتر وقود «كهربائي» — منطق عمل مستحيل بخدمة عامة.</p></div>
|
||||
<div class="row-item"><h4>خرائط حرارية + تتبع أسطول حي</h4><p>«رؤية إلهية» لفريق العمليات دون شراء أداة BI.</p></div>
|
||||
<div class="row-item"><h4>تجزئة جغرافية (Geo-Sharding)</h4><p>كل نطاق إحداثيات يمكن ربطه بخادم مختلف — توسع مدينة-بمدينة دون إعادة هندسة.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 07 TRANSIT -->
|
||||
<section id="transit">
|
||||
<div class="sec-head">
|
||||
<span class="eyebrow">07</span>
|
||||
<h2>مواصلاتي — النقل الجماعي للجامعات والمؤسسات</h2>
|
||||
<p class="thesis">خط الأعمال الثاني: رقمنة أساطيل الجامعات والمدارس والشركات مجاناً (SaaS)، مقابل استحواذ سيرو على المستخدمين وتحويلهم لركاب مدفوعين — بعزل تقني كامل عن نظام المشاوير (قاعدة <code>siro_transit</code> مستقلة + سوكيتات خاصة).</p>
|
||||
</div>
|
||||
|
||||
<div class="actors">
|
||||
<div class="actor"><span class="ic">🏛️</span><b>فريق سيرو</b><span>ينشئ المؤسسة، يضيف مشرفيها، ويعتمد الخطوط المرسومة قبل ظهورها للطلاب</span></div>
|
||||
<div class="actor"><span class="ic">🧑💼</span><b>مشرف المؤسسة</b><span>لوحة ويب: باصات، سائقون، رسم الخطوط والمحطات، الجداول، ورفع كشف الطلاب CSV</span></div>
|
||||
<div class="actor"><span class="ic">🚌</span><b>سائق الباص</b><span>تطبيق السائق بوضع Bus Mode مبسّط: زر ابدأ/أنهِ فقط، والمحطات تمرّ آلياً بالـ Geofencing</span></div>
|
||||
<div class="actor"><span class="ic">🎓</span><b>الطالب</b><span>تفعيل فوري بالرقم الجامعي، تتبع حي للباص، وإشعارات اقتراب ذكية</span></div>
|
||||
</div>
|
||||
|
||||
<div class="subhead">كيف تسير رحلة الباص</div>
|
||||
<div class="flow">
|
||||
<div class="step"><h4>الإعداد <span class="t">مرة واحدة</span></h4><p>المشرف يرسم المسار على خريطة تفاعلية ويحدد المحطات بمحيط جغرافي (150م افتراضياً)، والخط يبقى «مسودة» حتى يعتمده فريق سيرو، ثم تُحدد أوقات الانطلاق وأيام العمل.</p></div>
|
||||
<div class="step"><h4>بدء الرحلة <span class="t">زر واحد</span></h4><p>السائق يضغط «ابدأ الرحلة» ويبدأ بث موقعه عبر السوكيت كل عدة ثوانٍ — مع إشعار انطلاق للمشتركين.</p></div>
|
||||
<div class="step"><h4>المرور بالمحطات <span class="t">آلي بالكامل</span></h4><p>دخول الباص محيط أي محطة يحدّث شريط التقدم تلقائياً دون تدخل السائق، ويُرسل «الباص يبعد محطة واحدة عنك» للطلاب التاليين. زر «تأخير» متاح عند الزحام.</p></div>
|
||||
<div class="step"><h4>التتبع الحي للطالب <span class="t">Socket</span></h4><p>الطالب يرى الباص يتحرك على المسار لحظياً — ولا يُسمح له بالانضمام لغرفة البث إلا بعضوية نشطة في المؤسسة المالكة للخط.</p></div>
|
||||
<div class="step"><h4>نقطة التحويل الربحية <span class="t">جوهر النموذج</span></h4><p>إذا فات الطالبَ الباصُ يظهر زر بارز: «فاتك الباص؟ اطلب سيارة الآن» — يحوّله لرحلة مدفوعة عادية من سيرو. هذا هو العائد الأساسي لخط الأعمال كله.</p></div>
|
||||
</div>
|
||||
|
||||
<div class="duo" style="margin-top:14px;">
|
||||
<div class="panel"><h4>ضوابط أمنية مبنية</h4><ul>
|
||||
<li>حماية IDOR: لا يستطيع سائق إنهاء رحلة سائق آخر.</li>
|
||||
<li>تشفير أرقام الهواتف والأرقام الجامعية في القاعدة.</li>
|
||||
<li>Rate Limiting على OTP وتسجيل الدخول.</li>
|
||||
<li>تفعيل الطالب فوري بمطابقة الكشف — دون OTP إضافي لتوفير التكلفة.</li>
|
||||
</ul></div>
|
||||
<div class="panel"><h4>نمطان تشغيليان</h4><ul>
|
||||
<li><b>أسطول المؤسسة:</b> الجامعة تملك باصاتها وسائقيها.</li>
|
||||
<li><b>الناقل المتعاقد:</b> شركة نقل طرف ثالث تشغّل خطوط مؤسسة بلا أسطول، بنفس برمجيات التتبع.</li>
|
||||
<li>سائق الباص منفصل تماماً عن كابتن المشاوير ولا يتلقى طلبات عادية.</li>
|
||||
</ul></div>
|
||||
</div>
|
||||
|
||||
<div class="alert warn"><span class="tag">فجوات معروفة قيد المعالجة</span>
|
||||
<p>المراجعة الفنية الكاملة في <code>docs/05_transit_mawasalati</code> توثّق بنوداً مفتوحة: نواقص في ربط السائق، واعتماد الخطوط، وحالات IDOR إضافية — يجب إغلاقها قبل أول إطلاق جامعي واسع.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 08 BOTS -->
|
||||
<section id="bots">
|
||||
<div class="sec-head">
|
||||
<span class="eyebrow">08</span>
|
||||
<h2>البوتات والذكاء الاصطناعي التسويقي</h2>
|
||||
<p class="thesis">منظومة مغلقة: بوت يسحب أسعار المنافسين من تطبيقاتهم ← محرك يفكّك معادلاتهم ← إعادة تسعير آلية ← بوتات سوشيال تصنع «نقاشات» لصالح سيرو. ميزة تنافسية حقيقية، بمخاطر قانونية وسمعية واضحة.</p>
|
||||
</div>
|
||||
<div class="rows">
|
||||
<div class="row-item"><h4>بوت أندرويد يقرأ تطبيقات المنافسين</h4><p>Accessibility Service يفتح كريم/أوبر/يلا-جو/TaxiF/زاكن فعلياً، يدخل نقطتين، ويقرأ السعر من الشاشة.</p></div>
|
||||
<div class="row-item"><h4>فك معادلة تسعير المنافس</h4><p>انحدار إحصائي يشتق (أساس + لكل كم + لكل دقيقة) ويكشف حتى الحد الأدنى الخفي للأجرة.</p></div>
|
||||
<div class="row-item"><h4>إعادة تسعير آلية −6.5%</h4><p>كرون جوب يُبقي سيرو أرخص تلقائياً، مع «وضع الظل»: العروض المؤقتة للمنافس تُقابل بكود خصم بدل حرق السعر الأساسي (سقف تغيير 3% وتهدئة 3 أيام).</p></div>
|
||||
<div class="row-item"><h4>بوتات سوشيال بلهجات محلية</h4><p>حسابات مُدارة بتدوير IP، تعليقات Gemini بلهجة كل بلد، و«دراما حوار» مفتعلة (تشكيك ثم رد داعم) بتأخير عشوائي.</p></div>
|
||||
</div>
|
||||
<div class="alert crit"><span class="tag">⚠️ خطر قانوني وسمعي</span>
|
||||
<p>سحب الأسعار آلياً يخالف غالباً شروط استخدام تطبيقات المنافسين، والحسابات المنسّقة الوهمية تُصنَّف «تلاعباً منسّقاً غير أصيل» يخالف سياسات المنصات صراحة — خطر حظر جماعي وضرر سمعي إذا انكشف. قرار يجب اتخاذه بوعي كامل بالمخاطرة، لا بالعائد فقط.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 09 FINANCE -->
|
||||
<section id="finance">
|
||||
<div class="sec-head">
|
||||
<span class="eyebrow">09</span>
|
||||
<h2>نبيه، المحفظة، والاستثمار</h2>
|
||||
<p class="thesis">تصحيح مهم: «نبيه» ليست منصة استثمار — لا فوائد ولا حصص في الكود. هي مزوّد أتمتة خارجي عبر واتساب. الاستثمار الحقيقي في وثائق المستثمرين، مع نقطة تحتاج انتباهاً فورياً.</p>
|
||||
</div>
|
||||
<div class="rows">
|
||||
<div class="row-item"><h4>نبيه فعلياً</h4><p>أتمتة واتساب بالذكاء الاصطناعي: تسجيل سائقين بالمحادثة، استفسارات أرباح، فحص شكاوى بـ Gemini، وتحقق بصري من إيصالات الدفع.</p></div>
|
||||
<div class="row-item"><h4>محفظة سيرو</h4><p>خدمة منفصلة (268 ملف): MTN، Syriatel Cash، ShamCash، Cliq، PayMob، eCash — مع تحويل فعلي بين محافظ السائقين برسوم للشركة.</p></div>
|
||||
<div class="row-item"><h4>طلب تمويل موثّق</h4><p>200,000$ مقابل 22% (تقييم ضمني ~909K$) بأربع طبقات إيراد: عمولة، Prime، إعلانات جغرافية، وترخيص خرائط سيرو كبديل أرخص من Google Maps.</p></div>
|
||||
<div class="row-item"><h4>عقد سوريا المنفصل</h4><p>اتفاقية حصة أرباح 180,000$ لسوريا فقط — سرديتان تمويليتان تحتاجان توحيداً قبل أي عرض رسمي.</p></div>
|
||||
</div>
|
||||
<div class="alert crit"><span class="tag">⚠️ تسريب بيانات — إجراء فوري</span>
|
||||
<p><code>siromove.com/contract.html</code> على النطاق العام يحتوي نص العقد الاستثماري كاملاً مع <b>أرقام هوية/جواز حقيقية</b> لمؤسسَين ومستثمر — متاح لأي زائر. يجب إزالته من الوصول العام أو حمايته بمصادقة فوراً.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 10 LEGACY -->
|
||||
<section id="legacy">
|
||||
<div class="sec-head">
|
||||
<span class="eyebrow">10</span>
|
||||
<h2>الإرث الرقمي: القيمة الفكرية والمادية</h2>
|
||||
<p class="thesis">لو حلّ نموذج ذكاء اصطناعي محل الفريق، هل كان يبني هذا من الصفر؟ جزء كبير من الكود: نعم. الجزء الأكثر قيمة: لا — وهذا ما يحدد قيمة المشروع.</p>
|
||||
</div>
|
||||
<div class="duo">
|
||||
<div class="panel can"><h4>✅ ما يُنتجه الذكاء الاصطناعي بسرعة</h4><ul>
|
||||
<li>شاشات Flutter القياسية والتكاملات الجاهزة (PayMob، Gemini، Firebase).</li>
|
||||
<li>منطق CRUD الإداري والأمان القياسي (JWT، تشفير، Rate Limiting).</li>
|
||||
<li>نمط Socket + Redis Geo كتصميم هندسي معروف بالصناعة.</li>
|
||||
</ul></div>
|
||||
<div class="panel cannot"><h4>❌ ما لا يُخترع بمجرد Prompt</h4><ul>
|
||||
<li><b>معادلات تسعير المنافسين الفعلية</b> — أشهر من بيانات سوق حقيقية.</li>
|
||||
<li><b>القيم المضبوطة تشغيلياً</b> (12 ساعة، 3 إلغاءات، 90 ثانية) — نتاج حوادث وتجربة موثقة.</li>
|
||||
<li><b>العلاقات المحلية</b>: ترخيص سوريا (قانون 16/2021)، اتفاقيات MTN وSyriatel وCliq، وتوزيع APK خارج المتجر بسبب العقوبات.</li>
|
||||
<li><b>القاعدة الفعلية</b>: 1,447 سائقاً و2,891 راكباً في 45 يوماً بميزانية محدودة — أصل شبكي لا يُشترى.</li>
|
||||
</ul></div>
|
||||
</div>
|
||||
<div class="alert good" style="margin-top:14px;"><span class="tag">الخلاصة</span>
|
||||
<p>هذا المشروع مثال حي على الفرق بين «الكود» و«الشركة»: الذكاء الاصطناعي يسرّع كتابة الكود فعلاً، لكنه لا يعوّض الوقت الفعلي والمخاطرة الفعلية والعلاقات الفعلية — وهذه، لا الكود، هي القيمة غير القابلة للنسخ. القيمة المادية الموثقة داخلياً: تقييم ضمني ~909 ألف دولار.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 11 RISKS -->
|
||||
<section id="risks">
|
||||
<div class="sec-head">
|
||||
<span class="eyebrow">11</span>
|
||||
<h2>المخاطر والفجوات المجمّعة</h2>
|
||||
<p class="thesis">كل ما يحتاج قراراً أو إجراءً، من الأشد إلحاحاً للأقل.</p>
|
||||
</div>
|
||||
<div class="alert crit"><span class="tag">حرج — الآن</span><p>أرقام هوية حقيقية منشورة بلا حماية على <code>siromove.com/contract.html</code> — القسم 09.</p></div>
|
||||
<div class="alert warn"><span class="tag">قانوني وسمعي</span><p>بوتات سحب الأسعار والتلاعب المنسّق بالسوشيال — القسم 08.</p></div>
|
||||
<div class="alert warn"><span class="tag">حوكمة تمويل</span><p>سرديتان تمويليتان متضاربتان (180K$ سوريا مقابل 200K$/22% عامة) تحتاجان توحيداً.</p></div>
|
||||
<div class="alert warn"><span class="tag">تشغيلي</span><p>لا أداة عرض/حل شكوى فعلية، لا Refund، لا SLA — القسم 04. وفجوات مواصلاتي المفتوحة — القسم 07.</p></div>
|
||||
<div class="alert warn"><span class="tag">أمني</span><p>بنود التدقيق الأمني غير المغلقة: Rate limiting معطّل بأماكن، ملفات اختبار في الإنتاج، تشفير CBC بـ IV ثابت.</p></div>
|
||||
</section>
|
||||
|
||||
<!-- 12 TUTORIAL -->
|
||||
<section id="tutorial">
|
||||
<div class="sec-head">
|
||||
<span class="eyebrow">12</span>
|
||||
<h2>خطة التوتوريال داخل الموقع — «كيف تستخدم سيرو»</h2>
|
||||
<p class="thesis">صفحة <code>siromove.com/tutorial</code> بسبع وحدات تشرح كل عملية خطوة بخطوة بلقطات شاشة حقيقية داخل إطار هاتف. المطلوب تصويره: <b class="num">34 لقطة</b> في جلسة واحدة (~ساعتين) على بيئة تجريبية. الخطة التفصيلية بأسماء الشاشات في الكود: <code>docs/02_journeys_and_tutorials/TUTORIAL_PLAN_AR.md</code>.</p>
|
||||
</div>
|
||||
<div class="mods">
|
||||
<div class="mod"><span class="shots">5 لقطات</span><h4>1 · التسجيل</h4>
|
||||
<ol><li>شاشة البداية بالشعار</li><li>شرائح التعريف</li><li>رقم الهاتف واختيار الدولة</li><li>رمز التحقق OTP</li><li>إكمال الاسم والبدء</li></ol>
|
||||
<p class="note">الرسالة: رقم هاتف فقط — أقل من دقيقة حتى الخريطة.</p></div>
|
||||
<div class="mod"><span class="shots">6 لقطات</span><h4>2 · طلب الرحلة</h4>
|
||||
<ol><li>الخريطة والسيارات القريبة</li><li>البحث عن الوجهة</li><li>دبوس الانطلاق</li><li>الفئات التسع مع شارة التوفير</li><li>كود الخصم</li><li>تأكيد الطلب بالسعر النهائي</li></ol>
|
||||
<p class="note">الرسالة: السعر نهائي ومحسوب من الخادم — لا مفاجآت.</p></div>
|
||||
<div class="mod"><span class="shots">4 لقطات</span><h4>3 · الانتظار والمطابقة</h4>
|
||||
<ol><li>نافذة البحث مع المؤقّت</li><li>اقتراح المفاوض الذكي (بعد 90 ثانية)</li><li>بطاقة الكابتن</li><li>الكابتن في الطريق مع المسار</li></ol></div>
|
||||
<div class="mod"><span class="shots">5 لقطات</span><h4>4 · أثناء الرحلة والسلامة</h4>
|
||||
<ol><li>إشعار «الكابتن وصل» ومهلة 5 دقائق</li><li>المسار الأزرق والعداد</li><li>مشاركة الرحلة مع الأهل</li><li>زر SOS وهزّ الهاتف</li><li>المكالمة داخل التطبيق</li></ol></div>
|
||||
<div class="mod"><span class="shots">3 لقطات</span><h4>5 · الإلغاء</h4>
|
||||
<ol><li>مكان زر الإلغاء</li><li>اختيار السبب</li><li>التأكيد وسياسة الرسوم</li></ol>
|
||||
<p class="note">قبل قبول الكابتن: مجاني دائماً. بعد وصوله: قد تُطبَّق رسوم.</p></div>
|
||||
<div class="mod"><span class="shots">6 لقطات</span><h4>6 · الدفع والتقييم</h4>
|
||||
<ol><li>الفاتورة النهائية</li><li>قائمة طرق الدفع</li><li>تأكيد الكاش</li><li>المحفظة والشحن بمكافأة</li><li>التقييم والإكرامية</li><li>سجل الرحلات</li></ol></div>
|
||||
<div class="mod"><span class="shots">5 لقطات</span><h4>7 · مواصلاتي للطلاب</h4>
|
||||
<ol><li>اختيار الجامعة</li><li>تفعيل الرقم الجامعي</li><li>الخطوط والجداول</li><li>التتبع الحي للباص</li><li>زر «فاتك الباص؟ اطلب سيارة»</li></ol></div>
|
||||
<div class="mod"><span class="shots">التنفيذ</span><h4>خطوات الإطلاق</h4>
|
||||
<ol><li>بناء الصفحة بتبويبات RTL بنفس هوية هذا التقرير</li><li>صور Placeholder بأسماء الملفات النهائية حتى تجهز اللقطات</li><li>جلسة تصوير واحدة للـ 34 لقطة بترتيب الوحدات</li><li>لاحقاً: فيديوهات 30–60 ثانية + Coach Marks داخل التطبيق</li></ol></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer class="end">
|
||||
<span>أُعدّ بفحص مباشر لكود المشروع — لا تخمين ولا محتوى عام.</span>
|
||||
<span class="num">آخر تحديث 2026-07-14 · Siro Digital Legacy Report</span>
|
||||
</footer>
|
||||
|
||||
</main>
|
||||
</div>
|
||||
File diff suppressed because it is too large
Load Diff
+101
@@ -0,0 +1,101 @@
|
||||
# 📚 مركز توثيق منصة Siro — الفهرس الموحّد
|
||||
|
||||
هذا المجلد هو المصدر الوحيد لكل توثيق المشروع. تم دمج المجلدات الثلاثة السابقة
|
||||
(`docs` + `documents` + `knowledge`) هنا، مقسّمة حسب الموضوع.
|
||||
|
||||
> **أين أبدأ؟** التقرير التفاعلي الشامل: [09_reports/siro_digital_legacy_report.html](09_reports/siro_digital_legacy_report.html)
|
||||
|
||||
---
|
||||
|
||||
## 01_overview — نظرة عامة ومعمارية النظام
|
||||
فهم البنية الكاملة: 4 تطبيقات Flutter + باك اند PHP + خوادم Socket + Redis.
|
||||
|
||||
| الملف | المحتوى |
|
||||
|---|---|
|
||||
| [PROJECT_OVERVIEW.md](01_overview/PROJECT_OVERVIEW.md) | تعريف المشروع ومكوناته الرئيسية |
|
||||
| [SYSTEM_ARCHITECTURE.md](01_overview/SYSTEM_ARCHITECTURE.md) | المعمارية التقنية الكاملة |
|
||||
| [siro_comprehensive_report.md](01_overview/siro_comprehensive_report.md) | التقرير الشامل الأحدث (فحص 8 مسارات للكود) |
|
||||
| [tel.comprehensive_report.md](01_overview/tel.comprehensive_report.md) | نسخة التقرير الشامل المعدّة للإرسال |
|
||||
| [Siro_Platform_Report.md](01_overview/Siro_Platform_Report.md) | تقرير المنصة العام |
|
||||
| [PLATFORM_CURRENT_STATE_AR.md](01_overview/PLATFORM_CURRENT_STATE_AR.md) | الحالة الراهنة للمنصة |
|
||||
| [API_DEPENDENCY_MATRIX.md](01_overview/API_DEPENDENCY_MATRIX.md) | مصفوفة اعتماديات الـ API |
|
||||
| [DATABASE_DEPENDENCY_MATRIX.md](01_overview/DATABASE_DEPENDENCY_MATRIX.md) | مصفوفة جداول قاعدة البيانات |
|
||||
| [server_architecture_feedback.md](01_overview/server_architecture_feedback.md) | مراجعة معمارية الخوادم المتعددة |
|
||||
| [AI_CONTEXT.md](01_overview/AI_CONTEXT.md) | سياق موجز لأدوات الذكاء الاصطناعي |
|
||||
|
||||
## 02_journeys_and_tutorials — رحلات المستخدم والتوتوريال
|
||||
سير الرحلة خطوة بخطوة (راكب وسائق) + خطة التوتوريال داخل الموقع.
|
||||
|
||||
| الملف | المحتوى |
|
||||
|---|---|
|
||||
| [TUTORIAL_PLAN_AR.md](02_journeys_and_tutorials/TUTORIAL_PLAN_AR.md) | ⭐ خطة التوتوريال الكاملة مع قائمة لقطات الشاشة المطلوبة |
|
||||
| [PASSENGER_JOURNEY.md](02_journeys_and_tutorials/PASSENGER_JOURNEY.md) | دورة حياة الراكب كاملة (شاشات + APIs + حالات) |
|
||||
| [DRIVER_JOURNEY.md](02_journeys_and_tutorials/DRIVER_JOURNEY.md) | دورة حياة السائق كاملة |
|
||||
| [ride_simulation_report.md](02_journeys_and_tutorials/ride_simulation_report.md) | تقرير محاكاة رحلة الراكب |
|
||||
| [driver_ride_simulation_report.md](02_journeys_and_tutorials/driver_ride_simulation_report.md) | تقرير محاكاة رحلة السائق |
|
||||
| [syria_driver_registration_report.md](02_journeys_and_tutorials/syria_driver_registration_report.md) | تسجيل سائق سوريا |
|
||||
| ملفات `*_simulation.html` | محاكاة تفاعلية بالمتصفح (راكب/سائق/تسجيل/إدارة/نظام كامل) |
|
||||
|
||||
## 03_pricing — محرك التسعير
|
||||
| الملف | المحتوى |
|
||||
|---|---|
|
||||
| [PRICING_ENGINE_ARCHITECTURE.md](03_pricing/PRICING_ENGINE_ARCHITECTURE.md) | معمارية محرك التسعير كاملة |
|
||||
| [pricing_system_report.md](03_pricing/pricing_system_report.md) | تقرير نظام التسعير |
|
||||
| [دراسة_نظام_أتمتة_السوق_الذكي.md](03_pricing/دراسة_نظام_أتمتة_السوق_الذكي.md) | أتمتة مراقبة المنافسين وإعادة التسعير |
|
||||
| [redis_state_plan.md](03_pricing/redis_state_plan.md) | خطة حالة الرحلة في Redis |
|
||||
|
||||
## 04_features — الميزات الفنية والتنافسية
|
||||
| الملف | المحتوى |
|
||||
|---|---|
|
||||
| [COMPETITIVE_FEATURES.md](04_features/COMPETITIVE_FEATURES.md) | الميزات التنافسية مقابل كريم/أوبر/يلا-جو |
|
||||
| [TECHNICAL_ADVANTAGES_AR.md](04_features/TECHNICAL_ADVANTAGES_AR.md) | المزايا التقنية المبنية داخلياً |
|
||||
| [NEW_FEATURES_PROPOSAL_AR.md](04_features/NEW_FEATURES_PROPOSAL_AR.md) | مقترحات ميزات جديدة |
|
||||
| [AUDIO_MUSIC_FEATURES_AR.md](04_features/AUDIO_MUSIC_FEATURES_AR.md) | ميزات الصوت والموسيقى |
|
||||
| [BATTERY_PERFORMANCE_AR.md](04_features/BATTERY_PERFORMANCE_AR.md) | أداء البطارية والتحسينات |
|
||||
| [auto_carplay_checklist_arabic.md](04_features/auto_carplay_checklist_arabic.md) | Android Auto / CarPlay (عربي + [إنجليزي](04_features/auto_carplay_checklist.md)) |
|
||||
| [ai_document_extraction_prompt.md](04_features/ai_document_extraction_prompt.md) | برومبت استخراج الوثائق بالذكاء الاصطناعي |
|
||||
|
||||
## 05_transit_mawasalati — نظام «مواصلاتي» (باصات الجامعات)
|
||||
| الملف | المحتوى |
|
||||
|---|---|
|
||||
| [transit_comprehensive_workflow_report.md](05_transit_mawasalati/transit_comprehensive_workflow_report.md) | ⭐ سير العمليات الكامل (الأحدث — 2026-07-14) |
|
||||
| [mawasalati_full_system_review.md](05_transit_mawasalati/mawasalati_full_system_review.md) | المراجعة الفنية الكاملة والفجوات المعروفة |
|
||||
| [mowasalaty_strategy_report.md](05_transit_mawasalati/mowasalaty_strategy_report.md) | التقرير الاستراتيجي (نموذج SaaS المجاني) |
|
||||
| [mawasalati_plan.md](05_transit_mawasalati/mawasalati_plan.md) | خطة التنفيذ الأصلية |
|
||||
|
||||
## 06_investors — وثائق المستثمرين ودراسات الجدوى
|
||||
| الملف | المحتوى |
|
||||
|---|---|
|
||||
| [SIRO_INVESTOR_REPORT_AR.md](06_investors/SIRO_INVESTOR_REPORT_AR.md) | تقرير المستثمر الرئيسي |
|
||||
| [تقرير_المستثمر_الشامل_Siro.md](06_investors/تقرير_المستثمر_الشامل_Siro.md) | التقرير الشامل للمستثمر |
|
||||
| [Siro_Investors_Report_AR.md](06_investors/Siro_Investors_Report_AR.md) | تقرير مستثمرين (نسخة سابقة) |
|
||||
| [SIRO_INVESTOR_DECK.html](06_investors/SIRO_INVESTOR_DECK.html) | عرض المستثمرين التفاعلي |
|
||||
| [Siro_Feasibility_Study_v4.pdf](06_investors/Siro_Feasibility_Study_v4.pdf) | دراسة الجدوى v4 |
|
||||
| [Siro_Egypt_Competitive_Study_AR.md](06_investors/Siro_Egypt_Competitive_Study_AR.md) | دراسة سوق مصر التنافسية |
|
||||
| تقرير_سيرو_الكامل.docx | نسخة Word للمشاركة |
|
||||
|
||||
> ⚠️ تنبيه حوكمة: يوجد سرديتان تمويليتان مختلفتان (180K$ سوريا مقابل 200K$/22% عامة) — يجب توحيدهما قبل أي عرض رسمي.
|
||||
|
||||
## 07_marketing — التسويق والنمو
|
||||
| الملف | المحتوى |
|
||||
|---|---|
|
||||
| [SIRO_MARKETING_REPORT_AR.md](07_marketing/SIRO_MARKETING_REPORT_AR.md) | تقرير التسويق الرئيسي |
|
||||
| [marketing_and_growth_strategy.md](07_marketing/marketing_and_growth_strategy.md) | استراتيجية التسويق والنمو |
|
||||
| [marketing_integration_plan_ar.md](07_marketing/marketing_integration_plan_ar.md) | خطة التكامل التسويقي |
|
||||
| [damascus_zones_map.html](07_marketing/damascus_zones_map.html) | خريطة مناطق دمشق |
|
||||
|
||||
## 08_security — الأمن ومراجعات الكود
|
||||
| الملف | المحتوى |
|
||||
|---|---|
|
||||
| [التقرير_الأمني_Backend_Siro.md](08_security/التقرير_الأمني_Backend_Siro.md) | التدقيق الأمني للباك اند (بنود مفتوحة!) |
|
||||
| [CODE_REVIEW_REPORT_AR.md](08_security/CODE_REVIEW_REPORT_AR.md) | مراجعة الكود الشاملة |
|
||||
|
||||
## 09_reports — التقارير التفاعلية النهائية
|
||||
| الملف | المحتوى |
|
||||
|---|---|
|
||||
| [siro_digital_legacy_report.html](09_reports/siro_digital_legacy_report.html) | ⭐ تقرير الإرث الرقمي الشامل (يشمل مواصلاتي وسير الرحلة والتوتوريال) |
|
||||
|
||||
## 99_archive — أرشيف
|
||||
| الملف | المحتوى |
|
||||
|---|---|
|
||||
| intaleq_v1_secure_latest.md | نسخة كود V1 المؤرشفة (1.2MB — مرجع تاريخي فقط) |
|
||||
@@ -1,657 +0,0 @@
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css2?family=Almarai:wght@300;400;700;800&family=IBM+Plex+Sans+Arabic:wght@300;400;500;700&display=swap');
|
||||
|
||||
:root{
|
||||
--paper:#F5F4EF;
|
||||
--paper-raised:#FFFFFF;
|
||||
--ink:#181A20;
|
||||
--ink-soft:#54585F;
|
||||
--ink-faint:#82858C;
|
||||
--line:#DFDCD2;
|
||||
--accent:#1E6F5C;
|
||||
--accent-ink:#0F4437;
|
||||
--accent-soft:#E3EEEA;
|
||||
--warm:#AD6A2A;
|
||||
--warm-soft:#F3E7D8;
|
||||
--good:#2E7D4F;
|
||||
--good-soft:#E4F1E8;
|
||||
--warn:#A8791F;
|
||||
--warn-soft:#F6EBD3;
|
||||
--critical:#B23B32;
|
||||
--critical-soft:#F7E4E1;
|
||||
--shadow: 0 1px 2px rgba(20,20,20,.04), 0 8px 24px rgba(20,20,20,.05);
|
||||
--font-display:"IBM Plex Sans Arabic","Segoe UI",system-ui,sans-serif;
|
||||
--font-body:"Almarai","Segoe UI",system-ui,sans-serif;
|
||||
--font-mono:ui-monospace,"SF Mono",Consolas,"Courier New",monospace;
|
||||
}
|
||||
@media (prefers-color-scheme: dark){
|
||||
:root{
|
||||
--paper:#12151A;
|
||||
--paper-raised:#1A1E25;
|
||||
--ink:#EDEEEE;
|
||||
--ink-soft:#A6ABB4;
|
||||
--ink-faint:#787E88;
|
||||
--line:#2A2F39;
|
||||
--accent:#4FBF9F;
|
||||
--accent-ink:#BFEFDE;
|
||||
--accent-soft:#173029;
|
||||
--warm:#DE9F55;
|
||||
--warm-soft:#31261A;
|
||||
--good:#4CAF77;
|
||||
--good-soft:#152B1F;
|
||||
--warn:#D9A94A;
|
||||
--warn-soft:#332A16;
|
||||
--critical:#E2695F;
|
||||
--critical-soft:#341E1C;
|
||||
--shadow: 0 1px 2px rgba(0,0,0,.3), 0 8px 24px rgba(0,0,0,.35);
|
||||
}
|
||||
}
|
||||
:root[data-theme="dark"]{
|
||||
--paper:#12151A; --paper-raised:#1A1E25; --ink:#EDEEEE; --ink-soft:#A6ABB4; --ink-faint:#787E88;
|
||||
--line:#2A2F39; --accent:#4FBF9F; --accent-ink:#BFEFDE; --accent-soft:#173029;
|
||||
--warm:#DE9F55; --warm-soft:#31261A; --good:#4CAF77; --good-soft:#152B1F;
|
||||
--warn:#D9A94A; --warn-soft:#332A16; --critical:#E2695F; --critical-soft:#341E1C;
|
||||
--shadow: 0 1px 2px rgba(0,0,0,.3), 0 8px 24px rgba(0,0,0,.35);
|
||||
}
|
||||
:root[data-theme="light"]{
|
||||
--paper:#F5F4EF; --paper-raised:#FFFFFF; --ink:#181A20; --ink-soft:#54585F; --ink-faint:#82858C;
|
||||
--line:#DFDCD2; --accent:#1E6F5C; --accent-ink:#0F4437; --accent-soft:#E3EEEA;
|
||||
--warm:#AD6A2A; --warm-soft:#F3E7D8; --good:#2E7D4F; --good-soft:#E4F1E8;
|
||||
--warn:#A8791F; --warn-soft:#F6EBD3; --critical:#B23B32; --critical-soft:#F7E4E1;
|
||||
--shadow: 0 1px 2px rgba(20,20,20,.04), 0 8px 24px rgba(20,20,20,.05);
|
||||
}
|
||||
|
||||
.page{
|
||||
background:var(--paper);
|
||||
color:var(--ink);
|
||||
font-family:var(--font-body);
|
||||
line-height:1.75;
|
||||
font-size:16px;
|
||||
min-height:100%;
|
||||
}
|
||||
.page *{ box-sizing:border-box; }
|
||||
.page h1,.page h2,.page h3,.page h4{
|
||||
font-family:var(--font-display);
|
||||
text-wrap:balance;
|
||||
color:var(--ink);
|
||||
font-weight:700;
|
||||
margin:0;
|
||||
}
|
||||
.page p{ margin:0; color:var(--ink-soft); }
|
||||
.page code, .ltr{
|
||||
direction:ltr; unicode-bidi:isolate; font-family:var(--font-mono);
|
||||
background:var(--paper); border:1px solid var(--line); border-radius:5px;
|
||||
padding:.05em .45em; font-size:.85em; color:var(--accent-ink); display:inline-block;
|
||||
line-height:1.5;
|
||||
}
|
||||
|
||||
/* ---------- Hero ---------- */
|
||||
.hero{
|
||||
padding:56px 6vw 40px;
|
||||
border-bottom:1px solid var(--line);
|
||||
background:
|
||||
radial-gradient(1200px 400px at 85% -10%, var(--accent-soft), transparent 60%),
|
||||
var(--paper);
|
||||
}
|
||||
.eyebrow{
|
||||
display:inline-flex; align-items:center; gap:8px;
|
||||
font-family:var(--font-display); font-weight:700; font-size:.8rem;
|
||||
letter-spacing:.06em; color:var(--accent-ink);
|
||||
background:var(--accent-soft); border:1px solid color-mix(in srgb, var(--accent) 35%, transparent);
|
||||
padding:6px 14px; border-radius:999px; margin-bottom:22px;
|
||||
}
|
||||
.hero h1{ font-size:clamp(1.9rem, 3.6vw, 3rem); line-height:1.25; max-width:20ch; }
|
||||
.hero .lede{ margin-top:16px; max-width:62ch; font-size:1.08rem; color:var(--ink-soft); }
|
||||
.hero .meta{ margin-top:10px; font-size:.85rem; color:var(--ink-faint); }
|
||||
.stats{
|
||||
margin-top:34px; display:grid; grid-template-columns:repeat(6,1fr); gap:1px;
|
||||
background:var(--line); border:1px solid var(--line); border-radius:14px; overflow:hidden;
|
||||
}
|
||||
.stat{ background:var(--paper-raised); padding:16px 14px; text-align:center; }
|
||||
.stat b{ display:block; font-family:var(--font-display); font-size:1.5rem; font-variant-numeric:tabular-nums; color:var(--accent-ink); }
|
||||
.stat span{ display:block; margin-top:4px; font-size:.74rem; color:var(--ink-faint); }
|
||||
|
||||
/* ---------- Layout ---------- */
|
||||
.layout{ display:grid; grid-template-columns:260px 1fr; gap:44px; padding:40px 6vw 90px; max-width:1400px; margin:0 auto; align-items:start; }
|
||||
nav.toc{ position:sticky; top:24px; align-self:start; }
|
||||
nav.toc .toc-title{ font-family:var(--font-display); font-weight:700; font-size:.78rem; letter-spacing:.05em; color:var(--ink-faint); margin-bottom:12px; padding-inline-start:14px; }
|
||||
nav.toc ol{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:2px; border-inline-start:2px solid var(--line); }
|
||||
nav.toc a{
|
||||
display:flex; gap:10px; align-items:baseline; text-decoration:none; color:var(--ink-soft);
|
||||
padding:8px 14px; font-size:.88rem; border-inline-start:2px solid transparent; margin-inline-start:-2px;
|
||||
transition:color .15s, border-color .15s, background .15s; border-radius:0 8px 8px 0;
|
||||
}
|
||||
nav.toc a:hover{ color:var(--ink); background:var(--paper-raised); }
|
||||
nav.toc a b{ font-family:var(--font-display); font-variant-numeric:tabular-nums; color:var(--accent); font-size:.8rem; }
|
||||
.toc-mobile{ display:none; }
|
||||
|
||||
main{ min-width:0; display:flex; flex-direction:column; gap:88px; }
|
||||
section{ scroll-margin-top:20px; display:flex; flex-direction:column; gap:22px; }
|
||||
.chapter-head{ display:flex; gap:16px; align-items:flex-start; padding-bottom:18px; border-bottom:1px solid var(--line); }
|
||||
.chapter-num{ font-family:var(--font-display); font-size:1rem; color:var(--accent); font-weight:700; font-variant-numeric:tabular-nums; padding-top:6px; }
|
||||
.chapter-head h2{ font-size:clamp(1.4rem,2.2vw,1.9rem); }
|
||||
.thesis{ font-size:1rem; margin-top:8px; max-width:70ch; }
|
||||
|
||||
h3.sub{ font-family:var(--font-display); font-size:1.05rem; font-weight:700; color:var(--ink); margin-top:6px; }
|
||||
h4.group{ font-family:var(--font-display); font-size:.82rem; font-weight:700; letter-spacing:.03em; color:var(--warm); text-transform:none; margin:2px 0 -6px; }
|
||||
|
||||
.grid{ display:grid; grid-template-columns:repeat(auto-fill, minmax(270px,1fr)); gap:14px; }
|
||||
.card{
|
||||
background:var(--paper-raised); border:1px solid var(--line); border-radius:14px; padding:16px 18px;
|
||||
box-shadow:var(--shadow); display:flex; flex-direction:column; gap:8px;
|
||||
}
|
||||
.card h4{ font-family:var(--font-display); font-size:.98rem; font-weight:700; color:var(--ink); }
|
||||
.card p{ font-size:.9rem; }
|
||||
.card .why{ font-size:.86rem; color:var(--ink-soft); border-inline-start:3px solid var(--accent); padding-inline-start:10px; }
|
||||
.card .why b{ color:var(--accent-ink); font-weight:700; }
|
||||
.card .file{ margin-top:auto; }
|
||||
|
||||
.table-wrap{ overflow-x:auto; border:1px solid var(--line); border-radius:14px; background:var(--paper-raised); box-shadow:var(--shadow); }
|
||||
table{ border-collapse:collapse; width:100%; min-width:560px; font-size:.9rem; }
|
||||
th,td{ text-align:right; padding:11px 16px; border-bottom:1px solid var(--line); vertical-align:top; }
|
||||
th{ font-family:var(--font-display); font-size:.78rem; letter-spacing:.03em; color:var(--ink-faint); background:var(--paper); white-space:nowrap; }
|
||||
tr:last-child td{ border-bottom:none; }
|
||||
td b{ color:var(--ink); }
|
||||
|
||||
.alert{ border-radius:14px; padding:16px 20px; display:flex; flex-direction:column; gap:6px; border:1px solid; }
|
||||
.alert .tag{ font-family:var(--font-display); font-size:.74rem; font-weight:700; letter-spacing:.05em; }
|
||||
.alert p{ font-size:.92rem; }
|
||||
.alert-critical{ background:var(--critical-soft); border-color:color-mix(in srgb, var(--critical) 40%, transparent); }
|
||||
.alert-critical .tag{ color:var(--critical); }
|
||||
.alert-warn{ background:var(--warn-soft); border-color:color-mix(in srgb, var(--warn) 40%, transparent); }
|
||||
.alert-warn .tag{ color:var(--warn); }
|
||||
.alert-good{ background:var(--good-soft); border-color:color-mix(in srgb, var(--good) 40%, transparent); }
|
||||
.alert-good .tag{ color:var(--good); }
|
||||
.alert-note{ background:var(--accent-soft); border-color:color-mix(in srgb, var(--accent) 40%, transparent); }
|
||||
.alert-note .tag{ color:var(--accent-ink); }
|
||||
|
||||
.pillrow{ display:flex; flex-wrap:wrap; gap:8px; }
|
||||
.pill{ font-size:.78rem; background:var(--paper); border:1px solid var(--line); border-radius:999px; padding:5px 12px; color:var(--ink-soft); }
|
||||
|
||||
.twocol{ display:grid; grid-template-columns:1.1fr .9fr; gap:20px; align-items:start; }
|
||||
@media (max-width:860px){ .twocol{ grid-template-columns:1fr; } }
|
||||
|
||||
.verdict{
|
||||
background:linear-gradient(160deg, var(--accent-soft), var(--paper-raised) 60%);
|
||||
border:1px solid color-mix(in srgb, var(--accent) 30%, transparent);
|
||||
border-radius:18px; padding:26px 28px; display:flex; flex-direction:column; gap:14px;
|
||||
}
|
||||
.verdict h3{ font-size:1.15rem; }
|
||||
.split{ display:grid; grid-template-columns:1fr 1fr; gap:16px; }
|
||||
@media (max-width:720px){ .split{ grid-template-columns:1fr; } }
|
||||
.split .side{ background:var(--paper-raised); border:1px solid var(--line); border-radius:12px; padding:16px 18px; }
|
||||
.split .side h4{ font-size:.85rem; letter-spacing:.02em; }
|
||||
.split .side.can h4{ color:var(--good); }
|
||||
.split .side.cannot h4{ color:var(--critical); }
|
||||
.split ul{ margin:8px 0 0; padding-inline-start:20px; font-size:.88rem; color:var(--ink-soft); display:flex; flex-direction:column; gap:6px; }
|
||||
|
||||
footer.endnote{ border-top:1px solid var(--line); padding-top:22px; font-size:.82rem; color:var(--ink-faint); display:flex; justify-content:space-between; flex-wrap:wrap; gap:10px; }
|
||||
|
||||
@media (max-width:980px){
|
||||
.layout{ grid-template-columns:1fr; }
|
||||
nav.toc.desktop{ display:none; }
|
||||
.toc-mobile{ display:block; margin-bottom:6px; }
|
||||
.toc-mobile summary{
|
||||
cursor:pointer; font-family:var(--font-display); font-weight:700; font-size:.9rem;
|
||||
background:var(--paper-raised); border:1px solid var(--line); border-radius:12px; padding:12px 16px;
|
||||
color:var(--ink);
|
||||
}
|
||||
.toc-mobile[open] summary{ border-radius:12px 12px 0 0; }
|
||||
.toc-mobile ol{ list-style:none; margin:0; padding:8px; border:1px solid var(--line); border-top:none; border-radius:0 0 12px 12px; background:var(--paper-raised); display:flex; flex-direction:column; gap:2px; }
|
||||
.toc-mobile a{ display:flex; gap:8px; text-decoration:none; color:var(--ink-soft); padding:8px 10px; border-radius:8px; font-size:.86rem; }
|
||||
.toc-mobile a b{ color:var(--accent); font-variant-numeric:tabular-nums; }
|
||||
.stats{ grid-template-columns:repeat(3,1fr); }
|
||||
}
|
||||
@media (max-width:520px){
|
||||
.stats{ grid-template-columns:repeat(2,1fr); }
|
||||
.hero{ padding:40px 5vw 30px; }
|
||||
.layout{ padding:28px 5vw 60px; gap:28px; }
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="page" dir="rtl" lang="ar">
|
||||
|
||||
<header class="hero">
|
||||
<span class="eyebrow">🧭 تقرير تقني وإداري شامل</span>
|
||||
<h1>الإرث الرقمي لمنصة Siro — كل ما بُني، ولماذا بُني</h1>
|
||||
<p class="lede">
|
||||
جرد كامل لكل تطبيقات وخدمات منصة Siro لخدمات النقل التشاركي: تطبيق الراكب، تطبيق السائق، تطبيق الإدارة،
|
||||
تطبيق خدمة العملاء، البنية الخلفية، نظام الخرائط والموقع، البوتات، ومنصات المحفظة والاستثمار — مع تقييم صريح
|
||||
لقيمتها الفكرية والمادية، وهل يقدر نموذج ذكاء اصطناعي أن يبنيها من الصفر.
|
||||
</p>
|
||||
<p class="meta">أُعدّ بفحص مباشر للكود المصدري عبر ٨ مسارات بحث متوازية بتاريخ 2026-07-09 — لا تخمين، كل رقم ومسار ملف مذكور تمّ التحقق منه في الكود الفعلي.</p>
|
||||
|
||||
<div class="stats">
|
||||
<div class="stat"><b>4</b><span>تطبيقات موبايل رئيسية</span></div>
|
||||
<div class="stat"><b>~1500+</b><span>ملف كود عبر النظام كامل</span></div>
|
||||
<div class="stat"><b>3</b><span>دول تشغيل فعلية</span></div>
|
||||
<div class="stat"><b>9</b><span>فئات مركبات وخدمات</span></div>
|
||||
<div class="stat"><b>13+</b><span>لغة مدعومة</span></div>
|
||||
<div class="stat"><b>10+</b><span>طريقة دفع محلية</span></div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="layout">
|
||||
|
||||
<details class="toc-mobile">
|
||||
<summary>فهرس التقرير</summary>
|
||||
<ol>
|
||||
<li><a href="#overview"><b>00</b> نظرة عامة على البنية</a></li>
|
||||
<li><a href="#rider"><b>01</b> تطبيق الراكب</a></li>
|
||||
<li><a href="#driver"><b>02</b> تطبيق السائق</a></li>
|
||||
<li><a href="#admin"><b>03</b> تطبيق الإدارة</a></li>
|
||||
<li><a href="#service"><b>04</b> تطبيق خدمة العملاء</a></li>
|
||||
<li><a href="#backend"><b>05</b> البنية الخلفية ومحرك التسعير</a></li>
|
||||
<li><a href="#maps"><b>06</b> نظام الموقع والخرائط</a></li>
|
||||
<li><a href="#bots"><b>07</b> البوتات والذكاء الاصطناعي التسويقي</a></li>
|
||||
<li><a href="#nabeh"><b>08</b> نبيه، المحفظة، والاستثمار</a></li>
|
||||
<li><a href="#legacy"><b>09</b> الإرث الرقمي: القيمة الفكرية والمادية</a></li>
|
||||
<li><a href="#risks"><b>10</b> المخاطر والفجوات المجمّعة</a></li>
|
||||
</ol>
|
||||
</details>
|
||||
|
||||
<nav class="toc desktop" aria-label="فهرس التقرير">
|
||||
<div class="toc-title">فهرس التقرير</div>
|
||||
<ol>
|
||||
<li><a href="#overview"><b>00</b> نظرة عامة</a></li>
|
||||
<li><a href="#rider"><b>01</b> تطبيق الراكب</a></li>
|
||||
<li><a href="#driver"><b>02</b> تطبيق السائق</a></li>
|
||||
<li><a href="#admin"><b>03</b> تطبيق الإدارة</a></li>
|
||||
<li><a href="#service"><b>04</b> خدمة العملاء</a></li>
|
||||
<li><a href="#backend"><b>05</b> البنية الخلفية</a></li>
|
||||
<li><a href="#maps"><b>06</b> الخرائط والموقع</a></li>
|
||||
<li><a href="#bots"><b>07</b> البوتات والـ AI</a></li>
|
||||
<li><a href="#nabeh"><b>08</b> نبيه والاستثمار</a></li>
|
||||
<li><a href="#legacy"><b>09</b> الإرث الرقمي</a></li>
|
||||
<li><a href="#risks"><b>10</b> المخاطر والفجوات</a></li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<main>
|
||||
|
||||
<!-- 00 OVERVIEW -->
|
||||
<section id="overview">
|
||||
<div class="chapter-head">
|
||||
<span class="chapter-num">00</span>
|
||||
<div>
|
||||
<h2>نظرة عامة: منصة واحدة، ثمانية أنظمة متكاملة</h2>
|
||||
<p class="thesis">Siro مو مجرد "تطبيق طلب سيارة" — هي منظومة كاملة من 4 تطبيقات فليتر، وباك اند PHP/Node ضخم، وخوادم Socket خاصة للموقع الجغرافي الحي، ومحرك تسعير بالذكاء الاصطناعي، وبوتات أتمتة، ومنصات مالية — كلها مبنية داخليًا (in-house) بدل الاعتماد على خدمات جاهزة، وتعمل بالتوازي في الأردن ومصر وسوريا.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid">
|
||||
<div class="card">
|
||||
<h4>🚕 4 تطبيقات Flutter</h4>
|
||||
<p>الراكب (226 ملف)، السائق (275 ملف — الأكبر)، الإدارة (131 ملف)، خدمة العملاء (66 ملف). كل تطبيق له فريق منطق منفصل لكن يشترك بنفس الباك اند.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h4>🗄️ باك اند PHP ضخم ومقسّم</h4>
|
||||
<p>وحدات منفصلة للمصادقة، الرحلات، التسعير، خدمة العملاء، التأمين، توثيق مصر — كل وحدة تمر إجباريًا عبر طبقة أمان مركزية واحدة (JWT + تشفير + تحديد معدل الطلبات).</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h4>📍 خوادم Socket خاصة للموقع</h4>
|
||||
<p>خادم سائق وخادم راكب منفصلان (WebSocket)، يغذّيان بعضهما بشكل حي، مبنيان بدل الاعتماد الكامل على Google Maps للتتبع اللحظي — توفير تكلفة ضخم عند التوسع.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h4>🤖 محرك تسعير وتسويق بالذكاء الاصطناعي</h4>
|
||||
<p>بوت أندرويد يقرأ أسعار المنافسين مباشرة من تطبيقاتهم، ومحرك Node.js يفكّك معادلات تسعيرهم، وكرون جوبز PHP تُعدّل أسعار Siro تلقائيًا لتبقى أرخص بـ 6.5%.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h4>💳 محفظة ودفع متعدد الدول</h4>
|
||||
<p>خدمة محفظة منفصلة (268 ملف) تربط MTN وSyriatel Cash وShamCash وCliq وPayMob وeCash — كل دولة وطرق دفعها الخاصة.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h4>🌍 تشغيل حقيقي متعدد الدول</h4>
|
||||
<p>الأردن ومصر وسوريا فعليًا، مع خطط توسع موثقة للعراق وليبيا ودول الخليج — كل الأسعار والدفع والتسجيل مُخصص لكل دولة على حدة.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 01 RIDER -->
|
||||
<section id="rider">
|
||||
<div class="chapter-head">
|
||||
<span class="chapter-num">01</span>
|
||||
<div>
|
||||
<h2>تطبيق الراكب</h2>
|
||||
<p class="thesis">الواجهة التي يتعامل معها ملايين المستخدمين المحتملين — مبنية بعمق أكبر بكثير من "اطلب سيارة وادفع"، وفيها ميزات ثقة وسلامة نادرة حتى عند منافسين أكبر.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h4 class="group">حجز الرحلة وأنواعها</h4>
|
||||
<div class="grid">
|
||||
<div class="card"><h4>9 فئات ركوب</h4><p>الاقتصادية (Balash/Awfar)، Comfort، Electric، Lady (نسائية فقط)، Van (عائلي)، VIP/Mishwar (اختيار سائق محدد بالاسم لموعد لاحق)، توصيل، ورايح-جاي (بين مدن، لمسافات أطول من 23 كم).</p><p class="why"><b>ليش مهم:</b> كل فئة تفتح شريحة سوق مختلفة — من الطالب صاحب الميزانية المحدودة إلى العائلة، وحتى الراكبات اللي بيفضلن سائقة.</p></div>
|
||||
<div class="card"><h4>تسعير من طرف السيرفر فقط</h4><p>السعر يُحسب بالكامل على الخادم، مو على الجهاز، لمنع التلاعب بالسعر من طرف المستخدم.</p><p class="why"><b>ليش مهم:</b> يمنع الاحتيال المباشر على السعر ويحمي هامش الربح.</p></div>
|
||||
<div class="card"><h4>"المفاوض الذكي" (AI Negotiator)</h4><p>إذا ما وافق أي سائق خلال 90 ثانية، يقترح النظام تلقائيًا رفع السعر ~5% لإعادة المحاولة، ويعرضه للراكب كـ"اقتراح ذكاء اصطناعي".</p><p class="why"><b>ليش مهم:</b> يقلل نسبة إلغاء الطلبات الفاشلة بدل ما يخسر الراكب رحلته بالكامل.</p></div>
|
||||
<div class="card"><h4>شارة مقارنة أسعار مع المنافسين</h4><p>تظهر للراكب "أنت توفّر X% مقارنة بكريم/أوبر/يلاّ-جو/زاكن..." بالاسم صراحة.</p><p class="why"><b>ليش مهم:</b> استهداف مباشر لحساسية السعر عند المستخدم، وبناء ثقة عبر الشفافية.</p></div>
|
||||
</div>
|
||||
|
||||
<h4 class="group">الدفع والمحفظة</h4>
|
||||
<div class="grid">
|
||||
<div class="card"><h4>طرق دفع متعددة حسب الدولة</h4><p>كاش، محفظة، PayMob، MTN موني، Syriatel Cash، Cliq (الأردن)، eCash (سوريا/مصر)، وتحويل بنكي بإثبات صورة يُراجعه موظف عند غياب بوابة آلية.</p><p class="why"><b>ليش مهم:</b> السوق العربي مجزأ ماليًا — دعم كل قناة دفع محلية يرفع نسبة إتمام الدفع فعليًا.</p></div>
|
||||
<div class="card"><h4>Siro Prime (اشتراك شهري)</h4><p>حوالي 4 دولار شهريًا: بدون تسعير ذروة (Surge)، أولوية مطابقة سائق، وشارة "Prime" تجعل السائقين أكثر قبولًا للطلب.</p><p class="why"><b>ليش مهم:</b> إيراد شهري ثابت ومتكرر (MRR) — نفس فكرة Uber One.</p></div>
|
||||
<div class="card"><h4>مكافآت شحن المحفظة</h4><p>مثلاً "ادفع 20 دينار، خذ 21" — تختلف النسبة حسب الدولة.</p><p class="why"><b>ليش مهم:</b> يشجع تعبئة رصيد مسبق، يقلل الاعتماد على الكاش، ويزيد الاحتفاظ بالمستخدم.</p></div>
|
||||
<div class="card"><h4>تنبيه الرصيد السالب</h4><p>بانر أحمر دائم + قراءة صوتية (TTS) إذا كان على الراكب دين من رحلة كاش سابقة.</p><p class="why"><b>ليش مهم:</b> تحصيل ديون استباقي بدل خسارتها بالكامل.</p></div>
|
||||
</div>
|
||||
|
||||
<h4 class="group">السلامة والثقة</h4>
|
||||
<div class="grid">
|
||||
<div class="card"><h4>زر الطوارئ (SOS) + الهزّ للتفعيل</h4><p>يرسل واتساب لجهة طوارئ محفوظة مسبقًا مع الموقع الحي، اسم السائق، رقم اللوحة. يمكن تفعيله أيضًا بهزّ الهاتف 5 مرات (مفيد لو ما قدر المستخدم يلمس الشاشة بأمان).</p><p class="why"><b>ليش مهم:</b> سلامة فعلية في لحظة خطر حقيقية، مش مجرد ميزة تسويقية.</p></div>
|
||||
<div class="card"><h4>مراقبة رحلة حية لطرف ثالث</h4><p>شاشة رابط منفصلة تسمح لولي أمر مثلاً بمتابعة موقع/سرعة الراكب لحظيًا دون تثبيت التطبيق.</p><p class="why"><b>ليش مهم:</b> يستهدف شريحة الطالبات الجامعيات وثقة الأهل — تمايز حقيقي عن المنافسين.</p></div>
|
||||
<div class="card"><h4>تسجيل صوتي للرحلة</h4><p>الراكب يقدر يسجل صوت الرحلة كدليل، يُحفظ ويُشارك عند الحاجة.</p><p class="why"><b>ليش مهم:</b> دليل عند أي نزاع أو شكوى لاحقة.</p></div>
|
||||
<div class="card"><h4>مكالمة صوتية داخل التطبيق (WebRTC ذاتي)</h4><p>مكالمة بين الراكب والسائق دون كشف رقم الهاتف الحقيقي، ببنية WebRTC مبنية داخليًا بدل الاعتماد على Agora المدفوعة.</p><p class="why"><b>ليش مهم:</b> خصوصية + توفير تكلفة تشغيل السنتر الصوتي بالكامل.</p></div>
|
||||
<div class="card"><h4>تنبيه تجاوز السرعة</h4><p>عند تجاوز 100 كم/س يظهر تنبيه فوري + اهتزاز + خيار مشاركة تفاصيل الرحلة مباشرة.</p><p class="why"><b>ليش مهم:</b> تقليل المسؤولية القانونية وتوثيق أي حادث محتمل.</p></div>
|
||||
<div class="card"><h4>حماية تقنية: بصمة جهاز + كشف الروت + تثبيت SSL</h4><p>ربط الحساب ببصمة الجهاز، إغلاق التطبيق تلقائيًا على أجهزة مخترقة (Root/Jailbreak)، ومفاتيح SSL مثبّتة ضد اعتراض حركة البيانات.</p><p class="why"><b>ليش مهم:</b> حماية من سرقة الحسابات والتلاعب بحركة API.</p></div>
|
||||
</div>
|
||||
|
||||
<h4 class="group">ميزات اجتماعية وولاء</h4>
|
||||
<div class="grid">
|
||||
<div class="card"><h4>نظام إحالة ثنائي (راكب + سائق)</h4><p>دعوة أصدقاء كركاب أو كسائقين عبر واتساب أو جهات اتصال الهاتف مباشرة، مع مكافأة مالية تُفتح بعد إتمام رحلتين.</p><p class="why"><b>ليش مهم:</b> نمو منخفض التكلفة (Low CAC) ويكبّر جانبي العرض والطلب معًا.</p></div>
|
||||
<div class="card"><h4>قراءة صوتية (TTS) للواجهة</h4><p>قراءة أوصاف الرحلات والتنبيهات صوتيًا، مع اختيار لغة تلقائي.</p><p class="why"><b>ليش مهم:</b> يوسّع قاعدة المستخدمين لتشمل ضعاف البصر أو غير القارئين — سوق مهمَل من المنافسين.</p></div>
|
||||
<div class="card"><h4>13+ لغة، بثلاث لهجات عربية منفصلة</h4><p>عربي مصر/الأردن/سوريا كل لهجة بملف ترجمة مستقل، إضافة لإنجليزي وتركي وفرنسي وفارسي وغيرها، مع دعم RTL كامل بثيم عربي منفصل.</p><p class="why"><b>ليش مهم:</b> جاهزية حقيقية للتوسع الإقليمي، مش ترجمة سطحية.</p></div>
|
||||
</div>
|
||||
|
||||
<h4 class="group">ميزات فريدة تستحق الذكر</h4>
|
||||
<div class="grid">
|
||||
<div class="card"><h4>Mishwar VIP</h4><p>الراكب يختار سائقًا محددًا بالاسم والصورة والتقييم، ويحجز له موعدًا مستقبليًا.</p><p class="why"><b>ليش مهم:</b> منتج مختلف تمامًا عن الطلب الفوري المعتاد، هامش ربح أعلى.</p></div>
|
||||
<div class="card"><h4>مناطق جامعية محددة (مصر)</h4><p>حدود جغرافية دقيقة مرسومة يدويًا لجامعات مثل AUC وGUC وجامعة القاهرة، تُستخدم في منطق السعر أو التسعير الآمن.</p><p class="why"><b>ليش مهم:</b> استهداف دقيق لأكبر شريحة ركاب شبابية في مصر.</p></div>
|
||||
<div class="card"><h4>خرائط دون اتصال</h4><p>تحميل مسبق لبلاطات الخريطة ضمن نصف قطر معيّن، للمناطق ضعيفة الاتصال.</p><p class="why"><b>ليش مهم:</b> استمرارية الخدمة في ظروف شبكة غير مستقرة، شائعة بالمنطقة.</p></div>
|
||||
<div class="card"><h4>كشف نوعية الجهاز (Device Tier)</h4><p>تصنيف الهاتف تلقائيًا (ضعيف/متوسط/قوي) لتخفيف الرسوم المتحركة والخريطة على الأجهزة الرخيصة.</p><p class="why"><b>ليش مهم:</b> غالبية المستخدمين بالمنطقة على أجهزة اقتصادية — هذا يقلل الأعطال وتقييمات المتجر السلبية.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 02 DRIVER -->
|
||||
<section id="driver">
|
||||
<div class="chapter-head">
|
||||
<span class="chapter-num">02</span>
|
||||
<div>
|
||||
<h2>تطبيق السائق</h2>
|
||||
<p class="thesis">أكبر تطبيق بالمنظومة (275 ملف) — لأنه فعليًا محرك تشغيل الأسطول: أمان مضاد للاحتيال، نظام تدرّج ومكافآت حقيقي بخصومات عمولة فعلية، وميزة "أرباحك أعلى من التطبيقات الثانية" التي كانت مطلوبة سابقًا واتضح أنها مبنية وتعمل فعليًا الآن.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-good">
|
||||
<span class="tag">✅ نقطة تصحيح مهمة</span>
|
||||
<p>كان في طلب سابق لإضافة ميزة تعرض للسائق "كم بتربح أكثر بهذه الرحلة مقارنة بتطبيقات ثانية" لتشجيعه على القبول. الفحص الفعلي للكود أكّد إنها <b>موجودة ومفعّلة حاليًا</b>: <code>driver_earnings_badge.dart</code> يعرض شارة خضراء "أرباحك أعلى بـ X" على شاشة قبول الطلب، مبنية على حقل <code>driver_earnings_extra</code> يرسله الخادم مع كل عرض رحلة.</p>
|
||||
</div>
|
||||
|
||||
<h4 class="group">دورة حياة الرحلة</h4>
|
||||
<div class="grid">
|
||||
<div class="card"><h4>حد أقصى للقيادة المتواصلة (12 ساعة)</h4><p>تتبع محلي لمجموع ساعات القيادة، ويجبر السائق على وضع "غير متاح" لمدة 6 ساعات راحة بعد 12 ساعة متواصلة.</p><p class="why"><b>ليش مهم:</b> حماية من الإرهاق وحوادث الطريق، وتقليل المسؤولية القانونية على الشركة.</p></div>
|
||||
<div class="card"><h4>حظر بعد 3 إلغاءات</h4><p>عدّاد تنازلي يقفل السائق عن استقبال طلبات جديدة بعد 3 إلغاءات متتالية.</p><p class="why"><b>ليش مهم:</b> يحمي موثوقية السوق من سائقين يلغون بشكل متكرر.</p></div>
|
||||
<div class="card"><h4>تحقق من صحة المسافة قبل إنهاء الرحلة</h4><p>يقارن الإزاحة الفعلية عبر GPS بالمسافة المتوقعة؛ يمنع إنهاء الرحلة إذا لم يتحرك السائق فعليًا بالقدر الكافي.</p><p class="why"><b>ليش مهم:</b> يمنع تزوير إتمام الرحلة دون قيادة فعلية — حماية مباشرة من احتيال العمولة.</p></div>
|
||||
<div class="card"><h4>ملاحة داخل السيارة (Android Auto / CarPlay)</h4><p>جسر مخصص يرسل بيانات الملاحة (الموقع، الاتجاه، التعليمات) لشاشة السيارة مباشرة.</p><p class="why"><b>ليش مهم:</b> تجربة قيادة أكثر أمانًا واحترافية، مكافئة لتجربة أوبر/كريم.</p></div>
|
||||
</div>
|
||||
|
||||
<h4 class="group">الأرباح والمدفوعات</h4>
|
||||
<div class="grid">
|
||||
<div class="card"><h4>نظام تدرّج حقيقي بخصم عمولة فعلي</h4><p>4 مستويات: برونزي، فضي (خصم 1% عمولة)، ذهبي (خصم 2%)، ماسي (خصم 5% + أولوية دعم ومطابقة).</p><p class="why"><b>ليش مهم:</b> ولاء حقيقي بمكافأة مالية ملموسة، مش نقاط رمزية فقط.</p></div>
|
||||
<div class="card"><h4>سلسلة رحلات متتالية بدون إلغاء</h4><p>5 رحلات متتالية مكتملة تفتح عمولة 0% لبقية اليوم — أي إلغاء يصفّر السلسلة.</p><p class="why"><b>ليش مهم:</b> يحفّز الالتزام والانضباط في نفس الوقت الذي يزيد فيه رضا السائق.</p></div>
|
||||
<div class="card"><h4>خارطة طلب تنبؤية (Predictive Demand)</h4><p>طبقة خريطة تُظهر أين سيرتفع الطلب خلال الساعة القادمة، مبنية من بيانات الرحلات التاريخية الفعلية.</p><p class="why"><b>ليش مهم:</b> يوجّه السائقين تلقائيًا للمناطق المربحة، يقلل وقت الانتظار الفارغ.</p></div>
|
||||
<div class="card"><h4>سحب أرباح متعدد القنوات</h4><p>Paymob، MTN، Cliq، eCash، حساب بنكي (مصر)، وسحب عبر رسائل SMS في سوريا.</p><p class="why"><b>ليش مهم:</b> يغطي كل قناة سحب متاحة فعليًا بكل دولة.</p></div>
|
||||
</div>
|
||||
|
||||
<h4 class="group">التوثيق والأمان ومكافحة الاحتيال</h4>
|
||||
<div class="grid">
|
||||
<div class="card"><h4>استخراج بيانات الوثائق بالذكاء الاصطناعي (OCR)</h4><p>Gemini يقرأ الهوية ورخصة القيادة وترخيص السيارة تلقائيًا ويستخرج البيانات المطلوبة.</p><p class="why"><b>ليش مهم:</b> يسرّع التسجيل ويقلل كلفة الإدخال اليدوي.</p></div>
|
||||
<div class="card"><h4>مطابقة الوجه (Face Match)</h4><p>مقارنة صورة السيلفي الحية بصورة الهوية عبر API خارجي قبل قبول التسجيل.</p><p class="why"><b>ليش مهم:</b> يمنع انتحال هوية شخص آخر عند التسجيل.</p></div>
|
||||
<div class="card"><h4>كشف "الرحلة الذاتية" (Self-Ride Fraud)</h4><p>مقارنة بصمة جهاز الراكب ببصمة جهاز السائق نفسه؛ يرفض الطلب تلقائيًا إذا تطابقتا.</p><p class="why"><b>ليش مهم:</b> يمنع السائق من طلب رحلة وهمية لنفسه لتحصيل مكافآت.</p></div>
|
||||
<div class="card"><h4>تقييم سلوك القيادة (Behavior Score)</h4><p>يحسب من بيانات GPS المحلية: أقصى سرعة، متوسط سرعة، عدد الفرملات المفاجئة — يُرفع للخادم بعد كل رحلة.</p><p class="why"><b>ليش مهم:</b> مؤشر سلامة فعلي يمكن استخدامه لاحقًا في تصنيف السائقين أو التأمين.</p></div>
|
||||
<div class="card"><h4>مُحلّل توافق الجهاز (قيد التعديل الحالي)</h4><p>يفحص إصدار أندرويد والرام والمعالج وسرعة الكتابة الفعلية على القرص، ويكوّن نتيجة توافق من 100 — الآن يُخزَّن مؤقتًا 30 دقيقة بدل إعادة الفحص الثقيل كل مرة، وقياس المعالج صار على 3 عيّنات (median) داخل Isolate منفصل لعدم تجميد الواجهة.</p><p class="why"><b>ليش مهم:</b> إشارة ناعمة لكشف المحاكيات (Emulators) تفتقر لحساسات GPS/gyroscope حقيقية — أساس محتمل لنظام "درجة خطورة جهاز" مستقبلي، غير مرتبط بعد بمنطق الاحتيال الفعلي.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 03 ADMIN -->
|
||||
<section id="admin">
|
||||
<div class="chapter-head">
|
||||
<span class="chapter-num">03</span>
|
||||
<div>
|
||||
<h2>تطبيق الإدارة (Back-Office)</h2>
|
||||
<p class="thesis">أداة تشغيل داخلية حقيقية، فيها طبقتان: لوحة قديمة (CRUD مباشر) ولوحة "V2" أحدث بتحليلات ومراقبة أعمق — دلالة على تطوير نشط ومستمر، وليس منتجًا مجمّدًا.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid">
|
||||
<div class="card"><h4>مركز عمليات حي (V2)</h4><p>رحلات نشطة، سائقون متصلون، إيراد اليوم مقابل الأمس، شكاوى جديدة — يحدّث نفسه كل دقيقتين.</p><p class="why"><b>ليش مهم:</b> نبض حي للسوق تتخذ فرق العمليات قراراتها بناءً عليه لحظيًا.</p></div>
|
||||
<div class="card"><h4>محرر تسعير "كازان" (Kazan)</h4><p>تحكم كامل بنسبة عمولة كل دولة، سعر الكيلومتر لكل فئة مركبة (9 فئات)، وتسعير الدقيقة حسب الوقت (عادي/ذروة/متأخر).</p><p class="why"><b>ليش مهم:</b> أهم رافعة إيراد بالمنصة بالكامل — تحكم مباشر بهامش الربح لحظيًا.</p></div>
|
||||
<div class="card"><h4>مساعد تسجيل السائقين بالذكاء الاصطناعي</h4><p>يستخدم Gemini وClaude Haiku معًا لقراءة الهوية المصرية ورخصة القيادة والسجل الجنائي تلقائيًا، ويكتشف تلقائيًا تواريخ الانتهاء وعدم تطابق الأسماء.</p><p class="why"><b>ليش مهم:</b> يسرّع تسجيل السائقين هاتفيًا/ميدانيًا ويكشف تزوير أو انتهاء صلاحية الوثائق آليًا.</p></div>
|
||||
<div class="card"><h4>بطاقة جودة السائق + قائمة الحظر الموحّدة</h4><p>معدل الإتمام، الإلغاءات، التقييم، الشكاوى، وسلوك القيادة في مكان واحد؛ قائمة حظر مشتركة للسائقين والركاب مع سبب الحظر وسجل تدقيق.</p><p class="why"><b>ليش مهم:</b> أداة مركزية لاتخاذ قرار إيقاف حساب بناءً على بيانات فعلية لا انطباع.</p></div>
|
||||
<div class="card"><h4>مركز التسويق بالذكاء الاصطناعي</h4><p>مقارنة أسعار المنافسين، خريطة حرارية لفجوة التسعير، محاكي "ماذا-لو" لتأثير تغيير السعر على الحصة السوقية، وإطلاق حملة استرجاع عملاء بضغطة واحدة.</p><p class="why"><b>ليش مهم:</b> قرار تسعير وتسويق مبني على بيانات حقيقية بدل التخمين، مع تتبع تكلفة استخدام الذكاء الاصطناعي بالدولار.</p></div>
|
||||
<div class="card"><h4>سجل تدقيق كامل لإجراءات الموظفين</h4><p>كل إجراء حساس (مثل رفع حظر عن مستخدم) يُسجَّل باسم الموظف والوقت والتفاصيل.</p><p class="why"><b>ليش مهم:</b> مساءلة ومسؤولية — ضروري لأي مراجعة قانونية أو مالية لاحقة.</p></div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-note">
|
||||
<span class="tag">ملاحظة</span>
|
||||
<p>تطبيق الإدارة لا يحتوي على أي شاشة لإدارة "نبيه" كمنصة استثمار أو وحدة التأمين الصحي للسائقين (driver_assurance) — هاتان الوحدتان إما تُداران من أداة أخرى غير مكتشفة، أو غير مُفعّلتين فعليًا بعد. راجع القسم 08 لتوضيح دقيق لطبيعة "نبيه" الحقيقية.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 04 SERVICE -->
|
||||
<section id="service">
|
||||
<div class="chapter-head">
|
||||
<span class="chapter-num">04</span>
|
||||
<div>
|
||||
<h2>تطبيق خدمة العملاء</h2>
|
||||
<p class="thesis">هذا هو التطبيق الأصغر (66 ملف) والأكثر أهمية للكشف الصريح: قاعدة البيانات الخلفية مصمَّمة لسير عمل تحقيق كامل بالشكاوى، لكن واجهة الموظف الفعلية لم تُبنَ بنفس المستوى — فجوة تشغيلية حقيقية يستحق التقرير أن يذكرها بوضوح كما طلب.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid">
|
||||
<div class="card"><h4>لوحة تشغيل الموظف اليومية</h4><p>عدّادات حية: طلبات تسجيل جديدة، سائقون بانتظار الموافقة، حالات تسجيل عالقة — تعمل كطابور عمل غير رسمي.</p><p class="why"><b>ليش مهم:</b> يمنح موظف الدعم صورة سريعة عن أولوياته اليومية.</p></div>
|
||||
<div class="card"><h4>أداة البحث عن رحلة</h4><p>بحث برقم الهاتف أو رقم الرحلة لعرض الحالة، السائق، السعر — مفيدة أثناء مكالمة دعم مباشرة.</p><p class="why"><b>ليش مهم:</b> تحديد موقع الرحلة المتنازع عليها دون الحاجة لصلاحية وصول لقاعدة البيانات.</p></div>
|
||||
<div class="card"><h4>إجراءات حساب السائق</h4><p>رفض، تفعيل، تعديل بيانات، تسجيل سيارة جديدة — كلها متاحة للموظف مباشرة من التطبيق.</p><p class="why"><b>ليش مهم:</b> تسريع دورة تفعيل السائقين الجدد ميدانيًا.</p></div>
|
||||
<div class="card"><h4>تواصل جاهز عبر واتساب/مكالمة</h4><p>قوالب رسائل عربية جاهزة (تفعيل، وثائق ناقصة، ترحيب) تُفتح مباشرة بضغطة زر.</p><p class="why"><b>ليش مهم:</b> تواصل سريع بدون نظام CRM مكلف.</p></div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-warn">
|
||||
<span class="tag">فجوة تشغيلية</span>
|
||||
<p>شاشة "عرض الشكوى" داخل تطبيق خدمة العملاء فعليًا فارغة (stub) رغم أن قاعدة البيانات الخلفية جاهزة لسير عمل تحقيق كامل بطرفين (تقرير الراكب، تقرير السائق، الحل، تحديد المسؤولية). النتيجة: لا توجد أداة داخل هذا التطبيق لعرض أو حل شكوى فردية فعليًا اليوم.</p>
|
||||
</div>
|
||||
<div class="alert alert-warn">
|
||||
<span class="tag">فجوة تشغيلية</span>
|
||||
<p>لا توجد أي أداة استرجاع مبلغ أو تعويض (Refund) في كامل التطبيق أو الباك اند المرتبط به. أي تعويض لراكب أو سائق بعد حل شكوى يجب أن يتم يدويًا خارج هذا النظام — ما يُبطئ الحل ويزيد مخاطر عدم التوثيق.</p>
|
||||
</div>
|
||||
<div class="alert alert-warn">
|
||||
<span class="tag">فجوة تشغيلية</span>
|
||||
<p>لا يوجد تتبّع لمهلة زمنية (SLA) ولا تصعيد (Escalation) لأي شكوى — الحالات الحرجة والعادية تُعامل بنفس الطريقة دون أي مؤشر أولوية.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 05 BACKEND -->
|
||||
<section id="backend">
|
||||
<div class="chapter-head">
|
||||
<span class="chapter-num">05</span>
|
||||
<div>
|
||||
<h2>البنية الخلفية ومحرك التسعير</h2>
|
||||
<p class="thesis">هذا هو قلب المنصة فعليًا. كل طلب API يمر إجباريًا عبر طبقة أمان مركزية واحدة قبل أي منطق عمل — تصميم ناضج نسبيًا لشركة بهذا الحجم، مع محرك تسعير يتخذ قرارات تجارية حقيقية بشكل آلي بالكامل.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h4 class="group">طبقة الأمان المركزية</h4>
|
||||
<div class="grid">
|
||||
<div class="card"><h4>JWT مع ربط بصمة الجهاز</h4><p>كل رمز دخول مربوط بتجزئة بصمة جهاز محددة؛ استخدام نفس الرمز من جهاز آخر يُرفض تلقائيًا.</p><p class="why"><b>ليش مهم:</b> يمنع سرقة رمز الدخول واستخدامه على جهاز آخر.</p></div>
|
||||
<div class="card"><h4>تحديد معدل الطلبات (Rate Limiting) مخصص لكل نوع طلب</h4><p>حدود مختلفة لتسجيل الدخول، OTP، التسجيل، الشكاوى (محدودة أكثر لأن كل شكوى تُفعّل استدعاء Gemini + واتساب).</p><p class="why"><b>ليش مهم:</b> حماية من هجمات القوة الغاشمة وتقليل كلفة استدعاء الذكاء الاصطناعي غير الضرورية.</p></div>
|
||||
<div class="card"><h4>تشفير AES-256 لكل البيانات الحساسة</h4><p>الأسماء، الهواتف، أرقام الهوية، أرقام لوحات السيارات — كلها مشفّرة داخل قاعدة البيانات.</p><p class="why"><b>ليش مهم:</b> حماية بيانات شخصية حساسة حتى لو تسربت قاعدة البيانات نفسها.</p></div>
|
||||
<div class="card"><h4>OTP عبر بوابة موحّدة متعددة الدول</h4><p>يكتشف الدولة تلقائيًا من رمز الهاتف ويختار مزود الإرسال المناسب (واتساب/SMS محلي) لكل من مصر والأردن وسوريا.</p><p class="why"><b>ليش مهم:</b> تسجيل دخول سلس بالهاتف فقط، مناسب لأسواق بدون اعتماد قوي على البريد الإلكتروني.</p></div>
|
||||
</div>
|
||||
|
||||
<h4 class="group">محرك الرحلات (الأكبر: 202 ملف)</h4>
|
||||
<div class="grid">
|
||||
<div class="card"><h4>رمز سعر موقّع ومؤقت (Price Token)</h4><p>السعر واتجاه الرحلة يُختمان برمز مشفّر صالح 7 دقائق فقط، فلا يقدر أحد يتلاعب بالسعر بين شاشة العرض وشاشة التأكيد.</p><p class="why"><b>ليش مهم:</b> إغلاق ثغرة احتيال كلاسيكية بتسعير النقل التشاركي.</p></div>
|
||||
<div class="card"><h4>مطابقة "الوجهة" (Destination Matching)</h4><p>سائق سجّل وجهة شخصية (متجه للبيت مثلًا) يحصل على أولوية لأي طلب قريب من تلك الوجهة، والراكب يحصل على خصم 14%.</p><p class="why"><b>ليش مهم:</b> يحوّل رحلة "طريقه أصلًا" لصفقة مربحة للطرفين.</p></div>
|
||||
<div class="card"><h4>تسوية أجرة آمنة عند إنهاء الرحلة</h4><p>السعر النهائي يُعاد حسابه بالكامل من الخادم بناءً على المسافة والزمن الفعليين، بحدود قصوى (لا يتجاوز 1.6× السعر المعروض، والمسافة لا تتجاوز 1.5× المخطط) قبل تحويل المبلغ فعليًا لمحفظة السائق.</p><p class="why"><b>ليش مهم:</b> يمنع تزوير GPS لتضخيم الأجرة، ويضمن معاملة مالية آمنة بين قاعدتي بيانات منفصلتين (الرحلة والمحفظة).</p></div>
|
||||
<div class="card"><h4>تسعير ديناميكي متكامل</h4><p>تسعير ذروة حسب نسبة الطلب للعرض بكل قطعة جغرافية، مطابقة تلقائية لتسعير ذروة المنافسين، مضاعفات موسمية (رمضان/الأعياد)، وخصم مسافات طويلة.</p><p class="why"><b>ليش مهم:</b> تسعير يتفاعل مع السوق لحظيًا بدل جدول أسعار ثابت.</p></div>
|
||||
<div class="card"><h4>حجز مسبق باختيار السائق (Mishwari)</h4><p>حد أقصى رحلتين لكل سائق كل 6 ساعات، ورحلة نشطة واحدة لكل راكب يوميًا — مصمم كمنتج مختلف عن الطلب الفوري.</p><p class="why"><b>ليش مهم:</b> يمنع استغلال ميزة الحجز المسبق كثغرة لتجاوز نظام الطلب العادي.</p></div>
|
||||
<div class="card"><h4>نظام إحالة موحّد</h4><p>رمز إحالة واحد يعمل بين السائقين والركاب، مع مكافأة مشروطة بعدد رحلات فعلية.</p><p class="why"><b>ليش مهم:</b> نمو مضمون بربط المكافأة بسلوك فعلي لا مجرد تسجيل حساب.</p></div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-good">
|
||||
<span class="tag">وثيقة داخلية موجودة فعلاً</span>
|
||||
<p>يوجد تقرير تدقيق أمني داخلي حقيقي بالباك اند (بأسلوب اختبار اختراق) يُصنّف النتائج من "حرج" إلى "منخفض" — نقاط قوة موثقة (JWT متعدد الطبقات، لا ثغرات SQL Injection، تشفير AES-256) مقابل نقاط ما زالت مفتوحة (تحديد معدل معطّل بأماكن، ملفات اختبار منسية بالإنتاج، تشفير CBC قديم بـ IV ثابت في بعض الأماكن). هذا مستوى نضج نادر لشركة بهذا الحجم — لكنه يعني أيضًا وجود بنود إصلاح لم تُغلق بعد.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 06 MAPS -->
|
||||
<section id="maps">
|
||||
<div class="chapter-head">
|
||||
<span class="chapter-num">06</span>
|
||||
<div>
|
||||
<h2>نظام الموقع الجغرافي والخرائط</h2>
|
||||
<p class="thesis">القرار الأهم هنا: Siro لا تعتمد على Google Maps لأي جزء من التتبع الحي أو مطابقة السائق القريب — بنت خادمي WebSocket خاصين بها وفهرسة جغرافية عبر Redis، والنتيجة توفير تكلفة ضخم مع تحكم كامل بمنطق العمل الخاص بها.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid">
|
||||
<div class="card"><h4>تتبع حي عبر Socket مخصص</h4><p>موقع السائق يُرسل كل 1-3 ثوانٍ عبر WebSocket، يُفلتَر (لا يُرسل إلا عند تحرك حقيقي 10م أو تغيّر سرعة/اتجاه) ثم يُجمَّع ويُكتب لـ Redis كل نصف ثانية دفعة واحدة، وأخيرًا يُدفَع للراكب مباشرة عبر خادم Socket ثانٍ.</p><p class="why"><b>ليش مهم:</b> تتبع لحظي حقيقي بأقل تكلفة خادم ممكنة، دون المرور بقاعدة بيانات في كل خطوة.</p></div>
|
||||
<div class="card"><h4>مطابقة "أقرب سائق" عبر Redis الجغرافي</h4><p>بحث نصف قطر جغرافي (GEORADIUS) على آلاف السائقين المتصلين لحظيًا — بديل خاص عن أي SDK خرائط جاهز لأن لا أحد يوفر "أقرب سائق متاح مرتب بالتقييم" كخدمة جاهزة.</p><p class="why"><b>ليش مهم:</b> سرعة مطابقة فائقة حتى مع عدد ضخم من السائقين.</p></div>
|
||||
<div class="card"><h4>نقاط بحث موقع مخصصة لكل فئة ركوب</h4><p>لكل من Balash وComfort وElectric وPinkBike والسائقات والتوصيل — استعلام SQL مختلف تمامًا (مثلاً Balash يختار أقدم السيارات فعليًا، وElectric يفلتر على نوع الوقود "كهربائي").</p><p class="why"><b>ليش مهم:</b> منطق عمل مخصص بالكامل لكل منتج، مستحيل تنفيذه بخدمة خرائط عامة جاهزة.</p></div>
|
||||
<div class="card"><h4>تسجيل ساعات عمل السائق الفعلية</h4><p>يُحسب من فروقات نقاط GPS الفعلية (مع تجاهل فجوات أكثر من 5 دقائق كـ"توقف حقيقي")، ويُبنى منه ملخص يومي لساعات العمل.</p><p class="why"><b>ليش مهم:</b> بيانات دقيقة لحساب أرباح/حوافز السائق بدل الاعتماد على تقدير تقريبي.</p></div>
|
||||
<div class="card"><h4>خرائط حرارية للطلب (Heatmaps)</h4><p>لوحتان تفاعليتان: خريطة حرارية لتاريخ الطلبات، وشاشة تتبع أسطول حي بأيقونات سيارات تدور حسب اتجاه الحركة.</p><p class="why"><b>ليش مهم:</b> "رؤية إلهية" لفريق العمليات لتخطيط تموضع السائقين وأسعار الذروة دون شراء أداة BI مكلفة.</p></div>
|
||||
<div class="card"><h4>تجزئة جغرافية للتوسع (Geo-Sharding)</h4><p>جدول يربط كل نطاق إحداثيات (مدينة/منطقة) بخادم خلفي مختلف.</p><p class="why"><b>ليش مهم:</b> يسمح بتوزيع الحمل جغرافيًا مع كل مدينة/دولة جديدة تُضاف دون إعادة هندسة كاملة.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 07 BOTS -->
|
||||
<section id="bots">
|
||||
<div class="chapter-head">
|
||||
<span class="chapter-num">07</span>
|
||||
<div>
|
||||
<h2>البوتات والذكاء الاصطناعي التسويقي</h2>
|
||||
<p class="thesis">هذا الجزء الأكثر إثارة للانتباه بكامل المنصة — منظومة مغلقة: بوت يسحب أسعار المنافسين مباشرة من تطبيقاتهم ← محرك يفكّك معادلة تسعيرهم ← كرون جوبز تُعدّل سعر Siro تلقائيًا ← بوتات سوشيال ميديا تصنع "نقاشات عضوية" مزيّفة لصالح Siro. ميزة تنافسية حقيقية، لكنها تحمل مخاطر قانونية وسمعية واضحة يجب ذكرها بصراحة.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h4 class="group">قراءة أسعار المنافسين وإعادة التسعير الآلي</h4>
|
||||
<div class="grid">
|
||||
<div class="card"><h4>بوت أندرويد يقرأ تطبيقات المنافسين مباشرة</h4><p>بوت (Accessibility Service) يفتح فعليًا تطبيقات كريم وأوبر وياللاّ-جو وTaxiF وزاكن وTufaddal، يدخل نقطتي انطلاق ووصول، ويقرأ السعر المعروض على الشاشة رقميًا.</p><p class="why"><b>ليش مهم:</b> لا حاجة لأي API عام من المنافس — البيانات تُجلَب مباشرة من واجهتهم، وهذا صعب اكتشافه أو منعه من طرفهم.</p></div>
|
||||
<div class="card"><h4>محرك فك تشفير معادلة تسعير المنافس (Node.js)</h4><p>يشتق معادلة كل منافس (سعر أساس + سعر لكل كم + سعر لكل دقيقة) بانحدار إحصائي حقيقي، ويكتشف حتى "الحد الأدنى للأجرة" الخفي.</p><p class="why"><b>ليش مهم:</b> يحوّل خوارزمية تسعير المنافس "الصندوق الأسود" لمعادلة صريحة قابلة للاستغلال.</p></div>
|
||||
<div class="card"><h4>إعادة تسعير تلقائية بخصم 6.5%</h4><p>كرون جوب يقرأ أفضل تصنيف سعري للمنافس ويُحدّث سعر Siro تلقائيًا ليكون أرخص بـ 6.5% بدون تدخل بشري.</p><p class="why"><b>ليش مهم:</b> ميزة تنافسية سعرية حقيقية بالزمن الحي، مش قرار يدوي بطيء.</p></div>
|
||||
<div class="card"><h4>"وضع الظل" لحماية الهامش</h4><p>طبقة حوكمة تفرّق بين انخفاض سعر مؤقت للمنافس (يُقترح له كود خصم بدل تغيير السعر الأساسي) وانخفاض دائم (يُسمح بتغيير حقيقي محدود بسقف 3% وفترة تهدئة 3 أيام).</p><p class="why"><b>ليش مهم:</b> يمنع المحرك الآلي من ملاحقة عرض ترويجي مؤقت للمنافس وحرق الهامش بلا داعٍ.</p></div>
|
||||
</div>
|
||||
|
||||
<h4 class="group">بوتات التواصل الاجتماعي</h4>
|
||||
<div class="grid">
|
||||
<div class="card"><h4>شبكة حسابات وهمية بتدوير IP</h4><p>حسابات فيسبوك/إنستغرام/تيليجرام تُدار آليًا، كل جهاز يُربط بحساب وبروكسي مختلف، مع تدوير الحسابات لتفادي الحظر.</p><p class="why"><b>ليش مهم تجاريًا:</b> نمو "عضوي" شبه مجاني عبر منصات لا تكلّف شيئًا مقارنة بالإعلانات المدفوعة.</p></div>
|
||||
<div class="card"><h4>تعليقات مولّدة بالذكاء الاصطناعي بلهجة كل بلد</h4><p>Gemini يكتب تعليقات بلهجة سورية/مصرية/أردنية مميزة حسب المنشور، بنيّات مختلفة: ترويج مباشر، ترويج خفي، رد على سؤال، أو "نقاش" مفتعل.</p><p class="why"><b>ليش مهم تجاريًا:</b> محتوى مقنع محليًا بدل رسائل تسويقية عامة.</p></div>
|
||||
<div class="card"><h4>"دراما الحوار" المفتعلة</h4><p>بعد أي تعليق ترويجي، يُجدوَل حساب وهمي ثانٍ ليعلّق بشك ("هل الأسعار حقيقية؟")، ثم حساب ثالث يرد بدعم Siro — بتأخير عشوائي يحاكي التفاعل البشري.</p><p class="why"><b>ليش مهم تجاريًا:</b> يصنع انطباع نقاش حقيقي بين مستخدمين حقيقيين تحت منشورات فعلية.</p></div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-critical">
|
||||
<span class="tag">⚠️ خطر قانوني وسمعي حقيقي</span>
|
||||
<p>سحب أسعار تطبيقات المنافسين آليًا عبر محاكاة واجهتهم يخالف على الأغلب شروط استخدام تلك التطبيقات ويعرّض الشركة لإجراء قانوني إذا اكتُشف. أما "دراما الحوار" المفتعلة والحسابات الوهمية المنسّقة، فهذا سلوك يُصنَّف كـ"تلاعب منسّق غير أصيل" (Coordinated Inauthentic Behavior) ويخالف صراحة سياسات فيسبوك/إنستغرام/تيليجرام — يحمل خطر حظر جماعي للحسابات وضررًا سمعيًا حقيقيًا إذا انكشف، بصرف النظر عن فعاليته التسويقية الحالية. هذه نقطة يجب أن يقرر فيها صاحب القرار وعيًا كاملًا بالمخاطرة، لا فقط بالعائد.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 08 NABEH -->
|
||||
<section id="nabeh">
|
||||
<div class="chapter-head">
|
||||
<span class="chapter-num">08</span>
|
||||
<div>
|
||||
<h2>نبيه، المحفظة، ومنصات الاستثمار</h2>
|
||||
<p class="thesis">تصحيح مهم أولًا: "نبيه" ليست منصة استثمار مالي بأي شكل — لا فوائد ولا حصص ولا فترات قفل أموال في الكود. هي مزوّد خدمة خارجي للأتمتة عبر واتساب. أما الاستثمار الحقيقي، فموجود في وثائق المستثمرين ونموذج تمويل مبدئي حقيقي — مع نقطة تتطلب انتباهك الفوري.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twocol">
|
||||
<div class="grid">
|
||||
<div class="card"><h4>ما هي "نبيه" فعليًا؟</h4><p>مزوّد خارجي بالذكاء الاصطناعي وواتساب يقوم بـ: تسجيل سائقين جدد عبر محادثة واتساب، توثيق حالة السائق، الإجابة عن استفسارات الأرباح، فحص الشكاوى بالذكاء الاصطناعي (Gemini يحدد المسؤولية)، والتحقق من إيصالات الدفع بصريًا.</p><p class="why"><b>ليش مهم:</b> يقلّل تكلفة التشغيل البشري لخدمة العملاء عبر أتمتة كاملة بالمحادثة، لا أنه منتج مالي للمستخدم النهائي.</p></div>
|
||||
<div class="card"><h4>محفظة Siro (البنية التحتية المالية)</h4><p>خدمة منفصلة (268 ملف) تربط: MTN موني، Syriatel Cash، ShamCash، Cliq، PayMob، eCash — لكل دولة قنواتها. تشمل تحويل فعلي بين محافظ السائقين برسوم تذهب لمحفظة الشركة.</p><p class="why"><b>ليش مهم:</b> بنية دفع محلية حقيقية توفّرها Siro داخليًا بدل الاعتماد الكامل على بوابات دفع عالمية غير متوفرة بكل الأسواق.</p></div>
|
||||
</div>
|
||||
<div class="grid">
|
||||
<div class="card"><h4>طلب تمويل مبدئي حقيقي وموثّق</h4><p>وثيقة مستثمرين داخلية تطلب 200,000 دولار مقابل 22% من الشركة (تقييم ضمني ~909 ألف دولار)، مع أربع طبقات إيراد مخطط لها: عمولة كازان، اشتراك Prime، إعلانات جغرافية داخل الخريطة، وترخيص خرائط Siro لتطبيقات أخرى كبديل أرخص من Google Maps.</p><p class="why"><b>ليش مهم:</b> رؤية واضحة لتنويع مصادر الدخل تتجاوز عمولة الرحلات فقط.</p></div>
|
||||
<div class="card"><h4>عقد استثماري منفصل خاص بسوريا</h4><p>اتفاقية حصة أرباح بقيمة 180,000 دولار مخصصة لتشغيل سوريا فقط (25%/25%/50%)، منفصلة عن جولة التمويل العامة أعلاه — الرقمان غير متطابقين ويحتاجان توفيقًا واضحًا قبل استخدام أي منهما رسميًا.</p><p class="why"><b>ليش مهم:</b> وجود سرديتين تمويليتين مختلفتين قد يربك أي مستثمر جديد يراجع الوثائق.</p></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-critical">
|
||||
<span class="tag">⚠️ تسريب بيانات شخصية حساسة — يحتاج إجراء فوري</span>
|
||||
<p>ملف <code>siromove.com/contract.html</code> — وهو على النطاق العام للموقع التسويقي — يحتوي على نص العقد الاستثماري الخاص بسوريا كاملًا، بما فيه <b>أرقام هوية وطنية/جواز سفر حقيقية</b> لشخصين مؤسسين ومستثمر واحد. أي زائر للرابط المباشر يقدر يصل لهذه البيانات دون أي حماية. هذا نُقل لك فور اكتشافه أثناء هذا البحث، ويستحق معالجة سريعة (إزالة الملف من الوصول العام أو حمايته بمصادقة) بغض النظر عن أي شيء آخر بهذا التقرير.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 09 LEGACY -->
|
||||
<section id="legacy">
|
||||
<div class="chapter-head">
|
||||
<span class="chapter-num">09</span>
|
||||
<div>
|
||||
<h2>الإرث الرقمي: القيمة الفكرية والمادية</h2>
|
||||
<p class="thesis">السؤال الحقيقي المطروح: لو حل نموذج ذكاء اصطناعي مثلي محل الفريق، هل كان يقدر يبني هذا من الصفر؟ الجواب الصادق: جزء كبير من الكود نعم، لكن الجزء الأكثر قيمة فعليًا — لأ، وهذا بالضبط ما يحدد قيمة المشروع الحقيقية.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="verdict">
|
||||
<h3>الحكم المباشر</h3>
|
||||
<p>نموذج ذكاء اصطناعي متقدم يقدر يعيد إنتاج <b>الشكل البرمجي</b> لمعظم هذا النظام — واجهات CRUD، شاشات فليتر، تكامل بوابات دفع قياسية، حتى استدعاءات OCR بالذكاء الاصطناعي — بسرعة كبيرة نسبيًا (أشهر بدل سنوات) لو تم تزويده بنفس المتطلبات بالضبط. لكن أغلى ما في هذا المشروع مش الكود نفسه — هو المعرفة التي لا يمكن أن تُستنبط من مجرد "طلب/Prompt"، لأنها جاءت من تشغيل حقيقي بالسوق لفترة، ومخاطرة مالية حقيقية، وعلاقات فعلية مع جهات دفع وحكومات محلية.</p>
|
||||
<div class="split">
|
||||
<div class="side can">
|
||||
<h4>✅ ما يقدر نموذج ذكاء اصطناعي ينتجه بسرعة</h4>
|
||||
<ul>
|
||||
<li>كل شاشات الفليتر القياسية (تسجيل، ملف شخصي، محفظة، تقييم).</li>
|
||||
<li>تكامل بوابات دفع معروفة (PayMob، Stripe) وربط APIs جاهزة (Gemini، Firebase).</li>
|
||||
<li>منطق CRUD الإداري: قوائم، فلاتر، لوحات تحكم.</li>
|
||||
<li>هيكلة أمان قياسية (JWT، تشفير، Rate Limiting) — نمط معروف يمكن تطبيقه بسرعة.</li>
|
||||
<li>واجهات الخرائط والتتبع نفسها (Socket + Redis Geo) كتصميم هندسي — النمط معروف بالصناعة.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="side cannot">
|
||||
<h4>❌ ما لا يمكن لأي نموذج أن "يخترعه" بمجرد طلب</h4>
|
||||
<ul>
|
||||
<li><b>معادلات التسعير الفعلية للمنافسين</b> — نتجت عن أشهر من سحب بيانات حقيقية من السوق، لا حسابًا نظريًا.</li>
|
||||
<li><b>القيم المضبوطة تشغيليًا</b> (حد 12 ساعة قيادة، 3 إلغاءات، مهلة 90 ثانية للمفاوض الذكي) — هذه أرقام نتجت عن حوادث وتجربة فعلية موثقة بسجل الأخطاء، لا افتراضًا نظريًا.</li>
|
||||
<li><b>العلاقات التنظيمية والمالية المحلية</b> — ترخيص النقل بسوريا (قانون 16 لعام 2021)، اتفاقيات MTN وSyriatel وShamCash وCliq، وحتى حل توزيع تطبيق (APK) خارج متجر جوجل بسبب العقوبات — هذه علاقات بشرية وقانونية حقيقية لا كود.</li>
|
||||
<li><b>القاعدة الفعلية من السائقين والركاب</b> — التجربة التجريبية وثّقت 1,447 سائقًا و2,891 راكبًا خلال 45 يومًا فقط بميزانية تسويق محدودة — هذا أصل حقيقي (Network Effect) لا يُشترى بطلب ذكاء اصطناعي.</li>
|
||||
<li><b>قرار المخاطرة الأخلاقية/القانونية</b> بتشغيل بوتات سحب الأسعار والتسويق الوهمي — قرار عمل وتحمّل مخاطرة، وليس قرارًا تقنيًا بالأساس.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid">
|
||||
<div class="card"><h4>القيمة الفكرية</h4><p>الأصل الفكري الحقيقي هو تراكم "الضبط" (Tuning) عبر وقت فعلي: كل حد رقمي في هذا الكود (نسب الخصم، مهلة إعادة المحاولة، سقوف التسعير) هو نتاج تجربة وخطأ حقيقيين موثّقين بسجلات الأخطاء وملاحظات المطورين — وهذا نوع معرفة لا يظهر إلا بالتشغيل الفعلي، ليس بكتابة كود جديد.</p></div>
|
||||
<div class="card"><h4>القيمة المادية</h4><p>الوثائق الداخلية نفسها تقدّر تقييمًا ضمنيًا يقارب 909 ألف دولار عند جولة تمويل 200 ألف دولار مقابل 22%. هذا رقم "قيمة الأعمال الجارية" (Going Concern) يشمل المستخدمين والبيانات والعلاقات — وهو مختلف تمامًا عن "كلفة إعادة بناء الكود من الصفر" فقط، والتي تكون أقل بكثير مهما كانت دقيقة الكود.</p></div>
|
||||
<div class="card"><h4>الخلاصة الصريحة</h4><p>هذا المشروع تحديدًا هو مثال حيّ على الفرق بين "الكود" و"الشركة". الذكاء الاصطناعي (بما فيه هذا التقرير نفسه) يسرّع كتابة الكود بشكل حقيقي، لكنه لا يستطيع أن يحل محل الوقت الفعلي والمخاطرة الفعلية والعلاقات الفعلية التي بُني عليها هذا المشروع — وهذه، لا الكود، هي القيمة الحقيقية غير القابلة للنسخ.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 10 RISKS -->
|
||||
<section id="risks">
|
||||
<div class="chapter-head">
|
||||
<span class="chapter-num">10</span>
|
||||
<div>
|
||||
<h2>المخاطر والفجوات المجمّعة</h2>
|
||||
<p class="thesis">تجميع لكل نقطة تحتاج قرارًا أو إجراءً، مرتّبة من الأشد إلحاحًا للأقل.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-critical">
|
||||
<span class="tag">حرج — يحتاج إجراء الآن</span>
|
||||
<p>أرقام هوية حقيقية لمؤسسين ومستثمر منشورة بدون حماية على <code>siromove.com/contract.html</code> — راجع القسم 08.</p>
|
||||
</div>
|
||||
<div class="alert alert-warn">
|
||||
<span class="tag">قانوني وسمعي</span>
|
||||
<p>بوتات سحب أسعار المنافسين والتلاعب المنسّق بالسوشيال ميديا (دراما الحوار المفتعلة) — راجع القسم 07 — مخاطرة حظر ومساءلة قانونية محتملة.</p>
|
||||
</div>
|
||||
<div class="alert alert-warn">
|
||||
<span class="tag">حوكمة تمويل</span>
|
||||
<p>سرديتان تمويليتان متضاربتان (180 ألف دولار حصة أرباح سوريا فقط مقابل 200 ألف دولار/22% على مستوى الشركة كلها) تحتاجان توحيدًا قبل عرضهما على أي مستثمر جديد.</p>
|
||||
</div>
|
||||
<div class="alert alert-warn">
|
||||
<span class="tag">تشغيلي</span>
|
||||
<p>تطبيق خدمة العملاء يفتقر لأداة عرض/حل شكوى حقيقية، ولا يوجد أداة استرجاع مبلغ، ولا تتبع مهلة زمنية — راجع القسم 04.</p>
|
||||
</div>
|
||||
<div class="alert alert-note">
|
||||
<span class="tag">أمني (موثّق داخليًا مسبقًا)</span>
|
||||
<p>تقرير التدقيق الأمني الداخلي يذكر بنودًا لم تُغلق بعد: تحديد معدل معطّل بأماكن التسجيل، ملفات اختبار/تشخيص منسية بالإنتاج، وتشفير قديم بنمط IV ثابت في بعض المسارات.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<div style="padding:0 6vw 56px; max-width:1400px; margin:0 auto;">
|
||||
<footer class="endnote">
|
||||
<span>تقرير أُعدّ بفحص مباشر لكود المشروع — لا تخمين ولا محتوى نموذجي عام.</span>
|
||||
<span>2026-07-09 · Siro Digital Legacy Report</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
Reference in New Issue
Block a user