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:
@@ -0,0 +1,100 @@
|
||||
# چکلیست — تسک ۰۲ (منبع، نوع منبع، مهارت، استخر)
|
||||
|
||||
**وضعیت کلی:** ⏳ شروع نشده · **آخرین بازبینی:** —
|
||||
|
||||
قواعد: [_shared/definition-of-done.md](../_shared/definition-of-done.md) ·
|
||||
[red-lines.md](../_shared/red-lines.md) · [ui-conventions.md](../_shared/ui-conventions.md)
|
||||
|
||||
---
|
||||
|
||||
## ۰. خط سرخ
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۰.۱ | `--group=slot-mode-frozen` سبز | ⏳ | |
|
||||
| ۰.۲ | `Doctor` به `Resource` تبدیل **نشد** — فقط لینک شد | ⏳ | `appointments.doctor_id` سر جایش |
|
||||
| ۰.۳ | `ClinicStaff` و `Room` هویت مستقل حفظ کردند | ⏳ | |
|
||||
| ۰.۴ | `service_item_staff` و `ServiceItem.staffMembers` دستنخورده | ⏳ | |
|
||||
| ۰.۵ | `WeeklySchedule.meta.buffer_minutes` دستنخورده | ⏳ | `setup/cleanup` مفهوم جداست |
|
||||
|
||||
## ۱. بکاند
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۱.۱ | `ResourceType` · `ClinicResource` · `Skill` · `ResourceSkill` | ⏳ | |
|
||||
| ۱.۲ | `ResourcePool` · `ResourcePoolMember` | ⏳ | |
|
||||
| ۱.۳ | نام کلاس `ClinicResource` (نه `Resource`) و جدول `clinic_resources` | ⏳ | |
|
||||
| ۱.۴ | `ResourceLinker` — تنها نقطهٔ نگاشت پزشک/پرسنل/اتاق ↔ منبع | ⏳ | |
|
||||
| ۱.۵ | حداکثر یکی از `doctor_id`/`staff_id`/`room_id` — قید در سازنده | ⏳ | |
|
||||
| ۱.۶ | `capacity>1` روی `type=doctor` → ۴۲۲ | ⏳ | |
|
||||
| ۱.۷ | `normalizeAttributes` — اسکالر، کلید `[a-z_]{1,40}`، سقف ۲۰ | ⏳ | |
|
||||
| ۱.۸ | `ResourcePoolService` — اعضا همشعبه و همنوع، وگرنه ۴۲۲ | ⏳ | |
|
||||
| ۱.۹ | `findEligible()` با `HAVING COUNT(DISTINCT skill) = n` | ⏳ | همهٔ مهارتها، نه یکی |
|
||||
| ۱.۱۰ | `StaffService` موجود `ResourceLinker::syncActive()` صدا میزند | ⏳ | نه lifecycle callback |
|
||||
| ۱.۱۱ | چهارده endpoint | ⏳ | |
|
||||
| ۱.۱۲ | `app:resource:backfill` — dry-run، idempotent | ⏳ | سه نوع سیستمی + پزشک/پرسنل/اتاق |
|
||||
| ۱.۱۳ | `TenantOwnershipChecker` روی هر uuid از request | ⏳ | |
|
||||
|
||||
## ۲. دیتابیس
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۲.۱ | شش جدول ساخته شد | ⏳ | |
|
||||
| ۲.۲ | سه UNIQUE تهیپذیر روی `doctor_id`/`staff_id`/`room_id` | ⏳ | |
|
||||
| ۲.۳ | `idx_resource_skills_skill (skill_id, level)` | ⏳ | کوئری داغ تسک ۰۶ |
|
||||
| ۲.۴ | `entity_type, entity_id` ستون اول ایندکسهای لیست | ⏳ | |
|
||||
| ۲.۵ | `resource_skills` و `resource_pool_members` در `AGGREGATE_CHILDREN` | ⏳ | |
|
||||
| ۲.۶ | `TenantSchemaCoverageTest` سبز | ⏳ | |
|
||||
|
||||
## ۳. UI
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۳.۱ | `ResourcesPage` · `ResourceFormPage` · `ResourceTypesPage` · `SkillsPage` · `ResourcePoolsPage` | ⏳ | |
|
||||
| ۳.۲ | فیلتر شعبه/نوع/فعال در URL با `useUrlState` | ⏳ | |
|
||||
| ۳.۳ | شعبه و نوع با `SearchableSelect` | ⏳ | |
|
||||
| ۳.۴ | مهارتها با چیپ چندانتخابی | ⏳ | |
|
||||
| ۳.۵ | `DataTable` با skeleton و empty state | ⏳ | |
|
||||
| ۳.۶ | `backTo`/`BackButton` روی همهٔ زیرصفحهها | ⏳ | |
|
||||
| ۳.۷ | هیچ رنگ/شعاع hard-code | ⏳ | |
|
||||
| ۳.۸ | دارکمود و حالت فشرده | ⏳ | |
|
||||
| ۳.۹ | RTL و موبایل | ⏳ | |
|
||||
| ۳.۱۰ | `setup/cleanup` با واحد فارسی «دقیقه» | ⏳ | |
|
||||
| ۳.۱۱ | هشدار «این منبع N نوبت آیندهٔ فعال دارد» هنگام غیرفعالسازی | ⏳ | |
|
||||
|
||||
## ۴. تست
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۴.۱ | `ResourceCrudTest` — شعبهٔ محیط دیگر ۴۰۴، دو پل ۴۲۲، capacity | ⏳ | |
|
||||
| ۴.۲ | `SkillAssignmentTest` — جایگزینی کامل، level، حذف در استفاده | ⏳ | |
|
||||
| ۴.۳ | `ResourcePoolTest` — عضو شعبهٔ دیگر / نوع دیگر → ۴۲۲ | ⏳ | |
|
||||
| ۴.۴ | `ResourceEligibilityTest` — دو مهارت، منبع با یکی برنمیگردد | ⏳ | |
|
||||
| ۴.۵ | `BackfillResourceTest` — idempotent | ⏳ | |
|
||||
| ۴.۶ | `TenantLookupInventoryTest` شمارنده بهروز شد | ⏳ | |
|
||||
|
||||
## ۵. مستندات
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۵.۱ | `docs/api/resource.md` | ⏳ | |
|
||||
| ۵.۲ | توضیح «ظرفیت ۳ = یک ردیف، نه سه منبع» | ⏳ | |
|
||||
| ۵.۳ | تفاوت `setup/cleanup` منبع با `buffer_minutes` برنامه | ⏳ | |
|
||||
| ۵.۴ | `docs/api/staff.md` بخش «رابطه با منبع» | ⏳ | |
|
||||
| ۵.۵ | `docs/architecture/tenancy.md` بهروز | ⏳ | |
|
||||
|
||||
## ۶. بازبینی پایانی
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۶.۱ | هیچ 🔄 و ⏳ بیدلیل نمانده | ⏳ | |
|
||||
| ۶.۲ | `bin/phpunit` کامل سبز | ⏳ | |
|
||||
| ۶.۳ | `--group=slot-mode-frozen` سبز | ⏳ | |
|
||||
| ۶.۴ | `phpstan` بدون خطای جدید | ⏳ | |
|
||||
| ۶.۵ | `npx tsc --noEmit` و `yarn test` سبز | ⏳ | |
|
||||
| ۶.۶ | تستهای tenant سبز | ⏳ | |
|
||||
| ۶.۷ | `docs/api/*` بهروز | ⏳ | |
|
||||
| ۶.۸ | چکلیست UI کامل | ⏳ | |
|
||||
| ۶.۹ | دو کلاینت دیگر بررسی شدند | ⏳ | |
|
||||
| ۶.۱۰ | commit، سپس `graphify update .` | ⏳ | |
|
||||
| ۶.۱۱ | موارد بهتعویق با دلیل و تسک مقصد | ⏳ | |
|
||||
Reference in New Issue
Block a user