feat(tradein/domklik): ЖК в свою колонку вместо только raw_payload #3076

Merged
lekss361 merged 1 commit from feat/domklik-newbuilding-slug into main 2026-08-24 16:04:25 +00:00

1 commit

Author SHA1 Message Date
bot-backend
c137af88f5 feat(tradein/domklik): ЖК в свою колонку вместо только raw_payload
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 10s
CI Trade-In / browser-tests (pull_request) Has been skipped
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
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m39s
Безрисковая половина пункта 3 из #3064. flatComplex.slug доезжает до
ScrapedLot.newbuilding_id — колонки, которая для идентификатора ЖК и
предназначена (докстринг задаёт формат «federatsiya-ekaterinburg», и
avito, единственный заполняющий её источник, кладёт туда слаг).
Поэтому slug, а НЕ id.

ЧЕГО ЗДЕСЬ НЕТ И ПОЧЕМУ. Привязка к дому (house_source/house_ext_id)
намеренно не трогается. Замер на проде: все 1351 активных
domklik-листингов — ВТОРИЧКА, новостроек ноль, а flatComplex.id даёт 116
значений на 737 листингов (~6.4 на ключ). Использовать его как
house_ext_id значило бы схлопнуть разные здания одного ЖК в один «дом» —
и заставить якорь того же дома в оценщике сравнивать квартиры из разных
корпусов. Это порча ценового механизма, а не улучшение дедупа.

Правильный ключ здания существует — domclick_building_guid, 467 значений
на 619 листингов, по одному адресу на ключ. Но он приходит detail-путём
(providers/domclick/detail.py), где match_or_create_house не вызывается,
а сам матчинг живёт в save_listings на SERP-пути. Это архитектурная
развилка с тремя вариантами, вынесена в issue — решение за владельцем,
потому что затрагивает цену.

Миграция не нужна: колонка newbuilding_id существует давно.

Риск нулевой: поле бэкендом НЕ ЧИТАЕТСЯ нигде (проверено grep'ом по
всему tradein-mvp — только запись, COALESCE-защита в upsert и тесты),
на проде заполнено лишь у avito (1564 из 10287), у cian/yandex/domklik
ноль.

Проверено:
  - фальсификация: до правки тест падает «assert None == malysheva»
  - тест стережёт и границу: house_source/house_ext_id остаются None
  - отсутствующий flatComplex даёт None, а не пустую строку (пустая
    читалась бы как «ЖК есть, но безымянный»)
  - регрессия -k domclick: 115 passed, 1 skipped
  - ruff чист

Refs #3064
2026-08-24 18:57:10 +03:00