okn_objects: недозагрузка реестра (428 vs ~798 ЕГРОКН) + raw_props={id} без названия/адреса #1159

Closed
opened 2026-06-07 18:36:37 +00:00 by lekss361 · 0 comments
Owner

Контекст

Максимальный бэктест ИРД-слоя (2026-06-07) с внешней сверкой по интернет-источникам. ОКН — единственный слой с DIVERGENT-вердиктом (остальные 9 пунктов CONFIRMED против НСПД/федеральных приказов/реестров). Две независимые проблемы из одного скрапера okn_objects_sync / okn_egrkn_client (endpoint okn-mk.mkrf.ru/Maps/searchMap).

Дефект 1 — недозагрузка (coverage gap)

Наша БД: 428 всего (federal=99, regional=322, local=7). В bbox ЕКБ-core (56.70–56.95N, 60.45–60.75E) — только 263; остальные 165 — областной spillover из проходов «Свердловская».

Авторитетный реестр (ЕГРОКН / Минкультуры, академ.источник УрФУ, Wikipedia, oknekb2020.ru — данные 2021–2022) для Екатеринбурга:

Категория ЕГРОКН Наша БД Δ
Федеральные ~93 99 +6
Региональные ~694 322 −372
Местные ~11 7 −4
Всего ЕКБ ~798–801 428 (263 в ЕКБ-core) ≈−370

Перекос почти весь в региональной категории (−54%). Федералы сходятся (даже +6 — возможны дубли/мисклассификация). Источники:

Гипотеза корня: searchMap — это backend карты (map-markers), который, вероятно, кэпит/кластеризует выдачу или фильтр по подстроке cob_address='Екатеринбург' не матчит объекты с адресом без слова «Екатеринбург» (улица-only, district-форма). Нужно проверить пагинацию/лимит ответа searchMap и/или перейти на opendata.mkrf.ru ЕГРОКН-выгрузку с фильтром по г. Екатеринбург.

Дефект 2 — метаданные потеряны (raw_props = {id})

SELECT jsonb_object_keys(raw_props), count(*) FROM okn_objects GROUP BY 1;
-- единственный ключ: "id" × 428

okn_objects_sync пишет feature.get("properties"), но searchMap в properties маркера отдаёт только {id} — название/адрес/датировка/категория охраны приходят отдельным detail-endpoint'ом, который не вызывается. Итог: в analyze ird.okn_objects = {source_id, category, distance_m} без названия памятника → в «волшебной таблице» юзер видит «ОКН рядом», но не КАКОЙ объект. Для ИРД-карточки это критично.

Фикс: догрузить per-object detail (название/адрес/документ/категория) — либо detail-endpoint okn-mk, либо join с ЕГРОКН-выгрузкой opendata по source_id → в raw_props. Обновить okn_lookup.parcel_okn_objects чтобы отдавать name/address в analyze.

Acceptance

  1. ЕКБ-покрытие приближено к ЕГРОКН (~700+ региональных; цель total ЕКБ-core ≈ реестр на 2026).
  2. raw_props содержит ≥ name + address (не только id); analyze ird.okn_objects[].name непуст.
  3. Federal 99 перепроверены на дубли/мисклассификацию (ожидается ~93).
  4. Тест скрапера на пагинацию/полноту (мок multi-page → все страницы собраны).

Файлы: backend/app/workers/tasks/okn_objects_sync.py, backend/app/services/scrapers/okn_egrkn_client.py, backend/app/services/site_finder/okn_lookup.py. Refs #1066 #1067.

scope/backend · site-finder · ИРД

## Контекст Максимальный бэктест ИРД-слоя (2026-06-07) с внешней сверкой по интернет-источникам. ОКН — **единственный слой с DIVERGENT-вердиктом** (остальные 9 пунктов CONFIRMED против НСПД/федеральных приказов/реестров). Две независимые проблемы из одного скрапера `okn_objects_sync` / `okn_egrkn_client` (endpoint `okn-mk.mkrf.ru/Maps/searchMap`). ## Дефект 1 — недозагрузка (coverage gap) Наша БД: **428** всего (federal=99, regional=322, local=7). В bbox ЕКБ-core (56.70–56.95N, 60.45–60.75E) — только **263**; остальные 165 — областной spillover из проходов «Свердловская». Авторитетный реестр (ЕГРОКН / Минкультуры, академ.источник УрФУ, Wikipedia, oknekb2020.ru — данные 2021–2022) для **Екатеринбурга**: | Категория | ЕГРОКН | Наша БД | Δ | |---|---|---|---| | Федеральные | ~93 | 99 | +6 | | Региональные | **~694** | 322 | **−372** | | Местные | ~11 | 7 | −4 | | **Всего ЕКБ** | **~798–801** | 428 (263 в ЕКБ-core) | **≈−370** | Перекос почти весь в **региональной** категории (−54%). Федералы сходятся (даже +6 — возможны дубли/мисклассификация). Источники: - https://elar.urfu.ru/bitstream/10995/117201/1/dais_2022_22_026.pdf («93 федеральных, 694 региональных, 11 муниципальных… 798 в мае 2022») - https://ru.wikipedia.org/wiki/Памятники_истории_и_культуры_Екатеринбурга («801 на конец 2021») - https://opendata.mkrf.ru/opendata/7705851331-egrkn/ (первоисточник ЕГРОКН, доступен для выгрузки) **Гипотеза корня:** `searchMap` — это backend карты (map-markers), который, вероятно, кэпит/кластеризует выдачу или фильтр по подстроке `cob_address`='Екатеринбург' не матчит объекты с адресом без слова «Екатеринбург» (улица-only, district-форма). Нужно проверить пагинацию/лимит ответа searchMap и/или перейти на `opendata.mkrf.ru` ЕГРОКН-выгрузку с фильтром по г. Екатеринбург. ## Дефект 2 — метаданные потеряны (raw_props = {id}) ```sql SELECT jsonb_object_keys(raw_props), count(*) FROM okn_objects GROUP BY 1; -- единственный ключ: "id" × 428 ``` `okn_objects_sync` пишет `feature.get("properties")`, но `searchMap` в properties маркера отдаёт **только {id}** — название/адрес/датировка/категория охраны приходят отдельным detail-endpoint'ом, который не вызывается. Итог: в analyze `ird.okn_objects` = `{source_id, category, distance_m}` **без названия памятника** → в «волшебной таблице» юзер видит «ОКН рядом», но не КАКОЙ объект. Для ИРД-карточки это критично. **Фикс:** догрузить per-object detail (название/адрес/документ/категория) — либо detail-endpoint okn-mk, либо join с ЕГРОКН-выгрузкой opendata по source_id → в raw_props. Обновить `okn_lookup.parcel_okn_objects` чтобы отдавать `name`/`address` в analyze. ## Acceptance 1. ЕКБ-покрытие приближено к ЕГРОКН (~700+ региональных; цель total ЕКБ-core ≈ реестр на 2026). 2. `raw_props` содержит ≥ name + address (не только id); analyze `ird.okn_objects[].name` непуст. 3. Federal 99 перепроверены на дубли/мисклассификацию (ожидается ~93). 4. Тест скрапера на пагинацию/полноту (мок multi-page → все страницы собраны). Файлы: `backend/app/workers/tasks/okn_objects_sync.py`, `backend/app/services/scrapers/okn_egrkn_client.py`, `backend/app/services/site_finder/okn_lookup.py`. Refs #1066 #1067. scope/backend · site-finder · ИРД
lekss361 added the
priority/p2
scope/backend
site-finder
ИРД
labels 2026-06-07 18:36:41 +00:00
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#1159
No description provided.