feat(sf): wire ППТ/ПМТ planning_projects в analyze ird-блок (#1085) #1105

Merged
bot-reviewer merged 1 commit from feat/1085-planning-analyze-wiring into main 2026-06-06 20:50:34 +00:00
Owner

Дополняет #1104 (ППТ/ПМТ ingest) — теперь данные planning_projects видны в analyze.

Что

  • backend/app/services/site_finder/planning_lookup.pyparcel_planning_overlaps(db, wkt): ППТ/ПМТ, пересекающие участок (ST_Intersects через GIST idx_planning_projects_geom, geom уже 4326). Graceful (pre-migration/БД-ошибка → []). Зеркалит ird_overlay_lookup.
  • ird_analyze.py — добавлен ключ planning_projects в ИРД-блок analyze (DB-only, выполняется независимо от centroid, как ird_overlaps).
  • Тесты: test_planning_lookup.py (3) + расширен test_ird_analyze.py (assert planning_projects в блоке).

Безопасность / scope

  • За тем же флагом enable_ird_analyze (default off) — build_ird_analyze_block вызывается только при включённом флаге (#1101).
  • НЕ трогает parcels.py — блок уже подключён в D9b.
  • Зависит от #1104 (таблица planning_projects м.134, merged).

Валидация

  • pytest test_planning_lookup.py test_ird_analyze.py7 passed; ruff clean.
  • DB-запрос: ST_Intersects + GIST, CAST psycopg v3.
Дополняет #1104 (ППТ/ПМТ ingest) — теперь данные `planning_projects` видны в analyze. ## Что - **`backend/app/services/site_finder/planning_lookup.py`** — `parcel_planning_overlaps(db, wkt)`: ППТ/ПМТ, пересекающие участок (`ST_Intersects` через GIST `idx_planning_projects_geom`, geom уже 4326). Graceful (pre-migration/БД-ошибка → `[]`). Зеркалит `ird_overlay_lookup`. - **`ird_analyze.py`** — добавлен ключ `planning_projects` в ИРД-блок analyze (DB-only, выполняется независимо от centroid, как `ird_overlaps`). - Тесты: `test_planning_lookup.py` (3) + расширен `test_ird_analyze.py` (assert `planning_projects` в блоке). ## Безопасность / scope - За тем же флагом `enable_ird_analyze` (default off) — `build_ird_analyze_block` вызывается только при включённом флаге (#1101). - **НЕ трогает `parcels.py`** — блок уже подключён в D9b. - Зависит от #1104 (таблица `planning_projects` м.134, merged). ## Валидация - `pytest test_planning_lookup.py test_ird_analyze.py` → **7 passed**; `ruff` clean. - DB-запрос: `ST_Intersects` + GIST, CAST psycopg v3.
lekss361 added 1 commit 2026-06-06 20:44:51 +00:00
feat(sf): wire ППТ/ПМТ planning_projects в analyze ird-блок (#1085)
All checks were successful
CI / changes (push) Successful in 6s
CI / changes (pull_request) Successful in 5s
CI / backend-tests (push) Successful in 5m48s
CI / backend-tests (pull_request) Successful in 5m46s
ffab64aa6a
lekss361 added the
GG-форсайт
scope/backend
site-finder
status/review
labels 2026-06-06 20:44:58 +00:00
bot-reviewer reviewed 2026-06-06 20:50:25 +00:00
bot-reviewer left a comment
Collaborator

APPROVE — wire planning_projects в ird-блок, зеркало reviewed #1092.

  • planning_lookup.py параметризован (:parcel_wkt + CAST(:x AS text) → ST_GeomFromText, нет инъекции, psycopg v3); GIST idx_planning_projects_geom (м.134); geom уже 4326. SELECT-колонки (project_type/doc_status_name/full_name/project_name/dmd_actual_year) ∈ DDL м.134 (#1104). graceful except (Operational/Programming) → [].
  • ird_analyze.py: +1 DB-only ключ planning_projects (выполняется безусловно как ird_overlaps, не gated на centroid); additive к block-dict, parcels.py НЕ тронут (блок подключён в D9b). За флагом enable_ird_analyze OFF → нулевое изменение поведения.
  • Тесты: planning_lookup 3 (returns/empty-wkt/missing-table via ProgrammingError) + ird_analyze расширен (assert planning_projects). non-vacuous.

Минор: тот же DataError-on-malformed-WKT gap что в ird_overlay_lookup (#1092) — except не ловит DataError. parcel_wkt системный → low-risk; уже трекается #1095. Добавлю planning_lookup в его scope.

Merge → deploy-verify (flag OFF → health-green достаточно).

<!-- gendesign-review-bot: sha=ffab64a verdict=approve --> ✅ **APPROVE** — wire planning_projects в ird-блок, зеркало reviewed #1092. - **planning_lookup.py** параметризован (`:parcel_wkt` + `CAST(:x AS text)` → ST_GeomFromText, нет инъекции, psycopg v3); GIST `idx_planning_projects_geom` (м.134); geom уже 4326. SELECT-колонки (project_type/doc_status_name/full_name/project_name/dmd_actual_year) ∈ DDL м.134 (#1104). graceful except (Operational/Programming) → `[]`. - **ird_analyze.py**: +1 DB-only ключ `planning_projects` (выполняется безусловно как ird_overlaps, не gated на centroid); additive к block-dict, parcels.py НЕ тронут (блок подключён в D9b). За флагом `enable_ird_analyze` OFF → нулевое изменение поведения. - Тесты: planning_lookup 3 (returns/empty-wkt/missing-table via ProgrammingError) + ird_analyze расширен (assert planning_projects). non-vacuous. **Минор:** тот же DataError-on-malformed-WKT gap что в `ird_overlay_lookup` (#1092) — except не ловит DataError. parcel_wkt системный → low-risk; уже трекается #1095. Добавлю planning_lookup в его scope. Merge → deploy-verify (flag OFF → health-green достаточно).
bot-reviewer merged commit 53e76738b4 into main 2026-06-06 20:50:34 +00:00
Sign in to join this conversation.
No reviewers
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#1105
No description provided.