«Каталка»: справочник тегов и экспортных значений
Версия документа: 1.0.0 Статус: официальный справочник для frontend и backend Актуальность: 5 августа 2026 года Совместимость: content-admin / export contract 1.9
Назначение: единый словарь строковых кодов, enum-значений и тегов, которые приходят из content-admin через export и backend API.
Ответственность за ведение:
- backend использует этот файл при импорте, маппинге и подготовке публичных DTO;
- frontend использует коды как стабильный контракт, а отображаемые подписи — как справочную локализацию;
- изменение существующего кода или его смысла требует новой версии документа и записи в журнале изменений.
Важно: значения кодов (
RESTAURANT,DAY_MOOD_RELAX,TOP_SERVICEи т. п.) являются частью контракта. Для отображаемого текста frontend может использовать собственную локализацию, но сравнивать и фильтровать нужно по коду.
1. Resort
1.1. previewTags
Пример:
{
"previewTags": {
"infrastructure": "TOP_SERVICE",
"format": "VACATION",
"budget": "MID_RANGE",
"ridingSpecific": ["FREERIDE"],
"vibe": ["PARTY"]
}
}
previewTags.infrastructure
| Код | Отображение | Смысл |
|---|---|---|
TOP_SERVICE | Топ-сервис | Развитая инфраструктура и высокий уровень сервиса |
BASIC_MINIMUM | Базовый минимум | Основная инфраструктура есть, без расширенного сервиса |
WILD_COLOR | Дикий колорит | Более автономный / природный формат, меньше городской инфраструктуры |
previewTags.format
| Код | Отображение | Смысл |
|---|---|---|
WEEKEND | На выходные | Курорт подходит для короткой поездки |
VACATION | Для отпуска | Подходит для полноценной многодневной поездки |
EXOTIC | Экзотика | Необычный, удалённый или нестандартный формат поездки |
previewTags.budget
| Код | Отображение | Смысл |
|---|---|---|
PREMIUM | Премиум | Высокий средний бюджет |
ECONOMY | Эконом | Бюджетный формат |
MID_RANGE | Средний чек | Средний ценовой сегмент |
previewTags.ridingSpecific[]
| Код | Отображение | Смысл |
|---|---|---|
FREERIDE | Фрирайд | Курорт заметно ориентирован на фрирайд |
TRAILS | Трассы | Акцент на подготовленное трассовое катание |
SNOWPARK | Сноупарк | Есть выраженный park / freestyle сценарий |
previewTags.vibe[]
| Код | Отображение | Смысл |
|---|---|---|
FAMILY | Семейный | Подходит для семейного отдыха |
PARTY | Тусовка | Выраженная вечерняя / après-ski жизнь |
RELAX | Релакс | Спокойный отдых, SPA, восстановление |
1.2. metaTags[]
metaTags — более широкий набор классификационных / рекомендательных тегов курорта.
{
"metaTags": [
"FREERIDE_EXCELLENT",
"LONG_SEASON",
"APRES_SKI"
]
}
Уровень катания
| Код | Смысл |
|---|---|
BEGINNER_HEAVY | Сильный акцент на начинающих |
INTERMEDIATE | Хорошо подходит среднему уровню |
ADVANCED | Подходит продвинутым райдерам |
EXPERT | Есть значимый экспертный уровень |
ALL_LEVELS | Хороший выбор для разных уровней |
Фрирайд
| Код | Смысл |
|---|---|
FREERIDE_BEGINNER | Есть доступный начальный фрирайд |
FREERIDE_GOOD | Хорошие возможности для фрирайда |
FREERIDE_EXCELLENT | Сильная фрирайд-составляющая |
BACKCOUNTRY | Есть backcountry-сценарии |
Разнообразие
| Код | Смысл |
|---|---|
HIGH_VARIETY | Высокое разнообразие отдыха / катания |
LONG_SEASON | Длинный сезон |
MANY_TRAILS | Большое количество трасс |
DIVERSE_TERRAIN | Разнообразный рельеф |
Аудитория
| Код | Смысл |
|---|---|
FAMILY_FRIENDLY | Подходит семьям |
KIDS_ZONE | Есть инфраструктура / зоны для детей |
GROUP_FRIENDLY | Удобно компаниям |
COUPLE_FRIENDLY | Подходит для поездки вдвоём |
SOLO_FRIENDLY | Подходит одиночным путешественникам |
Стиль отдыха
| Код | Смысл |
|---|---|
APRES_SKI | Активная après-ski / вечерняя жизнь |
RELAX_SPA | SPA, восстановление, спокойный отдых |
SNOWPARK | Сноупарк / freestyle |
BEAUTIFUL_VIEWS | Красивые виды / фотогеничность |
QUIET | Спокойная атмосфера |
Бюджет
| Код | Смысл |
|---|---|
BUDGET_FRIENDLY | Бюджетный |
MID_RANGE | Средний бюджет |
PREMIUM | Премиальный |
Инфраструктура
| Код | Смысл |
|---|---|
GOOD_INFRASTRUCTURE | Хорошо развитая инфраструктура |
MANY_RESTAURANTS | Много ресторанов / кафе |
MANY_LIFTS | Много подъёмников |
1.3. features[] — особенности курорта
Начиная с export 1.9, основным источником блока «Особенности курорта» является отдельный массив resorts[].features[].
| Поле / значение | Смысл |
|---|---|
name | Отображаемое название особенности |
description | Развёрнутое описание |
previewMedia.role = PREVIEW | Маленькое изображение карточки / story-preview |
coverMedia.role = COVER | Большое изображение внутри особенности |
coverPositionX, coverPositionY | Focal point изображения в процентах 0..100 |
sortOrder | Порядок отображения по возрастанию |
active | Признак доступности в публичной выдаче |
payload | Расширяемые дополнительные данные; стандартизованные ключи должны быть внесены в этот справочник |
ResortMedia.role = STORY пока остаётся допустимым legacy-значением для существующего контента, но не является основным источником нового блока особенностей.
2. Place — тип места type
Это актуальная типизация content-admin/export.
| Код | Отображение |
|---|---|
RESTAURANT | Ресторан |
CAFE | Кафе |
BAR | Бар |
SPA | SPA / бассейн |
BATH | Баня |
HOTEL | Отель |
VIEWPOINT | Видовая точка |
PHOTO_SPOT | Инсталокация |
SHOP | Магазин |
MEDICAL | Медпункт |
RESCUE | Спасатели |
PARKING | Парковка |
TOILET | Туалет |
ACTIVITY | Активность / досуг |
RENTAL | Прокат |
TRANSPORT | Транспорт |
OTHER | Другое |
2.1. Place — группа отображения groupCode
groupCode определяет редакционную секцию, в которой место удобно показывать. Это не то же самое, что type.
Пример:
{
"type": "CAFE",
"groupCode": "FOOD"
}
| Код | Название секции | Назначение |
|---|---|---|
FOOD | Где поесть? | Рестораны, кафе, бары и гастрономия |
DAY_OFF | День без каталки | Кандидаты для сценария дня без катания |
PHOTO_SPOTS | Инсталокации | Фототочки и видовые локации |
ACCOMMODATION | Где поселиться? | Отели и размещение |
SERVICES | Сервисы | Полезные сервисные объекты |
TRANSPORT | Транспорт | Транспортные объекты |
OTHER | Другое | Прочие места |
2.2. Place — контакт contacts.items[].type
| Код | Отображение |
|---|---|
PHONE | Телефон |
WORK_PHONE | Рабочий телефон |
EMAIL | |
WEBSITE | Сайт |
TELEGRAM | Telegram |
WHATSAPP | |
VK | VK |
OTHER | Другое |
Пример:
{
"contacts": {
"items": [
{
"name": "Сайт",
"type": "WEBSITE",
"value": "https://example.com"
}
]
}
}
3. Day-Off — теги мест и событий
Day-Off параметры могут находиться в:
place.tags.dayOff
event.tags.dayOff
Типовая структура:
{
"dayOff": {
"tags": [
"DAY_COMPANY_FRIENDS",
"DAY_MOOD_IMPRESSIONS",
"DAY_INTEREST_NATURE"
],
"budgetLevel": "DAY_BUDGET_COMFORT",
"activityLevel": "DAY_ACTIVITY_ACTIVE",
"recommendedTimeBlocks": [
"MORNING",
"AFTERNOON"
],
"indoor": false,
"outdoor": true,
"familyFriendly": true,
"kidsFriendly": false,
"dietaryFriendly": false,
"noLongTransfer": false,
"partnerPriority": false
}
}
3.1. Компания dayOff.tags[]
| Код | Отображение |
|---|---|
DAY_COMPANY_ALONE | Один |
DAY_COMPANY_COUPLE | Пара |
DAY_COMPANY_FRIENDS | Компания / друзья |
DAY_COMPANY_FAMILY_SMALL_KIDS | Семья с маленькими детьми |
DAY_COMPANY_FAMILY_TEENS | Семья с подростками |
DAY_COMPANY_WITH_KIDS | Подходит с детьми |
3.2. Настроение / формат дня dayOff.tags[]
| Код | Отображение |
|---|---|
DAY_MOOD_RELAX | Расслабиться |
DAY_MOOD_LIGHT_ACTIVITY | Лёгкая активность |
DAY_MOOD_IMPRESSIONS | Впечатления |
DAY_MOOD_GASTRO | Гастродень |
DAY_MOOD_CULTURE | Культура / история |
DAY_MOOD_MIXED | Смешанный день |
3.3. Интересы dayOff.tags[]
| Код | Отображение |
|---|---|
DAY_INTEREST_OUTDOOR | Свежий воздух |
DAY_INTEREST_SIGHTSEEING | Достопримечательности |
DAY_INTEREST_CULTURE | Культура |
DAY_INTEREST_SPA | SPA |
DAY_INTEREST_WELLNESS | Здоровье / восстановление |
DAY_INTEREST_NATURE | Природа |
DAY_INTEREST_WALKING | Прогулки |
DAY_INTEREST_EXCURSIONS | Экскурсии |
DAY_INTEREST_SHOPPING | Шопинг |
DAY_INTEREST_FOOD | Еда / рестораны |
DAY_INTEREST_TASTING | Дегустации |
DAY_INTEREST_YOGA | Йога |
DAY_INTEREST_CALM_SPORT | Спокойный спорт |
DAY_INTEREST_ENTERTAINMENT | Развлечения |
DAY_INTEREST_FREE_WALK | Просто гулять |
3.4. Уровень активности activityLevel
| Код | Отображение |
|---|---|
DAY_ACTIVITY_PASSIVE | Пассивный отдых |
DAY_ACTIVITY_LIGHT | Лёгкая активность |
DAY_ACTIVITY_MEDIUM | Средняя активность |
DAY_ACTIVITY_ACTIVE | Активный день |
3.5. Бюджет budgetLevel
| Код | Отображение |
|---|---|
DAY_BUDGET_ECONOMY | Эконом |
DAY_BUDGET_COMFORT | Комфорт |
DAY_BUDGET_PREMIUM | Премиум |
DAY_BUDGET_UNLIMITED | Без ограничений |
3.6. Рекомендуемое время recommendedTimeBlocks[]
| Код | Отображение |
|---|---|
MORNING | С утра |
LUNCH | Обед |
AFTERNOON | После обеда |
EVENING | Вечер |
3.7. Day-Off boolean-флаги
| Поле | Тип | Смысл |
|---|---|---|
kidsFriendly | boolean | Подходит детям |
familyFriendly | boolean | Семейный формат |
dietaryFriendly | boolean | Есть смысл учитывать питание / гастрономические ограничения |
noLongTransfer | boolean | Не требует долгого трансфера |
indoor | boolean | Активность в помещении |
outdoor | boolean | Активность на открытом воздухе |
partnerPriority | boolean | Партнёрский объект имеет дополнительный приоритет |
4. Event — type
| Код | Отображение / смысл |
|---|---|
FESTIVAL | Фестиваль |
SPORT | Спортивное событие |
CONCERT | Концерт |
PARTY | Вечеринка |
EXCURSION | Экскурсия |
FAMILY | Семейное событие |
FOOD | Гастрономическое событие |
MARKET | Ярмарка / маркет |
COMPETITION | Соревнование |
OTHER | Другое |
Событие также может иметь Day-Off параметры из раздела 3.
5. Collection
5.1. type
| Код | Смысл |
|---|---|
RESORTS | Подборка курортов |
PLACES | Подборка мест |
EVENTS | Подборка событий |
ARTICLES | Подборка статей |
MIXED | Смешанная подборка |
5.2. placement
| Код | Смысл |
|---|---|
HOME | Главная |
SEARCH | Экран / раздел поиска |
LIVE | Live |
RESORT_CARD | Карточка курорта |
PROFILE | Профиль |
GLOBAL | Глобальная / без конкретной экранной привязки |
5.3. items[].targetType
| Код | Объект |
|---|---|
RESORT | Курорт |
PLACE | Место |
EVENT | Событие |
ARTICLE | Статья / новость |
BANNER | Баннер |
DAY_OFF_PLAN | План дня без каталки |
6. Article / News
6.1. category
| Код | Смысл |
|---|---|
NEWS | Новость |
GUIDE | Гайд |
BLOG | Блоговый материал |
SAFETY | Безопасность |
RESORT_REVIEW | Обзор курорта |
ANNOUNCEMENT | Анонс |
OTHER | Другое |
6.2. status
| Код | Смысл |
|---|---|
DRAFT | Черновик |
PUBLISHED | Опубликовано |
ARCHIVED | Архив |
7. Banner
7.1. placement
| Код | Смысл |
|---|---|
HOME | Главная |
LIVE | Live |
RESORT_CARD | Карточка курорта |
PROFILE | Профиль |
SEARCH | Поиск |
ARTICLE | Материал / статья |
GLOBAL | Глобальное размещение |
7.2. targetType
| Код | Действие |
|---|---|
NONE | Без перехода |
INTERNAL_SCREEN | Внутренний экран приложения |
RESORT | Курорт |
PLACE | Место |
EVENT | Событие |
ARTICLE | Статья |
COLLECTION | Подборка |
EXTERNAL_URL | Внешняя ссылка |
targetPayload содержит параметры перехода и зависит от targetType.
8. Media — основные роли
Для связанных медиа в экспорте используется поле role.
Для курортов backend поддерживает:
| Код | Смысл |
|---|---|
COVER | Основная обложка |
GALLERY | Галерея |
STORY | Story / особенность |
MAP | Изображение карты |
HERO_VIDEO | Главное видео |
BACKGROUND | Фоновое медиа |
Для ResortFeature используются две отдельные роли:
| Код | Смысл |
|---|---|
PREVIEW | Маленькое изображение особенности в списке / stories preview |
COVER | Большая обложка внутри особенности |
В экспортируемых Place / Event / Collection / Article / Banner наиболее часто используются COVER, GALLERY и специализированные роли конкретной сущности.
9. Resort — прочие важные экспортные поля
Эти поля не являются тегами, но frontend обычно использует их рядом с классификацией.
| Поле | Тип | Назначение |
|---|---|---|
region | string / null | Короткий регион для карточки списка: Сочи, Карачаево-Черкесия |
address | string / null | Полный адрес |
partner | boolean | Партнёр Каталки |
active | boolean | Доступность объекта |
sortOrder | integer | Редакционный порядок |
searchAliases | string[] | Поисковые синонимы |
groupSlug | string / null | Группа курортов |
characteristics | object | Технические характеристики |
seasonInfo | object | Сезон |
priceInfo | object | Цены |
routeInfo | object | Как добраться |
links | object | Внешние ссылки |
10. Общие правила frontend
- Не переводить enum-код перед сравнением.
Храним / сравниваем PHOTO_SPOT, отображаем «Инсталокация».
- Не строить логику по русскому label.
Label может измениться без изменения API-кода.
- Не путать
Place.typeиPlace.groupCode.
Например:
``json { "type": "RESTAURANT", "groupCode": "DAY_OFF" } ``
означает: сущность остаётся рестораном, но редакционно участвует в секции «День без каталки».
- Day-Off
tags[],budgetLevel,activityLevelи boolean-флаги — разные измерения.
Не следует объединять их в один массив на клиенте.
- Неизвестное значение enum лучше отображать безопасным fallback, а не падать.
Для UI допустим fallback «Другое» / исходный код.
metaTagsиpreviewTags— разные системы тегов курорта.
previewTags— короткие пользовательские характеристики карточки.metaTags— расширенная классификация / рекомендации.
searchAliasesне показываются как пользовательские теги.
Это поисковые синонимы.
sortOrder— числовой редакционный порядок.
Для сущностей, где он заполнен, меньшее значение показывается раньше.
11. Быстрый TypeScript-шаблон
Пример, как безопасно завести словарь на frontend:
export const PLACE_TYPE_LABELS: Record<string, string> = {
RESTAURANT: 'Ресторан',
CAFE: 'Кафе',
BAR: 'Бар',
SPA: 'SPA / бассейн',
BATH: 'Баня',
HOTEL: 'Отель',
VIEWPOINT: 'Видовая точка',
PHOTO_SPOT: 'Инсталокация',
SHOP: 'Магазин',
MEDICAL: 'Медпункт',
RESCUE: 'Спасатели',
PARKING: 'Парковка',
TOILET: 'Туалет',
ACTIVITY: 'Активность / досуг',
RENTAL: 'Прокат',
TRANSPORT: 'Транспорт',
OTHER: 'Другое',
};
export function enumLabel(
dictionary: Record<string, string>,
value?: string | null,
): string {
if (!value) return '';
return dictionary[value] ?? value;
}
12. История версий
| Версия | Дата | Изменения |
|---|---|---|
1.0.0 | 2026-08-05 | Справочник получил статус официального проектного документа; совместимость обновлена до export 1.9; зафиксированы правила ведения; добавлено описание resorts[].features[] и ролей PREVIEW / COVER. |
13. Переход со старых значений Place
Справочник ориентирован на текущий content-admin и экспортную линию 1.9.
Особенно важно для Place.type: PHP content-admin уже использует новую типизацию:
PHOTO_SPOT
ACTIVITY
RENTAL
TRANSPORT
а более старый backend merge может ещё содержать прежние значения:
INSTAGRAM_SPOT
ATTRACTION
RENTAL_POINT
Для нового frontend-контента ориентироваться следует на актуальный экспортный контракт.