[site-finder] ИСОГД Свердл: реестр РНС как ранний сигнал future-supply (§6) — наследник Потока 2 из #103 #2367

Closed
opened 2026-07-04 02:06:32 +00:00 by bot-backend · 3 comments
Collaborator

Единственный не перекрытый живыми фичами кусок гибрид-плана #103 (закрыт ревизией 2026-07-04). Вынесен в отдельный scoped-issue.

Ценность

РНС (разрешения на строительство) выдаются раньше, чем стройка попадает в ДОМ.РФ-pipeline → это самый ранний сигнал будущего предложения для §6 (future-supply давление) и §4 (пайплайн конкурентов). Сейчас future-supply строится только на domrf_kn (стройки уже в работе) — РНС-слой дал бы 6-12 мес форы.

Что делать (конспект Потока 2 из #103)

  • Scraper backend/app/services/scrapers/isogd_sverdl.py: HTML-список + pdfplumber таблиц с http://minstroy.midural.ru/article/show/id/10070 (реестр выданных РНС: номер, дата, застройщик, кадастр, тип объекта, этажность, площадь, адрес)
  • Таблица isogd_permits (cad_num, floors, total_area_sqm, geom через геокод кадастра, …) — см. schema-набросок в #103
  • Celery beat weekly + freshness-монитор (паттерн #1948)
  • В analyze: recent_permits_500m (какие РНС рядом за 12 мес) + permits_volume_5km (объём района) → §6 future-supply слой + cross-check с domrf-pipeline
  • Acceptance: >100 записей по Свердл; корреляция с domrf_kn_objects на пересечении; §6 показывает РНС-слой с честной пометкой источника

Риски (из #103)

Формат ИСОГД не стандартизирован (parser per-источник), сайт минстроя может меняться → freshness-монитор обязателен. Юр-чистота: публичный реестр.

Refs #103 (закрыт, полная ревизия там), #52/#2254 (B2B-каналы — отдельно).

Единственный не перекрытый живыми фичами кусок гибрид-плана #103 (закрыт ревизией 2026-07-04). Вынесен в отдельный scoped-issue. ## Ценность РНС (разрешения на строительство) выдаются **раньше**, чем стройка попадает в ДОМ.РФ-pipeline → это самый ранний сигнал будущего предложения для §6 (future-supply давление) и §4 (пайплайн конкурентов). Сейчас future-supply строится только на domrf_kn (стройки уже в работе) — РНС-слой дал бы 6-12 мес форы. ## Что делать (конспект Потока 2 из #103) - Scraper `backend/app/services/scrapers/isogd_sverdl.py`: HTML-список + pdfplumber таблиц с http://minstroy.midural.ru/article/show/id/10070 (реестр выданных РНС: номер, дата, застройщик, кадастр, тип объекта, этажность, площадь, адрес) - Таблица `isogd_permits` (cad_num, floors, total_area_sqm, geom через геокод кадастра, …) — см. schema-набросок в #103 - Celery beat weekly + freshness-монитор (паттерн #1948) - В analyze: `recent_permits_500m` (какие РНС рядом за 12 мес) + `permits_volume_5km` (объём района) → §6 future-supply слой + cross-check с domrf-pipeline - Acceptance: >100 записей по Свердл; корреляция с domrf_kn_objects на пересечении; §6 показывает РНС-слой с честной пометкой источника ## Риски (из #103) Формат ИСОГД не стандартизирован (parser per-источник), сайт минстроя может меняться → freshness-монитор обязателен. Юр-чистота: публичный реестр. Refs #103 (закрыт, полная ревизия там), #52/#2254 (B2B-каналы — отдельно).
Author
Collaborator

Разведка 2026-07-04 — источник найден, лучше ожидаемого

Старый minstroy-путь мёртв (WAF egov66 403 даже браузером, IP датацентра забанен). Но портал ГИСОГД СО gisogd66.midural.ru отдаёт открытый JSON-API — без ЕСИА, без токенов, bare-curl 200. Это снимает и вопрос «нужно ли решение по доступу к ГИСОГД» — не нужно, всё публично.

API (все GET, JSON)

  • /api/agateprojects — 74 схемы (регион-агрегат agate_sverdregion + 73 МО, ЕКБ = agate_ekbgo)
  • /api/v1/{schema}/gisogddocgroupdocs/razdel13/DocRS — весь список РНС одним ответом (без пагинации)
  • /api/v1/{schema}/gisogddocs/razdel13/{key} — карточка: spatialUnit = кадастровый № (иногда несколько через запятую), infosetGeoJson = полигон WGS84, approvedOrganization, docNum/dateDoc/dateReg
  • Аналогично DocRV (ввод в эксплуатацию) и DocIZ (изменения)

Объёмы и свежесть

Регион: РНС 4191 (пик 2025=938, 2026=505), ввод 4019. ЕКБ отдельно: 1923/1423. Последняя регистрация ЕКБ — 2026-07-02 (обновляется почти ежедневно). ⚠️ Регион-агрегат отстаёт от муниципальных схем на ~неделю.

Ограничения

Этажности/площади/застройщика в API нет — только кадастр+геометрия+даты+орган. Для §6-сигнала (где и когда выдано РНС) этого достаточно; обогащение площадью — потом через ЕГРН по кадастру. РНС частично пересекается с ЕИСЖС (domrf-pipeline) — маржинальная ценность именно в самых ранних разрешениях до проектных деклараций + непересекающиеся типы объектов.

План реализации (стартовал)

PR-1: миграция gisogd_permits (RS+RV, unique business key (doc_group, doc_num), geom 4326) + лоадер gisogd66.py (список→инкрементальные карточки, politeness) + admin-триггер + тесты → deploy → прод-прогон → verify. PR-2: analyze-поля recent_permits_500m/район + §6-рендер + полный отчёт.

Артефакты разведки (JSON-примеры, скриншоты) — в сессии.

## Разведка 2026-07-04 — источник найден, лучше ожидаемого Старый minstroy-путь мёртв (WAF egov66 403 даже браузером, IP датацентра забанен). Но **портал ГИСОГД СО `gisogd66.midural.ru` отдаёт открытый JSON-API — без ЕСИА, без токенов, bare-curl 200**. Это снимает и вопрос «нужно ли решение по доступу к ГИСОГД» — не нужно, всё публично. ### API (все GET, JSON) - `/api/agateprojects` — 74 схемы (регион-агрегат `agate_sverdregion` + 73 МО, ЕКБ = `agate_ekbgo`) - `/api/v1/{schema}/gisogddocgroupdocs/razdel13/DocRS` — весь список РНС одним ответом (без пагинации) - `/api/v1/{schema}/gisogddocs/razdel13/{key}` — карточка: **`spatialUnit` = кадастровый №** (иногда несколько через запятую), **`infosetGeoJson` = полигон WGS84**, `approvedOrganization`, `docNum`/`dateDoc`/`dateReg` - Аналогично `DocRV` (ввод в эксплуатацию) и `DocIZ` (изменения) ### Объёмы и свежесть Регион: РНС 4191 (пик 2025=938, 2026=505), ввод 4019. ЕКБ отдельно: 1923/1423. Последняя регистрация ЕКБ — 2026-07-02 (обновляется почти ежедневно). ⚠️ Регион-агрегат отстаёт от муниципальных схем на ~неделю. ### Ограничения Этажности/площади/застройщика в API нет — только кадастр+геометрия+даты+орган. Для §6-сигнала (где и когда выдано РНС) этого достаточно; обогащение площадью — потом через ЕГРН по кадастру. РНС частично пересекается с ЕИСЖС (domrf-pipeline) — маржинальная ценность именно в самых ранних разрешениях до проектных деклараций + непересекающиеся типы объектов. ### План реализации (стартовал) PR-1: миграция `gisogd_permits` (RS+RV, unique business key (doc_group, doc_num), geom 4326) + лоадер `gisogd66.py` (список→инкрементальные карточки, politeness) + admin-триггер + тесты → deploy → прод-прогон → verify. PR-2: analyze-поля `recent_permits_500m`/район + §6-рендер + полный отчёт. Артефакты разведки (JSON-примеры, скриншоты) — в сессии.
lekss361 added the
data
enhancement
scope/backend
scrapers
site-finder
labels 2026-07-04 10:23:47 +00:00
Author
Collaborator

PR-2 закрыт, эпик выполнен полностью — прод-скриншот приложен

Данные ГИСОГД теперь видны на экране. Backend (#2401): permits_nearby — точный ST_DWithin(500м) на gisogd_permits, честные счётчики по полной выборке (не капнутой), закрывает 5-летний TODO в parcels.py. Frontend (#2403): PermitsNearbyBlock в §6 страницы анализа, рендерится независимо от статуса §22-прогноза (данные быстрые, форсайт может считаться до 180с — поймано и исправлено на ревью до мержа).

Прод-верификация на участке 66:45:0200124:343: 1 РНС + 7 РВЭ в радиусе, честно отсортировано по расстоянию (0→447м), 0 консоль-ошибок, items_truncated=false.

Итог эпика #2367: от разведки (найден открытый JSON-API ГИСОГД-66 без ЕСИА) → миграция+лоадер (9065 строк на проде, 2 хотфикса по итогам холодных прогонов: битый сегмент портала + честность счётчиков) → видимый UI. Полный цикл: разведка → данные → экран.

Закрываю.

## PR-2 закрыт, эпик выполнен полностью — прод-скриншот приложен Данные ГИСОГД теперь видны на экране. Backend (#2401): `permits_nearby` — точный ST_DWithin(500м) на `gisogd_permits`, честные счётчики по полной выборке (не капнутой), закрывает 5-летний TODO в `parcels.py`. Frontend (#2403): `PermitsNearbyBlock` в §6 страницы анализа, рендерится независимо от статуса §22-прогноза (данные быстрые, форсайт может считаться до 180с — поймано и исправлено на ревью до мержа). Прод-верификация на участке `66:45:0200124:343`: 1 РНС + 7 РВЭ в радиусе, честно отсортировано по расстоянию (0→447м), 0 консоль-ошибок, `items_truncated=false`. **Итог эпика #2367**: от разведки (найден открытый JSON-API ГИСОГД-66 без ЕСИА) → миграция+лоадер (9065 строк на проде, 2 хотфикса по итогам холодных прогонов: битый сегмент портала + честность счётчиков) → видимый UI. Полный цикл: разведка → данные → экран. Закрываю.
Author
Collaborator

Хвост найден и закрыт: DOCX не показывал раздел разрешений

При регресс-прогоне полного отчёта после мержа PR-2 обнаружил, что PDF получил блок «Разрешения на строительство рядом (500 м)», а DOCX — нет (сознательное сужение границ #2401). Портировал 1-в-1 через существующие DOCX-хелперы — PR #2421, смержен, задеплоен.

Прод-verified на 66:45:0200124:343 (форс-пересборка через удаление кэша, свежий report_generated_at): раздел присутствует в обоих форматах с идентичными данными (1 РНС + 7 РВЭ, ближайшее 0 м). Оба экспорта теперь полностью равноценны — эпик закрыт целиком, без известных хвостов.

## Хвост найден и закрыт: DOCX не показывал раздел разрешений При регресс-прогоне полного отчёта после мержа PR-2 обнаружил, что PDF получил блок «Разрешения на строительство рядом (500 м)», а DOCX — нет (сознательное сужение границ #2401). Портировал 1-в-1 через существующие DOCX-хелперы — [PR #2421](https://git.gendsgn.ru/lekss361/gendesign/pulls/2421), смержен, задеплоен. Прод-verified на 66:45:0200124:343 (форс-пересборка через удаление кэша, свежий `report_generated_at`): раздел присутствует в обоих форматах с идентичными данными (1 РНС + 7 РВЭ, ближайшее 0 м). Оба экспорта теперь полностью равноценны — эпик закрыт целиком, без известных хвостов.
Sign in to join this conversation.
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#2367
No description provided.