Импорт msk_raw умеет областной ДомКлик, а не падает на нём #3512

Merged
lekss361 merged 2 commits from feat/msk-raw-import-domclick-50 into main 2026-09-12 17:00:31 +00:00
Owner

Парная к #3510: коллектор научился собирать область, теперь импорт умеет её принять.

Что было и почему меняется

Запрет --source domclick --region 50SystemExit был верен ровно до тех пор, пока областного корпуса не существовало. Сбор с областным GUID запущен, поэтому запрет снят и заменён настоящим фильтром.

Признак региона

Первый компонент адреса. Замер живьём на API ДомКлика 12.09.2026:

корпус пример адреса первый компонент покрытие
Москва Москва, Генерала Дорохова проспект, 49 Москва 22 836 из 22 836 строк прод-корпуса
область Московская область, Химки, 7-й м-н, проспект Мельникова, 33 Московская область 140 из 140 карточек выборки с семи разных смещений

Разделение полное и симметричное тому, что уже сделано для Яндекса. Новая Москва приходит как Москва, пос. Птичное, … — посёлок стоит вторым компонентом, первый остаётся Москва, регион 77 не ломается.

Почему фильтр обязателен, а не желателен

Обе партии лежат в одной таблице msk_raw.domclick_cards. Колонки региона там нет, ключ уникальности — (source_id, batch_id, kind), а вью msk_raw.domclick_latest берёт DISTINCT ON (source_id) и отдаёт обе партии вперемешку. Курсор импорта идёт по id вью и не знает, из какого прогона строка.

Поэтому в тестах появился случай со смешанной страницей сырья: из двух карточек при region=50 отбирается ровно одна, вторая уходит в счётчик не целевого региона, и check() сходится.

Тесты

Прежний test_domclick_region_50_refuses_to_run ожидал SystemExit и заменён поведенческими: область отбирается при 50 и не отбирается при 77, Москва наоборот, писатель получает region_code=50 и city=None, смешанная страница разводится по адресу.

56 passed in 1.28s
ruff check: All checks passed!

Московский путь не тронут, его тесты оставлены как есть.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NQb6WeJtagZwZnUsSjDizs

Парная к #3510: коллектор научился собирать область, теперь импорт умеет её принять. ## Что было и почему меняется Запрет `--source domclick --region 50` → `SystemExit` был верен ровно до тех пор, пока областного корпуса не существовало. Сбор с областным GUID запущен, поэтому запрет снят и заменён настоящим фильтром. ## Признак региона Первый компонент адреса. Замер живьём на API ДомКлика 12.09.2026: | корпус | пример адреса | первый компонент | покрытие | |---|---|---|---| | Москва | `Москва, Генерала Дорохова проспект, 49` | `Москва` | 22 836 из 22 836 строк прод-корпуса | | область | `Московская область, Химки, 7-й м-н, проспект Мельникова, 33` | `Московская область` | 140 из 140 карточек выборки с семи разных смещений | Разделение полное и симметричное тому, что уже сделано для Яндекса. Новая Москва приходит как `Москва, пос. Птичное, …` — посёлок стоит вторым компонентом, первый остаётся `Москва`, регион 77 не ломается. ## Почему фильтр обязателен, а не желателен Обе партии лежат в одной таблице `msk_raw.domclick_cards`. Колонки региона там нет, ключ уникальности — `(source_id, batch_id, kind)`, а вью `msk_raw.domclick_latest` берёт `DISTINCT ON (source_id)` и отдаёт обе партии вперемешку. Курсор импорта идёт по `id` вью и не знает, из какого прогона строка. Поэтому в тестах появился случай со смешанной страницей сырья: из двух карточек при `region=50` отбирается ровно одна, вторая уходит в счётчик не целевого региона, и `check()` сходится. ## Тесты Прежний `test_domclick_region_50_refuses_to_run` ожидал `SystemExit` и заменён поведенческими: область отбирается при 50 и не отбирается при 77, Москва наоборот, писатель получает `region_code=50` и `city=None`, смешанная страница разводится по адресу. ``` 56 passed in 1.28s ruff check: All checks passed! ``` Московский путь не тронут, его тесты оставлены как есть. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01NQb6WeJtagZwZnUsSjDizs
lekss361 added 1 commit 2026-09-12 16:38:59 +00:00
Импорт msk_raw умеет областной ДомКлик, а не падает на нём
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 12s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m32s
a7470f0c3d
Запрет на --source domclick --region 50 был верен ровно до тех пор, пока областного
корпуса не существовало. Теперь он собран отдельным прогоном с областным GUID, поэтому
запрет снят и заменён настоящим фильтром.

Регион читается первым компонентом адреса. Замер живьём на API ДомКлика 12.09.2026:
у московских карточек первый компонент «Москва» — так у всех 22 836 строк прод-корпуса;
у областных «Московская область» — так у всех 140 карточек выборки с семи разных
смещений выдачи. Разделение полное и симметричное тому, что уже сделано для Яндекса.

Фильтр здесь не вторая линия обороны, а единственный способ развести регионы: обе
партии лежат в одной таблице msk_raw.domclick_cards, колонки региона в ней нет, а вью
domclick_latest отдаёт их вперемешку. Поэтому в тестах появился случай со смешанной
страницей сырья: из двух карточек при region=50 отбирается ровно одна, вторая уходит в
счётчик не целевого региона.

Прежний тест ожидал SystemExit и заменён поведенческими. Московский путь не тронут.
bot-backend added 1 commit 2026-09-12 16:54:44 +00:00
Областной ДомКлик отбирается ещё и по координате, не только по префиксу
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m31s
CI / changes (pull_request) Successful in 10s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
02a1ec08f3
Замер на собранном корпусе: у 2 960 из 2 961 карточки областного батча первый
компонент адреса — «Московская область», а у одной «Можайский муниципальный
округ, д. Семёновское, 1» (55.5116/35.8293). Это настоящая область, строгий
префикс выбросил бы её молча.

Фильтр стал payload-уровневым: префикс → да; «Москва» первым компонентом → нет
(раньше гео-ветки, иначе вложенный в областной bbox Москвы протащил бы столицу);
иначе координата внутри bbox_region региона 50 из реестра. Московский батч тем
же замером даёт «Москва» у всех 22 836 карточек — вторая опора его не трогает.
lekss361 merged commit 5ee208087d into main 2026-09-12 17:00:31 +00:00
lekss361 deleted branch feat/msk-raw-import-domclick-50 2026-09-12 17:00:31 +00:00
Sign in to join this conversation.
No reviewers
No milestone
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#3512
No description provided.