Стоп-листы

Бизнес-спека

Route

/stop-lists


Layout

  • Header: “Стоп-листы”
  • Store selector — дропдаун выбора ТТ (вверху страницы)
  • Две секции ниже: “Остановленные товары” и “Остановленные категории”

Store selector

Выбор торговой точки, для которой отображаются стоп-листы.

РольПоведение
ФраншизаДропдаун со всеми ТТ франшизы
ФранчайзиДропдаун только с собственными ТТ (фильтр по store_ids из JWT)
Менеджер ТТАвтовыбор единственной ТТ, дропдаун не показывается

API: GET /api/v1/admin/stores (через BFF из Store Service)

При смене ТТ — перезагрузка данных стоп-листа.


Остановленные товары

Таблица

КолонкаДанные
Товарproduct_name
Причинаreason или ”---“
Остановилstopped_by (имя пользователя если доступно, иначе ID)
Датаcreated_at (формат: dd.mm.yyyy HH:mm)
ДействияКнопка “Снять стоп”

API: GET /api/v1/stop-lists/stores/{storeId} — поле products

Действия

  • “Остановить товар” (кнопка над таблицей) — открывает модалку:

    • Поиск товара (из каталога, GET /api/v1/products?search=...)
    • Поле “Причина” (optional, textarea)
    • Кнопка “Остановить”
    • API: POST /api/v1/stop-lists/stores/{storeId}/products
  • “Снять стоп” (кнопка в строке) — модалка подтверждения:

    • “Снять стоп с товара «{product_name}»?”
    • Кнопки “Отмена” / “Снять”
    • API: DELETE /api/v1/stop-lists/stores/{storeId}/products/{productId}

Остановленные категории

Таблица

КолонкаДанные
Категорияcategory_name
Причинаreason или ”---“
Остановилstopped_by (имя пользователя если доступно, иначе ID)
Датаcreated_at (формат: dd.mm.yyyy HH:mm)
ДействияКнопка “Снять стоп”

API: GET /api/v1/stop-lists/stores/{storeId} — поле categories

Действия

  • “Остановить категорию” (кнопка над таблицей) — открывает модалку:

    • Выбор категории из дерева (GET /api/v1/categories)
    • Поле “Причина” (optional, textarea)
    • Кнопка “Остановить”
    • API: POST /api/v1/stop-lists/stores/{storeId}/categories
  • “Снять стоп” (кнопка в строке) — модалка подтверждения:

    • “Снять стоп с категории «{category_name}»?”
    • Кнопки “Отмена” / “Снять”
    • API: DELETE /api/v1/stop-lists/stores/{storeId}/categories/{categoryId}

Empty state

“Нет остановленных позиций на этой ТТ”

Показывается когда обе таблицы пусты (нет ни остановленных товаров, ни категорий).


Ролевой доступ

РольПросмотрОстановить / Снять стоп
ФраншизаДаДа
ФранчайзиДа (свои ТТ)Да (свои ТТ)
Менеджер ТТДа (своя ТТ)Да (своя ТТ)
КассирТолько чтениеНет (кнопки скрыты)

Ошибки

КодОписаниеUI
PRODUCT_NOT_FOUNDТовар не найденToast: “Товар не найден”
PRODUCT_ALREADY_STOPPEDТовар уже в стоп-листеToast: “Товар уже остановлен”
CATEGORY_NOT_FOUNDКатегория не найденаToast: “Категория не найдена”
CATEGORY_ALREADY_STOPPEDКатегория уже в стоп-листеToast: “Категория уже остановлена”
STORE_ACCESS_DENIEDНет доступа к ТТToast: “Нет доступа к этой точке”

Ссылки