Каталог — Прейскуранты
(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 записей на страницу.
Действия
Header
| Кнопка | Что происходит | Видимость |
|---|---|---|
| ”Создать прейскурант” | Модалка создания | Franchise |
Строки
| Действие | Видимость | Что происходит |
|---|---|---|
| Клик по названию | Все | Переход в карточку прейскуранта /catalog/price-lists/{id} |
| Переименовать | Franchise | Inline-редактирование названия |
| Сделать дефолтным | 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 | Название товара |
| Цена | price | Inline-редактирование. Формат: 1 200,00 ₽. Валидация: >= 0 |
Таблица цен модификаторов
Collapsible секция “Опции модификаторов”:
| Колонка | Данные | Примечание |
|---|---|---|
| Группа | modifier_group_name | Название группы модификаторов |
| Опция | modifier_option_name | Название опции |
| Цена | price | Inline-редактирование |
Поиск
Текстовый поиск по названию товара / опции. 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 | Список прейскурантов | Клик “Прейскуранты” |
| Список | Карточка прейскуранта | Клик по названию |
| Карточка | Список прейскурантов | Кнопка “Назад к списку” |