Расписание импорта сделок Росреестра по Московской области #3504

Merged
lekss361 merged 1 commit from feat/rosreestr-dkp-import-50 into main 2026-09-12 14:18:58 +00:00
Owner

Одна seed-миграция: строка расписания rosreestr_dkp_import_50, выключенная — ровно как seed 77 в миграции 289.

Почему одной строкой

Код импорта уже параметризован регионом: scheduler.py::_job_rosreestr_dkp читает region_code из default_params и валидирует его по app.services.regions.REGIONS. Регион 50 туда заведён в #3501 и проверен на проде после деплоя:

codes: [50, 66, 77]
50 name: Московская область
Serpukhov 54.92/37.41 -> 50
Moscow 55.75/37.62 -> 77
by_city Химки -> 50

Имя rosreestr_dkp_import_50 резолвится существующим wildcard-хендлером rosreestr_dkp_import_* (resolve_handler: exact-match промах → префикс). Курсор возобновления у него свой, потому что scrape_runs.source отличается от регионов 66 и 77 — _resume_dkp_cursor их не путает.

Что получит область

У региона 50 canonical_city IS NULL, то есть импорт идёт по ветке региона 66: deals.city берётся из источника (муниципалитет — Балашиха, Химки, Подольск), raw_payload не заполняется, строки с пустым city отбрасываются. Для области это верное поведение: единого города у неё нет, подставлять нечего.

Замер по FDW на проде (2026-09-12) под полным WHERE импорта:

сделок ДКП региона 50 с 2024-01-01 113 351
для сравнения, регион 77 за прошлый прогон 212 937 строк за 3 мин

Окно 4-6 UTC совпадает с окнами 66 и 77; прогоны сериализуются планировщиком, третий регион в окно помещается с запасом.

Идемпотентность

ON CONFLICT (source) DO NOTHING — повторный прогон no-op и, что важнее, не сбрасывает enabled обратно в false после ручного включения.

Включение и первый прогон — отдельный шаг после деплоя, как было с Москвой.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NQb6WeJtagZwZnUsSjDizs

Одна seed-миграция: строка расписания `rosreestr_dkp_import_50`, выключенная — ровно как seed 77 в миграции 289. ## Почему одной строкой Код импорта уже параметризован регионом: `scheduler.py::_job_rosreestr_dkp` читает `region_code` из `default_params` и валидирует его по `app.services.regions.REGIONS`. Регион 50 туда заведён в #3501 и проверен на проде после деплоя: ``` codes: [50, 66, 77] 50 name: Московская область Serpukhov 54.92/37.41 -> 50 Moscow 55.75/37.62 -> 77 by_city Химки -> 50 ``` Имя `rosreestr_dkp_import_50` резолвится существующим wildcard-хендлером `rosreestr_dkp_import_*` (`resolve_handler`: exact-match промах → префикс). Курсор возобновления у него свой, потому что `scrape_runs.source` отличается от регионов 66 и 77 — `_resume_dkp_cursor` их не путает. ## Что получит область У региона 50 `canonical_city IS NULL`, то есть импорт идёт по ветке региона 66: `deals.city` берётся из источника (муниципалитет — Балашиха, Химки, Подольск), `raw_payload` не заполняется, строки с пустым city отбрасываются. Для области это верное поведение: единого города у неё нет, подставлять нечего. Замер по FDW на проде (2026-09-12) под полным WHERE импорта: | | | |---|---| | сделок ДКП региона 50 с 2024-01-01 | 113 351 | | для сравнения, регион 77 за прошлый прогон | 212 937 строк за 3 мин | Окно 4-6 UTC совпадает с окнами 66 и 77; прогоны сериализуются планировщиком, третий регион в окно помещается с запасом. ## Идемпотентность `ON CONFLICT (source) DO NOTHING` — повторный прогон no-op и, что важнее, не сбрасывает `enabled` обратно в false после ручного включения. Включение и первый прогон — отдельный шаг после деплоя, как было с Москвой. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01NQb6WeJtagZwZnUsSjDizs
lekss361 added 1 commit 2026-09-12 14:13:10 +00:00
Расписание импорта сделок Росреестра по Московской области
All checks were successful
CI / changes (pull_request) Successful in 11s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m52s
ee397b603b
Регион 50 заведён в реестре (#3501) и уже на проде, а код импорта параметризован
кодом региона с валидацией по реестру, поэтому область включается одной seed-строкой
расписания — новой логики не требуется. Имя `rosreestr_dkp_import_50` резолвится
существующим wildcard-хендлером `rosreestr_dkp_import_*`, курсор возобновления у него
свой (собственный scrape_runs.source), с регионами 66 и 77 не пересекается.

У региона 50 canonical_city IS NULL, то есть импорт идёт по ветке региона 66: city
берётся из источника (муниципалитет — Балашиха, Химки, Подольск), raw_payload не
заполняется, строки с пустым city отбрасываются. Для области это и есть верное
поведение — единого города у неё нет.

Замер по FDW на проде: под полным WHERE импорта регион 50 даёт 113 351 сделку ДКП
с 2024-01-01. Строка выключена, как и seed 77 в миграции 289: включение и первый
прогон — отдельный шаг после деплоя.
lekss361 merged commit c265e1f769 into main 2026-09-12 14:18:58 +00:00
lekss361 deleted branch feat/rosreestr-dkp-import-50 2026-09-12 14:18:58 +00:00
Sign in to join this conversation.
No reviewers
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#3504
No description provided.