B2C: бесплатная проба покрытия — POST /trade-in/coverage #2894

Closed
opened 2026-08-15 16:04:21 +00:00 by lekss361 · 0 comments
Owner

Из макета v3: бесплатный шаг показывает «14 похожих объявлений рядом» и «47 дн. средний срок продажи» — БЕЗ рублёвой цифры. Ручки нет.

Как лучше сделать

  • Один SQL, ноль внешних вызовов, ноль записей в trade_in_estimates. Это защита от абуза: бесплатный шаг не должен стоить нам ни скрейпа, ни строки в БД.
  • Вход: {lat, lon, rooms, area_m2}. Выход: счётчики + вердикт ok | thin | not_covered, никаких цен.
  • Когорта: радиус строго 1000 м, rooms=, площадь ±15%, scraped_at <= 14 дней, после дедупа (source, source_id) и per-address cap.
  • Пороги: n >= 8 для зелёных городов (ЕКБ, В. Пышма, Берёзовский, Среднеуральск), n >= 12 для жёлтых (Н. Тагил, Каменск-Уральский, Первоуральск, Ревда). Радиус ради продажи не расширять.
  • thin / not_covered → кнопки оплаты нет вообще, вместо неё честный текст + форма «сообщим, когда появятся данные».
  • Медианный срок: сегодня _estimate_days_on_market (estimator.py:4964) считает медиану days_on_market по аналогам и отдаёт None при <3 значениях. Важно: у активного объявления это возраст висящего объявления, а не время до продажи (цензурированная выборка). Либо честно называть «столько уже висят», либо брать house_placement_history.exposure_days.

Блокирует: платный флоу, героя лэндинга v3.

Из макета v3: бесплатный шаг показывает «14 похожих объявлений рядом» и «47 дн. средний срок продажи» — БЕЗ рублёвой цифры. Ручки нет. ## Как лучше сделать - **Один SQL, ноль внешних вызовов, ноль записей** в `trade_in_estimates`. Это защита от абуза: бесплатный шаг не должен стоить нам ни скрейпа, ни строки в БД. - Вход: `{lat, lon, rooms, area_m2}`. Выход: счётчики + вердикт `ok | thin | not_covered`, никаких цен. - Когорта: радиус **строго 1000 м**, `rooms=`, площадь ±15%, `scraped_at <= 14 дней`, **после** дедупа `(source, source_id)` и per-address cap. - Пороги: `n >= 8` для зелёных городов (ЕКБ, В. Пышма, Берёзовский, Среднеуральск), `n >= 12` для жёлтых (Н. Тагил, Каменск-Уральский, Первоуральск, Ревда). Радиус ради продажи не расширять. - `thin` / `not_covered` → кнопки оплаты нет вообще, вместо неё честный текст + форма «сообщим, когда появятся данные». - Медианный срок: сегодня `_estimate_days_on_market` (`estimator.py:4964`) считает медиану `days_on_market` по аналогам и отдаёт `None` при <3 значениях. **Важно:** у активного объявления это возраст висящего объявления, а не время до продажи (цензурированная выборка). Либо честно называть «столько уже висят», либо брать `house_placement_history.exposure_days`. Блокирует: платный флоу, героя лэндинга v3.
lekss361 added the
priority/p1
scope/backend
labels 2026-08-15 16:04:21 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2894
No description provided.