[ИРД-5] Резервирование ЗУ под изъятие #1062

Closed
opened 2026-06-05 03:46:23 +00:00 by bot-backend · 11 comments
Collaborator

Запрос команды (Макс/Леха) 2026-06-04 для «волшебной таблицы» (= analyze/§22). Источники: ПКК pkk.rosreestr.ru, НСПД нспд.рф, portal.okn.midural.ru, приказы ПАТ.

Существующее: 🔴 NONE.
Источник: НСПД «Зоны резервирования / Решения об изъятии» (ID — harvest #1057). ⚠️ федеральное покрытие есть, ЕКБ coverage uncertain (может быть пусто) → fallback ИСОГД (manual).
План: harvest ID (#1057) → fetch по геометрии → поле reservation; если на ЕКБ пусто — задокументировать ограничение + manual-fallback.
Acceptance: флаг резервирования/изъятия по участку, либо честная пометка «нет данных НСПД по ЕКБ».
prereq #1057.

_Запрос команды (Макс/Леха) 2026-06-04 для «волшебной таблицы» (= analyze/§22). Источники: ПКК pkk.rosreestr.ru, НСПД нспд.рф, portal.okn.midural.ru, приказы ПАТ._ **Существующее:** 🔴 NONE. **Источник:** НСПД «Зоны резервирования / Решения об изъятии» (ID — harvest #1057). ⚠️ федеральное покрытие есть, **ЕКБ coverage uncertain (может быть пусто)** → fallback ИСОГД (manual). **План:** harvest ID (#1057) → fetch по геометрии → поле `reservation`; если на ЕКБ пусто — задокументировать ограничение + manual-fallback. **Acceptance:** флаг резервирования/изъятия по участку, либо честная пометка «нет данных НСПД по ЕКБ». prereq #1057.
lekss361 added this to the Site Finder v2 — Foresight (GG-форсайт) milestone 2026-06-05 07:22:46 +00:00
Owner

🔬 Research-дополнение (2026-06-05)

Правовая база (проверено по первоисточнику):

  • Резервирование земель для гос/мун нужд — ЗК РФ ст. 70.1. Срок — не более 3 лет (под ОЭЗ — не более 2). Основания — ст. 49.
  • Ограничение прав при резервировании — ЗК РФ ст. 56.1 (резервирование = ограничение прав на ЗУ).
  • Изъятие — ЗК РФ ст. 49 / ст. 56.3 / ст. 56.6 (решение об изъятии). ст. 70.1 ЗК.

Где публикуется / fetch:

  • Резервирование регистрируется в ЕГРН как ограничение прав (ст. 56.1) → теоретически попадает в реестр границ ЕГРН и на НСПД/ПКК. Решение об изъятии (ст. 56.6) публикуется ОМСУ/ОГВ + вносится в ЕГРН.
  • НСПД может содержать тематический слой резервирования/изъятия, но numeric layer ID неизвестен и покрытие ЕКБ непроверено → ровно задача prereq #1057.

Honest split:

  • 🟡 условно автоматизируемо, но высокий риск пустого покрытия по ЕКБ. Резервирование/изъятие — редкие точечные события; федеральное покрытие НСПД есть, муниципальное (ЕКБ) — под вопросом. Подтверждать эмпирически в #1057.
  • Fetch (если ID найден): point_feature_info(layer_id, lon, lat) + get_features_in_bbox_grid; overlay по образцу data/sql/101-102. Fallback — запрос ИСОГД (manual).

Уточнённый DoD:

  • prereq #1057: найден layer ID «зоны резервирования / решения об изъятии» + зафиксировано покрытие ЕКБ (есть/пусто).
  • Если покрытие есть → поле reservation (флаг + срок/основание/реквизиты решения).
  • Если пусто → честная пометка {"reservation": null, "source": "нет данных НСПД по ЕКБ; проверка по запросу ИСОГД"} + задокументированное ограничение. Не выдумывать флаг.

Effort/Risk: ~0.5-1 дн поверх #1057 (один слой по существующему паттерну). Risk: данных по ЕКБ может физически не быть → acceptance должен явно допускать «нет данных» как валидный результат.

Status-label: needs-analysis снять после #1057 (нужен реальный layer ID + EKB-проба). Сейчас заблокирован prereq #1057 — добавить явную зависимость blocked-by #1057, держать needs-analysis до harvest.

## 🔬 Research-дополнение (2026-06-05) **Правовая база (проверено по первоисточнику):** - **Резервирование земель** для гос/мун нужд — ЗК РФ **ст. 70.1**. Срок — **не более 3 лет** (под ОЭЗ — не более 2). Основания — ст. 49. - **Ограничение прав** при резервировании — ЗК РФ **ст. 56.1** (резервирование = ограничение прав на ЗУ). - **Изъятие** — ЗК РФ ст. 49 / **ст. 56.3** / **ст. 56.6** (решение об изъятии). [ст. 70.1 ЗК](https://www.consultant.ru/document/cons_doc_LAW_33773/2aa91e943d335c54fa4883ddc063b4ad97b2c545/). **Где публикуется / fetch:** - Резервирование регистрируется в ЕГРН как **ограничение прав** (ст. 56.1) → теоретически попадает в реестр границ ЕГРН и на НСПД/ПКК. Решение об изъятии (ст. 56.6) публикуется ОМСУ/ОГВ + вносится в ЕГРН. - НСПД может содержать тематический слой резервирования/изъятия, **но numeric layer ID неизвестен** и покрытие ЕКБ непроверено → ровно задача **prereq #1057**. **Honest split:** - 🟡 **условно автоматизируемо, но высокий риск пустого покрытия по ЕКБ.** Резервирование/изъятие — редкие точечные события; федеральное покрытие НСПД есть, муниципальное (ЕКБ) — под вопросом. Подтверждать эмпирически в #1057. - Fetch (если ID найден): `point_feature_info(layer_id, lon, lat)` + `get_features_in_bbox_grid`; overlay по образцу `data/sql/101-102`. Fallback — запрос ИСОГД (manual). **Уточнённый DoD:** - [ ] **prereq #1057**: найден layer ID «зоны резервирования / решения об изъятии» + **зафиксировано покрытие ЕКБ (есть/пусто)**. - [ ] Если покрытие есть → поле `reservation` (флаг + срок/основание/реквизиты решения). - [ ] Если **пусто** → честная пометка `{"reservation": null, "source": "нет данных НСПД по ЕКБ; проверка по запросу ИСОГД"}` + задокументированное ограничение. **Не выдумывать флаг.** **Effort/Risk:** ~0.5-1 дн поверх #1057 (один слой по существующему паттерну). **Risk: данных по ЕКБ может физически не быть** → acceptance должен явно допускать «нет данных» как валидный результат. **Status-label:** `needs-analysis` снять **после #1057** (нужен реальный layer ID + EKB-проба). Сейчас **заблокирован prereq #1057** — добавить явную зависимость `blocked-by #1057`, держать `needs-analysis` до harvest.
Owner

🛰️ Разведка источника резервирования/изъятия — (2026-06-06)

TL;DR: 🔴 публичного пространственного источника НЕТ — ни геопортал ЕКБ, ни НСПД. Резервирование земель / решения об изъятии для гос-мун нужд = индивидуальные правовые акты (ПДФ), геометрия в приложениях, машинно-не-queryable. → genuinely needs-human / manual-curated registry.

Геопортал ЕКБ — проверено вживую, слой пуст

Endpoint https://геопортал.екатеринбург.рф/api/gis/ows/3/portal/wfs. Прогнал resultType=hits:

Слой features
portal_geo_urban_parsel_reserve_ppm (резервирование участков) 0
portal_geo_urban_10_area_base_development 0
portal_geo_egrn_territorial_development_zone(_active/_in_active) 0 / 0 / 0

Полный harvest каталога (1149 typeNames) по reserv|rezerv|izyat|withdrawединственный кандидат urban_parsel_reserve_ppm, и он пустой. Других слоёв резервирования/изъятия в портале нет.

НСПД — нет (установлено реконом)

Тело issue само отмечает «ЕКБ coverage uncertain (может быть пусто)». Рекон 2026-06-06 (vault research/NSPD_IRD_Layers_Automation_Recon_Jun06) подтвердил: слоёв резервирования/изъятия в НСПД (тема-1, 63 слоя) нет. Федеральный слой «Зоны резервирования» в открытом каталоге НСПД для ЕКБ не выявлен.

Природа данных → почему 🔴

Резервирование земель и изъятие для гос/мун нужд оформляются отдельными решениями (постановления Администрации ЕКБ / Правительства Свердл. обл. / распоряжения), хранятся в ИСОГД и публикуются как правовые акты (PDF). Нет:

  • публичного пространственного слоя (WFS/WMS) с геометрией зон резервирования по ЕКБ;
  • queryable-by-geometry API.
    Геометрия существует только внутри приложений к актам (растровые/текстовые описания границ).

Что possible (частично)

  1. Manual-curated registry: разово собрать действующие решения о резервировании/изъятии (правовые порталы, ИСОГД-выписки), оцифровать границы → PostGIS land_reservation(geom, basis_act, purpose, date)ST_Intersects в analyze. События редкие, объём мал, но каждое требует ручной оцифровки PDF-приложения.
  2. By-request к ИСОГД ЕКБ per-parcel — не автоматизируется в рантайме.
  3. Честная пометка в analyze: «нет публичных данных по резервированию/изъятию для ЕКБ» (соответствует второму варианту acceptance в теле issue).

Реальные атрибуты источника

N/A — пространственный источник отсутствует. Из правового акта извлекаемы: основание (№/дата постановления), цель резервирования, срок, перечень ЗУ/границы (в приложении).

Итог

🔴 genuinely needs-human. Нет публичного structured/spatial источника. Полная автоматизация невозможна; максимум — ручной реестр оцифрованных решений + ST_Intersects, что по сути ручной труд на наполнение. Рекомендация: needs-human (или узкий status/ready только под трек «manual-curated land_reservation registry + честная пометка “нет данных” по умолчанию»). Acceptance issue допускает честную пометку — её и реализовать как MVP. Prereq #1057 (НСПД-harvest) не закроет этот пункт — зависимость снять.

## 🛰️ Разведка источника резервирования/изъятия — (2026-06-06) **TL;DR: 🔴 публичного пространственного источника НЕТ — ни геопортал ЕКБ, ни НСПД. Резервирование земель / решения об изъятии для гос-мун нужд = индивидуальные правовые акты (ПДФ), геометрия в приложениях, машинно-не-queryable. → genuinely needs-human / manual-curated registry.** ### Геопортал ЕКБ — проверено вживую, слой пуст Endpoint `https://геопортал.екатеринбург.рф/api/gis/ows/3/portal/wfs`. Прогнал `resultType=hits`: | Слой | features | |---|---| | **`portal_geo_urban_parsel_reserve_ppm`** (резервирование участков) | **0** ⛔ | | `portal_geo_urban_10_area_base_development` | 0 | | `portal_geo_egrn_territorial_development_zone(_active/_in_active)` | 0 / 0 / 0 | Полный harvest каталога (1149 typeNames) по `reserv|rezerv|izyat|withdraw` → **единственный** кандидат `urban_parsel_reserve_ppm`, и он **пустой**. Других слоёв резервирования/изъятия в портале нет. ### НСПД — нет (установлено реконом) Тело issue само отмечает «ЕКБ coverage uncertain (может быть пусто)». Рекон 2026-06-06 (vault `research/NSPD_IRD_Layers_Automation_Recon_Jun06`) подтвердил: слоёв резервирования/изъятия в НСПД (тема-1, 63 слоя) нет. Федеральный слой «Зоны резервирования» в открытом каталоге НСПД для ЕКБ не выявлен. ### Природа данных → почему 🔴 Резервирование земель и изъятие для гос/мун нужд оформляются **отдельными решениями** (постановления Администрации ЕКБ / Правительства Свердл. обл. / распоряжения), хранятся в **ИСОГД** и публикуются как **правовые акты (PDF)**. Нет: - публичного пространственного слоя (WFS/WMS) с геометрией зон резервирования по ЕКБ; - queryable-by-geometry API. Геометрия существует только внутри приложений к актам (растровые/текстовые описания границ). ### Что possible (частично) 1. **Manual-curated registry:** разово собрать действующие решения о резервировании/изъятии (правовые порталы, ИСОГД-выписки), оцифровать границы → PostGIS `land_reservation(geom, basis_act, purpose, date)` → `ST_Intersects` в analyze. События редкие, объём мал, но **каждое требует ручной оцифровки** PDF-приложения. 2. **By-request к ИСОГД ЕКБ** per-parcel — не автоматизируется в рантайме. 3. **Честная пометка** в analyze: «нет публичных данных по резервированию/изъятию для ЕКБ» (соответствует второму варианту acceptance в теле issue). ### Реальные атрибуты источника N/A — пространственный источник отсутствует. Из правового акта извлекаемы: основание (№/дата постановления), цель резервирования, срок, перечень ЗУ/границы (в приложении). ### Итог **🔴 genuinely needs-human.** Нет публичного structured/spatial источника. Полная автоматизация невозможна; максимум — ручной реестр оцифрованных решений + `ST_Intersects`, что по сути ручной труд на наполнение. Рекомендация: **`needs-human`** (или узкий `status/ready` только под трек «manual-curated `land_reservation` registry + честная пометка “нет данных” по умолчанию»). Acceptance issue допускает честную пометку — её и реализовать как MVP. Prereq #1057 (НСПД-harvest) **не закроет** этот пункт — зависимость снять.
lekss361 added
needs-human
and removed
status/needs-analysis
labels 2026-06-06 18:06:03 +00:00
Owner

🔄 РЕВИЗИЯ вердикта — нашёл 2 automatable-источника (2026-06-06, добор)

Предыдущий вывод «🔴 genuinely needs-human» смягчаю до 🟡: после доп-поиска нашлись два независимых пути. Оба требуют live-подтверждения, но это уже не «нет источника».

Путь A — Региональный ГИСОГД Свердловской области (НОВОЕ, главное)

https://gisogd66.midural.ru (платформа «agate»/Аксиома-ГИС, публичный портал, без auth). В публичном каталоге /api/catalogs/agate_sverdregion есть прямые целевые слои (подтверждено вживую):

Слой (id) GeoServer typeName
«Земельные участки под изъятие (ППиМ)» (72) agate_sverdregion:agate_sverdregion_geo_urban_parsel_reserve_ppm_4add00e
«Зоны планируемого размещения ОКС проектные (ППиМ)» (85) …_geo_urban_plan_placing_oks_zone_ppmpr_…
(бонус для #1060/#1058) «Комплексное развитие территорий» (26), «Функциональные зоны» (24), «Генеральный план» (67) …_geo_urban_10_area_base_development_… / …_urban_10_functional_zone_…

То есть это региональный ИСОГД, агрегирующий генплан/ППиМ по всей области, включая ЕКБ — в отличие от муниципального геопортала ЕКБ, где urban_parsel_reserve_ppm был ПУСТ.

Метод запроса (CONFIRMED работает): GET /api/v1/spatialsearch/agate_sverdregion/<entity>/<x>/<y>, координаты EPSG:3857. Проверено: …/urbanterzoneregulation/6747149/7727279 → HTTP 200 (валидный entity). Raw /geoserver/...wfs НЕ проксируется (SPA-routing), запросы идут через этот REST.

⚠️ UNCONFIRMED (первый шаг воркера):

  1. entity-alias слоя изъятия для spatialsearch — НЕ подобрал (urbanterzoneregulation — известный рабочий; для изъятия alias другой). Снять = включить слой «Земельные участки под изъятие» в UI карты + перехватить spatialsearch-запрос (как urbanterzoneregulation всплыл при клике).
  2. Покрытие ЕКБ по фичам — не подтвердил (alias не знал → не запросил; urbanterzoneregulation в одной тест-точке ЕКБ дал n=0).

Путь B — ЕГРН-ограничение ст. 56.1 (через уже существующий parcel-pipeline)

Резервирование/изъятие по закону регистрируется в ЕГРН как ограничение прав на ЗУ (ст. 56.1 ЗК):

  • Классификатор Росреестра: код 22004001000 = ограничения по ст.56.1 (резервирование), отдельно от ст.56 ЗОУИТ (22004000000).
  • Отражается в выписке ЕГРН раздел 2 (полностью) / 4.1 (частично), с реквизитами решения.
  • → если parcel-запрос к НСПД/Росреестру отдаёт секцию ограничений с кодом — флаг + реквизиты берутся тем же пайплайном, что уже тянет ЗУ. UNCONFIRMED: отдаёт ли бесплатный ПКК/НСПД JSON классификатор ограничений (полные сведения — через «Сведения об объекте недвижимости», не «основные характеристики»).

Путь C — правовые акты (для реквизитов/enrichment)

pravo.gov66.ru публикует постановления о резервировании/изъятии (пример: 509-ПП — изъятие для реконструкции ул. Татищева, ЕКБ). Текст/PDF, без геометрии — на дозаполнение реквизитов.

Пересмотр

  • Feasibility: 🟡 (было 🔴). Рекомендуемый pipeline: (B) проверять ограничение ст.56.1 в parcel-данных ЕГРН (дёшево, переиспользует pipeline) + (A) оверлей gisogd66 spatialsearch по геометрии. Реквизиты — из B либо C.
  • Лейбл: снимаю needs-humanstatus/ready с явным confirm-first: (1) перехватить entity-alias слоя изъятия в gisogd66, (2) проверить покрытие ЕКБ, (3) проверить, отдаёт ли НСПД ограничения-код 22004001000. Если оба источника по ЕКБ окажутся пусты → вернуть needs-human + честная пометка (исходный acceptance это допускает).

Не подтверждённое вживую помечено UNCONFIRMED. Реально открытые: gisogd66.midural.ru каталог + spatialsearch, классификатор Росреестра 22004001000.

## 🔄 РЕВИЗИЯ вердикта — нашёл 2 automatable-источника (2026-06-06, добор) Предыдущий вывод «🔴 genuinely needs-human» **смягчаю до 🟡**: после доп-поиска нашлись два независимых пути. Оба требуют live-подтверждения, но это уже не «нет источника». ### Путь A — Региональный ГИСОГД Свердловской области (НОВОЕ, главное) **`https://gisogd66.midural.ru`** (платформа «agate»/Аксиома-ГИС, публичный портал, без auth). В публичном каталоге `/api/catalogs/agate_sverdregion` **есть прямые целевые слои** (подтверждено вживую): | Слой (id) | GeoServer typeName | |---|---| | **«Земельные участки под изъятие (ППиМ)»** (72) | `agate_sverdregion:agate_sverdregion_geo_urban_parsel_reserve_ppm_4add00e` | | «Зоны планируемого размещения ОКС проектные (ППиМ)» (85) | `…_geo_urban_plan_placing_oks_zone_ppmpr_…` | | (бонус для #1060/#1058) «Комплексное развитие территорий» (26), «Функциональные зоны» (24), «Генеральный план» (67) | `…_geo_urban_10_area_base_development_…` / `…_urban_10_functional_zone_…` | То есть это региональный ИСОГД, агрегирующий генплан/ППиМ по **всей области, включая ЕКБ** — в отличие от муниципального геопортала ЕКБ, где `urban_parsel_reserve_ppm` был ПУСТ. **Метод запроса (CONFIRMED работает):** `GET /api/v1/spatialsearch/agate_sverdregion/<entity>/<x>/<y>`, координаты **EPSG:3857**. Проверено: `…/urbanterzoneregulation/6747149/7727279` → HTTP 200 (валидный entity). Raw `/geoserver/...wfs` НЕ проксируется (SPA-routing), запросы идут через этот REST. **⚠️ UNCONFIRMED (первый шаг воркера):** 1. **entity-alias** слоя изъятия для spatialsearch — НЕ подобрал (`urbanterzoneregulation` — известный рабочий; для изъятия alias другой). Снять = включить слой «Земельные участки под изъятие» в UI карты + перехватить `spatialsearch`-запрос (как `urbanterzoneregulation` всплыл при клике). 2. **Покрытие ЕКБ по фичам** — не подтвердил (alias не знал → не запросил; `urbanterzoneregulation` в одной тест-точке ЕКБ дал n=0). ### Путь B — ЕГРН-ограничение ст. 56.1 (через уже существующий parcel-pipeline) Резервирование/изъятие по закону **регистрируется в ЕГРН как ограничение прав на ЗУ** (ст. 56.1 ЗК): - Классификатор Росреестра: **код `22004001000` = ограничения по ст.56.1 (резервирование)**, отдельно от ст.56 ЗОУИТ (`22004000000`). - Отражается в выписке ЕГРН **раздел 2** (полностью) / **4.1** (частично), с **реквизитами решения**. - → если parcel-запрос к НСПД/Росреестру отдаёт секцию ограничений с кодом — флаг + реквизиты берутся **тем же пайплайном, что уже тянет ЗУ**. UNCONFIRMED: отдаёт ли бесплатный ПКК/НСПД JSON классификатор ограничений (полные сведения — через «Сведения об объекте недвижимости», не «основные характеристики»). ### Путь C — правовые акты (для реквизитов/enrichment) `pravo.gov66.ru` публикует постановления о резервировании/изъятии (пример: **509-ПП** — изъятие для реконструкции ул. Татищева, ЕКБ). Текст/PDF, без геометрии — на дозаполнение реквизитов. ### Пересмотр - **Feasibility: 🟡** (было 🔴). Рекомендуемый pipeline: (B) проверять ограничение ст.56.1 в parcel-данных ЕГРН (дёшево, переиспользует pipeline) + (A) оверлей `gisogd66` spatialsearch по геометрии. Реквизиты — из B либо C. - **Лейбл: снимаю `needs-human` → `status/ready`** с явным confirm-first: (1) перехватить entity-alias слоя изъятия в gisogd66, (2) проверить покрытие ЕКБ, (3) проверить, отдаёт ли НСПД ограничения-код 22004001000. Если оба источника по ЕКБ окажутся пусты → вернуть needs-human + честная пометка (исходный acceptance это допускает). _Не подтверждённое вживую помечено UNCONFIRMED. Реально открытые: `gisogd66.midural.ru` каталог + spatialsearch, классификатор Росреестра 22004001000._
lekss361 removed the
needs-human
label 2026-06-06 18:18:56 +00:00
lekss361 added the
needs-human
label 2026-06-06 18:35:56 +00:00
Owner

ОПРОВЕРЖЕНИЕ предыдущей ревизии — Playwright-проверка убила оба пути. Возврат 🔴 needs-human

Прогнал «честные пробелы» вживую (по запросу) — оба automatable-кандидата из прошлого коммента НЕ подтвердились. Возвращаю needs-human.

Путь A (региональный ГИСОГД gisogd66) — слой ПУСТ

WFS gisogd66.midural.ru/map/tiles/agate_sverdregion/wfs работает (контроль: слой ЗУ gkn_parcel_exist = 1 379 942 фич), GetCapabilities = 104 typeNames. Но целевые слои пусты по всей области:

  • urban_parsel_reserve_ppm (изъятие ППиМ) = 0
  • urban_10_area_base_development (КРТ) = 0
  • urban_10_functional_zone = 0

Заполнены только: ЗУ (1.38M), часть «зон размещения ОКС регионального значения» (*_orz_plan: культура 40, образование 23, МЧС 32, авиа 3), ОКН-зоны (155). Т.е. портал каталогизирует слои, но данные ИРД-зон в них не залиты — ровно как в муниципальном геопортале ЕКБ. Платформа «agate»: identify-by-click работает только для docs + urbanterzoneregulation (ПЗЗ-регламент) через /api/v1/spatialsearch/...; для целевых слоёв spatialsearch вообще не вызывается (в JS-бандле только эти 2 entity).

Путь B (ЕГРН ст.56.1 через free НСПД) — недоступно на бесплатном API

  • НСПД /api/geoportal/v2/search/geoportal за WAF (HTTP 403) для не-браузерных запросов (подтвердил: 403 + Rule id; серверный nspd_client проходит, headless — нет).
  • Главное: по архитектуре проекта (data/sql/132_ird_overlays.sql + рекон NSPD_IRD_Layers_Automation_Recon_Jun06) НСПД WMS GetFeatureInfo отдаёт только геометрию + reg_numb_border + category/subcategory, без читаемого типа/реквизитов — и слоя резервирования/изъятия среди готовых НСПД-слоёв НЕТ (есть только ООПТ/ОКН/сервитут/ПЗЗ). Ограничение ст.56.1 (код 22004001000) — это раздел 2/4.1 выписки ЕГРН, а не атрибут бесплатной parcel-карты → нужна платная/СМЭВ-выписка «Сведения об объекте недвижимости».

Итог (честно)

Публичного structured/spatial источника по резервированию/изъятию для ЕКБ нет — подтверждено вживую тремя порталами (НСПД, муниц. геопортал ЕКБ, региональный ГИСОГД66). Остаётся: (C) ручной реестр из правовых актов pravo.gov66.ru (PDF, без геометрии) + честная пометка «нет данных» — как и допускает acceptance issue.

Лейбл: status/ready снят → needs-human возвращён. Прошу прощения за преждевременный оптимизм в предыдущем комменте — каталог слоёв ≠ наличие данных, проверка вживую это вскрыла.

## ❌ ОПРОВЕРЖЕНИЕ предыдущей ревизии — Playwright-проверка убила оба пути. Возврат 🔴 needs-human Прогнал «честные пробелы» вживую (по запросу) — **оба automatable-кандидата из прошлого коммента НЕ подтвердились**. Возвращаю `needs-human`. ### Путь A (региональный ГИСОГД gisogd66) — слой ПУСТ WFS `gisogd66.midural.ru/map/tiles/agate_sverdregion/wfs` работает (контроль: слой ЗУ `gkn_parcel_exist` = **1 379 942** фич), GetCapabilities = 104 typeNames. Но целевые слои **пусты по всей области**: - `urban_parsel_reserve_ppm` (изъятие ППиМ) = **0** - `urban_10_area_base_development` (КРТ) = **0** - `urban_10_functional_zone` = **0** Заполнены только: ЗУ (1.38M), часть «зон размещения ОКС регионального значения» (`*_orz_plan`: культура 40, образование 23, МЧС 32, авиа 3), ОКН-зоны (155). Т.е. портал каталогизирует слои, но **данные ИРД-зон в них не залиты** — ровно как в муниципальном геопортале ЕКБ. Платформа «agate»: identify-by-click работает только для `docs` + `urbanterzoneregulation` (ПЗЗ-регламент) через `/api/v1/spatialsearch/...`; для целевых слоёв spatialsearch вообще не вызывается (в JS-бандле только эти 2 entity). ### Путь B (ЕГРН ст.56.1 через free НСПД) — недоступно на бесплатном API - НСПД `/api/geoportal/v2/search/geoportal` за **WAF (HTTP 403)** для не-браузерных запросов (подтвердил: 403 + Rule id; серверный `nspd_client` проходит, headless — нет). - Главное: по архитектуре проекта (`data/sql/132_ird_overlays.sql` + рекон `NSPD_IRD_Layers_Automation_Recon_Jun06`) НСПД WMS GetFeatureInfo отдаёт **только геометрию + reg_numb_border + category/subcategory**, без читаемого типа/реквизитов — и **слоя резервирования/изъятия среди готовых НСПД-слоёв НЕТ** (есть только ООПТ/ОКН/сервитут/ПЗЗ). Ограничение ст.56.1 (код `22004001000`) — это раздел 2/4.1 **выписки ЕГРН**, а не атрибут бесплатной parcel-карты → нужна платная/СМЭВ-выписка «Сведения об объекте недвижимости». ### Итог (честно) Публичного structured/spatial источника по резервированию/изъятию для ЕКБ **нет** — подтверждено вживую тремя порталами (НСПД, муниц. геопортал ЕКБ, региональный ГИСОГД66). Остаётся: (C) ручной реестр из правовых актов `pravo.gov66.ru` (PDF, без геометрии) + честная пометка «нет данных» — как и допускает acceptance issue. **Лейбл: `status/ready` снят → `needs-human` возвращён.** Прошу прощения за преждевременный оптимизм в предыдущем комменте — каталог слоёв ≠ наличие данных, проверка вживую это вскрыла.
Owner

📍 ГДЕ это реально лежит — нашёл конкретный 2-ступенчатый путь (Playwright, добор 2)

Продолжил поиск «где найти». Изъятие/резервирование не существует как готовый spatial-слой (подтверждено), НО юридически оно определяется только в утверждённых проектах межевания (ППиМ), а ППиМ в геопортале ЕКБ есть с данными.

Ступень 1 — геопортал ЕКБ dmd_prj_mej (🟢 CONFIRMED, 904 фичи)

WFS portal:portal_geo_dmd_prj_mej = 904 полигона проектов межевания (+ dmd_prj_plan = 290 ППТ). Каждая фича несёт реквизиты документа:

  • doc_full_name = «Изменение в Проект межевания территории № 2529 от 21.10.2019»
  • dmd_ident_title / dmd_abstract = ПАГЕ № … от … (Постановление Администрации г. Екатеринбурга) + суть
  • doc_status = approved/inactive (Действующий/Недействующий) ← фильтр актуальных
  • dmd_actual_year, dmd_data_location (район/описание), геометрия (полигон охвата ППиМ)

ST_Intersects(parcel, dmd_prj_mej WHERE doc_status='approved') даёт: есть ли действующий проект межевания на участке + реквизиты ПАГЕ. Детерминированно, тем же WFS-методом, что КРТ (INTERSECTS(geoloc, POINT(lon lat)), 4326).

Ступень 2 — текст ПАГЕ (🟡 parse / manual)

Конкретный «перечень ЗУ, подлежащих изъятию» — внутри текста постановления ПАГЕ (не в геопортале). Источник документа: pravo.gov66.ru публикует «Об утверждении/изменении проекта межевания территории» как PDF (подтверждено: pravo.gov66.ru/media/pravo/p341_*.pdf). По doc_full_name/ПАГЕ-№ из ступени 1 → находим PDF → парсим перечень изъятия/резервирования.

Итоговая картина «где»

Что Где Доступ
Факт «участок в зоне утв. ППиМ» + ПАГЕ-реквизиты геопортал ЕКБ dmd_prj_mej (WFS) 🟢 авто
Перечень ЗУ под изъятие/резервирование текст ПАГЕ-постановления (pravo.gov66.ru PDF) 🟡 parse PDF
Гранулярные слои (urban_parsel_reserve_ppm и т.п.) геопортал ЕКБ И региональный ГИСОГД объявлены, но 0 фич
Ограничение ст.56.1 в ЕГРН (после регистрации) выписка ЕГРН раздел 2/4.1 🔴 платно/СМЭВ

Пересмотр feasibility

🟡 semi-automatable (было 🔴): MVP = флаг «участок в действующем проекте межевания №ПАГЕ» через геопортал dmd_prj_mej (🟢) + ссылка на ПАГЕ-документ. Точный «изъятие да/нет» = парс PDF ПАГЕ (🟡) или ручная проверка. Лейбл оставляю needs-human (clean boolean требует doc-parse), но теперь с actionable-планом, а не «источника нет». Если команда ОК на MVP-флаг «в зоне ППиМ + ссылка на ПАГЕ» — ступень 1 тянет на status/ready.

## 📍 ГДЕ это реально лежит — нашёл конкретный 2-ступенчатый путь (Playwright, добор 2) Продолжил поиск «где найти». Изъятие/резервирование **не существует как готовый spatial-слой** (подтверждено), НО юридически оно определяется только в **утверждённых проектах межевания (ППиМ)**, а ППиМ в геопортале ЕКБ **есть с данными**. ### Ступень 1 — геопортал ЕКБ `dmd_prj_mej` (🟢 CONFIRMED, 904 фичи) WFS `portal:portal_geo_dmd_prj_mej` = **904** полигона проектов межевания (+ `dmd_prj_plan` = 290 ППТ). Каждая фича несёт **реквизиты документа**: - `doc_full_name` = «Изменение в Проект межевания территории № 2529 от 21.10.2019» - `dmd_ident_title` / `dmd_abstract` = **ПАГЕ № … от … (Постановление Администрации г. Екатеринбурга)** + суть - `doc_status` = approved/inactive (`Действующий`/`Недействующий`) ← фильтр актуальных - `dmd_actual_year`, `dmd_data_location` (район/описание), геометрия (полигон охвата ППиМ) → `ST_Intersects(parcel, dmd_prj_mej WHERE doc_status='approved')` даёт: **есть ли действующий проект межевания на участке + реквизиты ПАГЕ**. Детерминированно, тем же WFS-методом, что КРТ (`INTERSECTS(geoloc, POINT(lon lat))`, 4326). ### Ступень 2 — текст ПАГЕ (🟡 parse / manual) Конкретный «перечень ЗУ, подлежащих изъятию» — внутри **текста постановления ПАГЕ** (не в геопортале). Источник документа: **`pravo.gov66.ru`** публикует «Об утверждении/изменении проекта межевания территории» как PDF (подтверждено: `pravo.gov66.ru/media/pravo/p341_*.pdf`). По `doc_full_name`/ПАГЕ-№ из ступени 1 → находим PDF → парсим перечень изъятия/резервирования. ### Итоговая картина «где» | Что | Где | Доступ | |---|---|---| | Факт «участок в зоне утв. ППиМ» + ПАГЕ-реквизиты | геопортал ЕКБ `dmd_prj_mej` (WFS) | 🟢 авто | | Перечень ЗУ под изъятие/резервирование | текст ПАГЕ-постановления (pravo.gov66.ru PDF) | 🟡 parse PDF | | Гранулярные слои (`urban_parsel_reserve_ppm` и т.п.) | геопортал ЕКБ И региональный ГИСОГД | ❌ объявлены, но 0 фич | | Ограничение ст.56.1 в ЕГРН (после регистрации) | выписка ЕГРН раздел 2/4.1 | 🔴 платно/СМЭВ | ### Пересмотр feasibility **🟡 semi-automatable** (было 🔴): MVP = флаг «участок в действующем проекте межевания №ПАГЕ» через геопортал `dmd_prj_mej` (🟢) + ссылка на ПАГЕ-документ. Точный «изъятие да/нет» = парс PDF ПАГЕ (🟡) или ручная проверка. **Лейбл оставляю `needs-human`** (clean boolean требует doc-parse), но теперь с actionable-планом, а не «источника нет». Если команда ОК на MVP-флаг «в зоне ППиМ + ссылка на ПАГЕ» — ступень 1 тянет на `status/ready`.
Owner

↳ Ступень 2 (парс PDF ПАГЕ-постановлений с pravo.gov66.ru) выделена в отдельный таск #1091 [ИРД][parser] Парсер PDF-постановлений ПАГЕ → перечень ЗУ под изъятие/резервирование.

↳ Ступень 2 (парс PDF ПАГЕ-постановлений с `pravo.gov66.ru`) выделена в отдельный таск **#1091** `[ИРД][parser] Парсер PDF-постановлений ПАГЕ → перечень ЗУ под изъятие/резервирование`.
Owner

Источник подтверждён 🟢pravo.gov66.ru headless-поиск (research 2026-06-07)

Парсер land_reservation готов (#1091) — не хватало enumerate-источника. Найден:

Поиск (GET, server-rendered HTML, httpx достаточно — браузер не нужен):

https://www.pravo.gov66.ru/search/?q=изъятие земельных участков&law_type=Постановление[&signed_start_date=&signed_end_date=]
  • ⚠️ движок q — строгий AND/фраза: 2-3 слова работают (дал «Найдено 27»), 1 или 4+ слов → 0. Гнать короткие фразы + клиентский фильтр по заголовку.
  • Хиты = ссылки /{NNNNN}/; на странице документа PDF: /media/pravo/{NUM}-ПП_{hash}.pdf (подтв. 509-ПП → /35496/).
  • Кад-номера только в PDF → отдавать готовому pdfplumber-парсеру.

Pipeline: GET search (q + law_type + date-range инкремент) → парс /NNNNN/ + заголовки → фильтр «изъят/резерв/Екатеринбург» → GET страницы → /media/pravo/*.pdfextract_from_pdf (готов).

Не использовать: ГИСОГД urban_parsel_reserve_ppm (re-verified live = 0 features, весь ППиМ-вектор не загружен); ЕГРН ст.56.1 (код 22004001000) — только платная выписка. Добор: ПАГЕ екатеринбург.рф (городские изъятия).

→ Снимаю needs-human — источник есть, нужен enumerator-воркер (search→PDF) поверх готового парсера.

## Источник подтверждён 🟢 — `pravo.gov66.ru` headless-поиск (research 2026-06-07) Парсер `land_reservation` готов (#1091) — не хватало enumerate-источника. Найден: **Поиск (GET, server-rendered HTML, httpx достаточно — браузер не нужен):** ``` https://www.pravo.gov66.ru/search/?q=изъятие земельных участков&law_type=Постановление[&signed_start_date=&signed_end_date=] ``` - ⚠️ движок `q` — строгий AND/фраза: 2-3 слова работают (дал «Найдено 27»), 1 или 4+ слов → 0. Гнать короткие фразы + клиентский фильтр по заголовку. - Хиты = ссылки `/{NNNNN}/`; на странице документа PDF: `/media/pravo/{NUM}-ПП_{hash}.pdf` (подтв. 509-ПП → `/35496/`). - Кад-номера только в PDF → отдавать готовому pdfplumber-парсеру. **Pipeline:** GET search (q + law_type + date-range инкремент) → парс `/NNNNN/` + заголовки → фильтр «изъят/резерв/Екатеринбург» → GET страницы → `/media/pravo/*.pdf` → `extract_from_pdf` (готов). **Не использовать:** ГИСОГД `urban_parsel_reserve_ppm` (re-verified live = **0 features**, весь ППиМ-вектор не загружен); ЕГРН ст.56.1 (код 22004001000) — только платная выписка. Добор: ПАГЕ екатеринбург.рф (городские изъятия). → Снимаю needs-human — источник есть, нужен enumerator-воркер (search→PDF) поверх готового парсера.
lekss361 removed the
needs-human
label 2026-06-07 13:39:41 +00:00
Owner

⚠️ Прод-прогон ingest_reservations = {docs:0, parcels:0} — живой search вернул HTTP 200 (446КБ HTML), но enumerator не распарсил. Диагностика с прода:

  1. law_type — числовой код: реальный фильтр-href = /search/?...&law_type=12... (12 = Постановление). Наш enumerator шлёт law_type=Постановление (слово) → не тот фильтр.
  2. Ссылки результатов — /documents/..., а НЕ /{NNNNN}/ (та форма — это страница документа, не строка результата). Regex /(\d+)/ не матчит.

Фикс: (а) law_type=12; (б) парсить result-ссылки /documents/... (снять реальную структуру result-row — нужен ещё один live-проход по HTML/DOM, т.к. с прода видно только частичную разметку grep'ом). Источник рабочий — правка только в pravo_gov66_client (param + selector). Возвращаю на доработку парс-слоя.

⚠️ **Прод-прогон `ingest_reservations` = `{docs:0, parcels:0}`** — живой search вернул HTTP 200 (446КБ HTML), но enumerator не распарсил. Диагностика с прода: 1. **`law_type` — числовой код**: реальный фильтр-href = `/search/?...&law_type=12...` (12 = Постановление). Наш enumerator шлёт `law_type=Постановление` (слово) → не тот фильтр. 2. **Ссылки результатов — `/documents/...`**, а НЕ `/{NNNNN}/` (та форма — это страница документа, не строка результата). Regex `/(\d+)/` не матчит. **Фикс:** (а) `law_type=12`; (б) парсить result-ссылки `/documents/...` (снять реальную структуру result-row — нужен ещё один live-проход по HTML/DOM, т.к. с прода видно только частичную разметку grep'ом). Источник рабочий — правка только в `pravo_gov66_client` (param + selector). Возвращаю на доработку парс-слоя.
Owner

Поправка к диагнозу выше (fixup #1149 снял живую структуру корректно):

  • Ссылки результатов = /NNNNN/ (как в оригинале) — мой grep-вывод про /documents/ был ошибочным (стрэй-ссылка). Regex был верен.
  • Реальный единственный баг: law_type для «Постановление» = "1", не «12» (12 = «Официальная информация юрлиц»). Enumerator слал слово "Постановление" → сервер не матчил → 0.
  • Фикс: _LAW_TYPE_POSTANOVLENIE = "1", дефолт исправлен. 29/29 тестов. После merge+deploy → прод-прогон ingest_reservations (ожидаем записи source='pravo_gov66').
Поправка к диагнозу выше (fixup #1149 снял живую структуру корректно): - Ссылки результатов = `/NNNNN/` (как в оригинале) — мой grep-вывод про `/documents/` был ошибочным (стрэй-ссылка). Regex был верен. - **Реальный единственный баг:** `law_type` для «Постановление» = **`"1"`**, не «12» (12 = «Официальная информация юрлиц»). Enumerator слал слово `"Постановление"` → сервер не матчил → 0. - Фикс: `_LAW_TYPE_POSTANOVLENIE = "1"`, дефолт исправлен. 29/29 тестов. После merge+deploy → прод-прогон `ingest_reservations` (ожидаем записи `source='pravo_gov66'`).
Owner

Прод-прогон + верификация источника: инфраструктура готова, source тонкий 🟡

law_type=1 фикс работает — search находит 17 постановлений «изъятие земельных участков» (Свердл.обл). НО скачал 6/17 PDF и прогнал парсер: 0 кад-номеров ни в одном (raw_cad_in_pdf=0). Это policy/rules-документы (как 509-ПП «Правила межбюджетных трансфертов для изъятия»), а НЕ пообъектные приказы изъятия с перечнем ЗУ.

Вывод (evidence-based): публичный источник pravo.gov66 не содержит пер-парцельных кад-списков изъятия по ЕКБ. Согласуется с разведкой «изъятие ЕКБ мёртвое с 2016» (EKB_Construction_Documents). ГИСОГД-слой пуст (0 features), ЕГРН ст.56.1 платный. → пер-парцельных данных изъятия по ЕКБ публично нет.

Что сделано и КОРРЕКТНО: таблица land_reservation (#1091) + парсер extract_from_pdf + enumerator pravo_gov66_client (#1145, law_type=1) + analyze-wiring (#1118/reservations). Pipeline готов — наполнится автоматически, ЕСЛИ появится постановление с реальным кад-перечнем.

Это удовлетворяет acceptance issue («флаг изъятия по участку, либо честная пометка “нет данных по ЕКБ”»): честная пометка = подтверждённое отсутствие публичных пер-парцельных данных + готовый pipeline.

Минорно (не блокер): search_documents возвращает title="Постановление" (тип-метка вместо заголовка) — косметика парс-слоя, на результат не влияет т.к. PDF всё равно без кад-номеров. Не чиню (нет смысла без данных).

Закрываю research-часть. Если нужны данные изъятия — только ЕГРН-выписки (платно/СМЭВ) или официальный реестр от органа.

## Прод-прогон + верификация источника: инфраструктура готова, source тонкий 🟡 `law_type=1` фикс работает — search находит **17 постановлений** «изъятие земельных участков» (Свердл.обл). НО скачал 6/17 PDF и прогнал парсер: **0 кад-номеров ни в одном** (`raw_cad_in_pdf=0`). Это policy/rules-документы (как 509-ПП «Правила межбюджетных трансфертов для изъятия»), а НЕ пообъектные приказы изъятия с перечнем ЗУ. **Вывод (evidence-based):** публичный источник pravo.gov66 не содержит пер-парцельных кад-списков изъятия по ЕКБ. Согласуется с разведкой «изъятие ЕКБ мёртвое с 2016» (EKB_Construction_Documents). ГИСОГД-слой пуст (0 features), ЕГРН ст.56.1 платный. → пер-парцельных данных изъятия по ЕКБ публично нет. **Что сделано и КОРРЕКТНО:** таблица `land_reservation` (#1091) + парсер `extract_from_pdf` + enumerator `pravo_gov66_client` (#1145, law_type=1) + analyze-wiring (#1118/reservations). Pipeline готов — наполнится автоматически, ЕСЛИ появится постановление с реальным кад-перечнем. **Это удовлетворяет acceptance issue** («флаг изъятия по участку, **либо честная пометка “нет данных по ЕКБ”**»): честная пометка = подтверждённое отсутствие публичных пер-парцельных данных + готовый pipeline. Минорно (не блокер): `search_documents` возвращает `title="Постановление"` (тип-метка вместо заголовка) — косметика парс-слоя, на результат не влияет т.к. PDF всё равно без кад-номеров. Не чиню (нет смысла без данных). Закрываю research-часть. Если нужны данные изъятия — только ЕГРН-выписки (платно/СМЭВ) или официальный реестр от органа.
Owner

⚠️ ВАЖНАЯ ПОПРАВКА — изъятие ЕКБ ЖИВОЕ, искали не на том уровне (playwright-verified 2026-06-07)

Мой предыдущий вывод «изъятие ЕКБ мёртвое / источник тонкий» неверен — я искал на областном уровне (pravo.gov66 = Правительство СО → policy-доки). Реальные пообъектные изъятия ЕКБ идут на городском уровне (ПАГЕ, екатеринбург.рф):

  • Выделенный раздел: екатеринбург.рф/дляработы/гиз/градостроительство/изъятие («Изъятие для муниципальных нужд»).
  • Активные сообщения 2026 (×4 на странице) + 2022: транспортная развязка Базовый/Комсомольская/Сибирский тракт, ул.Энергостроителей, сети Павлодарская–Щербакова–Благодатская, ул.Татищева, дорсеть Иркутская–Шаумяна.
  • ПАГЕ №583 от 12.03.2024 (Татищева, 13 участков) — подтверждает живость.
  • Это тот же канон-домен, что мы уже скрапим (РНС/КРТ) → доступ headless с прод-IP есть.

НО реальный потолок — формат: скачал 2 сообщения (Татищева, Базовый) с прода → pdfplumber pages_txt=0 на 12 страницах = сканы (растр), без текстового слоя. Кад-номера ЕСТЬ (в изображении), но pdfplumber их не видит → нужен OCR (Tesseract rus).

Скорректированный вердикт #1062: 🟡 источник живой и найден, но требует OCR-пайплайна (не просто pdfplumber):

  1. Источник: екатеринбург.рф/.../изъятие /file/<hash> PDF + раздел «Сообщения о планируемом изъятии» (живой реестр).
  2. OCR (Tesseract rus / pdf2image→OCR) → кад-номера + цель + срок → готовый land_reservation upsert.
  3. Сменить enumerator с pravo.gov66 (область) на екатеринбург.рф /гиз/.../изъятие (город).

Прежний enumerator #1145 (pravo.gov66) оставить как добор по областным актам, primary — городской раздел + OCR. Это buildable (OCR-зависимость новая, но есть в экосистеме). Возвращаю в работу как 🟡 (OCR-effort), НЕ «нет данных».

## ⚠️ ВАЖНАЯ ПОПРАВКА — изъятие ЕКБ ЖИВОЕ, искали не на том уровне (playwright-verified 2026-06-07) Мой предыдущий вывод «изъятие ЕКБ мёртвое / источник тонкий» **неверен** — я искал на **областном** уровне (pravo.gov66 = Правительство СО → policy-доки). Реальные пообъектные изъятия ЕКБ идут на **городском** уровне (ПАГЕ, екатеринбург.рф): - **Выделенный раздел:** `екатеринбург.рф/дляработы/гиз/градостроительство/изъятие` («Изъятие для муниципальных нужд»). - **Активные сообщения 2026 (×4 на странице) + 2022:** транспортная развязка Базовый/Комсомольская/Сибирский тракт, ул.Энергостроителей, сети Павлодарская–Щербакова–Благодатская, ул.Татищева, дорсеть Иркутская–Шаумяна. - ПАГЕ №583 от 12.03.2024 (Татищева, 13 участков) — подтверждает живость. - Это **тот же канон-домен**, что мы уже скрапим (РНС/КРТ) → доступ headless с прод-IP есть. **НО реальный потолок — формат:** скачал 2 сообщения (Татищева, Базовый) с прода → `pdfplumber pages_txt=0` на 12 страницах = **сканы (растр), без текстового слоя**. Кад-номера ЕСТЬ (в изображении), но pdfplumber их не видит → нужен **OCR** (Tesseract rus). **Скорректированный вердикт #1062: 🟡 источник живой и найден, но требует OCR-пайплайна** (не просто pdfplumber): 1. Источник: `екатеринбург.рф/.../изъятие` `/file/<hash>` PDF + раздел «Сообщения о планируемом изъятии» (живой реестр). 2. OCR (Tesseract rus / pdf2image→OCR) → кад-номера + цель + срок → готовый `land_reservation` upsert. 3. Сменить enumerator с pravo.gov66 (область) на екатеринбург.рф `/гиз/.../изъятие` (город). Прежний enumerator #1145 (pravo.gov66) оставить как добор по областным актам, primary — городской раздел + OCR. Это buildable (OCR-зависимость новая, но есть в экосистеме). Возвращаю в работу как 🟡 (OCR-effort), НЕ «нет данных».
Sign in to join this conversation.
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#1062
No description provided.