BSS Слой (Бизнес)
Описание микросервисов уровня Business Support Systems — биллинг, CRM, управление продуктами, финансы и уведомления.
BSS Layer (Business Support Systems)
Слой BSS отвечает за управление деньгами, продуктами и клиентами. В новой архитектуре мы уходим от микро-фрагментации к более крупным доменным сервисам (Macroservices), чтобы снизить накладные расходы на согласованность данных.
Контекст рынка: Архитектура BSS-слоя спроектирована с учётом лучших практик ведущих ISP-платформ (Hydra Billing, Splynx, BillMax). В отличие от монолитных решений, наш BSS построен как набор слабосвязанных доменных сервисов, каждый из которых владеет своими данными и общается с остальными через Protobuf-контракты и события RabbitMQ.
Роль слоя BSS
BSS — это источник коммерческой правды. Он покрывает полный цикл Order-to-Cash (от заявки до получения денег):
- Кто клиент (персоны/юрлица, договоры, контакты, адреса, каналы продаж, KYC-верификация).
- Что ему продано (продукты, услуги, подписки, параметры услуги, бандлы, аренда оборудования).
- Сколько это стоит и что уже оплачено (баланс, начисления, платежи, задолженность, промо-акции).
- Как удерживать клиента (лояльность, персонализированные предложения, автоматический upsell, churn prediction).
Важно: BSS не "управляет сетью" напрямую. Он управляет договорными обязательствами и инициирует изменения через процессы/команды.
Order-to-Cash Pipeline
Полный бизнес-цикл от первого контакта до регулярного дохода:
| Этап | Сервис | Ключевое действие |
|---|---|---|
| Lead | Customer Core | Создание клиента, проверка техвозможности (availability check) |
| Quote | Product & Subscription | Расчёт стоимости с учётом промо, скидок, налогов |
| Order | OMS | Создание заказа, координация Saga-шагов |
| Fulfillment | Provisioning + FSM | Выезд монтажника, настройка оборудования, активация |
| Billing | Billing & Finance | Рекуррентные списания, biллинговые циклы, proration |
| Payment | Billing & Finance | Приём оплаты (банки, кассы, autopay), reconciliation |
| Revenue | Billing & Finance | Отчётность, ARPU, LTV, revenue recognition |
| Retention | Product + Notification | Churn prediction, персональные офферы, программы лояльности |
Границы ответственности
Чтобы избегать размывания доменов и циклических зависимостей, закрепляем простые правила:
- BSS делает:
- жизненный цикл клиента/договора;
- продуктовую модель (каталог, цены, скидки);
- финансовую модель (ledger, счета, оплаты, dunning);
- бизнес-уведомления (письма/смс о событиях: счет, долг, подключение).
- BSS не делает:
- провижининг на оборудовании, настройки профилей AAA;
- инвентаризацию портов/устройств и их состояние;
- сбор usage/сетевой телеметрии (это OSS/Mediation).
Владение данными (Single Source of Truth)
Ниже — ориентир, кто владеет сущностью, а кто её только читает/кэширует.
| Сущность | Владелец | Потребители (пример) |
|---|---|---|
| Customer / Contract | Customer Core | Billing, OMS, Support |
| ProductOffering / PricePlan | Product & Subscription | Billing, OMS |
| Subscription (Entitlement) | Product & Subscription | Provisioning (через события), Customer Core |
| Account / Balance / Ledger | Billing & Finance | OMS, Customer Core, Analytics |
| Invoice / Payment | Billing & Finance | Customer Portal (через API-агрегацию), Notification |
| Notification Template / Delivery | Notification | Все домены (как потребители событий) |
Примечание: OMS (Order Management System) и FSM (Field Service Management) не владеют бизнес-сущностями, а оркестрируют процессы над ними. Подробнее см. Бизнес-сценарии и Оркестрация.
Интеграционные контракты
BSS обычно участвует в процессах в двух режимах.
1) Синхронно (API для чтения и валидации)
Используется, когда нужен быстрый ответ для UI/оператора или для валидации шага оркестрации:
- поиск клиента/договора;
- расчёт предварительной стоимости (quote);
- проверка доступности продукта для клиента/адреса (бизнес-правила).
2) Асинхронно (команды/события для долгих операций)
Используется, когда процесс состоит из нескольких шагов и должен быть устойчивым к ретраям:
- события:
payment.received,balance.updated,subscription.activated; - команды:
access.suspend,access.resume,service.activate.
Практика: “деньги” и “продукты” публикуют факты (events), а процессы/OSS получают от них намерения (commands) через оркестрацию.
Надёжность денег (invariants)
Финансовый домен требует строгих гарантий:
- Двойная запись (Double-entry ledger): любая операция = проводки, а не “просто обновили баланс”.
- Идемпотентность платежей: внешний webhook/платёж может прийти повторно — вход должен быть защищён ключом/идентификатором операции.
- Reconciliation: сверка с банком/эквайрингом и восстановление расхождений (отдельный процесс).
- Audit log: неизменяемый журнал критичных действий (изменение тарифа, ручные корректировки, возвраты).
Ключевые сервисы
1. Customer Core Service
Единый источник правды о клиентах и партнерах.
- Объединяет функции:
- CRM: Профили, контакты, договоры.
- Address: Проверка технической возможности, зоны покрытия, ФИАС.
- Partners: Управление дилерами и иерархией реселлеров.
- События:
CustomerCreated,ContractSigned,PartnerRegistered.
ConnectRPC API (основные методы):
| Метод | RBAC | Описание |
|---|---|---|
GetCustomer | viewer+ | Получить клиента по ID |
SearchCustomers | viewer+ | Поиск по ФИО/ИНН/телефону |
CreateCustomer | operator+ | Создать клиента + контакты + адрес |
UpdateCustomer | operator+ | Изменить данные (с audit log) |
SignContract | operator+ | Подписать договор → event contract.signed |
ListServiceAreas | viewer+ | Зоны покрытия с координатами |
События (Exchange: isp.events.customer): customer.created, customer.updated, contract.signed, contract.terminated.
2. Product & Subscription Service
Управление коммерческим предложением и жизненным циклом услуг абонента. Аналог модулей Product Catalog в Hydra Billing и Tariff Plans в Splynx.
- Объединяет функции:
- Catalog: Тарифы, опции, бандлы, аренда оборудования (CPE/STB/ONT).
- Pricing Engine: Правила ценообразования, скидки, промо-акции, loyalty-программы, volume discounts.
- Subscriptions: Активные услуги клиента (Entitlements), переходы между статусами.
- Bundling: Комбинированные предложения (Internet + IPTV + Telephony) с общей скидкой.
- Логика: Здесь решается, что клиент купил и сколько это стоит.
- Важный принцип: параметры услуги (например, "скорость = 100") — часть продуктовой модели и должны быть переносимыми между BSS/OSS через контракт (event payload), а не "вычисляться на NAS".
Типы продуктов (по модели тарификации):
| Тип | Описание | Пример | Биллинг |
|---|---|---|---|
| Recurring | Фиксированная абонплата | Интернет 100 Мбит/с — 500₽/мес | Ежемесячное списание |
| Prepaid | Авансовый платёж | Интернет на 30 дней | Списание при активации |
| Usage-based | По потреблению | VoIP — 1.5₽/мин | По CDR/UDR из Mediation |
| One-time | Разовый платёж | Подключение — 1000₽ | При активации |
| Equipment rental | Аренда оборудования | Роутер Wi-Fi — 100₽/мес | Ежемесячное списание |
| Bundle | Пакет услуг | Internet + IPTV + VoIP | Единая цена пакета |
Маркетинговые механики (по аналогии с Hydra Billing):
- Промо-акции: Скидка X% на первые N месяцев, бесплатный пробный период.
- Loyalty Discounts: Автоматическая скидка при стаже абонента > 12 мес.
- Volume Discounts: Скидка при подключении нескольких услуг (cross-sell).
- Referral Program: Скидка за привлечение нового абонента.
- Seasonal Offers: Временные тарифы (лето/каникулы) с auto-expire.
Жизненный цикл подписки:
ConnectRPC API (основные методы):
| Метод | RBAC | Описание |
|---|---|---|
ListProducts | viewer+ | Каталог доступных тарифов |
GetProduct | viewer+ | Детали продукта + характеристики |
CreateSubscription | operator+ | Подписка клиента на продукт |
ChangeSubscription | operator+ | Смена тарифа (effective date) |
SuspendSubscription | finance+ | Приостановка услуги |
TerminateSubscription | operator+ | Расторжение |
События (Exchange: isp.events.product): subscription.activated, subscription.suspended, subscription.terminated, subscription.tariff_changed.
3. Billing & Finance Service
Финансовое сердце платформы. Реализует полный цикл Revenue Management — от тарификации до reconciliation с банками.
- Объединяет функции:
- Ledger: Балансы, транзакции, двойная запись (double-entry bookkeeping).
- Rating Engine: Расчёт стоимости с учётом тарифа, скидок, proration (пропорциональное списание при смене тарифа в середине периода).
- Billing Cycles: Рекуррентные списания (prepaid/postpaid), поддержка разных billing dates.
- Invoicing: Генерация счетов, актов и УПД (для юрлиц), интеграция с 1С.
- Payments: Интеграция с платежными шлюзами (Сбербанк, Тинькофф, ЮKassa, наличные, терминалы).
- Dunning: Многоступенчатая работа с задолженностью и финансовые блокировки.
- Autopay: Автоматическое списание с привязанной карты (recurring payments через токенизацию).
- Интеграция: При уходе в минус отправляет команды
access.suspend/access.resumeв RabbitMQ для OSS. - Outbox: Все исходящие события публикуются через outbox-паттерн для гарантии доставки.
Модели тарификации:
| Модель | Описание | Когда списывается |
|---|---|---|
| Prepaid (авансовая) | Клиент платит вперёд, баланс уменьшается ежедневно/ежемесячно | В начале периода. При исчерпании — suspend |
| Postpaid (кредитная) | Клиент пользуется, оплачивает по счёту | В конце периода. При неоплате — dunning |
| Hybrid | Prepaid + usage-based поверх (VoIP минуты, overage) | Абонплата prepaid + usage по CDR |
Proration (пропорциональный расчёт):
При смене тарифа в середине биллингового периода:
- Старый тариф: Возврат за неиспользованные дни (credit adjustment)
- Новый тариф: Списание за оставшиеся дни (prorated charge)
- Формула:
daily_rate = monthly_price / days_in_month,charge = daily_rate × remaining_days
Dunning pipeline (автоматический, конфигурируемый):
Настраиваемые параметры Dunning (по аналогии с Splynx/Hydra):
| Параметр | По умолчанию | Описание |
|---|---|---|
soft_warning_delay | D+0 | Дней до soft-уведомления |
hard_block_delay | D+3 | Дней до блокировки |
hard_block_speed | 64 kbps | Скорость при блокировке |
final_notice_delay | D+14 | Дней до финального предупреждения |
termination_delay | D+30 | Дней до расторжения |
write_off_delay | D+90 | Дней до списания безнадёжного долга |
grace_period | 0 дней | Льготный период после окончания оплаченного периода |
auto_resume_on_payment | true | Автоматическая разблокировка при поступлении оплаты |
ConnectRPC API (основные методы):
| Метод | RBAC | Описание |
|---|---|---|
GetBalance | viewer+ | Баланс и dunning-статус |
ListTransactions | viewer+ | История операций по аккаунту |
ProcessPayment | finance+ | Зачисление платежа (идемпотентно) |
ManualAdjust | finance+ | Ручная корректировка (с причиной, audit) |
GenerateInvoice | finance+ | Выставить счёт за период |
GetInvoice | viewer+ | Получить счёт (PDF/JSON) |
События (Exchange: isp.events.billing): payment.received, balance.negative, invoice.issued, dunning.stage_changed.
Команды (Exchange: isp.commands.provisioning): access.suspend, access.resume.
4. Notification Service
Универсальный шлюз уведомлений. Подписывается на события из всех доменов и доставляет уведомления клиентам/операторам.
- Каналы: SMS (SMPP/HTTP), Email (SMTP), Push (FCM/APNs), Telegram Bot, Webhook.
- Шаблоны: Шаблонизация через Handlebars / Nunjucks с переменными из event payload.
- Приоритеты:
critical(мгновенно) →high(< 1 мин) →normal(< 5 мин) →low(batch, 1 раз в час). - Дедупликация: По
(customer_id, template_id, event_id)— защита от повторных уведомлений. - Throttling: Не более N SMS в час на одного клиента (anti-spam).
Подписки на события:
| Событие | Шаблон | Канал |
|---|---|---|
contract.signed | "Добро пожаловать!" | Email + SMS |
payment.received | "Оплата {amount}₽ зачислена" | SMS |
balance.negative | "Задолженность, пополните баланс" | SMS + Push |
dunning.stage_changed (hard) | "Доступ ограничен" | SMS + Email |
subscription.activated | "Услуга {product} подключена" | SMS |
provisioning.failed | "Ошибка настройки, тикет создан" | Email (оператору) |
Ссылки по теме
- Микросервисы: Каждый BSS-сервис подробно — Customer Core, Product, Billing, Notification.
- Доменные модели: ER-диаграммы, события, Context Map, Data Ownership — Доменная логика.
- Бизнес-процессы: Workflow'ы с участием BSS и OMS — Бизнес-сценарии (Workflows).
- API: Protobuf-контракты, ConnectRPC, RabbitMQ exchanges — API-контракты.
- Legacy маппинг: Как book_orders декомпозируется в BSS-сервисы — Маппинг Legacy CRM.
- Метрики: ARPU, churn, платежи, dunning pipeline — Observability.
- Безопасность: Keycloak RBAC, аудит финансовых операций — Безопасность.
- Принципы: Aggregate Root, Value Object, UoW — Принципы архитектуры.