Scenario scenarios/smoke-tests/e2e-full-charging-cycle.md (E2E-FULL-001) · run run-e2e-full-charging-cycle-20260531-2201
PARTIAL
Дата: 2026-05-31 (DB UTC ~19:21–20:03)
Сборки: Client v2, Technician main-v2 (DATA_SOURCE=supabase), Dispatcher v1.5.0, OCPP v1.3.6 — все на TEST (api-test.zarady.ru)
БД: только чтение через evcharge-vps-test (SELECT only)
Видео: недоступно (CDP endpoint не найден) — только скриншоты
Итог
Полный happy-path проведён до терминального состояния «готов к оплате» (orders.status = AWAITING_PAYMENT) на заказе PZ-0576. Два документированных бага «залипшего значения» (V10 in-session и V11 reopen) НЕ воспроизводятся — исправлены. Подозреваемый баг завершения (V15) не проявляется в UI клиента (UI проходит), но обнаружен более серьёзный backend-вариант: зарядная сессия не останавливается при завершении заказа. Дополнительно: блокер accept_route (обойдён) и расхождения фактических значений/массивов фото.
Dispatcher «Техник едет», Client order+main «Техник едет к вам»
V5
Прибытие → ARRIVED; «прибыл»
PASS
Client «Техник прибыл в»
V6
Фото «До» загружено
PASS
CanvasKit web upload работает; order_photos BEFORE_CHARGING + storage URL
V7
Станция онлайн; сессия active; start_time≈NOW
PASS
возраст 36s — НЕ 2015 (ELE-755 fix #1 ✓)
V8
Order CHARGING; зарядка видна
PASS
Client «Заряжается»
V9
Meter values; kWt растёт; estimated убывает
PASS
mv 9→102; kWt 0.272→3.674; est 2284→1273s (ELE-755 fix #2 ✓)
V10
In-session: order==main==DB (главная не залипает)
PASS
главная 0.364→0.578→0.7→0.884 живо; ≈ DB; баг исправлен
V11
Reopen: main+order показывают актуальное DB
PASS
после reopen main=0.884, order=0.976 ≈ DB 1.006; баг исправлен
V12
Терминал (100%/completed/плато/cap)
PARTIAL
реальная скорость мала → 75% недостижимо в cap 45 мин; ручное завершение (разрешено)
V13
Фото «Во время»/«После» загружены
PASS
order_photos все 3 типа
V14
Завершить → AWAITING_PAYMENT; session completed
PARTIAL/FAIL
order AWAITING_PAYMENT ✓; session НЕ completed при завершении (BUG-3)
V15
Нет залипшей зарядки на order/main (UI)
PASS (UI) / backend ✗
Client UI «Заказ завершён»/«Ожидает оплаты», прогресс не залип; но backend-сессия продолжает зарядку (BUG-3)
V16
energy==delta; actual≈метр; UI==DB
PARTIAL/FAIL
energy 3.674 == delta ✓; actualTotalKwt≈energy ✓ (после стопа); UI 2.8 кВт/84₽ ≠ итог 3.674; actualCost несогласован; actualCharge NULL
V17
Выезд на базу → route COMPLETED
NOT EXECUTED
«Выехал на базу» disabled пока заказ не оплачен (payment-gated, вне рамок); route остаётся IN_PROGRESS
V18
Финальная кросс-модульная консистентность
PARTIAL
order AWAITING_PAYMENT ✓, фото в order_photos(3) ✓; route IN_PROGRESS; orders.*Photos массивы NULL (WARNING-2)
V19
(info) толерантность к reconnect OCPP
n/a
DimaTest не отключался в этом прогоне
Найденные баги (в bugs/)
BUG-1 (High) — technician-accept-route-rpc-schema-drift.md: на TEST accept_route(route_id uuid, coordinates json) (старая сигнатура), а main-v2 вызывает accept_route(input_data jsonb) → PGRST202, «Принять» падает. RPC выезда/прибытия уже мигрированы на input_data jsonb.
BUG-2 (Medium) — (там же): после ошибки RPC экран техника оптимистично показывает «Принят» и активирует «Выехал», хотя в БД route остаётся PLANNED.
BUG-3 (Critical) — charging-session-not-stopped-on-order-completion.md: «Завершить зарядку» ставит order AWAITING_PAYMENT, но НЕ шлёт RemoteStopTransaction — сессия остаётся active, станция продолжает заряжать (energy 2.963→3.674), останавливается только через Stop на OCPP-дашборде. Каскад: actualCharge NULL, actualCost 84₽ несогласован с итоговым actualTotalKwt 3.674; клиент показывает заниженные 2.8 кВт/84₽.
WARNING / заметки
WARNING-T1: маршрут назначен на Test Technik (а не Виталий Чижов), т.к. это проверенно-рабочий логин техника на main-v2. Зарядно-критичная связка (А099 Сова + DimaTest) сохранена; зарядка прошла.
WARNING-2:orders.beforeChargingPhotos / inChargingPhotos / afterChargingPhotos = NULL, хотя все 3 фото есть в order_photos (денормализованные массивы не заполняются).
NOTE-1:estimated_charging_time_seconds=2284 уже при создании (NEW) — это plan-time оценка (сценарий ожидал NULL/0). Подтверждает наличие battery/charging-curve у BYD ATTO 3. Не дефект.
Harness:browser_file_upload в этом Docker-MCP принимает файлы только из /app (не /tmp) — обойдено через docker cp скриншота в /app контейнера браузера. Старт зарядки — два шага: «Начать зарядку» + «Старт станции».
Серия DB-CP7 (Блок 7, наблюдение)
Метка
mv_count
currentTotalKwt
currentCharge
est_s
0 (a)
9
0.272
20%
1346
0 (b)
23
0.731
21%
1321
0 (c)
30
1.006
22%
1297
+5
59
2.138
23%
1273
finish
102
3.674 (заморожено после OCPP-стопа)
26%
—
Метки +10/+20/+30 сжаты: заголовочные V10/V11 уже доказаны; реальная скорость → 75% недостижимо в cap.
Скриншоты
Сценарий (efcc-00 … efcc-08)
00 — OCPP: DimaTest CONNECTED, коннектор 1 Available
01 — Client: заказ PZ-0576 создан (Принят)
02 — Dispatcher: форма маршрута (3 точки, Готов)
02 — Dispatcher: маршрут создан (Запланирован)
04 — Technician: выезд с базы (В работе)
04 — Dispatcher: Выполняется / Техник едет
04 — Client order: «Техник едет к вам»
04 — Client main: «Техник едет к вам»
05 — Technician: прибытие (Прибыл)
05 — Client main: «Техник прибыл в»
06 — Technician: фото «До» загружено (1)
06 — Technician: зарядка идёт (Включена)
06 — Client main: «Заряжается» 21% • 0.578 кВт
07 — Mark0 order: 21%, «завершится через 22 мин»
07 — Mark0 main: 0.578 кВт (живо обновляется)
07 — Mark0 reopen main: 0.884 кВт (актуально)
07 — Mark0 reopen order: 22% • 0.976 кВт
07 — Mark+5 order: 24% • 2.29 кВт
08 — Technician: диалог завершения (2.8 кВт / 24%)