Gate G2: Парсер ВРИ + категория земель из НСПД per cad #29

Closed
opened 2026-05-11 20:13:37 +00:00 by lekss361 · 3 comments
lekss361 commented 2026-05-11 20:13:37 +00:00 (Migrated from github.com)

Эшелон: 🔴 Gate — «Можно ли тут строить МКД»

Контекст / проблема

В /parcels/{cad}/analyze нет данных о ВРИ (виде разрешённого использования) и категории земель участка. Невозможно ответить «ИЖС или МКД?», «земли населённых пунктов или СХН?». Hard-block для всего МКД-скоринга.

Что сделать

  1. Расширить nspd_lite.py — новый thematic_id для ВРИ-данных (либо тот же endpoint парсит больше полей в raw_props)
  2. Schema migration: добавить в cad_quarters_geom и cad_parcels_geom колонки permitted_use TEXT, land_category TEXT, либо JSON-extract из raw_props
  3. Backfill для существующих cad_quarters_geom (~9700 записей) через bulk NSPD job (job_kind=pzz_vri)
  4. Endpoint extension analyze: gate.permitted_use, gate.land_category
  5. Logic в gate verdict: can_build_mkd = permitted_use ∈ {«Под многоквартирную застройку», «Многоэтажная жилая застройка», ...}

Acceptance

  • >80% existing cad_quarters_geom имеют permitted_use IS NOT NULL после backfill
  • Известный «Под МКД» участок (Academic 66:41:...) показывает соответствующий permitted_use в analyze
  • ИЖС-участок показывает can_build_mkd: false

Owner

backend-engineer (extend nspd_lite.py + new thematic) + database-expert (schema migration)

Effort

2–3 дня

Risks / open

  • НСПД может не отдавать ВРИ через тот же endpoint что cad geom — нужен новый thematic_id (проверить через debug-call)
  • IP-block риск при backfill 9700 записей — уже есть rate limit infra, перевыпустить параллельные jobs
  • ВРИ часто null в НСПД для старых участков — fallback на raw_props.attr_value поиск по ключу «Разрешённое использование»

Dependencies

— (foundation для G5)

  • Existing NSPD infra: backend/app/services/scrapers/nspd_lite.py, nspd_geo_jobs
  • Closes part of: #27
**Эшелон:** 🔴 Gate — «Можно ли тут строить МКД» ## Контекст / проблема В `/parcels/{cad}/analyze` нет данных о ВРИ (виде разрешённого использования) и категории земель участка. Невозможно ответить «ИЖС или МКД?», «земли населённых пунктов или СХН?». Hard-block для всего МКД-скоринга. ## Что сделать 1. Расширить `nspd_lite.py` — новый thematic_id для ВРИ-данных (либо тот же endpoint парсит больше полей в `raw_props`) 2. Schema migration: добавить в `cad_quarters_geom` и `cad_parcels_geom` колонки `permitted_use TEXT`, `land_category TEXT`, либо JSON-extract из `raw_props` 3. Backfill для существующих cad_quarters_geom (~9700 записей) через bulk NSPD job (job_kind=`pzz_vri`) 4. Endpoint extension `analyze`: `gate.permitted_use`, `gate.land_category` 5. Logic в gate verdict: `can_build_mkd = permitted_use ∈ {«Под многоквартирную застройку», «Многоэтажная жилая застройка», ...}` ## Acceptance - [ ] >80% existing cad_quarters_geom имеют `permitted_use IS NOT NULL` после backfill - [ ] Известный «Под МКД» участок (Academic 66:41:...) показывает соответствующий permitted_use в analyze - [ ] ИЖС-участок показывает `can_build_mkd: false` ## Owner `backend-engineer` (extend nspd_lite.py + new thematic) + `database-expert` (schema migration) ## Effort 2–3 дня ## Risks / open - НСПД может не отдавать ВРИ через тот же endpoint что cad geom — нужен новый thematic_id (проверить через debug-call) - IP-block риск при backfill 9700 записей — уже есть rate limit infra, перевыпустить параллельные jobs - ВРИ часто null в НСПД для старых участков — fallback на raw_props.attr_value поиск по ключу «Разрешённое использование» ## Dependencies — (foundation для G5) ## Links - Existing NSPD infra: `backend/app/services/scrapers/nspd_lite.py`, `nspd_geo_jobs` - Closes part of: #27
lekss361 commented 2026-05-12 05:46:08 +00:00 (Migrated from github.com)

Закрывается одним REST вызовом (после #94):

GET /api/geoportal/v2/search/geoportal?query={cad} возвращает в properties.options:

  • permitted_use_established_by_document — полное ВРИ строкой
  • land_record_category_type — категория земель ("Земли населённых пунктов" / "СХН" / etc)
  • ownership_type — Частная / Государственная / etc
  • right_type — Собственность / Аренда / etc

Effort снижается с ~2-3 дней до ~0.5 дня (мерджится с #94 search_by_cad + schema migration колонок).

**Закрывается одним REST вызовом** (после #94): `GET /api/geoportal/v2/search/geoportal?query={cad}` возвращает в `properties.options`: - `permitted_use_established_by_document` — полное ВРИ строкой - `land_record_category_type` — категория земель ("Земли населённых пунктов" / "СХН" / etc) - `ownership_type` — Частная / Государственная / etc - `right_type` — Собственность / Аренда / etc Effort снижается с ~2-3 дней до ~0.5 дня (мерджится с #94 search_by_cad + schema migration колонок).
Owner

Прогресс через #94 sub-PRs (2026-05-16):

  • /analyze сейчас возвращает nspd_zoning (ПЗЗ/ВРИ группа) — via #212 NspdZoningBlock (territorial_zones layer 875838)
  • PR3 #222 (in review) добавляет denorm таблицу nspd_parcels с колонками permitted_use, land_category, cost_value, cost_per_m2 per cad_num — это и есть G2 парсер ВРИ + категория земель.

После merge #222 — можно закрыть G2.

**Прогресс через #94 sub-PRs (2026-05-16):** - `/analyze` сейчас возвращает `nspd_zoning` (ПЗЗ/ВРИ группа) — via #212 NspdZoningBlock (territorial_zones layer 875838) - PR3 #222 (in review) добавляет denorm таблицу `nspd_parcels` с колонками `permitted_use`, `land_category`, `cost_value`, `cost_per_m2` per cad_num — это и есть **G2 парсер ВРИ + категория земель**. После merge #222 — можно закрыть G2.
Collaborator

DRIFT — реализовано (ground-truth 2026-06-13), трекер отставал.

G2 ВРИ + категория земель полностью реализовано: cad_parcels.permitted_use_established_by_document + land_record_category_type заполнены 40137/40190 (99.9%, перевыполнен acceptance >80%). Analyze возвращает permitted_use/land_category (parcels.py parcel_meta). Bulk cadastre (#168) закрыл backfill. Closed.

**DRIFT — реализовано (ground-truth 2026-06-13), трекер отставал.** G2 ВРИ + категория земель полностью реализовано: cad_parcels.permitted_use_established_by_document + land_record_category_type заполнены 40137/40190 (99.9%, перевыполнен acceptance >80%). Analyze возвращает permitted_use/land_category (parcels.py parcel_meta). Bulk cadastre (#168) закрыл backfill. Closed.
Sign in to join this conversation.
No project
No assignees
3 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#29
No description provided.