- Add implementation notes for cancellation and waitlist features. - Create task documentation outlining goals, current status, and acceptance criteria for cancellation policy and resource utilization reporting. - Establish architecture for domain events and outbox pattern to ensure reliable event publishing. - Define database schema for domain events and necessary queries for resource utilization and plan accuracy reports. - Implement detailed implementation notes covering edge cases, testing strategies, and documentation requirements.
7.4 KiB
7.4 KiB
جریان کاربری — تسک ۱۲
الف) کلینیک پروتکل دوره را تعریف میکند
پنل › خدمات › لیزر فولبادی › تب «پروتکل دوره»
│
تعداد جلسات: ۸
فاصلهٔ حداقل / ایدهآل / حداکثر: ۲۱ / ۲۸ / ۴۵ روز
☑ تلاش برای انتخاب همان اپراتور جلسات قبل
│
پارامتر هر جلسه:
┌──────┬──────────────┬────────────┐
│ جلسه │ سطح انرژی │ مدت خاص │
├──────┼──────────────┼────────────┤
│ ۱ │ ۱۲ │ ۷۵ دقیقه │ ← جلسهٔ اول طولانیتر (تست و آموزش)
│ ۲ │ ۱۴ │ — │
│ … │ … │ — │
│ ۸ │ ۲۲ │ — │
└──────┴──────────────┴────────────┘
▼
POST /api/v1/course-protocols
ب) شروع دوره و رزرو کل آن
پنل › بیمار › «شروع دورهٔ درمان»
سرویس: لیزر فولبادی (پروتکل خودکار بارگذاری میشود)
پکیج: «۶ جلسه لیزر» ▾ (اختیاری — تسک ۱۱)
▼
POST /api/v1/treatment-course
→ ۸ CourseSession با وضعیت «برنامهریزیشده»
⚠️ «اعتبار پکیج (۶) کمتر از جلسات دوره (۸) است»
▼
صفحهٔ دوره:
┌────────────────────────────────────────────────────────┐
│ لیزر فولبادی — ز. احمدی ● دورهٔ فعال │
│ ●●●○○○○○ ۳ از ۸ جلسه │
├──────┬─────────────┬────────┬─────────┬────────────────┤
│ جلسه │ تاریخ │ فاصله │ انرژی │ وضعیت │
├──────┼─────────────┼────────┼─────────┼────────────────┤
│ ۱ │ ۱۴۰۵/۰۳/۰۵ │ — │ ۱۲ │ ✔ انجامشده │
│ ۲ │ ۱۴۰۵/۰۴/۰۲ │ ۲۸ روز │ ۱۴ │ ✔ انجامشده │
│ ۳ │ ۱۴۰۵/۰۵/۰۳ │ ۳۱ روز │ ۱۶ │ ✔ انجامشده │
│ ۴ │ ۱۴۰۵/۰۵/۳۱ │ ۲۸ روز │ ۱۸ │ ◷ رزروشده │
│ ۵ │ — │ — │ ۲۰ │ ○ برنامهریزیشده│
└──────┴─────────────┴────────┴─────────┴────────────────┘
[رزرو جلسهٔ بعدی] [رزرو همهٔ جلسات باقیمانده]
ستون «فاصله» عدد واقعی است، نه ایدهآل. کلینیک از آن میفهمد بیمار منظم است یا نه.
«رزرو همهٔ جلسات باقیمانده»
▼
POST /treatment-course/{uuid}/book-all
│
├─ لنگر: تاریخ جلسهٔ ۴ (آخرین رزروشده)
├─ جلسهٔ ۵: هدف ۲۸ روز بعد → نزدیکترین وقت در بازهٔ ۲۱..۴۵ روز
├─ جلسهٔ ۶: لنگر = تاریخ واقعی جلسهٔ ۵
├─ جلسهٔ ۷: خارج از ۹۰ روز → planned میماند
└─ همه در یک تراکنش
▼
200 { "booked_count": 2, "remaining_planned": 2,
"message": "۲ جلسه رزرو شد. جلسات ۷ و ۸ خارج از بازهٔ مجاز رزرو (۹۰ روز) هستند." }
ج) پیشنهاد جلسهٔ بعدی بعد از هر جلسه
منشی وضعیت جلسهٔ ۳ را «انجامشده» میکند
▼
سیستم خودکار بنر نشان میدهد:
┌────────────────────────────────────────────────┐
│ 📅 جلسهٔ بعدی این بیمار │
│ جلسهٔ ۴ از ۸ · سطح انرژی: ۱۸ │
│ تاریخ پیشنهادی: ۱۴۰۵/۰۵/۳۱ (۲۸ روز بعد) │
│ بازهٔ مجاز: ۱۴۰۵/۰۵/۲۴ تا ۱۴۰۵/۰۶/۱۷ │
│ │
│ ۰۹:۰۰ ▸ ۱۱:۳۰ ▸ ۱۴:۰۰ ▸ │
│ [رزرو با اپراتور مریم]│
└────────────────────────────────────────────────┘
«اپراتور مریم» چون جلسات ۱ تا ۳ با او بود (same_as_previous). اگر آزاد نباشد، نامش
عوض میشود و رزرو رد نمیشود.
د) بیمار دیر میآید — عبور از حداکثر فاصله
۶۰ روز از جلسهٔ ۳ گذشته (حداکثر ۴۵ روز)
▼
GET /treatment-course/{uuid}/next-slot-suggestion
▼
{
"session_number": 4,
"warning": "از حداکثر فاصلهٔ مجاز (۴۵ روز) عبور شده است. برای ادامهٔ دوره با پزشک مشورت کنید.",
"suggested_slots": [ … ]
}
در UI یک نوار زرد بالای پیشنهادها. رزرو مسدود نمیشود — تصمیم بالینی است، نه فنی.
اگر کلینیکی میخواهد واقعاً مسدود شود، آن یک قانون eligibility است (تسک ۰۹).
ه) لغو جلسهٔ وسط دوره
جلسهٔ ۴ لغو میشود
▼
├─ Appointment → cancelled_*
├─ CourseSession ۴ → planned ، appointment_id → NULL
├─ اعتبار پکیج → refund +1 (تسک ۱۱)
├─ اشغال منابع → released (تسک ۰۷)
└─ جلسات ۵..۸ دستنخورده
▼
پیشنهاد بعدی: لنگر همان جلسهٔ ۳ (آخرین انجامشده)
جلسات بعدی خودکار جابهجا نمیشوند. جابهجایی زنجیرهای پنج نوبت آیندهٔ بیمار بدون
تأیید، همان مسئلهٔ abandon است: عمل برگشتناپذیر روی داده و ظرفیت.
پنل یک پیشنهاد نشان میدهد: «فاصلهٔ جلسات ۵ تا ۸ با لغو این جلسه از پروتکل خارج شد. [بازچینی جلسات باقیمانده]» — با یک کلیک صریح.
و) پایان دوره
جلسهٔ ۸ → completed
▼
├─ TreatmentCourse → completed ، completed_at = now
├─ active_course_key → NULL (بیمار میتواند دورهٔ جدید شروع کند)
└─ رویداد CourseCompleted (تسک ۱۴)
▼
کارت بیمار: «دورهٔ لیزر فولبادی تکمیل شد — ۸ جلسه در ۲۳۱ روز»
[شروع دورهٔ نگهدارنده]