Implement SMS panel user flow and patient records system; add wallet charging, automatic reminders, and patient session management with detailed database schema and user flows.
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
# جریان کاربری — تسک ۱۵: پرونده بیمار
|
||||
|
||||
## جریان خودکار — تأیید نوبت → ایجاد پرونده
|
||||
|
||||
```
|
||||
دکتر/منشی نوبت را تأیید میکند
|
||||
│
|
||||
▼
|
||||
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 │
|
||||
│ ۵ مراجعه | آخرین: ۱۴۰۵/۰۳/۱۵ | مجموع: ۲,۲۵۰,۰۰۰ │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ [+ مراجعه جدید] │
|
||||
├──────────────┬──────────────┬──────────────────────┤
|
||||
│ تاریخ │ مبلغ نهایی │ روش پرداخت عملیات │
|
||||
├──────────────┼──────────────┼──────────────────────┤
|
||||
│ ۱۴۰۵/۰۳/۱۵ │ ۴۴۵,۰۰۰ ریال│ نقدی ✏️ 👁️ │
|
||||
│ ۱۴۰۵/۰۲/۰۸ │ ۳۲۰,۰۰۰ ریال│ کارت ✏️ 👁️ │
|
||||
└──────────────┴──────────────┴──────────────────────┘
|
||||
```
|
||||
Reference in New Issue
Block a user