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 шт
           И т.д.

Сводка: что проверяет каждая фаза

ФазаМодульСервисЧто тестируется
1Auth + DashboardAuth, Admin BFFЛогин, scope, franchise.type gating
2Торговые точкиStore ServiceCRUD ТТ, публикация, расписание
3РолиUser ServiceCRUD ролей, permissions, salary formula, системная роль
4СотрудникиUser ServiceCRUD сотрудников, assign roles, scope-check для менеджера
5РасписаниеUser ServiceШаблоны, план, факт, учёт времени
6СкладWarehouse ServiceПриёмка, остатки, списание
7Стоп-листыCatalog ServicePer-ТТ отключение позиции
8ЗарплатаUser ServiceРасчёт ведомости, подтверждение, CSV
9POSPOS App + Order ServicePIN-login, смена, заказ, оплата, автосписание, Z-отчёт
10ОтчётыOrder + User ServiceЗаказы, отчёт по смене, дашборд, остатки

Ссылки