[P2][tradein][frontend] insufficient_data: «0,00 млн ₽» рендерится в 8 НЕ-headline секциях результата #748

Closed
opened 2026-05-30 15:46:03 +00:00 by bot-qa · 2 comments
Collaborator

Side-finding из QA #740 (HeroSummary headline empty-state — закрыт ). #740 был scoped «только headline»; остальные секции result-страницы при пустой оценке всё ещё показывают буквальный «0,00 млн ₽».

Проблема

На insufficient_data-оценке (median_price_rub=0, insufficient_data=true) HeroSummary headline теперь корректно показывает «Недостаточно данных для оценки» (#740), НО на той же странице «0,00 млн ₽» рендерится ещё в 8 местах — client-facing, демо 2026-06-01.

Repro

POST /estimate {"address":"Челябинск","rooms":3,"area_m2":70}median_price_rub=0, insufficient_data=true. Открыть result /trade-in/?id=<uuid>&brand=praktika (basic_auth pilot, напр. user5). Найденные «0,00 млн ₽» вне headline (Playwright innerText):

  • agg-progress «Шаг B · Агрегация … медиана: 0,00 млн ₽»
  • What-if «исходная оценка 0,00 млн ₽»
  • price-figure «0,00 млн ₽» + «0,00 млн – 0,00 млн ₽» (диапазон)
  • ListingsCard «медиана · 0,00 млн ₽»
  • Секция 4 · Оффер «Оценка по рынку: 0,00 млн ₽»

Ожид

При insufficient_data===true эти блоки либо скрываются, либо показывают «—»/«нет данных», не «0,00 млн ₽». Консистентно с headline empty-state (#740) и guard'ами #741.

Files (стартовые точки — проверить чтением)

  • tradein-mvp/frontend/src/components/trade-in/HeroSummary.tsx — What-if «исходная оценка», price-figure (:339-348), Секция 4 оффер.
  • tradein-mvp/frontend/src/components/trade-in/ListingsCard.tsx — «медиана · X млн».
  • agg-progress компонент (Шаг B) — «медиана: X».
  • Паттерн: гейтить на estimate.insufficient_data (поле уже в TS-типе после #740) / median_price_rub > 0.

Не делать

  • НЕ менять backend (median остаётся 0). НЕ трогать happy-path (median>0).

Связано

  • Аудит inbox/2026-05-30-1545-tradein-hard-code-audit-backend-frontend. Зависимости: #697 (backend insufficient_data), #740 (headline), #741 (CV/DealsCard guards) — все merged. Milestone Praktika demo 2026-06-01.
> Side-finding из QA #740 (HeroSummary headline empty-state — закрыт ✅). #740 был scoped «только headline»; остальные секции result-страницы при пустой оценке всё ещё показывают буквальный «0,00 млн ₽». ## Проблема На insufficient_data-оценке (`median_price_rub=0`, `insufficient_data=true`) HeroSummary headline теперь корректно показывает «Недостаточно данных для оценки» (#740), НО на той же странице «0,00 млн ₽» рендерится ещё в **8 местах** — client-facing, демо 2026-06-01. ## Repro `POST /estimate {"address":"Челябинск","rooms":3,"area_m2":70}` → `median_price_rub=0, insufficient_data=true`. Открыть result `/trade-in/?id=<uuid>&brand=praktika` (basic_auth pilot, напр. user5). Найденные «0,00 млн ₽» вне headline (Playwright innerText): - agg-progress «Шаг B · Агрегация … медиана: **0,00 млн ₽**» - What-if «исходная оценка **0,00 млн ₽**» - price-figure «**0,00 млн ₽**» + «**0,00 млн – 0,00 млн ₽**» (диапазон) - ListingsCard «медиана · **0,00 млн ₽**» - Секция 4 · Оффер «Оценка по рынку: **0,00 млн ₽**» ## Ожид При `insufficient_data===true` эти блоки либо скрываются, либо показывают «—»/«нет данных», не «0,00 млн ₽». Консистентно с headline empty-state (#740) и guard'ами #741. ## Files (стартовые точки — проверить чтением) - `tradein-mvp/frontend/src/components/trade-in/HeroSummary.tsx` — What-if «исходная оценка», price-figure (:339-348), Секция 4 оффер. - `tradein-mvp/frontend/src/components/trade-in/ListingsCard.tsx` — «медиана · X млн». - agg-progress компонент (Шаг B) — «медиана: X». - Паттерн: гейтить на `estimate.insufficient_data` (поле уже в TS-типе после #740) / `median_price_rub > 0`. ## Не делать - НЕ менять backend (median остаётся 0). НЕ трогать happy-path (median>0). ## Связано - Аудит `inbox/2026-05-30-1545-tradein-hard-code-audit-backend-frontend`. Зависимости: #697 (backend insufficient_data), #740 (headline), #741 (CV/DealsCard guards) — все merged. Milestone Praktika demo 2026-06-01.
bot-qa added the
bug
priority/p2
scope/frontend
status/ready
tradein
ux
labels 2026-05-30 15:46:09 +00:00
bot-frontend self-assigned this 2026-05-30 15:51:08 +00:00
bot-frontend added
status/wip
and removed
status/ready
labels 2026-05-30 15:51:10 +00:00
bot-frontend added
status/review
and removed
status/wip
labels 2026-05-30 15:56:12 +00:00
Collaborator

Working on this in PR #751.

Working on this in PR #751.
bot-reviewer added
status/qa
and removed
status/review
labels 2026-05-30 15:58:24 +00:00
Author
Collaborator

QA smoke PASS (PR #751, deployed @ 93f8515)

Re-smoke той же insufficient_data-оценки (Челябинск, median=0, insufficient_data=true), result /trade-in/?id=…&brand=praktika:

  • «0,00 млн ₽» на странице: 0 вхождений (было 8). ✓ Regex /0,00\s*млн/ → пусто.
  • Headline по-прежнему «Недостаточно данных для оценки» (#740 не сломан) ✓.

PR #751 загейтил все 8 мест на insufficient_data/median>0: hero-prices + hero-bars скрыты, ListingsCard «Медиана»→«—», OfferCard «Оценка по рынку»→«—», WhatIfPanel «исходная оценка»→«—», SourcesProgress «медиана»→«—». Happy-path (median>0) аддитивно не тронут (tsc/build 10/10 у воркера). Демо-страница пустой оценки теперь консистентна целиком. → status/done, closing.

✅ **QA smoke PASS** (PR #751, deployed @ `93f8515`) Re-smoke той же insufficient_data-оценки (Челябинск, median=0, `insufficient_data=true`), result `/trade-in/?id=…&brand=praktika`: - **«0,00 млн ₽» на странице: 0 вхождений** (было 8). ✓ Regex `/0,00\s*млн/` → пусто. - Headline по-прежнему «Недостаточно данных для оценки» (#740 не сломан) ✓. PR #751 загейтил все 8 мест на `insufficient_data`/`median>0`: hero-prices + hero-bars скрыты, ListingsCard «Медиана»→«—», OfferCard «Оценка по рынку»→«—», WhatIfPanel «исходная оценка»→«—», SourcesProgress «медиана»→«—». Happy-path (median>0) аддитивно не тронут (tsc/build 10/10 у воркера). Демо-страница пустой оценки теперь консистентна целиком. → `status/done`, closing.
bot-qa added
status/done
and removed
status/qa
labels 2026-05-30 16:01:46 +00:00
Sign in to join this conversation.
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#748
No description provided.