KNOTTA research & development

Бригадир

Запуск работ, формирование команды через отчёт, заполнение и подача отчёта, цикл доработки.

Бригадир

Роль: brigadier Полномочия: is_staff=False. Видит только свои наряды (где он назначен бригадиром или участником).

Чем занимается бригадир

  • Получает наряд, который запланировал и создал сотрудник бэк-офиса. В наряде уже указан объект, плановая дата и шаблон отчёта; бригадир — назначенный ответственный.
  • Запускает работы кнопкой «Начать» — это уведомляет клиента и бэк-офис.
  • Заполняет отчёт в SurveyJS-форме: указывает виды работ, поимённый состав работников, часы, материалы и услуги.
  • Прикрепляет фотографии выполненных работ.
  • Подаёт отчёт на проверку.
  • При отклонении получает комментарий от рецензента и дорабатывает отчёт.
  • Завершает наряд после фактического окончания работ.

Как зайти

Дашборд: /{ru|en}/dashboard/reports. Бригадир видит свои наряды, фильтрует по статусу, выбирает один — открывается панель отчёта.

Что в наряде уже указано

К моменту, когда бригадир открывает наряд, сотрудник уже заполнил:

ПолеЧто в нём
objectОбъект клиента, на который выезжаем
planned_forПлановая дата и время
report_templateШаблон отчёта (SurveyJS)
brigadierБригадир — это вы
display_team_nameНазвание команды для UI (опционально)
statusplanned

Если нужно поменять что-то из этого (например, перенести дату или сменить объект) — обратиться к сотруднику. У бригадира нет прав менять основные поля наряда — только вести его статус и заполнять отчёт.

Запуск работ

Когда бригада приступила:

  1. Нажать «Начать» (POST /api/service-visits/{id}/started/).
  2. Статус наряда: planned → started.
  3. Срабатывает уведомление WORK_STARTED — оно идёт:
    • Контактным лицам клиента (по их подпискам — обычно email).
    • Сотрудникам бэк-офиса (admin, staff).

ServiceVisit.started_at фиксируется автоматически.

Заполнение отчёта

Открыть наряд → панель отчёта → форма SurveyJS, динамически собранная по шаблону.

Стандартный уход

  1. Включить переключатель «Стандартный уход» (is-routine-care).
  2. Появляется таблица «Работники» (routine-care-workers).
  3. Для каждого работника:
    • Выбрать из выпадающего списка (поиск по ФИО, lazy-загрузка через /api/workers/).
    • Указать часы (с шагом 0.25).
  4. Описать выполненные работы в текстовом поле (если есть в шаблоне).

Топиарная стрижка

Аналогично — переключатель is-topiary-cutting + таблица topiary-cutting-workers.

Материалы

Таблица «Материалы» (materials-materials-used) — выбираются из общего справочника через lazy-loading. Указывается количество и единица измерения.

Услуги

Таблица «Услуги» (services-services-performed) — аналогично, из справочника Service.

Фотографии и файлы

Загрузить через специальное поле в форме. Файлы сохраняются в Supabase Storage, метаданные — в FileAttachment. Ссылки в публичной странице отчёта генерируются как короткоживущие подписанные URL.

Промежуточное сохранениеPOST /api/reports/{id}/survey/. Можно сохранять черновик и возвращаться к нему. Статус остаётся draft.

Подача на проверку

Когда отчёт заполнен — нажать «Подать на проверку» (POST /api/reports/{id}/survey/complete/).

  • Статус: draft|rejected → submitted.
  • Report.submitted_at фиксируется.
  • Report.submission_attempts инкрементируется.
  • Сотрудники бэк-офиса получают уведомление report_submitted.

Что после подачи

Утверждение

Если рецензент утвердил (Report.status → approved):

  • Бригадир получает уведомление report_approved (по умолчанию — email).
  • Работники из отчёта автоматически добавляются в ServiceVisitMember (если ещё не были).
  • Сотрудник может одной кнопкой отправить отчёт клиенту — это уже его сценарий.

Отклонение

Если отклонил (Report.status → rejected):

  • Бригадир получает уведомление report_rejected с комментарием рецензента и ссылкой на редактирование.
  • Открыть отчёт → исправить данные → подать повторно.

При повторной подаче submission_attempts снова инкрементируется — это даёт метрику качества с первой попытки.

Завершение наряда

Когда работы фактически закончены — нажать «Завершить» (POST /api/service-visits/{id}/completed/).

  • Статус наряда: started → completed.
  • ServiceVisit.ended_at фиксируется.
  • Срабатывает уведомление WORK_COMPLETED — снова контактным лицам клиента и бэк-офису.

Можно ли завершить наряд до утверждения отчёта? Да. Жизненный цикл наряда (ServiceVisit.status) и отчёта (Report.status) независимы. Бригадир обычно завершает наряд сразу по факту окончания работ, а рецензирование может занять день-другой.

Отмена наряда

Если выезд не состоится — нажать «Отменить» (POST /api/service-visits/{id}/cancelled/).

  • Допустимо из planned или started. Из completed — нельзя.
  • ended_at выставляется, если ещё не было.

Настройки уведомлений

По умолчанию бригадир получает email-уведомления:

  • report_approved — отчёт утверждён.
  • report_rejected — отчёт отклонён (с комментарием и ссылкой на правку).

Изменить набор подписок может администратор / сотрудник через Django Admin (inline в карточке User). Например, добавить канал telegram (если у бригадира привязан Telegram) или подписаться на work_started / work_completed для собственных нарядов.

Самые частые ошибки

СимптомПричинаРешение
Не вижу нужный нарядСотрудник ещё не назначил вас бригадиром / не создал нарядОбратиться к сотруднику бэк-офиса
Не могу открыть нарядНе являюсь ни бригадиром, ни участникомПопросить сотрудника поменять brigadier на этом наряде
Кнопка «Начать» не активнаНаряд уже не в plannedПроверить статус — он мог быть запущен раньше
Не могу поменять дату или объектУ бригадира нет прав менять основные поля нарядаОбратиться к сотруднику — он переназначит
Отчёт не подаётсяВ survey_data есть невалидные поляПроверить ошибки в форме SurveyJS
Не могу отменить нарядУже completedЗавершённые наряды не отменяются
Не получил report_approvedПодписка отключена / нет emailПроверить через админку запись NotificationPreference(topic=report_approved, channel=email)
Работники из отчёта не появились в командеОтчёт не утверждёнСинхронизация запускается только при → approved
На странице