3.1 Клиенты и группы клиентов (CRM) — Декомпозиция

Источники

СлойДокумент
ТребованиеBR 3.1
RoadmapRoadmap — Фаза 0
Бизнес-спекаКлиенты
Бизнес-спекаГруппы клиентов
Бизнес-спекаРоли (обновлена — новые permissions)
Бизнес-спекаЗаказы (обновлена — поле Клиент)
БэкендCustomer Service — Overview (новый)
БэкендCustomer Service — API
БэкендCustomer Service — Data Model
БэкендCustomer Service — Events
БэкендOrder Service — Data Model (обновлён — customer_id)
БэкендOrder Service — API (+2 endpoint + internal summary)
БэкендOrder Service — Events (order.completed обогащён)
БэкендUser Service — API (permission-catalog расширен)
ФронтендКлиенты — Список
ФронтендКлиенты — Карточка
ФронтендГруппы — Список
ФронтендГруппы — Карточка
ФронтендUI-гейтинг (обновлён)
ФронтендPOS — Прикрепление клиента

Прогресс

  • Customer Service — новый микросервис с нуля (репо erp-customer-service создан, пустой)
  • Order Serviceorders.customer_id + 2 endpoint + internal customer-summary + обогащение order.completederp-order-service@9adbfa3 (миграция 006, т.к. 005 занят aggregator-statuses)
  • User Service — расширение permission-catalog (6 новых ключей) + миграция системной роли «Администратор» — erp-user-service@ea7ecde
  • Admin Franchise — BFF proxy + Web разделы «Клиенты» и «Группы клиентов» + блок «Клиент» в карточке заказа
  • POS — flow прикрепления клиента к заказу (репо erp-pos в bootstrap; объём зависит от текущего прогресса POS)

Порядок реализации

  1. User Service — быстрый первый шаг
    • Расширить PermissionCatalog.java — добавить разделы customers и customer_groups, POS-permission customers.create_quick
    • Миграция: выдать новые permissions системной роли «Администратор» во всех существующих франшизах
  2. Customer Service — ядро BR (репо уже создан пустым)
    • Spring Boot init: pom.xml, application.yml, Dockerfile
    • Liquibase 4 changeset (customers, addresses, groups, group_members)
    • Entity/Repository/DTO
    • CRUD + search + merge + soft delete/anonymize
    • Scheduler для dynamic групп
    • Kafka producer (4 события) + consumer order.completed
    • Internal endpoints
  3. Order Service — параллельно с Customer Service
    • Миграция orders.customer_id + индекс
    • PATCH/DELETE /orders/{id}/customer
    • GET /internal/orders/customer-summary
    • Обогатить payload order.completed полем customer_id
  4. Admin Franchise — после Customer + Order
    • BFF proxy routes для /admin/customers/*, /admin/customer-groups/*
    • BFF агрегация в карточке клиента (Customer + Order → вкладка «Заказы»)
    • Web: новый раздел «Клиенты» + «Группы клиентов»
    • Web: блок «Клиент» в /orders/:id
  5. POS — после всего
    • POS BFF proxy routes для /pos/customers/search, /pos/customers, /pos/orders/{id}/customer
    • POS UI: кнопка «Клиент» на экране заказа + модалка поиска/quick-create

Зависимости между сервисами

flowchart LR
    US["User Service<br/>(permission-catalog)"] --> CS["Customer Service<br/>(новый)"]
    CS --> OS["Order Service<br/>(+customer_id, customer-summary)"]
    CS --> AF["Admin Franchise<br/>(BFF+Web)"]
    OS --> AF
    AF --> POS["POS BFF+UI"]
    CS --> POS

    style US fill:#1a1a2e,stroke:#e94560,color:#fff
    style CS fill:#2d6a4f,stroke:#40916c,color:#fff
    style OS fill:#16213e,stroke:#533483,color:#fff
    style AF fill:#0f3460,stroke:#f72585,color:#fff
    style POS fill:#b5179e,stroke:#f72585,color:#fff

Deferred (закреплено в BR 3.1)

  • UI объединения дубликатов — MVP только API POST /customers/{id}/merge
  • Автообнаружение дубликатов — отдельная BR
  • Импорт клиентов из Excel — отдельная BR (с compliance)
  • Клиентская авторизация (регистрация через мобильное приложение / сайт + OTP) — отдельная BR 3.5
  • Customer BFF — личный кабинет клиента — BR 3.6
  • Динамические правила «по баллам лояльности» — BR 3.3 (требует Loyalty Service)
  • Процесс сбора согласия на обработку ПД по ФЗ-152 — compliance BR
  • LTV/когортная аналитика, customer revenue report — отдельная BR после накопления данных

Разовая миграция при деплое

  1. User Service — изменение константы PermissionCatalog.java + разовая SQL миграция для выдачи новых permissions системной роли «Администратор» во всех франшизах
  2. Customer Service — новая БД customer_db создаётся через Liquibase автоматически при старте
  3. Order Service — миграция ALTER TABLE orders ADD COLUMN customer_id uuid NULL + индекс
  4. После деплоя — smoke-тесты:
    • Логин пользователя → GET /roles/permission-catalog → новые permissions видны
    • POST /customers с quick-data → клиент создан
    • POST /customer-groups type=dynamic → группа с правилами создана
    • Сгенерировать тестовый order.completed с customer_id → убедиться что Customer Service пересчитал группы (GET /customers/{id} → вкладка Группы)

Ссылки