diff --git a/tradein-mvp/frontend/src/components/trade-in/HeroSummary.tsx b/tradein-mvp/frontend/src/components/trade-in/HeroSummary.tsx index 84d2004e..c3a381b7 100644 --- a/tradein-mvp/frontend/src/components/trade-in/HeroSummary.tsx +++ b/tradein-mvp/frontend/src/components/trade-in/HeroSummary.tsx @@ -352,7 +352,10 @@ export function HeroSummary({ estimate, input, onResubmit, isResubmitting = fals {/* ── Два сопоставимых ценовых ориентира рынка (РАЗНЫЕ источники) ── asking (объявления) vs реальные сделки ДКП. Оба — рыночный контекст - под headline-итогом, поэтому одинакового веса. */} + под headline-итогом, поэтому одинакового веса. + При insufficient_data (median=0) оба блока скрыты — иначе «0,00 млн ₽» (#748). */} + {!insufficientData && ( + <>
Рекомендованная цена в объявлении
@@ -466,6 +469,8 @@ export function HeroSummary({ estimate, input, onResubmit, isResubmitting = fals ); })()}
+ + )} {/* ── Источники данных (#648 IA, task #5) — какие источники участвовали ── */}
diff --git a/tradein-mvp/frontend/src/components/trade-in/ListingsCard.tsx b/tradein-mvp/frontend/src/components/trade-in/ListingsCard.tsx index 8820700e..eb9d00d5 100644 --- a/tradein-mvp/frontend/src/components/trade-in/ListingsCard.tsx +++ b/tradein-mvp/frontend/src/components/trade-in/ListingsCard.tsx @@ -136,10 +136,18 @@ export function ListingsCard({ estimate, estimateId }: Props) {
Медиана
- {(m / 1_000_000).toFixed(2)} - млн ₽ + {m > 0 ? ( + <> + {(m / 1_000_000).toFixed(2)} + млн ₽ + + ) : ( + + )} +
+
+ {m > 0 ? `${estimate.median_price_per_m2.toLocaleString("ru-RU")} ₽/м²` : "нет данных"}
-
{estimate.median_price_per_m2.toLocaleString("ru-RU")} ₽/м²
Диапазон P25–P75
@@ -201,7 +209,8 @@ export function ListingsCard({ estimate, estimateId }: Props) { className="bar-title" style={{ color: "var(--fg-2)", fontSize: 12, letterSpacing: "0.04em" }} > - ДИАПАЗОН ЦЕН В ОБЪЯВЛЕНИЯХ · {(m / 1_000_000).toFixed(2)} МЛН ₽ медиана + ДИАПАЗОН ЦЕН В ОБЪЯВЛЕНИЯХ + {m > 0 ? ` · ${(m / 1_000_000).toFixed(2)} МЛН ₽ медиана` : ""}
diff --git a/tradein-mvp/frontend/src/components/trade-in/OfferCard.tsx b/tradein-mvp/frontend/src/components/trade-in/OfferCard.tsx index 8dca2ac3..743bafb2 100644 --- a/tradein-mvp/frontend/src/components/trade-in/OfferCard.tsx +++ b/tradein-mvp/frontend/src/components/trade-in/OfferCard.tsx @@ -84,7 +84,10 @@ export function OfferCard({ estimate, brandSlug }: Props) {
- Оценка по рынку: {formatMln(estimate.median_price_rub)} ₽ + Оценка по рынку:{" "} + + {estimate.insufficient_data ? "—" : `${formatMln(estimate.median_price_rub)} ₽`} +
медиана цен в объявлениях аналогов
diff --git a/tradein-mvp/frontend/src/components/trade-in/SourcesProgress.tsx b/tradein-mvp/frontend/src/components/trade-in/SourcesProgress.tsx index 49bc6e91..65f34492 100644 --- a/tradein-mvp/frontend/src/components/trade-in/SourcesProgress.tsx +++ b/tradein-mvp/frontend/src/components/trade-in/SourcesProgress.tsx @@ -118,7 +118,7 @@ export function SourcesProgress({ estimate, isPending }: Props) {
медиана:{" "} - {formatMln(estimate.median_price_rub)} ₽ + {estimate.insufficient_data ? "—" : `${formatMln(estimate.median_price_rub)} ₽`}
)} diff --git a/tradein-mvp/frontend/src/components/trade-in/WhatIfPanel.tsx b/tradein-mvp/frontend/src/components/trade-in/WhatIfPanel.tsx index d6e9c9b2..69a9d480 100644 --- a/tradein-mvp/frontend/src/components/trade-in/WhatIfPanel.tsx +++ b/tradein-mvp/frontend/src/components/trade-in/WhatIfPanel.tsx @@ -328,7 +328,7 @@ export function WhatIfPanel({ baseEstimate, baseInput }: Props) { ) : ( - исходная оценка {formatMln(basePrice)} ₽ + {basePrice > 0 ? `исходная оценка ${formatMln(basePrice)} ₽` : "исходная оценка —"} )}