Enum-справочники контекста chessboard
Дом всех enum-справочников домена шахматки: типы проектов, классы, статусы строительства, виды из окон, служебные enum-ы синка/статусов. Все документы контекста (entity-доки, event-contracts, API-модели) ссылаются сюда и не переописывают значения.
Назначение
Лента каталога фильтруется по типу, классу, региону и статусу строительства. Принятое решение — enum-справочники, а не таблицы: наборы значений стабильны, малы и меняются только релизом платформы; отдельные таблицы + FK + admin-CRUD были бы переусложнением (simplicity-first, ADR-0056).
Регион, город, страна и валюта — не 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, только через изменение контрактов событий (новая версия топика).
Значения, приходящие синком Talent и не известные PIN, маппятся в явный fallback (указан у каждого enum) c
warning-логом и метрикой chessboard_sync_unknown_enum_total; consumer не падает.
Снимают расхождение формулировок между этим справочником и контрактами событий:
- Ingestion (синк Talent →
chessboard). Неизвестное значение нормализуется в fallback и хранится им: колонка владеющей сущности всегда содержит значение из этого справочника. Поэтому исходящие события шахматки для sync-происхождённых enum-полей не несут неизвестных значений — downstream получает уже известное значение. - Downstream (потребитель события шахматки). Правило «сохранить строку как есть + warning» в контрактах событий — это защита на будущее: если breaking-bump контракта добавит значение раньше, чем обновится потребитель, тот не падает, а трактует незнакомое значение по наиболее ограничивающему смыслу (для статус-подобных enum — вести себя как «скрыто/недоступно», fail closed). В штатном v1-потоке такой случай не возникает благодаря нормализации на ingestion.
Классификация
| Поле | Значение |
|---|---|
| Контекст | chessboard |
| Kind | Reference data (enum-значения, без таблиц) |
| Source of truth | chessboard (значения — код платформы; 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). |
DeveloperApi | Developers 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 синка). |
Plan3D | 3D-план. |
FloorPosition | Положение объекта недвижимости на этаже. |
Visualization | Рендер/фото интерьера. |
Диаграмма использования
Безопасность и совместимость
| Аспект | Значение |
|---|---|
| Permissions | Значения публичны (фильтры каталога доступны гостю); отдельных permissions нет |
| PII | Отсутствует |
| Совместимость | Additive-only добавление значений; события несут enum строками — consumer-ы обязаны иметь fallback на unknown; удаление значения = breaking |
| Наблюдаемость | Метрика chessboard_sync_unknown_enum_total{enum,value} + warning-лог в consumer-е синка |
Обратные ссылки
Автоссылки: где используется этот документ.
- Домен (CQRS) (6): Entity / Aggregate: BuildingEntity, Entity / Aggregate: DeveloperEntity, Entity / Aggregate: LayoutEntity, Entity / Aggregate: LayoutGroupEntity, Entity / Aggregate: ProjectEntity, Entity / Aggregate: PropertyObjectEntity
- API (25): Chessboard API — реестр операций областей Developers и Admin, GET /api/v1/developers/projects — Поиск/список проектов застройщика, GET /api/v1/developers/projects/{projectId}/buildings — Список зданий проекта, GET /api/v1/developers/projects/{projectId}/layout-groups — Список групп планировок, GET /api/v1/developers/projects/{projectId}/layouts — Список планировок проекта, GET /api/v1/developers/projects/{projectId}/property-objects — Список объектов недвижимости проекта, GET /api/v1/developers/property-objects/{propertyObjectId} — Карточка объекта недвижимости (кабинет застройщика), GET /api/v1/public/projects — Лента published-проектов (поиск + фильтры + сортировки), GET /api/v1/public/projects/{projectId} — Карточка проекта (ограниченная/полная), GET /api/v1/public/projects/{projectId}/buildings/{buildingId} — Карточка здания (литера/корпуса), GET /api/v1/public/projects/{projectId}/chessboard — Шахматка проекта (матрица этажи × секции), GET /api/v1/public/property-objects — Список объектов недвижимости проекта/здания с фильтрами (+13)
- Use Cases (3): UC-CHS-001. Создание и публикация проекта застройщиком, UC-CHS-002. Добавление здания (литера/корпуса) и объектов проекта застройщиком, UC-CHS-005. Синхронизация реплики из Talent Chessboard (system)
- События (7): Event Contract: pin.chessboard.building-upserted (BuildingUpsertedKafkaEvent), Event Contract: pin.chessboard.developer-upserted (DeveloperUpsertedKafkaEvent), Event Contract: pin.chessboard.layout-upserted (LayoutUpsertedKafkaEvent), Event Contract: pin.chessboard.project-upserted (ProjectUpsertedKafkaEvent), Event Contract: pin.chessboard.property-object-price-changed (PropertyObjectPriceChangedKafkaEvent), Event Contract: pin.chessboard.property-object-status-changed (PropertyObjectStatusChangedKafkaEvent), Event Contract: pin.chessboard.property-object-upserted (PropertyObjectUpsertedKafkaEvent)
- Консюмеры (2): Consumer: Chessboard Projection Sync (pin-catalog-chessboard-sync), Consumer: Talent Chessboard Sync (pin-chessboard-talent-sync)
- Фоновые задачи (2): Background Job: property-object-hold-expiration (страховка от потерянных release-событий CRM), Background Job: talent-initial-import (первичная загрузка / bootstrap из Talent Chessboard)
- Поиск (1): Search Document: ProjectSearchDocument
- index.md (1): Chessboard Service (Pin.Chessboard)
- registries (1): Реестр сущностей PIN
Связанные документы
- Владельцы колонок: developer.md, project.md, building.md, property-object.md, layout.md, layout-group.md.
- Справочные ссылки гео/валюты (не enum): handbook-replica.md, ADR-0063.
- ADR-0056 (simplicity-first — enum вместо таблиц).