Бригадир
Запуск работ, формирование команды через отчёт, заполнение и подача отчёта, цикл доработки.
Бригадир
Роль: brigadier
Полномочия: is_staff=False. Видит только свои наряды (где он назначен бригадиром или участником).
Чем занимается бригадир
- Получает наряд, который запланировал и создал сотрудник бэк-офиса. В наряде уже указан объект, плановая дата и шаблон отчёта; бригадир — назначенный ответственный.
- Запускает работы кнопкой «Начать» — это уведомляет клиента и бэк-офис.
- Заполняет отчёт в SurveyJS-форме: указывает виды работ, поимённый состав работников, часы, материалы и услуги.
- Прикрепляет фотографии выполненных работ.
- Подаёт отчёт на проверку.
- При отклонении получает комментарий от рецензента и дорабатывает отчёт.
- Завершает наряд после фактического окончания работ.
Создание и планирование нарядов — это сценарий сотрудника или администратора. Бригадир в дашборде видит уже созданный наряд и ведёт его через жизненный цикл: запуск, отчёт, завершение. Поле ServiceVisit.brigadier ограничено ролью brigadier — назначить бригадира на наряд может только сотрудник или администратор.
Как зайти
Дашборд: /{ru|en}/dashboard/reports. Бригадир видит свои наряды, фильтрует по статусу, выбирает один — открывается панель отчёта.
Что в наряде уже указано
К моменту, когда бригадир открывает наряд, сотрудник уже заполнил:
| Поле | Что в нём |
|---|---|
object | Объект клиента, на который выезжаем |
planned_for | Плановая дата и время |
report_template | Шаблон отчёта (SurveyJS) |
brigadier | Бригадир — это вы |
display_team_name | Название команды для UI (опционально) |
status | planned |
Если нужно поменять что-то из этого (например, перенести дату или сменить объект) — обратиться к сотруднику. У бригадира нет прав менять основные поля наряда — только вести его статус и заполнять отчёт.
Состав уточняется фактически — по итогам работ, в отчёте. При утверждении отчёта работники из survey_data автоматически добавляются в ServiceVisitMember. Это сделано чтобы избежать «проектных» бригад, не совпадающих с реальными исполнителями.
Запуск работ
Когда бригада приступила:
- Нажать «Начать» (
POST /api/service-visits/{id}/started/). - Статус наряда:
planned → started. - Срабатывает уведомление
WORK_STARTED— оно идёт:- Контактным лицам клиента (по их подпискам — обычно email).
- Сотрудникам бэк-офиса (
admin,staff).
ServiceVisit.started_at фиксируется автоматически.
Заполнение отчёта
Открыть наряд → панель отчёта → форма SurveyJS, динамически собранная по шаблону.
Стандартный уход
- Включить переключатель «Стандартный уход» (
is-routine-care). - Появляется таблица «Работники» (
routine-care-workers). - Для каждого работника:
- Выбрать из выпадающего списка (поиск по ФИО, lazy-загрузка через
/api/workers/). - Указать часы (с шагом 0.25).
- Выбрать из выпадающего списка (поиск по ФИО, lazy-загрузка через
- Описать выполненные работы в текстовом поле (если есть в шаблоне).
Топиарная стрижка
Аналогично — переключатель 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 |