feat(analyze): real ПЗЗ КСИТ/height into nspd_zoning (ПТИЦА оживление, #1843 Route 2) #1847

Merged
lekss361 merged 1 commit from feat/ptica-real-ksit-backend into main 2026-06-20 18:27:39 +00:00
Collaborator

Оживляет главную заглушку ПТИЦА-cockpit — реальные КСИТ/высота/этажность вместо «источник НСПД-зонирование».

Что

В /analyze после centroid резолвлю ПЗЗ-регламент через координатный get_or_fetch_zone_regulation(db, lon, lat) (cache-first; bounded 3s live геопортал на miss) и мержу в nspd_zoning: max_far, max_height_m, max_floors, max_building_pct, min_parcel_area_m2, regulation_zone_index, regulation_source. Кэш zone_regulation_cache уже тёплый по ЕКБ (33 зоны, 14 с КСИТ) → реальные числа сразу.

Безопасность (hot-path)

  • Флаг enable_zoning_regulation_in_analyze (default on) — короткозамыкает весь блок при off.
  • Весь резолв в try/except → любое исключение/таймаут → null-поля, analyze никогда не 500 и не слоу-фейлит (3s cap на httpx подтверждён ревью).
  • Additive: существующие ключи nspd_zoning (zone_code/zone_name/source/raw_props) не тронуты.

Честный трейд-офф (ревью)

zone_index_at — live WFS вызов на каждый analyze даже при тёплом кэше (~0.3-0.5с healthy / 3s cap при деградации); + двойной, если включён и enable_ird_analyze. Для user-triggered тяжёлого analyze терпимо; оптимизация (мемоизация lon/lat→zone_index + единый резолв + timeout-константа) — follow-up.

Качество

ruff чист, pytest 198 passed/5 skipped (3 новых: resolved→поля, raises→graceful 200 без полей, flag off→не зовётся). code-reviewer APPROVE.

Закрывает backend-часть #1843 (Route 2). Фронт-часть (чтение nspd_zoning.max_far в cockpit) — отдельным PR. Связано: ПТИЦА #1831-1835.

Оживляет главную заглушку ПТИЦА-cockpit — **реальные КСИТ/высота/этажность** вместо «источник НСПД-зонирование». ## Что В `/analyze` после centroid резолвлю ПЗЗ-регламент через координатный `get_or_fetch_zone_regulation(db, lon, lat)` (cache-first; bounded 3s live геопортал на miss) и мержу в `nspd_zoning`: `max_far, max_height_m, max_floors, max_building_pct, min_parcel_area_m2, regulation_zone_index, regulation_source`. Кэш `zone_regulation_cache` уже тёплый по ЕКБ (33 зоны, 14 с КСИТ) → реальные числа сразу. ## Безопасность (hot-path) - Флаг `enable_zoning_regulation_in_analyze` (default on) — короткозамыкает весь блок при off. - Весь резолв в try/except → любое исключение/таймаут → null-поля, **analyze никогда не 500 и не слоу-фейлит** (3s cap на httpx подтверждён ревью). - Additive: существующие ключи `nspd_zoning` (zone_code/zone_name/source/raw_props) не тронуты. ## Честный трейд-офф (ревью) `zone_index_at` — live WFS вызов на каждый analyze даже при тёплом кэше (~0.3-0.5с healthy / 3s cap при деградации); + двойной, если включён и `enable_ird_analyze`. Для user-triggered тяжёлого analyze терпимо; оптимизация (мемоизация lon/lat→zone_index + единый резолв + timeout-константа) — follow-up. ## Качество ruff чист, **pytest 198 passed/5 skipped** (3 новых: resolved→поля, raises→graceful 200 без полей, flag off→не зовётся). **code-reviewer ✅ APPROVE**. Закрывает backend-часть #1843 (Route 2). Фронт-часть (чтение `nspd_zoning.max_far` в cockpit) — отдельным PR. Связано: ПТИЦА #1831-1835.
bot-backend added 1 commit 2026-06-20 18:24:26 +00:00
feat(analyze): surface real ПЗЗ regulation (КСИТ/height) into nspd_zoning
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 1m48s
CI / backend-tests (pull_request) Successful in 9m44s
33d7829221
Resolve numeric ПЗЗ limits (max_far/КСИТ, max_height_m, max_floors,
max_building_pct, min_parcel_area_m2) by parcel centroid via the coordinate
resolver get_or_fetch_zone_regulation (cache-first; bounded 3s live geoportal)
and merge into the /analyze nspd_zoning object. Powers the ПТИЦА cockpit's
real КСИТ/height/density (was placeholder). Flag-gated
(enable_zoning_regulation_in_analyze, default on) and hot-path-safe: any
exception/timeout → null fields, analyze never 500s or slow-fails (3s cap).
Additive — existing nspd_zoning keys untouched. 198 tests pass.

Note: zone_index_at is a live WFS call per analyze even on warm cache
(~0.3-0.5s healthy / 3s cap degraded) — optimization tracked as follow-up.
lekss361 merged commit bf521dc838 into main 2026-06-20 18:27:39 +00:00
lekss361 deleted branch feat/ptica-real-ksit-backend 2026-06-20 18:27:40 +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#1847
No description provided.