Skip to main content
Полный перечень полей — в глоссарии. Комплект — это «набор», который объединяет несколько продуктов в единый продукт с собственным составом, отдельным ценообразованием и возможностью публикации в витрине. Клиент арендует комплект как одну позицию, а система рассчитывает, сколько таких наборов можно собрать из свободных единиц каждого входящего продукта.

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

Раздел построен вокруг трёх сущностей: сам Комплект, его состав (Позиции комплекта) и ценовые варианты (Цены комплекта).

Комплект

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

Позиция комплекта

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

Цена комплекта

Ценовой вариант набора, привязанный к конкретному периоду тарификации, с порядком отображения и признаком публикации.

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

Сохранение комплекта: миниатюра и слаг

При каждом сохранении карточки выполняются два автоматических шага:
  1. Миниатюра изображения. Если изображение поменялось и оно задано, вместо оригинала сохраняется уменьшенная миниатюра.
  2. Слаг для витрины. Если изменилось название или слаг ещё не заполнен, он генерируется заново из названия (с суффиксом-меткой набора).
Слаг обязан быть уникальным в пределах одной компании. Если при сохранении возникает конфликт уникальности пары «компания + слаг», система не роняет запрос: слаг сбрасывается в пустое значение и сохранение повторяется без него.
Из-за такого поведения комплект с конфликтующим слагом может сохраниться вообще без слага. Это влияет на его адресацию в витрине — человекочитаемая ссылка у него будет отсутствовать до следующего успешного пересчёта.
После любого сохранения или удаления комплекта запускается синхронизация витрины (обновление опубликованных продуктов). Именно поэтому изменения в наборе отражаются на публичной странице автоматически.

Автосдвиг порядка цен

Порядок отображения ценовых вариантов управляется автоматически. Сразу после сохранения очередной цены все прочие цены с таким же или бо́льшим значением порядка сдвигаются на одну позицию вниз (их порядок увеличивается на единицу). Так новая цена «вставляется» в список, не перезаписывая соседей.
Сдвиг срабатывает при каждом сохранении, а не только при создании. Повторное сохранение уже существующей цены снова толкнёт вниз все записи с бо́льшим или равным порядком — значения порядка могут «расползаться». Порядок стоит трактовать как относительный признак сортировки, а не как стабильный номер строки.

Удаление комплекта — мягкое

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

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

Расчёт доступности комплекта

Ключевая величина для набора — сколько таких комплектов можно собрать и сколько из них свободно на заданный интервал времени. Логика опирается на состав. Для каждой позиции набора считаются две величины по её продукту:
  • Всего единиц — сколько единиц продукта вообще есть (не проданы, не приписаны к складу, не выведены из оборота, с учётом доступа пользователя к точкам проката).
  • Свободных единиц — сколько единиц продукта свободно на выбранный интервал (по расписанию занятости), за вычетом единиц, явно исключённых из подбора.
Затем каждая величина делится на количество единиц этого продукта в комплекте (с защитой от деления на ноль — знаменатель не меньше единицы). Получается, сколько комплектов «обеспечивает» данная позиция.
Итог по комплекту берётся по самой дефицитной позиции: доступное количество набора равно минимуму среди всех его позиций. Логика верна интуитивно — комплект нельзя собрать в большем числе, чем позволяет самая ограниченная составляющая.
Сводка по всем комплектам агрегирует эти минимумы: суммируются собираемые количества и свободные количества по всем наборам, отдельно считается число наборов и суммарный доход по комплектам (из метрик прибыли).
Интервал доступности задаётся параметрами начала и конца. Если они не переданы, оба берутся равными текущему моменту — то есть по умолчанию доступность считается «на сейчас», а не на будущий период аренды. Для корректного резерва интервал нужно передавать явно.
Список состава и сводка используют слегка разные механизмы подсчёта свободных единиц: список состава опирается на общий расчёт доступности со статусом «свободна», а сводка и карточки наборов — на расписание занятости. Результаты близки, но при пограничных состояниях единиц могут расходиться на единицы.

Управление составом

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

Управление ценами

Ценовые варианты также редактируются в рамках набора: список фильтруется по комплекту, при создании комплект подставляется автоматически. Список цен возвращается в порядке создания.
Актуальный редактор состава и цен работает с сокращённым набором полей (идентификатор, название, период, порядок для цен; количество, продукт, альтернатива, обязательность для позиций). Сама стоимость и тарифные привязки настраиваются отдельными операциями — массовым созданием и обновлением тарифов комплекта, а также отдельным списком тарифов набора.

Тарифы комплекта

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

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

  • Доступное количество комплектов берётся как минимум по всем позициям набора — лимитирует самая дефицитная составляющая, а не сумма или среднее.
  • Список состава набора и сводка используют разные механизмы подсчёта свободных единиц (список состава — общий расчёт доступности со статусом «свободна»; сводка и карточки — расписание занятости), поэтому в пограничных случаях числа свободных единиц могут расходиться.
  • При создании позиции или цены привязка к набору берётся из адреса запроса и подставляется принудительно — сменить её через тело запроса нельзя.
  • Артикул комплекта не имеет ограничения уникальности на уровне базы — это обычное текстовое поле пользовательского кода.
При делении «всего/свободно» единиц на количество в позиции знаменатель принудительно берётся не меньше единицы — это защита от деления на ноль, когда в позиции указано нулевое количество. Порядок сортировки: позиции комплекта и цены в списках отдаются по времени создания, а не по полю «порядок».

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

Глоссарий: Комплекты (наборы)

Полный перечень полей комплекта, его позиций и ценовых вариантов.

Инвентарь и услуги (CRM)

Обзорная страница модуля инвентаря и услуг.

Инвентарь (единицы)

Отдельные единицы оборудования: статусы, пробег, страховка, импорт и перемещение.

Продукт

Учёт однотипного инвентаря по количеству вместо отдельных единиц.

Тарифы и цены

Тарифы аренды по временным периодам для единиц, продуктов и комплектов.

Доступность и расписание

Расписание занятости инвентаря и расчёт доступности с учётом заказов.

Субаренда

Периоды субаренды единиц с процентом владельца — источник истории выручки.

Услуги (сервисы)

Дополнительные платные услуги и их тарифы в каталоге и заказах.

Обслуживание и ремонт

Плановое и разовое техобслуживание по интервалу или пробегу.

Инвентаризация

Проверки состояния инвентаря при выдаче и приёмке заказов.