# E2E report: full-chain Запущен: 2026-10-07T22:06:54.185Z Длительность: 70.2с **Итог:** 16 ✓ / 0 ✗ / 0 ⚠ / 0 ◯ (всего 16) ## ✓ Step step01_register_and_login: Регистрация организации → вход владельцем → простой режим (скрытые модули 403) Длительность: 2033мс | Тип | Проверка | Результат | |---|---|---| | 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 весовой) + цены + штрихкоды; поставщик Длительность: 2226мс | Тип | Проверка | Результат | |---|---|---| | 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); правка/пароль/блокировка Длительность: 7584мс | Тип | Проверка | Результат | |---|---|---| | api | Штрихкоды EAN-13 с валидной контрольной цифрой | ✓ ожид=0 неверных факт=0/5 | | api | Системные роли Кассир/Кладовщик есть | ✓ ожид=есть факт=Администратор,Кладовщик,Кассир | | api | Точка продаж создана: Касса-1 fc1791410814184 | ✓ ожид=200+id факт=201 | | api | Точка продаж создана: Касса-2 fc1791410814184 | ✓ ожид=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: Деньги — касса, банковский счёт (номер), эквайринг; начальные остатки Длительность: 1123мс | Тип | Проверка | Результат | |---|---|---| | 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) → долг = сумме Длительность: 572мс | Тип | Проверка | Результат | |---|---|---| | api | Корректировка взаиморасчётов создана (WeOwe 100000) | ✓ ожид=200+id факт=201 | | api | Корректировка проведена | ✓ ожид=204 факт=204 | | api | Долг поставщика = 100000 (только начальный) | ✓ ожид=100000 факт=100000 | ## ✓ Step step05_supply1_manual: Приёмка №1 вручную (кладовщик) → провести → остатки +кол-во; себестоимость Длительность: 3426мс | Тип | Проверка | Результат | |---|---|---| | api | Кладовщик авторизован для приёмки | ✓ ожид=token факт=keeper | | api | Приёмка №1 создана (черновик) | ✓ ожид=200+id факт=201 | | api | Приёмка №1 проведена | ✓ ожид=204 факт=204 | | api | Остаток d5d37b23… +12.5 | ✓ ожид=12.5 факт=12.5 | | api | Остаток 176c8a42… +25 | ✓ ожид=25 факт=25 | | api | Остаток 27b074ea… +30 | ✓ ожид=30 факт=30 | | api | Остаток 8e807c36… +35 | ✓ ожид=35 факт=35 | | api | Остаток 14dd9f49… +40 | ✓ ожид=40 факт=40 | | api | Себестоимость товара = цене приёмки | ✓ ожид=300 факт=300 | ## ✓ Step step06_supply2_excel: Приёмка №2 из табличной накладной (поставщик не указан → «Поставщик не указан») → провести Длительность: 6116мс | Тип | Проверка | Результат | |---|---|---| | api | Табличная накладная загружена | ✓ ожид=200+id факт=200 | | api | Накладная разобрана (не pending/parsing) | ✓ ожид=needs_review факт=needs_review | | api | Накладная перенесена в приёмку (apply) | ✓ ожид=200+supplyId факт=200 | | api | Поставщик приёмки №2 = «Поставщик не указан» | ✓ ожид=Поставщик не указан факт=Поставщик не указан | | api | Приёмка №2 проведена | ✓ ожид=204 факт=204 | | api | Остаток Товар 1 fc17914108 +7 | ✓ ожид=7 факт=7 | | api | Остаток Товар 2 fc17914108 +4 | ✓ ожид=4 факт=4 | | api | Остаток Товар 3 fc17914108 +9 | ✓ ожид=9 факт=9 | ## ✓ Step step07_supply3_photo: Приёмка №3 по фото-накладной → ручное сопоставление → провести; снимки удалены с диска Длительность: 20972мс | Тип | Проверка | Результат | |---|---|---| | 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 полностью с банка; статусы + долг = формуле Длительность: 2344мс | Тип | Проверка | Результат | |---|---|---| | 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; продажа без смены→отказ Длительность: 6379мс | Тип | Проверка | Результат | |---|---|---| | 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 точках не смешивают деньги; продажа на неактивной→отказ Длительность: 4136мс | Тип | Проверка | Результат | |---|---|---| | 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 (часть товаров): непосчитанные не обнулены Длительность: 6861мс | Тип | Проверка | Результат | |---|---|---| | 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: Отчёты — продажи за день, прибыль, остатки на дату, «Деньги», долги; по точкам/кассирам Длительность: 1534мс | Тип | Проверка | Результат | |---|---|---| | 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: Инварианты — остаток≡Σдвижений; счёт≡начальный+Σопераций; долг≡формуле; изоляция орг Длительность: 3650мс | Тип | Проверка | Результат | |---|---|---| | 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: Отмена/откат — отмена приёмки с проданным товаром→отказ; отмена платежа→долг вернулся Длительность: 1216мс | Тип | Проверка | Результат | |---|---|---| | 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