# Sprint 1 — الأساسات (Foundations: provider auth + lookups + settings)

> أول اسبرينت. يؤسّس الهوية الثانية (المزوّد) واللوكاب والإعدادات المالية التي يبني عليها كل شيء.
> المرجع الكامل للكيانات/الحقول/النسخ: [`../analysis.md`](../analysis.md) + [`../assessment.md`](../assessment.md). الـ schema: `database/schema/catalog.json`.

## ▶ التنفيذ
اقرأ `docs/project/CONTEXT.md` أولاً، ثم نفّذ الخطط بالترتيب عبر `docs/build/*`. حدّث الكانبان لكل خطة.

## النطاق
- **طبقة الداتا بيز** (مبنية): migrations (catalog+bookings) · models · enums · factories · seeders · `provider` guard.
- **CRUD أدمن:**
  - `cruds/service-categories.md` — تصنيفات الخدمات (translatable name/description + icon + sort_order + is_active). sidebar + ترجمة.
  - `cruds/occasions.md` — المناسبات (translatable name + image + sort_order + is_active).
- **API مزوّد — flow auth** (`api/provider/auth/*`): register(+documents) · login · verify-code · resend-code · forgot(request/verify/reset) · logout · me · delete. حارس `provider` (Sanctum).
- **إعدادات:** صفوف `commission_percentage=10` · `vat_percentage=15` · `currency=SAR` · `booking_auto_confirm=0` (SettingSeeder) + إظهارها في CRUD الإعدادات.
- **ALTER:** `users.locale` (مبني).

## الاعتماديات
- لا شيء (يعتمد على base فقط). **لازم `.env` + DB نظيفة قبل DoD.**

## فكّر-الأول (think-first)
- **الكيانات:** providers (auth), service_categories(+trans), occasions(+trans), settings(rows), users(+locale).
- **لبنات Laravel:** Sanctum multi-guard (`provider`) مثل `admins` · `OtpService` + `OtpType` (REUSE) لتحقّق تسجيل المزوّد · Form Requests للتحقّق · Policies لاحقاً · Spatie media لوثائق المزوّد (collection `documents`) والأيقونات/الصور.
- **قواعد أعمال:** المزوّد بعد التسجيل = `status=pending` (لا يظهر/لا يستقبل حجوزات حتى `approved`). رفع الوثائق إلزامي. phone = country_code + phone_normalized (PhoneNormalizer). unique البريد/الجوال **soft-deletes-aware** (whereNull deleted_at) — العمود `index` لا DB-unique.
- **side effects:** إشعار ترحيب (Job) عند التسجيل (يؤجَّل للاسبرينت 6 لو لزم) · OTP عبر OtpService.
- **حواف:** تسجيل مزوّد بإيميل محذوف soft · إعادة إرسال OTP throttle · محاولة دخول وحساب `pending`/`rejected`/`suspended` → رسالة مناسبة.

## design pattern (اقتراح — موافقة عند التنفيذ)
- **Multi-auth guard** (نمط الـ base الموجود `admins`) — ليس باترن جديد، فقط توسعة. لا حاجة لباترن إضافي هنا.

## نتيجة الإنجاز (DoD)
```
migrate:fresh --seed:  ⬜
pint:                  ⬜
dump-autoload -o:      ⬜
schema:check:          ⬜
php artisan test:      ⬜
smoke (ar+en):         ⬜
commit:                <hash>
```
