Files
clinicpro/docs/new_feture/taskes/task-13-cancellation-waitlist/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

7.8 KiB
Raw Blame History

چک‌لیست — تسک ۱۳ (سیاست لغو، عدم حضور، لیست انتظار)

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

قواعد: _shared/definition-of-done.md · red-lines.md · ui-conventions.md


۰. خط سرخ

# مورد وضعیت یادداشت
۰.۱ --group=slot-mode-frozen سبز
۰ پیش‌فرض سیاست بدون جریمه (penalty_mode='none') وگرنه لحظهٔ deploy همه مشمول جریمه
۰ بیمار پرریسک مسدود نمی‌شود — فقط برچسب مسدودسازی = قانون eligibility
۰ ReserveAppointmentsPage/is_reserve دست‌نخورده مفهوم متفاوت از لیست انتظار
۰.۵ وضعیت‌های لغو موجود (cancelled_by_*, no_show) دست‌نخورده

۱. بک‌اند — لغو و جریمه

# مورد وضعیت یادداشت
۱.۱ CancellationPolicy · NoShowRecord
۱ CancellationPolicyResolver — سرویس بر محیط اولویت دارد
۱ PenaltyCalculator — شرط «لغو توسط کلینیک» اولین خط
۱ سقف جریمه = مبلغ پرداختی (min($penalty, $paid))
۱.۵ نوبت نقدی → جریمه صفر + note
۱ GET /cancellation-preview پیش از لغو
۱.۷ CancellationService هفت مرحله در یک تراکنش
۱ جریمه در WalletTransaction با setRecordedEntity() وگرنه نشتی بین محیط‌ها
۱ بازگشت اعتبار پکیج طبق سیاست (credit_refundable)، نه همیشه تسک ۱۱ TODO را برمی‌دارد
۱.۱۰ CourseSessionLinker::releaseSession() صدا زده می‌شود تسک ۱۲
۱.۱۱ لغو دوباره → idempotent
۱.۱۲ لغو نوبت گذشته → ۴۲۲

۲. بک‌اند — عدم حضور

# مورد وضعیت یادداشت
۲.۱ NoShowTracker با پنجرهٔ ۱۲ ماه نه کل تاریخ
۲.۲ برچسب پرریسک از TenantTag موجود، نه ستون بولین جدید
۲.۳ UNIQUE(appointment_id) → یک رکورد per نوبت
۲.۴ جدول جدا، نه ستون شمارنده روی بیمار همان استدلال دفتر اعتبار

۳. بک‌اند — لیست انتظار

# مورد وضعیت یادداشت
۳.۱ WaitlistEntry · WaitlistService · WaitlistMatcher
۳.۲ broadcast به حداکثر ۱۰ نفر، اولین رزروکننده می‌برد تصمیم مکتوب
۳.۳ متن پیامک شامل «اولین نفری که رزرو کند آن را می‌گیرد» اجباری
۳.۴ notify_count سقف دارد (پیشنهاد ۳) جلوگیری از اسپم
۳.۵ اطلاع‌رسانی async روی رویداد، بیرون تراکنش لغو لغو مستقل از پیامک
۳.۶ ترتیب: priority DESC, created_at ASC
۳.۷ preferred_day_parts در PHP فیلتر می‌شود
۳.۸ بیمار که خودش نوبت گرفت → converted خودکار روی رویداد AppointmentBooked وگرنه پیامک اضافه می‌گیرد
۳.۹ app:waitlist:expire روزانه
۳.۱۰ بازهٔ دلخواه > ۹۰ روز → ۴۲۲
۳.۱۱ هفت endpoint

۴. دیتابیس

# مورد وضعیت یادداشت
۴.۱ سه جدول
۴.۲ idx_waitlist_match (service_item_id, branch_id, status, desired_from, desired_to)
۴.۳ idx_no_show_patient (patient_record_id, recorded_at) کوئری پنجرهٔ ۱۲ ماه
۴.۴ risk_tag_uuid بدون FK (الگوی DiscountRule.target_tag_uuid)
۴.۵ app:cancellation:seed-default-policy — محافظه‌کار
۴.۶ TenantSchemaCoverageTest سبز

۵. UI

# مورد وضعیت یادداشت
۵.۱ CancellationPolicyPage — سیاست محیط + جدول override سرویس‌ها
۵ WaitlistPage — لیست + تب «قابل تطبیق»
۵ دکمهٔ لغو → ConfirmDialog با محتوای preview نه لغو بعد جریمه
۵ نشان «پرریسک» + شمارش عدم حضور در PatientDetailPage
۵.۵ ConfirmDialog موجود استفاده شد، مودال دست‌ساز نه
۵ DataTable با فیلتر بازه/سرویس در URL
۵.۷ تاریخ‌ها شمسی · مبالغ با formatRial
۵ backTo/BackButton روی زیرصفحه‌ها
۵ هیچ رنگ/شعاع hard-code — نشان پرریسک از --danger-bg
۵.۱۰ دارک‌مود و حالت فشرده
۵.۱۱ RTL و موبایل
۵.۱۲ همهٔ رشته‌ها فارسی
۵.۱۳ ReserveAppointmentsPage موجود دست‌نخورده ماند ادغام خارج از دامنه

۶. تست

# مورد وضعیت یادداشت
۶.۱ PenaltyCalculatorTest — پنج حالت شامل «کلینیک همیشه صفر»
۶.۲ CancellationServiceTest — آزادسازی، recorded_entity، idempotent، گذشته ۴۲۲
۶.۳ PolicyResolverTest — اولویت سرویس
۶.۴ NoShowTrackerTest — سوم برچسب، قدیمی‌تر از ۱۲ ماه نه، دوبار یک رکورد
۶.۵ NoShowTrackerTest — بیمار پرریسک رزرو موفق دارد
۶.۶ WaitlistMatcherTest — سقف ۱۰، ترتیب، فیلتر روزبخش، notify_count
۶.۷ WaitlistConversionTest
۶.۸ WaitlistAsyncTest — شکست پیامک لغو را rollback نمی‌کند
۶.۹ PatientWalletTenantTest موجود سبز ماند
۶.۱۰ CourseLifecycleTest موجود — سیاست اعتبار اعمال شد

۷. مستندات

# مورد وضعیت یادداشت
۷.۱ docs/api/cancellation.md — preview اجباری، کلینیک بی‌جریمه
۷ docs/api/waitlist.md — تصمیم broadcast و دلیلش

۸. بازبینی پایانی

# مورد وضعیت یادداشت
۸.۱ هیچ 🔄 و بی‌دلیل نمانده
۸.۲ bin/phpunit کامل سبز
۸.۳ --group=slot-mode-frozen سبز
۸.۴ phpstan بدون خطای جدید
۸.۵ npx tsc --noEmit و yarn test سبز
۸.۶ تست‌های tenant سبز
۸.۷ docs/api/* به‌روز
۸.۸ چک‌لیست UI کامل
۸.۹ ⚠️ سایت باید preview لغو را نشان دهد → nobat724_front بررسی و تسک ثبت شد
۸.۱۰ clinic-pro-tauri بررسی شد
۸.۱۱ commit، سپس graphify update .
۸.۱۲ موارد به‌تعویق با دلیل و تسک مقصد