Files
clinicpro/docs/tasks/task-09-appointment-settings/user_flow.md
T
hamed de1a78a235 feat: Implement SMS sending functionality with KavehNegar and Rangineh providers
- Add SendSmsMessage class for encapsulating SMS message data.
- Create KavehNegarProvider and RanginehProvider classes implementing SmsProviderInterface for sending SMS.
- Implement SmsLogRepository and SmsTemplateRepository for managing SMS logs and templates.
- Develop SendSmsHandler for handling SMS sending messages.
- Create SmsService to manage SMS dispatching and logging.
- Add UserProfileController for managing user profiles with CRUD operations.
- Implement UserProfile entity and repository for user profile data management.
- Update symfony.lock and bootstrap.php for project dependencies and environment setup.
2026-06-09 22:00:34 +03:30

2.1 KiB

جریان کاربری — تسک ۰۹: تنظیمات نوبت‌دهی

جریان تنظیم اولیه نوبت‌دهی توسط دکتر

دکتر وارد پنل می‌شود
          │
          ▼
POST /api/v1/appointment-settings/weekly-schedule
  { doctor_uuid, schedule: { saturday: {...}, sunday: {...}, ... } }
          │
          └─► ذخیره برنامه هفتگی پایه

جریان ثبت مرخصی یا تعطیلات

دکتر تعطیلات را ثبت می‌کند
          │
          ▼
POST /api/v1/appointment-settings/holidays
  { doctor_uuid, start_date, end_date, reason }
          │
          └─► در بازه تعطیلات، هیچ نوبتی نمی‌توان گرفت

جریان override یک روز خاص

دکتر می‌خواهد یک روز خاص را سفارشی کند
          │
          ├─► غیرفعال کردن یک روز:
          │   POST /date-override { date: "2024-03-15", active: false }
          │
          └─► اسلات سفارشی برای یک روز:
              POST /date-override {
                date: "2024-03-15",
                active: true,
                custom_slots: [{ start: "10:00", end: "12:00", duration: 20 }]
              }

الگوریتم محاسبه اسلات‌های خالی (تسک ۱۰ از این استفاده می‌کند)

برای تاریخ درخواست‌شده:
          │
          ▼
آیا در بازه Holiday است؟
  بله → نوبت موجود نیست
  خیر │
      ▼
آیا DateOverride برای این تاریخ وجود دارد؟
  بله → active=false: نوبت موجود نیست
         active=true: از custom_slots استفاده کن
  خیر │
      ▼
از WeeklySchedule روز هفته مربوطه استفاده کن
  active=false: نوبت موجود نیست
  active=true:  اسلات‌های slots را محاسبه کن
          │
          ▼
اسلات‌های رزروشده را حذف کن (از جدول appointments)
          │
          ▼
لیست اسلات‌های خالی را برگردان