food-market/tests/e2e/reports/full-chain-watchdog-20261008.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

270 lines
20 KiB
Markdown
Raw 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-07T22:05:34.928Z
Длительность: 67.0с
**Итог:** 16 ✓ / 0 ✗ / 0 ⚠ / 0 ◯ (всего 16)
## ✓ Step step01_register_and_login: Регистрация организации → вход владельцем → простой режим (скрытые модули 403)
Длительность: 2471мс
| Тип | Проверка | Результат |
|---|---|---|
| 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 |
## ✓ Step step02_catalog_and_supplier: Справочники — группа, 5 товаров (разные ед.изм., 1 весовой) + цены + штрихкоды; поставщик
Длительность: 2856мс
| Тип | Проверка | Результат |
|---|---|---|
| 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 |
## ✓ Step step02a_employees_and_points: Сотрудники (кассир/кладовщик/админ) + 2 точки продаж; права (API 403); правка/пароль/блокировка
Длительность: 8387мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Штрихкоды EAN-13 с валидной контрольной цифрой | ✓ ожид=0 неверных факт=0/5 |
| api | Системные роли Кассир/Кладовщик есть | ✓ ожид=есть факт=Администратор,Кладовщик,Кассир |
| api | Точка продаж создана: Касса-1 fc1791410734928 | ✓ ожид=200+id факт=201 |
| api | Точка продаж создана: Касса-2 fc1791410734928 | ✓ ожид=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 |
| 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 |
## ✓ Step step03_money_accounts: Деньги — касса, банковский счёт (номер), эквайринг; начальные остатки
Длительность: 1339мс
| Тип | Проверка | Результат |
|---|---|---|
| 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 |
## ✓ Step step04_initial_supplier_debt: Начальный долг поставщику через корректировку взаиморасчётов (WeOwe) → долг = сумме
Длительность: 662мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Корректировка взаиморасчётов создана (WeOwe 100000) | ✓ ожид=200+id факт=201 |
| api | Корректировка проведена | ✓ ожид=204 факт=204 |
| api | Долг поставщика = 100000 (только начальный) | ✓ ожид=100000 факт=100000 |
## ✓ Step step05_supply1_manual: Приёмка №1 вручную (кладовщик) → провести → остатки +кол-во; себестоимость
Длительность: 3468мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Кладовщик авторизован для приёмки | ✓ ожид=token факт=keeper |
| api | Приёмка №1 создана (черновик) | ✓ ожид=200+id факт=201 |
| api | Приёмка №1 проведена | ✓ ожид=204 факт=204 |
| api | Остаток 21322e0f… +12.5 | ✓ ожид=12.5 факт=12.5 |
| api | Остаток e3ea29da… +25 | ✓ ожид=25 факт=25 |
| api | Остаток c6ffa0a0… +30 | ✓ ожид=30 факт=30 |
| api | Остаток 6a8d88e9… +35 | ✓ ожид=35 факт=35 |
| api | Остаток dc95123d… +40 | ✓ ожид=40 факт=40 |
| api | Себестоимость товара = цене приёмки | ✓ ожид=300 факт=300 |
## ✓ Step step06_supply2_excel: Приёмка №2 из табличной накладной (поставщик не указан → «Поставщик не указан») → провести
Длительность: 6259мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Табличная накладная загружена | ✓ ожид=200+id факт=200 |
| api | Накладная разобрана (не pending/parsing) | ✓ ожид=needs_review факт=needs_review |
| api | Накладная перенесена в приёмку (apply) | ✓ ожид=200+supplyId факт=200 |
| api | Поставщик приёмки №2 = «Поставщик не указан» | ✓ ожид=Поставщик не указан факт=Поставщик не указан |
| api | Приёмка №2 проведена | ✓ ожид=204 факт=204 |
| api | Остаток Товар 1 fc17914107 +7 | ✓ ожид=7 факт=7 |
| api | Остаток Товар 2 fc17914107 +4 | ✓ ожид=4 факт=4 |
| api | Остаток Товар 3 fc17914107 +9 | ✓ ожид=9 факт=9 |
## ✓ Step step07_supply3_photo: Приёмка №3 по фото-накладной → ручное сопоставление → провести; снимки удалены с диска
Длительность: 20299мс
| Тип | Проверка | Результат |
|---|---|---|
| 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 |
## ✓ Step step08_supplier_payments: Оплата — №1 частично нал из кассы, №2 полностью с банка; статусы + долг = формуле
Длительность: 1634мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Оплата №1 частично наличными из кассы (≤ остатка) | ✓ ожид=204 факт=201 |
| api | Оплата больше остатка кассы → отказ (409 insufficient-funds) | ✓ ожид=409 факт=409 |
| api | Оплата №2 полностью с банковского счёта | ✓ ожид=204 факт=201 |
| api | Приёмка №1: оплачено = частичной сумме | ✓ ожид=30000 факт=30000 |
| api | Приёмка №2: оплачено полностью | ✓ ожид=8640 факт=8640 |
| api | Долг реального поставщика = начальный + приёмки − оплаты | ✓ ожид=181030 факт=181030 |
## ✓ Step step09_cashier_shift: Смена — размен, 3 продажи (нал/карта/смеш), oversell→отказ, возврат, внесение/выплата, закрытие с расхождением + Z; продажа без смены→отказ
Длительность: 5156мс
| Тип | Проверка | Результат |
|---|---|---|
| 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 | Деньги смены в остатке кассы (касса += факт − размен) | ✓ ожид=28450 факт=28450 |
| api | Продажи картой в остатке эквайринга | ✓ ожид=1150 факт=1150 |
| api | Продажа без открытой смены → отказ | ✓ ожид=409 факт=409 |
## ✓ Step step09a_points_binding: Привязка кассира к точкам; параллельные смены на 2 точках не смешивают деньги; продажа на неактивной→отказ
Длительность: 3291мс
| Тип | Проверка | Результат |
|---|---|---|
| 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 |
## ✓ Step step10_warehouse_ops: Склад — оприходование излишка, списание брака, инвентаризация CSV (часть товаров): непосчитанные не обнулены
Длительность: 5164мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Кладовщик → оприходование доступно (не 403) | ✓ ожид=<400 факт=201 |
| api | Кладовщик → списание доступно (не 403) | ✓ ожид=<400 факт=201 |
| api | Кладовщик → инвентаризация доступна (не 403) | ✓ ожид=200 факт=200 |
| api | Пустая инвентаризация проведена (одно расхождение) | ✓ ожид=204 факт=204 |
| api | Пустая инвентаризация: непосчитанный НЕ обнулён | ✓ ожид=35 факт=35 |
| api | Пустая инвентаризация: посчитанный применён (недостача 1) | ✓ ожид=52 факт=52 |
| 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 | Непосчитанный товар не обнулён | ✓ ожид=52 факт=52 |
## ✓ Step step11_reports: Отчёты — продажи за день, прибыль, остатки на дату, «Деньги», долги; по точкам/кассирам
Длительность: 1162мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Отчёт продаж за день доступен, выручка ≥ 0 | ✓ ожид=≥0 факт=3300 |
| api | Прибыль = выручка − себестоимость (по каждой строке) | ✓ ожид=revenue−cost факт=200 |
| api | Отчёт остатков на дату доступен | ✓ ожид=список факт=200 |
| api | Деньги: касса = начальный − оплаты + движения смен | ✓ ожид=28950 факт=28950 |
| api | Деньги: банк = начальный − оплата с банка | ✓ ожид=191360 факт=191360 |
| api | Деньги: эквайринг = продажи картой − возвраты картой | ✓ ожид=1150 факт=1150 |
| api | Отчёт долгов поставщикам доступен | ✓ ожид=200 факт=200 |
| api | Выручка по точкам в сумме = общей выручке дня | ✓ ожид=3300 факт=3300 |
| api | Выручка по кассирам в сумме = общей выручке дня | ✓ ожид=3300 факт=3300 |
## ✓ Step step12_invariants: Инварианты — остаток≡Σдвижений; счёт≡начальный+Σопераций; долг≡формуле; изоляция орг
Длительность: 3949мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Инвариант остаток≡Σдвижений: Товар 1 fc179141 | ✓ ожид=40.5 факт=40.5 |
| api | Инвариант остаток≡Σдвижений: Товар 2 fc179141 | ✓ ожид=57 факт=57 |
| api | Инвариант остаток≡Σдвижений: Товар 3 fc179141 | ✓ ожид=52 факт=52 |
| api | Инвариант остаток≡Σдвижений: Товар 4 fc179141 | ✓ ожид=43 факт=43 |
| api | Инвариант остаток≡Σдвижений: Товар 5 fc179141 | ✓ ожид=38 факт=38 |
| api | Инвариант Касса ≡ независимому расчёту (нач+платежи+смены) | ✓ ожид=28950 факт=28950 |
| api | Инвариант Банк ≡ независимому расчёту (нач+платежи+смены) | ✓ ожид=191360 факт=191360 |
| api | Инвариант Эквайринг ≡ независимому расчёту (нач+платежи+смены) | ✓ ожид=1150 факт=1150 |
| api | Инвариант Касса-2 ≡ независимому расчёту (нач+платежи+смены) | ✓ ожид=3700 факт=3700 |
| api | Инвариант долг≡формуле | ✓ ожид=181030 факт=181030 |
| api | Изоляция: demo-admin НЕ видит товар e2e-орг | ✓ ожид=404/403 факт=404 |
## ✓ Step step13_cancel_rollback: Отмена/откат — отмена приёмки с проданным товаром→отказ; отмена платежа→долг вернулся
Длительность: 884мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Отмена приёмки с проданным товаром → отказ | ✓ ожид=4xx факт=409 |
| api | Отмена платежа №1 | ✓ ожид=204 факт=204 |
| api | Долг вернулся на сумму платежа | ✓ ожид=211030 факт=211030 |
## ✓ Step step14_finalize: Финал — скриншоты ключевых экранов, деактивация e2e-сущностей (режим B)
Длительность: 1мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Режим C: temp-орг чистится ночной уборкой (>3 дней) | ✓ ожид=cleanup факт=ночь |
## Summary
- Passed: 16
- Failed: 0
- Warnings: 0
- Skipped: 0
## Critical bugs
Нет.
## UX recommendations
- Скриншоты ключевых экранов: tests/e2e/reports/full-chain/*.png