Tier H в `_fetch_analogs` («тот же класс дома»: год ±15 + этажность ±30%)
существует давно, но его докстринг честно предупреждал: «пропускается если
year_built или total_floors неизвестны». Он и пропускался — потому что кормили
его так:
- `total_floors` брался ИСКЛЮЧИТЕЛЬНО из `payload`, фолбэка не было вообще;
- фолбэк года шёл в Overpass/OSM (`get_house_metadata`), а в кэше
`house_metadata` лежит 68 строк на всю базу.
При этом `target_house_id` резолвится строкой выше — дом известен, просто его
характеристики никто не читал. После наполнения справочника из ГИС ЖКХ и DOM.РФ
в `houses` год есть у 86.8% домов, этажность — у 98.3%.
Теперь приоритет: payload → houses → OSM. Пользователь по-прежнему главнее
справочника; Overpass дёргается только если после первых двух что-то осталось
неизвестным, то есть в подавляющем большинстве случаев внешний вызов с
таймаутом больше не тратится. Год из справочника проходит тот же
`_sanitize_build_year`, что и раньше.
Замер на 1123 прошлых оценках: 450 шли без года (для 301 справочник его знает),
240 без этажности (знаем для 108). Цена смешения классов домов в пуле аналогов —
на 466 оценках с восстановимым пулом медианный сдвиг медианы 2.28%, p90 = 16.3%,
у 18% оценок больше 10%. Систематического смещения нет: смешение даёт шум.