О чём этот раздел
Ремонтные задачи мастерской устроены как kanban-воронка. Есть воронка мастерской — именованный контейнер, внутри которого располагаются этапы (колонки доски), а по этапам движутся ремонтные задачи. Каждый этап несёт цвет, порядковый номер, соответствующий ему статус задачи и (опционально) целевое состояние инвентаря. К задачам привязываются расходники и услуги, а их стоимость, оплаты и прибыль пересчитываются автоматически. Этот раздел описывает три сущности (воронка, этап, задача), их статусы, автоматическое появление дефолтных этапов, механику переупорядочивания колонок и карточек, фильтры и сводку в списке задач, а также правила проставления исполнителя и даты завершения.Метрическая отчётность над задачами мастерской (группировка по исполнителю, счётчики по статусам, средние стоимость и длительность) описана отдельно. Подробнее: «Модули: доставки, мастерская, воронки, склад, инвентаризации» — раздел «Отчёт по мастерской». Здесь описан обычный CRUD-список воронки, а не метрический endpoint.
Модель данных
Воронка мастерской
Простой контейнер: у неё есть только название и стандартные метки создания/обновления. Изолирована по компании.
При создании воронки к ней автоматически добавляются 4 дефолтных этапа (см. ниже).
Этап воронки
Колонка доски. В отличие от воронки и задачи, этап не хранит меток создания/обновления.Ремонтная задача
Единица ремонта/сервиса. Хранит все денежные показатели, которые пересчитываются автоматически.Статусы задачи
Задача всегда находится в одном из четырёх статусов, и именно статус определяет, в какую колонку она попадает и как учитывается в сводке:Автосоздание дефолтных этапов
Дефолтные этапы появляются автоматически в двух ситуациях, и они немного различаются. 1. При создании воронки. Как только создаётся новая воронка, к ней сразу добавляются четыре этапа, привязанные именно к этой воронке:
2. При первом обращении к списку этапов. Когда запрашивается список этапов и в компании вообще нет ни одного этапа, система создаёт тот же набор из четырёх колонок «на лету» — и сразу же переназначает этап всем существующим задачам, сопоставляя их по статусу (задача со статусом «Новая» получает этап «Новая заявка» и т. д.).
Порядок этапов и задач
Порядок колонок
При каждом сохранении этапа система освобождает для него позицию: все остальные этапы, у которых порядковый номер больше или равен номеру сохраняемого, сдвигаются на единицу вперёд. Сам сохраняемый этап при этом не трогается.Массовое создание дефолтных этапов происходит без запуска этого механизма, поэтому их исходная нумерация 0–3 остаётся нетронутой. А вот при ручном создании или редактировании колонки через API сдвиг срабатывает — в том числе при простом изменении порядка уже существующей колонки.
Порядок задач внутри статуса
Аналогично: при каждом сохранении задачи все остальные задачи того же статуса с позицией больше или равной позиции сохраняемой сдвигаются на единицу вперёд. Поскольку у новой задачи позиция по умолчанию равна нулю, свежесозданная карточка встаёт в начало своей колонки, а прежние карточки уезжают ниже.Жизненный цикл задачи
Проставление исполнителя
Если у задачи ещё не задан исполнитель и в запросе на обновление присутствует поле статуса, исполнителем автоматически становится текущий пользователь.Дата завершения
При переходе задачи в статус «Завершена» момент завершения проставляется автоматически текущим временем — но только если он ещё не был заполнен ранее. Валидация при обновлении запрещает указывать дату завершения вручную, если статус задачи не «Новая» и не «В работе». То есть дату завершения нельзя задать напрямую для уже завершённой или архивной задачи.Переопределение даты создания и комментарий
При создании задачи можно передать желаемую дату создания — она применяется отдельным сохранением уже после создания записи. Также при создании можно передать текст комментария: тогда к задаче автоматически привязывается комментарий от имени текущего пользователя.Автоматические пересчёты и побочные эффекты
Каждое сохранение задачи запускает несколько автоматических действий.Пересчёт денежных показателей
Система заново считает:- Стоимость расходников — сумма стоимостей всех привязанных расходников.
- Стоимость услуг — сумма стоимостей всех привязанных услуг.
- Оплачено — сумма платежей по задаче с учётом знака проводки: приход увеличивает оплаченную сумму, возврат уменьшает.
- Стоимость — сумма стоимости расходников и стоимости услуг.
Итоговая стоимость — это расходники плюс услуги; оплаченная сумма в неё не входит и учитывается отдельно. Все четыре показателя доступны только для чтения — задавать их вручную бессмысленно, при следующем сохранении они будут перезаписаны пересчётом.
Автоперевод состояния инвентаря
Если у этапа задачи задано целевое состояние инвентаря, а к задаче привязана единица инвентаря, чьё текущее состояние отличается от целевого, — состояние этой единицы переводится в целевое. Если целевое состояние не задано, инвентарь не привязан или состояние уже совпадает, ничего не происходит.Занятость единицы ремонтом: признак «Занимать инвентарь»
Открытая задача (в статусе «Новая» или «В работе») может держать свою единицу инвентаря занятой: в каталоге и в расчёте доступности такая единица получает статус «на ремонте» и не предлагается к выдаче. Управляет этим признак «Занимать инвентарь» у этапа:- этап с включённым признаком (значение по умолчанию) — пока задача стоит на нём, единица считается занятой ремонтом;
- этап с выключенным признаком — задача на нём единицу не занимает, и та остаётся доступной;
- задача без этапа занимает единицу всегда, независимо от настроек.
Список задач: фильтры, поиск и сортировка
Список задач возвращается постранично и по умолчанию отсортирован по порядку сортировки внутри статуса; поддерживается сортировка по другим полям с размещением пустых значений в конце.Поиск
Поиск идёт по номеру, названию задачи, имени клиента, названию и уникальному идентификатору инвентаря. Если в компании включён учёт автотранспорта, к поиску добавляются номер машины и техпаспорт. Ищется вхождение подстроки без учёта регистра. Подбора «неправильной раскладки клавиатуры» нет: запрос латиницей находит только латиницу, запрос кириллицей — только кириллицу. Запросы длиной в один-два символа обрабатываются заметно медленнее, чем от трёх символов, — для них ускоряющие поиск указатели не работают.Фильтры
Доступны фильтры по единице инвентаря, автору, исполнителю, клиенту, статусу, типу задачи, датам создания и завершения, этапу, номеру и названию, а также три специальных фильтра:
Значения фильтра по статусу оплаты:
- Оплачено — оплаченная сумма не меньше стоимости, и стоимость больше нуля.
- Частично — стоимость больше нуля и оплаченная сумма не равна ей.
- Не оплачено — оплаченная сумма равна нулю.
- Без суммы — стоимость равна нулю.
Сводка по задачам
Вместе с постраничным ответом отдаётся сводка, рассчитанная по всему отфильтрованному набору задач, а не по текущей странице:Обратите внимание на асимметрию исключений: «Общая сумма» и «Последняя задача» исключают архив, «Завершённые», «Сумма завершённых» и «Средняя длительность» считаются только по завершённым, а «Активные» — только по новым и находящимся в работе.
Удаление этапа
Этап можно удалить только если к нему не привязано ни одной задачи. Если задачи есть, удаление отклоняется с сообщением о необходимости сначала переместить задачи. Через форму обновления этапа можно менять только его название, порядок, воронку, признак «Занимать инвентарь» и целевое состояние инвентаря — статус и цвет через неё не редактируются.Как это используется
Список и карточки задач — это операционная доска мастерской: сотрудник ведёт ремонт по колонкам, а система попутно держит в актуальном состоянии стоимость, оплаты, состояние инвентаря и метрику прибыли. Денежные итоги задач далее агрегируются в отчётности мастерской (подробнее: «Модули: доставки, мастерская, воронки, склад, инвентаризации»).Связанные страницы
Глоссарий: Воронка и задачи
Полный перечень полей воронки, этапа и ремонтной задачи со статусами.
Мастерская (ремонтные задачи)
Обзорная страница модуля и навигация по его разделам.
Ресурсы и склад
Складской справочник расходников и их списание/возврат при привязке к задачам с контролем остатков.
Услуги
Привязка услуг из каталога к ремонтным задачам с тарифом, ценой и длительностью.
Стоимость и оплаты
Автоагрегация цены задачи из ресурсов и услуг и суммы оплат, плюс статусы оплаты.
Метрика прибыли
Проецирование прибыли по ресурсам и услугам завершённой задачи в общую таблицу метрик.
Автосмена состояния инвентаря
Автоматический перевод инвентаря в целевое состояние этапа при движении задачи по воронке.