# چک‌لیست — تسک ۰۱ (شعبه و اتاق) **وضعیت کلی:** ⏳ شروع نشده · **آخرین بازبینی:** — قواعد: [_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` دست‌نخورده | ⏳ | این تسک به آن کاری ندارد | | ۰.۳ | `location_id` در JSON برنامهٔ هفتگی دست‌نخورده | ⏳ | شعبه **بالای** آدرس می‌نشیند | | ۰.۴ | `DoctorAddress` هیچ ستونی حذف/تغییر نداد | ⏳ | فقط `branch_id` تهی‌پذیر اضافه شد | ## ۱. بک‌اند | # | مورد | وضعیت | یادداشت | |---|---|---|---| | ۱.۱ | `Branch` + `BranchWorkingHours` + `Room` entity | ⏳ | | | ۱.۲ | `BranchService` با گاردهای حذف قابل توسعه (`DeletionGuardInterface`) | ⏳ | تسک ۰۲ و ۰۷ گارد اضافه می‌کنند | | ۱.۳ | `WorkingHoursService` — اعتبارسنجی و `sequence` سمت سرور | ⏳ | | | ۱.۴ | ساعت با `start_minute`/`end_minute` عددی، نه رشتهٔ `"09:00"` | ⏳ | | | ۱.۵ | هشت endpoint ساخته شد | ⏳ | | | ۱.۶ | پزشک مستقل هم شعبه دارد (مطب = شعبه) | ⏳ | نه فقط `entity_type=clinic` | | ۱.۷ | `app:branch:backfill` — dry-run پیش‌فرض، idempotent | ⏳ | | | ۱.۸ | کنترلر نازک · `BaseController` · `success/paginated/error` | ⏳ | | | ۱.۹ | `TenantOwnershipChecker` روی هر uuid از request | ⏳ | | ## ۲. دیتابیس | # | مورد | وضعیت | یادداشت | |---|---|---|---| | ۲.۱ | `branches` · `branch_working_hours` · `rooms` | ⏳ | | | ۲.۲ | `entity_type, entity_id` ستون **اول** ایندکس‌های لیست | ⏳ | | | ۲.۳ | `timezone` روی شعبه از روز اول | ⏳ | افزودن بعدی = backfill زمان‌دار | | ۲.۴ | `rooms.capacity` — ظرفیت هم‌زمان | ⏳ | اتاق سه‌تخته = یک ردیف با ۳ | | ۲.۵ | `branch_working_hours` در `GlobalTables::AGGREGATE_CHILDREN` | ⏳ | | | ۲.۶ | `TenantSchemaCoverageTest` سبز | ⏳ | | ## ۳. UI | # | مورد | وضعیت | یادداشت | |---|---|---|---| | ۳.۱ | `BranchesPage` · `BranchFormPage` · `RoomsPage` | ⏳ | | | ۳.۲ | `DataTable` با skeleton و empty state فارسی | ⏳ | | | ۳.۳ | `PageHeader` با `backTo` روی زیرصفحه‌ها | ⏳ | | | ۳.۴ | شهر/استان با `SearchableSelect` — هیچ `