E2E тест-кейс: ИП «Шаурма у Васи» от аккаунта до закрытия смены
Цель
Базовый сквозной сценарий, проверяющий все аспекты системы кроме каталога (каталог описан отдельно в Настройка каталога ИП).
Аккаунт:
ip@erp.local/admin123(franchise.type=individual)
Фаза 1: Первый вход и ориентация
1.1 Логин
Действие: Открыть https://erp-test.nirbi.ru → ввести ip@erp.local / admin123
Ожидание: Редирект на /dashboard. В меню слева НЕТ пункта «Юр. лица» (type=individual)
Проверить: Пункты видны: Дашборд, Торговые точки, Каталог, Склад, Сотрудники, Роли,
Расписание, Зарплата, Заказы, Отчёты
точно ли все перечислено разделов гораздо больше и вроде ип их должен видеть
1.2 Дашборд
Действие: Посмотреть дашборд
Ожидание: Страница загружается без ошибок. Виджеты пустые (нет данных).
Нет ошибок 403/500 в консоли
Фаза 2: Торговые точки
2.1 Создание первой ТТ
Действие: Торговые точки → Добавить
Заполнить:
- Название: «Шаурма Арбат»
- Адрес: г. Москва, ул. Арбат, д. 10
- Телефон: +7 (495) 123-45-67
- ЮЛ: (выбрать единственное — «ИП Тестовый Иванов А.А.»)
- Расписание: Пн-Пт 10:00-22:00, Сб-Вс 11:00-23:00
Ожидание: ТТ создана, отображается в списке со статусом «Черновик»
2.2 Создание второй ТТ
Действие: Повторить с другими данными
- Название: «Шаурма Тверская»
- Адрес: г. Москва, ул. Тверская, д. 25
Ожидание: 2 ТТ в списке
2.3 Публикация ТТ
Действие: Открыть «Шаурма Арбат» → кнопка «Опубликовать»
Ожидание: Статус меняется на «Опубликована». В списке — зелёный бейдж
Фаза 3: Роли
3.1 Создание роли «Кассир»
Действие: Роли → Добавить роль
Заполнить:
Вкладка «Общее»:
- Название: Кассир
- Описание: Работа на кассе, приём заказов
Вкладка «Разделы Бэк-офиса»:
- Меню: ☑ чтение, ☐ редакт.
- Всё остальное: ☐☐
Вкладка «Функции POS»:
- ☑ Доступ к POS
- ☑ Открытие смены
- ☑ Закрытие смены
- ☑ Приём заказов
- ☑ Применение скидок
- ☑ Внесение наличных
- ☑ Изъятие наличных
- ☐ Инкассация (только менеджер)
- ☐ Возврат (только менеджер)
- ☐ Аннулирование заказа
- ☐ Изменение цены
- ☐ Настройки кассы
Вкладка «Зарплата»:
- Тип: Почасовая
- Ставка: 350 ₽/час
Ожидание: Роль создана, в списке отображается «Кассир» с 0 сотрудников
3.2 Создание роли «Менеджер ТТ»
Действие: Роли → Добавить роль
Заполнить:
Вкладка «Общее»:
- Название: Менеджер ТТ
Вкладка «Разделы Бэк-офиса»:
- Меню: ☑☑
- Прейскуранты: ☑ чтение, ☐ редакт.
- Склад: ☑☑
- Сотрудники: ☑ чтение, ☐ редакт.
- Расписание: ☑☑
- Учёт времени: ☑☑
- Отчёты: ☑
- Стоп-листы: ☑☑
Вкладка «Функции POS»:
- Всё ☑ (полный доступ к кассе)
Вкладка «Зарплата»:
- Тип: Фикс. оклад
- Оклад: 60 000 ₽/мес
Ожидание: 2 роли в списке: «Кассир» (0 чел.), «Менеджер ТТ» (0 чел.) + системная «Администратор»
3.3 Проверка системной роли
Действие: Открыть «Администратор» в списке ролей
Ожидание: Все чекбоксы включены и disabled. Кнопка «Удалить» отсутствует.
Можно изменить только название и описание
Фаза 4: Сотрудники
4.1 Создание кассира
Действие: Сотрудники → Добавить
Заполнить:
- Имя: Мария
- Фамилия: Петрова
- Email: maria@test.local
- Пароль: test1234
- PIN: 1111
- Курьер: ☐
Блок «Роли»:
- + Добавить роль → «Кассир» → ТТ: «Шаурма Арбат»
Ожидание: Сотрудник создан. В карточке: роль «Кассир», ТТ «Шаурма Арбат»
4.2 Создание менеджера
Действие: Сотрудники → Добавить
Заполнить:
- Имя: Дмитрий
- Фамилия: Сидоров
- Email: dmitry@test.local
- Пароль: test1234
- PIN: 2222
Блок «Роли»:
- + Добавить роль → «Менеджер ТТ» → ТТ: «Шаурма Арбат», «Шаурма Тверская»
Ожидание: 2 сотрудника в списке. Менеджер видит 2 ТТ
4.3 Создание кассира для второй ТТ
Действие: Сотрудники → Добавить
Заполнить:
- Имя: Анна
- Фамилия: Козлова
- Email: anna@test.local
- Пароль: test1234
- PIN: 3333
Блок «Роли»:
- + Добавить роль → «Кассир» → ТТ: «Шаурма Тверская»
Ожидание: 3 сотрудника. В фильтре по роли «Кассир» — 2 человека (Мария, Анна).
В фильтре по ТТ «Арбат» — 2 (Мария, Дмитрий)
4.4 Проверка scope: менеджер не видит чужое
Действие: Выйти → залогиниться как dmitry@test.local / test1234
Ожидание: Дмитрий видит только ТТ «Шаурма Арбат» и «Шаурма Тверская»
Видит сотрудников только этих ТТ (Мария, Анна, себя)
Видит Каталог, Склад, Расписание, Учёт времени, Отчёты, Стоп-листы (по ролевым permissions)
НЕ видит: Роли (нет roles.read), Зарплата (нет payroll.read), Юр. лица (type=individual)
Фаза 5: Расписание и смены
5.1 Шаблоны смен
Действие: (под ip@erp.local) Расписание → Шаблоны смен → Добавить
Заполнить:
- ТТ: «Шаурма Арбат»
- Название: «Утренняя смена»
- Начало: 10:00
- Длительность: 8 часов (480 мин)
Ожидание: Шаблон создан
5.2 Назначить смену
Действие: Расписание → выбрать дату (завтра) → «Шаурма Арбат»
- Мария Петрова → «Утренняя смена» (10:00-18:00)
Ожидание: В календаре видна запланированная смена. Мария отображается на этот день
5.3 Фиксация факта (ручной ввод)
Действие: Учёт рабочего времени → Мария Петрова → за сегодня
- Clock in: 10:05
- Clock out: 18:15
- Перерыв: 30 мин
Ожидание: Факт зафиксирован. Чистое время: 7ч 40мин.
Статус: «По расписанию» (если есть плановая смена) или «Внеплановая»
Фаза 6: Склад (после настройки каталога)
Предусловие
Каталог уже настроен по сценарию из Настройка каталога ИП — есть товары, ингредиенты, техкарты, прейскурант
6.1 Приёмка ингредиентов
Действие: Склад → Акты приёмки → Добавить
- ТТ: «Шаурма Арбат»
- Добавить позиции:
- Лаваш: 100 шт
- Куриное мясо: 10 кг (10000 г)
- Капуста: 5 кг
- ...
Ожидание: Акт создан. Складские остатки ТТ «Арбат» обновлены
6.2 Проверка остатков
Действие: Склад → Остатки → фильтр ТТ «Шаурма Арбат»
Ожидание: Все принятые ингредиенты отображаются с корректными количествами
6.3 Списание (ручное)
Действие: Склад → Акты списания → Добавить
- ТТ: «Шаурма Арбат»
- Причина: Истёк срок годности
- Позиции: Помидор — 500 г
Ожидание: Акт создан. Остаток помидоров уменьшился на 500 г
Фаза 7: Стоп-листы
7.1 Выключить позицию
Действие: Каталог → Стоп-листы → «Шаурма Арбат»
- Выключить «Пицца Маргарита»
Ожидание: Пицца Маргарита помечена как недоступна для ТТ «Арбат».
На POS (когда будет) — не отображается в меню этой ТТ.
На ТТ «Тверская» пицца всё ещё доступна
Фаза 8: Зарплата
8.1 Формулы уже заданы в ролях (шаг 3)
Проверить: Роль «Кассир» → 350 ₽/час. Роль «Менеджер ТТ» → 60 000 ₽/мес
8.2 Расчёт ведомости
Действие: Зарплата → Ведомости → «Рассчитать»
- ТТ: «Шаурма Арбат»
- Период: текущий месяц
Ожидание: Ведомость создана:
- Мария Петрова: 7.67ч × 350₽ = 2 683 ₽ (если одна смена зафиксирована)
- Дмитрий Сидоров: 60 000 ₽ / мес (фикс)
Статус: «Рассчитана»
8.3 Подтверждение и экспорт
Действие: Кнопка «Подтвердить» → «Экспорт CSV»
Ожидание: CSV файл скачивается с колонками: ФИО, Роль, Часы, Начислено, Статус
Фаза 9: POS (когда будет реализован)
POS не реализован
Фазы 9.1-9.7 описаны как целевое поведение. Сейчас POS-приложение не имеет экранов заказа/оплаты.
9.1 PIN-логин кассира
Действие: На терминале K10 → запустить POS → ввести PIN 1111 (Мария)
Ожидание: Авторизация успешна. Экран «Открыть смену?»
9.2 Открытие смены
Действие: «Да, открыть смену» → ввести сумму наличных в кассе: 5000 ₽
Ожидание: Смена открыта. Backend: POST /internal/shift-records/clock-in
9.3 Приём заказа
Действие:
1. Тап «Основное» → «Шаурма классическая»
2. Модалка: Соус → «Острый», Добавки → ☑ Сыр
3. Тап «Напитки» → «Газировка» → размер «0.5л»
4. Тап «Напитки» → «Вода 0.5л»
5. Итого в чеке: 300 + 130 + 80 = 510 ₽
Ожидание: Чек отображается на экране с 3 позициями и суммой 510 ₽
9.4 Оплата картой
Действие: «Оплатить» → «Банковская карта» → PayApp intent → клиент прикладывает карту
Ожидание: PayApp возвращает success → чек печатается на ФР → заказ закрыт
9.5 Автосписание ингредиентов
Ожидание: После закрытия заказа со склада ТТ «Арбат» списалось:
- Шаурма: лаваш 1шт, мясо 120г, капуста 50г, помидор 40г, огурец 30г, соус острый 30мл, сыр 30г
- Газировка 0.5л: 1 шт
- Вода 0.5л: 1 шт
9.6 X-отчёт (промежуточный)
Действие: POS → Меню → Отчёты
Ожидание: Отчёт: 1 заказ, выручка 510₽, по карте 510₽, наличных 0₽, в кассе 5000₽
9.7 Закрытие смены
Действие: POS → Меню → «Закончить смену»
- Проверить баланс кассы (5000₽ — ничего не менялось, оплата картой)
- Подтвердить
Ожидание: Z-отчёт печатается на ФР. Смена закрыта.
В бэк-офисе: Акт реализации с 1 заказом, 510₽ выручки
В учёте времени: смена Марии зафиксирована автоматически
Фаза 10: Проверки после рабочего дня (в админке)
10.1 Заказы
Действие: (под ip@erp.local) Заказы → фильтр «Шаурма Арбат» → сегодня
Ожидание: 1 заказ: 510₽, 3 позиции, оплата картой, статус «Закрыт»
10.2 Отчёт по смене
Действие: Отчёты → выбрать смену Марии за сегодня
Ожидание: Полный отчёт: выручка, кол-во заказов, продажи по категориям,
средний чек, топ-позиции
10.3 Дашборд
Действие: Дашборд
Ожидание: Виджет «Активность» показывает смену Марии.
(Виджет продаж — если реализован)
10.4 Складские остатки
Действие: Склад → Остатки → «Шаурма Арбат»
Ожидание: Лаваш: 99 шт (было 100, продана 1 шаурма)
Мясо: 9880 г (было 10000, списано 120г)
Вода: 49 шт
И т.д.
Сводка: что проверяет каждая фаза
| Фаза | Модуль | Сервис | Что тестируется |
|---|---|---|---|
| 1 | Auth + Dashboard | Auth, Admin BFF | Логин, scope, franchise.type gating |
| 2 | Торговые точки | Store Service | CRUD ТТ, публикация, расписание |
| 3 | Роли | User Service | CRUD ролей, permissions, salary formula, системная роль |
| 4 | Сотрудники | User Service | CRUD сотрудников, assign roles, scope-check для менеджера |
| 5 | Расписание | User Service | Шаблоны, план, факт, учёт времени |
| 6 | Склад | Warehouse Service | Приёмка, остатки, списание |
| 7 | Стоп-листы | Catalog Service | Per-ТТ отключение позиции |
| 8 | Зарплата | User Service | Расчёт ведомости, подтверждение, CSV |
| 9 | POS | POS App + Order Service | PIN-login, смена, заказ, оплата, автосписание, Z-отчёт |
| 10 | Отчёты | Order + User Service | Заказы, отчёт по смене, дашборд, остатки |