- 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
5.4 KiB
5.4 KiB
چکلیست — تسک ۰۲ (منبع، نوع منبع، مهارت، استخر)
وضعیت کلی: ⏳ شروع نشده · آخرین بازبینی: —
قواعد: _shared/definition-of-done.md · red-lines.md · 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 . |
⏳ | |
| ۶.۱۱ | موارد بهتعویق با دلیل و تسک مقصد | ⏳ |