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

OMS (Order Management Service)

Saga-оркестратор заказов: подключение, смена тарифа, расторжение, ремонт.

OMS — Order Management Service

Bounded Context: Order Orchestration
Владелец данных: Order, OrderStep
Технологии: NestJS (Bun 1.3+), Drizzle ORM, PostgreSQL, ConnectRPC, RabbitMQ, BullMQ, Redis

Ответственность

OMS — центральный оркестратор всех бизнес-процессов, требующих координации нескольких сервисов. Реализует паттерн Saga (Orchestration). Аналог модулей Order Management в Hydra Billing и Scheduling в Splynx.

  • Orders: Создание, отслеживание, приоритизация заказов. Полная трассировка каждого шага.
  • Saga Engine: Последовательное выполнение шагов с компенсацией при ошибке. Каждый тип заказа = отдельный Saga Definition.
  • Timeout Control: Мониторинг зависших шагов, автоматический retry или эскалация. Configurable per-step TTL.
  • FSM Integration: Координация с Field Service Management (выезды монтажников, склад, мобильное приложение).
  • Priority Queue: Заказы обрабатываются с учётом приоритета (critical > high > medium > low). VIP-клиенты получают elevated priority.

Ключевые принципы OMS

ПринципОписание
Stateful OrchestratorOMS хранит полное состояние заказа (текущий шаг, контекст, ретраи). При рестарте — продолжает с последнего шага
Command/Event drivenOMS отправляет команды в RabbitMQ и ждёт ответных событий. Не вызывает сервисы синхронно
Compensation = обратный порядокПри ошибке — компенсирующие команды в обратном порядке выполненных шагов
Idempotent stepsКаждый шаг Saga идемпотентен — повторная отправка команды не создаёт дублей
ObservableКаждый переход состояния = запись в audit + метрика. Дашборд показывает bottlenecks в реальном времени

Агрегат: Order

Loading diagram...

Типы заказов

ТипОписаниеШаги Saga
NEW_CONNECTIONНовое подключениеReservePort → CreateSubscription → ChargeAccount → Provision → Complete
TARIFF_CHANGEСмена тарифаChangeSubscription → Recalculate → ChangeSpeed → Complete
DISCONNECTIONРасторжениеTerminateSubscription → FinalCharge → Deactivate → ReleasePort → Complete
REPAIRРемонтCreateFSMTask → WaitCompletion → Verify → Complete
EQUIPMENT_REPLACEMENTЗамена CPECreateFSMTask → Deactivate → Activate(new) → Complete
SUSPENSIONПриостановкаSuspendSubscription → SuspendAccess → Complete
RESUMPTIONВозобновлениеResumeSubscription → ResumeAccess → Complete

Saga: New Connection (подробно)

Loading diagram...

Компенсация при ошибке (Provisioning FAIL):

Loading diagram...

ConnectRPC API

service OrderService {
  rpc CreateOrder(CreateOrderRequest) returns (CreateOrderResponse);
  rpc GetOrder(GetOrderRequest) returns (GetOrderResponse);
  rpc ListOrders(ListOrdersRequest) returns (ListOrdersResponse);
  rpc CancelOrder(CancelOrderRequest) returns (CancelOrderResponse);
  rpc RetryOrder(RetryOrderRequest) returns (RetryOrderResponse);
}
МетодRBACОписание
CreateOrderisp-operator+Создать заказ (idempotent)
GetOrderisp-viewer+Статус заказа + все шаги
ListOrdersisp-viewer+Список заказов (фильтр по customer, status, type)
CancelOrderisp-operator+Отмена (если возможно на текущем шаге)
RetryOrderisp-admin+Повторить провалившийся заказ

Входящие события (RabbitMQ)

OMS не публикует свои события, но потребляет события от других сервисов для продвижения Saga:

ExchangeRouting KeyQueueОписание
customer.eventscontract.signedoms.q.contract-signedИнициировать NEW_CONNECTION
billing.eventspayment.receivedoms.q.payment-receivedПроверка: ожидает ли Saga оплату
provisioning.eventsprovisioning.successoms.q.provisioning-resultSaga: шаг завершён
provisioning.eventsprovisioning.failedoms.q.provisioning-resultSaga: шаг провален → компенсация
fsm.eventswork.completedoms.q.fsm-resultFSM: монтаж завершён
fsm.eventswork.failedoms.q.fsm-resultFSM: монтаж провален

Исходящие команды (RabbitMQ)

ExchangeRouting KeyОписание
provisioning.commandsservice.activateАктивация на оборудовании
provisioning.commandsservice.deactivateДеактивация
billing.commandscharge.accountСписание (шаг Saga)
billing.commandsrefundВозврат (компенсация)
notification.commandssend.smsУведомление клиента

Background Jobs (BullMQ)

JobРасписаниеОписание
oms.timeout_checkКаждые 5 минПроверка зависших шагов (> SLA timeout)
oms.escalationКаждые 15 минЭскалация просроченных заказов
oms.cleanupЕжедневно, 05:00Архивация завершённых заказов (> 90 дней)

Ссылки:

On this page