feat(site-finder): supply-only fallback в §4.2 — предложение без темпа продаж (#2177 шаг 3) #2240

Merged
bot-backend merged 1 commit from feat/lots-fallback-2177 into main 2026-07-02 23:18:43 +00:00
Collaborator

Summary

  • Финальный шаг #2177: радиус-комплексы, сматченные по ядру, но без сделок — теперь показывают структуру текущего предложения из objective_lots (supply_only_layouts: комнатность × площадь × лоты × медианы ₽/м²/площади) отдельным блоком «По предложению (без темпа продаж)» под топ-планировками, с честным caveat.
  • SQL: физлот-дедуп DISTINCT ON (project, corpus, section, floor, lot_number) latest-snapshot (анти ре-листинг ×2.91; NULL-коллизии на проде 0.19% — ревью-verified приемлемо), scoped ANY по кандидатам (~40 мс типовой кейс), фильтры «в продаже»+price-sanity, вокабуляр bucket'ов консистентен velocity-стороне (прод-verified).
  • Velocity-покрытые проекты исключены из supply-набора — блоки дизъюнктны по project_name (комплекс не может быть в обоих).
  • Схема аддитивна (SupplyOnlyLayoutRow, groups_with_supply_only), api-types regen.
  • Follow-up (не блокер): INCLUDE price_per_m2_rub в physflat-covering индекс — worst-case 500 мс → 55 мс.

Test plan

  • 113 layout-тестов (без-velocity→блок+counter; velocity→не дублируется; пустой снапшот; SQL-инварианты), ruff/tsc/eslint clean
  • code-reviewer APPROVE (NULL-дедуп, вокабуляр, дизъюнктность, EXPLAIN — прод-verified)
  • post-merge: best-layouts на 66:41:0204016:10 — supply_only_layouts непуст для комплексов без сделок, скриншот блока

Refs #2177

## Summary - Финальный шаг #2177: радиус-комплексы, сматченные по ядру, но **без сделок** — теперь показывают структуру текущего предложения из `objective_lots` (`supply_only_layouts`: комнатность × площадь × лоты × медианы ₽/м²/площади) отдельным блоком «По предложению (без темпа продаж)» под топ-планировками, с честным caveat. - SQL: физлот-дедуп `DISTINCT ON (project, corpus, section, floor, lot_number)` latest-snapshot (анти ре-листинг ×2.91; NULL-коллизии на проде 0.19% — ревью-verified приемлемо), scoped `ANY` по кандидатам (~40 мс типовой кейс), фильтры «в продаже»+price-sanity, вокабуляр bucket'ов консистентен velocity-стороне (прод-verified). - Velocity-покрытые проекты исключены из supply-набора — блоки дизъюнктны по project_name (комплекс не может быть в обоих). - Схема аддитивна (`SupplyOnlyLayoutRow`, `groups_with_supply_only`), api-types regen. - Follow-up (не блокер): `INCLUDE price_per_m2_rub` в physflat-covering индекс — worst-case 500 мс → 55 мс. ## Test plan - [x] 113 layout-тестов (без-velocity→блок+counter; velocity→не дублируется; пустой снапшот; SQL-инварианты), ruff/tsc/eslint clean - [x] code-reviewer ✅ APPROVE (NULL-дедуп, вокабуляр, дизъюнктность, EXPLAIN — прод-verified) - [ ] post-merge: best-layouts на 66:41:0204016:10 — supply_only_layouts непуст для комплексов без сделок, скриншот блока Refs #2177
bot-backend added 1 commit 2026-07-02 23:03:21 +00:00
feat(site-finder): supply-only fallback блок в best-layouts (#2177 шаг 3)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / changes (pull_request) Successful in 7s
CI / frontend-tests (pull_request) Successful in 1m14s
CI / openapi-codegen-check (pull_request) Successful in 2m6s
CI / backend-tests (pull_request) Successful in 14m24s
944fee599f
bot-backend merged commit 9cfefc0ca4 into main 2026-07-02 23:18:43 +00:00
bot-backend deleted branch feat/lots-fallback-2177 2026-07-02 23:18:43 +00:00
Sign in to join this conversation.
No reviewers
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#2240
No description provided.