katalka_tags_reference.md · версия 1.0.0

«Каталка»: справочник тегов и экспортных значений

Версия документа: 1.0.0 Статус: официальный справочник для frontend и backend Актуальность: 5 августа 2026 года Совместимость: content-admin / export contract 1.9

Назначение: единый словарь строковых кодов, enum-значений и тегов, которые приходят из content-admin через export и backend API.

Ответственность за ведение:

Важно: значения кодов (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_SPASPA, восстановление, спокойный отдых
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, coverPositionYFocal point изображения в процентах 0..100
sortOrderПорядок отображения по возрастанию
activeПризнак доступности в публичной выдаче
payloadРасширяемые дополнительные данные; стандартизованные ключи должны быть внесены в этот справочник

ResortMedia.role = STORY пока остаётся допустимым legacy-значением для существующего контента, но не является основным источником нового блока особенностей.


2. Place — тип места type

Это актуальная типизация content-admin/export.

КодОтображение
RESTAURANTРесторан
CAFEКафе
BARБар
SPASPA / бассейн
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Рабочий телефон
EMAILEmail
WEBSITEСайт
TELEGRAMTelegram
WHATSAPPWhatsApp
VKVK
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_SPASPA
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-флаги

ПолеТипСмысл
kidsFriendlybooleanПодходит детям
familyFriendlybooleanСемейный формат
dietaryFriendlybooleanЕсть смысл учитывать питание / гастрономические ограничения
noLongTransferbooleanНе требует долгого трансфера
indoorbooleanАктивность в помещении
outdoorbooleanАктивность на открытом воздухе
partnerPrioritybooleanПартнёрский объект имеет дополнительный приоритет

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Экран / раздел поиска
LIVELive
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Главная
LIVELive
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Галерея
STORYStory / особенность
MAPИзображение карты
HERO_VIDEOГлавное видео
BACKGROUNDФоновое медиа

Для ResortFeature используются две отдельные роли:

КодСмысл
PREVIEWМаленькое изображение особенности в списке / stories preview
COVERБольшая обложка внутри особенности

В экспортируемых Place / Event / Collection / Article / Banner наиболее часто используются COVER, GALLERY и специализированные роли конкретной сущности.


9. Resort — прочие важные экспортные поля

Эти поля не являются тегами, но frontend обычно использует их рядом с классификацией.

ПолеТипНазначение
regionstring / nullКороткий регион для карточки списка: Сочи, Карачаево-Черкесия
addressstring / nullПолный адрес
partnerbooleanПартнёр Каталки
activebooleanДоступность объекта
sortOrderintegerРедакционный порядок
searchAliasesstring[]Поисковые синонимы
groupSlugstring / nullГруппа курортов
characteristicsobjectТехнические характеристики
seasonInfoobjectСезон
priceInfoobjectЦены
routeInfoobjectКак добраться
linksobjectВнешние ссылки

10. Общие правила frontend

  1. Не переводить enum-код перед сравнением.

Храним / сравниваем PHOTO_SPOT, отображаем «Инсталокация».

  1. Не строить логику по русскому label.

Label может измениться без изменения API-кода.

  1. Не путать Place.type и Place.groupCode.

Например:

``json { "type": "RESTAURANT", "groupCode": "DAY_OFF" } ``

означает: сущность остаётся рестораном, но редакционно участвует в секции «День без каталки».

  1. Day-Off tags[], budgetLevel, activityLevel и boolean-флаги — разные измерения.

Не следует объединять их в один массив на клиенте.

  1. Неизвестное значение enum лучше отображать безопасным fallback, а не падать.

Для UI допустим fallback «Другое» / исходный код.

  1. metaTags и previewTags — разные системы тегов курорта.
  1. searchAliases не показываются как пользовательские теги.

Это поисковые синонимы.

  1. 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.02026-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-контента ориентироваться следует на актуальный экспортный контракт.