fix(tradein/v2): честная подача интервала оценки — одна цифра-герой + честный разброс #2159

Merged
lekss361 merged 1 commit from fix/tradein-v2-hero-honest-interval into main 2026-07-02 16:20:07 +00:00
Collaborator

Summary

Оценщик жаловался на «большой интервал» между рекомендованной ценой и оценкой. Бэктест показал: ширину коридора косметически не сузить (реальная рыночная дисперсия + структурный asking→sold gap). Чиним подачу, не число — математику не трогаем.

/trade-in/v2 (активная витрина, wired на real data)

  • deltaLabel «К РЫНКУ» → «К ОБЪЯВЛ.» (v2/mappers.ts + v2/fixtures.ts): −N% — это разрыв «объявление → ожидаемая сделка», а не «скидка от нас».
  • v2/ResultPanel.tsx: честная подпись под ценовыми карточками — «Диапазоны показывают разброс цен на рынке, а не погрешность оценки».
  • Иерархия expected_sold=headline / median=baseline / ДКП=справочно уже была (audit H2, #2062/#2081) — не трогаем.

Легаси-витрина / (HeroSummary) — тот же принцип + устранение конфликта термина «оценка»

  • hero-duo: expected_sold — цифра-герой («Оценка · ожидаемая цена продажи», 34px accent), median — вторичный «Рекомендованная цена в объявлении» (20px, приглушённый) вместо двух равнозначных 28px-блоков «Выставить»/«Получить». Новый модификатор .hero-duo--sold-primary.
  • Диапазон sold подписан «рыночный разброс» + honest hint «Диапазон отражает разброс цен по рынку, а не погрешность оценки».
  • Бейдж «−N%» → «−N% к объявлению» + title (разрыв asking↔сделка, не скидка сервиса).
  • OfferCard: «Оценка по рынку» → «Цена в объявлении» (median ≠ «оценка»; слово «оценка» на витрине = expected_sold).

Test plan

  • npx tsc --noEmit — чисто
  • npm run build (Next) — чисто (lint + types, 13 роутов)
  • Визуальный smoke /trade-in/v2 + /trade-in/ (hero-иерархия, подписи диапазона, бейдж)
## Summary Оценщик жаловался на «большой интервал» между рекомендованной ценой и оценкой. Бэктест показал: ширину коридора косметически не сузить (реальная рыночная дисперсия + структурный asking→sold gap). Чиним **подачу**, не число — математику не трогаем. ### /trade-in/v2 (активная витрина, wired на real data) - `deltaLabel` «К РЫНКУ» → «К ОБЪЯВЛ.» (`v2/mappers.ts` + `v2/fixtures.ts`): −N% — это разрыв «объявление → ожидаемая сделка», а не «скидка от нас». - `v2/ResultPanel.tsx`: честная подпись под ценовыми карточками — «Диапазоны показывают разброс цен на рынке, а не погрешность оценки». - Иерархия expected_sold=headline / median=baseline / ДКП=справочно уже была (audit H2, #2062/#2081) — не трогаем. ### Легаси-витрина `/` (HeroSummary) — тот же принцип + устранение конфликта термина «оценка» - hero-duo: `expected_sold` — цифра-герой («Оценка · ожидаемая цена продажи», 34px accent), `median` — вторичный «Рекомендованная цена в объявлении» (20px, приглушённый) вместо двух равнозначных 28px-блоков «Выставить»/«Получить». Новый модификатор `.hero-duo--sold-primary`. - Диапазон sold подписан «рыночный разброс» + honest hint «Диапазон отражает разброс цен по рынку, а не погрешность оценки». - Бейдж «−N%» → «−N% к объявлению» + `title` (разрыв asking↔сделка, не скидка сервиса). - `OfferCard`: «Оценка по рынку» → «Цена в объявлении» (median ≠ «оценка»; слово «оценка» на витрине = expected_sold). ## Test plan - [x] `npx tsc --noEmit` — чисто - [x] `npm run build` (Next) — чисто (lint + types, 13 роутов) - [ ] Визуальный smoke `/trade-in/v2` + `/trade-in/` (hero-иерархия, подписи диапазона, бейдж)
bot-backend added 1 commit 2026-07-02 16:17:27 +00:00
fix(tradein/v2): честная подача интервала оценки — одна цифра-герой + честный разброс
All checks were successful
CI / changes (pull_request) Successful in 8s
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
d63122d3e4
Оценщик жаловался на «большой интервал» между рекомендованной ценой и
оценкой. Бэктест: ширину коридора косметически не сузить (реальная рыночная
дисперсия + asking→sold gap). Чиним подачу, не число (математика не тронута).

Витрина /trade-in/v2 (активная, wired на real data через mapResultPanel):
- deltaLabel «К РЫНКУ» → «К ОБЪЯВЛ.» (mappers.ts + fixtures.ts): −N% —
  разрыв «объявление → ожидаемая сделка», а не «скидка от нас».
- ResultPanel: честная подпись под ценовыми карточками — «Диапазоны
  показывают разброс цен на рынке, а не погрешность оценки». Широкий
  диапазон не читается как неуверенность расчёта.
- Иерархия expected_sold=headline / median=baseline / ДКП=справочно уже
  была (audit H2, #2062/#2081) — не трогаем.

Легаси-витрина / (HeroSummary), тот же принцип и устранение конфликта термина:
- hero-duo: expected_sold — цифра-герой («Оценка · ожидаемая цена продажи»,
  34px, accent), median — вторичный «Рекомендованная цена в объявлении»
  (20px, приглушённый) вместо двух равнозначных 28px-блоков «Выставить»/
  «Получить». Новый модификатор .hero-duo--sold-primary.
- Диапазон sold подписан «рыночный разброс» + honest hint «Диапазон отражает
  разброс цен по рынку, а не погрешность оценки».
- Бейдж «−N%» → «−N% к объявлению» + title (разрыв asking↔сделка, не скидка).
- OfferCard: «Оценка по рынку» → «Цена в объявлении» (median ≠ «оценка»;
  слово «оценка» на витрине = expected_sold).

Проверка: tsc --noEmit чисто; next build чисто (lint+types, 13 роутов).
lekss361 merged commit 86a22dfc8f into main 2026-07-02 16:20:07 +00:00
lekss361 deleted branch fix/tradein-v2-hero-honest-interval 2026-07-02 16:20:07 +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#2159
No description provided.