feat: enhance resource calendar validation and UI

- Implement real-time validation for overlapping shifts in the ResourceWorkingHoursPanel.
- Remove the copy shift functionality to simplify the UI and prevent confusion.
- Introduce ResourceExceptionsCard to manage resource exceptions, including leave and maintenance.
- Update ClinicAppointmentSettingsPage to utilize new components and improve tab navigation for resource management.
- Add comprehensive validation tests for resource calendar to ensure overlapping shifts are correctly handled.
- Update API documentation to reflect new validation error messages and rules.
This commit is contained in:
hamed
2026-08-03 09:37:22 +03:30
parent c42679d98c
commit 348e1cf517
9 changed files with 535 additions and 289 deletions
+16
View File
@@ -58,6 +58,22 @@
{ "days": { "0": [{ "start_minute": 540, "end_minute": 1020 }] } }
```
### خطاهای اعتبارسنجی (۴۲۲)
| شرط | `field` | پیام |
|---|---|---|
| `start_minute`/`end_minute` نبود یا عدد نبود | همان فیلد | `در روز شنبه مقدار start_minute الزامی است` |
| خارج از `0..1440` | همان فیلد | `در روز شنبه مقدار end_minute باید بین ۰ و ۱۴۴۰ باشد` |
| `end <= start` | `end_minute` | `در روز شنبه، پایان شیفت باید بعد از شروع آن باشد` |
| دو بازهٔ متداخل در یک روز | `start_minute` | `شیفت‌های روز شنبه با هم تداخل دارند — بازه‌ها نباید هم‌پوشانی داشته باشند` |
پیام‌ها **نام روز** را می‌گویند نه اندیس عددی را، چون مستقیم به کاربر نشان داده می‌شوند.
هم‌پوشانی پس از مرتب‌سازی بازه‌ها بررسی می‌شود، پس ترتیب ارسال مهم نیست و تداخل بین
بازهٔ اول و سوم هم گرفته می‌شود. مرزِ چسبیده هم‌پوشانی **نیست**: `09:0013:00` کنار
`13:0017:00` معتبر است (شیفت صبح و عصر). پنل ادمین همین قواعد را حین ویرایش هم اجرا
می‌کند و تا رفع تداخل، دکمهٔ ذخیره را غیرفعال نگه می‌دارد؛ ولی مرجع نهایی سرور است.
---
## استثناها — مرخصی، غیبت، سرویس، تعطیلی موردی