Files
clinicpro/docs/new_feture/taskes/task-00-service-mode-completion/checklist.md
T
hamed 158dcb58aa feat: implement service mode completion for nobat724_front
- Add task for completing service mode in clinicpro with detailed objectives and acceptance criteria.
- Create architecture documentation for task 00b, outlining involved components and necessary changes.
- Develop checklist for task 00b to ensure all requirements are met.
- Document implementation notes for task 00b, emphasizing API contract checks and design system adherence.
- Update task documentation for task 00b, specifying goals and current issues with service mode.
2026-07-30 11:56:08 +03:30

8.0 KiB
Raw Blame History

چک‌لیست — تسک ۰۰ (تکمیل نوبت‌دهی سرویسی در clinicpro)

وضعیت کلی: شروع نشده آخرین بازبینی:

قواعد: _shared/definition-of-done.md · خط سرخ‌ها: _shared/red-lines.md · UI: _shared/ui-conventions.md


۰. خط سرخ — منطق اسلاتی

# مورد وضعیت یادداشت
۰.۱ SlotModeFrozenTest + سه fixture ساخته شد پیش از هر تغییر کد ترتیب مهم است
۰ fixture ها با تاریخ ثابت‌اند، نه time()
۰ کامنت «read-only، هیچ تسکی به‌روزش نمی‌کند» بالای هر سه fixture
۰ هیچ متد موجود SlotCalculatorService ویرایش نشد فقط پارامتر اختیاری excludeAppointmentId روی getServiceStartTimes
۰.۵ GET /appointment-slots بیت‌به‌بیت دست‌نخورده
۰ GET /month-availability/{doctorUuid} دست‌نخورده
۰.۷ active_slot_key و refreshActiveSlotKey() دست‌نخورده تنها استثنا: صدا زدنش در setIsReserve
۰ isSlotTaken امضا و معنا دست‌نخورده
۰ --group=slot-mode-frozen در پایان سبز

۱. بک‌اند

# مورد وضعیت یادداشت
۱.۱ ServiceBookingCalculator ساخته شد
۱ serviceSlots() موجود از آن استفاده می‌کند، خروجی‌اش عوض نشده
۱ جمع سادهٔ += حفظ شد (اصلاحش تسک ۰۴ است)
۱ ServiceRescheduleService + POST /appointment/{uuid}/service-reschedule
۱.۵ PATCH /appointment/{uuid} توسعه یافت — منطق جدید داخل isServiceMode()
۱ PATCH مقدار service_item_uuids[] می‌پذیرد
۱.۷ ReserveConversionService + POST /appointment/{uuid}/convert-reserve
۱ نوبت رزرو در حالت سرویسی سرویس‌ها را ذخیره می‌کند
۱ excludeAppointmentId روی getServiceStartTimes و findBusyIntervals همان الگوی isSlotTaken
۱.۱۰ Appointment::replaceServiceItems() + currentServiceUuids()
۱.۱۱ replaceServiceItems مقدار serviceItem تکی را هم‌گام می‌کند چهار مصرف‌کننده رویش خوانده‌اند
۱.۱۲ setIsReserve() صدا زدن refreshActiveSlotKey()
۱.۱۳ اعتبارسنجی زمان با عضویت در getServiceStartTimes، نه فقط isSlotTaken
۱.۱۴ TenantOwnershipChecker روی همهٔ uuid های سرویس، پیش از هر بررسی دیگر
۱.۱۵ allowInactive فقط برای سرویس‌های موجود نوبت، نه uuid های تازه
۱.۱۶ کنترلر نازک ماند — منطق در سرویس

۲. دیتابیس و مهاجرت

# مورد وضعیت یادداشت
۲.۱ service_total_minutes و service_buffer_minutes (تهی‌پذیر)
۲.۲ هیچ ستون موجودی حذف/تغییر نوع/تغییر معنا نداد
۲.۳ دو کد خطای جدید در ErrorCodes.php با پیام فارسی شمارهٔ واقعی از خود فایل
۲.۴ app:appointment:backfill-service-duration — dry-run پیش‌فرض، idempotent
۲.۵ backfill مقدار را از خود نوبت می‌گیرد، نه بازمحاسبه از سرویس‌ها
۲.۶ migration اجرا شد و TenantSchemaCoverageTest سبز

۳. UI — پنل ادمین

# مورد وضعیت یادداشت
۳.۱ AppointmentEditPage: حالت سرویسی ServiceSlotPicker نشان می‌دهد
۳.۲ AppointmentEditPage: حالت اسلاتی دقیقاً رفتار امروز سه فیلد ساعت
۳.۳ ورودی دستی ساعت در حالت سرویسی پنهان، نه disabled
۳.۴ ServiceSlotPicker موجود بازاستفاده شد؛ نسخهٔ موازی ساخته نشد فقط prop excludeAppointmentUuid
۳.۵ ReserveAppointmentsPage: سرویس‌ها + دکمهٔ تبدیل
۳.۶ ReserveAppointmentsPage از جدول خام به DataTable مهاجرت کرد <td style={td}> حذف شد
۳.۷ مدت و بافر فارسی با واحد: «۳۵ دقیقه (+۱۰ دقیقه فاصله)»
۳.۸ هیچ رنگ/شعاع/سایهٔ hard-code — همه از توکن‌های styles.css
۳.۹ دارک‌مود (data-theme="dark") بررسی شد
۳.۱۰ حالت فشرده (data-density="compact") بررسی شد
۳.۱۱ انتخاب چند سرویس با SearchableSelect؛ هیچ <select> بومی
۳.۱۲ backTo/BackButton روی هر دو صفحه
۳.۱۳ وضعیت لیست رزروها در URL با useUrlState
۳.۱۴ تاریخ با PersianDateInput · مبلغ با formatRial
۳.۱۵ RTL بررسی شد (ms/me نه ml/mr)
۳.۱۶ موبایل بررسی شد — بدون اسکرول افقی
۳.۱۷ همهٔ رشته‌ها فارسی و از i18n
۳.۱۸ داده با TanStack Query و استخراج envelope درست

۴. تست

# مورد وضعیت یادداشت
۴.۱ SlotModeFrozenTest — سه سنجه
۴.۲ ServiceBookingCalculatorTest — موفق/خطا/مرزی
۴.۳ ServiceRescheduleTest — شامل «حذف سرویس → مدت خودکار»
۴.۴ PatchServiceDurationTest — شامل «در حالت اسلاتی هیچ‌کدام اجرا نمی‌شود»
۴.۵ ConvertReserveTest — شامل active_slot_key و رقابت
۴.۶ ServiceModeSectionDurationTest موجود سبز ماند
۴.۷ BookingTenantTest موجود سبز ماند
۴.۸ AppointmentEditPage.test.tsx — دو حالت

۵. مستندات

# مورد وضعیت یادداشت
۵.۱ docs/api/appointment.md — دو endpoint جدید + توسعهٔ PATCH
۵ ماتریس «کدام endpoint در کدام حالت»
۵ docs/architecture/booking-modes.md ساخته شد تسک ۰۶ حالت سوم را اضافه می‌کند
۵ دو کد خطای جدید مستند شد

۶. بازبینی پایانی

# مورد وضعیت یادداشت
۶.۱ همهٔ ردیف‌های بالا وضعیت نهایی دارند (هیچ 🔄 و بی‌دلیل)
۶.۲ ddev exec php bin/phpunit کامل سبز
۶.۳ ddev exec php bin/phpunit --group=slot-mode-frozen سبز
۶.۴ phpstan analyse بدون خطای جدید
۶.۵ npx tsc --noEmit بدون خطا
۶.۶ yarn test سبز
۶.۷ TenantSchemaCoverageTest + TenantLookupInventoryTest سبز
۶.۸ docs/api/* به‌روز شد
۶.۹ چک‌لیست UI (بخش ۳) کامل شد
۶.۱۰ nobat724_front و clinic-pro-tauri دستی بررسی شدند service_item تکی هم‌گام است؟
۶.۱۱ commit شد، سپس graphify update .
۶.۱۲ موارد به‌تعویق‌افتاده با دلیل و تسک مقصد ثبت شدند