From b237e0f1e96ef13fd6075e4da79d4f0c9db1890d Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Mon, 2 Nov 2026 23:20:06 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B3=D1=80=D0=B5=D1=81=D1=81?= =?UTF-8?q?=D0=B8=D1=8F:=20=D0=BF=D0=BE=D0=BA=D1=80=D1=8B=D1=82=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D1=8B=20=D0=BA?= =?UTF-8?q?=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=BE=D0=BA=20(#198)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit У фичи AURORA-1540/1541 (корректировки) и AURORA-1751 (vgo_assignment), слитых 02.11.2026, не было ни одной проверки в регрессии: ui_smoke.py не заходил на вкладку корректировок, stand_scenario.py не делал ни одного запроса к /corrections или /vgo-assignments. - stand_scenario.py: happy-path GET /vgo-assignments/distribute и GET /corrections на каждый сценарий; сохранение корректировки первого агрегата и повтор с тем же expected_version_no — 409 CORRECTION_VERSION_CONFLICT. rb-2024-q3 не имеет подтверждённых форм ББ (только ОСВ) — сохранение там штатно получает 422 INVALID_LINE_CODE, это не регрессия и репортится как пропуск, не красным. - ui_smoke.py: страница /groups/{g}/versions/{v}/correction на каждую версию сценария. Проверено: python3 -I scripts/regression/regress.sh --only stand,ui — зелёный, оба сценария (rb-2024-q3, rb-2025-q1), включая реальный 409 на rb-2025-q1 и скриншот вкладки «Таблица корректировки» с данными. Co-Authored-By: Claude Sonnet 5 --- scripts/regression/stand_scenario.py | 34 +++++++++++++++++++++++++--- scripts/regression/ui_smoke.py | 6 ++++- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/scripts/regression/stand_scenario.py b/scripts/regression/stand_scenario.py index ddda2ff..dbada42 100644 --- a/scripts/regression/stand_scenario.py +++ b/scripts/regression/stand_scenario.py @@ -2,9 +2,10 @@ Для каждого сценария expected.json: консолидация ГК/ГСК за период → блокировка → загрузка файлов фикстур в версию → ожидание распознавания (tabular-parser, scan-gateway + эмулятор ИС) → подтверждение ОСВ-документов → проверки свода -(summary, пробелы, контрольные строки), экспорта xlsx, шахматки, форм ББ/ОФР; плюс негатив (повтор создания — 409, -блокировка без права EDIT — 403). Итог — report.json (проверки) и snapshots/<сценарий>.*.json (весь свод, шахматка, -формы); с --baseline снимки сравниваются с прошлым прогоном (расхождения — в report.json, раздел diffs). +(summary, пробелы, контрольные строки), экспорта xlsx, шахматки, таблицы корректировок (сохранение и 409 +CORRECTION_VERSION_CONFLICT), форм ББ/ОФР; плюс негатив (повтор создания — 409, блокировка без права EDIT — 403). +Итог — report.json (проверки) и snapshots/<сценарий>.*.json (весь свод, шахматка, формы); с --baseline снимки +сравниваются с прошлым прогоном (расхождения — в report.json, раздел diffs). python3 -I stand_scenario.py --api http://127.0.0.1:18000 --fixtures ../fixtures --expected expected.json --out DIR [--baseline DIR_ПРОШЛОГО_stand] [--timeout 600] @@ -348,6 +349,33 @@ def run_scenario(api: Api, sc: dict, ctx: dict, fixtures: Path, rep: Report, out ) ) + # таблица корректировок (AURORA-1540/1541) и ручное распределение строк ВГО (AURORA-1751) — без UI-покрытия (#198) + st, _, _ = api.call("GET", f"/consolidations/versions/{vid}/vgo-assignments/distribute") + rep.check(f"{sid}: распределение строк ВГО 200", st == 200, f"{st}") + st, corrections, _ = api.call("GET", f"/consolidations/versions/{vid}/corrections", params={"statement_type": "balance"}) + if rep.check(f"{sid}: таблица корректировок 200", st == 200, f"{st}"): + aggregates = corrections["aggregates"] + if rep.check(f"{sid}: таблица корректировок — есть агрегаты", len(aggregates) > 0, f"{len(aggregates)}"): + agg = aggregates[0] + path = f"/consolidations/versions/{vid}/corrections/aggregates/{agg['rule_id']}/{agg['company_1']['id']}/{agg['company_2']['id']}" + body = { + "debit": [{"line_code": agg["side_1"]["article_line"].split("/")[0], "amount": "1.00"}], + "credit": [{"line_code": agg["side_2"]["article_line"].split("/")[0], "amount": "1.00"}], + "comment": "регрессия (#198): проверка сохранения и конфликта версий", + "expected_version_no": None, + } + st1, saved, _ = api.call("PUT", path, body, params={"statement_type": "balance"}) + if st1 == 422 and (saved or {}).get("detail", {}).get("code") == "INVALID_LINE_CODE": + # статья не из формы ББ компании — в этом сценарии нет подтверждённых форм (только ОСВ); не регрессия + print(f"{sid}: корректировка — пропуск сохранения, нет формы ББ со статьёй агрегата: {saved}", flush=True) + elif rep.check(f"{sid}: корректировка — сохранение 200", st1 == 200, f"{st1} {str(saved)[:200]}"): + st2, conflict, _ = api.call("PUT", path, body, params={"statement_type": "balance"}) + rep.check( + f"{sid}: корректировка — повтор с устаревшим expected_version_no — 409", + st2 == 409 and (conflict or {}).get("detail", {}).get("code") == "CORRECTION_VERSION_CONFLICT", + f"{st2} {conflict}", + ) + # формы ББ/ОФР из PDF (эмулятор ИС): типы документов, строки, проверки stmts = {} for inn, want in sc["statements"].items(): diff --git a/scripts/regression/ui_smoke.py b/scripts/regression/ui_smoke.py index a53539b..6bf75ac 100644 --- a/scripts/regression/ui_smoke.py +++ b/scripts/regression/ui_smoke.py @@ -47,7 +47,11 @@ def main() -> int: if g: pages.append(("group", f"/groups/{g}")) for sid, vid in (ids.get("versions") or {}).items(): - pages += [(f"{sid}-osv", f"/groups/{g}/versions/{vid}/osv"), (f"{sid}-chess", f"/groups/{g}/versions/{vid}/chess")] + pages += [ + (f"{sid}-osv", f"/groups/{g}/versions/{vid}/osv"), + (f"{sid}-chess", f"/groups/{g}/versions/{vid}/chess"), + (f"{sid}-correction", f"/groups/{g}/versions/{vid}/correction"), + ] for name, doc in (ids.get("documents") or {}).items(): pages.append((f"doc-{name}", f"/documents/{doc}"))