- 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.
4.6 KiB
خط سرخها — قواعدی که هیچ تسکی نمیتواند نقض کند
این فایل بالای هر تسک حاکم است. اگر تسکی با اینها تناقض داشت، این فایل برنده است و تسک باید اصلاح شود، نه این فایل.
۱. ⛔ نوبتدهی اسلاتی به هیچ عنوان دستکاری نمیشود
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