Модель данных
Раздел построен вокруг трёх сущностей: сам Комплект, его состав (Позиции комплекта) и ценовые варианты (Цены комплекта).Комплект
Карточка набора. Хранит общие атрибуты продукта, настройки ценообразования и признаки публикации.Тип ценообразования задаёт способ расчёта итоговой стоимости: процентное (наценка или скидка в процентах относительно составляющих) либо точное (заданная фиксированная цена). По умолчанию используется процентное.
Позиция комплекта
Одна строка состава — какой продукт и в каком количестве входит в набор.
Позиции можно связывать в альтернативные группы: одна позиция ссылается на другую как на «альтернативу», а обратные ссылки образуют набор её заменителей. Это позволяет описывать взаимозаменяемые варианты внутри комплекта. Позиции всегда выстроены в порядке их создания.
Цена комплекта
Ценовой вариант набора, привязанный к конкретному периоду тарификации, с порядком отображения и признаком публикации.Логика и побочные эффекты
Сохранение комплекта: миниатюра и слаг
При каждом сохранении карточки выполняются два автоматических шага:- Миниатюра изображения. Если изображение поменялось и оно задано, вместо оригинала сохраняется уменьшенная миниатюра.
- Слаг для витрины. Если изменилось название или слаг ещё не заполнен, он генерируется заново из названия (с суффиксом-меткой набора).
После любого сохранения или удаления комплекта запускается синхронизация витрины (обновление опубликованных продуктов). Именно поэтому изменения в наборе отражаются на публичной странице автоматически.
Автосдвиг порядка цен
Порядок отображения ценовых вариантов управляется автоматически. Сразу после сохранения очередной цены все прочие цены с таким же или бо́льшим значением порядка сдвигаются на одну позицию вниз (их порядок увеличивается на единицу). Так новая цена «вставляется» в список, не перезаписывая соседей.Удаление комплекта — мягкое
Удаление комплекта через интерфейс не стирает запись из базы. Вместо этого создаётся отметка о выведении из оборота с методом «удаление» и указанием, кто её создал. Комплект остаётся в системе (например, для истории и метрик), но помечается как удалённый.В списках комплект приходит с вычисляемым признаком «удалён»: он выставляется, если для набора существует хоть одна отметка о выведении из оборота (независимо от её метода). Так фронтенд отличает мягко удалённые наборы от активных.
Как это используется
Расчёт доступности комплекта
Ключевая величина для набора — сколько таких комплектов можно собрать и сколько из них свободно на заданный интервал времени. Логика опирается на состав. Для каждой позиции набора считаются две величины по её продукту:- Всего единиц — сколько единиц продукта вообще есть (не проданы, не приписаны к складу, не выведены из оборота, с учётом доступа пользователя к точкам проката).
- Свободных единиц — сколько единиц продукта свободно на выбранный интервал (по расписанию занятости), за вычетом единиц, явно исключённых из подбора.
Список состава и сводка используют слегка разные механизмы подсчёта свободных единиц: список состава опирается на общий расчёт доступности со статусом «свободна», а сводка и карточки наборов — на расписание занятости. Результаты близки, но при пограничных состояниях единиц могут расходиться на единицы.
Управление составом
Позиции комплекта редактируются в контексте конкретного набора: список позиций всегда фильтруется по идентификатору комплекта из адреса запроса, а при создании новой позиции комплект подставляется автоматически из того же адреса. Клиенту не нужно (и нельзя косвенно) переназначить позицию другому набору через это тело запроса. Каждая позиция в ответе обогащается данными своего продукта: название, артикул, изображение, категория, а также «всего» и «свободно» единиц.Управление ценами
Ценовые варианты также редактируются в рамках набора: список фильтруется по комплекту, при создании комплект подставляется автоматически. Список цен возвращается в порядке создания.Актуальный редактор состава и цен работает с сокращённым набором полей (идентификатор, название, период, порядок для цен; количество, продукт, альтернатива, обязательность для позиций). Сама стоимость и тарифные привязки настраиваются отдельными операциями — массовым созданием и обновлением тарифов комплекта, а также отдельным списком тарифов набора.
Тарифы комплекта
Помимо простых ценовых вариантов у набора есть тарифы, связывающие его с периодами и ценовыми строками. Их можно получить списком по комплекту (только тарифы, привязанные к ценовой строке набора) и редактировать пакетно — массовым созданием и массовым обновлением. Это отдельный слой ценообразования поверх базовой цены и типа ценообразования комплекта.Особенности поведения
- Доступное количество комплектов берётся как минимум по всем позициям набора — лимитирует самая дефицитная составляющая, а не сумма или среднее.
- Список состава набора и сводка используют разные механизмы подсчёта свободных единиц (список состава — общий расчёт доступности со статусом «свободна»; сводка и карточки — расписание занятости), поэтому в пограничных случаях числа свободных единиц могут расходиться.
- При создании позиции или цены привязка к набору берётся из адреса запроса и подставляется принудительно — сменить её через тело запроса нельзя.
- Артикул комплекта не имеет ограничения уникальности на уровне базы — это обычное текстовое поле пользовательского кода.
При делении «всего/свободно» единиц на количество в позиции знаменатель принудительно берётся не меньше единицы — это защита от деления на ноль, когда в позиции указано нулевое количество. Порядок сортировки: позиции комплекта и цены в списках отдаются по времени создания, а не по полю «порядок».
Связанные страницы
Глоссарий: Комплекты (наборы)
Полный перечень полей комплекта, его позиций и ценовых вариантов.
Инвентарь и услуги (CRM)
Обзорная страница модуля инвентаря и услуг.
Инвентарь (единицы)
Отдельные единицы оборудования: статусы, пробег, страховка, импорт и перемещение.
Продукт
Учёт однотипного инвентаря по количеству вместо отдельных единиц.
Тарифы и цены
Тарифы аренды по временным периодам для единиц, продуктов и комплектов.
Доступность и расписание
Расписание занятости инвентаря и расчёт доступности с учётом заказов.
Субаренда
Периоды субаренды единиц с процентом владельца — источник истории выручки.
Услуги (сервисы)
Дополнительные платные услуги и их тарифы в каталоге и заказах.
Обслуживание и ремонт
Плановое и разовое техобслуживание по интервалу или пробегу.
Инвентаризация
Проверки состояния инвентаря при выдаче и приёмке заказов.