feat(mera/estimate): ручка фактов дома для предзаполнения формы + гейт «этаж не выше дома» #3257

Merged
lekss361 merged 1 commit from feat/3257-house-facts-prefill into main 2026-08-29 20:34:01 +00:00

1 commit

Author SHA1 Message Date
bot-backend
2b2e742d92 feat(mera/estimate): ручка фактов дома для предзаполнения формы + гейт «этаж не выше дома»
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
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 4m54s
Две правки под предзаполнение формы оценки из справочника houses (наполнен из
ГИС ЖКХ + DOM.РФ: total_floors 98.3%, year_built 86.8%).

1. GET /api/v1/geocode/house-facts?lat=&lon=[&fias_id=] отдаёт
   {found, total_floors, year_built, house_type, source}. Переиспользует
   _lookup_house_facts из estimator (#3234) — тот же поиск, что и при расчёте:
   по target_house_id если ФИАС разрезолвился, иначе ближайший дом в 60 м.
   Дома нет в справочнике → 200 с found=false, а не 404: это не ошибка запроса,
   а честный ответ об отсутствии данных.

   Отдельной ручкой, а не полем в /suggest, намеренно: suggest дёргается на
   каждое нажатие клавиши, и запрос к houses на каждый из 8 кандидатов на каждый
   keystroke был бы неоправданной нагрузкой. house-facts зовётся ОДИН раз, после
   выбора конкретного адреса.

   Резолв дома по ФИАС обёрнут в try/except с rollback — предзаполнение формы не
   должно ронять запрос в 500, а незакрытая ошибка отравила бы сессию для
   последующего geo-фолбэка. Тот же best-effort, что у _lookup_house_facts.

2. TradeInEstimateInput отклоняет floor > total_floors, когда заданы ОБА поля.
   Частичный ввод легален — пользователь ещё печатает форму. Раньше «12 этаж в
   9-этажном доме» уходил в расчёт молча и портил подбор аналогов по этажу.

Тесты: 10 штук в test_3257_house_facts_endpoint.py. Валидатор проверен вручную —
отклоняет 12/9, пропускает 9/9 и частичный ввод.
2026-08-29 23:24:12 +03:00