> ## 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.

# Услуги

> Услуги ремонтной задачи: снимок тарифа (цена и срок) и итоговая цена, адреса добавления и правки услуг, разные представления на чтение и запись, автоматический пересчёт стоимости задачи при любом изменении услуги.

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

## Что это за раздел

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

В отличие от расходников (складских ресурсов), услуги не имеют складского учёта: это работа, а не материал. Поэтому у услуги нет количества и списания остатков — есть только цена и справочная длительность.

<Info>
  Ключевая роль услуги в модуле: её итоговая цена суммируется с ценами всех остальных услуг и расходников задачи и формирует общую стоимость ремонтной задачи. Любое добавление, изменение или удаление услуги автоматически запускает пересчёт стоимости задачи.
</Info>

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

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

<Note>
  Снимок тарифа (цена и длительность) и итоговая цена — это отдельные величины. Система не пересчитывает итоговую цену из тарифа сама: оба значения приходят от клиента при создании или изменении услуги. Снимок нужен, чтобы зафиксировать условия на момент добавления, даже если позже прайс изменят. В стоимость задачи попадает именно итоговая цена, а не цена по тарифу.
</Note>

## Логика и побочные эффекты

### Автоматический пересчёт стоимости задачи

Каждое сохранение услуги (создание или изменение) и каждое удаление услуги автоматически запускают пересчёт стоимости связанной ремонтной задачи. Обработчик просто адресует пересчёт к той задаче, к которой привязана услуга.

Пересчёт задачи собирает три суммы:

* сумму итоговых цен всех расходников задачи — стоимость материалов;
* сумму итоговых цен всех услуг задачи — стоимость работ;
* сумму всех оплат по задаче.

Общая стоимость задачи получается как стоимость материалов плюс стоимость работ.

<Tip>
  Пересчёт бережливый: если ни одна из сумм (материалы, работы, оплаты, итог) не изменилась, задача не переписывается — лишней записи в базу не происходит. Запись обновляется только при реальном изменении хотя бы одной величины.
</Tip>

Когда стоимость задачи действительно меняется, вслед за этим в фоне запускается пересчёт прибыли по задаче (метрика прибыли модуля). То есть добавление или удаление услуги в итоге отражается и на показателях прибыли — но уже не мгновенно, а фоновой задачей.

### Автоматическое заполнение служебных полей

* Привязка к ремонтной задаче берётся из адреса запроса (идентификатор задачи в пути), клиент её не передаёт.
* Компания-владелец проставляется автоматически из текущего контекста.
* Даты создания и обновления ведутся автоматически.

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

Услуги задачи доступны через два адреса, оба работают в разрезе конкретной задачи (её идентификатор всегда присутствует в адресе):

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

Оба адреса требуют прав доступа к услугам задачи (проверка прав по модели).

### Разные представления на чтение и запись

* При чтении (просмотр, список) услуга отдаётся вместе с развёрнутыми данными связанной услуги из справочника — удобно показывать в интерфейсе название и параметры услуги, а не только её идентификатор.
* При создании и изменении используется облегчённое представление: связанная услуга передаётся идентификатором, привязка к задаче игнорируется во входных данных и берётся из адреса запроса.

<Warning>
  Привязку к ремонтной задаче нельзя переназначить через API — она только для чтения и всегда определяется адресом запроса. Даже если передать её в теле запроса, значение будет проигнорировано.
</Warning>

Список услуг задачи всегда ограничен одной задачей (по идентификатору из адреса) — увидеть чужие услуги через эти адреса нельзя.

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

<CardGroup cols={2}>
  <Card title="Глоссарий: Услуги" icon="book" href="/ru/logic/workshop/services-glossary">
    Полный перечень полей услуги задачи с типами и значениями по умолчанию.
  </Card>

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

  <Card title="Воронка и задачи" icon="diagram-project" href="/ru/logic/workshop/pipeline">
    Kanban-воронки, этапы и ремонтные задачи с их статусами, порядком и агрегатами по списку.
  </Card>

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

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