# چک‌لیست — تسک ۰۰ب (سازگارسازی nobat724_front) **وضعیت کلی:** ⏳ شروع نشده **آخرین بازبینی:** — قواعد: [_shared/definition-of-done.md](../_shared/definition-of-done.md) · خط سرخ‌ها: [_shared/red-lines.md](../_shared/red-lines.md) · UI: [_shared/ui-conventions.md](../_shared/ui-conventions.md) --- ## ۰. خط سرخ — مسیر اسلاتی سایت | # | مورد | وضعیت | یادداشت | |---|---|---|---| | ۰.۱ | `adaptSlots()` یک خط هم عوض نشد | ⏳ | | | ۰.۲ | رندر تب‌های شیفت در حالت اسلاتی دست‌نخورده | ⏳ | | | ۰.۳ | مسیر رزرو اسلاتی سرتاسر دستی تست شد — بیت‌به‌بیت مثل قبل | ⏳ | سناریو ۳ | | ۰.۴ | کارت نوبت اسلاتی در پنل بدون تغییر | ⏳ | سناریو ۵ | ## ۱. پیش‌بررسی قرارداد API | # | مورد | وضعیت | یادداشت | |---|---|---|---| | ۱.۱ | `appointments/user` فیلد `service_items` دارد | ⏳ | اگر نه → به تسک ۰۰ برگردان | | ۱.۲ | `appointments/user` فیلد `service_total_minutes` دارد | ⏳ | همان | | ۱.۳ | هر `start_times[i]` فیلد `end_time` دارد | ⏳ | | | ۱.۴ | `total_duration_minutes` و `buffer_minutes` در پاسخ هستند | ⏳ | | | ۱.۵ | `exclude_appointment_uuid` روی `appointment-service-slots` کار می‌کند | ⏳ | تسک ۰۰ ساخته | ## ۲. انتخاب سرویس — دیزاین و منطق | # | مورد | وضعیت | یادداشت | |---|---|---|---| | ۲.۱ | چهار رنگ hard-code (`#3B3B3B` `#7A7A7A` `#5559CE` `bg-white`) حذف شد | ⏳ | | | ۲.۲ | کلاس‌ها از همان الگوی `location/` و `date/` کپی شد، توکن جدید ساخته نشد | ⏳ | | | ۲.۳ | ساختار DOM و رفتار toggle عوض نشد | ⏳ | فقط منبع رنگ | | ۲.۴ | محاسبهٔ `reduce` مدت از فرانت حذف شد | ⏳ | | | ۲.۵ | مدت از `total_duration_minutes` بک‌اند می‌آید | ⏳ | | | ۲.۶ | `fallbackSum` با `console.warn` — موقت، تسک مقصد حذفش ثبت شد | ⏳ | | | ۲.۷ | برچسب «مدت تقریبی» پیش از انتخاب روز، «مدت نوبت» پس از آن | ⏳ | | | ۲.۸ | انتخاب صفر سرویس → دکمهٔ ادامه غیرفعال با راهنمای فارسی | ⏳ | | | ۲.۹ | محل سرویسی بدون سرویس `bookable` → پیام روشن + پیشنهاد محل دیگر | ⏳ | | ## ۳. `adaptServiceSlots` شیفت‌آگاه | # | مورد | وضعیت | یادداشت | |---|---|---|---| | ۳.۱ | گروه‌بندی بر اساس شکاف زمانی پیاده شد | ⏳ | | | ۳.۲ | آستانه = `max(60, durationMin)` | ⏳ | وگرنه نوبت بلند به تب‌های تک‌عضوی می‌شکند | | ۳.۳ | برچسب واقعی `"HH:MM - HH:MM"` — نه «زمان‌های خالی» ثابت | ⏳ | | | ۳.۴ | `end_time` از پاسخ بک‌اند، `addMinutes` فقط fallback | ⏳ | | | ۳.۵ | کامنت: هیوریستیک است، راه دقیق endpoint تسک ۰۶ | ⏳ | | | ۳.۶ | `start_times` خالی → `[]` و پیام دلیل‌دار در UI | ⏳ | | ## ۴. پنل کاربر — سرویس، مدت، جابه‌جایی | # | مورد | وضعیت | یادداشت | |---|---|---|---| | ۴.۱ | `Card.js` نام سرویس‌ها را نشان می‌دهد (با شرط `&&`) | ⏳ | | | ۴.۲ | `Card.js` مدت را نشان می‌دهد (با شرط `&&`) | ⏳ | | | ۴.۳ | `DetailLg.js` و `DetailSm.js` هر دو | ⏳ | | | ۴.۴ | نوبت رزرو: فقط سرویس، بدون مدت | ⏳ | زمان ندارد | | ۴.۵ | نوبت سرویسی بدون `service_items` → «—»، بدون کرش | ⏳ | | | ۴.۶ | `services/response.js`: `serviceReschedule` اضافه شد | ⏳ | | | ۴.۷ | `services/response.js`: `getServiceSlotsForReschedule` با `exclude_appointment_uuid` | ⏳ | | | ۴.۸ | `ButtonData.js` دکمهٔ جابه‌جایی + مودال موجود | ⏳ | | | ۴.۹ | انتخابگر زمان: `components/appointment/date/` بازاستفاده شد، نه ساخت جدید | ⏳ | | | ۴.۱۰ | بیمار مدت وارد نمی‌کند — بک‌اند حساب می‌کند | ⏳ | | | ۴.۱۱ | خطای بک‌اند با پیام فارسی خودش نمایش داده می‌شود | ⏳ | نه «خطای نامشخص» | | ۴.۱۲ | پس از خطای تداخل، `refetchSlots()` اجرا می‌شود | ⏳ | | ## ۵. UI — قواعد سایت | # | مورد | وضعیت | یادداشت | |---|---|---|---| | ۵.۱ | تم MUI از `mui/index.js` — تم جدید ساخته نشد | ⏳ | | | ۵.۲ | فونت فقط Vazir — فونت جدید اضافه نشد | ⏳ | | | ۵.۳ | دارک‌مود صفحات عمومی (`data-theme`) بررسی شد | ⏳ | سناریو ۲ | | ۵.۴ | دارک‌مود پنل (`class`) بررسی شد | ⏳ | سناریو ۷ — مکانیزم متفاوت | | ۵.۵ | کامپوننت موازی ساخته نشد؛ `components/appointment/*` توسعه یافت | ⏳ | | | ۵.۶ | RTL بررسی شد (`ms/me` نه `ml/mr`) | ⏳ | | | ۵.۷ | موبایل بررسی شد — بدون اسکرول افقی | ⏳ | سناریو ۱۰ | | ۵.۸ | تاریخ‌ها شمسی با `jalali-moment` | ⏳ | | | ۵.۹ | همهٔ رشته‌ها فارسی | ⏳ | | | ۵.۱۰ | صفحاتی که دست خوردند `generateMetadata` و `await params` سالم دارند | ⏳ | | | ۵.۱۱ | دامنه گسترش نیافت — صفحهٔ رزرو بازطراحی نشد | ⏳ | انحراف بقیهٔ مراحل، اگر بود، ⚠️ ثبت شود | ## ۶. تست دستی — ده سناریو | # | سناریو | وضعیت | یادداشت | |---|---|---|---| | ۶.۱ | رزرو سرویسی کامل تا پیامک | ⏳ | | | ۶.۲ | همان در دارک‌مود عمومی | ⏳ | | | ۶.۳ | رزرو اسلاتی کامل — بدون تغییر | ⏳ | ⛔ خط سرخ | | ۶.۴ | پزشک دو-شیفته سرویسی → دو تب با برچسب واقعی | ⏳ | | | ۶.۵ | پنل با نوبت اسلاتی تنها → بدون تغییر | ⏳ | | | ۶.۶ | پنل با نوبت سرویسی → سرویس و مدت | ⏳ | | | ۶.۷ | پنل در دارک‌مود | ⏳ | | | ۶.۸ | جابه‌جایی سرویسی → مدت حفظ | ⏳ | | | ۶.۹ | جابه‌جایی به زمان اشغال → پیام فارسی + refetch | ⏳ | | | ۶.۱۰ | همهٔ موارد بالا روی موبایل | ⏳ | | | ۶.۱۱ | تست واحد `adaptServiceSlots` (پنج حالت) | ⏳ | تابع خالص، بهترین کاندید | ## ۷. مستندات | # | مورد | وضعیت | یادداشت | |---|---|---|---| | ۷.۱ | `nobat724_front/CLAUDE.md` بخش «حالت‌های نوبت‌دهی» | ⏳ | | | ۷.۲ | یادداشت هیوریستیک شیفت در `clinicpro/docs/api/appointment.md` | ⏳ | | ## ۸. بازبینی پایانی | # | مورد | وضعیت | یادداشت | |---|---|---|---| | ۸.۱ | همهٔ ردیف‌های بالا وضعیت نهایی دارند (هیچ 🔄 و ⏳ بی‌دلیل) | ⏳ | | | ۸.۲ | `npm run build` بدون خطا | ⏳ | | | ۸.۳ | `npm run lint` بدون خطای جدید | ⏳ | | | ۸.۴ | ده سناریوی دستی بخش ۶ اجرا شد | ⏳ | | | ۸.۵ | چک‌لیست UI (بخش ۵) کامل شد | ⏳ | | | ۸.۶ | `clinic-pro-tauri` دستی بررسی شد — قرارداد مشترک نشکسته | ⏳ | همان `service_item` تکی | | ۸.۷ | commit شد، سپس `graphify update .` | ⏳ | | | ۸.۸ | موارد به‌تعویق‌افتاده با دلیل و تسک مقصد ثبت شدند | ⏳ | `fallbackSum` |