gendesign/tradein-mvp/frontend/src/components/trade-in/v2/fixtures.ts
bot-backend ca0a51c876
All checks were successful
CI / changes (pull_request) Successful in 9s
CI Trade-In / changes (pull_request) Successful in 9s
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
CI Trade-In / frontend-checks (pull_request) Successful in 1m36s
CI Trade-In / backend-tests (pull_request) Successful in 1m57s
chore(tradein/ui): вычистить источник n1 из source-registry и UI (#2204)
2026-07-03 10:16:53 +03:00

673 lines
19 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Sample/markup data for the /trade-in/v2 "МЕРА Оценка" design port.
// Extracted verbatim from the pixel design (МЕРА Оценка.dc.html). This is the
// data source for the markup — components must NOT fetch; they read from here.
// Colour fields reference tokens so the palette stays the single source of truth.
import { tokens } from "./tokens";
import type {
Analytics,
CacheKpi,
CacheRow,
DkpRow,
AdRow,
DealRow,
DropdownOptions,
History,
LocationFactors,
MarketAds,
MarketDeals,
ObjectInfo,
Ranges,
Report,
ResultCard,
ResultMeta,
ScatterMini,
SourceCard,
Summary,
User,
} from "./types";
export const report: Report = {
id: "9b9e2737",
date: "20.06.2026",
validUntil: "21.06.2026",
};
export const object: ObjectInfo = {
address: "ул. Малышева, 30",
city: "Екатеринбург, Россия",
area: "54",
rooms: "2",
floor: "5",
totalFloors: "17",
year: "1985",
houseType: "Панельный",
repair: "Хороший",
balcony: true,
locationCoef: "0.87",
streetView: "Street View · май 2024",
compass: "СЕВЕРО-ЗАПАД",
};
// ---- 02 RESULT ------------------------------------------------------------
export const resultCards: ResultCard[] = [
{
title: ["РЕКОМЕНДОВАННАЯ ЦЕНА", "В ОБЪЯВЛЕНИИ"],
value: "11,29",
unit: "млн ₽",
range: "7,72 — 14,46 млн ₽",
ppm: "225 801 ₽/м² · по объявлениям",
bars: [30, 55, 80, 100, 70, 45, 25, 35],
nav: 2,
},
{
title: ["ОЖИДАЕМАЯ СДЕЛКА", "(ПОЛУЧИТЕ)"],
value: "10,00",
unit: "млн ₽",
range: "6,83 — 12,81 млн ₽",
ppm: "199 973 ₽/м²",
delta: "11%",
deltaLabel: "К ОБЪЯВЛ.",
nav: 2,
},
{
title: ["ДКП · РОСРЕЕСТР", "(ФАКТИЧЕСКИЕ СДЕЛКИ)"],
value: "9,43",
unit: "млн ₽",
range: "6,10 — 12,72 млн ₽",
ppm: "188 672 ₽/м² · 44 сделки",
bars: [25, 45, 70, 100, 85, 55, 30, 20],
nav: 1,
},
];
export const resultMeta: ResultMeta = {
sources: "3 / 7",
confidence: "СРЕДНЯЯ",
cv: "59.7%",
};
export const ranges: Ranges = {
ads: {
label: ["ДИАПАЗОН ЦЕН В ОБЪЯВЛЕНИЯХ", "(БЕЗ УЧЁТА РЕМОНТА)"],
median: "11,29 млн ₽",
lo: "7,72 млн",
hi: "14,46 млн",
marker: { fillLeft: "8%", fillRight: "18%", dotLeft: "58%" },
},
deals: {
label: ["ДИАПАЗОН ЦЕН ПО", "ФАКТИЧЕСКИМ СДЕЛКАМ"],
median: "6,80 млн ₽",
lo: "4,30 млн",
hi: "19,70 млн",
marker: { fillLeft: "4%", fillRight: "55%", dotLeft: "33%" },
},
};
// Mini "ЦЕНА × СРОК ПРОДАЖИ" scatter inside the ranges card (viewBox 168×140).
export const scatterMini: ScatterMini = {
deals: [
{ x: 52, y: 96, r: 2.4 },
{ x: 64, y: 88, r: 2.4 },
{ x: 58, y: 101, r: 2.4 },
{ x: 74, y: 85, r: 2.4 },
{ x: 47, y: 103, r: 2.4 },
{ x: 88, y: 79, r: 2.4 },
{ x: 70, y: 93, r: 2.4 },
{ x: 55, y: 90, r: 2.4 },
{ x: 82, y: 99, r: 2.4 },
{ x: 44, y: 97, r: 2.4 },
],
analogs: [
{ x: 118, y: 48, r: 3 },
{ x: 100, y: 60, r: 3 },
{ x: 132, y: 40, r: 3 },
{ x: 92, y: 66, r: 3 },
{ x: 112, y: 54, r: 3 },
{ x: 142, y: 34, r: 3 },
],
subject: { x: 96, y: 70, r: 3.6 },
yTicks: [
{ label: "15М", y: 13 },
{ label: "10М", y: 77 },
{ label: "4М", y: 112 },
],
xTicks: [
{ label: "0", x: 34 },
{ label: "90", x: 96 },
{ label: "180", x: 158 },
],
};
export const sources: SourceCard[] = [
{ name: "ЦИАН", count: "7", label: "лотов", active: true },
{ name: "Я.НЕДВИЖИМОСТЬ", count: "1", label: "лот", active: true },
{ name: "РОСРЕЕСТР (ВНУТР.)", count: "10", label: "лотов", active: true },
{ name: "АВИТО ОЦЕНКА", count: "—", label: "нет данных", active: false },
{ name: "ДОМКЛИК ПРАЙС", count: "—", label: "нет данных", active: false },
{ name: "RESTATE", count: "—", label: "нет данных", active: false },
];
// ---- 03 SUMMARY -----------------------------------------------------------
export const summary: Summary = {
rows: [
{ label: "Продажи в доме", value: "2 · 32 дн", dot: "accent", nav: 1 },
{ label: "Аналоги", value: "23 · 6,13 млн", dot: "accent", nav: 2 },
{ label: "Сделки", value: "10 · 5,95 млн", dot: "muted", nav: 2 },
{ label: "Аналитика", value: "67 дн · 3%", dot: "accent", nav: 3 },
],
quality: { sources: "3 / 7", confidence: "средняя", cv: "59.7%" },
};
// ---- OVERLAY 04: ПРОДАЖИ В ДОМЕ -------------------------------------------
export const dkpRows: DkpRow[] = [
{
area: "33.9 м²",
price: "5 950 000 ₽",
ppm: "175 516",
ask: "5 272 800 ₽ за 3 дн до",
delta: "+12.8%",
deltaColor: tokens.danger,
},
{
area: "35.4 м²",
price: "4 900 000 ₽",
ppm: "138 418",
ask: "5 186 700 ₽ за 3 дн до",
delta: "5.5%",
deltaColor: tokens.success,
},
{
area: "36.2 м²",
price: "4 200 000 ₽",
ppm: "116 022",
ask: "5 186 700 ₽ за 3 дн до",
delta: "19.0%",
deltaColor: tokens.success,
},
{
area: "37.0 м²",
price: "7 503 227 ₽",
ppm: "202 790",
ask: "5 272 800 ₽ за 3 дн до",
delta: "+42.3%",
deltaColor: tokens.danger,
},
{
area: "36.8 м²",
price: "7 140 243 ₽",
ppm: "194 028",
ask: "5 272 800 ₽ за 3 дн до",
delta: "+35.4%",
deltaColor: tokens.danger,
},
{
area: "42.1 м²",
price: "6 535 050 ₽",
ppm: "155 227",
ask: "5 272 800 ₽ за 3 дн до",
delta: "+23.9%",
deltaColor: tokens.danger,
},
{
area: "42.0 м²",
price: "6 650 000 ₽",
ppm: "158 333",
ask: "5 781 600 ₽ за 3 дн до",
delta: "+15.0%",
deltaColor: tokens.danger,
},
{
area: "32.5 м²",
price: "5 362 650 ₽",
ppm: "165 005",
ask: "5 325 600 ₽ за 3 дн до",
delta: "+0.7%",
deltaColor: tokens.danger,
},
{
area: "38.8 м²",
price: "4 380 000 ₽",
ppm: "112 887",
ask: "5 325 600 ₽ за 3 дн до",
delta: "17.8%",
deltaColor: tokens.success,
},
{
area: "34.9 м²",
price: "5 000 000 ₽",
ppm: "143 266",
ask: "5 254 500 ₽ за 3 дн до",
delta: "4.8%",
deltaColor: tokens.success,
},
];
export const history: History = {
houseSales: [
{
lot: "2-к. квартира, 50 м², 6/16 эт.",
priceFrom: "6,25",
priceTo: "5,98 млн ₽",
date: "11.07.2025",
exposure: "32 дн.",
},
{
lot: "2-к. квартира, 60 м², 6/16 эт.",
priceFrom: "7,29",
priceTo: "7,09 млн ₽",
date: "11.07.2025",
exposure: "31 дн.",
},
],
dkpHeader: {
title: "ДКП-сделки на улице Академика Ландау",
period: "24 мес",
note: "78% сделок имеют историческую цену в объявлении · медианный торг 36.0%. Данные по улице, не по дому.",
},
dkpKpi: { count: "95", median: "140 066", range: "3,1 7,5" },
};
// ---- OVERLAY 05: АНАЛОГИЧНЫЕ ОБЪЯВЛЕНИЯ -----------------------------------
export const adRows: AdRow[] = [
{
addr: "ул. Академика Ландау, 39",
meta: "32.5 м² · 1-к · этаж 12/15",
ppm: "170 769",
price: "5 550 000",
},
{
addr: "ул. Академика Ландау, 35А/2",
meta: "33.5 м² · 1-к · этаж 13/25",
ppm: "174 626",
price: "5 850 000",
},
{
addr: "ул. Академика Ландау, 38",
meta: "32.7 м² · 1-к · этаж 10/16",
ppm: "171 253",
price: "5 600 000",
},
{
addr: "ул. Академика Ландау, 35",
meta: "32.7 м² · 1-к · этаж 6/12",
ppm: "178 999",
price: "5 853 300",
},
{
addr: "ул. Академика Ландау, 35",
meta: "37.4 м² · 1-к · этаж 8/12",
ppm: "149 732",
price: "5 600 000",
},
{
addr: "ул. Академика Парина, 29",
meta: "40.5 м² · 1-к · этаж 22/23",
ppm: "160 493",
price: "6 500 000",
},
{
addr: "ул. Академика Ландау, 39",
meta: "32.5 м² · 1-к · этаж 15/15",
ppm: "146 153",
price: "4 750 000",
},
{
addr: "ул. Академика Ландау, 39",
meta: "34.9 м² · 1-к · этаж 9/15",
ppm: "143 266",
price: "5 000 000",
},
{
addr: "ул. Академика Парина, 33",
meta: "37.1 м² · 1-к · этаж 6/14",
ppm: "160 916",
price: "5 970 000",
},
{
addr: "ул. Академика Ландау, 34",
meta: "41.7 м² · 1-к · этаж 22/23",
ppm: "167 865",
price: "6 999 999",
},
];
export const dealRows: DealRow[] = [
{
addr: "Екатеринбург, Академика Парина",
meta: "38.1 м² · 1-к",
ppm: "161 417",
price: "6 150 000",
},
{
addr: "Екатеринбург, Академика Ландау",
meta: "33.9 м² · 1-к",
ppm: "175 516",
price: "5 950 000",
},
{
addr: "Екатеринбург, Академика Ландау",
meta: "39.1 м² · 1-к",
ppm: "148 338",
price: "5 800 000",
},
{
addr: "Екатеринбург, Академика Парина",
meta: "33.8 м² · 1-к",
ppm: "147 929",
price: "5 000 000",
},
{
addr: "Екатеринбург, Академика Сахарова",
meta: "37.1 м² · 1-к",
ppm: "167 116",
price: "6 200 000",
},
{
addr: "Екатеринбург, Академика Вавилова",
meta: "38.8 м² · 1-к",
ppm: "165 437",
price: "6 418 972",
},
{
addr: "Екатеринбург, Академика Ландау",
meta: "42.0 м² · 1-к",
ppm: "158 333",
price: "6 650 000",
},
{
addr: "Екатеринбург, Академика Ландау",
meta: "34.9 м² · 1-к",
ppm: "143 266",
price: "5 000 000",
},
{
addr: "Екатеринбург, Академика Парина",
meta: "32.9 м² · 1-к",
ppm: "159 574",
price: "5 250 000",
},
{
addr: "Екатеринбург, Академика Парина",
meta: "41.2 м² · 1-к",
ppm: "101 942",
price: "4 200 000",
},
];
export const marketAds: MarketAds = {
kpi: {
count: "23",
median: "6,13",
ppm: "161 351",
range: "4,77,5",
cv: "45.9%",
},
filters: ["Расстояние ≤ 2 км", "Планировка 1-к", "Площадь 32.5 41.7 м²"],
};
export const marketDeals: MarketDeals = {
kpi: {
count: "10",
median: "5,95",
delta: "3% к рынку",
range: "4,2 6,7",
},
};
// ---- OVERLAY 06: АНАЛИТИКА ДОМА -------------------------------------------
export const analytics: Analytics = {
header: { ads: "615 объявлений", radius: "в радиусе 300 м" },
kpis: [
{
label: "СРЕДНЯЯ ЭКСПОЗИЦИЯ",
value: "67",
unit: "дн.",
sub: "по архивным объявлениям",
},
{
label: "СРЕДНИЙ ТОРГ",
value: "3.0%",
color: tokens.success,
sub: "от начальной до итоговой цены",
},
{
label: "ДОЛЯ СНЯТЫХ",
value: "69%",
sub: "421 из 615",
},
],
sellTimeNote: "Медиана экспозиции по архивным лотам · эталон 177 394 ₽/м²",
sellTime: [
{
tier: "5% от рынка",
days: "~63 дн.",
range: "обычно 18180 дн.",
count: "69 аналогов",
variant: "success",
},
{
tier: "По медиане",
days: "~65 дн.",
range: "обычно 18182 дн.",
count: "79 аналогов",
variant: "accent",
},
{
tier: "+5%",
days: "~78 дн.",
range: "обычно 16212 дн.",
count: "61 аналог",
variant: "gold",
},
{
tier: "+10%",
days: "~67 дн.",
range: "обычно 26260 дн.",
count: "57 аналогов",
variant: "danger",
},
],
priceHistory: {
note: "Медиана ₽/м² по годам · только этот дом · Avito + Яндекс (596 лотов)",
years: ["2022", "2023", "2024", "2025", "2026"],
avito: "58,75 260,82 470,69 680,69 885,73",
yandex: "58,75 260,82 470,51 680,42 885,24",
yTicks: [
{ label: "200k", y: 20 },
{ label: "150k", y: 65 },
{ label: "100k", y: 110 },
{ label: "50k", y: 155 },
{ label: "0k", y: 195 },
],
},
scatterDetail: {
note: "16 сделок и 6 аналогов в радиусе 300 м",
deals: [
{ x: 150, y: 210, r: 4.5 },
{ x: 200, y: 196, r: 4.5 },
{ x: 175, y: 222, r: 4.5 },
{ x: 250, y: 188, r: 4.5 },
{ x: 220, y: 204, r: 4.5 },
{ x: 300, y: 176, r: 4.5 },
{ x: 270, y: 200, r: 4.5 },
{ x: 330, y: 166, r: 4.5 },
{ x: 360, y: 182, r: 4.5 },
{ x: 195, y: 214, r: 4.5 },
{ x: 285, y: 190, r: 4.5 },
{ x: 160, y: 200, r: 4.5 },
{ x: 345, y: 198, r: 4.5 },
{ x: 240, y: 172, r: 4.5 },
{ x: 315, y: 186, r: 4.5 },
{ x: 180, y: 232, r: 4.5 },
],
analogs: [
{ x: 600, y: 96, r: 5.5 },
{ x: 540, y: 124, r: 5.5 },
{ x: 670, y: 84, r: 5.5 },
{ x: 500, y: 142, r: 5.5 },
{ x: 640, y: 104, r: 5.5 },
{ x: 730, y: 70, r: 5.5 },
],
subject: { x: 445, y: 150, r: 6 },
yTicks: [
{ label: "15М", y: 24 },
{ label: "12М", y: 81 },
{ label: "9М", y: 138 },
{ label: "6М", y: 195 },
{ label: "4М", y: 252 },
],
xTicks: [
{ label: "0", x: 60 },
{ label: "45", x: 265 },
{ label: "90", x: 470 },
{ label: "135", x: 675 },
{ label: "180", x: 880 },
],
},
};
// ---- OVERLAY 07: ПРЕДЫДУЩИЕ ОЦЕНКИ ----------------------------------------
export const cacheRows: CacheRow[] = [
{
addr: "ул. Малышева, 30",
time: "12:45:02",
src: "3 / 7",
status: "свежий",
statusColor: tokens.success,
},
{
addr: "ул. Куйбышева, 48",
time: "12:31:50",
src: "4 / 7",
status: "свежий",
statusColor: tokens.success,
},
{
addr: "ул. Академика Ландау, 35",
time: "11:58:14",
src: "2 / 7",
status: "свежий",
statusColor: tokens.success,
},
{
addr: "ул. 8 Марта, 120",
time: "09:12:40",
src: "3 / 7",
status: "устаревает",
statusColor: tokens.warn,
},
{
addr: "пр. Ленина, 5",
time: "вчера 18:04",
src: "5 / 7",
status: "устарел",
statusColor: tokens.danger,
},
{
addr: "ул. Белинского, 86",
time: "вчера 14:22",
src: "2 / 7",
status: "устарел",
statusColor: tokens.danger,
},
];
export const cacheKpi: CacheKpi[] = [
{ label: "ВСЕГО ОЦЕНОК", value: "128", sub: "за последние 30 дней" },
{
label: "СРЕДНЯЯ ЦЕНА ОЦЕНОК",
value: "9,6",
unit: "млн ₽",
sub: "по проведённым оценкам",
},
{ label: "ПОВТОРНЫЕ АДРЕСА", value: "18", unit: "%", sub: "доля переоценок" },
];
// ---- INPUTS / DROPDOWNS ---------------------------------------------------
export const dropdownOptions: DropdownOptions = {
rooms: ["1", "2", "3", "4", "5+"],
houseType: [
"Не указано",
"Панельный",
"Кирпичный",
"Монолитный",
"Блочный",
"Монолитно-кирпичный",
],
repair: [
"Не указано",
"Без отделки",
"Требует ремонта",
"Удовлетворительный",
"Хороший",
"Отличный",
],
radius: ["300 м", "500 м", "1000 м", "2000 м"],
crm: [
"Не заполнять",
"Создать сделку",
"Привязать к контакту",
"Экспорт в CRM",
],
};
// ---- КОЭФ. ЛОКАЦИИ DRAWER -------------------------------------------------
export const locationFactors: LocationFactors = {
coef: "0.87",
intro:
"Показывает, как адрес корректирует стоимость относительно медианы по Екатеринбургу. 1.00 — средний уровень. 0.87 означает, что локация снижает цену примерно на 13% из-за баланса факторов ниже.",
formula: { base: "11,29 млн", coef: "0.87", result: "9,82 млн ₽" },
positives: [
{ label: "Центр города, пешая доступность ключевых точек", delta: "+0.06" },
{ label: "Транспортные узлы и остановки рядом", delta: "+0.05" },
{ label: "Набережная и парк в 10 минутах", delta: "+0.04" },
{ label: "Развитая торговая инфраструктура", delta: "+0.03" },
],
negatives: [
{ label: "Оживлённая магистраль, шумовая нагрузка", delta: "0.07" },
{ label: "Дефицит парковочных мест", delta: "0.05" },
{ label: "Возраст жилого фонда района (1985)", delta: "0.04" },
{ label: "Износ инженерных сетей квартала", delta: "0.02" },
],
footer:
"Источник геоданных: OpenStreetMap POI, транспортная доступность, шумовые и экологические слои. Коэффициент пересчитывается при смене адреса.",
};
// ---- NAV / CHROME ---------------------------------------------------------
export const navLabels: string[] = [
"ОЦЕНКА",
"ПРОДАЖИ В ДОМЕ",
"АНАЛОГИЧНЫЕ ОБЪЯВЛЕНИЯ",
"АНАЛИТИКА",
"ПРЕДЫДУЩИЕ ОЦЕНКИ",
];
export const overlayTitles: string[] = [
"",
"ПРОДАЖИ В ДОМЕ",
"АНАЛОГИЧНЫЕ ОБЪЯВЛЕНИЯ",
"АНАЛИТИКА ДОМА",
"ПРЕДЫДУЩИЕ ОЦЕНКИ",
];
export const overlayNums: string[] = ["", "04", "05", "06", "07"];
export const user: User = {
name: "Андрей Петров",
org: "Брусника",
email: "a.petrov@mera.ru",
initials: "АП",
reports: 128,
};
export const version = "v2.0.6";