From eddbe9eaa5e0e8bba1142605c394dae91affa2b6 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Fri, 3 Jul 2026 02:47:26 +0500 Subject: [PATCH] =?UTF-8?q?fix(vodokanal):=20unit-guard=20=D1=82=D1=80?= =?UTF-8?q?=D0=B5=D0=B1=D1=83=D0=B5=D1=82=20=D0=B8=20=C2=AB=D1=82=D1=8B?= =?UTF-8?q?=D1=81=C2=BB,=20=D0=B8=20=C2=AB=D1=81=D1=83=D1=82=C2=BB=20(?= =?UTF-8?q?=D1=80=D0=B5=D0=B2=D1=8C=D1=8E:=20=D1=82=D1=8B=D1=81.=D0=BC3/?= =?UTF-8?q?=D1=87=D0=B0=D1=81=20=D0=BD=D0=B5=20=D0=BF=D1=80=D0=BE=D1=85?= =?UTF-8?q?=D0=BE=D0=B4=D0=B8=D1=82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/services/site_finder/vodokanal_reserve_loader.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/backend/app/services/site_finder/vodokanal_reserve_loader.py b/backend/app/services/site_finder/vodokanal_reserve_loader.py index cff79c18..5ca8ea8a 100644 --- a/backend/app/services/site_finder/vodokanal_reserve_loader.py +++ b/backend/app/services/site_finder/vodokanal_reserve_loader.py @@ -84,7 +84,9 @@ _REQUESTED_LABEL = "количество поданных и зарегистр _REFUSED_LABEL_PREFIX = "количество заявок на подключение, по которым принято решение об отказе" # Ед.изм. резерва: «тыс. м3/сут» / «тыс.м3/сут» (пробелы схлопнуты) — защита от того, # чтобы «Резерв…» из чужой формы с иной размерностью не попал в тыс.м³/сут. -_RESERVE_UNIT_MARKER = "тыс" +# Оба токена обязательны: одного «тыс» мало — «тыс. м3/час» прошёл бы с чужой +# временной базой (ревью 2026-07-03). +_RESERVE_UNIT_MARKERS = ("тыс", "сут") # Шапки таблицы и служебные строки — не данные. _HEADER_MARKERS = frozenset({"№ п/п", "№ цсв", "наименование показателя", "название цсв"}) _TOTAL_MARKER = "итого" @@ -344,7 +346,7 @@ def extract_water_rows(matrix: list[list[str]]) -> list[dict]: if _is_reserve_metric(metric): # Защита размерности: у резерва ед.изм. — «тыс…м3/сут» (col label+1). unit = _norm(_cell(row, label_col + 1)) - if _RESERVE_UNIT_MARKER in unit: + if all(m in unit for m in _RESERVE_UNIT_MARKERS): cur_reserve = value cur_note = _cell(row, value_col + 1) # Примечание строки резерва elif _is_requested_metric(metric):