# Admin Panel — User Flow (React)

---

## 1. Authentication

```
[Login Page]
  │
  ├─► Enter mobile number
  ├─► Enter password
  └─► Submit
        │
        ├─ Success ──► Store JWT + Refresh Token ──► Redirect to Dashboard
        └─ Fail ─────► Show error message
```

**Pages:** `/login`
**API:** `POST /api/v1/user/login`

---

## 2. Dashboard (صفحه اصلی)

```
[Dashboard]
  ├─► آمار کلی
  │     ├─ تعداد کل کاربران
  │     ├─ تعداد پزشکان فعال
  │     ├─ تعداد کلینیک‌ها
  │     ├─ نوبت‌های امروز
  │     ├─ پرداخت‌های امروز (مبلغ)
  │     ├─ تعداد نظرات در انتظار تأیید
  │     └─ تعداد درخواست‌های تسویه‌حساب
  │
  ├─► فعالیت‌های اخیر
  │     ├─ آخرین نوبت‌های ثبت‌شده
  │     ├─ آخرین پرداخت‌ها
  │     └─ آخرین کاربران ثبت‌نام‌شده
  │
  └─► نمودارها
        ├─ درآمد ماهانه (Jalali)
        └─ آمار نوبت‌ها به تفکیک وضعیت
```

**Pages:** `/admin/dashboard`

---

## 3. مدیریت کاربران (User Management)

```
[لیست کاربران]
  ├─► جستجو (mobile, name, email)
  ├─► فیلتر بر اساس role / status
  ├─► صفحه‌بندی
  │
  ├─── ردیف کاربر ──►
  │      ├─ مشاهده جزئیات ──► [صفحه پروفایل کاربر]
  │      │                          ├─ اطلاعات پایه (نام، موبایل، ایمیل، نقش)
  │      │                          ├─ پروفایل پزشکی (گروه خونی، بیماری‌ها، ...)
  │      │                          ├─ تاریخچه نوبت‌ها
  │      │                          └─ تاریخچه پرداخت‌ها
  │      │
  │      ├─ ویرایش اطلاعات پایه
  │      ├─ تغییر وضعیت (فعال / غیرفعال)
  │      └─ حذف کاربر ──► [Confirm Dialog]
  │
  └─── دکمه «افزودن کاربر» ──► [فرم ثبت کاربر جدید]
```

**Pages:** `/admin/users`, `/admin/users/:uuid`
**API:**
- `GET /api/v1/users` (لیست)
- `PATCH /api/v1/user/:id` (ویرایش)
- `DELETE /api/v1/user/:id` (حذف)
- `GET /api/v1/user-profile/:uuid` (پروفایل)

---

## 4. مدیریت پزشکان (Doctor Management)

```
[لیست پزشکان]
  ├─► فیلتر: استان / شهر / تخصص / جنسیت / درجه / وضعیت فعال
  ├─► جستجو: نام / کد نظام پزشکی
  │
  ├─── ردیف پزشک ──►
  │      ├─ مشاهده پروفایل ──► [صفحه پزشک]
  │      │                          ├─ اطلاعات پایه + تصویر
  │      │                          ├─ آدرس مطب‌ها (لیست + نقشه)
  │      │                          ├─ تخصص‌ها و خدمات
  │      │                          ├─ بیمه‌های پذیرفته‌شده
  │      │                          ├─ منشی‌ها
  │      │                          ├─ میانگین امتیاز (5 شاخص)
  │      │                          └─ آمار نوبت‌ها
  │      │
  │      ├─ ویرایش پروفایل
  │      ├─ فعال/غیرفعال کردن
  │      └─ حذف ──► [Confirm Dialog]
  │
  └─── دکمه «افزودن پزشک»
```

**Pages:** `/admin/doctors`, `/admin/doctors/:uuid`
**API:**
- `GET /api/v1/doctors`
- `POST /api/v1/doctor`
- `PATCH /api/v1/doctor/:uuid`
- `DELETE /api/v1/doctor/:uuid`

---

## 5. مدیریت کلینیک‌ها (Clinic Management)

```
[لیست کلینیک‌ها]
  ├─► فیلتر: استان / شهر / تخصص
  │
  ├─── ردیف کلینیک ──►
  │      ├─ مشاهده ──► [صفحه کلینیک]
  │      │                  ├─ اطلاعات + لوگو + گالری تصاویر
  │      │                  ├─ ساعات کاری
  │      │                  ├─ پزشکان عضو
  │      │                  ├─ بیمه‌های پذیرفته‌شده
  │      │                  └─ موقعیت روی نقشه
  │      │
  │      ├─ ویرایش
  │      ├─ فعال/غیرفعال کردن
  │      └─ حذف ──► [Confirm Dialog]
  │
  └─── دکمه «افزودن کلینیک»
```

**Pages:** `/admin/clinics`, `/admin/clinics/:uuid`

---

## 6. مدیریت نوبت‌ها (Appointment Management)

```
[لیست نوبت‌ها]
  ├─► فیلتر: تاریخ / پزشک / وضعیت / نماینده
  ├─► جستجو: موبایل بیمار / نام پزشک
  │
  ├─── ردیف نوبت ──►
  │      ├─ مشاهده جزئیات ──► [صفحه نوبت]
  │      │                          ├─ اطلاعات بیمار
  │      │                          ├─ اطلاعات پزشک + آدرس
  │      │                          ├─ زمان نوبت
  │      │                          ├─ وضعیت (با رنگ‌بندی)
  │      │                          └─ اطلاعات پرداخت
  │      │
  │      ├─ تغییر وضعیت (dropdown کامل همه state‌ها)
  │      └─ لغو نوبت ──► [Confirm + دلیل اختیاری]
  │
  └─── فیلتر سریع بر اساس وضعیت:
        waiting_for_payment | reserved | checked_in | waiting |
        in_progress | visited | completed | cancelled_* | no_show
```

**وضعیت‌های نوبت با رنگ‌بندی:**
| وضعیت | رنگ |
|--------|------|
| waiting_for_payment | زرد |
| reserved | آبی |
| checked_in | بنفش |
| waiting | نارنجی |
| in_progress | آبی تیره |
| visited / completed | سبز |
| cancelled_* / no_show | قرمز |
| auto_cancel_unpaid | خاکستری |

**Pages:** `/admin/appointments`, `/admin/appointments/:uuid`

---

## 7. مدیریت پرداخت‌ها (Payment Management)

```
[لیست پرداخت‌ها]
  ├─► فیلتر: تاریخ / وضعیت / درگاه (mellat/sep)
  ├─► جستجو: شماره مرجع / موبایل
  │
  ├─── ردیف پرداخت ──►
  │      └─ مشاهده جزئیات ──► [صفحه پرداخت]
  │                                ├─ شناسه پرداخت، مبلغ، درگاه
  │                                ├─ وضعیت: pending/received/canceled/refund
  │                                ├─ زمان پرداخت
  │                                ├─ لینک به نوبت مرتبط
  │                                └─ دکمه «استرداد» (اگر وضعیت received)
  │
  └─── آمار خلاصه بالای صفحه:
        ├─ مجموع پرداخت‌های موفق امروز
        ├─ مجموع مبلغ امروز
        └─ تعداد پرداخت‌های در انتظار
```

**Pages:** `/admin/payments`, `/admin/payments/:uuid`

---

## 8. مدیریت تسویه‌حساب (Settlement Management)

```
[لیست درخواست‌های تسویه]
  ├─► فیلتر: وضعیت (pending/approved/rejected) / نماینده
  │
  ├─── ردیف تسویه ──►
  │      └─ مشاهده ──► [صفحه تسویه]
  │                        ├─ نام نماینده + موجودی کیف‌پول
  │                        ├─ مبلغ درخواست‌شده
  │                        ├─ اطلاعات حساب بانکی (شماره کارت، بانک)
  │                        ├─ تاریخ درخواست
  │                        └─ اقدامات:
  │                              ├─ تأیید ──► PATCH approve
  │                              └─ رد کردن ──► [فرم دلیل رد] ──► PATCH reject
  │
  └─── آمار: مجموع در انتظار / تأییدشده این ماه
```

**Pages:** `/admin/settlements`, `/admin/settlements/:uuid`

---

## 9. مدیریت نمایندگان (Representation Management)

```
[لیست نمایندگان]
  │
  ├─── ردیف نماینده ──►
  │      └─ مشاهده ──► [صفحه نماینده]
  │                        ├─ اطلاعات دامنه، شهر، درصد کمیسیون
  │                        ├─ حساب‌های بانکی (لیست + افزودن)
  │                        ├─ کیف‌پول: موجودی + تاریخچه تراکنش‌ها
  │                        ├─ آمار ماهانه (نمودار Jalali)
  │                        └─ آمار سالانه درآمد
  │
  └─── دکمه «افزودن نماینده» ──► [فرم]
        ├─ نام دامنه
        ├─ شهر
        ├─ درصد کمیسیون
        └─ حساب بانکی پیش‌فرض
```

**Pages:** `/admin/representations`, `/admin/representations/:uuid`

---

## 10. مدیریت نظرات (Comment Moderation)

```
[صف تأیید نظرات]
  ├─► فیلتر: تأییدنشده / تأییدشده / همه
  ├─► جستجو: نام پزشک / متن
  │
  ├─── ردیف نظر ──►
  │      ├─ نام کاربر، نام پزشک، تاریخ
  │      ├─ عنوان و متن نظر
  │      ├─ تأیید ──► PATCH approve
  │      └─ رد / حذف ──► [Confirm Dialog]
  │
  └─── آمار: تعداد در انتظار تأیید (badge در منو)
```

**Pages:** `/admin/comments`

---

## 11. مدیریت امتیازدهی (Rating Management)

```
[لیست امتیازها]
  ├─► فیلتر: پزشک / بازه زمانی
  │
  ├─── ردیف امتیاز ──►
  │      ├─ نام بیمار، نام پزشک، تاریخ
  │      ├─ 5 شاخص (صحت تشخیص، مهارت، رفتار، نظافت، زمان انتظار)
  │      ├─ ستاره کلی
  │      └─ حذف ──► [Confirm Dialog]
  │
  └─── نمودار میانگین امتیازها به تفکیک پزشک
```

**Pages:** `/admin/ratings`

---

## 12. مدیریت پیامک (SMS Management)

```
[پنل SMS]
  ├─► تب «قالب‌های نمونه» (قالب‌های ادمین)
  │      ├─ لیست قالب‌های sample
  │      ├─ افزودن قالب نمونه ──► [فرم]
  │      └─ ویرایش / حذف
  │
  ├─► تب «در انتظار تأیید»
  │      ├─ لیست قالب‌های submitted توسط پزشکان/کلینیک‌ها
  │      ├─── ردیف قالب ──►
  │      │      ├─ نام، دسته‌بندی، محتوا، ارسال‌کننده
  │      │      ├─ تأیید ──► PATCH approve
  │      │      └─ رد ──► [فرم دلیل رد] ──► PATCH reject
  │
  └─► تب «لاگ‌های ارسال»
         ├─ فیلتر: وضعیت (queued/sent/failed) / provider / تاریخ
         └─ مشاهده جزئیات هر پیام
```

**Pages:** `/admin/sms`
**API:**
- `GET /api/v1/sms/sample-templates`
- `PATCH /api/v1/sms/templates/:uuid/approve`
- `PATCH /api/v1/sms/templates/:uuid/reject`

---

## 13. مدیریت دسته‌بندی‌ها (Categories)

```
[صفحه دسته‌بندی‌ها]
  ├─► تب‌بندی بر اساس نوع:
  │      ├─ استان‌ها (state)
  │      ├─ شهرها (city) ──► وابسته به استان انتخابی
  │      ├─ تخصص‌ها (specialty)
  │      ├─ خدمات پزشک (doctor_service)
  │      ├─ نوع بیمه (insurance_type)
  │      ├─ بیمه تکمیلی (supplementary_insurance)
  │      └─ تگ‌های بلاگ (tag)
  │
  └─── هر تب:
        ├─ لیست با جستجو
        ├─ افزودن ──► [فرم: نام، کد، parent (اگر نیاز)]
        ├─ ویرایش
        └─ حذف ──► [Confirm Dialog]
```

**Pages:** `/admin/categories`

---

## 14. مدیریت بلاگ (Blog Management)

```
[لیست مقالات]
  ├─► فیلتر: وضعیت (draft/published) / نویسنده / تگ
  │
  ├─── ردیف مقاله ──►
  │      ├─ عنوان، نویسنده، تاریخ، تعداد بازدید
  │      ├─ مشاهده / ویرایش ──► [ادیتور مقاله]
  │      └─ حذف ──► [Confirm Dialog]
  │
  └─── دکمه «نوشتن مقاله» ──► [ادیتور]
        ├─ عنوان، خلاصه، محتوا (Rich Text)
        ├─ آپلود تصویر
        ├─ انتخاب تگ‌ها
        └─ انتشار / ذخیره پیش‌نویس
```

**Pages:** `/admin/blogs`, `/admin/blogs/new`, `/admin/blogs/:uuid/edit`

---

## 15. مدیریت منشی‌ها (Secretary Management)

```
[لیست منشی‌ها] (کلی، همه پزشکان)
  ├─► فیلتر: پزشک / وضعیت فعال
  │
  ├─── ردیف منشی ──►
  │      ├─ نام، موبایل، نام پزشک
  │      ├─ مشاهده دسترسی‌ها (JSON permissions)
  │      ├─ ویرایش دسترسی‌ها ──► [فرم Checkbox‌ها]
  │      │      appointments: view/create/cancel/update_status
  │      │      addresses: view/create/update/delete
  │      │      clinic_info: view/update
  │      │      insurances: view/create/update/delete
  │      ├─ فعال/غیرفعال
  │      └─ حذف ──► [Confirm Dialog]
```

**Pages:** `/admin/secretaries`

---

## 16. ساختار Navigation (Sidebar)

```
Sidebar
├─ 📊 داشبورد
├─ 👥 کاربران
├─ 🩺 پزشکان
├─ 🏥 کلینیک‌ها
├─ 📅 نوبت‌ها
├─ 💳 پرداخت‌ها
├─ 🏦 تسویه‌حساب            [badge: pending count]
├─ 🤝 نمایندگان
├─ 💬 نظرات                  [badge: pending count]
├─ ⭐ امتیازها
├─ 📱 پیامک
├─ 🗂 دسته‌بندی‌ها
├─ 📝 بلاگ
└─ 🔐 منشی‌ها
```

---

## 17. Global Components

| Component | توضیح |
|-----------|--------|
| `<DataTable>` | جدول با sort، filter، pagination |
| `<StatusBadge>` | نمایش وضعیت با رنگ‌بندی |
| `<ConfirmDialog>` | تأیید عملیات حساس |
| `<SearchInput>` | جستجوی debounced |
| `<FilterPanel>` | فیلترهای collapsible |
| `<ImageUpload>` | آپلود تصویر با preview |
| `<JalaliDatePicker>` | انتخاب تاریخ شمسی |
| `<PersianNumber>` | نمایش اعداد فارسی |
| `<Notification>` | Toast notifications |
| `<PermissionCheckbox>` | ماتریس دسترسی‌های منشی |

---

## 18. Auth Guard & Route Protection

```
[App Router]
  ├─ /login ──────────────────► PublicRoute (redirect to /admin/dashboard if logged in)
  └─ /admin/* ─────────────────► PrivateRoute
                                    ├─ Check JWT validity
                                    ├─ Verify ROLE_ADMIN
                                    ├─ Auto refresh token if expired
                                    └─ Redirect to /login if unauthenticated
```

---

## 19. State Management پیشنهادی

```
React Query (TanStack Query)  ──► همه API calls (cache + refetch)
Zustand                        ──► auth state، sidebar state، notification queue
React Hook Form + Zod          ──► همه فرم‌ها با validation
React Router v6                ──► routing
```
