Перейти к основному содержимому

Enum-справочники контекста chessboard

Дом всех enum-справочников домена шахматки: типы проектов, классы, статусы строительства, виды из окон, служебные enum-ы синка/статусов. Все документы контекста (entity-доки, event-contracts, API-модели) ссылаются сюда и не переописывают значения.

Назначение

Лента каталога фильтруется по типу, классу, региону и статусу строительства. Принятое решение — enum-справочники, а не таблицы: наборы значений стабильны, малы и меняются только релизом платформы; отдельные таблицы + FK + admin-CRUD были бы переусложнением (simplicity-first, ADR-0056).

Гео и валюта — не enum chessboard

Регион, город, страна и валюта — не enum-справочники chessboard, а ссылки на платформенный справочник pin.handbook (ADR-0063): поля CountryId/RegionId/CityId/CurrencyId проекта (project.md) валидируются и получают display-имена через локальную реплику handbook-replica.md. Enum-справочники самого chessboard (ниже) этим не затрагиваются.

Правила хранения и совместимости:

  • каждый enum хранится текстом (varchar(32) если не указано иное), что делает значения читаемыми в БД и безопасными к переупорядочиванию;
  • значения enum — explicit-контракт; строковые коды не используются как «неявные первичные ключи» вне enum-типа;
  • добавление значения — additive-изменение (без bump ContractVersion событий); удаление / переименование — breaking, только через изменение контрактов событий (новая версия топика).
Unknown enum handling

Значения, приходящие синком Talent и не известные PIN, маппятся в явный fallback (указан у каждого enum) c warning-логом и метрикой chessboard_sync_unknown_enum_total; consumer не падает.

Два уровня fallback

Снимают расхождение формулировок между этим справочником и контрактами событий:

  • Ingestion (синк Talent → chessboard). Неизвестное значение нормализуется в fallback и хранится им: колонка владеющей сущности всегда содержит значение из этого справочника. Поэтому исходящие события шахматки для sync-происхождённых enum-полей не несут неизвестных значений — downstream получает уже известное значение.
  • Downstream (потребитель события шахматки). Правило «сохранить строку как есть + warning» в контрактах событий — это защита на будущее: если breaking-bump контракта добавит значение раньше, чем обновится потребитель, тот не падает, а трактует незнакомое значение по наиболее ограничивающему смыслу (для статус-подобных enum — вести себя как «скрыто/недоступно», fail closed). В штатном v1-потоке такой случай не возникает благодаря нормализации на ingestion.

Классификация

ПолеЗначение
Контекстchessboard
KindReference data (enum-значения, без таблиц)
Source of truthchessboard (значения — код платформы; SEED не нужен)
Таблицанет (enum-колонки владеющих сущностей)
Tenant isolationнеприменимо — платформенные значения

Enum ProjectType — тип проекта

Колонка projects.type. Фильтр ленты каталога. Fallback синка: ResidentialComplex.

ЗначениеРусское названиеОписание
ResidentialComplexЖилой комплекс (ЖК)Многоквартирная жилая застройка; продажа по ДДУ/ДКП.
ApartHotelАпарт-отельАпартаменты под управлением отельера (Project.HotelierId обязателен при публикации, INV-PRJ-4).
HotelОтельКлассический отель с продажей номеров как инвест-объектов недвижимости; отельер обязателен.
VillaВиллы / таунхаусыМалоэтажная застройка отдельными домовладениями.

Enum ProjectClass — класс проекта

Колонка projects.class. Фильтр ленты каталога. Fallback синка: Comfort.

ЗначениеРусское названиеОписание
StandardСтандартМассовый сегмент.
ComfortКомфортУлучшенный массовый сегмент.
BusinessБизнесБизнес-класс.
PremiumПремиумПремиальный сегмент.
EliteЭлитЭлитная недвижимость.

Enum ConstructionStatus — статус строительства

Колонки projects.construction_status и buildings.construction_status (у очередей статус здания может опережать/отставать от проекта). Фильтр ленты. Fallback синка: UnderConstruction.

ЗначениеРусское названиеОписаниеПорядок (монотонность)
PlannedПроект / котлован не начатЕсть разрешение/декларация, стройка не началась.1
UnderConstructionСтроитсяАктивная фаза строительства (ReadinessPercent растёт).2
CommissionedВведён в эксплуатациюПолучено разрешение на ввод; идёт выдача ключей.3
DeliveredСданПолностью сдан (Building.DeliveredAt заполнен, ReadinessPercent = 100, INV-BLD-6).4
Инвариант справочника

Переходы только вперёд по колонке «Порядок» (регресс — только admin-операция с warning-событием; ошибка CHESSBOARD_CONSTRUCTION_STATUS_REGRESS).

Enum WindowViewKind — вид из окна

Элементы PropertyObjectWindowViewsDocument.Views (property-object.md). Источник — синк Talent. Fallback синка: Street.

ЗначениеРусское название
SeaМоре
CityГород
CourtyardДвор
MountainsГоры
ParkПарк
RiverРека
StreetУлица

Enum PropertyObjectStatusSource — источник смены статуса объекта недвижимости

Колонка property_objects.status_source (property-object.md, INV-CHS-001): диагностика «кто перевёл объект недвижимости».

ЗначениеОписание
CrmСобытия CRM booking-created/confirmed/expired/cancelled, deal-completed/cancelled → переходы Резерв/Бронь/Освобождение/Продан (маппинг — ../consumers/crm-property-object-status.md) — основной путь.
TalentSyncСинк Talent Chessboard (создание, продажа вне PIN Free → Sold).
DeveloperApiDevelopers API (Hide/Unhide).
ExpirationJobСтраховочный процесс property-object-hold-expiration (release по истечении таймера + grace).

Enum ChessboardSyncSource — происхождение записи

Колонки SyncSource сущностей developer / project / building / property-object / layout / layout-group.

ЗначениеОписание
PinЗапись создана и полностью управляется в PIN.
TalentChessboardРеплика Talent Chessboard: реплика-поля перезаписываются синком, PIN-поля — локальные (инварианты *-SyncOwnedFields).

Вспомогательные enum-ы jsonb-моделей проекта

Используются только внутри typed-jsonb документов project.md; хранятся строками в jsonb.

TransportNodeKind (элемент ProjectLocationDocument.TransportNodes)

ЗначениеОписание
MetroСтанция метро.
AirportАэропорт.
RailwayЖ/д станция.
HighwayМагистраль/трасса.
BusStopОстановка ОТ.

TravelMode (там же)

ЗначениеОписание
WalkПешком.
CarНа автомобиле.
PublicTransportОбщественным транспортом.

InfrastructureKind (элемент ProjectInfrastructureDocument.*Items)

Parking, Pool, Spa, Fitness, Restaurant, Kindergarten, School, Shop, Beach, Park, Medical, Other — семантика очевидна из имени; fallback ручного ввода — Other.

SalesModel (ProjectFinancingDocument.SalesModel)

ЗначениеОписание
Ddu214ДДУ по 214-ФЗ с эскроу-счетами (EscrowBankIds обязателен непустой при публикации).
DkpДоговор купли-продажи (готовое жильё/апартаменты).
MixedСмешанная модель (по корпусам/очередям).

LayoutSchemaKind (элемент LayoutSchemasDocument.Items, layout.md)

ЗначениеОписание
Plan2DДвумерный план (fallback синка).
Plan3D3D-план.
FloorPositionПоложение объекта недвижимости на этаже.
VisualizationРендер/фото интерьера.

Диаграмма использования

Безопасность и совместимость

АспектЗначение
PermissionsЗначения публичны (фильтры каталога доступны гостю); отдельных permissions нет
PIIОтсутствует
СовместимостьAdditive-only добавление значений; события несут enum строками — consumer-ы обязаны иметь fallback на unknown; удаление значения = breaking
НаблюдаемостьМетрика chessboard_sync_unknown_enum_total{enum,value} + warning-лог в consumer-е синка

Обратные ссылки

Автоссылки: где используется этот документ.

Связанные документы