- 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
6.1 KiB
6.1 KiB
چکلیست — تسک ۰۳ (تقویم منبع، استثنا، تعطیلات ملی)
وضعیت کلی: ⏳ شروع نشده · آخرین بازبینی: —
قواعد: _shared/definition-of-done.md · red-lines.md · 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 به مسیر اسلاتی |