food-market/tests/e2e/reports/full-chain-uicheck-012558.md
nns b1bdf5c228
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
fix(migration): не схлопывать разные карточки МойСклада по артикулу + актуализировать объяснение сверки
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:11:06 +05:00

496 lines
36 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# E2E report: full-chain
Запущен: 2026-10-07T20:26:02.352Z
Длительность: 143.3с
**Итог:** 15 ✓ / 1 ✗ / 0 ⚠ / 0 ◯ (всего 16)
## ✓ Step step01_register_and_login: Регистрация организации → вход владельцем → простой режим (скрытые модули 403)
Длительность: 4809мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Регистрация организации e2e-fullchain + вход владельцем | ✓ ожид=token факт=token |
| api | /api/me: роль Admin | ✓ ожид=Admin факт=Admin |
| api | Простой режим включён (advancedMode=false) | ✓ ожид=false факт=false |
| api | Скрытый модуль недоступен: приёмка оптовых отгрузок (demands) | ✓ ожид=403 advanced-mode-required факт=403 https://food-market.kz/errors/advanced-mode-required |
| api | Скрытый модуль недоступен: перемещения (transfers) | ✓ ожид=403 advanced-mode-required факт=403 https://food-market.kz/errors/advanced-mode-required |
| api | Скрытый модуль недоступен: акции (promotions) | ✓ ожид=403 advanced-mode-required факт=403 https://food-market.kz/errors/advanced-mode-required |
| api | Скрытый модуль недоступен: ABC-отчёт | ✓ ожид=403 advanced-mode-required факт=403 https://food-market.kz/errors/advanced-mode-required |
| ui | Кабинет владельца открылся без ошибок (0 console/5xx/тостов) | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Вход владельца → дашборд](full-chain-uicheck-012558/screenshots/01-vhod-dashboard.png)
![Вход владельца → дашборд](full-chain-uicheck-012558/screenshots/01-vhod-dashboard.png)
## ✓ Step step02_catalog_and_supplier: Справочники — группа, 5 товаров (разные ед.изм., 1 весовой) + цены + штрихкоды; поставщик
Длительность: 7584мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Валюта KZT в справочнике | ✓ ожид=KZT факт=есть |
| api | Магазин (склад) существует | ✓ ожид=≥1 факт=1 |
| api | Единицы измерения доступны (≥5 различных) | ✓ ожид=≥5 факт=5 |
| api | Группа товаров создана | ✓ ожид=200+id факт=201 |
| api | Создано 5 товаров (разные ед.изм.) | ✓ ожид=5 факт=5 |
| api | Один товар весовой (дробное кол-во) | ✓ ожид=1 факт=1 |
| api | Товар находится по штрихкоду | ✓ ожид=200 факт=200 |
| api | Поставщик создан (БИН+телефон) | ✓ ожид=200+id факт=201 |
| ui | Экран «Каталог: 5 товаров с ценами и штрихкодами»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Карточка товара: цена продажи и штрихкод»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Справочник контрагентов: поставщик (БИН, телефон)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Каталог: 5 товаров с ценами и штрихкодами](full-chain-uicheck-012558/screenshots/02-tovary-spisok.png)
![Каталог: 5 товаров с ценами и штрихкодами](full-chain-uicheck-012558/screenshots/02-tovary-spisok.png)
[Карточка товара: цена продажи и штрихкод](full-chain-uicheck-012558/screenshots/02-tovar-kar_tochka.png)
![Карточка товара: цена продажи и штрихкод](full-chain-uicheck-012558/screenshots/02-tovar-kar_tochka.png)
[Справочник контрагентов: поставщик (БИН, телефон)](full-chain-uicheck-012558/screenshots/02-postavshchik.png)
![Справочник контрагентов: поставщик (БИН, телефон)](full-chain-uicheck-012558/screenshots/02-postavshchik.png)
## ✗ Step step02a_employees_and_points: Сотрудники (кассир/кладовщик/админ) + 2 точки продаж; права (API 403); правка/пароль/блокировка
Длительность: 19200мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Системные роли Кассир/Кладовщик есть | ✓ ожид=есть факт=Администратор,Кладовщик,Кассир |
| api | Точка продаж создана: Касса-1 fc1791404762351 | ✓ ожид=200+id факт=201 |
| api | Точка продаж создана: Касса-2 fc1791404762351 | ✓ ожид=200+id факт=201 |
| api | Точка 2: переименование + деактивация | ✓ ожид=200 факт=204 |
| api | Точка 2: повторная активация | ✓ ожид=200 факт=204 |
| api | Сотрудник создан: Кассир | ✓ ожид=200+пароль факт=ok |
| api | Сотрудник создан: Кладовщик | ✓ ожид=200+пароль факт=ok |
| api | Сотрудник создан: Администратор | ✓ ожид=200+пароль факт=ok |
| api | Кассир → деньги (API) 403 | ✓ ожид=403 факт=403 |
| api | Кассир → платежи (API) 403 | ✓ ожид=403 факт=403 |
| api | Кассир → сотрудники/настройки (API) 403 | ✓ ожид=403 факт=403 |
| api | Кассир → продажи доступны | ✓ ожид=200 факт=200 |
| api | Кассир → свои смены доступны (касса) | ✓ ожид=200 факт=200 |
| ui | Кассир: в меню нет раздела «Деньги» | ✗ ожид=нет /money факт=/money/shifts |
| ui | Кассир: в меню нет «Настройки» | ✓ ожид=нет /settings факт=нет |
| api | Кассир сменил пароль | ✓ ожид=204 факт=200 |
| api | Вход по новому паролю — успех | ✓ ожид=успех факт=200 |
| api | Вход по старому паролю — отказ | ✓ ожид=отказ факт=400 |
| api | Кладовщик → деньги 403 | ✓ ожид=403 факт=403 |
| api | Кладовщик → приёмки доступны | ✓ ожид=200 факт=200 |
| api | Правка сотрудника (ФИО/тел/должность) | ✓ ожид=200 факт=204 |
| api | Блокировка (увольнение) сотрудника | ✓ ожид=200 факт=204 |
| api | Заблокированный кассир не получает токен | ✓ ожид=отказ факт=400 |
| api | Заблокированный кассир: обновление токена (refresh) → отказ | ✓ ожид=отказ факт=400 |
| ui | Экран «Сотрудники: кассир, кладовщик, администратор (роли)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Точки продаж (2 кассы)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Кабинет кассира (ограниченное меню)](full-chain-uicheck-012558/screenshots/02a-kabinet-kassira.png)
![Кабинет кассира (ограниченное меню)](full-chain-uicheck-012558/screenshots/02a-kabinet-kassira.png)
[Кассир: прямой URL /money/accounts не открывает данные](full-chain-uicheck-012558/screenshots/02a-kassir-pryamoy-url.png)
![Кассир: прямой URL /money/accounts не открывает данные](full-chain-uicheck-012558/screenshots/02a-kassir-pryamoy-url.png)
[Сотрудники: кассир, кладовщик, администратор (роли)](full-chain-uicheck-012558/screenshots/02a-sotrudniki.png)
![Сотрудники: кассир, кладовщик, администратор (роли)](full-chain-uicheck-012558/screenshots/02a-sotrudniki.png)
[Точки продаж (2 кассы)](full-chain-uicheck-012558/screenshots/02a-tochki-prodazh.png)
![Точки продаж (2 кассы)](full-chain-uicheck-012558/screenshots/02a-tochki-prodazh.png)
## ✓ Step step03_money_accounts: Деньги — касса, банковский счёт (номер), эквайринг; начальные остатки
Длительность: 2679мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Касса магазина создана (Cash, нач.остаток 50000) | ✓ ожид=200+id факт=201 |
| api | Банковский счёт создан (Bank, номер, нач.остаток 200000) | ✓ ожид=200+id факт=201 |
| api | Счёт эквайринга создан (Acquiring) | ✓ ожид=200+id факт=201 |
| api | Для 2-й точки созданы своя касса и эквайринг | ✓ ожид=2 счёта факт=201/201 |
| api | Отчёт «Деньги»: касса currentBalance = начальный остаток | ✓ ожид=50000 факт=50000 |
| api | Отчёт «Деньги»: банк currentBalance = начальный остаток | ✓ ожид=200000 факт=200000 |
| ui | Экран «Счета: касса, банк (номер), эквайринг — начальные остатки»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Счета: касса, банк (номер), эквайринг — начальные остатки](full-chain-uicheck-012558/screenshots/03-scheta.png)
![Счета: касса, банк (номер), эквайринг — начальные остатки](full-chain-uicheck-012558/screenshots/03-scheta.png)
## ✓ Step step04_initial_supplier_debt: Начальный долг поставщику через корректировку взаиморасчётов (WeOwe) → долг = сумме
Длительность: 2134мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Корректировка взаиморасчётов создана (WeOwe 100000) | ✓ ожид=200+id факт=201 |
| api | Корректировка проведена | ✓ ожид=204 факт=204 |
| api | Долг поставщика = 100000 (только начальный) | ✓ ожид=100000 факт=100000 |
| ui | Экран «Долги поставщикам: начальный долг 100 000 ₸»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Долги поставщикам: начальный долг 100 000 ₸](full-chain-uicheck-012558/screenshots/04-dolg-nachalnyy.png)
![Долги поставщикам: начальный долг 100 000 ₸](full-chain-uicheck-012558/screenshots/04-dolg-nachalnyy.png)
## ✓ Step step05_supply1_manual: Приёмка №1 вручную (кладовщик) → провести → остатки +кол-во; себестоимость
Длительность: 7556мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Кладовщик авторизован для приёмки | ✓ ожид=token факт=keeper |
| api | Приёмка №1 создана (черновик) | ✓ ожид=200+id факт=201 |
| api | Приёмка №1 проведена | ✓ ожид=204 факт=204 |
| api | Остаток 0fa5c747… +12.5 | ✓ ожид=12.5 факт=12.5 |
| api | Остаток 3386b618… +25 | ✓ ожид=25 факт=25 |
| api | Остаток 37032683… +30 | ✓ ожид=30 факт=30 |
| api | Остаток 6bede1a2… +35 | ✓ ожид=35 факт=35 |
| api | Остаток e45be9a1… +40 | ✓ ожид=40 факт=40 |
| api | Себестоимость товара = цене приёмки | ✓ ожид=300 факт=300 |
| ui | Экран «Приёмка №1: форма создания (до проведения)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Список приёмок»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Приёмка №1: проведена, строки и себестоимость»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Приёмка №1: форма создания (до проведения)](full-chain-uicheck-012558/screenshots/05-priemka1-forma.png)
![Приёмка №1: форма создания (до проведения)](full-chain-uicheck-012558/screenshots/05-priemka1-forma.png)
[Список приёмок](full-chain-uicheck-012558/screenshots/05-priemka1-spisok.png)
![Список приёмок](full-chain-uicheck-012558/screenshots/05-priemka1-spisok.png)
[Приёмка №1: проведена, строки и себестоимость](full-chain-uicheck-012558/screenshots/05-priemka1-provedena.png)
![Приёмка №1: проведена, строки и себестоимость](full-chain-uicheck-012558/screenshots/05-priemka1-provedena.png)
## ✓ Step step06_supply2_excel: Приёмка №2 из табличной накладной (поставщик не указан → «Поставщик не указан») → провести
Длительность: 8353мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Табличная накладная загружена | ✓ ожид=200+id факт=200 |
| api | Накладная разобрана (не pending/parsing) | ✓ ожид=needs_review факт=needs_review |
| api | Накладная перенесена в приёмку (apply) | ✓ ожид=200+supplyId факт=200 |
| api | Поставщик приёмки №2 = «Поставщик не указан» | ✓ ожид=Поставщик не указан факт=Поставщик не указан |
| api | Приёмка №2 проведена | ✓ ожид=204 факт=204 |
| api | Остаток Товар 1 fc17914047 +7 | ✓ ожид=7 факт=7 |
| api | Остаток Товар 2 fc17914047 +4 | ✓ ожид=4 факт=4 |
| api | Остаток Товар 3 fc17914047 +9 | ✓ ожид=9 факт=9 |
| ui | Экран «Загруженные накладные (табличная разобрана)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Приёмка №2: «Поставщик не указан», проведена»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Загруженные накладные (табличная разобрана)](full-chain-uicheck-012558/screenshots/06-nakladnye-spisok.png)
![Загруженные накладные (табличная разобрана)](full-chain-uicheck-012558/screenshots/06-nakladnye-spisok.png)
[Приёмка №2: «Поставщик не указан», проведена](full-chain-uicheck-012558/screenshots/06-priemka2-provedena.png)
![Приёмка №2: «Поставщик не указан», проведена](full-chain-uicheck-012558/screenshots/06-priemka2-provedena.png)
## ✓ Step step07_supply3_photo: Приёмка №3 по фото-накладной → ручное сопоставление → провести; снимки удалены с диска
Длительность: 25706мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Фото-накладная загружена | ✓ ожид=200+id факт=id |
| api | Фото-накладная распознана (OCR, needs_review; до 3 попыток) | ✓ ожид=needs_review факт=needs_review |
| api | OCR извлёк хотя бы одну строку | ✓ ожид=≥1 факт=5 |
| api | Фото-накладная перенесена в приёмку | ✓ ожид=200 факт=200 |
| api | Приёмка №3 проведена | ✓ ожид=204 факт=204 |
| api | Снимки удалены с диска после apply (photo → 404) | ✓ ожид=404 факт=404 |
| ui | Экран «Фото-накладная: распознана (OCR) и сопоставлена вручную»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Приёмка №3 (по фото): проведена»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Фото-накладная: распознана (OCR) и сопоставлена вручную](full-chain-uicheck-012558/screenshots/07-foto-nakladnaya-razobrana.png)
![Фото-накладная: распознана (OCR) и сопоставлена вручную](full-chain-uicheck-012558/screenshots/07-foto-nakladnaya-razobrana.png)
[Приёмка №3 (по фото): проведена](full-chain-uicheck-012558/screenshots/07-priemka3-provedena.png)
![Приёмка №3 (по фото): проведена](full-chain-uicheck-012558/screenshots/07-priemka3-provedena.png)
[Фото-приёмка с телефона (моб.)](full-chain-uicheck-012558/screenshots/07-mob-foto-priemka.png)
![Фото-приёмка с телефона (моб.)](full-chain-uicheck-012558/screenshots/07-mob-foto-priemka.png)
## ✓ Step step08_supplier_payments: Оплата — №1 частично нал из кассы, №2 полностью с банка; статусы + долг = формуле
Длительность: 4617мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Оплата №1 частично наличными из кассы | ✓ ожид=204 факт=201 |
| api | Оплата №2 полностью с банковского счёта | ✓ ожид=204 факт=201 |
| api | Приёмка №1: оплачено = частичной сумме | ✓ ожид=33900 факт=33900 |
| api | Приёмка №2: оплачено полностью | ✓ ожид=8640 факт=8640 |
| api | Долг реального поставщика = начальный + приёмки − оплаты | ✓ ожид=177130 факт=177130 |
| ui | Экран «Платежи поставщикам: нал из кассы + с банка»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Долги поставщикам после оплат (= формуле)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Платежи поставщикам: нал из кассы + с банка](full-chain-uicheck-012558/screenshots/08-platezhi.png)
![Платежи поставщикам: нал из кассы + с банка](full-chain-uicheck-012558/screenshots/08-platezhi.png)
[Долги поставщикам после оплат (= формуле)](full-chain-uicheck-012558/screenshots/08-dolg-posle-oplat.png)
![Долги поставщикам после оплат (= формуле)](full-chain-uicheck-012558/screenshots/08-dolg-posle-oplat.png)
## ✓ Step step09_cashier_shift: Смена — размен, 3 продажи (нал/карта/смеш), oversell→отказ, возврат, внесение/выплата, закрытие с расхождением + Z; продажа без смены→отказ
Длительность: 10558мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Смена открыта (размен 5000) | ✓ ожид=200+id факт=200 |
| api | Продажа 1 (наличные) проведена | ✓ ожид=204 факт=204 |
| api | Продажа 2 (карта) проведена | ✓ ожид=204 факт=204 |
| api | Продажа 3 (смешанная) проведена | ✓ ожид=204 факт=204 |
| api | Продажа больше остатка → отказ (409) | ✓ ожид=409 факт=409 |
| api | Возврат по чеку проведён (1 шт, наличные) | ✓ ожид=204 факт=204 |
| api | Внесение и выплата зафиксированы | ✓ ожид=2×200 факт=200/200 |
| api | Смена закрыта | ✓ ожид=200 факт=200 |
| api | Закрытие: «должно быть» (expectedCash) верно | ✓ ожид=12950 факт=12950 |
| api | Закрытие: разница (факт − должно) = расхождению | ✓ ожид=500 факт=500 |
| api | Z-отчёт: нал.продажи и expectedCash сходятся | ✓ ожид=1450/12950 факт=1450/12950 |
| api | Продажа без открытой смены → отказ | ✓ ожид=409 факт=409 |
| ui | Экран «Смены кассы: открытие/закрытие, размен»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Закрытая смена: должно быть / факт / разница (Z-отчёт)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Чеки продаж (наличные/карта/смешанная) и возврат»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Смены кассы: открытие/закрытие, размен](full-chain-uicheck-012558/screenshots/09-smeny-spisok.png)
![Смены кассы: открытие/закрытие, размен](full-chain-uicheck-012558/screenshots/09-smeny-spisok.png)
[Закрытая смена: должно быть / факт / разница (Z-отчёт)](full-chain-uicheck-012558/screenshots/09-smena-zakryta-z.png)
![Закрытая смена: должно быть / факт / разница (Z-отчёт)](full-chain-uicheck-012558/screenshots/09-smena-zakryta-z.png)
[Чеки продаж (наличные/карта/смешанная) и возврат](full-chain-uicheck-012558/screenshots/09-cheki-prodazhi.png)
![Чеки продаж (наличные/карта/смешанная) и возврат](full-chain-uicheck-012558/screenshots/09-cheki-prodazhi.png)
## ✓ Step step09a_points_binding: Привязка кассира к точкам; параллельные смены на 2 точках не смешивают деньги; продажа на неактивной→отказ
Длительность: 4860мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Кассир авторизован для проверки привязки | ✓ ожид=token факт=ok |
| api | Кассир открывает смену на НЕзакреплённой точке 2 → отказ | ✓ ожид=4xx факт=400 |
| api | Кассир открывает смену на закреплённой точке 1 → успех | ✓ ожид=200+id факт=200 |
| api | Вторая смена на той же точке → 409 | ✓ ожид=409 факт=409 |
| api | Параллельная смена на точке 2 открыта | ✓ ожид=200+id факт=200 |
| api | Продажи прошли на обеих точках | ✓ ожид=2×204 факт=204/204 |
| api | Точка 1: касса = размен + её продажа (деньги не смешаны) | ✓ ожид=1500 факт=1500 |
| api | Точка 2: касса = размен + её продажа (деньги не смешаны) | ✓ ожид=2700 факт=2700 |
| api | Смена/продажа на неактивной точке → отказ | ✓ ожид=4xx факт=400 |
| ui | Экран «Параллельные смены на точках 1 и 2 (деньги раздельны)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Параллельные смены на точках 1 и 2 (деньги раздельны)](full-chain-uicheck-012558/screenshots/09a-parallelnye-smeny.png)
![Параллельные смены на точках 1 и 2 (деньги раздельны)](full-chain-uicheck-012558/screenshots/09a-parallelnye-smeny.png)
## ✓ Step step10_warehouse_ops: Склад — оприходование излишка, списание брака, инвентаризация CSV (часть товаров): непосчитанные не обнулены
Длительность: 10641мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Оприходование излишка (+8) | ✓ ожид=8 факт=8 |
| api | Списание брака (−2) | ✓ ожид=2 факт=2 |
| api | Импорт инвентаризации нашёл 2 товара | ✓ ожид=2 факт=2 |
| api | Инвентаризация (частичная) создана | ✓ ожид=200+id факт=201 |
| api | Инвентаризация проведена | ✓ ожид=204 факт=204 |
| api | Расхождение применено (товар с недостачей → факт) | ✓ ожид=40.5 факт=40.5 |
| api | Непосчитанный товар не обнулён | ✓ ожид=53 факт=53 |
| ui | Экран «Оприходование излишка (+8)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Списание брака (−2)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Инвентаризация (часть товаров): расхождения»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Остатки после складских операций»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Оприходование излишка (+8)](full-chain-uicheck-012558/screenshots/10-oprihodovanie.png)
![Оприходование излишка (+8)](full-chain-uicheck-012558/screenshots/10-oprihodovanie.png)
[Списание брака (−2)](full-chain-uicheck-012558/screenshots/10-spisanie-braka.png)
![Списание брака (−2)](full-chain-uicheck-012558/screenshots/10-spisanie-braka.png)
[Инвентаризация (часть товаров): расхождения](full-chain-uicheck-012558/screenshots/10-inventarizaciya.png)
![Инвентаризация (часть товаров): расхождения](full-chain-uicheck-012558/screenshots/10-inventarizaciya.png)
[Остатки после складских операций](full-chain-uicheck-012558/screenshots/10-ostatki-sklad.png)
![Остатки после складских операций](full-chain-uicheck-012558/screenshots/10-ostatki-sklad.png)
[Инвентаризация с телефона (сканер) (моб.)](full-chain-uicheck-012558/screenshots/10-mob-inventarizaciya.png)
![Инвентаризация с телефона (сканер) (моб.)](full-chain-uicheck-012558/screenshots/10-mob-inventarizaciya.png)
## ✓ Step step11_reports: Отчёты — продажи за день, прибыль, остатки на дату, «Деньги», долги; по точкам/кассирам
Длительность: 9912мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Отчёт продаж за день доступен, выручка ≥ 0 | ✓ ожид=≥0 факт=3300 |
| api | Прибыль = выручка − себестоимость (по каждой строке) | ✓ ожид=revenue−cost факт=200 |
| api | Отчёт остатков на дату доступен | ✓ ожид=список факт=200 |
| api | Деньги: касса = начальный − оплата наличными | ✓ ожид=16100 факт=16100 |
| api | Деньги: банк = начальный − оплата с банка | ✓ ожид=191360 факт=191360 |
| api | Отчёт долгов поставщикам доступен | ✓ ожид=200 факт=200 |
| api | Выручка по точкам в сумме = общей выручке дня | ✓ ожид=3300 факт=3300 |
| api | Выручка по кассирам в сумме = общей выручке дня | ✓ ожид=3300 факт=3300 |
| ui | Экран «Отчёт: продажи за день (выручка)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Отчёт: прибыль (выручка − себестоимость)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Отчёт: остатки на дату»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Отчёт «Деньги»: остатки по счетам»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Экран «Отчёт: долги поставщикам»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Отчёт: продажи за день (выручка)](full-chain-uicheck-012558/screenshots/11-otchet-prodazhi.png)
![Отчёт: продажи за день (выручка)](full-chain-uicheck-012558/screenshots/11-otchet-prodazhi.png)
[Отчёт: прибыль (выручка − себестоимость)](full-chain-uicheck-012558/screenshots/11-otchet-pribyl.png)
![Отчёт: прибыль (выручка − себестоимость)](full-chain-uicheck-012558/screenshots/11-otchet-pribyl.png)
[Отчёт: остатки на дату](full-chain-uicheck-012558/screenshots/11-otchet-ostatki.png)
![Отчёт: остатки на дату](full-chain-uicheck-012558/screenshots/11-otchet-ostatki.png)
[Отчёт «Деньги»: остатки по счетам](full-chain-uicheck-012558/screenshots/11-otchet-dengi.png)
![Отчёт «Деньги»: остатки по счетам](full-chain-uicheck-012558/screenshots/11-otchet-dengi.png)
[Отчёт: долги поставщикам](full-chain-uicheck-012558/screenshots/11-otchet-dolgi.png)
![Отчёт: долги поставщикам](full-chain-uicheck-012558/screenshots/11-otchet-dolgi.png)
## ✓ Step step12_invariants: Инварианты — остаток≡Σдвижений; счёт≡начальный+Σопераций; долг≡формуле; изоляция орг
Длительность: 20449мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Инвариант остаток≡Σдвижений: Товар 1 fc179140 | ✓ ожид=40.5 факт=40.5 |
| api | Инвариант остаток≡Σдвижений: Товар 2 fc179140 | ✓ ожид=57 факт=57 |
| api | Инвариант остаток≡Σдвижений: Товар 3 fc179140 | ✓ ожид=53 факт=53 |
| api | Инвариант остаток≡Σдвижений: Товар 4 fc179140 | ✓ ожид=43 факт=43 |
| api | Инвариант остаток≡Σдвижений: Товар 5 fc179140 | ✓ ожид=38 факт=38 |
| api | Инвариант счёт≡начальный+Σопераций: Касса fc17914047 | ✓ ожид=16100 факт=16100 |
| api | Инвариант счёт≡начальный+Σопераций: Касса-2 fc179140 | ✓ ожид=3000 факт=3000 |
| api | Инвариант счёт≡начальный+Σопераций: Банк fc179140476 | ✓ ожид=191360 факт=191360 |
| api | Инвариант счёт≡начальный+Σопераций: Эквайринг fc1791 | ✓ ожид=0 факт=0 |
| api | Инвариант счёт≡начальный+Σопераций: Эквайринг-2 fc17 | ✓ ожид=0 факт=0 |
| api | Инвариант долг≡формуле | ✓ ожид=177130 факт=177130 |
| api | Изоляция: demo-admin НЕ видит товар e2e-орг | ✓ ожид=404/403 факт=404 |
| ui | Экран «Движения склада (остаток ≡ Σ движений)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Движения склада (остаток ≡ Σ движений)](full-chain-uicheck-012558/screenshots/12-dvizheniya-sklada.png)
![Движения склада (остаток ≡ Σ движений)](full-chain-uicheck-012558/screenshots/12-dvizheniya-sklada.png)
## ✓ Step step13_cancel_rollback: Отмена/откат — отмена приёмки с проданным товаром→отказ; отмена платежа→долг вернулся
Длительность: 2332мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Отмена приёмки с проданным товаром → отказ | ✓ ожид=4xx факт=409 |
| api | Отмена платежа №1 | ✓ ожид=204 факт=204 |
| api | Долг вернулся на сумму платежа | ✓ ожид=211030 факт=211030 |
| ui | Экран «Отмена платежа → долг вернулся»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
Скриншоты процесса:
[Отмена платежа → долг вернулся](full-chain-uicheck-012558/screenshots/13-otkat-dolg-vernulsya.png)
![Отмена платежа → долг вернулся](full-chain-uicheck-012558/screenshots/13-otkat-dolg-vernulsya.png)
## ✓ Step step14_finalize: Финал — скриншоты ключевых экранов, деактивация e2e-сущностей (режим B)
Длительность: 1889мс
| Тип | Проверка | Результат |
|---|---|---|
| ui | Финальный дашборд без ошибок | ✓ ожид=0 ошибок факт=0 ошибок |
| ui | Галерея index.html собрана (37 кадров) | ✓ ожид=index.html факт=37 |
| api | Режим C: temp-орг чистится ночной уборкой (>3 дней) | ✓ ожид=cleanup факт=ночь |
Скриншоты процесса:
[Итоговый дашборд](full-chain-uicheck-012558/screenshots/14-itog-dashboard.png)
![Итоговый дашборд](full-chain-uicheck-012558/screenshots/14-itog-dashboard.png)
## Summary
- Passed: 15
- Failed: 1
- Warnings: 0
- Skipped: 0
## Critical bugs
### HIGH
- **[02a] В меню кассира видны запретные разделы**
- /,/dashboard,/catalog/products,/inventory/stock,/sales/retail,/money/shifts,/help,/whats-new,/whats-new,/sales/retail,/inventory/stock
## UX recommendations
- Галерея скриншотов: /home/nns/food-market/tests/e2e/reports/full-chain-uicheck-012558/index.html
- Скриншоты ключевых экранов: tests/e2e/reports/full-chain/*.png