Add checklists for tasks 11 to 14 covering credit ledger, treatment course, cancellation policies, and event utilization
- Created checklist for task 11: Package and Credit Ledger - Created checklist for task 12: Treatment Course - Created checklist for task 13: Cancellation Policy, No-Show, and Waitlist - Created checklist for task 14: Domain Events and Utilization Reports
This commit is contained in:
@@ -3,17 +3,34 @@
|
||||
پیادهسازی تدریجی [clinic-pro-mostanad-sade.md](../clinic-pro-mostanad-sade.md) روی کد موجود.
|
||||
گزارش وضعیت فعلی و تحلیل شکاف: [00-current-state-report.md](00-current-state-report.md)
|
||||
|
||||
> **پیشفرض کلیدی:** بازنویسی نداریم. نوبتدهی اسلاتی (`booking_mode=slot`) و نوبتدهی
|
||||
> سرویسیِ فعلی (`booking_mode=service`) تا آخر این مسیر بدون تغییر رفتار کار میکنند.
|
||||
> حالت جدید `booking_mode=resource` کنارشان اضافه میشود.
|
||||
---
|
||||
|
||||
## ⛔ سه قاعدهای که پیش از هر تسکی باید بخوانی
|
||||
|
||||
| سند | چه میگوید |
|
||||
|---|---|
|
||||
| [_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-01-branch-room/) | شعبه و اتاق | ۸ | — | ۱۰-۱۲h |
|
||||
### فاز ۰ — تثبیت وضعیت فعلی (پیشنیاز بقیه)
|
||||
|
||||
| تسک | ماژول | پروژه | 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 |
|
||||
@@ -21,14 +38,29 @@
|
||||
| [۰۶](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 جدید: ~۹۲ · مجموع زمان: ۱۹۰ تا ۲۲۸ ساعت**
|
||||
**مجموع endpoint جدید: ~۹۶ · مجموع زمان: ۲۱۴ تا ۲۵۶ ساعت**
|
||||
|
||||
---
|
||||
|
||||
@@ -37,57 +69,99 @@
|
||||
```
|
||||
task-XX-name/
|
||||
├── task.md ← شرح، دامنه، endpoint ها، معیار پذیرش، زمان
|
||||
├── architecture.md ← فایلها، entity ها، سرویسها، لایهها
|
||||
├── 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) بر همهٔ این تسکها حاکماند.
|
||||
مواردی که در هر تسک باید رعایت شوند:
|
||||
از [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` با دلیل ثبت میشود؛
|
||||
`TenantSchemaCoverageTest` را اجرا کن.
|
||||
2. `entity_type, entity_id` ستونهای **اول** هر ایندکس ترکیبی لیست.
|
||||
3. هر uuid که از request میآید باید با `TenantOwnershipChecker` سنجیده شود؛
|
||||
`TenantLookupInventoryTest` شمارنده دارد.
|
||||
4. timestamp ها `int` (Unix)، نه `DateTime`. نمایش شمسی فقط در UI.
|
||||
5. کنترلر نازک، `extends BaseController`، پاسخ با `success()/paginated()/error()`.
|
||||
6. هر endpoint جدید یا تغییر یافته → بهروزرسانی `docs/api/*.md` در همان نشست.
|
||||
7. تست موفق + خطا + مرزی برای هر تسک، وگرنه تسک تمام نیست.
|
||||
8. رشتههای UI فارسی، کد و کامیت انگلیسی.
|
||||
9. سازگاری عقبرو: `nobat724_front` و `clinic-pro-tauri` مصرفکنندهٔ همین APIها هستند
|
||||
و در build خطا نمیدهند — هر تغییر قرارداد باید دستی بررسی شود.
|
||||
|
||||
---
|
||||
|
||||
## سازگاری با نوبتدهی فعلی
|
||||
|
||||
| حالت | منبع تنظیم | چه زمانی |
|
||||
|---|---|---|
|
||||
| `slot` | `WeeklySchedule.meta.booking_mode` | اسلات ثابت `duration_per_patient` — رفتار پیشفرض امروز |
|
||||
| `service` | همان | طول = جمع مدت سرویسها + buffer — پیادهشده، تکمنبعی |
|
||||
| `resource` | همان | **جدید** — برنامهٔ چندبخشی + چند منبع (تسک ۰۵ به بعد) |
|
||||
|
||||
`booking_mode` پس از اولین ثبت قفل میشود (`WeeklySchedule::getStoredBookingMode()`).
|
||||
تسک ۰۶ باید مسیر ارتقای داوطلبانهٔ `service → resource` را باز کند، بدون اجبار.
|
||||
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 .`
|
||||
|
||||
Reference in New Issue
Block a user