feat(tradein/v2): позиция квартиры на рынке — плашка на карточке рекомендованной цены (#2899) #3024

Merged
bot-backend merged 3 commits from feat/2899-market-percentile-ui into main 2026-08-21 12:34:08 +00:00
Collaborator

Summary

  • Бэкенд-часть #2899 (#2926) на проде уже работает: с 19.08 три живые оценки — pct=69 (n=16), pct=57 (n=23), NULL (n=11 < 15). Фронт поле не знал — этот PR закрывает «бейдж из макета».
  • AggregatedEstimate.market_percentile?: number | null в wire-типе.
  • mappers.marketPositionPill: лейбл по терцилям (≤33 Низ рынка / В рынке / ≥67 Верх рынка) + подпись «69-й перцентиль среди 16 аналогов»; при null — плашки нет. Идёт в delta/deltaLabel карточки «РЕКОМЕНДОВАННАЯ ЦЕНА» — та же спокойная плашка, что у «к цене объявления».
  • ResultPanel: плашка вынесена в DeltaPill и рисуется и в ветке с гистограммой (раньше JSX плашки жил только в ветке без баров — delta карточки 1 терялся бы молча).

Test plan

  • vitest marketPercentile.test.ts — 4/4; на origin/main красный по значению (cards[0].delta === undefined).
  • prettier, eslint по файлам; tsc --noEmit — ошибок в src/ нет (3 ошибки локально — в устаревшем .next/types, CI соберёт на чистом checkout).
  • после деплоя: /trade-in/v2 на оценке с n_analogs ≥ 15 показывает плашку под гистограммой карточки 1; на оценке с n < 15 — нет (скриншот в issue).

Refs #2899

## Summary - Бэкенд-часть #2899 (#2926) на проде уже работает: с 19.08 три живые оценки — `pct=69 (n=16)`, `pct=57 (n=23)`, `NULL (n=11 < 15)`. Фронт поле не знал — этот PR закрывает «бейдж из макета». - `AggregatedEstimate.market_percentile?: number | null` в wire-типе. - `mappers.marketPositionPill`: лейбл по терцилям (`≤33 Низ рынка` / `В рынке` / `≥67 Верх рынка`) + подпись «69-й перцентиль среди 16 аналогов»; при null — плашки нет. Идёт в `delta/deltaLabel` карточки «РЕКОМЕНДОВАННАЯ ЦЕНА» — та же спокойная плашка, что у «к цене объявления». - `ResultPanel`: плашка вынесена в `DeltaPill` и рисуется и в ветке с гистограммой (раньше JSX плашки жил только в ветке без баров — delta карточки 1 терялся бы молча). ## Test plan - [x] `vitest` `marketPercentile.test.ts` — 4/4; на origin/main красный по значению (`cards[0].delta === undefined`). - [x] prettier, eslint по файлам; `tsc --noEmit` — ошибок в `src/` нет (3 ошибки локально — в устаревшем `.next/types`, CI соберёт на чистом checkout). - [ ] после деплоя: `/trade-in/v2` на оценке с `n_analogs ≥ 15` показывает плашку под гистограммой карточки 1; на оценке с `n < 15` — нет (скриншот в issue). Refs #2899
bot-backend added 1 commit 2026-08-21 11:59:13 +00:00
feat(tradein/v2): позиция квартиры на рынке — плашка на карточке рекомендованной цены (#2899)
Some checks failed
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 11s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
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 / frontend-checks (pull_request) Failing after 44s
07655a2642
Почему: бэкенд с #2926 отдаёт market_percentile (1..99, null при когорте
< 15), на проде он уже считается (21.08: 69 при 16 аналогах, 57 при 23,
null при 11), но фронт поле не знал — «бейдж из макета» так и не появился.

Что: AggregatedEstimate.market_percentile в wire-типе; маппер даёт карточке
«РЕКОМЕНДОВАННАЯ ЦЕНА» ту же спокойную плашку, что у карточки 2: лейбл по
терцилям («Низ рынка» ≤33 / «В рынке» / «Верх рынка» ≥67) и подпись
«69-й перцентиль среди 16 аналогов» — число рядом, чтобы лейбл не читался
точнее, чем он есть; при null плашки нет (не «В рынке» по умолчанию).
ResultPanel: JSX плашки вынесен в DeltaPill и рисуется и в ветке с
гистограммой — раньше delta у карточки с барами терялся бы молча.

Тест marketPercentile.test.ts (vitest): лейблы и границы терцилей, null →
нет плашки, delta карточки 2 не тронут, склонение по n_analogs. На main
красный по значению (delta карточки 1 === undefined).

Refs #2899
Light1YT added 1 commit 2026-08-21 12:00:11 +00:00
feat(tradein/v2): #2899 — сами правки типа/маппера/ResultPanel (в первый коммит попал только тест: git checkout HEAD откатил рабочее дерево до коммита)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 9s
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 / frontend-checks (pull_request) Successful in 56s
03af7386e9
Light1YT added 1 commit 2026-08-21 12:01:30 +00:00
chore(tradein/v2): #2899 — убрать шум prettier из предыдущего коммита (у tradein-frontend нет prettier-конвенции), оставить только правки
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
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 / frontend-checks (pull_request) Successful in 1m17s
b6ab582211
bot-backend merged commit 4ae14055ec into main 2026-08-21 12:34:08 +00:00
bot-backend deleted branch feat/2899-market-percentile-ui 2026-08-21 12:34:08 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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#3024
No description provided.