Skip to content

Справочные данные: статус и план пополнения

Дата: 2026-06-21 Контекст: Итог по справочнику автомобилей после раската DEP-58 (импорт carsbase JSON) + DEP-59 (экспозиция новых полей через API). Используется как точка отсчёта при планировании следующих шагов по обогащению.

TL;DR

  • Марки и модели обогащены: 423 марки + 4 847 моделей получили cyrillic_name, страну, годы выпуска. Покрытие хорошее, кроме pre-existing «исторических» записей и редких ручных добавлений.
  • ⚠️ Поколения — слабое место: 42% моделей не имеют ни одного поколения, у 100% генерационных записей пусто поле code (шасси), у 99% пусто steering.
  • ⚠️ Модификации (двигатели) — массив с прошлого импорта (30k), не трогали.
  • 🎯 Главный пробел: поколения для китайских брендов и российской классики (Лада, ГАЗ, УАЗ, Москвич) почти полностью отсутствуют.

1. Сводка по таблицам

Car hierarchy (YMMM)

ТаблицаDevProdЗаполненность ключевых полей
car_makes447438423 cyrillic_name • 420 country • 3 is_popular
car_models8 3108 3034 847 cyrillic_name • 4 728 class • 4 847 year_from
car_generations7 2137 2077 157 year_from • 4 184 year_to • 0 code • 6 steering
car_modifications30 06630 066(с прошлого импорта, не трогали)

Разница dev/prod (+9 makes / +7 models / +6 gens в dev) — исторический test-data, не критично.

Geo + categories (не трогали)

ТаблицаКол-во
regions2
cities3
districts31
metro_stations104
categories203

2. Марки — детально

Страны производства (топ-10)

СтранаМарок
🇨🇳 Китай130
🇺🇸 США55
🇬🇧 Великобритания44
🇷🇺 Россия41
🇩🇪 Германия27
🇮🇹 Италия24
🇫🇷 Франция18
🇯🇵 Япония14
🇰🇷 Южная Корея8
🇮🇳 Индия6

Всего 38 различных стран. Поле is_popular помечено только у 3 марок (импортёр намеренно не перезаписывает is_popular у существующих, чтобы не ломать админскую разметку — JSON указывал 30 popular, но эти 30 не были применены к pre-existing рядам).

Что можно сделать: при следующем upsert'е либо разрешить перезапись is_popular через флаг --overwrite-popular, либо разметить вручную через админку.

Марки без cyrillic_name

24 марки (из 447 dev) импортированы до DEP-58 и не нашлись в carsbase JSON. Это, как правило, тестовые / устаревшие записи (например, name="21" slug="12"). Имеет смысл провести аудит и удалить мусор либо вручную проставить кириллицу.


3. Модели — детально

Распределение по классу EuroNCAP

ClassОписаниеМоделей
CMedium929
DLarge756
SSport593
BSmall554
EExecutive479
JSUV / Crossover477
MMulti-purpose452
AMini257
FLuxury231
null3 582 (43%, в основном pre-existing импорт)

Годы выпуска

  • Самая старая модель: 1904
  • Самая свежая: 2027
  • Средний срок производства: ~10 лет

Модели без cyrillic_name

3 463 модели (из 8 310 dev) — pre-existing импорт. Источника на их кириллицу пока нет (carsbase их не содержит). Решения:

  1. Удалить устаревшие записи, оставив только carsbase + ручные.
  2. Wikidata SPARQL — для западных моделей можно вытащить русские лейблы.
  3. Ручная разметка через админку — для популярных моделей.

4. Поколения — детально

Покрытие

МетрикаЗначение
Моделей с ≥1 поколением4 801 (58%)
Моделей БЕЗ поколений3 509 (42%)
Всего поколений7 213
Среднее поколений на модель1.50
Максимум16 (один редкий случай)

Распределение поколений на модель

ПоколенийМоделей
13 536
2767
3212
4128
571
636
723
812
97
104
11+5

Заполненность полей car_generations

ПолеЗаполненоИз 7 213
year_from7 15799%
year_to4 18458% (для текущих моделей пусто = «по настоящее время»)
name7 213100% (NOT NULL)
code (шасси, например E46, W124)00%
steering (LHD/RHD)6<0.1%

code пуст по всей таблице — это лютая дыра для каталога автозапчастей, где деталь обычно подходит на конкретное шасси, а не на маркетинговое имя модели. Поле в схеме есть, наполнения нет.

Где главные пробелы — топ-15 марок без поколений

МаркаСтранаМоделей без поколенийВсего моделей
Тойота (Toyota)Япония144276
Мерседес-БенцГермания106519
Ниссан (Nissan)Япония94214
Джили (Geely)Китай8389
Чери (Chery)Китай7070
Хонда (Honda)Япония69160
Мазда (Mazda)Япония69133
Митсубиси (Mitsubishi)Япония66141
Шевроле (Chevrolet)США63227
Чанган (Changan)Китай6262
БИД (BYD)Китай6262
Форд (Ford)США57209
Хендэ (Hyundai)Южная Корея52133
Фольксваген (VW)Германия50212
ДонгФенг (Dongfeng)Китай5050

Паттерн: китайские бренды (Chery, Changan, BYD, Dongfeng, Geely, Jetour, Haval, GAC и др.) — поколений почти нет вообще, потому что они добавлены в БД позже исходного TecDoc-снимка. Это критично для российского рынка — китайские марки растут быстрее всех.

Российские бренды — почти все без поколений

БрендМоделейБез поколений
Лада5038
Москвич3232 (100%)
ГАЗ2929 (100%)
УАЗ1010 (100%)
ТагАЗ77 (100%)
ИЖ77 (100%)
Аурус42
Маруся20
(остальные 33 марки)в среднем 1–4почти все 100%

Это особенно болезненно — Лада, ГАЗ, УАЗ массовые в РФ, по ним должен быть полный YMMM-каскад.


5. Что можно/нужно сделать для пополнения поколений

Перечисление от самого простого/быстрого к долгосрочно правильному.

5.1. Синтетическое поколение «по умолчанию» (быстрая разморозка UX) ⚡

Для каждой модели без поколений вставить одно поколение, склеенное из car_models.year_from / year_to:

sql
INSERT INTO car_generations (model_id, name, year_from, year_to)
SELECT m.id,
       COALESCE(m.cyrillic_name, m.name) || ' ' || COALESCE(m.year_from::text, '') || '–' || COALESCE(m.year_to::text, 'наст.'),
       m.year_from, m.year_to
FROM car_models m
WHERE NOT EXISTS (SELECT 1 FROM car_generations g WHERE g.model_id = m.id);

Плюсы:

  • Разблокирует выбор поколения в UI для всех 3 509 моделей за секунды.
  • Продавец сможет указать совместимость хотя бы на уровне «модель».
  • Реверсимо: можно потом удалить и заменить настоящими данными.

Минусы:

  • Не даёт шасси-код (code).
  • Один синтетический gen на модель — продавец не отличит дорестайл от рестайла.

Рекомендация: делать сразу как app:fill-synthetic-generations (новая команда + DEP). Параметр --dry-run, --only-make=<slug>, идемпотентность.

5.2. Wikidata SPARQL — для западных брендов 🟢

Wikidata держит структурированные данные по моделям и поколениям, в т.ч. русские лейблы. Запрос на одну марку:

sparql
SELECT ?gen ?genLabel ?yearFrom ?yearTo ?code WHERE {
  ?model wdt:P31 wd:Q3231690 .          # instance of automobile model
  ?model wdt:P176 wd:Q9584 .            # manufacturer = Toyota (пример)
  ?gen wdt:P31 wd:Q21162571 .           # instance of car generation
  ?gen wdt:P361 ?model .                # part of <model>
  OPTIONAL { ?gen wdt:P571 ?yearFrom }  # inception
  OPTIONAL { ?gen wdt:P576 ?yearTo }    # dissolved/discontinued
  OPTIONAL { ?gen wdt:P528 ?code }      # catalogue code
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en". }
}

Плюсы:

  • Бесплатно, открытый источник, юридически чисто.
  • Покрытие неплохое: Toyota / Honda / BMW / Mercedes / VW / Ford — почти все поколения.
  • Иногда есть code (W124, E46, AE86 и т.п.) — точно то что нужно.

Минусы:

  • Покрытие неравномерное: китайские/российские бренды размечены плохо.
  • Лейблы поколений в Wikidata часто маркетинговые, без чёткой даты.
  • Нужно матчить по slug/название модели — потенциальный merge-conflict.

Рекомендация: написать команду app:import-wikidata-generations --make=<slug> с явным выбором марки и --dry-run. Запускать поочерёдно для топ-марок, проверять глазами через админку.

5.3. carsbase / drom / avto.ru — скрейпинг поколений 🟡

У этих сайтов есть пагинаты по поколениям с годами и шасси. Но:

  • ToS обычно запрещают массовый скрейпинг.
  • Сайты ставят анти-бот меры (Cloudflare + JS challenge), а сети CF заблокированы РКН → нужен residential-прокси.
  • Долгий и хрупкий код.

Рекомендация: не делать. Использовать только как ad-hoc источник при ручной разметке через админку.

5.4. Ручная разметка через админку 🟢 (для русских и популярных)

Уже есть полный CRUD: CreateCarGenerationAction, UpdateCarGenerationAction, DeleteCarGenerationAction.

Сценарий:

  1. По 41 российской марке (Лада, ГАЗ, УАЗ, Москвич, ИЖ + остальные мелкие) — ручная разметка через админку. Объём небольшой: ~100–150 поколений всего.
  2. Топ-10 китайских (Chery, BYD, Changan, Geely, Haval, Jetour, GAC, Dongfeng, Li Auto, NIO) — основные модели, по 1–3 поколения каждая, ~50 строк.

Плюсы: контроль качества, явные шасси-коды где есть. Минусы: трудозатраты ~10–20 человеко-часов.

5.5. TecDoc — долгосрочно правильное решение 🥇

Коммерческий каталог TecDoc даёт полную YMMM-цепочку + шасси-коды + двигатели + OEM-номера. Существует план интеграции от 2026-02-14.

Плюсы: золотой стандарт, всё в одном источнике, юридически чисто. Минусы: платная подписка (от ~€500/мес), сложная инициальная интеграция, специфический формат данных.

Рекомендация: заложить в roadmap, но не блокировать MVP. До TecDoc'а — комбинация 5.1 + 5.2 + 5.4 закрывает 90% реальных кейсов.


6. Поле code (шасси) — отдельный вопрос

В таблице car_generations есть колонка code VARCHAR(50), но она пуста на всех 7 213 рядах. Что туда писать:

  • BMW: E30, E36, E46, E90, F30, G20
  • Mercedes: W124, W210, W211, W212
  • Toyota: AE86, JZA80, XV70
  • VW: A4, A5, MQB
  • Lada: 2101, 2107, 2110, 21214

Без этого магазин запчастей едва ли может корректно матчить совместимость — продавцы по факту думают шасси, а не маркетинговыми именами.

План:

  1. Wikidata wdt:P528 (catalogue code) — где есть, забрать.
  2. Ручная разметка через админку для топ-марок.
  3. TecDoc когда появится.

7. Что ещё стоит подтянуть

ПолеГдеСейчасКуда стремимся
car_makes.is_popular3 из 447JSON указывал 30 — надо донастроить через админку или флаг --overwrite-popular в импорте
car_makes.logo_urlпочти везде nullЗалить SVG/PNG лого через S3, по мере хождения по каталогу
car_generations.steering6 из 7 213Для японских/китайских поколений — RHD/LHD важно (правый руль ≠ левый по запчастям). Из Wikidata P3157
car_modifications.engine_volume / fuel_type / power / transmissionстарый импортПокрытие проверить отдельно — данные были, но не аудитированы

8. Рекомендованная последовательность работ

#ЧтоОжидаемый объёмПриоритет
1Команда app:fill-synthetic-generations (5.1) + раскат на dev/prod1–2 чВысокий — разблокирует UX для 3 509 моделей
2Аудит и удаление мусорных pre-existing записей (тестовые марки/модели без cyrillic_name)2–3 ч + ручная сверкаВысокий — чистит выдачу
3Wikidata-импортер app:import-wikidata-generations --make=... (5.2)1 деньСредний — даёт правильные поколения для топ-20 западных марок
4Ручная разметка российских + китайских топ-марок через админку (5.4)10–20 чСредний — критично для русского рынка
5Бэкфилл is_popular + lazy-загрузка логотипов0.5 дняНизкий
6Бэкфилл code шасси через Wikidata + ручную правку1–2 дняВысокий долгосрочно — без шасси-кодов магазин запчастей не работает
7TecDoc интеграция (см. plan от 2026-02-14)Большой проектНизкий MVP / Высокий после product/market fit

Приложения