diff --git a/tradein-mvp/backend/app/tasks/landing_stats.py b/tradein-mvp/backend/app/tasks/landing_stats.py index 4a9cdfc8..e02450b8 100644 --- a/tradein-mvp/backend/app/tasks/landing_stats.py +++ b/tradein-mvp/backend/app/tasks/landing_stats.py @@ -305,9 +305,12 @@ def collect_landing_metrics(db: Session) -> list[dict[str, Any]]: ).first() if row is not None and row.n: n = int(row.n) + # Публичная подпись метрики: площадка не называется (норма publicLabel, + # решение 31.08.2026); фактически это Домклик — единственный источник, + # где триггер пишет стартовую цену. Текст персистится в landing_stats.note. base_note = ( - f"Только Домклик (единственный источник, где триггер пишет стартовую цену), " - f"наблюдение от {_PRICE_SPAN_DAYS} дней, изменения свыше " + "Только одна из площадок (единственный источник, где фиксируется " + f"стартовая цена), наблюдение от {_PRICE_SPAN_DAYS} дней, изменения свыше " f"{_PRICE_MAX_ABS_PCT}% отброшены как смена объекта" ) metrics.append( diff --git a/tradein-mvp/frontend/src/app/mera-public/__tests__/public-copy-no-platform-names.test.ts b/tradein-mvp/frontend/src/app/mera-public/__tests__/public-copy-no-platform-names.test.ts index 60c12c89..882d82f4 100644 --- a/tradein-mvp/frontend/src/app/mera-public/__tests__/public-copy-no-platform-names.test.ts +++ b/tradein-mvp/frontend/src/app/mera-public/__tests__/public-copy-no-platform-names.test.ts @@ -88,6 +88,10 @@ const BANNED = [ "Avito Оценка", "Я.Оценка", "Циан Оценка", + // Бренд-термины оценочной модели Avito: «IMV» / «Information Market Value». + // Идентификаторы (IMVBenchmark, imvPrice) границей слова не задеваются. + "IMV", + "Information Market Value", ]; /** diff --git a/tradein-mvp/frontend/src/components/trade-in/HeroSummary.tsx b/tradein-mvp/frontend/src/components/trade-in/HeroSummary.tsx index 2c7febc7..0a0134e6 100644 --- a/tradein-mvp/frontend/src/components/trade-in/HeroSummary.tsx +++ b/tradein-mvp/frontend/src/components/trade-in/HeroSummary.tsx @@ -529,13 +529,13 @@ export function HeroSummary({ estimate, input, onResubmit, isResubmitting = fals )} - {/* ── Компактный ряд бенчмарков: Avito IMV · Cian · ДКП ── + {/* ── Компактный ряд бенчмарков: оценочные модели площадок (avito_imv, cian_valuation) · ДКП ── Вторичный контекст-якорь под hero, не конкурирует по размеру. */} {!insufficientData && (imvPrice !== null || estimate.cian_valuation?.sale_price_rub != null || showDkp) && (
{imvPrice !== null && (
- {sourcePublicLabel("avito_imv")} IMV + {sourcePublicLabel("avito_imv")} {formatMln(imvPrice)} ₽
)} @@ -595,10 +595,10 @@ export function HeroSummary({ estimate, input, onResubmit, isResubmitting = fals {imvPrice !== null && (
- {sourcePublicLabel("avito_imv")} IMV: {formatMln(imvPrice)} ₽ + {sourcePublicLabel("avito_imv")}, оценочная модель: {formatMln(imvPrice)} ₽
)}
diff --git a/tradein-mvp/frontend/src/components/trade-in/IMVBenchmark.tsx b/tradein-mvp/frontend/src/components/trade-in/IMVBenchmark.tsx index 8fe8f914..fb6621fb 100644 --- a/tradein-mvp/frontend/src/components/trade-in/IMVBenchmark.tsx +++ b/tradein-mvp/frontend/src/components/trade-in/IMVBenchmark.tsx @@ -51,7 +51,7 @@ export function IMVBenchmark({ benchmark, isLoading }: Props) { return (
- {SRC_LABEL} IMV + {SRC_LABEL} · оценочная модель