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
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
501 lines
37 KiB
Markdown
501 lines
37 KiB
Markdown
# E2E report: full-chain
|
||
|
||
Запущен: 2026-10-07T20:32:02.141Z
|
||
Длительность: 141.3с
|
||
|
||
**Итог:** 16 ✓ / 0 ✗ / 0 ⚠ / 0 ◯ (всего 16)
|
||
|
||
## ✓ Step step01_register_and_login: Регистрация организации → вход владельцем → простой режим (скрытые модули 403)
|
||
|
||
Длительность: 4850мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| api | Вход demo-admin (режим B) | ✓ ожид=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-demo-final-20261008-013158/screenshots/01-vhod-dashboard.png)
|
||
|
||

|
||
|
||
|
||
## ✓ Step step02_catalog_and_supplier: Справочники — группа, 5 товаров (разные ед.изм., 1 весовой) + цены + штрихкоды; поставщик
|
||
|
||
Длительность: 5195мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| api | Валюта KZT в справочнике | ✓ ожид=KZT факт=есть |
|
||
| api | Магазин (склад) существует | ✓ ожид=≥1 факт=1 |
|
||
| api | Единицы измерения доступны (≥5 различных) | ✓ ожид=≥5 факт=5 |
|
||
| api | Выбрано реальных товаров каталога (≥5, штрихкод+цена) | ✓ ожид=≥5 факт=12 |
|
||
| api | Среди выбранных есть весовой (информативно) | ✓ ожид=≥0 факт=0 |
|
||
| api | Поставщик [e2e] создан | ✓ ожид=200+id факт=201 |
|
||
| ui | Экран «Каталог «Демо-магазина»: реальные товары»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
| ui | Экран «Поставщик [e2e]»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
|
||
Скриншоты процесса:
|
||
|
||
[Каталог «Демо-магазина»: реальные товары](full-chain-demo-final-20261008-013158/screenshots/02-tovary-realnye.png)
|
||
|
||

|
||
|
||
[Поставщик [e2e]](full-chain-demo-final-20261008-013158/screenshots/02-postavshchik.png)
|
||
|
||
![Поставщик [e2e]](full-chain-demo-final-20261008-013158/screenshots/02-postavshchik.png)
|
||
|
||
|
||
## ✓ Step step02a_employees_and_points: Сотрудники (кассир/кладовщик/админ) + 2 точки продаж; права (API 403); правка/пароль/блокировка
|
||
|
||
Длительность: 18827мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| api | Системные роли Кассир/Кладовщик есть | ✓ ожид=есть факт=Администратор,Кладовщик,Кассир |
|
||
| api | Точка продаж создана: Касса-1 (e2e) 1791405122140 | ✓ ожид=200+id факт=201 |
|
||
| api | Точка продаж создана: Касса-2 (e2e) 1791405122140 | ✓ ожид=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 | Кассир: в меню нет модуля «Деньги» (счета/платежи/долги) | ✓ ожид=нет факт=нет |
|
||
| ui | Кассир: в меню есть своя касса (/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-demo-final-20261008-013158/screenshots/02a-kabinet-kassira.png)
|
||
|
||

|
||
|
||
[Кассир: прямой URL /money/accounts не открывает данные](full-chain-demo-final-20261008-013158/screenshots/02a-kassir-pryamoy-url.png)
|
||
|
||

|
||
|
||
[Сотрудники: кассир, кладовщик, администратор (роли)](full-chain-demo-final-20261008-013158/screenshots/02a-sotrudniki.png)
|
||
|
||

|
||
|
||
[Точки продаж (2 кассы)](full-chain-demo-final-20261008-013158/screenshots/02a-tochki-prodazh.png)
|
||
|
||

|
||
|
||
|
||
## ✓ Step step03_money_accounts: Деньги — касса, банковский счёт (номер), эквайринг; начальные остатки
|
||
|
||
Длительность: 2672мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| 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-demo-final-20261008-013158/screenshots/03-scheta.png)
|
||
|
||

|
||
|
||
|
||
## ✓ Step step04_initial_supplier_debt: Начальный долг поставщику через корректировку взаиморасчётов (WeOwe) → долг = сумме
|
||
|
||
Длительность: 2013мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| 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-demo-final-20261008-013158/screenshots/04-dolg-nachalnyy.png)
|
||
|
||

|
||
|
||
|
||
## ✓ Step step05_supply1_manual: Приёмка №1 вручную (кладовщик) → провести → остатки +кол-во; себестоимость
|
||
|
||
Длительность: 9626мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| api | Кладовщик авторизован для приёмки | ✓ ожид=token факт=keeper |
|
||
| api | Приёмка №1 создана (черновик) | ✓ ожид=200+id факт=201 |
|
||
| api | Приёмка №1 проведена | ✓ ожид=204 факт=204 |
|
||
| api | Остаток 0bd54f29… +20 | ✓ ожид=20 факт=20 |
|
||
| api | Остаток 0cfad6a5… +25 | ✓ ожид=25 факт=25 |
|
||
| api | Остаток e6e79bf2… +30 | ✓ ожид=30 факт=30 |
|
||
| api | Остаток fbe7d065… +35 | ✓ ожид=35 факт=35 |
|
||
| api | Остаток 3a92d8a7… +40 | ✓ ожид=40 факт=40 |
|
||
| api | Остаток 9a6a59f8… +45 | ✓ ожид=45 факт=45 |
|
||
| api | Остаток db59983d… +50 | ✓ ожид=50 факт=50 |
|
||
| api | Остаток 66866675… +55 | ✓ ожид=55 факт=55 |
|
||
| api | Остаток a6d3c6a1… +60 | ✓ ожид=60 факт=60 |
|
||
| api | Остаток f75a5241… +65 | ✓ ожид=65 факт=65 |
|
||
| api | Остаток 519251c8… +70 | ✓ ожид=70 факт=70 |
|
||
| api | Остаток 89f82dd6… +75 | ✓ ожид=75 факт=75 |
|
||
| api | Себестоимость товара = цене приёмки | ✓ ожид=900 факт=900 |
|
||
| ui | Экран «Приёмка №1: форма создания (до проведения)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
| ui | Экран «Список приёмок»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
| ui | Экран «Приёмка №1: проведена, строки и себестоимость»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
|
||
Скриншоты процесса:
|
||
|
||
[Приёмка №1: форма создания (до проведения)](full-chain-demo-final-20261008-013158/screenshots/05-priemka1-forma.png)
|
||
|
||

|
||
|
||
[Список приёмок](full-chain-demo-final-20261008-013158/screenshots/05-priemka1-spisok.png)
|
||
|
||

|
||
|
||
[Приёмка №1: проведена, строки и себестоимость](full-chain-demo-final-20261008-013158/screenshots/05-priemka1-provedena.png)
|
||
|
||

|
||
|
||
|
||
## ✓ Step step06_supply2_excel: Приёмка №2 из табличной накладной (поставщик не указан → «Поставщик не указан») → провести
|
||
|
||
Длительность: 20829мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| api | Табличная накладная загружена | ✓ ожид=200+id факт=200 |
|
||
| api | Накладная разобрана (не pending/parsing) | ✓ ожид=needs_review факт=needs_review |
|
||
| api | Накладная перенесена в приёмку (apply) | ✓ ожид=200+supplyId факт=200 |
|
||
| api | Поставщик приёмки №2 = «Поставщик не указан» | ✓ ожид=Поставщик не указан факт=Поставщик не указан |
|
||
| api | Приёмка №2 проведена | ✓ ожид=204 факт=204 |
|
||
| api | Остаток "BIOBLAS" шампунь +7 | ✓ ожид=7 факт=7 |
|
||
| api | Остаток "BIOBLAS" шампунь +4 | ✓ ожид=4 факт=4 |
|
||
| api | Остаток "BIOBLAS" шампунь +9 | ✓ ожид=9 факт=9 |
|
||
| ui | Экран «Загруженные накладные (табличная разобрана)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
| ui | Экран «Приёмка №2: «Поставщик не указан», проведена»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
|
||
Скриншоты процесса:
|
||
|
||
[Загруженные накладные (табличная разобрана)](full-chain-demo-final-20261008-013158/screenshots/06-nakladnye-spisok.png)
|
||
|
||

|
||
|
||
[Приёмка №2: «Поставщик не указан», проведена](full-chain-demo-final-20261008-013158/screenshots/06-priemka2-provedena.png)
|
||
|
||

|
||
|
||
|
||
## ✓ Step step07_supply3_photo: Приёмка №3 по фото-накладной → ручное сопоставление → провести; снимки удалены с диска
|
||
|
||
Длительность: 25889мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| 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-demo-final-20261008-013158/screenshots/07-foto-nakladnaya-razobrana.png)
|
||
|
||

|
||
|
||
[Приёмка №3 (по фото): проведена](full-chain-demo-final-20261008-013158/screenshots/07-priemka3-provedena.png)
|
||
|
||

|
||
|
||
[Фото-приёмка с телефона (моб.)](full-chain-demo-final-20261008-013158/screenshots/07-mob-foto-priemka.png)
|
||
|
||

|
||
|
||
|
||
## ✓ Step step08_supplier_payments: Оплата — №1 частично нал из кассы, №2 полностью с банка; статусы + долг = формуле
|
||
|
||
Длительность: 4408мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| api | Оплата №1 частично наличными из кассы | ✓ ожид=204 факт=201 |
|
||
| api | Оплата №2 полностью с банковского счёта | ✓ ожид=204 факт=201 |
|
||
| api | Приёмка №1: оплачено = частичной сумме | ✓ ожид=148812 факт=148812 |
|
||
| api | Приёмка №2: оплачено полностью | ✓ ожид=18390 факт=18390 |
|
||
| api | Долг реального поставщика = начальный + приёмки − оплаты | ✓ ожид=349498 факт=349498 |
|
||
| ui | Экран «Платежи поставщикам: нал из кассы + с банка»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
| ui | Экран «Долги поставщикам после оплат (= формуле)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
|
||
Скриншоты процесса:
|
||
|
||
[Платежи поставщикам: нал из кассы + с банка](full-chain-demo-final-20261008-013158/screenshots/08-platezhi.png)
|
||
|
||

|
||
|
||
[Долги поставщикам после оплат (= формуле)](full-chain-demo-final-20261008-013158/screenshots/08-dolg-posle-oplat.png)
|
||
|
||

|
||
|
||
|
||
## ✓ Step step09_cashier_shift: Смена — размен, 3 продажи (нал/карта/смеш), oversell→отказ, возврат, внесение/выплата, закрытие с расхождением + Z; продажа без смены→отказ
|
||
|
||
Длительность: 10008мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| 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) верно | ✓ ожид=14275 факт=14275 |
|
||
| api | Закрытие: разница (факт − должно) = расхождению | ✓ ожид=500 факт=500 |
|
||
| api | Z-отчёт: нал.продажи и expectedCash сходятся | ✓ ожид=3775/14275 факт=3775/14275 |
|
||
| api | Продажа без открытой смены → отказ | ✓ ожид=409 факт=409 |
|
||
| ui | Экран «Смены кассы: открытие/закрытие, размен»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
| ui | Экран «Закрытая смена: должно быть / факт / разница (Z-отчёт)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
| ui | Экран «Чеки продаж (наличные/карта/смешанная) и возврат»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
|
||
Скриншоты процесса:
|
||
|
||
[Смены кассы: открытие/закрытие, размен](full-chain-demo-final-20261008-013158/screenshots/09-smeny-spisok.png)
|
||
|
||

|
||
|
||
[Закрытая смена: должно быть / факт / разница (Z-отчёт)](full-chain-demo-final-20261008-013158/screenshots/09-smena-zakryta-z.png)
|
||
|
||

|
||
|
||
[Чеки продаж (наличные/карта/смешанная) и возврат](full-chain-demo-final-20261008-013158/screenshots/09-cheki-prodazhi.png)
|
||
|
||

|
||
|
||
|
||
## ✓ Step step09a_points_binding: Привязка кассира к точкам; параллельные смены на 2 точках не смешивают деньги; продажа на неактивной→отказ
|
||
|
||
Длительность: 4759мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| 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: касса = размен + её продажа (деньги не смешаны) | ✓ ожид=2500 факт=2500 |
|
||
| api | Точка 2: касса = размен + её продажа (деньги не смешаны) | ✓ ожид=3550 факт=3550 |
|
||
| api | Смена/продажа на неактивной точке → отказ | ✓ ожид=4xx факт=400 |
|
||
| ui | Экран «Параллельные смены на точках 1 и 2 (деньги раздельны)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
|
||
Скриншоты процесса:
|
||
|
||
[Параллельные смены на точках 1 и 2 (деньги раздельны)](full-chain-demo-final-20261008-013158/screenshots/09a-parallelnye-smeny.png)
|
||
|
||

|
||
|
||
|
||
## ✓ Step step10_warehouse_ops: Склад — оприходование излишка, списание брака, инвентаризация CSV (часть товаров): непосчитанные не обнулены
|
||
|
||
Длительность: 10399мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| api | Оприходование излишка (+8) | ✓ ожид=8 факт=8 |
|
||
| api | Списание брака (−2) | ✓ ожид=2 факт=2 |
|
||
| api | Импорт инвентаризации нашёл 2 товара | ✓ ожид=2 факт=2 |
|
||
| api | Инвентаризация (частичная) создана | ✓ ожид=200+id факт=201 |
|
||
| api | Инвентаризация проведена | ✓ ожид=204 факт=204 |
|
||
| api | Расхождение применено (товар с недостачей → факт) | ✓ ожид=48 факт=48 |
|
||
| 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-demo-final-20261008-013158/screenshots/10-oprihodovanie.png)
|
||
|
||

|
||
|
||
[Списание брака (−2)](full-chain-demo-final-20261008-013158/screenshots/10-spisanie-braka.png)
|
||
|
||

|
||
|
||
[Инвентаризация (часть товаров): расхождения](full-chain-demo-final-20261008-013158/screenshots/10-inventarizaciya.png)
|
||
|
||

|
||
|
||
[Остатки после складских операций](full-chain-demo-final-20261008-013158/screenshots/10-ostatki-sklad.png)
|
||
|
||

|
||
|
||
[Инвентаризация с телефона (сканер) (моб.)](full-chain-demo-final-20261008-013158/screenshots/10-mob-inventarizaciya.png)
|
||
|
||

|
||
|
||
|
||
## ✓ Step step11_reports: Отчёты — продажи за день, прибыль, остатки на дату, «Деньги», долги; по точкам/кассирам
|
||
|
||
Длительность: 9510мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| api | Отчёт продаж за день доступен, выручка ≥ 0 | ✓ ожид=≥0 факт=7650 |
|
||
| api | Прибыль = выручка − себестоимость (по каждой строке) | ✓ ожид=revenue−cost факт=200 |
|
||
| api | Отчёт остатков на дату доступен | ✓ ожид=список факт=200 |
|
||
| api | Деньги: касса = начальный − оплата наличными | ✓ ожид=-98812 факт=-98812 |
|
||
| api | Деньги: банк = начальный − оплата с банка | ✓ ожид=181610 факт=181610 |
|
||
| api | Отчёт долгов поставщикам доступен | ✓ ожид=200 факт=200 |
|
||
| api | Выручка по точкам в сумме = общей выручке дня | ✓ ожид=7650 факт=7650 |
|
||
| api | Выручка по кассирам в сумме = общей выручке дня | ✓ ожид=7650 факт=7650 |
|
||
| 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-demo-final-20261008-013158/screenshots/11-otchet-prodazhi.png)
|
||
|
||

|
||
|
||
[Отчёт: прибыль (выручка − себестоимость)](full-chain-demo-final-20261008-013158/screenshots/11-otchet-pribyl.png)
|
||
|
||

|
||
|
||
[Отчёт: остатки на дату](full-chain-demo-final-20261008-013158/screenshots/11-otchet-ostatki.png)
|
||
|
||

|
||
|
||
[Отчёт «Деньги»: остатки по счетам](full-chain-demo-final-20261008-013158/screenshots/11-otchet-dengi.png)
|
||
|
||

|
||
|
||
[Отчёт: долги поставщикам](full-chain-demo-final-20261008-013158/screenshots/11-otchet-dolgi.png)
|
||
|
||

|
||
|
||
|
||
## ✓ Step step12_invariants: Инварианты — остаток≡Σдвижений; счёт≡начальный+Σопераций; долг≡формуле; изоляция орг
|
||
|
||
Длительность: 6687мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| api | Инвариант остаток≡Σдвижений: "BIOBLAS" шампун | ✓ ожид=48 факт=48 |
|
||
| api | Инвариант остаток≡Σдвижений: "BIOBLAS" шампун | ✓ ожид=57 факт=57 |
|
||
| api | Инвариант остаток≡Σдвижений: "BIOBLAS" шампун | ✓ ожид=53 факт=53 |
|
||
| api | Инвариант остаток≡Σдвижений: "BIOBLAS" шампун | ✓ ожид=43 факт=43 |
|
||
| api | Инвариант остаток≡Σдвижений: "IQ уроки" книги | ✓ ожид=38 факт=38 |
|
||
| api | Инвариант остаток≡Σдвижений: "Ludwik" средств | ✓ ожид=45 факт=45 |
|
||
| api | Инвариант остаток≡Σдвижений: "Ludwik" средств | ✓ ожид=50 факт=50 |
|
||
| api | Инвариант остаток≡Σдвижений: "Pero" салфетки | ✓ ожид=55 факт=55 |
|
||
| api | Инвариант остаток≡Σдвижений: "Pero" салфетки | ✓ ожид=60 факт=60 |
|
||
| api | Инвариант остаток≡Σдвижений: "Pero" салфетки | ✓ ожид=65 факт=65 |
|
||
| api | Инвариант остаток≡Σдвижений: "Rice Day" GRANA | ✓ ожид=70 факт=70 |
|
||
| api | Инвариант остаток≡Σдвижений: "Richmond" Gold | ✓ ожид=75 факт=75 |
|
||
| api | Инвариант счёт≡начальный+Σопераций: Касса (e2e) 1791 | ✓ ожид=-98812 факт=-98812 |
|
||
| api | Инвариант счёт≡начальный+Σопераций: Касса-2 (e2e) 17 | ✓ ожид=3000 факт=3000 |
|
||
| api | Инвариант счёт≡начальный+Σопераций: Банк (e2e) 17914 | ✓ ожид=181610 факт=181610 |
|
||
| api | Инвариант счёт≡начальный+Σопераций: Эквайринг (e2e) | ✓ ожид=0 факт=0 |
|
||
| api | Инвариант счёт≡начальный+Σопераций: Эквайринг-2 (e2e | ✓ ожид=0 факт=0 |
|
||
| api | Инвариант долг≡формуле | ✓ ожид=349498 факт=349498 |
|
||
| api | Изоляция: режим B (демо) — проверка через temp-орг в режиме C | ✓ ожид=n/a факт=n/a |
|
||
| ui | Экран «Движения склада (остаток ≡ Σ движений)»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
|
||
Скриншоты процесса:
|
||
|
||
[Движения склада (остаток ≡ Σ движений)](full-chain-demo-final-20261008-013158/screenshots/12-dvizheniya-sklada.png)
|
||
|
||

|
||
|
||
|
||
## ✓ Step step13_cancel_rollback: Отмена/откат — отмена приёмки с проданным товаром→отказ; отмена платежа→долг вернулся
|
||
|
||
Длительность: 2371мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| api | Отмена приёмки с проданным товаром → отказ | ✓ ожид=4xx факт=409 |
|
||
| api | Отмена платежа №1 | ✓ ожид=204 факт=204 |
|
||
| api | Долг вернулся на сумму платежа | ✓ ожид=498310 факт=498310 |
|
||
| ui | Экран «Отмена платежа → долг вернулся»: 0 console/5xx/тостов | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
|
||
Скриншоты процесса:
|
||
|
||
[Отмена платежа → долг вернулся](full-chain-demo-final-20261008-013158/screenshots/13-otkat-dolg-vernulsya.png)
|
||
|
||

|
||
|
||
|
||
## ✓ Step step14_finalize: Финал — скриншоты ключевых экранов, деактивация e2e-сущностей (режим B)
|
||
|
||
Длительность: 3273мс
|
||
|
||
| Тип | Проверка | Результат |
|
||
|---|---|---|
|
||
| ui | Финальный дашборд без ошибок | ✓ ожид=0 ошибок факт=0 ошибок |
|
||
| ui | Галерея index.html собрана (36 кадров) | ✓ ожид=index.html факт=36 |
|
||
| api | Режим B: e2e-сотрудники деактивированы (не удалены) | ✓ ожид=3 факт=3 |
|
||
|
||
Скриншоты процесса:
|
||
|
||
[Итоговый дашборд](full-chain-demo-final-20261008-013158/screenshots/14-itog-dashboard.png)
|
||
|
||

|
||
|
||
|
||
## Summary
|
||
|
||
- Passed: 16
|
||
- Failed: 0
|
||
- Warnings: 0
|
||
- Skipped: 0
|
||
|
||
## Critical bugs
|
||
|
||
Нет.
|
||
|
||
## UX recommendations
|
||
|
||
- Галерея скриншотов: /home/nns/food-market/tests/e2e/reports/full-chain-demo-final-20261008-013158/index.html
|
||
- Скриншоты ключевых экранов: tests/e2e/reports/full-chain/*.png
|