# تسک‌های موتور نوبت‌دهی چندمنبعی Clinic Pro

پیاده‌سازی تدریجی [clinic-pro-mostanad-sade.md](../clinic-pro-mostanad-sade.md) روی کد موجود.
گزارش وضعیت فعلی و تحلیل شکاف: [00-current-state-report.md](00-current-state-report.md)

---

## ⛔ سه قاعده‌ای که پیش از هر تسکی باید بخوانی

| سند | چه می‌گوید |
|---|---|
| [_shared/red-lines.md](_shared/red-lines.md) | **منطق اسلاتی به هیچ عنوان دست‌کاری نمی‌شود** · نوبت‌دهی سرویسی در همین فاز کامل می‌شود |
| [_shared/ui-conventions.md](_shared/ui-conventions.md) | **هر صفحه یا بخش جدید عیناً با دیزاین‌سیستم موجود** — هیچ طراحی جدید |
| [_shared/definition-of-done.md](_shared/definition-of-done.md) | **هیچ تسکی بدون تکمیل چک‌لیستش تمام نیست** — ✅ 🔄 ⏳ ⚠️ |

در تناقض، این سه سند بر متن تسک‌ها برنده‌اند.

---

## لیست تسک‌ها

### فاز ۰ — تثبیت وضعیت فعلی (پیش‌نیاز بقیه)

| تسک | ماژول | پروژه | Endpoint | وابستگی | زمان |
|-----|-------|-------|----------|---------|------|
| [۰۰](task-00-service-mode-completion/) | تکمیل نوبت‌دهی سرویسی | `clinicpro` | ۴ | — | ۱۴-۱۸h |
| [۰۰ب](task-00b-nobat724-service-mode/) | سازگارسازی سایت عمومی | `nobat724_front` | — | ۰۰ | ۱۰-۱۴h |

### فاز ۱ — هستهٔ چندمنبعی

| تسک | ماژول | Endpoint | وابستگی | زمان |
|-----|-------|----------|---------|------|
| [۰۱](task-01-branch-room/) | شعبه و اتاق | ۸ | ۰۰ | ۱۰-۱۲h |
| [۰۲](task-02-resource-model/) | منبع، نوع منبع، مهارت، استخر | ۱۴ | ۰۱ | ۱۴-۱۸h |
| [۰۳](task-03-resource-calendar/) | تقویم منبع، مرخصی، تعطیلات ملی | ۹ | ۰۱، ۰۲ | ۱۲-۱۴h |
| [۰۴](task-04-service-catalog-v2/) | کاتالوگ خدمات v2 (گروه آیتم، دو نوع زمان) | ۱۰ | ۰۱ | ۱۴-۱۶h |
| [۰۵](task-05-appointment-plan/) | بخش‌های نوبت و سازندهٔ برنامه | ۳ | ۰۲، ۰۴ | ۱۶-۲۰h |
| [۰۶](task-06-availability-engine/) | موتور جستجوی وقت چندمنبعی | ۲ | ۰۳، ۰۵ | ۲۰-۲۴h |
| [۰۷](task-07-hold-and-book/) | رزرو موقت و ثبت نهایی چندمنبعی | ۴ | ۰۶ | ۱۶-۲۰h |
| [۰۸](task-08-pricing-snapshot/) | لیست قیمت بازه‌دار و snapshot فاکتور | ۷ | ۰۴، ۰۷ | ۱۲-۱۴h |

### فاز ۲ — قوانین

| تسک | ماژول | Endpoint | وابستگی | زمان |
|-----|-------|----------|---------|------|
| [۰۹](task-09-policy-engine/) | موتور قوانین شش‌دسته‌ای | ۶ | ۰۵، ۰۶، ۰۸ | ۲۰-۲۴h |
| [۱۰](task-10-policy-admin-sandbox/) | فرم ساخت قانون + محیط آزمایش | ۲ | ۰۹ | ۱۰-۱۲h |

### فاز ۳ — کسب‌وکار

| تسک | ماژول | Endpoint | وابستگی | زمان |
|-----|-------|----------|---------|------|
| [۱۱](task-11-package-credit-ledger/) | پکیج و دفتر اعتبار جلسات | ۸ | ۰۸ | ۱۰-۱۲h |
| [۱۲](task-12-treatment-course/) | دوره درمان | ۹ | ۰۷، ۱۱ | ۱۶-۲۰h |
| [۱۳](task-13-cancellation-waitlist/) | سیاست لغو، عدم حضور، لیست انتظار | ۷ | ۰۷ | ۱۰-۱۲h |

### فاز ۴ — بهینه‌سازی

| تسک | ماژول | Endpoint | وابستگی | زمان |
|-----|-------|----------|---------|------|
| [۱۴](task-14-events-utilization/) | رویدادهای دامنه و گزارش بهره‌وری | ۳ | ۰۷ | ۸-۱۰h |

**مجموع endpoint جدید: ~۹۶ · مجموع زمان: ۲۱۴ تا ۲۵۶ ساعت**

---

## ساختار هر تسک

```
task-XX-name/
├── task.md                 ← شرح، دامنه، endpoint ها، معیار پذیرش، زمان
├── architecture.md         ← فایل‌ها، entity ها، سرویس‌ها، لایه‌ها، قواعد UI
├── database.md             ← جداول، ستون‌ها، ایندکس‌ها، migration
├── implementation_notes.md ← نکات فنی، edge case، سازگاری عقب‌رو، تست
├── checklist.md            ← ☑️ وضعیت هر مورد: ✅ 🔄 ⏳ ⚠️
└── user_flow.md            ← (تسک‌های پیچیده) جریان کاربری
```

`checklist.md` **اجباری** است و ساختار ثابتی دارد:

```
۰. خط سرخ‌ها   ۱. بک‌اند   ۲. دیتابیس   ۳. UI   ۴. تست   ۵. مستندات   ۶. بازبینی پایانی
```

---

## چک‌لیست — قواعد

| نماد | معنی | اجازهٔ باقی‌ماندن در پایان تسک |
|---|---|---|
| ✅ | انجام‌شده و تأییدشده | بله |
| 🔄 | در حال انجام | **نه** |
| ⏳ | انجام‌نشده | **نه** — مگر با دلیل مکتوب و تسک مقصد |
| ⚠️ | نیازمند بررسی یا تست | **نه** — باید تعیین تکلیف شود |

**پیش از پایان هر تسک، همهٔ ردیف‌های چک‌لیست بازبینی می‌شوند و وضعیت نهایی می‌گیرند.**
هر تسک بخش «۶. بازبینی پایانی» دارد که تست‌ها، مستندات، UI و دو کلاینت دیگر را می‌سنجد.

---

## ترتیب پیشنهادی اجرا

```
۰۰ ── ۰۰ب
  │
  ├─ ۰۱ ─┬─ ۰۲ ── ۰۳ ─┐
  │      └─ ۰۴ ── ۰۵ ─┴─ ۰۶ ── ۰۷ ─┬─ ۰۸ ─┬─ ۰۹ ── ۱۰
  │                                │      └─ ۱۱ ── ۱۲
  │                                ├─ ۱۳
  │                                └─ ۱۴
```

**فاز ۰ اختیاری نیست.** اگر حالت `resource` (تسک ۰۶) روی حالت `service` نیمه‌کاره ساخته
شود، هر باگ موجود سرویسی به موتور جدید ارث می‌رسد و تشخیص منبعش غیرممکن می‌شود.

فاز اول قابل عرضه: ۰۰ تا ۰۸ — بعد از آن یک کلینیک زیبایی با اتاق، دستگاه و اپراتور
می‌تواند واقعاً نوبت بگیرد.

---

## سه حالت نوبت‌دهی

| حالت | مقدار `WeeklySchedule.meta.booking_mode` | وضعیت |
|---|---|---|
| اسلاتی | `slot` | ⛔ **قفل** — پیش‌فرض، تولیدی، دست‌نخورده |
| سرویسی | `service` | 🔄 موجود ولی نیمه‌کاره → تسک ۰۰ و ۰۰ب کاملش می‌کنند |
| چندمنبعی | `resource` | ⏳ جدید — تسک ۰۶ به بعد |

`booking_mode` پس از اولین ثبت قفل می‌شود (`WeeklySchedule::getStoredBookingMode()`).
تسک ۰۶ یک استثنای کنترل‌شده اضافه می‌کند: ارتقای **یک‌طرفه** از `slot`/`service` به
`resource`، مشروط بر نبودِ نوبت فعال آینده. بازگشت ممنوع.

ماتریس کامل «کدام endpoint در کدام حالت» در `docs/architecture/booking-modes.md`
(تسک ۰۰ می‌سازد، تسک ۰۶ حالت سوم را اضافه می‌کند).

---

## اجبار خودکار خط سرخ

هر تسک باید این را سبز نگه دارد:

```bash
ddev exec php bin/phpunit --group=slot-mode-frozen
```

تسک ۰۰ این تست و سه fixture آن را می‌سازد. fixture ها بعد از آن **read-only** اند:
اگر تستی قرمز شد، **کد باید برگردد، نه fixture**.

---

## قواعد مشترک همهٔ تسک‌ها

از [CLAUDE.md](../../../CLAUDE.md) و [docs/architecture/tenancy.md](../../architecture/tenancy.md).
فهرست کامل در [_shared/definition-of-done.md](_shared/definition-of-done.md):

1. entity جدید یا `TenantOwnedTrait` می‌گیرد یا با دلیل در `GlobalTables` ثبت می‌شود
2. `entity_type, entity_id` ستون‌های **اول** هر ایندکس ترکیبیِ لیست
3. هر uuid از request با `TenantOwnershipChecker` سنجیده می‌شود
4. timestamp ها `int` یونیکس؛ نمایش شمسی فقط در UI
5. کنترلر نازک · `BaseController` · `success/paginated/error`
6. API جدید فقط وقتی هیچ endpoint موجودی کافی نباشد — **دلیلش نوشته شود**
7. تست موفق + خطا + مرزی؛ بدون اجرای موفق تست، تسک تمام نیست
8. هر endpoint جدید یا تغییریافته → `docs/api/*` در همان نشست
9. رشته‌های UI فارسی از i18n؛ کد و کامیت و مستندات انگلیسی
10. سازگاری عقب‌رو: `nobat724_front` و `clinic-pro-tauri` در build خطا نمی‌دهند —
    بررسی دستی اجباری است (ردیف بازبینی پایانی هر تسک)
11. اول commit، بعد `graphify update .`
