Назначение эпика: Месячная отчётность по юниту — единый документ за Unit × Year × Month, авто-компилируемый из задач, инцидентов (issues) и пообластных (area) данных, накопленных за месяц. Coordinator/Operations проверяет и дополняет содержимое, переводит отчёт draft → completed и выгружает в PDF (обложка + разделы) для владельца/бухгалтерии.
Участвует в use-cases: UC-4 (авто-компиляция месячного отчёта), UC-5 (PDF-выгрузка). Потребляет результаты UC-2 (Task execution) и UC-3 (Issues).
Сущности (owns/touches): MaintenanceReport (owns), AreaReport (owns, строка пообластного раздела), ReportTaskLine / ReportIssueLine (owns — снимок-строки скомпилированных задач/инцидентов); touches Unit, UnitArea, Task (+TaskCost), Issue, Employee (assignment).
Экраны: S35 (Reports list), S37 (Area Report tab — табличный), S23 (Tasks tab), S24 (Issues tab), S48 (Summary tab), S02 (детальный Area/Summary вид: condition/notes/photos + Reported Issues + Completed Task), S11 (Issue-detail карточка отчёта: Items/Costs/Solution/Vendor Cost), S26 (Cost-summary карточка: Costs/Charges/Handling Fee/Total + Project Duration/Warranty), S57 (PDF cover «betterplace / Maintenance Report / May 2026 / Villa Alaya»).
Открытые findings: F-report-task-inclusion-rule (IMPORTANT, какие задачи включаются в отчёт + дефолт включения), F-handling-fee-calculation (IMPORTANT, handling fee авто % vs ручной ввод). Оба влияют на UC-4 и помечены ниже как требует решения заказчика. Также: F-placeholder-copy (лейблы-заглушки), F-units-scope-live-only.
Сведение дублей: в прототипе «Maintenance Report» нарезан на отдельные канвасы-вкладки (S23/S24/S37/S48) и detail-карточки (S02/S11/S26) — это один Report detail экран с вкладками
Area Report · Tasks · Issues · Summary. Ниже отчёт описан как один экран с вкладками + drill-in карточки; дубли сведены, повторяющийся header (Unit · Year · Month · Completed at) описан один раз.
✅ Статус реализации (прототип, desktop) — 2026-06-21: эпик E06 desktop ЗАВЕРШЁН. WP-1 (PR #11): S35 list + Report detail (4 вкладки-таблицы Area/Tasks/Issues/Summary). WP-2 (PR #13): drill-in S02/S11/S26 + S57 PDF cover. Все мутации inert 🟡 (нет бэкенда). Дизайн-решение S02 area↔линии: связь области с её Reported Issues / Completed Task реализована через поля
AreaReport.reportedIssueIds/completedTaskIds(refs наReportIssueLine/ReportTaskLineтого же reportId) — без новой сущности связи. Отгруженные fallback'и открытых вопросов: Handling Fee = ручной mock (Вариант B §223);Total = Total Costs + Charges + Handling Fee(§154 предположение) — поверхность S26 помечена «Pending client decision», правка inert. Ждут заказчика/бэкенда: реальная UC-4 авто-компиляция, UC-5 серверный PDF-рендер, include/exclude toggle (F-report-task-inclusion-rule), формула handling fee (F-handling-fee-calculation).
fast filters/filters (как в общих data-таблицах) → data-table → строка открывает Report detail.ID, Unit (напр. Alaya), Year (2026), Month (1), Status, Completed (дата завершения, 22/05/2026), Assignment (ответственный, Sarah Martinez), Report (действие — открыть/PDF).filter (input_text + dropdown) → фильтр по Unit / Year / Month / Status (filter).Area Report (button).Report в строке → открыть отчёт (для completed — скачать PDF) (button).+ New report — создать отчёт за период вручную (button) → см. «Дозумано».Status: draft (amber) / completed (electric-green).MaintenanceReport (по юнитам в scope роли). Открытие → Report detail. Создаётся записью либо авто-компиляцией (UC-4), либо + New report.+ New report и явный статус-чип — на канвасе колонка Status есть, но без значений; добавлено для управляемости (ручной триггер компиляции, см. UC-4). Минимально.Один экран с шапкой и 4 вкладками. Шапка одинакова на всех вкладках.
Unit = Villa Alaya, Year = 2026, Month = 1, Completed at = 6 May, 2026. На карточке проекта (S26) дополнительно Project Duration (5 weeks) и Warranty (5 weeks).Area Report (S37/S02) · Tasks (S23) · Issues (S24/S11) · Summary (S48/S02/S26).Save / Cancel (на detail-карточках S11), общий переход draft → completed (кнопка Complete report 🟡) и Export PDF 🟡.Area Report · Tasks · Issues · Summary + индикатор auto (раздел сформирован авто-компиляцией) + data-table по комнатам.ID (1), Room (Bathroom, Entrance, Living Room), Status, Notes (свободный текст), Photo (превью/иконка).auto бейдж → признак авто-компиляции раздела (read).Area Report; empty (нет area-данных за месяц); строка без фото — плейсхолдер.AreaReport (по UnitArea), наполняется из area-photos/notes задач исполнения (UC-2, экран S25/S02 mobile-execution) за период. Открывает S02.draft — редактирование Status/Notes строки (update AreaReport); в completed — read-only.auto присутствует на канвасе дословно.Status/Notes/Photo; очень длинные Notes — clamp + раскрытие в S02.Summary (большой текстовый блок) → блок Area Report с под-секциями по комнатам (Bathroom, Living Room), каждая: Condition:, Notes:, Photos: → таблица Reported Issues → таблица Completed Task.Condition: (статус), Notes: (длинный текст), Photos: (галерея).Reported Issues (колонки): Issue (Broken AC), Description (text), Reported at (22/05/2026), Issue Department (Operations), Related Task (AC Maintenance), Task Status, Issue Report, Task Report.Completed Task (колонки): Task Name / Task (Broken AC), Completed at (22/05/2026), Task Department (Operations), Task Type (Direct / Issue / Schedule), Task Report.Issue Report / Task Report ссылка → открыть Issue-detail (S11) / Task-report.draft: редактирование Condition / Notes, добавление Photos (button/input).AreaReport + связанные Issue и завершённые Task (status = Finished) этой области за период. Task Type (Direct/Issue/Schedule) — из самой задачи.AreaReport.condition/notes/photos (draft only).Text text text… — placeholder, F-placeholder-copy.)ID (1), Task Name / Task (AC Maintenance, Check Wifi, Plumbing Repair), Status (Planned), Task Type (Direct / Issue), Finished (дата), Department (Operations), Report Status, Report (ссылка на task-report).filter (input_text + dropdown) → фильтр строк (filter).draft: include/exclude задачи из отчёта (toggle) 🟡 — см. UC-4 / F-report-task-inclusion-rule.Tasks; filtered; empty (нет задач за период).ReportTaskLine (скомпилирован из Task за Unit×Month, см. UC-4). Task Type/Department/Finished — из задачи.draft — переключение включения строки (если правило включения = ручное/смешанное, F-report-task-inclusion-rule).Report Status пуст; статус Planned (не завершена) — см. правило включения.ID (1), Issue (AC Maintenance), Description, Reported at (22/05/2026), Department (Operations), Associated Task (AC Maintenance), Task Status, Task Report, Report Status.filter (input_text + dropdown) → фильтр (filter).Task Report → открыть отчёт связанной задачи (button).Issues; filtered; empty (нет инцидентов).ReportIssueLine (скомпилирован из Issue за Unit×Month, UC-4). Associated Task/Task Status — из Issue → Task (E05).draft — include/exclude (toggle) 🟡 (зависит от F-report-task-inclusion-rule для issue-linked задач).Associated Task/Task Status пусты; длинное Description — clamp.Items (таблица) → блок Costs / Solution / Cost / Vendor Cost (Photos) → нижние Total + Save / Cancel.Items (колонки): ID (1,2,3), Name (AC Maintenance, Direct, Plumbing Repair), Problem (Maintenance Issue), Report, стоимость (200,000.00 IDR), Solution (Check Wifi).Name (New Sink), Type (Item / Installation / Labor), Vendor, Cost (100,000.00 IDR).Total (200,000.00 IDR).Save (button) → сохранить правки карточки (draft).Cancel (button) → отменить.draft: редактирование solution / costs / vendor cost (input).Issue + связанные Task + TaskCost (items/labor) + vendor-расходы. Total агрегирует costs строки.Total (сумма строк).Total при пустых costs = 0.00 IDR.Project Duration / Warranty.Project Duration (5 weeks) + Warranty (5 weeks) → блок Items (две группы Cost Item 1 / Cost Item 2, каждая: Cost Item 100,000.00 IDR + Cost Labor 100,000.00 IDR) → итоговый блок: Total Costs, Charges, Handling Fee, Total.Items: Cost Item (Cost Item 1 = 200,000.00 IDR; разбивка Cost Item 100,000.00 IDR + Cost Labor 100,000.00 IDR), Cost Item 2 аналогично.Total Costs (100,000.00 IDR), Charges (200,000.00 IDR), Handling Fee (200,000.00 IDR), Total (100,000.00 IDR).Save / Cancel или Export) — на канвасе без подписи.draft: правка Charges, Handling Fee (если ручной режим — F-handling-fee-calculation) (input).TaskCost всех включённых задач/инцидентов отчёта → Total Costs. Handling Fee — см. UC-4 / F-handling-fee-calculation. Total = Total Costs + Charges + Handling Fee (формула предполагаемая, требует решения заказчика).Total явно на канвасе не определена (placeholder-значения противоречивы: Total Costs < компонентов). Принято: Total = Total Costs + Charges + Handling Fee; помечено как требует подтверждения (вместе с F-handling-fee-calculation). Не вводим доп. строки сверх канваса.Handling Fee = 0 при отсутствии правила; Charges пустые; placeholder-суммы заменяются реальной агрегацией.Summary (1 button).Summary + свободный текст (детально раскрывается в S02-варианте Summary).Edit / Generate summary 🟡 (на канвасе без подписи).draft: редактирование summary-текста (input).Summary; edit / read.MaintenanceReport.summary (опц. авто-черновик из агрегатов, UC-4). Развёрнутый вид — S02.MaintenanceReport.summary (draft only).draft — допустимо; при completed без summary — раздел в PDF пропускается.betterplace → заголовок Maintenance Report → период May 2026 → объект Villa Alaya. Без контролов (рендер-артефакт, не интерактивный экран).betterplace (лого/wordmark), Maintenance Report (тип документа), May 2026 (Month Year отчёта), Villa Alaya (Unit).MaintenanceReport (Unit, Month, Year). За обложкой следуют разделы PDF: Area Report → Tasks → Issues → Cost Summary → Summary (порядок вкладок).Repair and Project Proposal), относится к E07.Villa Alaya (полное) vs Alaya в списке S35 → используем полное имя на обложке.Триггер: конец месяца (плановая компиляция) либо ручной + New report (S35) для пары Unit × Year × Month.
Шаги (концептуально, логика — фаза реализации):
MaintenanceReport(unit, year, month, status=draft) (идемпотентно — один отчёт на период; повторный запуск пересобирает draft, не трогает completed).AreaReport по UnitArea — condition/notes/photos из задач исполнения за период (UC-2). Раздел помечается auto.ReportTaskLine — по правилу включения (F-report-task-inclusion-rule, см. ниже).Issue юнита за месяц + связанные задачи в ReportIssueLine.TaskCost включённых задач/инцидентов → Total Costs; добавить Charges; вычислить Handling Fee (F-handling-fee-calculation, см. ниже); посчитать Total.Complete report (draft → completed) → отчёт замораживается (read-only), доступен Export PDF.Снимок vs живые данные: строки отчёта (ReportTaskLine/ReportIssueLine/AreaReport) — снимок на момент компиляции (а после completed — заморожены), чтобы PDF был воспроизводим и не «плыл» при последующих изменениях задач. (🟡 решение: снимок, не live-join; обоснование — отчёт = документ за закрытый период.)
Sticky-note (×2): «only approved or approved and finished? tasks can be included?» + «what should be by default — tasks included or excluded». Два аспекта:
approved + finished: в отчёт попадают лишь подтверждённые и завершённые за месяц задачи. Чище для владельца/счёта; Planned-задачи (видны на S23 как Planned) исключаются.Planned/approved-но-не-finished): полнее операционно; требует колонки Status для различения и, вероятно, исключения незавершённых из Cost Summary.Комбинация (критерий × дефолт) определяется заказчиком. До решения прототип показывает все строки периода с колонкой Status и include/exclude toggle (наиболее общий случай, покрывает любой исход). Не реализовывать фиксированное правило до подтверждения.
Sticky-note: «handling fee automatical». Два варианта (затрагивает Total на S26 и Proposal S04 в E07 — формула должна быть единой):
Handling Fee = rate% × Total Costs (rate — настройка, напр. на уровне Unit/глобально). Поле read-only, пересчитывается при изменении costs.Handling Fee вводится оператором (Accounting), не зависит от costs.Базовая формула итога (тоже на подтверждение): Total = Total Costs + Charges + Handling Fee. До решения — поле редактируемое (Вариант B) как безопасный дефолт, формула Total помечена комментарием. Не зашивать % до подтверждения ставки и базы расчёта.
completed-отчёта (для draft — превью 🟡, опционально).Area Report → Tasks → Issues → Cost Summary (S26) → Summary. Порядок = порядок вкладок.MaintenanceReport (Unit, Month, Year, бренд betterplace).200,000.00 IDR, даты DD/MM/YYYY.S35 (Reports list)
│ row click → Report detail (tab=Area Report)
▼
Report detail [header: Unit·Year·Month·Completed at]
├─ tab Area Report (S37) ──row──► Area detail (S02: condition/notes/photos + Reported Issues + Completed Task)
├─ tab Tasks (S23) ───────row──► task-report
├─ tab Issues (S24) ──────row──► Issue detail (S11: Items/Costs/Solution/Vendor Cost)
└─ tab Summary (S48) ─────────► Summary detail (S02 Summary) + Cost Summary (S26)
│ Complete report (draft → completed)
▼
Export PDF: Cover (S57) → Area → Tasks → Issues → Cost Summary (S26) → Summary
Данные приходят из: UC-2 (Task execution → area photos/notes, TaskCost), UC-3/E05 (Issues + связанные задачи). Уходят: PDF-документ (владелец/бухгалтерия). Compile = UC-4.
Ответы со встречи Akira × Sergey (реестр
00-client-questions.md). Перекрывают соответствующие 🟡-допущения ниже.
finished за период), со статусом «не включено» по умолчанию (дефолт = excluded).completed task reporter.included/not-included — кликабельно.included → excluded; include-toggle становится интерактивным (клик в отчёте) + кнопка «включить все». Комбинация «критерий × дефолт» = (finished-за-период × excluded-by-default). → Tier B U5.draft/completed и переход Complete report — колонка Status (S35) на канвасе без значений; жизненный цикл достроен (draft = редактируемый, completed = замороженный + PDF). Минимально необходимо для UC-4/UC-5.+ New report (ручной триггер компиляции) — на канвасе нет кнопки создания; добавлено для управляемости (наряду с плановой компиляцией).ReportTaskLine/ReportIssueLine) — введены как сущности, чтобы отчёт был воспроизводимым документом за закрытый период (а не live-join). Обоснование выше (UC-4).Total и режим Handling Fee — на канвасе значения-placeholder противоречивы; зафиксированы предположения + помечены требует решения заказчика (F-handling-fee-calculation). Единая формула должна совпасть с Proposal (E07, S04).