> ## 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/inventory/tariffs-glossary).

## Обзор

Этот раздел описывает, как в системе хранятся и обслуживаются **тарифы** — правила ценообразования для инвентаря. Одна и та же запись тарифа обслуживает три разных объекта: отдельную единицу инвентаря, продукт и позицию внутри комплекта. От того, какая связь у тарифа заполнена, зависит, к чему он относится и по каким правилам его можно менять.

<Info>
  Сама арифметика стоимости — как тариф превращается в цену строки аренды, что такое интервал тарификации, округление вверх, «заморозка» тарифа в момент оформления — уже полностью описана отдельно. Здесь мы не повторяем формулы, а объясняем устройство самих записей тарифов, их менеджер, адреса и массовые операции для комплектов. Подробнее про расчёт стоимости: [«Пересчёт сумм и цен»](/ru/logic/rent/pricing).
</Info>

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

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

| Поле                   | Тип                | Назначение                                                     |
| ---------------------- | ------------------ | -------------------------------------------------------------- |
| Название тарифа        | текст              | Человекочитаемое имя (по умолчанию — «name»)                   |
| Цена                   | число (2 знака)    | Стоимость за один период                                       |
| Период времени         | связь              | Тарифицируемый период (час/сутки и т. п.); может быть пустым   |
| Порядок                | число              | Позиция при сортировке                                         |
| Дни недели             | список чисел (0–6) | В какие дни недели действует тариф; по умолчанию пустой список |
| Начало действия        | время              | Время начала действия в пределах суток                         |
| Конец действия         | время              | Время окончания действия в пределах суток                      |
| Опубликован            | флаг               | Виден ли тариф клиентам (по умолчанию — да)                    |
| Единица инвентаря      | связь              | Заполняется для тарифа отдельной единицы                       |
| Продукт                | связь              | Заполняется для тарифа продукта                                |
| Позиция комплекта      | связь              | Заполняется для тарифа позиции внутри комплекта                |
| Вариант цены комплекта | связь              | Привязка тарифа к конкретному варианту цены комплекта          |
| Компания               | связь              | Владелец записи                                                |
| История изменений      | журнал             | Аудит-лог изменений                                            |

### Три роли одной записи

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

<Note>
  Название тарифа позиции комплекта формируется автоматически по шаблону «Название комплекта | Название варианта цены». Период времени такого тарифа тоже берётся автоматически — из выбранного варианта цены комплекта, а не задаётся вручную.
</Note>

### Менеджер тарифов: скрытие отключённых периодов

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

### Сортировка по умолчанию

Тарифы отсортированы так: сначала тарифы без продукта (тарифы единиц идут первыми), затем по полю порядка, затем от новых к старым по дате создания.

## Тарифы единиц и продуктов

### Список и создание тарифов единицы

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

Что именно попадает в список, регулируется параметром `type`:

| Значение параметра      | Что показывается                                              |
| ----------------------- | ------------------------------------------------------------- |
| не задан (по умолчанию) | тарифы самой единицы и тарифы её продукта вместе              |
| «единица»               | только собственные тарифы единицы                             |
| «продукт»               | только тарифы продукта этой единицы                           |
| «комплект»              | тарифы позиций комплекта, относящихся к продукту этой единицы |

<Warning>
  Варианты «продукт» и «комплект» строят свой особый запрос только если у единицы есть продукт. Если продукта у единицы нет, особый фильтр не применяется, и адрес возвращает собственные тарифы самой единицы (тарифы продукта при этом не подмешиваются, поскольку продукта нет) — то есть на пустой список рассчитывать нельзя. Полностью пустой список возвращается лишь в одном случае — если единицы с указанным идентификатором вообще не существует.
</Warning>

При создании тарифа через этот адрес связь с единицей проставляется автоматически из адреса запроса — вручную её указывать не нужно и нельзя. Поля-идентификаторы комплекта и продукта доступны только для чтения.

### Создание тарифов продукта

Тарифы продукта создаются через отдельный адрес продукта. Связь с продуктом проставляется автоматически из адреса запроса.

### Редактирование и удаление

Изменение и удаление одиночного тарифа доступны через адрес детали. Здесь действует ключевое ограничение:

<Warning>
  Тариф, привязанный к позиции комплекта, **нельзя изменить или удалить** через обычный адрес тарифа. И при попытке обновления, и при попытке удаления система возвращает ошибку. Такие тарифы меняются только через массовые операции комплекта (см. ниже), потому что при любом изменении нужно пересчитать итоговую цену вариантов цены комплекта.
</Warning>

## Тарифы и цены комплектов

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

### Формула итоговой цены варианта

Итоговая цена варианта цены комплекта равна сумме по всем его тарифам произведения:

**цена тарифа × количество соответствующей позиции комплекта.**

Если у варианта нет ни одного тарифа, его итоговая цена считается равной нулю.

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

### Массовое создание тарифов комплекта

Массовое создание принимает список строк, в каждой из которых указываются: цена, позиция комплекта и вариант цены комплекта. Для каждой строки система:

1. Формирует название по шаблону «Название комплекта | Название варианта цены».
2. Берёт период времени из выбранного варианта цены.
3. Создаёт тариф позиции комплекта с указанной ценой.

Все тарифы создаются одной пакетной вставкой. После вставки система **пересчитывает итоговую цену всех вариантов цены этого комплекта** по формуле выше и сохраняет её пакетным обновлением.

<Tip>
  Массовое создание выполняется в единой транзакции: если что-то пойдёт не так на любом шаге (вставка тарифов или пересчёт цен), изменения не сохранятся частично — откатывается всё целиком.
</Tip>

### Массовое обновление тарифов комплекта

Массовое обновление устроено похоже, но каждая строка дополнительно содержит идентификатор изменяемого тарифа. Система пакетно обновляет у указанных тарифов **цену, название и период времени**, после чего так же пересчитывает и сохраняет итоговые цены вариантов цены комплекта.

<Warning>
  При массовом обновлении фактически меняются только цена, название и период времени тарифа. Даже если в строке переданы другие значения позиции комплекта или варианта цены, привязки тарифа к позиции и к варианту цены **не изменятся** — они не входят в набор обновляемых полей. Кроме того, в отличие от массового создания, массовое обновление не обёрнуто в единую транзакцию: обновление тарифов и пересчёт итоговых цен выполняются отдельными шагами.
</Warning>

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

* **Прайс на единицу и на продукт.** Оператор задаёт тарифы продукта (общая цена для всех его единиц) и при необходимости индивидуальные тарифы отдельных единиц. При расчёте стоимости аренды система выбирает подходящий тариф с учётом периода, дней недели и времени суток — по правилам, описанным в разделе про расчёт стоимости.
* **Прайс на комплект.** Оператор настраивает варианты цены комплекта (например, разные периоды), затем массово заводит или правит тарифы позиций. Итоговая цена каждого варианта пересчитывается автоматически из тарифов позиций и их количеств — руками её не редактируют.
* **Вывод периода из оборота.** Если временной период отключают, тарифы, привязанные к нему, автоматически исчезают из выборок и расчётов, оставаясь в базе для истории.

Про дополнительные услуги и их тарифы, а также про полную арифметику стоимости строки аренды — см. соседние разделы модуля и страницу [«Пересчёт сумм и цен»](/ru/logic/rent/pricing).

## Особенности поведения

* При массовом обновлении тарифов комплекта фактически применяются только цена, название и период времени; переданные в строке позиция комплекта и вариант цены игнорируются, так как не входят в набор обновляемых полей.
* Массовое создание тарифов комплекта выполняется в единой транзакции, а массовое обновление — нет; при сбое на этапе пересчёта итоговых цен обновление тарифов уже окажется сохранённым.
* Итоговая цена варианта цены комплекта нигде не задаётся вручную — она всегда пересчитывается как сумма цен тарифов позиций, умноженных на количество позиций.
* В списке тарифов единицы особые фильтры по продукту и по комплекту строят свой запрос только при наличии у единицы продукта; если продукта нет, фильтр не применяется и возвращаются собственные тарифы самой единицы (а не пустой список), тогда как полностью пустой ответ отдаётся лишь при отсутствии самой единицы. Сам список не постраничный.
* Название и период времени тарифа позиции комплекта формируются автоматически (имя по шаблону «Комплект | Вариант цены», период — из варианта цены), а не задаются вручную.

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

<CardGroup cols={2}>
  <Card title="Глоссарий: Тарифы и цены" icon="book" href="/ru/logic/inventory/tariffs-glossary">
    Полный перечень полей и терминов, используемых в тарифах инвентаря.
  </Card>

  <Card title="Инвентарь и услуги (CRM)" icon="boxes-stacked" href="/ru/logic/inventory">
    Обзорная страница модуля инвентаря и услуг со ссылками на все разделы.
  </Card>

  <Card title="Инвентарь (единицы)" icon="box" href="/ru/logic/inventory/inventory-items">
    Отдельные единицы оборудования: статусы, состояние, пробег, страховка, импорт и массовые операции.
  </Card>

  <Card title="Продукт" icon="layer-group" href="/ru/logic/inventory/inventory-groups">
    Учёт однотипного инвентаря по количеству с общим состоянием и тарифами продукта.
  </Card>

  <Card title="Комплекты (наборы)" icon="boxes-stacked" href="/ru/logic/inventory/inventory-sets">
    Наборы инвентаря, сдаваемые как единое целое: состав, позиции и цены комплекта.
  </Card>

  <Card title="Доступность и расписание" icon="calendar-check" href="/ru/logic/inventory/availability">
    Расписание занятости инвентаря и расчёт доступности с учётом заказов и задач мастерской.
  </Card>

  <Card title="Субаренда" icon="handshake" href="/ru/logic/inventory/sublease">
    Периоды субаренды единиц с процентом владельца — источник истории для распределения выручки.
  </Card>

  <Card title="Услуги (сервисы)" icon="concierge-bell" href="/ru/logic/inventory/services">
    Дополнительные платные услуги и их тарифы, публикуемые в каталоге и добавляемые к заказам.
  </Card>

  <Card title="Обслуживание и ремонт" icon="screwdriver-wrench" href="/ru/logic/inventory/maintenance">
    Плановое и разовое техобслуживание инвентаря по интервалу или пробегу, с уведомлениями.
  </Card>

  <Card title="Инвентаризация" icon="clipboard-check" href="/ru/logic/inventory/inventorization">
    Проверки состояния инвентаря при выдаче и приёмке заказов, обновляющие статус единицы.
  </Card>
</CardGroup>
