fix(tradein/estimate): не блокировать оценку — расширять подбор и честно предупреждать #2823
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2823
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/tradein-estimate-never-block"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Инцидент
Первый платящий заказчик не смог оценить квартиру: студия 23.1 м² в Екатеринбурге (ул Академика Парина, 46/5) → экран «НЕДОСТАТОЧНО ДАННЫХ».
Адрес геокодировался корректно (
fias_exact, conf=0.95). Причина в другом: в UI не было варианта «Студия», и студия схлопывалась вrooms=1(initRoomsLabel:if (rooms <= 1) return "1"). Оценщик отбирает аналоги строгим совпадением комнатности.Замер на проде, радиус 2 км, площадь 17–29 м², активные:
rooms=0)rooms=1)Найдено 4 → сработал гейт
#oblast-E(n=4 < 5 → suppressing listings-derived median) → median=0 → блок.Проверка прямым запросом на проде: тот же адрес с
rooms=0→ 34 аналога, медиана 3 765 452 ₽, confidence medium. Данные были на месте, их отсекал фильтр.Summary
rooms=0в обе стороны — корневая причина инцидента.n < 5: комнатность (студия↔1-комн, иначе ±1) → свежесть 14→60 дней → новостройки → радиус 3/5 км. Радиус не расширяется за пределы явно выбранного пользователем (контракт #2044).n >= 5→ медиана по объявлениям;#oblast-E: 3 шумных объявления не должны перебивать 54 реальные сделки);relaxations: string[]иreliability: ok|low|very_low(аддитивные, с дефолтами). Красный баннер над оценкой + предупреждение и сноски в PDF.n_analogsтам, где рядом список карточек (PDF, v1HeroSummary/ListingsCard, v2SourcesMap/mappers) — иначе печаталось «0 шт.» над непустой таблицей. Места, гдеn_analogsозначает базу расчёта, не тронуты.extract_street_name: сокращения с необязательной точкой. DaData — основной источник адресов — отдаётул Академика Паринабез точки, улица не извлекалась → пустые блоки «сделки по улице» и «продажи vs объявления» на любом адресе из DaData.Test plan
ruff check+ruff format— чисто; pre-commit хуки зелёныеtsc --noEmit,eslint,npm run build— чистоrooms=1+ малой площади; репро Серова (3 объявления + 54 сделки) снова идёт по сделкам; PDF не печатает «0 шт.» над непустой таблицей; разбор улицы на прод-строке из DaData