# رفع فیلتر وضعیت در «نوبت‌های من» (نوبت ثبت‌شده نمایش داده نمی‌شود)

## پروژه

`nobat724_front` (سایت عمومی، داشبورد کاربر).

> این باگ کاملاً frontend است. بک‌اند درست کار می‌کند: `GET /api/v1/appointments/user?status=<status>` نوبت‌های کاربر فعلی را برمی‌گرداند و فیلتر `status` را روی مقادیر واقعی نوبت اعمال می‌کند.

## زمینه

کاربر در nobat724 نوبت گرفته (وضعیت `confirmed`) ولی در «نوبت‌های من» (تب‌های تاریخچه نوبت) چیزی نمایش داده نمی‌شود. ریشه‌یابی نشان داد بک‌اند نوبت را درست برمی‌گرداند؛ مشکل این است که تب‌های فیلتر در frontend مقادیر `status` نادرستی به API می‌فرستند که با وضعیت‌های واقعی بک‌اند مطابقت ندارند، پس هر تب جز «همه» نتیجه‌ی خالی می‌دهد.

تأیید با داده‌ی واقعی:
- `GET /api/v1/appointments/user?status=reserved` → **۰ نوبت** (مقدار `reserved` در بک‌اند وجود ندارد).
- `GET /api/v1/appointments/user?status=confirmed` → **۴ نوبت** (مقدار درست).

## مشکل / هدف

تب‌های `Head.js` این مقادیر را می‌فرستند:
`waiting_for_payment`, `reserved`, `visited`, `auto_cancel_unpaid`, `completed`

اما وضعیت‌های واقعی نوبت در بک‌اند (همان‌هایی که `List.js` در `STATUS_LABELS` می‌شناسد و `Appointment` entity تعریف می‌کند):
`pending`, `confirmed`, `completed`, `cancelled_by_user`, `cancelled_by_doctor`, `expired`, `no_show`

هدف: نگاشت تب‌ها به مقادیر واقعی + هماهنگ‌کردن برچسب‌ها، تا فیلتر درست کار کند.

## فایل‌های مرتبط

| فایل | نقش |
|------|-----|
| `components/dashboard/userAccount/sidebars/turns/Head.js` | تب‌های فیلتر — `listTab` و `statusMap` نادرست |
| `components/dashboard/userAccount/sidebars/turns/List.js` | `STATUS_LABELS` (مرجع مقادیر واقعی — درست است) |
| `components/dashboard/userAccount/sidebars/turns/index.js` | `Turns` — `status` را به `getMyAppointments` پاس می‌دهد (درست است، تغییر لازم ندارد) |

## وضعیت فعلی (کد واقعی)

`Head.js` — نگاشت نادرست:
```jsx
const listTab = ["همه", "در انتظار پرداخت", "رزرو شده", "ویزیت شده", "لغو خودکار", "تکمیل شده"];

const statusMap = {
  0: undefined,                  // all
  1: "waiting_for_payment",      // ❌ بک‌اند: pending
  2: "reserved",                 // ❌ بک‌اند: confirmed
  3: "visited",                  // ❌ بک‌اند: completed (یا no_show)
  4: "auto_cancel_unpaid",       // ❌ بک‌اند: expired
  5: "completed",                // فقط این یکی تصادفاً درست است
};
```

`List.js` — مقادیر واقعی (مرجع درست):
```jsx
const STATUS_LABELS = {
  pending: "در انتظار پرداخت",
  confirmed: "تأیید شده",
  completed: "انجام شده",
  cancelled_by_user: "لغو شده",
  cancelled_by_doctor: "لغو توسط پزشک",
  expired: "منقضی شده",
  no_show: "عدم مراجعه",
};
```

## وظایف

### ۱. اصلاح نگاشت تب‌ها در `Head.js`
`listTab` و `statusMap` را با وضعیت‌های واقعی بک‌اند هماهنگ کن. تب‌های پیشنهادی (برچسب فارسی ← مقدار واقعی API):
```jsx
const listTab = ["همه", "در انتظار پرداخت", "تأیید شده", "انجام شده", "لغو شده", "منقضی شده"];

const statusMap = {
  0: undefined,              // همه
  1: "pending",
  2: "confirmed",
  3: "completed",
  4: "cancelled_by_user",
  5: "expired",
};
```
- برچسب‌ها باید با `STATUS_LABELS` در `List.js` یک‌دست باشند (مثلاً `confirmed` → «تأیید شده»).
- اگر می‌خواهی «لغو توسط پزشک» و «عدم مراجعه» هم فیلتر شوند، می‌توانی تب اضافه کنی؛ ولی چون فیلتر بک‌اند فقط یک مقدار `status` می‌گیرد، هر تب باید دقیقاً یک مقدار معتبر بفرستد.

### ۲. تأیید جریان
- `index.js`: `if (status) params.status = status;` — وقتی `undefined` باشد (تب «همه») پارامتر ارسال نمی‌شود و همه‌ی نوبت‌ها می‌آیند. این درست است؛ تغییر نده.
- مطمئن شو تب پیش‌فرض «همه» (index 0 → `undefined`) است تا در اولین بارگذاری همه‌ی نوبت‌ها (از جمله `confirmed`) نمایش داده شوند.

## نکات مهم

- **بک‌اند تغییر نمی‌کند.** مقادیر معتبر `status` دقیقاً ثابت‌های `Appointment` هستند: `pending`, `confirmed`, `completed`, `cancelled_by_user`, `cancelled_by_doctor`, `expired`, `no_show`. هر مقدار دیگری → لیست خالی.
- پاسخ `appointments/user` دابل‌نِست است (`success(['data'=>...])`)؛ `index.js` درست با `response.data.data` می‌خواند — دست نزن.
- تاریخ/ساعت در `List.js` با `convertTimestampToJalali`/`convertTimestampToTime` از `slot_start` (Unix ثانیه) ساخته می‌شود — درست است.
- App Router، RTL، فونت Vazir، MUI v5؛ از کامپوننت `Tabs` موجود استفاده کن.
- بعد از تغییر: `npm run build` بدون خطا؛ در داشبورد همه‌ی تب‌ها را تست کن (به‌ویژه «تأیید شده» که باید نوبت confirmed را نشان دهد، و «همه» که همه را نشان دهد).
