fix(tradein/houses): camelCase-типы домов приводятся к канону у источника (#2678) #2719

Merged
bot-backend merged 1 commit from fix/2678-house-type-canon into main 2026-08-06 09:55:55 +00:00

1 commit

Author SHA1 Message Date
ebffadcfa7 fix(tradein/houses): camelCase-типы домов приводятся к канону у источника (#2678)
All checks were successful
CI / changes (pull_request) Successful in 10s
CI Trade-In / changes (pull_request) Successful in 10s
CI / openapi-codegen-check (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 Trade-In / backend-tests (pull_request) Successful in 3m9s
Хвост #2675. Миграция 141 нормализовала тип дома только в объявлениях; в самой
таблице домов camelCase-вокабуляр Циана остался, и каждый читатель чинил его у
себя. #2675 починил домовую оценку — остальные потребители продолжали сравнивать
'monolithBrick' с 'monolith_brick' и не совпадать.

Замер прода 2026-08-06 (GROUP BY source, house_type): monolithBrick 56 (48 derived
+ 8 cian_newbuilding) · other 18 · stalin 3 · aerocreteBlock 1 · gasSilicateBlock 1
· wireframe 1 · канон 984 · NULL 8440.

1. Миграция 224 — twin 141 для houses: monolithBrick→monolith_brick,
   gasSilicateBlock/aerocreteBlock/foamConcreteBlock→block, stalin→brick.
   Ожидаемо тронуто 61 строка (счётчики сняты на проде ДО применения).
   Маппинг тождественен house_type_normalizer._RAW_TO_CANON — третьего словаря нет,
   тест сторожит совпадение.

   Перед склейкой проверено, что значения означают одно и то же: для каждого дома
   взяты типы его же объявлений (уже нормализованных 141). У всех 56 monolithBrick
   среди объявлений есть monolith_brick; stalin → brick; aerocreteBlock и
   gasSilicateBlock → block. А вот 'other' (18) разбросан по monolith/brick/block —
   это «неизвестно», а не материал, поэтому он и 'wireframe' НЕ трогаются.

2. Нормализация у источника. Живого писателя camelCase в houses нет: у всех 80
   неканоничных строк одна и та же метка last_scraped_at 2026-05-24 14:04:20 —
   единственный прогон backfill'а 063. Единственный живой писатель
   houses.house_type — avito-каталог домов, и он был вторым источником неканона:
   незнакомую подпись превращал в 'other'. Теперь ходит через общий
   normalize_house_type, неизвестное → NULL (нейтрально для soft-penalty
   эстиматора, в отличие от гарантированно несовпадающего 'other').

3. #2678 п.6: в карту нормализатора добавлен канонический токен monolith_brick —
   единственный, у которого не было регистронезависимой страховки.

Refs #2678
2026-08-06 14:43:05 +05:00