Каталог — Прейскуранты

(BR 1.10)

Справочник прейскурантов франшизы. Прейскурант — именованный набор цен на товары и опции модификаторов.

Роут: /catalog/price-lists API: GET /api/v1/price-lists

Только для роли Franchise

Franchisee, Manager и Cashier не видят этот раздел в sidebar.


Таблица

КолонкаДанныеПримечание
НазваниеnameКликабельное — переход в карточку прейскуранта (редактирование цен)
Дефолтныйis_defaultБейдж “По умолчанию” (синий) если true
СтатусstatusБейдж: active = зелёный, inactive = серый
Назначено ТТstore_countЧисло. 0 если только дефолтный
Созданcreated_atФормат: 01.04.2026

Поиск

Текстовый поиск по названию прейскуранта. Query param: search

Пагинация

Стандартная: 20 записей на страницу.


Действия

КнопкаЧто происходитВидимость
”Создать прейскурант”Модалка созданияFranchise

Строки

ДействиеВидимостьЧто происходит
Клик по названиюВсеПереход в карточку прейскуранта /catalog/price-lists/{id}
ПереименоватьFranchiseInline-редактирование названия
Сделать дефолтнымFranchiseТолько для не-дефолтного. Модалка подтверждения
УдалитьFranchiseМодалка подтверждения (см. ниже)

Модалки

Создание прейскуранта

Триггер: кнопка “Создать прейскурант” API: POST /api/v1/price-lists

  • Заголовок: “Новый прейскурант”
  • Поля:
    • Название (текст, обязательное)
    • “Сделать дефолтным” (чекбокс, по умолчанию false)
  • Кнопки: “Отмена” / “Создать”
  • После успеха: добавить строку в таблицу, toast “Прейскурант создан”
  • Ошибка NAME_DUPLICATE: toast “Прейскурант с таким названием уже существует”

Сделать дефолтным

Триггер: пункт меню “Сделать дефолтным” API: PATCH /api/v1/price-lists/{id}{ "is_default": true }

  • Заголовок: “Сменить дефолтный прейскурант”
  • Текст: “Прейскурант [название] станет дефолтным. Все ТТ без явного назначения будут использовать его.”
  • Кнопки: “Отмена” / “Подтвердить”
  • После успеха: обновить бейджи, toast “Дефолтный прейскурант изменён”

Удаление

Триггер: пункт меню “Удалить” API: DELETE /api/v1/price-lists/{id}

  • Заголовок: “Удалить прейскурант”
  • Текст: “Удалить прейскурант [название]? Это действие необратимо.”
  • Кнопки: “Отмена” / “Удалить” (красная)
  • После успеха: убрать строку, toast “Прейскурант удалён”
  • Ошибка CANNOT_DELETE_DEFAULT: toast “Нельзя удалить дефолтный прейскурант”
  • Ошибка PRICE_LIST_ASSIGNED_TO_STORES: toast “Прейскурант назначен на ТТ: [список]“

Состояния

СостояниеЧто показываем
ЗагрузкаSkeleton-таблица
Пусто”Прейскуранты не созданы” + кнопка “Создать прейскурант”
Ошибка загрузки”Не удалось загрузить данные” + кнопка “Повторить”

Ролевая видимость

Franchise

Полный доступ: создание, переименование, удаление, смена дефолтного.

Franchisee / Manager / Cashier

Раздел не отображается в sidebar. При прямом переходе по URL — 403.


Карточка прейскуранта (редактирование цен)

Роут: /catalog/price-lists/:id API: GET /api/v1/price-lists/{id}/items

Страница с ценами конкретного прейскуранта. Изменения применяются мгновенно — без draft/publish.

Заголовок

“Прейскурант: [название]” + бейдж “По умолчанию” (если дефолтный) + бейдж статуса.

Кнопка “Назад к списку” → /catalog/price-lists.

Таблица цен товаров

КолонкаДанныеПримечание
Товарproduct_nameНазвание товара
ЦенаpriceInline-редактирование. Формат: 1 200,00 ₽. Валидация: >= 0

Таблица цен модификаторов

Collapsible секция “Опции модификаторов”:

КолонкаДанныеПримечание
Группаmodifier_group_nameНазвание группы модификаторов
Опцияmodifier_option_nameНазвание опции
ЦенаpriceInline-редактирование

Поиск

Текстовый поиск по названию товара / опции. Query param: search.

Сохранение

  • Кнопка “Сохранить цены” — batch update
  • API товары: PATCH /api/v1/price-lists/{id}/items
  • API модификаторы: PATCH /api/v1/price-lists/{id}/modifier-items
  • Toast: “Цены сохранены”

Мгновенное применение

Цены применяются сразу после сохранения. Нет draft-версий — как в Yuma POS.


Переходы

ОткудаКудаТриггер
SidebarСписок прейскурантовКлик “Прейскуранты”
СписокКарточка прейскурантаКлик по названию
КарточкаСписок прейскурантовКнопка “Назад к списку”

Ссылки