Core flow ИП-кафе

Полный happy path: ИП открывает кафе, нанимает кассира, заводит меню, принимает один заказ, закрывает день.

Главный вопрос — «работает ли core?»

Если этот сценарий не проходит, никакой test plan не спасёт. Ставь чек-боксы, веди счёт ✅/❌/⚠️.

Что нужно перед стартом

  • Доступ к стенду https://erp-test.nirbi.ru
  • Учётка Franchise (ИП-владелец)
  • Префикс «test-» для всех сущностей которые будешь создавать (чтобы потом удалить и не мешать другим тестерам)
  • Открыты 2 окна: 🖥 Админка в браузере, 💳 POS (приложение или веб)

Заранее известные блокеры

Перед прогоном смотри эту таблицу — на этих шагах будут проблемы:

PhaseШагBugТяжесть
2Создание сотрудникаBUG-008 — 500🚨 БЛОКЕР всего flow
4Привязка прейскуранта к ТТBUG-051 — нельзя вручную🚨 БЛОКЕР продажи
4Меню в карточке ТТBUG-060 — 500Major
5Manager → ТТ / Склад / ЗаказыBUG-014, BUG-016, BUG-017 — 403Major (Manager бесполезен)
5Manager → Стоп-листыBUG-049 — 403Major
7Экспорт CSV ведомостиBUG-024 — 422Minor

Без фикса BUG-008 и BUG-051 flow физически не пройти. Это первая задача разработке.


Phase 1 — Setup точки (~20 мин)

🖥 Админка под Franchise.

Prerequisites

  • Готов реквизиты тестового ЮЛ (или используешь существующее главное)

Шаги

  • 1.1 Open /login → войти под Franchise → попасть на /dashboard
  • 1.2 Открыть Юр.лица → проверить наличие главного ЮЛ (type=franchise, is_primary=true)
  • 1.3 Открыть карточку главного ЮЛ → корректность реквизитов (ИНН, ОГРН, банк, контакты)
  • 1.4 Открыть Торговые точки → «Создать»
  • 1.5 Заполнить ТТ: название «test-Точка-1», адрес, координаты (lat/lng), юрлицо, часовой пояс Europe/Moscow
  • 1.6 Заполнить график 7 дней (например Пн-Пт 09:00-21:00, Сб-Вс 10:00-22:00)
  • 1.7 Сохранить → ТТ должна появиться в списке
  • 1.8 Открыть карточку ТТ → вкладка POS-терминалы → добавить терминал по fs_number
  • 1.9 (опц.) Вкладка Столы → добавить 3-5 столов с capacity и позицией на canvas

Expected по итогу Phase 1

  • ТТ существует и видна в списке
  • График корректный
  • Минимум один POS-терминал привязан

Phase 2 — Кадры (~25 мин)

🖥 Админка под Franchise.

Prerequisites

  • ТТ создана в Phase 1

Шаги

  • 2.1 Открыть Роли → «Создать» роль «test-Manager» с permissions: stores.read+edit, employees.read+edit, catalog.read, warehouse.read+edit, orders.read+edit, stop_lists.read+edit, shifts.read
  • 2.2 Создать роль «test-Cashier» с permissions: pos.access, customers.create_quick, минимум stores.read
  • 2.3 Открыть Сотрудники → «Создать» — Иванов И.И., email manager@test.local, пароль, телефон, роль test-Manager, привязка к ТТ через роль
    • 🚨 BUG-008 — может вернуть 500 INTERNAL_ERROR
  • 2.4 Создать «Петров П.П.» с PIN (4 цифры), email/паролем, роль test-Cashier, привязка к ТТ
    • 🚨 BUG-008 — тот же риск
  • 2.5 В списке сотрудников оба видны со статусом Active
  • 2.6 Открыть карточку Manager → проверить роль и список ТТ — корректно

Expected по итогу Phase 2

  • 2 сотрудника созданы, активны
  • Роли назначены, привязка к ТТ корректная

Если упало на 2.3 / 2.4

Дальнейший flow невозможен без сотрудников. Стоп, репорт BUG-008 как блокер MVP, ждать фикса.


Phase 3 — Каталог (~20 мин)

🖥 Админка под Franchise.

Prerequisites

  • ТТ создана в Phase 1

Шаги

  • 3.1 Открыть Кухонные станции → Создать «Hot Kitchen» (yellow_threshold=5min, red_threshold=10min)
  • 3.2 Открыть Категории → Создать «test-Завтраки»
  • 3.3 Открыть Товары → Создать «Бургер»: type=dish, категория=test-Завтраки, requires_kitchen=true, kitchen_station=Hot Kitchen, vat_rate=vat20, payment_subject=goods, payment_type=full
  • 3.4 Создать «Капучино»: type=dish, requires_kitchen=true, kitchen_station=Hot Kitchen, vat_rate=vat20
  • 3.5 Создать «Бутылка воды»: type=good, requires_kitchen=false, vat_rate=vat20
  • 3.6 Открыть Модификаторы → Создать группу «Размер кофе» (binding_type=structural) с опциями S / M / L
  • 3.7 В карточке «Капучино» → вкладка Модификаторы → привязать «Размер кофе»

Expected по итогу Phase 3

  • 3 товара в каталоге, все видны в списке
  • Группа модификаторов привязана к Капучино

Phase 4 — Прейскурант, меню, стоп-лист (~15 мин)

🖥 Админка под Franchise.

Prerequisites

  • Товары созданы в Phase 3
  • ТТ создана в Phase 1

Шаги

  • 4.1 Открыть Прейскуранты → «Создать» прейскурант «test-Default» (auto-populate активным каталогом)
  • 4.2 Открыть прейскурант → задать цены: Бургер 350, Капучино — S=200, M=240, L=280, Вода 80
  • 4.3 Привязать прейскурант к ТТ через карточку ТТ → поле «Прейскурант»
    • 🚨 BUG-051 — нельзя вручную привязать, всегда становится default; «Назначено ТТ» = 0
  • 4.4 Открыть карточку ТТ → вкладка Меню
    • 🚨 BUG-060 — может вернуть 500
  • 4.5 Проверить что меню показывает 3 товара с актуальными ценами и модификаторами
  • 4.6 Открыть Стоп-листы → поставить «Бургер» в стоп на test-Точка-1
  • 4.7 Refresh меню ТТ → «Бургер» недоступен (скрыт или помечен как «нет в наличии»)
  • 4.8 Снять стоп → «Бургер» вернулся в меню

Expected по итогу Phase 4

  • Прейскурант привязан к ТТ
  • Меню в карточке ТТ открывается, видно 3 товара с ценами
  • Стоп-лист корректно propagates на меню

Если упало на 4.3

Без привязанного прейскуранта Cashier не сможет принимать заказы (нет цен). Стоп, репорт BUG-051.


Phase 5 — Manager работает в админке (~15 мин)

🖥 Админка в новом браузере / incognito.

Prerequisites

  • Manager создан в Phase 2

Шаги

  • 5.1 Logout Franchise → Login под Manager (manager@test.local)
  • 5.2 Открыть Dashboard — проверить что отображается без ошибок
  • 5.3 Открыть Торговые точки → должна быть видна своя ТТ (test-Точка-1)
    • 🚨 BUG-014 — Manager → ТТ возвращает 403
  • 5.4 Открыть Сотрудники → видны сотрудники своей ТТ (Cashier Петров П.П.)
  • 5.5 Открыть Каталог (Товары/Категории) → read-only доступ
  • 5.6 Открыть Склад → должны быть доступны Приёмки/Списания/Остатки своей ТТ
    • 🚨 BUG-016 — Manager → Склад → 403
  • 5.7 Открыть Заказы → должны быть видны заказы своей ТТ
    • 🚨 BUG-017 — Manager → Заказы → 403
  • 5.8 Открыть Стоп-листы → должна мочь ставить/снимать на своей ТТ
    • 🚨 BUG-049 — Стоп-листы → 403 у Manager

Expected по итогу Phase 5

  • Manager видит свою ТТ и может работать в её разделах
  • Не видит данных других ТТ или франшиз

Системная проблема RBAC

Phase 5 практически вся блокируется через 4 разных 403-бага. Это не отдельные баги, а класс багов — RBAC scope-логика для Manager-роли не работает. Приоритет фикса = 1.


Phase 6 — Cashier на POS (~20 мин)

💳 POS-терминал.

Prerequisites

  • Cashier создан в Phase 2 с PIN
  • POS-терминал привязан к ТТ в Phase 1
  • Прейскурант привязан к ТТ в Phase 4
  • Каталог заполнен в Phase 3

Шаги

  • 6.1 Открыть POS-приложение → ввести PIN Cashier (Петров П.П.)
  • 6.2 Login прошёл → главный экран кассы
  • 6.3 Открыть смену → проверка ФЯ → X-отчёт пустой
  • 6.4 Открыть меню — видны 3 товара с ценами из прейскуранта (Бургер 350, Капучино с опциями, Вода 80)
  • 6.5 Создать заказ: добавить Бургер × 1 + Бутылка воды × 1
  • 6.6 Total в чеке = 350 + 80 = 430₽
  • 6.7 Нажать «Оплатить» → выбрать «Карта»
  • 6.8 Эмулировать оплату (тестовая карта эквайринга)
  • 6.9 Чек печатается через ФЯ → фискализируется (ФН → ОФД)
  • 6.10 Заказ переходит в статус ready (без KDS) или in_progress (если в Phase 6 включена кухня)
  • 6.11 Cashier нажимает «Выдан клиенту» → заказ closed

Expected по итогу Phase 6

  • Один успешный заказ оплачен и закрыт
  • Чек напечатан и фискализирован
  • Заказ виден в админке (см. Phase 7)

Phase 7 — Закрытие дня (~10 мин)

💳 POS + 🖥 Админка.

Prerequisites

  • Минимум 1 закрытый заказ в Phase 6

Шаги

  • 7.1 На POS — «Закрыть смену» → Z-отчёт через ФЯ
  • 7.2 Сверка наличных по итогу X-отчёта (опц.)
  • 7.3 Logout Cashier с POS
  • 7.4 В админке под Franchise → открыть Shift Report за сегодня
  • 7.5 Verify: выручка = 430₽, заказов = 1, топ товаров корректный (Бургер, Вода)
  • 7.6 Нажать «Export CSV» → файл скачивается
    • 🚨 BUG-024 — Экспорт CSV → 422
  • 7.7 Открыть Заказы → видеть закрытый заказ от Cashier
  • 7.8 Открыть Активность сотрудников → Cashier Петров П.П. с отработанными часами

Expected по итогу Phase 7

  • Смена закрыта Z-отчётом
  • Финансовая сводка корректная
  • Заказы и активность видны в админке

Score (итог прогона)

Отметь по каждой фазе сколько шагов прошли чисто. Заблокированные (исходно) считай как ❌.

PhaseШагов всего✅ Прошло❌ Упало⚠️ Заблокировано
1. Setup точки9
2. Кадры6
3. Каталог7
4. Прейскурант, меню8
5. Manager в админке8
6. Cashier на POS11
7. Закрытие дня8
Итого57

Acceptance criteria

  • MVP-готовность: Phase 1, 2, 3, 4, 6, 7 — чистые. Phase 5 (Manager в админке) — допустимо отложить если только Franchise работает на этой стадии
  • Production-готовность: все 7 фаз чистые

Если упало — что делать

  1. Зафиксировать на каком шаге, скопировать запрос/ответ если API
  2. Если новый баг — завести в Google Docs по шаблону, присвоить BUG-NNN
  3. Если совпадает с известным — добавить «воспроизведено в RUN-{date}» к существующему багу в Google Docs
  4. Решить: продолжить дальше (если шаг не блокирует следующий) или стоп, ждать фикс (если блокирует)

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

  • Админка ↔ KDS ↔ POS — расширение Phase 6 если включаем кухню (KDS-станции, повар отмечает «готов», multi-station routing)

Связанные зоны

Каждая фаза опирается на функционал из соответствующей зоны: