G-SERVICE Docs
Архитектура ISP (OSS/BSS)

Полная карта системы

Детализированная архитектурная карта ISP-платформы — все сервисы, взаимодействия, бизнес-процессы, события, use cases и domain entities.

Полная карта системы ISP-платформы

Эта страница — единый источник правды обо всей системе. Здесь описаны все микросервисы, их взаимодействия, бизнес-процессы, доменные сущности и инфраструктура — вплоть до отдельных функций (use cases) и событий.


1. Высокоуровневая архитектура

Общая схема: 9 микросервисов (6 NestJS + 3 Go), фронтенд, инфраструктура.

Loading diagram...

2. Сервисы и порты

#СервисRuntimeПортБаза данныхДоп. инфра
1customer-coreNestJS v113010customer_core_dbRedis, S3 (MinIO), RabbitMQ
2product-catalogNestJS v113011product_dbRedis, RabbitMQ
3billingNestJS v113012billing_dbRedis, BullMQ, RabbitMQ
4notificationNestJS v113013notification_dbRedis, BullMQ, RabbitMQ, SMTP
5omsNestJS v113014oms_dbRedis, BullMQ, RabbitMQ
6network-inventoryNestJS v113015inventory_dbRedis, BullMQ, RabbitMQ
7provisioningGo 1.238080customer_core_dbRabbitMQ
8aaaGo 1.238081PostgreSQL (RADIUS)FreeRADIUS
9mediationGo 1.238082TimescaleDBMinIO (S3), RabbitMQ
10webNext.js 163000Keycloak (OIDC)

3. Внутренняя архитектура сервиса (Clean Architecture)

Каждый NestJS-сервис построен по единому шаблону:

Loading diagram...

4. RabbitMQ — Полная топология событий и команд

4.1 Exchanges

ExchangeТипОписание
isp.events.customertopicСобытия Customer Core
isp.events.producttopicСобытия Product Catalog
isp.events.billingtopicСобытия Billing
isp.events.omstopicСобытия OMS
isp.events.notificationtopicСобытия Notification
isp.events.provisioningtopicСобытия Provisioning (Go)
isp.events.inventorytopicСобытия Network Inventory
isp.events.mediationtopicСобытия Mediation (Go)
isp.commands.provisioningtopicКоманды к Provisioning/Notification
isp.commands.inventorytopicКоманды к Network Inventory

4.2 Полная карта событий

Loading diagram...

4.3 Полная карта команд

Loading diagram...

4.4 Все события (routing keys)

Routing KeyExchangePublisherConsumersОписание
customer.createdisp.events.customercustomer-corebillingАвто-создание billing account
customer.updatedisp.events.customercustomer-coreОбновление профиля
contract.signedisp.events.customercustomer-coreПодписание договора
contract.terminatedisp.events.customercustomer-coreРасторжение договора
payment.receivedisp.events.billingbillingnotificationУведомление о платеже
balance.negativeisp.events.billingbillingnotificationУведомление о минусовом балансе
balance.updatedisp.events.billingbillingОбновление баланса (charge)
dunning.stage_changedisp.events.billingbillingproduct-catalog, notificationБлокировка подписок / уведомление
invoice.issuedisp.events.billingbillingnotificationУведомление о счёте
subscription.activatedisp.events.productproduct-catalogАктивация подписки
subscription.suspendedisp.events.productproduct-catalogПриостановка подписки
subscription.terminatedisp.events.productproduct-catalogПрекращение подписки
subscription.tariff_changedisp.events.productproduct-catalogСмена тарифа
order.createdisp.events.omsomsСоздание заказа
order.completedisp.events.omsomsЗавершение заказа
order.failedisp.events.omsomsОшибка заказа
order.cancelledisp.events.omsomsОтмена заказа
order.step_completedisp.events.omsomsШаг саги завершён
provisioning.successisp.events.provisioningprovisioning (Go)omsПровижнинг успешен
provisioning.failedisp.events.provisioningprovisioning (Go)omsПровижнинг ошибка
port.reservedisp.events.inventorynetwork-inventoryomsПорт зарезервирован
port.releasedisp.events.inventorynetwork-inventoryomsПорт освобождён
resource.exhaustedisp.events.inventorynetwork-inventoryРесурсы исчерпаны
device.status_changedisp.events.inventorynetwork-inventoryСтатус устройства изменён
availability.checkedisp.events.inventorynetwork-inventoryРезультат проверки ТВ

4.5 Все команды (routing keys)

Routing KeyExchangePublisher(s)ConsumerОписание
access.suspendisp.commands.provisioningoms, billingprovisioning (Go)Блокировка доступа
access.resumeisp.commands.provisioningoms, billingprovisioning (Go)Разблокировка доступа
service.activateisp.commands.provisioningomsprovisioning (Go)Активация услуги на OLT
service.deactivateisp.commands.provisioningomsprovisioning (Go)Деактивация услуги
send_notificationisp.commands.provisioningomsnotificationОтправка уведомления
terminate_subscriptionisp.commands.provisioningomsПрекращение подписки
generate_final_invoiceisp.commands.provisioningomsГенерация финального счёта
check_availabilityisp.commands.inventorycustomer-corenetwork-inventoryПроверка техвозможности

5. ConnectRPC — Все API endpoints

5.1 CustomerService (customer-core :3010) — 21 RPC

Loading diagram...
RPCДоступОписание
CreateCustomerCRM onlyСоздание клиента (физ/юр лицо)
GetCustomerCRM onlyПолучение по ID
ListCustomersCRM onlyСписок с фильтрацией и пагинацией
UpdateCustomerCRM onlyОбновление профиля
ChangeCustomerStatusCRM onlyFSM-переход статуса
SoftDeleteCustomerCRM onlyМягкое удаление
GetMyProfileAny authПрофиль из JWT email (портал)
ListAuditLogsCRM onlyАудит-лог
SearchCustomersCRM onlyПолнотекстовый поиск
CreateContractCRM onlyСоздание договора
GetContractOwner-or-CRMПолучение договора
ListContractsOwner-or-CRMСписок договоров клиента
SignContractCRM onlyПодписание (FSM: draft→active)
TerminateContractCRM onlyРасторжение
CreateContactCRM onlyДобавление контакта
ListContactsCRM onlyСписок контактов
UpdateContactCRM onlyОбновление контакта
DeleteContactCRM onlyУдаление контакта
CreateAddressCRM onlyДобавление адреса
ListAddressesCRM onlyСписок адресов
UpdateAddressCRM onlyОбновление адреса
DeleteAddressCRM onlyУдаление адреса

5.2 BillingService (billing :3012) — 11 RPC

RPCДоступОписание
GetAccountOwner-or-CRMЛицевой счёт по customerId
ListAccountsCRM onlyСписок всех ЛС провайдера
ProcessPaymentCRM onlyПриём платежа
ProcessRefundCRM onlyВозврат средств
AdjustBalanceCRM onlyРучная корректировка баланса
GetInvoiceOwner-or-CRMСчёт по ID
ListInvoicesOwner-or-CRMСписок счетов
ListTransactionsOwner-or-CRMЖурнал транзакций
GenerateInvoiceCRM onlyГенерация счёта за период
ChangeAccountStatusCRM onlyFSM-переход статуса ЛС
GetBillingStatsCRM onlyАгрегированная статистика

5.3 ProductService (product-catalog :3011) — 11 RPC

RPCДоступОписание
CreateProductOfferingCRM onlyСоздание тарифного плана
GetProductOfferingAny authПолучение по ID
ListProductOfferingsAny authКаталог тарифов
UpdateProductOfferingCRM onlyОбновление тарифа
ActivateSubscriptionCRM onlyАктивация подписки
GetSubscriptionOwner-or-CRMПодписка по ID
ListSubscriptionsOwner-or-CRMПодписки клиента
ChangeTariffCRM onlyСмена тарифа
SuspendSubscriptionCRM onlyПриостановка подписки
TerminateSubscriptionCRM onlyПрекращение подписки
ReactivateSubscriptionCRM onlyРеактивация подписки

5.4 OrderService (oms :3014) — 4 RPC

RPCДоступОписание
CreateOrderCRM onlyСоздание заказа (запуск саги)
GetOrderCRM onlyПолучение по ID
ListOrdersCRM onlyСписок заказов
CancelOrderCRM onlyОтмена (компенсирующие действия)

5.5 NotificationService (notification :3013) — 10 RPC

RPCДоступОписание
SendNotificationCRM onlyОтправка по шаблону
GetDeliveryStatusCRM onlyСтатус доставки
ListNotificationsCRM onlyУведомления клиента
ListTemplatesCRM onlyШаблоны
CreateTemplateCRM onlyСоздание шаблона
UpdateTemplateCRM onlyОбновление шаблона
DeleteTemplateCRM onlyУдаление шаблона
ListAnnouncementsCRM onlyОбъявления
CreateAnnouncementCRM onlyСоздание объявления
DeleteAnnouncementCRM onlyУдаление объявления

5.6 InventoryService (network-inventory :3015) — 13 RPC

RPCДоступОписание
RegisterDeviceCRM onlyРегистрация устройства
GetDeviceCRM onlyУстройство по ID
ListDevicesCRM onlyСписок устройств
UpdateDeviceCRM onlyОбновление устройства
ChangeDeviceStatusCRM onlyFSM-переход статуса
ReservePortCRM onlyРезервирование порта (TTL)
ReleasePortCRM onlyОсвобождение порта
AllocateIPCRM onlyВыделение IP из пула
ReleaseIPCRM onlyОсвобождение IP
CheckAvailabilityCRM onlyПроверка техвозможности
ListIPPoolsCRM onlyПулы IP-адресов
ListIPAddressesCRM onlyIP-адреса в пуле
SearchIPByAddressCRM onlyПоиск IP по адресу

5.7 ProvisioningService (provisioning :8080) — 6 RPC

RPCОписание
ProvisionAccessНастройка порта OLT/BRAS, VLAN, QoS
SuspendAccessБлокировка доступа (dunning)
ResumeAccessРазблокировка доступа
DeprovisionAccessПолное отключение
ChangeQoSСмена скорости/VLAN
GetProvisioningStateТекущее состояние

5.8 AAAService (aaa :8081) — 4 RPC

RPCОписание
SendCoARADIUS Change of Authorization
DisconnectSessionRADIUS Disconnect-Request
GetActiveSessionsАктивные сессии абонента
GetAccountingHistoryИстория RADIUS accounting

5.9 MediationService (mediation :8082) — 3 RPC

RPCОписание
GetTrafficStatsСтатистика трафика абонента
GetTopTalkersТоп потребителей полосы
GetInterfaceUtilizationУтилизация интерфейса

6. Domain Entities — Полная карта

6.1 Сводная таблица

СервисEntityТипКлючевые поля
customer-coreCustomerAggregateRootid, providerId, type, displayName, email, phone, status
ContractEntityid, customerId, contractNumber, status (FSM)
ContactEntityid, customerId, type, value
AddressEntityid, customerId, fiasId, building, apartment
DocumentEntityid, customerId, type, s3Key
AuditLogEntity (immutable)id, entityType, entityId, action, changes
billingAccountAggregateRootid, customerId, balance (Money), status, dunningStage
TransactionEntityid, accountId, type, amount (Money), balanceAfter
InvoiceEntityid, accountId, invoiceNumber, totalAmount, period
PaymentEntityid, accountId, gateway, externalId
product-catalogProductOfferingAggregateRootid, name, downloadSpeed, uploadSpeed, monthlyPrice
SubscriptionAggregateRootid, customerId, productOfferingId, status (FSM)
PriceComponentEntityid, offeringId, type, period, amount
PriceRuleEntityid, discountType, conditions
BundleEntityid, name, offeringIds
ServiceInstanceEntityid, subscriptionId, type, params
omsOrderAggregateRootid, customerId, type, status (FSM), priority, steps
FieldServiceEntityid, orderId, technicianId, scheduledAt
notificationNotificationAggregateRootid, customerId, templateId, channel, status
NotificationPreferenceEntitycustomerId, channel, enabled
network-inventoryDeviceAggregateRootid, hostname, type, vendor, model, status, ports[]

6.2 Связи между entities (cross-service)

Loading diagram...

7. Use Cases — Полный реестр

7.1 Customer Core (20 use cases)

Loading diagram...
#Use CaseTriggersSide Effects
1CreateCustomerRPCcustomer.created event → billing auto-creates account
2GetCustomerRPC
3ListCustomersRPC
4SearchCustomersRPCFull-text поиск
5ChangeCustomerStatusRPCFSM validation → customer.updated event
6GetMyProfileRPC (portal)Resolve from JWT email
7CreateContractRPC
8GetContractRPCOwnership check
9SignContractRPCFSM: draft→active → contract.signed event
10TerminateContractRPCcontract.terminated event
11CreateContactRPC
12ListContactsRPC
13DeleteContactRPCSoft delete
14CreateAddressRPC
15ListAddressesRPC
16DeleteAddressRPCSoft delete
17ListDocumentsRPC
18GetDocumentUrlRPCPresigned S3 URL
19ListAuditLogsRPC
20CheckAvailabilityRPCcheck_availability command → network-inventory

7.2 Billing (14 use cases)

#Use CaseTriggersSide Effects
1GetOrCreateAccountEvent: customer.createdАвто-создание ЛС
2GetAccountRPC
3ListAccountsRPC
4ProcessPaymentRPCpayment.received event → notification
5ProcessRefundRPCВозврат средств
6AdjustmentRPCРучная корректировка баланса
7ChargeAccountInternal/BullMQСписание → balance.updated event
8GenerateInvoiceRPC/BullMQinvoice.issued event → notification
9ListInvoicesRPC
10ListTransactionsRPC
11ChangeDunningStageBullMQdunning.stage_changed event → product-catalog, notification
12ChangeAccountStatusRPCFSM validation
13GetBillingStatsRPCAggregated stats
14ProrateTariffChangeInternalПропорциональный перерасчёт при смене тарифа

7.3 Product Catalog (11 use cases)

#Use CaseTriggersSide Effects
1CreateProductOfferingRPC
2GetProductOfferingRPC
3ListProductOfferingsRPC
4UpdateProductOfferingRPC
5ActivateSubscriptionRPCsubscription.activated event
6SuspendSubscriptionRPC/Eventsubscription.suspended event
7TerminateSubscriptionRPCsubscription.terminated event
8ReactivateSubscriptionRPC
9ChangeTariffRPCsubscription.tariff_changed event
10CalculatePricingInternalРасчёт стоимости с учётом скидок
11CreateBundleRPCСоздание бандла из тарифов
12CreatePriceComponentRPCКомпонент цены

7.4 OMS (4 use cases)

#Use CaseTriggersSide Effects
1CreateOrderRPCorder.created event, запуск SagaEngine
2GetOrderRPC
3ListOrdersRPC
4CancelOrderRPCorder.cancelled event, компенсации

7.5 Notification (13 use cases)

#Use CaseTriggersSide Effects
1SendNotificationRPC/CommandEmail (SMTP), SMS, Push
2GetDeliveryStatusRPC
3ListNotificationsRPC
4CreateTemplateRPC
5UpdateTemplateRPC
6DeleteTemplateRPCSoft delete
7ListTemplatesRPC
8CreateAnnouncementRPC
9DeleteAnnouncementRPCHard delete
10ListAnnouncementsRPC
11GetNotificationPreferencesRPC
12SetNotificationPreferenceRPC
13UpdateDeliveryStatusWebhook/Internal

7.6 Network Inventory (10 use cases)

#Use CaseTriggersSide Effects
1RegisterDeviceRPC
2GetDeviceRPC
3ListDevicesRPC
4UpdateDeviceRPC
5ChangeDeviceStatusRPCFSM → device.status_changed event
6ReservePortRPCTTL reservation → port.reserved event
7ReleasePortRPC/BullMQ TTLport.released event
8AllocateIPRPCВыделение IP из пула
9ReleaseIPRPCВозврат IP в пул
10CheckAvailabilityCommandПоиск свободного порта → availability.checked event
11BindServiceInstanceRPCПривязка к подписке

7.7 Provisioning Go (use cases)

Use CaseTriggersSide Effects
ProvisionAccessRabbitMQ commandКонфигурация OLT/BRAS → provisioning.success/failed event
OutboxRelayPeriodic tickerРетрансляция outbox → RabbitMQ
ReconcileCommand/CronСверка состояний с оборудованием

7.8 AAA Go (use cases)

Use CaseTriggersSide Effects
ProfileUseCaseConnectRPCCRUD radcheck/radreply (FreeRADIUS SQL)
CoAUseCaseConnectRPCUDP RADIUS CoA/Disconnect к NAS
SessionUseCaseConnectRPCЧтение radacct (accounting)

7.9 Mediation Go (use cases)

Use CaseTriggersSide Effects
AggregateUseCasePeriodicАгрегация Netflow/IPFIX → TimescaleDB
FlushUseCasePeriodicАрхивация CDR → MinIO (S3)

8. Бизнес-процессы (Workflows)

8.1 Подключение нового абонента (Order-to-Activate)

Loading diagram...

8.2 Dunning (блокировка за неоплату)

Loading diagram...

8.3 Смена тарифа

Loading diagram...

8.4 Отключение абонента

Loading diagram...

9. Аутентификация и авторизация

Loading diagram...

RBAC модель

Loading diagram...

10. Инфраструктура

10.1 Зависимости сервисов от инфраструктуры

Loading diagram...

10.2 Базы данных

СервисБДОписание
customer-corecustomer_core_dbКлиенты, договора, контакты, адреса, документы
product-catalogproduct_dbТарифы, подписки, цены, бандлы
billingbilling_dbЛС, транзакции, счета, платежи
notificationnotification_dbУведомления, шаблоны, preferences
omsoms_dbЗаказы, шаги саг, field service
network-inventoryinventory_dbУстройства, порты, IP-пулы
aaaPostgreSQL (RADIUS)radcheck, radreply, radacct (FreeRADIUS SQL)
mediationTimescaleDBNetflow/IPFIX hypertables, CDR
keycloakkeycloak_dbRealm, users, clients, roles

10.3 Kubernetes (Production)

Loading diagram...

10.4 Домены

ДоменСервисTLS
money-bill.ruWeb UILet's Encrypt
api.money-bill.ruAPI GatewayLet's Encrypt
argocd.money-bill.ruArgoCD UILet's Encrypt
grafana.money-bill.ruGrafanaLet's Encrypt

11. Общие пакеты (nestjs-common)

Loading diagram...

Schema helpers (Drizzle)

HelperНазначение
pkId()UUID primary key, gen_random_uuid()
providerIdCol()provider_id varchar(100) NOT NULL
createdAtCol()created_at timestamptz DEFAULT now()
updatedAtCol()updated_at timestamptz DEFAULT now()
deletedAtCol()deleted_at timestamptz (soft delete)
versionCol()version integer DEFAULT 1 (optimistic locking)
currencyCodeCol()Currency enum column with proper typing
standardColumns()id + providerId + timestamps + deletedAt + version
timestampColumns()createdAt + updatedAt
enumToPgEnum()Domain const enum → PostgreSQL enum type

12. Frontend архитектура (FSD)

Loading diagram...

Entity слайсы (import pattern)

import { useListCustomers, customerKeys } from '@/entities/customer'
import { usePortalCustomer } from '@/features/portal-session'

Каждый entity слайс содержит:

  • api/use-*.ts — React Query hooks
  • api/query-keys.ts — фабрика ключей
  • api/prefetch.ts — SSR prefetch
  • index.ts — barrel export

13. Сводная диаграмма потоков данных

Loading diagram...

On this page

Полная карта системы ISP-платформы1. Высокоуровневая архитектура2. Сервисы и порты3. Внутренняя архитектура сервиса (Clean Architecture)4. RabbitMQ — Полная топология событий и команд4.1 Exchanges4.2 Полная карта событий4.3 Полная карта команд4.4 Все события (routing keys)4.5 Все команды (routing keys)5. ConnectRPC — Все API endpoints5.1 CustomerService (customer-core :3010) — 21 RPC5.2 BillingService (billing :3012) — 11 RPC5.3 ProductService (product-catalog :3011) — 11 RPC5.4 OrderService (oms :3014) — 4 RPC5.5 NotificationService (notification :3013) — 10 RPC5.6 InventoryService (network-inventory :3015) — 13 RPC5.7 ProvisioningService (provisioning :8080) — 6 RPC5.8 AAAService (aaa :8081) — 4 RPC5.9 MediationService (mediation :8082) — 3 RPC6. Domain Entities — Полная карта6.1 Сводная таблица6.2 Связи между entities (cross-service)7. Use Cases — Полный реестр7.1 Customer Core (20 use cases)7.2 Billing (14 use cases)7.3 Product Catalog (11 use cases)7.4 OMS (4 use cases)7.5 Notification (13 use cases)7.6 Network Inventory (10 use cases)7.7 Provisioning Go (use cases)7.8 AAA Go (use cases)7.9 Mediation Go (use cases)8. Бизнес-процессы (Workflows)8.1 Подключение нового абонента (Order-to-Activate)8.2 Dunning (блокировка за неоплату)8.3 Смена тарифа8.4 Отключение абонента9. Аутентификация и авторизацияRBAC модель10. Инфраструктура10.1 Зависимости сервисов от инфраструктуры10.2 Базы данных10.3 Kubernetes (Production)10.4 Домены11. Общие пакеты (nestjs-common)Schema helpers (Drizzle)12. Frontend архитектура (FSD)Entity слайсы (import pattern)13. Сводная диаграмма потоков данных