Compare commits
No commits in common. "8f88841bff3c133b8a1ef22851973fd1dfd63d2b" and "9cb5bf3fa3270881e24eb00a3ddee99529dd19cc" have entirely different histories.
8f88841bff
...
9cb5bf3fa3
4 changed files with 7 additions and 14 deletions
|
|
@ -305,12 +305,9 @@ def collect_landing_metrics(db: Session) -> list[dict[str, Any]]:
|
||||||
).first()
|
).first()
|
||||||
if row is not None and row.n:
|
if row is not None and row.n:
|
||||||
n = int(row.n)
|
n = int(row.n)
|
||||||
# Публичная подпись метрики: площадка не называется (норма publicLabel,
|
|
||||||
# решение 31.08.2026); фактически это Домклик — единственный источник,
|
|
||||||
# где триггер пишет стартовую цену. Текст персистится в landing_stats.note.
|
|
||||||
base_note = (
|
base_note = (
|
||||||
"Только одна из площадок (единственный источник, где фиксируется "
|
f"Только Домклик (единственный источник, где триггер пишет стартовую цену), "
|
||||||
f"стартовая цена), наблюдение от {_PRICE_SPAN_DAYS} дней, изменения свыше "
|
f"наблюдение от {_PRICE_SPAN_DAYS} дней, изменения свыше "
|
||||||
f"{_PRICE_MAX_ABS_PCT}% отброшены как смена объекта"
|
f"{_PRICE_MAX_ABS_PCT}% отброшены как смена объекта"
|
||||||
)
|
)
|
||||||
metrics.append(
|
metrics.append(
|
||||||
|
|
|
||||||
|
|
@ -88,10 +88,6 @@ const BANNED = [
|
||||||
"Avito Оценка",
|
"Avito Оценка",
|
||||||
"Я.Оценка",
|
"Я.Оценка",
|
||||||
"Циан Оценка",
|
"Циан Оценка",
|
||||||
// Бренд-термины оценочной модели Avito: «IMV» / «Information Market Value».
|
|
||||||
// Идентификаторы (IMVBenchmark, imvPrice) границей слова не задеваются.
|
|
||||||
"IMV",
|
|
||||||
"Information Market Value",
|
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -529,13 +529,13 @@ export function HeroSummary({ estimate, input, onResubmit, isResubmitting = fals
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* ── Компактный ряд бенчмарков: оценочные модели площадок (avito_imv, cian_valuation) · ДКП ──
|
{/* ── Компактный ряд бенчмарков: Avito IMV · Cian · ДКП ──
|
||||||
Вторичный контекст-якорь под hero, не конкурирует по размеру. */}
|
Вторичный контекст-якорь под hero, не конкурирует по размеру. */}
|
||||||
{!insufficientData && (imvPrice !== null || estimate.cian_valuation?.sale_price_rub != null || showDkp) && (
|
{!insufficientData && (imvPrice !== null || estimate.cian_valuation?.sale_price_rub != null || showDkp) && (
|
||||||
<div className="hero-benchmarks">
|
<div className="hero-benchmarks">
|
||||||
{imvPrice !== null && (
|
{imvPrice !== null && (
|
||||||
<div className="bench-chip">
|
<div className="bench-chip">
|
||||||
<span className="bench-chip__src" title="Оценочная модель площадки — независимая оценка рыночной стоимости">{sourcePublicLabel("avito_imv")}</span>
|
<span className="bench-chip__src">{sourcePublicLabel("avito_imv")} <abbr title={`Information Market Value — независимая оценка рыночной стоимости (${sourcePublicLabel("avito_imv")})`}>IMV</abbr></span>
|
||||||
<span className="bench-chip__val mono">{formatMln(imvPrice)} ₽</span>
|
<span className="bench-chip__val mono">{formatMln(imvPrice)} ₽</span>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
@ -595,10 +595,10 @@ export function HeroSummary({ estimate, input, onResubmit, isResubmitting = fals
|
||||||
{imvPrice !== null && (
|
{imvPrice !== null && (
|
||||||
<div
|
<div
|
||||||
className="price-figure-imv mono"
|
className="price-figure-imv mono"
|
||||||
title={`Оценочная модель площадки (${sourcePublicLabel("avito_imv")}) по этому дому — реальный рыночный якорь`}
|
title={`Индекс Market Value (${sourcePublicLabel("avito_imv")}) по этому дому — реальный рыночный якорь`}
|
||||||
style={{ marginTop: 6, fontSize: 12, color: "var(--muted)" }}
|
style={{ marginTop: 6, fontSize: 12, color: "var(--muted)" }}
|
||||||
>
|
>
|
||||||
{sourcePublicLabel("avito_imv")}, оценочная модель: {formatMln(imvPrice)} ₽
|
{sourcePublicLabel("avito_imv")} <abbr title={`Information Market Value — независимая оценка рыночной стоимости (${sourcePublicLabel("avito_imv")})`}>IMV</abbr>: {formatMln(imvPrice)} ₽
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ export function IMVBenchmark({ benchmark, isLoading }: Props) {
|
||||||
return (
|
return (
|
||||||
<section className="imv-benchmark" aria-label={`Оценка ${SRC_LABEL}`}>
|
<section className="imv-benchmark" aria-label={`Оценка ${SRC_LABEL}`}>
|
||||||
<header className="imv-benchmark__head">
|
<header className="imv-benchmark__head">
|
||||||
<span className="imv-benchmark__title" title="Оценочная модель площадки — независимая оценка рыночной стоимости">{SRC_LABEL} · оценочная модель</span>
|
<span className="imv-benchmark__title">{SRC_LABEL} <abbr title={`Information Market Value — независимая оценка рыночной стоимости (${SRC_LABEL})`}>IMV</abbr></span>
|
||||||
</header>
|
</header>
|
||||||
<div className="imv-benchmark__row">
|
<div className="imv-benchmark__row">
|
||||||
<div className="imv-benchmark__metric">
|
<div className="imv-benchmark__metric">
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue