diff --git a/backend/app/services/site_finder/quarter_dump_lookup.py b/backend/app/services/site_finder/quarter_dump_lookup.py index 2ade90c2..dd493801 100644 --- a/backend/app/services/site_finder/quarter_dump_lookup.py +++ b/backend/app/services/site_finder/quarter_dump_lookup.py @@ -544,8 +544,9 @@ def _get_cad_zouit_overlaps(db: Session, parcel_wkt: str) -> list[dict[str, Any] # в ::geography для корректных м². NULLIF guard от деления на ноль → coverage None. # #1957: cad_zouit хранит одну физическую зону 2× (одинаковый reg_numb_border, # разный category_name) → дубль-строки в overlaps. DISTINCT ON (reg_numb_border) - # схлопывает в одну (берём наименьший id). Зоны без рег-номера (NULL) не - # схлопываются между собой — каждая остаётся отдельной строкой. + # схлопывает в одну, оставляя наименьший id (ORDER BY reg_numb_border, id). + # reg_numb_border — TEXT NOT NULL (0 NULL на проде), так что рег-номер есть у + # каждой строки и дедуп идёт по реальному идентификатору зоны. rows = db.execute( text( """ diff --git a/frontend/src/types/nspd.ts b/frontend/src/types/nspd.ts index 0f7001ff..bc0d84aa 100644 --- a/frontend/src/types/nspd.ts +++ b/frontend/src/types/nspd.ts @@ -19,7 +19,7 @@ export interface NspdZoning { } export interface NspdZouitOverlap { - group_key: string; // e.g. "engineering", "okn", "natural", "protected", "other", "cad_zouit" + group_key: string; // e.g. "engineering", "okn", "natural", "protected", "other" layer: string; // e.g. "zouit_engineering"; для cad_zouit fallback = type_zone subcategory: string | number | null; name: string | null;