> ## Documentation Index
> Fetch the complete documentation index at: https://docs.yume.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Воронка и задачи

> Kanban-воронка мастерской: воронки, этапы и ремонтные задачи, их статусы, автосоздание дефолтных этапов, переупорядочивание колонок и карточек, фильтры и сводка списка задач, правила исполнителя и даты завершения.

Полный перечень полей — в [глоссарии](/ru/logic/workshop/pipeline-glossary).

## О чём этот раздел

Ремонтные задачи мастерской устроены как kanban-воронка. Есть **воронка мастерской** — именованный контейнер, внутри которого располагаются **этапы** (колонки доски), а по этапам движутся **ремонтные задачи**. Каждый этап несёт цвет, порядковый номер, соответствующий ему статус задачи и (опционально) целевое состояние инвентаря. К задачам привязываются расходники и услуги, а их стоимость, оплаты и прибыль пересчитываются автоматически.

Этот раздел описывает три сущности (воронка, этап, задача), их статусы, автоматическое появление дефолтных этапов, механику переупорядочивания колонок и карточек, фильтры и сводку в списке задач, а также правила проставления исполнителя и даты завершения.

<Info>
  Метрическая отчётность над задачами мастерской (группировка по исполнителю, счётчики по статусам, средние стоимость и длительность) описана отдельно. Подробнее: [«Модули: доставки, мастерская, воронки, склад, инвентаризации»](/ru/logic/metrics/modules) — раздел «Отчёт по мастерской». Здесь описан обычный CRUD-список воронки, а не метрический endpoint.
</Info>

## Модель данных

### Воронка мастерской

Простой контейнер: у неё есть только название и стандартные метки создания/обновления. Изолирована по компании.

| Поле                | Тип        | Назначение                             |
| ------------------- | ---------- | -------------------------------------- |
| Название            | текст      | Имя воронки                            |
| Компания            | связь      | Владелец записи (изоляция по компании) |
| Создана / Обновлена | дата/время | Метки времени                          |

При создании воронки к ней автоматически добавляются 4 дефолтных этапа (см. ниже).

### Этап воронки

Колонка доски. В отличие от воронки и задачи, этап **не хранит меток создания/обновления**.

| Поле                        | Тип          | Назначение                                                                                           |
| --------------------------- | ------------ | ---------------------------------------------------------------------------------------------------- |
| Название                    | текст        | Имя колонки                                                                                          |
| Порядок                     | число        | Позиция этапа в воронке; при вставке остальные сдвигаются                                            |
| Статус                      | перечисление | Статус задачи, соответствующий этой колонке                                                          |
| Цвет                        | текст        | Цвет колонки в HEX (по умолчанию белый)                                                              |
| Занимать инвентарь          | флаг         | Считать ли единицу инвентаря занятой ремонтом, пока задача стоит на этом этапе; по умолчанию включён |
| Целевое состояние инвентаря | связь        | Состояние, в которое переводится инвентарь при попадании задачи на этап                              |
| Воронка                     | связь        | Воронка, которой принадлежит этап                                                                    |
| Доп. данные                 | объект       | Произвольный JSON                                                                                    |
| Компания                    | связь        | Владелец записи                                                                                      |

### Ремонтная задача

Единица ремонта/сервиса. Хранит все денежные показатели, которые пересчитываются автоматически.

| Поле                                                           | Тип             | Назначение                                                                                      |
| -------------------------------------------------------------- | --------------- | ----------------------------------------------------------------------------------------------- |
| Название                                                       | текст           | Обязательное имя задачи                                                                         |
| Номер                                                          | текст           | Номер задачи                                                                                    |
| Тип задачи                                                     | перечисление    | Внутренняя или внешняя                                                                          |
| Статус                                                         | перечисление    | Текущий статус (см. ниже)                                                                       |
| Направление операции                                           | перечисление    | Тип проводки задачи (как у финансовых операций); хранится, но на расчёты в мастерской не влияет |
| Этап                                                           | связь           | Колонка, на которой находится задача                                                            |
| Автор                                                          | связь           | Создатель (только чтение)                                                                       |
| Исполнитель                                                    | связь           | Пользователь-исполнитель                                                                        |
| Клиент / Заявка на аренду / Позиция заявки / Единица инвентаря | связь           | Контекст задачи                                                                                 |
| Точка проката                                                  | связь           | Обязательна                                                                                     |
| Стоимость                                                      | число (2 знака) | Итог = расходники + услуги (вычисляется)                                                        |
| Стоимость услуг / Стоимость расходников / Оплачено             | число (2 знака) | Вычисляются автоматически                                                                       |
| Завершена в                                                    | дата/время      | Момент завершения (проставляется автоматически)                                                 |
| Порядок сортировки                                             | число           | Позиция внутри статуса                                                                          |
| Создана / Обновлена                                            | дата/время      | Метки времени (создание можно переопределить)                                                   |
| Доп. данные                                                    | объект          | Произвольный JSON                                                                               |

### Статусы задачи

Задача всегда находится в одном из четырёх статусов, и именно статус определяет, в какую колонку она попадает и как учитывается в сводке:

| Статус    | Роль                                                                         |
| --------- | ---------------------------------------------------------------------------- |
| Новая     | Задача заведена, но работа не начата                                         |
| В работе  | Задача выполняется                                                           |
| Завершена | Работа закончена; момент завершения фиксируется                              |
| Архив     | Задача убрана из активного оборота и исключается из большинства сводных сумм |

## Автосоздание дефолтных этапов

Дефолтные этапы появляются автоматически в **двух** ситуациях, и они немного различаются.

**1. При создании воронки.** Как только создаётся новая воронка, к ней сразу добавляются четыре этапа, привязанные именно к этой воронке:

| Название     | Цвет              | Статус    |
| ------------ | ----------------- | --------- |
| Новая заявка | синий (#1890FF)   | Новая     |
| В работе     | розовый (#F759AB) | В работе  |
| Завершена    | зелёный (#52C41A) | Завершена |
| Архив        | серый (#54626C)   | Архив     |

**2. При первом обращении к списку этапов.** Когда запрашивается список этапов и в компании **вообще нет ни одного этапа**, система создаёт тот же набор из четырёх колонок «на лету» — и сразу же переназначает этап всем существующим задачам, сопоставляя их по статусу (задача со статусом «Новая» получает этап «Новая заявка» и т. д.).

<Warning>
  Второй сценарий — это запись данных в ответ на запрос чтения списка. Кроме того, созданные так этапы **не привязаны ни к одной воронке** (в отличие от этапов, созданных вместе с воронкой). Это стоит учитывать, если вы ожидаете, что каждый этап всегда относится к конкретной воронке.
</Warning>

## Порядок этапов и задач

### Порядок колонок

При каждом сохранении этапа система освобождает для него позицию: все остальные этапы, у которых порядковый номер больше или равен номеру сохраняемого, сдвигаются на единицу вперёд. Сам сохраняемый этап при этом не трогается.

<Note>
  Массовое создание дефолтных этапов происходит без запуска этого механизма, поэтому их исходная нумерация 0–3 остаётся нетронутой. А вот при ручном создании или редактировании колонки через API сдвиг срабатывает — в том числе при простом изменении порядка уже существующей колонки.
</Note>

### Порядок задач внутри статуса

Аналогично: при каждом сохранении задачи все остальные задачи **того же статуса** с позицией больше или равной позиции сохраняемой сдвигаются на единицу вперёд. Поскольку у новой задачи позиция по умолчанию равна нулю, свежесозданная карточка встаёт в начало своей колонки, а прежние карточки уезжают ниже.

## Жизненный цикл задачи

### Проставление исполнителя

Если у задачи ещё не задан исполнитель и в запросе на обновление **присутствует поле статуса**, исполнителем автоматически становится текущий пользователь.

<Warning>
  Исполнитель подставляется по факту наличия поля статуса в запросе, а не по факту его реального изменения. То есть даже отправка того же самого статуса при пустом исполнителе назначит текущего пользователя исполнителем.
</Warning>

### Дата завершения

При переходе задачи в статус «Завершена» момент завершения проставляется автоматически текущим временем — но только если он ещё не был заполнен ранее.

Валидация при обновлении запрещает указывать дату завершения вручную, если статус задачи не «Новая» и не «В работе». То есть дату завершения нельзя задать напрямую для уже завершённой или архивной задачи.

<Warning>
  Автопростановка даты завершения работает только на обновлении. Если задача сразу создаётся со статусом «Завершена», момент завершения не заполнится, а вручную его задать нельзя (валидатор не пропустит). Такая задача останется без даты завершения и не попадёт в расчёт средней длительности в сводке.
</Warning>

### Переопределение даты создания и комментарий

При создании задачи можно передать желаемую дату создания — она применяется отдельным сохранением уже после создания записи. Также при создании можно передать текст комментария: тогда к задаче автоматически привязывается комментарий от имени текущего пользователя.

## Автоматические пересчёты и побочные эффекты

Каждое сохранение задачи запускает несколько автоматических действий.

### Пересчёт денежных показателей

Система заново считает:

* **Стоимость расходников** — сумма стоимостей всех привязанных расходников.
* **Стоимость услуг** — сумма стоимостей всех привязанных услуг.
* **Оплачено** — сумма платежей по задаче с учётом знака проводки: приход увеличивает оплаченную сумму, возврат уменьшает.
* **Стоимость** — сумма стоимости расходников и стоимости услуг.

Если все четыре величины совпали с уже сохранёнными, пересчёт завершается без изменений. Иначе значения обновляются точечно (в обход повторного запуска этой же логики), после чего в фоне запускается пересчёт метрики прибыли по задаче.

<Info>
  Итоговая стоимость — это расходники плюс услуги; оплаченная сумма в неё не входит и учитывается отдельно. Все четыре показателя доступны только для чтения — задавать их вручную бессмысленно, при следующем сохранении они будут перезаписаны пересчётом.
</Info>

### Автоперевод состояния инвентаря

Если у этапа задачи задано целевое состояние инвентаря, а к задаче привязана единица инвентаря, чьё текущее состояние отличается от целевого, — состояние этой единицы переводится в целевое. Если целевое состояние не задано, инвентарь не привязан или состояние уже совпадает, ничего не происходит.

### Занятость единицы ремонтом: признак «Занимать инвентарь»

Открытая задача (в статусе «Новая» или «В работе») может держать свою единицу инвентаря занятой: в каталоге и в расчёте доступности такая единица получает статус «на ремонте» и не предлагается к выдаче. Управляет этим признак **«Занимать инвентарь»** у этапа:

* этап с включённым признаком (значение по умолчанию) — пока задача стоит на нём, единица считается занятой ремонтом;
* этап с выключенным признаком — задача на нём единицу не занимает, и та остаётся доступной;
* задача **без этапа** занимает единицу всегда, независимо от настроек.

Признак настраивается компанией самостоятельно — как при создании, так и при изменении этапа. Это позволяет различать колонки по смыслу: например, «Заявка принята» единицу не занимает, а «В ремонте» занимает. Если компании нужно, чтобы мастерская вообще не влияла на доступность инвентаря, признак снимается со всех этапов её воронок.

<Warning>
  Снятие признака убирает вклад именно самой ремонтной задачи. Если у этапа при этом задано целевое состояние инвентаря, у которого включён флаг «блокирует прокат», единица останется недоступной по второму, независимому основанию — уже из-за своего состояния, а не из-за задачи. Чтобы полностью развязать мастерскую и статусы инвентаря, помимо признака «Занимать инвентарь» нужно проверить целевые состояния этапов.
</Warning>

## Список задач: фильтры, поиск и сортировка

Список задач возвращается постранично и по умолчанию отсортирован по порядку сортировки внутри статуса; поддерживается сортировка по другим полям с размещением пустых значений в конце.

### Поиск

Поиск идёт по номеру, названию задачи, имени клиента, названию и уникальному идентификатору инвентаря. Если в компании включён учёт автотранспорта, к поиску добавляются номер машины и техпаспорт.

Ищется вхождение подстроки без учёта регистра. Подбора «неправильной раскладки клавиатуры» нет: запрос латиницей находит только латиницу, запрос кириллицей — только кириллицу. Запросы длиной в один-два символа обрабатываются заметно медленнее, чем от трёх символов, — для них ускоряющие поиск указатели не работают.

### Фильтры

Доступны фильтры по единице инвентаря, автору, исполнителю, клиенту, статусу, типу задачи, датам создания и завершения, этапу, номеру и названию, а также три специальных фильтра:

| Фильтр        | Что делает                             |
| ------------- | -------------------------------------- |
| Статус оплаты | Отбирает по признаку оплаты (см. ниже) |
| Расходник     | Задачи, содержащие указанный расходник |
| Услуга        | Задачи, содержащие указанную услугу    |

Значения фильтра по статусу оплаты:

* **Оплачено** — оплаченная сумма не меньше стоимости, и стоимость больше нуля.
* **Частично** — стоимость больше нуля и оплаченная сумма не равна ей.
* **Не оплачено** — оплаченная сумма равна нулю.
* **Без суммы** — стоимость равна нулю.

<Warning>
  Фильтр «Частично» отбирает все задачи с ненулевой стоимостью, где оплата не совпадает со стоимостью ровно. Под это условие попадают и переплаченные задачи, и полностью неоплаченные (оплата = 0), поэтому «Частично» пересекается с «Не оплачено».
</Warning>

## Сводка по задачам

Вместе с постраничным ответом отдаётся сводка, рассчитанная **по всему отфильтрованному набору задач, а не по текущей странице**:

| Показатель           | Как считается                                                      |
| -------------------- | ------------------------------------------------------------------ |
| Активные             | Количество задач в статусах «Новая» и «В работе»                   |
| Завершённые          | Количество задач в статусе «Завершена»                             |
| Сумма завершённых    | Суммарная стоимость завершённых задач                              |
| Общая сумма          | Сумма стоимостей всех задач, кроме архивных                        |
| Средняя длительность | Среднее время «завершена в» минус «создана» по завершённым задачам |
| Последняя задача     | Дата создания самой свежей неархивной задачи                       |

<Note>
  Обратите внимание на асимметрию исключений: «Общая сумма» и «Последняя задача» исключают архив, «Завершённые», «Сумма завершённых» и «Средняя длительность» считаются только по завершённым, а «Активные» — только по новым и находящимся в работе.
</Note>

## Удаление этапа

Этап можно удалить только если к нему не привязано ни одной задачи. Если задачи есть, удаление отклоняется с сообщением о необходимости сначала переместить задачи.

Через форму обновления этапа можно менять только его название, порядок, воронку, признак «Занимать инвентарь» и целевое состояние инвентаря — статус и цвет через неё не редактируются.

## Как это используется

Список и карточки задач — это операционная доска мастерской: сотрудник ведёт ремонт по колонкам, а система попутно держит в актуальном состоянии стоимость, оплаты, состояние инвентаря и метрику прибыли. Денежные итоги задач далее агрегируются в отчётности мастерской (подробнее: [«Модули: доставки, мастерская, воронки, склад, инвентаризации»](/ru/logic/metrics/modules)).

## Связанные страницы

<CardGroup cols={2}>
  <Card title="Глоссарий: Воронка и задачи" icon="book" href="/ru/logic/workshop/pipeline-glossary">
    Полный перечень полей воронки, этапа и ремонтной задачи со статусами.
  </Card>

  <Card title="Мастерская (ремонтные задачи)" icon="screwdriver-wrench" href="/ru/logic/workshop">
    Обзорная страница модуля и навигация по его разделам.
  </Card>

  <Card title="Ресурсы и склад" icon="boxes-stacked" href="/ru/logic/workshop/resources">
    Складской справочник расходников и их списание/возврат при привязке к задачам с контролем остатков.
  </Card>

  <Card title="Услуги" icon="screwdriver" href="/ru/logic/workshop/services">
    Привязка услуг из каталога к ремонтным задачам с тарифом, ценой и длительностью.
  </Card>

  <Card title="Стоимость и оплаты" icon="money-bill-transfer" href="/ru/logic/workshop/pricing">
    Автоагрегация цены задачи из ресурсов и услуг и суммы оплат, плюс статусы оплаты.
  </Card>

  <Card title="Метрика прибыли" icon="chart-line" href="/ru/logic/workshop/profit">
    Проецирование прибыли по ресурсам и услугам завершённой задачи в общую таблицу метрик.
  </Card>

  <Card title="Автосмена состояния инвентаря" icon="arrows-rotate" href="/ru/logic/workshop/inventory-state">
    Автоматический перевод инвентаря в целевое состояние этапа при движении задачи по воронке.
  </Card>
</CardGroup>
