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

Техническое задание PIN — нормализованная структура

Нормализованное представление исходных требований по 21 bounded contexts. Источники: корневой ТехЗадание.md (основной, референс), фиче-матрицы ТехЗадание/ (вторичный референс: роли/фичи/воронки). Навигация «UI-поверхность/возможность → контекст → ТЗ» — prototype-mapping.md. Детальные тех задания — в docs/06-services/<context>/.

Что строим

PIN — платформа недвижимости (и одновременно риэлторское агентство): каталог объектов застройщиков (шахматка), инвест-аналитика доходности, воронка «реферальная ссылка → лид → фиксация → бронь → сделка → объект у собственника», кабинеты застройщика/агентства/инвестора, коммуникации (чаты сделок, уведомления). Микросервисы + событийная архитектура (Kafka) на DDD, PostgreSQL/ClickHouse, поверх shared SDK Talent.Common.* (.NET 9). Мессенджер — собственный мини-мессенджер (ADR-0055).

Контексты и покрытие исходного ТЗ

КонтекстРазделы ТехЗадание.md (строки)Акценты реализацииДетальное ТЗ
identityСервис авторизации + детали (27–73); категории новостей по типам (47–53)СМС/2FA/пин-вход (18+ операций); компании, роли, scope-права06-services/identity/
profileЛК пользователя + верификация инвестора (75–99)ЛК, персоны, документы, верификация инвестора06-services/profile/
chessboardШахматка + структура данных + API (123–161)Структура проектов/зданий/объектов; sync Talent Chessboard06-services/chessboard/
catalogПубличный каталог (189–199) + 9 UC инвестора (163–175)Публичная витрина: лоты, оверрайды, ранжирование06-services/catalog/
invest-analyticsАналитика/история цен (203–208)Эконом-модель, серии инвестора, ClickHouse-история цен06-services/invest-analytics/
rewardsВознаграждения агентов (177–187); комиссионная политика агентства (матрица «Агенство»)Комиссии агентов, комиссионная политика агентства06-services/rewards/
referralРеферальная/партнёрская система (319–347)Реферальные ссылки/связи (11+4 операций), правила привязки06-services/referral/
crmCRM (369–463) + Бронирование (465–473) + Фиксация (475–495) + ЛК застройщика (101–105) + ЛК агента (107–119) + US «Сделка» (589–660 и матрицы)Сделки/этапы/участники, bookings/requests/purchase-config06-services/crm/
investor-ownerСервис инвестора-собственника (227–237)Портфель собственника; sync Talent Owners06-services/investor-owner/
newsСервис новостей (213–223)Ленты, посты, категории, комментарии06-services/news/
favoritesСервис избранного (241–247)Избранное: сервер + слияние гостевой сессии06-services/favorites/
selectionsСервис подборок (277–283)Подборки, публичные ссылки, snapshot для постов06-services/selections/
user-activityСессии (263–273) + История просмотров (253–261) + Отслеживание действий (359–361) — объединены (ADR-0054)Сессии, история просмотров, трекинг действий06-services/user-activity/
messengerМессенджер (287–309) + Контакты (313–315)Собственный мини-мессенджер (SignalR, ADR-0055)06-services/messenger/
notificationsСервис уведомлений (349–351)Уведомления, шаблоны, каналы, настройки06-services/notifications/
supportРоль «Служба заботы» (только матрицы)Тикеты, арбитраж, база знаний06-services/support/
dev-statsСтатистика просмотров для застройщика (указание владельца, ADR-0057): кто/сколько/как долго/как часто смотрит проекты/здания/планировки/группы/объекты; фильтры дата+застройщик(+проект, опц. здание/планировка/группа/объект); 3 годаClickHouse facts + rollups; consumer user-activity06-services/dev-stats/
handbookНормативные справочники (эмерджентный; ADR-0063)Реплики стран/регионов/городов/валют/языков; ACL над talent...handbook; публичный lookup + internal resolve + топики pin.handbook.*06-services/handbook/
calendarЗапись на показ/консультацию/встречу и слоты доступности (эмерджентный; ADR-0064)Расписание агента/консультанта ПИН, слоты самозаписи с витрины, жизненный цикл записи (подтверждение/отмена/перенос/исход); лиды/сделки остаются в crm06-services/calendar/
walletВнутренние балансы вознаграждений (эмерджентный; ADR-0065)Ledger-модель: раздельные балансы получателя (агент/партнёр/агентство/ПИН), журнал изменений06-services/wallet/

Сквозные сценарии: UC-1/UC-2(+2a)/UC-3(+3a) (497–583) + воронки из матриц — 02-architecture/scenarios/.

Ролевая модель (сводная)

8 ролей: Инвестор, Агент/Брокер, Агентство (руководитель), Девелопер (менеджер застройщика), Менеджер ПИН, Служба заботы, Администратор, Гость + внутренние роли компаний (агентство: руководитель/старший менеджер/…; девелопер: администратор проекта/менеджер продаж/маркетолог; забота: наблюдатель/оператор/супервизор). Реализация — Scoped-RBAC + record-level (см. 06-services/identity/). «СуперАгент» из матриц — не роль (дубль Агента).

Принятые решения по открытым вопросам исходного ТЗ

#Открытый вопрос (источник)РешениеГде зафиксировано
1Каталог permissions «реши сам» (ТЗ.md:55,73)Полный каталог permissions по фичам/ролям проектируется в identityidentity/domain/permission.md
2Куда вынести администраторов (ТЗ.md:68)Отдельная admin-система за пределами основной Identity; в ТЗ — граница и интеграционные точкиADR-0053
3Сессии vs история просмотров vs трекинг — сервис или модуль (ТЗ.md:267)Один контекст user-activity с модулями sessions/views/actionsADR-0054
4Слияние избранного при авторизации (ТЗ.md:247)3 стратегии (device-wins / account-wins / merge) + рекомендация mergefavorites/README.md
5Оркестратор чата и сделок — модуль или микросервис (ТЗ.md:301)Модуль CRM + события; messenger потребляетADR-0055
6Транспорт чатовСобственный мини-мессенджер (PostgreSQL + SignalR realtime из SDK); чаты сделок — по событиям CRMADR-0055
7Две воронки брони: инвестор- vs агент-инициатор (матрицы)Единый flow с двумя точками входа; сделку создаёт агент (или менеджер ПИН); таймеры — параметры программы бронирования02-architecture/scenarios/, crm/README.md
8Tenancy-модель PINTenantId = CompanyId; инвестор — вне tenant (nullable)ADR-0052
9Эквайринг/платежи (ТЗ.md:455)Структуры сделки/оплат проектируются; интеграция платежей — отложенаcrm/ («реализация отложена»)
10Ранжирование новостей (ТЗ.md:219) и монетизация продвижения (ТЗ.md:195)Спроектировать модели; реализация отложенаnews/, catalog/
11Нагрузка/сложность (указание владельца)Simplicity-first: до 1 млн пользователей (≤20k агентов/менеджеров), 1–10k одновременно активных → PostgreSQL-only для sessions/favorites/selections (без Redis); закрытие сессий/просмотров — LastActivityAt + polling-delta 10–15 мин → Kafka session-ended/lot-view-ended + агрегаты по лотуADR-0056
12Статистика для застройщиков (указание владельца)Контекст dev-stats на ClickHouse: facts просмотров (PARTITION BY месяц; ORDER BY = иерархия фильтров Developer→Project→Building→LayoutGroup→Layout→Lot→ViewedAt; TTL 3 года) + дневные rollup-ы; API метрик/графиков с фильтрами дата+сам застройщик(+проект, опц. уровни ниже)ADR-0057
13Справочники (страны/регионы/города/валюты/языки) — дублировать в каждом сервисе или выделитьОтдельный контекст handbook как ACL-реплика внешнего talent...handbook: публичный lookup + internal resolve для write-path + топики pin.handbook.* для локальных реплик потребителейADR-0063
14Запись на показ/консультацию и слоты доступностиОтдельный контекст calendar: расписание агента/консультанта ПИН, слоты самозаписи с витрины, жизненный цикл записи (подтверждение/отмена/перенос/исход); лиды/сделки остаются в crm (узнаёт по событиям)ADR-0064
15Где учитывать причитающиеся вознагражденияКонтекст wallet (первый ledger платформы): внутренние балансы + журнал; раздельные балансы одного получателя (агентские комиссии / реферальная программа / удержание агентства / доход и транзит ПИН)ADR-0065
16Удержание ПИН и реферальные ставки (финансовый контур rewards)Удержание платформы и реферальные ставки — конфигурируемые параметры финансового контура rewardsADR-0066
17Когда начисляется вознаграждениеГейт получения денег: начисление в wallet по акту поступления средств, а не по факту достижения этапа сделкиADR-0067
18Ставки комиссий/рефералов — глобальные или контекстныеScoped + time-bounded конфигурация ставок: по scope (платформа/агентство/проект) и периоду действияADR-0068
19Несколько агентов в одной сделкеCo-broking: расщепление комиссии между несколькими агентами (дизайн, v-next)ADR-0069
20Агент состоит более чем в одном агентствеМульти-агентство: членства агента + контекст активного агентстваADR-0070
21Кому принадлежат процессы CRM и как моделируются участникиВладение процессами CRM компанией + единая record-level модель участниковADR-0071
22Что происходит при увольнении/исключении агентаКаскад доступа: отзыв прав, переназначение владения, судьба фиксаций/броней/сделокADR-0072

Расхождения источников (сводная таблица)

ТемаТЗ.mdМатрицы (ТехЗадание/)ПрототипПринято
Ролиper-company ACL/RBAC, инвестор, админ «сбоку»«8 ролей», Служба заботы, Менеджер ПИН, Агентствороли сделки SellManager/Investor/Agent8 ролей + внутренние роли компаний; роли сделки — из Workflows
Таймер брониРезерв 1 час; бронь по программе (4 ч / 10 дней)72 часаТаймеры = параметры программы бронирования застройщика
Инициатор брониИнвестор отправляет заявку; сделку создаёт агентUC: инвестор бронирует сам (9 этапов)кнопка «Забронировать» (форма ФИО+телефон)Обе точки входа; создание сделки — агент/менеджер ПИН
US-нумерацияUS-INV без 21; US-DEV 01–05+US-INV-21, +US-DEV-06..08, +US-MGR-01..06Полный набор из матриц
Аналитика доходности«история изменения цен» (ClickHouse)калькуляторы/ROI/PDFполная эконом-модель + серии, юр/физ + УСН/ОСНООбе части в invest-analytics; расчёт серверный
Программы покупкиспособ оплаты влияет на этапыипотека/рассрочка в фичах100%/5 рассрочек/ипотека, график платежей на клиентеСерверный расчёт в crm (booking)
Мессенджерсобственный сервис, TPH-событиячаты/ВКС/шаблоныСобственный мини-мессенджер (SignalR); чаты сделок по событиям CRM
Избранноеuser+session, заметки, слияниезаметки/экспорт PDFтолько localStorageБэкенд-сервис + миграция + слияние

Нефункциональные рамки (ADR-0056)

До 1 000 000 пользователей всего (≤20 000 агентов/менеджеров/менеджеров застройщиков; остальные — инвесторы); одновременно активных 1 000–10 000. Не усложнять: без микрооптимизаций и сложных паттернов «на вырост»; PostgreSQL — основная СУБД (Redis не используется в sessions/favorites/selections; ClickHouse — история цен в invest-analytics и view-статистика застройщиков в dev-stats, ADR-0057). Обязательный трекинг: длительность сессий, длительность и число просмотров каждого лота (механизм — ADR-0056 п.3); глубина статистики для застройщиков — 3 года.

Требования к оформлению детальных ТЗ

Каждый метод (endpoint/consumer/producer) — по CQRS с полными входами/выходами (поле, тип, описание, ограничения, валидация) и алгоритмом 8 шагов (01-engineering-rules/algorithm-documentation-rules.md); каждая сущность — по колонкам (типы, PK/FK/constraints; jsonb/VO/EF owned types строго типизированы); события — IKafkaEvent + outbox; диаграммы mermaid обязательны; принцип «один дом + ссылка». Шаблоны — docs/99-templates/; реальный SDK — docs/11-backend-sdk/.

Traceability

Полнота покрытия проверяется на каждом батче: каждый раздел/абзац ТехЗадание.md (строки 27–660) и каждая строка рабочих листов матриц (Лист1, US Сделка, ролевые листы) должны иметь соответствие в детальных ТЗ. Навигация «возможность → контекст → ТЗ» ведётся в prototype-mapping.md.

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

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