Files
clinicpro/docs/new_feture/taskes/task-02-resource-model/checklist.md
T
hamed 70739691d1 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
2026-07-30 12:12:45 +03:30

5.4 KiB
Raw Blame History

چک‌لیست — تسک ۰۲ (منبع، نوع منبع، مهارت، استخر)

وضعیت کلی: شروع نشده · آخرین بازبینی:

قواعد: _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 .
۶.۱۱ موارد به‌تعویق با دلیل و تسک مقصد