food-market/tests/e2e/reports/full-chain-2026-10-08T05-02-22-839Z.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

26 KiB
Raw Permalink Blame History

E2E report: full-chain

Запущен: 2026-10-08T05:00:48.729Z Длительность: 94.1с

Итог: 16 ✓ / 0 ✗ / 0 ⚠ / 0 ◯ (всего 16)

✓ Step step01_register_and_login: Регистрация организации → вход владельцем → простой режим (скрытые модули 403)

Длительность: 5778мс

Тип Проверка Результат
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 ошибок

✓ Step step02_catalog_and_supplier: Справочники — группа, 5 товаров (разные ед.изм., 1 весовой) + цены + штрихкоды; поставщик

Длительность: 6037мс

Тип Проверка Результат
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 ошибок

✓ Step step02a_employees_and_points: Сотрудники (кассир/кладовщик/админ) + 2 точки продаж; права (API 403); правка/пароль/блокировка

Длительность: 10873мс

Тип Проверка Результат
api Штрихкоды EAN-13 с валидной контрольной цифрой ✓ ожид=0 неверных факт=0/5
api Системные роли Кассир/Кладовщик есть ✓ ожид=есть факт=Администратор,Кладовщик,Кассир
api Точка продаж создана: Касса-1 fc1791435648725 ✓ ожид=200+id факт=201
api Точка продаж создана: Касса-2 fc1791435648725 ✓ ожид=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 ошибок

✓ Step step03_money_accounts: Деньги — касса, банковский счёт (номер), эквайринг; начальные остатки

Длительность: 2022мс

Тип Проверка Результат
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 ошибок

✓ Step step04_initial_supplier_debt: Начальный долг поставщику через корректировку взаиморасчётов (WeOwe) → долг = сумме

Длительность: 1567мс

Тип Проверка Результат
api Корректировка взаиморасчётов создана (WeOwe 100000) ✓ ожид=200+id факт=201
api Корректировка проведена ✓ ожид=204 факт=204
api Долг поставщика = 100000 (только начальный) ✓ ожид=100000 факт=100000
ui Экран «Долги поставщикам: начальный долг 100 000 ₸»: 0 console/5xx/тостов ✓ ожид=0 ошибок факт=0 ошибок

✓ Step step05_supply1_manual: Приёмка №1 вручную (кладовщик) → провести → остатки +кол-во; себестоимость

Длительность: 5431мс

Тип Проверка Результат
api Кладовщик авторизован для приёмки ✓ ожид=token факт=keeper
api Приёмка №1 создана (черновик) ✓ ожид=200+id факт=201
api Приёмка №1 проведена ✓ ожид=204 факт=204
api Остаток 77dd1a1f… +12.5 ✓ ожид=12.5 факт=12.5
api Остаток 64220f32… +25 ✓ ожид=25 факт=25
api Остаток 0dc70a6e… +30 ✓ ожид=30 факт=30
api Остаток 2393672c… +35 ✓ ожид=35 факт=35
api Остаток 7e7e642d… +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 ошибок

✓ Step step06_supply2_excel: Приёмка №2 из табличной накладной (поставщик не указан → «Поставщик не указан») → провести

Длительность: 6885мс

Тип Проверка Результат
api Табличная накладная загружена ✓ ожид=200+id факт=200
api Накладная разобрана (не pending/parsing) ✓ ожид=needs_review факт=needs_review
api Накладная перенесена в приёмку (apply) ✓ ожид=200+supplyId факт=200
api Поставщик приёмки №2 = «Поставщик не указан» ✓ ожид=Поставщик не указан факт=Поставщик не указан
api Приёмка №2 проведена ✓ ожид=204 факт=204
api Остаток Товар 1 fc17914356 +7 ✓ ожид=7 факт=7
api Остаток Товар 2 fc17914356 +4 ✓ ожид=4 факт=4
api Остаток Товар 3 fc17914356 +9 ✓ ожид=9 факт=9
ui Экран «Загруженные накладные (табличная разобрана)»: 0 console/5xx/тостов ✓ ожид=0 ошибок факт=0 ошибок
ui Экран «Приёмка №2: «Поставщик не указан», проведена»: 0 console/5xx/тостов ✓ ожид=0 ошибок факт=0 ошибок

✓ Step step07_supply3_photo: Приёмка №3 по фото-накладной → ручное сопоставление → провести; снимки удалены с диска

Длительность: 21436мс

Тип Проверка Результат
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 ошибок

✓ Step step08_supplier_payments: Оплата — №1 частично нал из кассы, №2 полностью с банка; статусы + долг = формуле

Длительность: 3521мс

Тип Проверка Результат
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
ui Экран «Платежи поставщикам: нал из кассы + с банка»: 0 console/5xx/тостов ✓ ожид=0 ошибок факт=0 ошибок
ui Экран «Долги поставщикам после оплат (= формуле)»: 0 console/5xx/тостов ✓ ожид=0 ошибок факт=0 ошибок

✓ Step step09_cashier_shift: Смена — размен, 3 продажи (нал/карта/смеш), oversell→отказ, возврат, внесение/выплата, закрытие с расхождением + Z; продажа без смены→отказ

Длительность: 8178мс

Тип Проверка Результат
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
ui Экран «Смены кассы: открытие/закрытие, размен»: 0 console/5xx/тостов ✓ ожид=0 ошибок факт=0 ошибок
ui Экран «Закрытая смена: должно быть / факт / разница (Z-отчёт)»: 0 console/5xx/тостов ✓ ожид=0 ошибок факт=0 ошибок
ui Экран «Чеки продаж (наличные/карта/смешанная) и возврат»: 0 console/5xx/тостов ✓ ожид=0 ошибок факт=0 ошибок

✓ Step step09a_points_binding: Привязка кассира к точкам; параллельные смены на 2 точках не смешивают деньги; продажа на неактивной→отказ

Длительность: 3485мс

Тип Проверка Результат
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 ошибок

✓ Step step10_warehouse_ops: Склад — оприходование излишка, списание брака, инвентаризация CSV (часть товаров): непосчитанные не обнулены

Длительность: 8670мс

Тип Проверка Результат
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
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 ошибок

✓ Step step11_reports: Отчёты — продажи за день, прибыль, остатки на дату, «Деньги», долги; по точкам/кассирам

Длительность: 4659мс

Тип Проверка Результат
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
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 ошибок

✓ Step step12_invariants: Инварианты — остаток≡Σдвижений; счёт≡начальный+Σопераций; долг≡формуле; изоляция орг

Длительность: 3162мс

Тип Проверка Результат
api Инвариант остаток≡Σдвижений: Товар 1 fc179143 ✓ ожид=40.5 факт=40.5
api Инвариант остаток≡Σдвижений: Товар 2 fc179143 ✓ ожид=57 факт=57
api Инвариант остаток≡Σдвижений: Товар 3 fc179143 ✓ ожид=52 факт=52
api Инвариант остаток≡Σдвижений: Товар 4 fc179143 ✓ ожид=43 факт=43
api Инвариант остаток≡Σдвижений: Товар 5 fc179143 ✓ ожид=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
ui Экран «Движения склада (остаток ≡ Σ движений)»: 0 console/5xx/тостов ✓ ожид=0 ошибок факт=0 ошибок

✓ Step step13_cancel_rollback: Отмена/откат — отмена приёмки с проданным товаром→отказ; отмена платежа→долг вернулся

Длительность: 1441мс

Тип Проверка Результат
api Отмена приёмки с проданным товаром → отказ ✓ ожид=4xx факт=409
api Отмена платежа №1 ✓ ожид=204 факт=204
api Долг вернулся на сумму платежа ✓ ожид=211030 факт=211030
ui Экран «Отмена платежа → долг вернулся»: 0 console/5xx/тостов ✓ ожид=0 ошибок факт=0 ошибок

✓ Step step14_finalize: Финал — скриншоты ключевых экранов, деактивация e2e-сущностей (режим B)

Длительность: 958мс

Тип Проверка Результат
ui Финальный дашборд без ошибок ✓ ожид=0 ошибок факт=0 ошибок
api Режим C: temp-орг чистится ночной уборкой (>3 дней) ✓ ожид=cleanup факт=ночь

Summary

  • Passed: 16
  • Failed: 0
  • Warnings: 0
  • Skipped: 0

Critical bugs

Нет.

UX recommendations

  • Скриншоты ключевых экранов: tests/e2e/reports/full-chain/*.png