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

ADR-0058: Переименование доменного термина «Лот» → «Объект недвижимости» (Lot → PropertyObject)

Статус

Accepted

Дата

2026-07-14

Назначение

Зафиксировать единый канонический словарь механического переименования доменного термина «Лот» → «Объект недвижимости» (LotPropertyObject) во всём ТЗ и коде, а также перечень ложных срабатываний, которые трогать запрещено. Этот ADR — источник истины для переименования: любой идентификатор, топик, таблица, индекс, файл или русская форма приводятся строго к канону ниже.

Контекст

  • Термин «Лот» неоднозначен (жаргон каталога, конфликтует с «лот аукциона» и т. п.). Для единообразия и ясности везде используем «Объект недвижимости» (PropertyObject).
  • Продукт на стадии проектирования: спецификации нет, деплоя нет. Значит, breaking-переименования Kafka-топиков, PostgreSQL/ClickHouse-таблиц, колонок и индексов допустимы: обратная совместимость и миграции данных не требуются — переименование механическое, «как есть».
  • Затронуты практически все сервисы: chessboard (источник объектов и событий), catalog, favorites, selections, user-activity, crm, invest-analytics, dev-stats, investor-owner, rewards.
  • Риск: наивный LotPropertyObject и «лот»→«объект недвижимости» задевает похожие корни (слот, плотн*, slot, plot и др.). Поэтому канон дополнен разделом ложных срабатываний.

Решение

Применить Часть A (канон переименования) ко всем идентификаторам, событиям, топикам, таблицам, индексам, файлам и русским формам. Ничего из раздела «Ложные срабатывания» не переименовывать. Producer и consumer одного события обязаны использовать одинаковое новое имя топика.

A.1. Русские формы

БылоСтало
«Лот»«Объект недвижимости»
«лот / лота / лоты / лотов / лоту / лотом»соответствующие падежные формы «объект недвижимости»

A.2. Базовые идентификаторы

  • LotEntityPropertyObjectEntity.
  • LotIdPropertyObjectId; LotIdsPropertyObjectIds.
  • LotStatusPropertyObjectStatus; LotAvailabilityStatusPropertyObjectAvailabilityStatus; LotCardStatusPropertyObjectCardStatus; LotStatusSourcePropertyObjectStatusSource.
  • LotNumberPropertyObjectNumber.
  • LotRoomsPropertyObjectRooms; LotAreaTotalM2PropertyObjectAreaTotalM2; LotPropertyTypePropertyObjectPropertyType.

A.3. Проекции, карточки, модели

  • LotCardPropertyObjectCard; LotListItemModelPropertyObjectListItemModel.
  • LotSnapshot / LotSnapshotModelPropertyObjectSnapshot / PropertyObjectSnapshotModel; LotSourceSnapshotDocumentPropertyObjectSourceSnapshotDocument.
  • LotDisplayOverridePropertyObjectDisplayOverride; LotOverridePropertyObjectOverride (LotOverrideViewPropertyObjectOverrideView; LotOverrideMutationResultPropertyObjectOverrideMutationResult).
  • LotBoostPropertyObjectBoost.
  • LotProject / LotDeveloper / LotBuildingSummaryModelPropertyObjectProject / PropertyObjectDeveloper / PropertyObjectBuildingSummaryModel.
  • LotPaybackPropertyObjectPayback; LotReliabilityPropertyObjectReliability.
  • LotAgentCommissionPropertyObjectAgentCommission; LotAgentCommissionCalculatorPropertyObjectAgentCommissionCalculator; LotCommissionResultPropertyObjectCommissionResult; LotCommissionResultModelPropertyObjectCommissionResultModel.
  • LotTypeConfigPropertyObjectTypeConfig; LotTypeMonthOverridePropertyObjectTypeMonthOverride; LotTypeItemModelPropertyObjectTypeItemModel; LotTypeListResultPropertyObjectTypeListResult.
  • LotWindowViewsDocument / LotWindowViewsInputPropertyObjectWindowViewsDocument / PropertyObjectWindowViewsInput.
  • LotTtfvModelPropertyObjectTtfvModel; LotBounceModelPropertyObjectBounceModel; LotAnalyticsParamsModelPropertyObjectAnalyticsParamsModel; LotCellProjectionPropertyObjectCellProjection.

A.4. Просмотры и статистика

  • LotViewPropertyObjectView; LotViewIdPropertyObjectViewId.
  • LotViewStats / LotViewStatsModelPropertyObjectViewStats / PropertyObjectViewStatsModel.
  • LotViewFact / LotViewFactRowPropertyObjectViewFact / PropertyObjectViewFactRow.
  • LotViewStarted / LotViewEnded / LotViewHeartbeat / LotViewDailyPropertyObjectViewStarted / PropertyObjectViewEnded / PropertyObjectViewHeartbeat / PropertyObjectViewDaily.

A.5. Джобы и счётчики

  • LotHoldExpirationJob / LotHoldExpirationJobOptionsPropertyObjectHoldExpirationJob / PropertyObjectHoldExpirationJobOptions.
  • LotsFreeCount / LotsTotalCount / LotsAvailable / LotsCount / LotsTotalPropertyObjectsFreeCount / PropertyObjectsTotalCount / PropertyObjectsAvailable / PropertyObjectsCount / PropertyObjectsTotal.
  • avgLotsPerSession / medianLotsPerSession / p90LotsPerSession / maxLotsPerSessionavgPropertyObjectsPerSession / medianPropertyObjectsPerSession / p90PropertyObjectsPerSession / maxPropertyObjectsPerSession.

A.6. События, консюмеры, команды

  • Kafka-события: LotViewEndedKafkaEventPropertyObjectViewEndedKafkaEvent; LotUpsertedKafkaEventPropertyObjectUpsertedKafkaEvent; LotStatusChangedKafkaEventPropertyObjectStatusChangedKafkaEvent; LotPriceChangedKafkaEventPropertyObjectPriceChangedKafkaEvent; LotMetricsUpdatedKafkaEventPropertyObjectMetricsUpdatedKafkaEvent.
  • Доменные события: LotCardRecomputedEvent, LotStatusChangedEvent, LotViewStartedEvent, LotCreated, LotSold, LotReserved, LotReleased, LotBookedEvent, LotPriceChangedUnderHoldEvent, LotTypeConfigUpserted, LotTypeConfigDeletedEvent, LotTypeMonthOverridesReplacedEvent, LotDisplayOverrideChangedEvent → соответствующие PropertyObject* (напр. PropertyObjectCardRecomputedEvent, PropertyObjectReserved, PropertyObjectTypeConfigUpserted, PropertyObjectDisplayOverrideChangedEvent).
  • Консюмеры: LotViewEndedConsumerPropertyObjectViewEndedConsumer; LotViewEndedPopularityConsumerPropertyObjectViewEndedPopularityConsumer.
  • Команды: LotViewHeartbeatCommand / LotViewHeartbeatCommandHandler / LotViewHeartbeatCommandValidatorPropertyObjectViewHeartbeatCommand / PropertyObjectViewHeartbeatCommandHandler / PropertyObjectViewHeartbeatCommandValidator.

A.7. Kafka-топики (producer и consumer — одинаково)

БылоСтало
pin.user-activity.lot-view-ended.v1pin.user-activity.property-object-view-ended.v1
pin.chessboard.lot-upsertedpin.chessboard.property-object-upserted
pin.chessboard.lot-status-changedpin.chessboard.property-object-status-changed
pin.chessboard.lot-price-changedpin.chessboard.property-object-price-changed
pin.chessboard.lotspin.chessboard.property-objects
pin.chessboard.crm-lot-status-dlqpin.chessboard.crm-property-object-status-dlq
pin.crm.lot-reservedpin.crm.property-object-reserved
pin.crm.lot-bookedpin.crm.property-object-booked
pin.crm.lot-soldpin.crm.property-object-sold
pin.crm.lot-releasedpin.crm.property-object-released
pin.invest-analytics.lot-metricspin.invest-analytics.property-object-metrics

A.8. Таблицы PostgreSQL / ClickHouse

БылоСтало
lotsproperty_objects
lot_viewsproperty_object_views
lot_view_statsproperty_object_view_stats
lot_cardsproperty_object_cards
lot_display_overridesproperty_object_display_overrides
lot_type_configproperty_object_type_config
lot_type_month_overridesproperty_object_type_month_overrides
lot_view_factsproperty_object_view_facts
lot_view_daily / lot_view_daily_mvproperty_object_view_daily / property_object_view_daily_mv
dim_lotdim_property_object
lot_price_history_factsproperty_object_price_history_facts
колонка lot_idproperty_object_id

A.9. Индексы и constraints

БылоСтало
ix_lots_*ix_property_objects_*
ix_lot_cards_*ix_property_object_cards_*
ux_favorites_user_lotux_favorites_user_property_object
ux_favorites_anonymous_lotux_favorites_anonymous_property_object
ux_selection_items_selection_lotux_selection_items_selection_property_object
ux_bookings_active_lotux_bookings_active_property_object
ux_lot_views_active_session_lotux_property_object_views_active_session_property_object
ix_deals_lot_idix_deals_property_object_id
chk_lot_views_duration_nonnegchk_property_object_views_duration_nonneg
ux_investor_properties_investor_lot_activeux_investor_properties_investor_property_object_active
ux_lot_overrides_lot_idux_property_object_overrides_property_object_id

A.10. Файлы и папки

БылоСтало
api/.../get-lot.mdget-property-object.md
api/.../get-lots.mdget-property-objects.md
api/.../get-project-lots.mdget-project-property-objects.md
domain/lot.mddomain/property-object.md
domain/catalog-lot-card.mddomain/catalog-property-object-card.md
lot-view-*.mdproperty-object-view-*.md
events/lot-*.mdevents/property-object-*.md
facts/lot-view-facts.mdfacts/property-object-view-facts.md
dimensions/lot.mddimensions/property-object.md
chessboard/api/internal/lots/chessboard/api/internal/property-objects/
chessboard/api/public/lots/chessboard/api/public/property-objects/

A.11. Ложные срабатывания — НЕ переименовывать

Следующие вхождения не содержат термина «лот»/Lot и остаются без изменений:

  • Русские корни: слот / слоты / слотов; плотн* (плотность, уплотнение); глот*; вплоть.
  • Английские слова: slot, pilot, allot, plot.
  • ClickHouse/SQL: агрегатная функция argMax; тип индекса GIN; окончания loGIN, oriGIN, marGIN, enGINe (совпадение по подстроке GIN, не связано с объектами).

Область Действия

ОбластьВходитНе входит
Сервисыchessboard, catalog, favorites, selections, user-activity, crm, invest-analytics, dev-stats, investor-owner, rewardsсервисы без термина «лот» (напр. profile, referral, identity)
Контрактыидентификаторы, доменные/Kafka-события, консюмеры, команды (A.2–A.7)контракты из раздела ложных срабатываний (A.11)
Данныетаблицы, колонки, индексы, constraints PostgreSQL/ClickHouse (A.8–A.9)argMax, GIN и прочие ложные совпадения
Документацияфайлы/папки docs/06-services/** (A.10), ТЗ, glossary

Последствия

Часть B. Все сервисы приводятся к канону

  • Каждый сервис из области действия приводит свои идентификаторы, события, таблицы, индексы и доки к Части A — расхождений с каноном быть не должно.
  • Топики producer↔consumer обязаны совпасть: после переименования продюсер и все консюмеры одного события используют одно и то же новое имя топика (A.7). Несовпадение = разорванный контракт (сообщения не доходят). Проверять парами producer/consumer при ревью.
  • Breaking-переименования топиков/таблиц/индексов безопасны: спеки и деплоя нет, миграции данных не нужны.
  • Glossary и ТЗ фиксируют «Объект недвижимости» как единственный доменный термин; «Лот» выводится из употребления (кроме исторических ссылок на этот ADR).

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

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

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

  • ТехЗадание.md, docs/00-overview/glossary.md — обновить термин на «Объект недвижимости».
  • docs/06-services/chessboard/**, catalog/**, favorites/**, selections/**, user-activity/**, crm/**, invest-analytics/**, dev-stats/**, investor-owner/**, rewards/** — привести к канону.
  • ADR-0054 / ADR-0056 / ADR-0057 — события lot-view-* и facts lot_view_* переименованы по A.4/A.7/A.8.