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.
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
# خط سرخها — قواعدی که هیچ تسکی نمیتواند نقض کند
|
||||
|
||||
این فایل بالای هر تسک حاکم است. اگر تسکی با اینها تناقض داشت، **این فایل برنده است** و
|
||||
تسک باید اصلاح شود، نه این فایل.
|
||||
|
||||
---
|
||||
|
||||
## ۱. ⛔ نوبتدهی اسلاتی به هیچ عنوان دستکاری نمیشود
|
||||
|
||||
`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` — حتی اگر منطقی به نظر برسد
|
||||
|
||||
### اجبار خودکار
|
||||
|
||||
هر تسک باید این تست را سبز نگه دارد:
|
||||
|
||||
```bash
|
||||
ddev exec php bin/phpunit --group=slot-mode-frozen
|
||||
```
|
||||
|
||||
و در `tests/Appointment/SlotModeFrozenTest.php`:
|
||||
|
||||
```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](ui-conventions.md)
|
||||
|
||||
---
|
||||
|
||||
## ۴. ☑️ هیچ تسکی بدون تکمیل چکلیستش تمام نیست
|
||||
|
||||
هر تسک یک `checklist.md` دارد. پیش از اعلام پایان، **همهٔ** ردیفها باید وضعیت نهایی
|
||||
داشته باشند و هیچ ردیفی در `🔄` یا `⏳` نماند.
|
||||
قالب و قواعد: [definition-of-done.md](definition-of-done.md)
|
||||
Reference in New Issue
Block a user