Files

6.1 KiB
Raw Permalink Blame History

جریان کاربری — تسک ۱۵: پرونده بیمار

جریان خودکار — تأیید نوبت → ایجاد پرونده

دکتر/منشی نوبت را تأیید می‌کند
          │
          ▼
PATCH /api/v1/appointment/{uuid}/status { status: 'confirmed' }
          │
          ▼
AppointmentController::updateStatus()
          │
          ▼
آیا entity دارای پنل Basic+ است؟
  خیر → پرونده ایجاد نمی‌شود (Free plan)
  بله ↓
          ▼
PatientService::autoCreateOnAppointmentConfirm()
          │
          ▼
آیا PatientRecord برای این (entity, user) وجود دارد؟
  خیر → ایجاد PatientRecord جدید (created_by='system')
  بله → همان پرونده استفاده می‌شود
          │
          ▼
ایجاد PatientSession با:
  appointment_id = appointment.id
  visit_price_rials = 0  ← کاربر بعداً تکمیل می‌کند
  payment_method = 'pending'

جریان دستی — ایجاد پرونده توسط منشی

منشی در صفحه «بیماران» کلیک می‌کند → [+ بیمار جدید]
          │
          ▼
Modal: جستجو بیمار با نام یا شماره تلفن
  GET /api/v1/admin/users?search=09121234567
          │
          ▼
بیمار انتخاب می‌شود
          │
          ▼
POST /api/v1/patient { user_uuid: '...' }
          │
          ├─► 409: این بیمار قبلاً پرونده دارد → نمایش پرونده موجود
          └─► 201: پرونده ایجاد شد → redirect به PatientDetailPage

جریان ثبت مراجعه (سشن)

منشی/دکتر در صفحه پرونده بیمار، روی «+ مراجعه جدید» کلیک می‌کند
          │
          ▼
Modal ثبت سشن:

┌──────────────────────────────────────────────────────┐
│  ثبت مراجعه جدید                                     │
├──────────────────────────────────────────────────────┤
│  بیمه پایه:    [تأمین اجتماعی ▼]                   │
│  درصد کسر:     [۳۰%____________]                    │
│  بیمه مکمل:    [---بدون مکمل--- ▼]                 │
├──────────────────────────────────────────────────────┤
│  مبلغ ویزیت:   [500,000 ریال____]                   │
├──────────────────────────────────────────────────────┤
│  سرویس‌های انجام‌شده:                                │
│  [+ سرم ۵۰۰cc × علی رضایی] [+ سرویس دیگر]         │
├──────────────────────────────────────────────────────┤
│  📊 محاسبه:                                          │
│  ویزیت:   500,000  → بعد از بیمه: 315,000           │
│  سرویس‌ها: 130,000                                   │
│  مجموع:   445,000 ریال                              │
├──────────────────────────────────────────────────────┤
│  روش پرداخت: [نقدی ▼]                               │
│  یادداشت:    [____________________________]          │
└──────────────────────────────────────────────────────┘
│ [لغو]                            [ثبت مراجعه]        │
          │
          ▼
POST /api/v1/patient/{uuid}/session { ... }
          │
          ▼
سشن ثبت شد → لیست مراجعات refresh می‌شود

محاسبه real-time در Frontend

هر بار که visit_price یا discount درصد تغییر می‌کند:
  after_base = visit_price × (1 - base_discount / 100)
  after_supp = after_base × (1 - supp_discount / 100)
  final = round(after_supp) + services_total

نمایش: «مبلغ قابل پرداخت: ۴۴۵,۰۰۰ ریال»

جریان جستجو بیمار

GET /api/v1/patients?search=علی&page=1
  → جستجو در نام و شماره تلفن user
  → نمایش paginated در DataTable
  → کلیک روی هر ردیف → PatientDetailPage

نمایش صفحه بیمار (PatientDetailPage.tsx)

┌─────────────────────────────────────────────────────┐
│ علی محمدی — 09121234567                             │
│ ۵ مراجعه | آخرین: ۱۴۰۵/۰۳/۱۵ | مجموع: ۲,۲۵۰,۰۰۰ │
├─────────────────────────────────────────────────────┤
│ [+ مراجعه جدید]                                     │
├──────────────┬──────────────┬──────────────────────┤
│ تاریخ        │ مبلغ نهایی   │ روش پرداخت  عملیات  │
├──────────────┼──────────────┼──────────────────────┤
│ ۱۴۰۵/۰۳/۱۵  │ ۴۴۵,۰۰۰ ریال│ نقدی        ✏️ 👁️  │
│ ۱۴۰۵/۰۲/۰۸  │ ۳۲۰,۰۰۰ ریال│ کارت        ✏️ 👁️  │
└──────────────┴──────────────┴──────────────────────┘