- Add implementation notes for cancellation and waitlist features. - Create task documentation outlining goals, current status, and acceptance criteria for cancellation policy and resource utilization reporting. - Establish architecture for domain events and outbox pattern to ensure reliable event publishing. - Define database schema for domain events and necessary queries for resource utilization and plan accuracy reports. - Implement detailed implementation notes covering edge cases, testing strategies, and documentation requirements.
5.0 KiB
5.0 KiB
تسک ۰۳ — تقویم منبع، استثنا، تعطیلات ملی
فاز: ۱ (هسته) · وابستگی: ۰۱، ۰۲ · زمان: ۱۲-۱۴ ساعت
هدف
مستند بند ۹ ساعت آزاد را از کسر هفت لایه میسازد. امروز چهار لایه داریم و همه روی پزشک سوارند. این تسک لایههای غایب را اضافه میکند و آنها را روی منبع مینشاند:
ساعت کاری شعبه ← تسک ۰۱ ساخت، اینجا وارد محاسبه میشود
– شیفت منبع ← این تسک
– تعطیلات رسمی کشور ← این تسک
– مرخصی و غیبت ← این تسک
– سرویس دورهای دستگاه ← این تسک (همان جدول استثنا با نوع دیگر)
– نوبتهای ثبتشده ← موجود (تسک ۰۷ به resource_occupancy منتقل میکند)
– رزروهای موقت ← موجود
– آمادهسازی و تمیزکاری ← تسک ۰۲ ستونها را ساخت، تسک ۰۶ اعمال میکند
وضعیت فعلی
WeeklySchedule— JSON هفتگی per(doctor, clinic)باsessions[]DateOverride— تنظیم یک روز خاص per(doctor, clinic)Holiday— بازهٔ تعطیلی per(doctor, clinic)، دستی- جدول تعطیلات رسمی کشور وجود ندارد؛ هر پزشک باید دستی ثبت کند
دامنه
هست: ResourceCalendar (شیفت تکرارشوندهٔ منبع)، ResourceException (مرخصی، غیبت،
سرویس دورهای، تعطیلی موردی)، NationalHoliday (جدول کشوری با import شمسی) و
TenantHolidayOverride (کلینیکی که پنجشنبه کار میکند)، و یک سرویس واحد
ResourceAvailabilityService که «ساعت آزاد یک منبع در یک بازه» را میدهد.
نیست: تقاطع چند منبع و برنامهٔ چندبخشی (تسک ۰۶)، ثبت اشغال (تسک ۰۷).
Endpoint ها
| متد | مسیر | توضیح |
|---|---|---|
| GET | /api/v1/resource/{uuid}/calendar |
شیفتهای هفتگی منبع |
| PUT | /api/v1/resource/{uuid}/calendar |
جایگزینی کامل شیفتها |
| GET | /api/v1/resource/{uuid}/exceptions |
مرخصی/سرویس، با فیلتر بازه |
| POST | /api/v1/resource/{uuid}/exception |
ثبت استثنا |
| PATCH/DELETE | /api/v1/resource-exception/{uuid} |
|
| GET | /api/v1/resource/{uuid}/availability?from&to |
ساعت آزاد خام (بدون نوبت) — برای پنل |
| GET | /api/v1/national-holidays?year=1405 |
تعطیلات رسمی سال |
| POST | /api/v1/holiday-overrides |
تغییر تعطیلی رسمی توسط محیط |
| DELETE | /api/v1/holiday-override/{uuid} |
معیار پذیرش
- ✅ موفق: منبع «اپراتور مریم» شیفت شنبه تا چهارشنبه ۹:۰۰-۱۷:۰۰ میگیرد →
GET /resource/{uuid}/availability?from=…&to=…پنج بازه برمیگرداند و جمعه خالی است. - ✅ موفق: مرخصی سهشنبه ثبت میشود → همان endpoint سهشنبه را خالی میدهد.
- ✅ موفق: تعطیل رسمی ۱۳ فروردین در
national_holidaysهست → آن روز برای همهٔ منابع همهٔ محیطها خالی است، بدون هیچ ثبت دستی. - ✅ موفق: کلینیکی که پنجشنبه کار میکند یک
holiday_overrideباis_working=trueثبت میکند → فقط منابع همان محیط پنجشنبه باز میشوند. - ❌ خطا: شیفت با
end_minute <= start_minute→422. - ❌ خطا: استثنا با
end < start→422؛ استثنا روی منبع محیط دیگر →404. - ⚠️ مرزی: شیفت منبع بیرون از ساعت کاری شعبه → تقاطع گرفته میشود، نه رد. اگر تقاطع
خالی شد، پاسخ
availabilityآن روز را خالی میدهد و دلیلoutside_branch_hoursرا برمیگرداند. - ⚠️ مرزی: شعبهٔ بدون ساعت کاری → شیفت منبع بیقید اعمال میشود (سازگاری با دادههای موجود).
- ⚠️ مرزی: استثنای نیمروزه (۱۴:۰۰ تا ۱۸:۰۰) → فقط همان بازه کسر میشود، نه کل روز.
- ⚠️ مرزی: دو استثنای همپوشان → مجاز، اتحاد گرفته میشود.
خروجی
src/Resource/Calendar/+src/Resource/Service/ResourceAvailabilityService.php- صفحات:
ResourceCalendarPage.tsx,ResourceExceptionsPage.tsx,HolidaysSettingsPage.tsx docs/api/resource-calendar.md- دستور
app:holiday:import --year=1405برای بارگذاری تعطیلات رسمی