Dev Specs

Epic E10 — Communications [mobile + desktop]

Назначение эпика: Внутренние коммуникации операционной команды — мессенджер «в поле» (личные/групповые чаты + системные уведомления) и объявления (Announcements) от координации к персоналу. Участвует в use-cases: поддерживающий контур (связь персонала и координации; питает mobile Home S28 эпика E11 блоком Announcements). Сущности (owns/touches): Message (owns), Chat/Group (owns), Notification (owns), Announcement (owns), Employee (touches — участники/авторы). Экраны: S49 (Messager: Chats / Groups / Notifications). Announcements — описывается как фича (создание/публикация/архив); её mobile-витрина — блок на Home S28, который специфицирует эпик E11. Открытые findings: нет прямых; placeholder-copy (F-placeholder-copy) применим к подписям.


S49 — Messager [mobile]

  • Назначение: Мобильный мессенджер сотрудника: переписка с координацией и коллегами, групповые чаты, системные уведомления — единая точка связи «в поле».
  • Источник (Miro): Screen 8 · id 3458764673067131596 (375×812, controls: —, mockups×3 = аватары/превью).
  • Layout: mobile header Messager → сегментированные вкладки Chats · Groups · Notifications → список диалогов: на строку — аватар, имя (Putri), роль (Housekeeping Coordinator), превью последнего сообщения (Hi! I wanted to check what is the status with …). Тап по строке → экран переписки 🟡 (в скелете отдельного chat-thread экрана нет).
  • Данные на экране (на строку списка, дословные лейблы):
    • Putri — имя собеседника/группы.
    • Housekeeping Coordinator — роль собеседника.
    • превью текста — последнее сообщение (truncate).
    • 🟡 timestamp + бейдж непрочитанного — стандарт мессенджера, в скелете не выведены явно.
  • Контролы и действия:
    • Вкладка Chats (tab) → список личных диалогов.
    • Вкладка Groups (tab) → список групповых чатов.
    • Вкладка Notifications (tab) → системные уведомления (назначена задача, новое объявление, апрув и т.п.) 🟡.
    • Тап по диалогу (button/row) → chat-thread (отправка/чтение сообщений) 🟡.
    • 🟡 «+ New chat» — в скелете кнопки нет; для прототипа опционально.
  • Состояния/вкладки: Chats / Groups / Notifications (3 таба) · empty (нет диалогов / нет уведомлений) · loading · unread vs read.
  • Связи (data-flow): диалоги/сообщения — из Message/Chat (по участникам = Employee). Notifications — производные события системы (назначение Task, публикация Announcement, transition Proposal/Report). Чтение помечает прочитанным; отправка создаёт Message.
  • Мутации: send message (create Message), mark-as-read (update). Создание чата 🟡.
  • Права: все аутентифицированные сотрудники (field + office). Видимость диалога — по участию. Группы — по членству.
  • 🟡 [не было додумано]:
    • Chat-thread экран (сама переписка) — в скелете только список, но превью подразумевает наличие переписки. Минимально необходим.
    • Notifications как класс системных событий — вкладка есть, наполнение не специфицировано; описываем источники событий.
    • timestamp / unread-бейдж — конвенция мессенджера, в скелете не отрисованы.
  • Edge cases:
    • Empty Chats/Groups → «No conversations yet».
    • Empty Notifications → «You're all caught up».
    • Длинное имя/превью → truncate в одну строку.
    • Сообщение в архивный/удалённый чат → недоступно (read-only history) 🟡.

Announcements (фича) [mobile-витрина + desktop-авторинг]

  • Назначение: Односторонние объявления от координации/менеджмента всему персоналу (политики, новости вилл). Публикуются и архивируются на desktop, читаются на mobile Home.
  • Источник (Miro): на mobile появляется как блок Announcements (New / Archive) на S28 (Screen 7, id 3458764673066832684) — детально специфицируется эпиком E11 (mobile shell / Home). Здесь — как сквозная фича: модель + жизненный цикл.
  • Данные объявления (дословные лейблы из S28):
    • title — заголовок (New Villa Alaya Check In Policy!).
    • date — дата публикации (22/05/2026).
    • text — тело (Text text text … — placeholder, F-placeholder-copy).
    • 🟡 author / target-audience (кому адресовано) — в скелете не выведены; для прототипа: автор = публикующий сотрудник, аудитория = все (или department-scoped).
  • Состояния (lifecycle):
    • New — активные/актуальные объявления (вкладка на mobile Home).
    • Archive — архивные (сняты с актуальных, но доступны для чтения).
    • 🟡 Draft — черновик до публикации; в скелете не показан, но нужен для авторинга на desktop.
  • Контролы и действия:
    • New / Archive (tab, mobile) → переключение списков.
    • Desktop-авторинг 🟡: + New Announcement (button) → форма (title input, text textarea, target 🟡) → Publish (создаёт активное, попадает в New + Notification в S49) / Save draft 🟡.
    • Archive (action, desktop) → перевод из New в Archive (снять с актуальных).
  • Связи (data-flow):
    • Создаётся на desktop (координация) → публикация → витрина на mobile Home S28 (E11) + опционально Notification во вкладке Notifications S49.
    • Читает/пишет сущность Announcement. Архивация — transition статуса.
  • Мутации: create (draft/publish), publish (Draft→New), archive (New→Archive). Edit 🟡.
  • Права:
    • Создание/публикация/архив — Operations / Coordinators / Management (office).
    • Чтение — все сотрудники (mobile).
    • Field staff — read-only.
  • 🟡 [не было додумано]:
    • Desktop-авторинг Announcements — в скелете виден только mobile-просмотр (New/Archive на S28); экрана создания нет, но объявления откуда-то берутся → описан минимальный flow создания/публикации/архивации. В IA (00-overview) у Announcements нет своего desktop top-level пункта → 🟡 место авторинга подтвердить (вероятно под Communications / отдельный пункт).
    • Draft-статус и target-audience — добавлены как минимально необходимые для авторинга; в скелете отсутствуют.
  • Edge cases:
    • Пустой New → mobile Home показывает «No announcements».
    • Длинный text → на Home — превью, полный текст — раскрытие/detail 🟡.
    • Публикация без title → валидация на desktop-форме.

Cross-screen relations (внутри эпика)

Desktop authoring (🟡 New Announcement form)
        │ publish
        ▼
Announcement[New] ──витрина──► mobile Home S28 (эпик E11, блок Announcements New/Archive)
        │ archive
        ▼
Announcement[Archive]

Announcement publish ─(опц. 🟡)─► Notification ──► S49 вкладка Notifications
Task assigned / Proposal·Report transition ──► Notification ──► S49 Notifications
S49 Chats/Groups ──тап (🟡)──► chat-thread (send/read Message)

Решения заказчика (2026-06-22)

Ответы со встречи Akira × Sergey (реестр 00-client-questions.md). Перекрывают соответствующие 🟡-допущения ниже.

  • Q-05 · announcements-authoring-ia — РЕШЕНО (resolves §1, §69 «место авторинга»): авторинг объявлений — отдельная top-level вкладка «Announcements» в desktop-навигации (НЕ под Communications, НЕ под Dashboard) — как админка блога, где ответственные пишут анонсы на разном уровне. Питает ленту анонсов на mobile Home (S28, E11). Lifecycle Draft → New → Archive — подтверждается. Дельта к вёрстке: новый top-level пункт навигации + экран-авторинг (новый desktop-экран). → Tier C U7.

Дозумано на уровне эпика 🟡

  1. Desktop-авторинг Announcements — скелет содержит только mobile-просмотр (S28, эпик E11); экран создания/публикации не нарисован. Описан минимальный lifecycle (Draft → New → Archive) и форма создания, т.к. без него объявления неоткуда взять. Отклонение от скелета — добавление авторинг-стороны существующей сущности, не новой функциональности.
  2. Chat-thread экран (сама переписка) — в скелете S49 только список диалогов; добавлен минимально, т.к. превью сообщений подразумевает существование переписки.
  3. Notifications — источники событий — вкладка есть, но что туда падает, в скелете не задано. Описаны логичные источники (assigned Task, published Announcement, Proposal/Report transitions) без новой механики.
  4. Поля author / target-audience / timestamp / unread / Draft — конвенции мессенджеров и систем объявлений, не выведенные в placeholder-скелете; добавлены как минимально необходимые. Реальные подписи — F-placeholder-copy (заглушки «Putri», «Text text text»).