Files
clinicpro/docs/new_feture/taskes/_shared/red-lines.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

4.6 KiB
Raw Blame History

خط سرخ‌ها — قواعدی که هیچ تسکی نمی‌تواند نقض کند

این فایل بالای هر تسک حاکم است. اگر تسکی با این‌ها تناقض داشت، این فایل برنده است و تسک باید اصلاح شود، نه این فایل.


۱. نوبت‌دهی اسلاتی به هیچ عنوان دست‌کاری نمی‌شود

booking_mode = 'slot' منطق تولیدیِ زنده است. در هیچ تسکی از این فاز نه رفتارش، نه امضایش، نه خروجی‌اش تغییر نمی‌کند.

فایل‌ها و مسیرهای قفل‌شده

فایل / مسیر چه چیزی قفل است
src/Appointment/Service/SlotCalculatorService.php متدهای getAvailableSlots، getAllSlotsWithAvailability، hasAnyAvailability، findNextAvailableStart، buildSessionSlots، buildAllSessions، filterBookedSlots، isWithinBookingWindowهیچ‌کدام ویرایش نمی‌شوند
GET /api/v1/appointment-slots قرارداد request/response
GET /api/v1/appointment-settings/month-availability/{doctorUuid} قرارداد
Appointment::active_slot_key و refreshActiveSlotKey() مکانیزم یکتایی موجود
AppointmentRepository::isSlotTaken امضا و معنا
WeeklySchedule::MODE_SLOT و DEFAULT_META['booking_mode'] مقدار پیش‌فرض slot می‌ماند

چه چیزی مجاز است

  • افزودن متد جدید به SlotCalculatorService — بدون تغییر متدهای موجود
  • افزودن کلاس/سرویس موازی (مثل AvailabilityEngine تسک ۰۶)
  • افزودن کلید جدید به WeeklySchedule.meta — با حفظ پیش‌فرض‌های موجود
  • افزودن ستون تهی‌پذیر به appointments

چه چیزی ممنوع است

  • تغییر امضای هر متد موجود در SlotCalculatorService
  • تغییر شکل خروجی appointment-slots (حتی افزودن فیلد، اگر ترتیب/نوع فیلدهای موجود عوض شود)
  • «یکدست‌سازی» یا refactor مسیر اسلاتی
  • حذف active_slot_key یا is_reserve
  • اعمال قوانین جدید (تسک ۰۹) روی حالت slot — حتی اگر منطقی به نظر برسد

اجبار خودکار

هر تسک باید این تست را سبز نگه دارد:

ddev exec php bin/phpunit --group=slot-mode-frozen

و در tests/Appointment/SlotModeFrozenTest.php:

/** @group slot-mode-frozen */
public function testSlotModeContractUnchanged(): void
{
    // snapshot خروجی appointment-slots برای یک برنامهٔ ثابت
    // هر تغییری در شکل پاسخ، این تست را قرمز می‌کند
    self::assertJsonStringEqualsJsonFile(
        __DIR__ . '/fixtures/slot-mode-contract.json',
        $this->client->getResponse()->getContent()
    );
}

fixture در تسک ۰۰ ساخته می‌شود و هیچ تسکی اجازهٔ به‌روزرسانی‌اش را ندارد.


۲. نوبت‌دهی سرویسی در همین فاز کامل می‌شود

booking_mode = 'service' نیمه‌کاره است: در مسیر رزرو (سایت و درawer پنل) کار می‌کند، ولی در ویرایش نوبت، نوبت رزرو، و بخشی از پنل بیمار غایب است.

تکمیلش پیش‌نیاز بقیهٔ فاز است، نه موازی با آن:

تسک ۰۰  تکمیل نوبت‌دهی سرویسی در clinicpro
تسک ۰۰ب سازگارسازی nobat724_front با وضعیت فعلی
        ↓
تسک ۰۱ به بعد (موتور چندمنبعی)

دلیل ترتیب: اگر حالت resource (تسک ۰۶) روی حالت service نیمه‌کاره ساخته شود، هر باگ موجود سرویسی به موتور جدید ارث می‌رسد و تشخیص منبعش غیرممکن می‌شود.


۳. 🎨 هر صفحه یا بخش جدید، عیناً با دیزاین‌سیستم موجود

هیچ طراحی جدید، هیچ کامپوننت موازی، هیچ رنگ hard-code. جزئیات کامل و چک‌لیست: ui-conventions.md


۴. ☑️ هیچ تسکی بدون تکمیل چک‌لیستش تمام نیست

هر تسک یک checklist.md دارد. پیش از اعلام پایان، همهٔ ردیف‌ها باید وضعیت نهایی داشته باشند و هیچ ردیفی در 🔄 یا نماند. قالب و قواعد: definition-of-done.md