feat: المجموعة C — بيانات السائق والمركبة (كيان مركبة + ملف السائق)

C1: جدول vehicles (مكافئ CarRegistration عند سيرو) — plate/vin مشفَّران،
make/model/year، color+color_hex (لتلوين السيارة في فلاتر)، fuel/owner/
category، is_default، status. سائق قد يملك أكثر من مركبة؛ VehiclesService
يضمن افتراضية واحدة دائماً (أول مركبة تلقائياً، حذف الافتراضية يرقّي غيرها).

C2: حقول الملف على drivers — gender، national_number (مشفَّر + فهرس أعمى
فريد لكل مستأجر، نفس نمط الهاتف)، name_arabic (مشفَّر)، birthdate، address،
الرخصة (type/categories/issue/expiry)، rejected_reason. عبر PATCH
/drivers/profile.

C3: ai_data + user_input (jsonb) على drivers و vehicles — مخرجات Gemini
مقابل مدخلات السائق، تُراكَم للمقارنة حقلاً بحقل.

C4: vehicle_photo min:2 في كتالوج الوثائق.
C5: نوع وثيقة face_liveness (فيديو) — الرفع يقبله بلا قيد mime.

قرار: المركبة كيان مستقل لا حقول مسطّحة (سيرو يفصلها بـisDefault). الحقول
القديمة على drivers تبقى للتوافق؛ المصدر الجديد vehicles.

هجرة: VehiclesAndDriverProfile (جدول vehicles + أعمدة السائق + فهرس فريد
جزئي على الرقم الوطني).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Hamza-Ayed
2026-07-17 19:43:47 +03:00
co-authored by Claude Opus 4.8
parent 4e9d4d9be1
commit c2a4b9d1a6
13 changed files with 588 additions and 10 deletions
+11 -8
View File
@@ -54,15 +54,18 @@
---
## المجموعة C — بيانات السائق والمركبة (من سيرو)
## المجموعة C — بيانات السائق والمركبة (من سيرو) — ✅ منفَّذة
| # | البند | التفصيل |
|---|-------|---------|
| C1 | **CarRegistration كامل** | `vin` · `car_plate` · `make` · `model` · `year` · `expiration_date` · **`color` + `color_hex`** (لتلوين السيارة في فلاتر) · `owner` · `fuel` · `isDefault` · `vehicle_category_id` · `fuel_type_id` · `status`. |
| C2 | **حقول السائق** | `gender` · `national_number` (فريد) · `name_arabic` · `first/last_name` · `birthdate` · `license_type/categories/issue/expiry` · `address` · `accountBank`/`bankCode` · `employmentType` · `maritalStatus` · **`rejected_reason`** (سبب رفض خدمة العملاء). |
| C3 | **`ai_data` + `user_input`** | تخزين مخرجات Gemini الخام **و** ما أدخله السائق — للمقارنة والتدقيق (نمط سيرو). |
| C4 | **صور السيارة ×2** | صورتان للمركبة (لا واحدة). |
| C5 | **فيديو/liveness للوجه** | تأكيد حيّ للوجه (غير السيلفي الثابت). |
| # | البند | الحالة |
|---|-------|--------|
| C1 | **CarRegistration كامل** | ✅ جدول `vehicles` (مكافئ CarRegistration) — `plate`/`vin` (مشفَّران) · `make`/`model`/`year` · **`color`+`color_hex`** · `fuel`/`owner`/`registration_expiry`/`category` · `is_default` · `status`. سائق قد يملك أكثر من مركبة؛ `VehiclesService` يضمن **افتراضية واحدة دائماً** (أول مركبة تلقائياً، حذف الافتراضية يرقّي غيرها). |
| C2 | **حقول السائق** | ✅ على `drivers`: `gender` · `national_number` (مشفَّر + فهرس أعمى فريد لكل مستأجر، نمط الهاتف) · `name_arabic` (مشفَّر) · `birthdate` · `address` · `license_type/categories/issue/expiry` · `rejected_reason`. عبر `PATCH /drivers/profile`. |
| C3 | **`ai_data` + `user_input`** | ✅ عمودان jsonb على `drivers` و`vehicles` — مخرجات Gemini الخام مقابل ما أدخله السائق (يُراكَم لا يُستبدَل، للمقارنة حقلاً بحقل). |
| C4 | **صور السيارة ×2** | ✅ `vehicle_photo` بـ`min: 2` في كتالوج الوثائق (`REQUIRED_DOCS`). |
| C5 | **فيديو/liveness للوجه** | ✅ نوع وثيقة `face_liveness` جديد — الرفع يقبل الفيديو (لا قيد mime)، ومفصول عن مسار مطابقة Gemini للصور. |
**قرار تصميم**: المركبة كيان مستقل (`vehicles`) لا حقول مسطّحة على السائق — سيرو نفسه يفصلها (`CarRegistration` مع `isDefault`)، وسائق واحد قد يبدّل مركبته. حقول `vehicle_make/model/plate/color` القديمة على `drivers` تبقى للتوافق؛ المصدر الجديد هو `vehicles`.
**مؤجَّل بوعي**: مطابقة الوجه الآلية على `face_liveness` (استخراج إطار + Gemini vision) — البنية جاهزة، والمطابقة الفعلية عند تفعيل مزوّد الرؤية. `accountBank`/`employmentType`/`maritalStatus` من سيرو تُضاف عند الحاجة (ليست حرجة للتشغيل).
---