(medium) NspdEngineeringNearbyBlock.tsx: смешение радиусов 200 м (analyze) и 500 м (connection-points) под подписью «200 м» #1461

Closed
opened 2026-06-15 05:56:00 +00:00 by bot-backend · 1 comment
Collaborator

Severity: medium · Категория: report · Файл: frontend/src/components/site-finder/NspdEngineeringNearbyBlock.tsx:35-44, 57-63

NspdEngineeringNearbyBlock.tsx:24-44 мёржит в одну таблицу два источника. prop nearby (analyze): _ENGINEERING_RADIUS_M=200 м (quarter_dump_lookup.py:33/483). cpData.engineering_structures из useConnectionPoints: хук не передаёт radius_m → endpoint берёт default 500 (parcels.py:2912). Подпись пустого состояния зашита: «Инженерных объектов в 200 м не найдено» (line 59). Импакт: таблица может показывать сооружения на 200-500 м (из CP) под UI-заявлением о радиусе 200 м, либо ложное «в 200 м не найдено». Чинить: вызывать useConnectionPoints с radius_m=200 для консистентности либо показывать фактический радиус каждого источника (колонка «источник» уже есть в MergedRow.source).

Почему баг: Радиусы подтверждены: analyze=200 (_ENGINEERING_RADIUS_M=200), CP=500 (Query default 500, хук не передаёт radius_m). Тексты '200 м' жёстко зашиты в компоненте (строки 59 и неявно в шапке). Это рассинхрон данных и подписи: клиент видит объекты дальше заявленного радиуса либо ложное «в 200 м не найдено» при наличии объектов на 200-500 м из второго источника.

Как чинить: Либо передавать radius_m=200 в useConnectionPoints для согласования, либо убрать жёсткую «200 м» из подписи и показывать фактический максимум/диапазон дистанций; пустое состояние формулировать без конкретного радиуса.


deep-audit «армия ботов 2» · verify+harden, confidence 0.9 · unit U95

**Severity:** medium · **Категория:** report · **Файл:** `frontend/src/components/site-finder/NspdEngineeringNearbyBlock.tsx:35-44, 57-63` NspdEngineeringNearbyBlock.tsx:24-44 мёржит в одну таблицу два источника. prop nearby (analyze): _ENGINEERING_RADIUS_M=200 м (quarter_dump_lookup.py:33/483). cpData.engineering_structures из useConnectionPoints: хук не передаёт radius_m → endpoint берёт default 500 (parcels.py:2912). Подпись пустого состояния зашита: «Инженерных объектов в 200 м не найдено» (line 59). Импакт: таблица может показывать сооружения на 200-500 м (из CP) под UI-заявлением о радиусе 200 м, либо ложное «в 200 м не найдено». Чинить: вызывать useConnectionPoints с radius_m=200 для консистентности либо показывать фактический радиус каждого источника (колонка «источник» уже есть в MergedRow.source). **Почему баг:** Радиусы подтверждены: analyze=200 (_ENGINEERING_RADIUS_M=200), CP=500 (Query default 500, хук не передаёт radius_m). Тексты '200 м' жёстко зашиты в компоненте (строки 59 и неявно в шапке). Это рассинхрон данных и подписи: клиент видит объекты дальше заявленного радиуса либо ложное «в 200 м не найдено» при наличии объектов на 200-500 м из второго источника. **Как чинить:** Либо передавать radius_m=200 в useConnectionPoints для согласования, либо убрать жёсткую «200 м» из подписи и показывать фактический максимум/диапазон дистанций; пустое состояние формулировать без конкретного радиуса. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.9 · unit U95</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:56:00 +00:00
bot-backend added the
scope/frontend
label 2026-06-15 11:02:08 +00:00
Owner

🔍 week ревью 1 — верификация (ПОДТВЕРЖДЕНО)

Текущее состояние кода: frontend/src/components/site-finder/NspdEngineeringNearbyBlock.tsx:24-44 мёржит два источника: nearby (analyze) стр. 24-33 и cpData.engineering_structures (из useConnectionPoints) стр. 35-44. Пустое состояние «Инженерных объектов в 200 м не найдено» — стр. 59-61. Хук frontend/src/hooks/useConnectionPoints.ts:14-20 зовёт /api/v1/parcels/{cad}/connection-points БЕЗ radius_m. Радиусы: analyze — _ENGINEERING_RADIUS_M = 200 (backend/app/services/site_finder/quarter_dump_lookup.py:33, используется на стр. 479); CP-endpoint — default radius_m=500 (backend/app/api/v1/parcels.py:2870, проброс в get_connection_points(db, cad_num, radius_m) стр. 2883; сервис default тоже 500 — quarter_dump_lookup.py:890).

Корень: Таблица показывает CP-сооружения в радиусе до 500 м под UI-подписью «200 м» (хук не передаёт radius_m, endpoint берёт 500). При наличии объектов analyze пусто, а CP даёт что-то на 200-500 м — таблица противоречит подписи; либо ложное «в 200 м не найдено».

Что править:

  • Передавать radius_m=200 в useConnectionPoints для согласования с analyze (расширить сигнатуру хука: useConnectionPoints(cadNum, enabled, radiusM=200) → добавить radius_m в queryKey и query-string).
  • Либо убрать жёсткую «200 м» из подписи (стр. 59) и показывать фактический диапазон дистанций; колонка «источник» уже есть в MergedRow.source (стр. 15) — можно явно разделять.

Что посмотреть:

  • Код: NspdEngineeringNearbyBlock.tsx:24-44, 59; useConnectionPoints.ts:10-23; parcels.py:2870; quarter_dump_lookup.py:33, 479, 890.
  • Vault: domains/ui/components/Component_SiteFinder_Page.md (NspdEngineeringNearbyBlock).
**🔍 week ревью 1 — верификация (ПОДТВЕРЖДЕНО)** **Текущее состояние кода:** `frontend/src/components/site-finder/NspdEngineeringNearbyBlock.tsx:24-44` мёржит два источника: `nearby` (analyze) стр. 24-33 и `cpData.engineering_structures` (из `useConnectionPoints`) стр. 35-44. Пустое состояние «Инженерных объектов в 200 м не найдено» — стр. 59-61. Хук `frontend/src/hooks/useConnectionPoints.ts:14-20` зовёт `/api/v1/parcels/{cad}/connection-points` БЕЗ `radius_m`. Радиусы: analyze — `_ENGINEERING_RADIUS_M = 200` (`backend/app/services/site_finder/quarter_dump_lookup.py:33`, используется на стр. 479); CP-endpoint — default `radius_m=500` (`backend/app/api/v1/parcels.py:2870`, проброс в `get_connection_points(db, cad_num, radius_m)` стр. 2883; сервис default тоже 500 — `quarter_dump_lookup.py:890`). **Корень:** Таблица показывает CP-сооружения в радиусе до 500 м под UI-подписью «200 м» (хук не передаёт `radius_m`, endpoint берёт 500). При наличии объектов analyze пусто, а CP даёт что-то на 200-500 м — таблица противоречит подписи; либо ложное «в 200 м не найдено». **Что править:** - Передавать `radius_m=200` в `useConnectionPoints` для согласования с analyze (расширить сигнатуру хука: `useConnectionPoints(cadNum, enabled, radiusM=200)` → добавить `radius_m` в queryKey и query-string). - Либо убрать жёсткую «200 м» из подписи (стр. 59) и показывать фактический диапазон дистанций; колонка «источник» уже есть в `MergedRow.source` (стр. 15) — можно явно разделять. **Что посмотреть:** - Код: `NspdEngineeringNearbyBlock.tsx:24-44, 59`; `useConnectionPoints.ts:10-23`; `parcels.py:2870`; `quarter_dump_lookup.py:33, 479, 890`. - Vault: `domains/ui/components/Component_SiteFinder_Page.md` (NspdEngineeringNearbyBlock).
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
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#1461
No description provided.