Add checklists for tasks 11 to 14 covering credit ledger, treatment course, cancellation policies, and event utilization
- Created checklist for task 11: Package and Credit Ledger - Created checklist for task 12: Treatment Course - Created checklist for task 13: Cancellation Policy, No-Show, and Waitlist - Created checklist for task 14: Domain Events and Utilization Reports
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
# چکلیست — تسک ۰۳ (تقویم منبع، استثنا، تعطیلات ملی)
|
||||
|
||||
**وضعیت کلی:** ⏳ شروع نشده · **آخرین بازبینی:** —
|
||||
|
||||
قواعد: [_shared/definition-of-done.md](../_shared/definition-of-done.md) ·
|
||||
[red-lines.md](../_shared/red-lines.md) · [ui-conventions.md](../_shared/ui-conventions.md)
|
||||
|
||||
---
|
||||
|
||||
## ۰. خط سرخ
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۰.۱ | `--group=slot-mode-frozen` سبز | ⏳ | |
|
||||
| ۰.۲ | `SlotCalculatorService` **هیچ** تغییری نکرد | ⏳ | `ResourceAvailabilityService` سرویس موازی است |
|
||||
| ۰.۳ | `WeeklySchedule` · `DateOverride` · `Holiday` موجود دستنخورده | ⏳ | |
|
||||
| ۰.۴ | `HolidayResolver` به مسیر اسلاتی **وصل نشد** | ⏳ | تغییر رفتاری است؛ تسک جدا با تأیید محصول |
|
||||
|
||||
## ۱. `IntervalSet` — اول از همه
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۱.۱ | `src/Shared/Time/IntervalSet.php` ساخته شد **پیش از** entity ها | ⏳ | |
|
||||
| ۱.۲ | قرارداد نیمباز `[start, end)` همهجا | ⏳ | |
|
||||
| ۱.۳ | `IntervalSetTest` — هفت حالت مرزی سند | ⏳ | واحد، بدون DB |
|
||||
| ۱.۴ | هر جای دیگری که بازه جمع/کم میکند از همین استفاده میکند | ⏳ | نه پیادهسازی دوم |
|
||||
|
||||
## ۲. بکاند
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۲.۱ | `ResourceCalendar` · `ResourceException` | ⏳ | |
|
||||
| ۲.۲ | `NationalHoliday` · `TenantHolidayOverride` | ⏳ | |
|
||||
| ۲.۳ | `ResourceAvailabilityService::rawWindows()` + `explainEmptyDay()` | ⏳ | پنج دلیل خالیبودن |
|
||||
| ۲.۴ | `HolidayResolver::isClosedFor()` — تنها نقطهٔ ترکیب | ⏳ | |
|
||||
| ۲.۵ | ترتیب تعطیلی: ملی + override محیط؛ منبع فقط میبندد نه باز میکند | ⏳ | |
|
||||
| ۲.۶ | شعبهٔ بدون ساعت کاری = بیقید، **نه بسته** | ⏳ | همان تصمیم تسک ۰۱ |
|
||||
| ۲.۷ | `union` استثناها بعد `subtract` — نه کسر پشتسرهم | ⏳ | |
|
||||
| ۲.۸ | تبدیل روز هفته `(w+1)%7` عیناً مثل `SlotCalculatorService:359` | ⏳ | دو قرارداد = باگ قطعی |
|
||||
| ۲.۹ | `DateTimeZone` صریح از `branch.timezone`، نه `date()` خالی | ⏳ | |
|
||||
| ۲.۱۰ | نُه endpoint | ⏳ | |
|
||||
| ۲.۱۱ | `app:holiday:import --year=` — idempotent | ⏳ | |
|
||||
| ۲.۱۲ | `app:resource:calendar:backfill` از `WeeklySchedule` — dry-run | ⏳ | |
|
||||
|
||||
## ۳. کارایی
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۳.۱ | `rawWindows` برای ۹۰ روز **دقیقاً ۵ کوئری** | ⏳ | |
|
||||
| ۳.۲ | `AvailabilityQueryCountTest` عدد را قفل میکند | ⏳ | وگرنه اولین refactor میشکند |
|
||||
| ۳.۳ | هیچ کوئری داخل حلقهٔ روز | ⏳ | |
|
||||
| ۳.۴ | `idx_rex_resource_range` ساخته شد | ⏳ | |
|
||||
|
||||
## ۴. دیتابیس
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۴.۱ | چهار جدول | ⏳ | |
|
||||
| ۴.۲ | `valid_from`/`valid_to` روی شیفت از روز اول | ⏳ | شیفت فصلی |
|
||||
| ۴.۳ | نوع `blocked` در استثناها هست | ⏳ | تفکیک از مرخصی برای گزارش تسک ۱۴ |
|
||||
| ۴.۴ | `national_holidays` در `GlobalTables::ENTITIES` با دلیل | ⏳ | |
|
||||
| ۴.۵ | `resource_calendars` در `AGGREGATE_CHILDREN` | ⏳ | |
|
||||
| ۴.۶ | `TenantSchemaCoverageTest` سبز | ⏳ | |
|
||||
|
||||
## ۵. UI
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۵.۱ | `ResourceCalendarPage` · `ResourceExceptionsPage` · `HolidaysSettingsPage` | ⏳ | |
|
||||
| ۵.۲ | گرید هفتروزه با فرم ساده (بدون drag) | ⏳ | |
|
||||
| ۵.۳ | بازهٔ تاریخ با `PersianDatePicker` | ⏳ | |
|
||||
| ۵.۴ | `backTo`/`BackButton` روی هر سه | ⏳ | |
|
||||
| ۵.۵ | تعطیلات سال با تیک «ما این روز کار میکنیم» | ⏳ | |
|
||||
| ۵.۶ | هیچ رنگ/شعاع hard-code | ⏳ | |
|
||||
| ۵.۷ | دارکمود و حالت فشرده | ⏳ | |
|
||||
| ۵.۸ | RTL و موبایل | ⏳ | |
|
||||
| ۵.۹ | دلیل خالیبودن روز با پیام فارسی نمایش داده میشود | ⏳ | پنج حالت |
|
||||
|
||||
## ۶. تست
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۶.۱ | `IntervalSetTest` | ⏳ | |
|
||||
| ۶.۲ | `ResourceCalendarTest` — `end<=start`، همپوشانی، شیفت شبانه → ۴۲۲ | ⏳ | |
|
||||
| ۶.۳ | `ResourceAvailabilityTest` — تقاطع، شعبهٔ بیساعت، نیمروزه، دو استثنای همپوشان | ⏳ | |
|
||||
| ۶.۴ | `AvailabilityQueryCountTest` | ⏳ | |
|
||||
| ۶.۵ | `HolidayResolverTest` — ملی، override دو جهت | ⏳ | |
|
||||
| ۶.۶ | `ImportNationalHolidaysTest` — idempotent | ⏳ | |
|
||||
| ۶.۷ | بازهٔ > ۹۰ روز → ۴۲۲ | ⏳ | |
|
||||
|
||||
## ۷. مستندات
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۷.۱ | `docs/api/resource-calendar.md` | ⏳ | |
|
||||
| ۷.۲ | `docs/api/appointment-settings.md` بخش «تفاوت با تقویم منبع» | ⏳ | دو سیستم قاطی نشوند |
|
||||
| ۷.۳ | تصمیم «شیفت شبانه پشتیبانی نمیشود» مکتوب | ⏳ | |
|
||||
|
||||
## ۸. بازبینی پایانی
|
||||
|
||||
| # | مورد | وضعیت | یادداشت |
|
||||
|---|---|---|---|
|
||||
| ۸.۱ | هیچ 🔄 و ⏳ بیدلیل نمانده | ⏳ | |
|
||||
| ۸.۲ | `bin/phpunit` کامل سبز | ⏳ | |
|
||||
| ۸.۳ | `--group=slot-mode-frozen` سبز | ⏳ | |
|
||||
| ۸.۴ | `phpstan` بدون خطای جدید | ⏳ | |
|
||||
| ۸.۵ | `npx tsc --noEmit` و `yarn test` سبز | ⏳ | |
|
||||
| ۸.۶ | تستهای tenant سبز | ⏳ | |
|
||||
| ۸.۷ | `docs/api/*` بهروز | ⏳ | |
|
||||
| ۸.۸ | چکلیست UI کامل | ⏳ | |
|
||||
| ۸.۹ | دو کلاینت دیگر بررسی شدند | ⏳ | |
|
||||
| ۸.۱۰ | commit، سپس `graphify update .` | ⏳ | |
|
||||
| ۸.۱۱ | موارد بهتعویق با دلیل و تسک مقصد | ⏳ | اتصال `HolidayResolver` به مسیر اسلاتی |
|
||||
Reference in New Issue
Block a user