Назначение эпика: Mobile-флоу исполнения задачи линейным персоналом «в поле» (Housekeeping, Handyman): открыть назначенную задачу → пройти чеклист по зонам → отметить выполнение/фото/комментарии → отслеживать таймер → завершить. Замыкает жизненный цикл задачи статусом Finished и фиксирует фактическое время исполнения.
Участвует в use-cases: UC-2 (Task execution mobile) — потребитель задач, порождённых recalc engine (UC-1) и назначенных по Department Defaults юнита.
Сущности (owns/touches):
Task (status transition, started_at / finished_at / total_time / on_track), Task.Event (Started / Finished / отметка зоны), Task.Cost 🟡 (см. ниже — на этих экранах costs не показаны), UnitArea (источник зон чеклиста), area photos.Unit (property meta: name / location / wifi / keybox / attachments), TaskTemplate.Section (per-area задачи: Task 1/2 + Reference + Task Description), Reservation (контекст Check-In).00-overview.md §7.
Экраны: S50 (My Tasks list), S41 (Unit/Check-In card + property meta), S45 (Task checklist + timer). Все 375×812.
Открытые findings: F-filter-hierarchy-assignee (роль field-staff / Vendors scope — 00-overview.md §3).3458764673067131618 (375×812). Текст: Tasks (заголовок) · карточки-повторы Due: 12:00 26/06/2026 · on track · Check In · Villa Alaya.Tasks. Вертикальный список карточек задач. Снизу — таб-бар shell-а (см. E11, Tasks активен).Check In (task name);Villa Alaya (Unit.name);Due: 12:00 26/06/2026 (HH:MM DD/MM/YYYY, из Task.due_at);on track (on-track / due / overdue — производное от due_at vs now).on track / due / overdue — состояние чипа по сроку (цвет: electric-green / amber / red, 00-overview §4);Task где assignee = current user (назначение по Department Defaults юнита, задачи рождены recalc engine UC-1). Tap → S41. Не пишет.Check In; считаю это образцом, реально тип задачи произвольный (Cleaning, Check-Out и т.д. — единый Task). Не выдумываю фильтры/группировки сверх списка.overdue (red), задача остаётся в списке (не скрывается).Check In) и property meta, нужным для входа на объект и исполнения; точка перехода в чеклист.3458764673071102027 (375×812). Текст: < (back) · OCCUPIED · Check In · Task task task · Due: 12:00 26/06/2026 · Task Description + lorem · Property (Name: Villa Alaya, Location: Jl. Raya Semat No.88, Canggu… Bali 80361, Wifi Login:, Wifi Password:, Keybox Code: 123456) · Attachments > · Comments.< back + occupancy-чип OCCUPIED. Блок задачи: тип (Check In), название (Task task task), Due: …, секция Task Description (текст). Блок Property (meta-поля списком). Раскрываемые секции Attachments > и Comments. CTA на старт исполнения 🟡 (см. ниже).Check In (тип), Task task task (name), Due: 12:00 26/06/2026 (due_at), Task Description (описание).OCCUPIED (Unit/Reservation статус занятости; альт. VACANT).Name (Villa Alaya), Location (адрес), Wifi Login, Wifi Password, Keybox Code (123456).>).< (button) → назад в S50.Attachments > (button/disclosure) → раскрыть/открыть вложения.Comments (button/disclosure) → раскрыть/добавить комментарий к Task. 🟡 add-comment input на скелете не отрисован — отметка точки, без формы.OCCUPIED / VACANT (chip);New → In Progress).Unit (meta), Task (поля + описание), Reservation (occupancy/Check-In контекст), attachments, comments. Переход → S45 (чеклист). Запись комментария → Task.Event/comment (логически).Task.Event на Task (если пользователь пишет).Start / Open checklist) → S45. Обоснование: без явного перехода карточка — тупик; минимальное добавление, не меняет данные.VACANT юнит (для Cleaning/Check-Out) — тот же layout, чип VACANT.3458764673072718144 (375×812). Текст: < · 00:02:00 (таймер) · Areas · collapse · hide done · Bathroom / Bedroom (зоны) · 0 of 20 (прогресс зоны) · 🔻 (collapse-маркер) · Task 1 / Task 2 + Reference + Task Description … (lorem).< back + крупный таймер 00:02:00 (running). Блок Areas с контролами collapse и hide done. Список зон (Bathroom, Bedroom …), каждая: заголовок + счётчик 0 of 20 + collapse-маркер 🔻; внутри зоны — подзадачи Task 1, Task 2: Reference (эталон/референс-фото) + Task Description + место под фото-отметку.00:02:00 — накопленное время исполнения (HH:MM:SS), идёт от старта задачи; источник started_at.Bathroom / Bedroom), прогресс 0 of 20 (done / total подзадач зоны).Task 1 / Task 2, Reference (референс), Task Description (что сделать), фото-вложение по подзадаче/зоне (area photos).< (button) → назад в S41 (исполнение продолжается, таймер не сбрасывается).collapse (button/toggle) → свернуть/развернуть все зоны.hide done (toggle) → скрыть завершённые подзадачи/зоны.done of total.In Progress → Finished (CTA Finish 🟡 — см. дозумано).hide done on/off;N of N → готово к Finish;UnitArea (зоны юнита) + TaskTemplate.Section (per-area подзадачи, Reference, Description) для данной Task.Task.Event (+ area photos); таймер → Task.started_at / total_time; завершение → Task.status, Task.finished_at, Task.on_track.00-overview §5.started_at + Task.Event Started.Task.Event.finished_at, total_time (= finished − started, накопленное), on_track (производное: finished_at ≤ due_at → on track, иначе overdue) + Task.Event Finished.Planned/New → In Progress → Finished (00-overview §4); Planned — состояние до назначения/старта (recalc engine), на mobile сотрудник видит уже New+.In Progress/Finished и грузит area photos. Coordinator видит результат на desktop (E03/E06), но исполнение — mobile assignee.0 of 20 подразумевает отметку выполнения, но сам контрол на скелете не отрисован. Достраиваю минимальный per-sub-task check (инкрементит счётчик). Обоснование: без него прогресс done of total недостижим.Finish — транзиция в Finished нужна флоу, кнопка на скелете не подписана. Достраиваю Finish (доступна когда все зоны/подзадачи done, либо явное подтверждение при незавершённых 🟡). Обоснование: иначе задача не закрывается.00:02:00. Pause/stop не выдумываю.Task Description — скролл/перенос (как lorem в скелете).< / сворачивание) — продолжает идти (время = wall-clock от started_at, не зависит от того, открыт ли экран).S50 (My Tasks list)
│ tap карточки задачи
▼
S41 (Unit / Check-In card + property meta)
│ Start / Open checklist 🟡
▼
S45 (Checklist + Timer)
│ старт исполнения → Task: New → In Progress (started_at, Event Started)
│ отметки + area photos (Task.Event)
│ Finish → Task: In Progress → Finished (finished_at, total_time, on_track, Event Finished)
▼
(downstream, вне эпика) Area Report → Maintenance Report (E06)
< на S45 → возврат на S41 (исполнение и таймер сохраняются). < на S41 → S50.
Ответы со встречи Akira × Sergey (реестр
00-client-questions.md).
New → In Progress → Finished + started_at / finished_at / total_time / on_track явно прописаны (требование задания): они выводятся из таймера 00:02:00, чипа on track и статусной модели 00-overview §4. Новых сущностей нет — поля Task / Task.Event из индекса §7.Task.Cost существует в модели (E03), но на S41/S45 НЕ показан → на этих экранах НЕ добавляем ввод costs (минимализм; costs — desktop/Report-контур E06).