feat(site-finder): позитив-разрез сетевых ЗОУИТ «сеть рядом с участком» (Фаза C2/C3) #2281

Merged
bot-backend merged 1 commit from feat/zouit-network-nearby into main 2026-07-03 08:18:25 +00:00
Collaborator

Что

Фаза C #2119, кирпичи C2+C3 (backend). Охранная зона инженерной сети = коридор, где физически лежит сеть → «теплотрасса в 24 м — врезка дешёвая». Решающий сигнал для §3, особенно тепло: у heat-резервов не было гео-привязки к участку.

  • Новое поле nearby_network_zones в GET /parcels/{cad}/connection-capacity: до 2 ближайших сетевых охранных зон cad_zouit на каждый net_kind в радиусе 300 м; пересекающие участок — distance_m=0. Аддитивно (default []), старые клиенты не затронуты.
  • SQL: GIST-префильтр в градусах (0.006° ≈ 366 м по долготе на широте ЕКБ — шире точного радиуса, false negatives нет) + точный geography-фильтр 300 м. EXPLAIN на проде: Index Scan, 69.9 мс (без префильтра — Seq Scan 376 мс). SET LOCAL statement_timeout=4000 с явным сбросом (паттерн offer_trend); при таймауте деградация в [] с warning-логом.
  • НОВЫЙ network_zone_humanize.py (C3): переиспользует classify_network_zone из network_obremenenie; refine_net_kind дочищает general «инженерные коммуникации» по name_by_doc (на проде это реально тепло/газ), human_label вытаскивает кад.номер трубопровода и «ВЛ/КЛ N кВ + ТП M»; ≤1 кВ подписывается как last-mile, не магистраль.
  • Прод-верифицировано на 66:41:0404019:4728: теплотрасса в 3 м (кад. 66:41:0207024:236), ввод 0,4 кВ от ТП 2164 в 58 м, газопровод в 125 м.
  • api-types.ts регенерён с main (+26 строк, только NearbyNetworkZone).

Тесты

83 passed (25 новых: regex-кейсы ВЛ/КЛ/кад.номер/None, лимит 2/kind, сортировка). ruff clean, CAST-grep пуст.

Ревью

code-reviewer: APPROVE. Оба minor учтены/приняты: сброс statement_timeout добавлен; «первый кад.номер в имени» — осознанное ограничение (типовая раскладка name_by_doc ставит номер трубы первым).

Далее

Фронтенд-отображение nearby_network_zones в §3 — отдельный PR.

Refs #2119

## Что Фаза C #2119, кирпичи C2+C3 (backend). Охранная зона инженерной сети = коридор, где физически лежит сеть → «теплотрасса в 24 м — врезка дешёвая». Решающий сигнал для §3, особенно тепло: у heat-резервов не было гео-привязки к участку. - Новое поле `nearby_network_zones` в `GET /parcels/{cad}/connection-capacity`: до 2 ближайших сетевых охранных зон `cad_zouit` на каждый net_kind в радиусе 300 м; пересекающие участок — `distance_m=0`. Аддитивно (default `[]`), старые клиенты не затронуты. - SQL: GIST-префильтр в градусах (0.006° ≈ 366 м по долготе на широте ЕКБ — шире точного радиуса, false negatives нет) + точный geography-фильтр 300 м. EXPLAIN на проде: **Index Scan, 69.9 мс** (без префильтра — Seq Scan 376 мс). `SET LOCAL statement_timeout=4000` с явным сбросом (паттерн offer_trend); при таймауте деградация в `[]` с warning-логом. - НОВЫЙ `network_zone_humanize.py` (C3): переиспользует `classify_network_zone` из network_obremenenie; `refine_net_kind` дочищает general «инженерные коммуникации» по name_by_doc (на проде это реально тепло/газ), `human_label` вытаскивает кад.номер трубопровода и «ВЛ/КЛ N кВ + ТП M»; ≤1 кВ подписывается как last-mile, не магистраль. - Прод-верифицировано на `66:41:0404019:4728`: теплотрасса в 3 м (кад. 66:41:0207024:236), ввод 0,4 кВ от ТП 2164 в 58 м, газопровод в 125 м. - `api-types.ts` регенерён с main (+26 строк, только NearbyNetworkZone). ## Тесты 83 passed (25 новых: regex-кейсы ВЛ/КЛ/кад.номер/None, лимит 2/kind, сортировка). ruff clean, CAST-grep пуст. ## Ревью code-reviewer: ✅ APPROVE. Оба minor учтены/приняты: сброс statement_timeout добавлен; «первый кад.номер в имени» — осознанное ограничение (типовая раскладка name_by_doc ставит номер трубы первым). ## Далее Фронтенд-отображение `nearby_network_zones` в §3 — отдельный PR. Refs #2119
bot-backend added 1 commit 2026-07-03 08:01:57 +00:00
feat(site-finder): позитив-разрез сетевых ЗОУИТ «сеть рядом с участком» (#2119 C2/C3)
All checks were successful
CI / changes (pull_request) Successful in 21s
CI Trade-In / changes (pull_request) Successful in 22s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 2m52s
CI / openapi-codegen-check (pull_request) Successful in 3m44s
CI / backend-tests (pull_request) Successful in 15m40s
5ae0fcc4f5
Охранная зона инженерной сети = коридор, где физически проходит сеть →
«теплотрасса в 24 м, врезка дешёвая» — решающий сигнал §3 (особенно heat,
у которого не было гео-привязки). Новое поле nearby_network_zones в
connection-capacity: до 2 ближайших сетевых охранных зон cad_zouit на net_kind
в радиусе 300 м (GIST-префильтр в градусах + точный geography, ~70 мс,
statement_timeout 4s с явным сбросом), гуманизированные подписи (кад.номер
трубопровода / напряжение ВЛ + ТП, ≤1 кВ помечен как last-mile). general
«инженерные коммуникации» дочищается по name_by_doc (на проде это реально
тепло/газ). Пересекающие участок зоны — distance_m=0.
bot-backend merged commit 7c12812f81 into main 2026-07-03 08:18:25 +00:00
bot-backend deleted branch feat/zouit-network-nearby 2026-07-03 08:18:25 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2281
No description provided.