@startuml participant "Топик сообщений" as Topic participant "Сервис обработки" as Service participant "База данных" as DB participant "МСКБ API" as MSKB participant "Bifrost API" as Bifrost participant "CRM API" as CRM participant "TOUCH API" as TOUCH Topic -> Service: Сообщение с letter_guid,\ncontractor_guid,\ncontact_person_guid,\ncommodity_guid activate Service Service -> DB: Проверить заказ по autoBotLetterGuid=letter_guid alt Заказ уже существует Service --> Topic: Пропустить сообщение deactivate Service else Заказа нет Service -> Service: Валидация contractor_guid alt contractor_guid пустой Service -> DB: Найти контрагента по contact_person_guid\nв последних заказах alt Контрагент не найден Service --> Topic: Завершить обработку deactivate Service else Найден contractor_guid end else несколько contractor_guid Service -> DB: Найти последний завершенный заказ\nдля каждого contractor_guid end Service -> Service: Валидация contact_person_guid alt contact_person_guid пустой Service -> MSKB: /api/business/v2/physic/\nпоиск по letter_from alt Не найдено Service -> DB: Найти в последнем заказе\nпо contractor_guid end end Service -> Service: Валидация commodity_guid alt commodity_guid пустые Service --> Topic: Завершить обработку deactivate Service end Service -> DB: Найти последний завершенный заказ\nдля получения shipment данных Service -> MSKB: /api/business/v2/juristic/search\nполучить GUID менеджера Service -> Bifrost: bifrost.v1.ActiveDirectoryService/GetUserByID\nпроверить email менеджера alt email != letter_to Service --> Topic: Завершить обработку deactivate Service end Service -> Service: Создать заказ Service -> DB: createOrder Service -> Service: Автооформление заказа (flowId=6) Service -> DB: Обновить заказ\n(IsAutoBotOrder=true,\nautoBotLetterGuid=letter_guid) Service -> CRM: Создать задачу менеджеру\n"Заказ не прошел АО..." Service -> TOUCH: /api/v1/jsonapi/send-email-message\nОповестить менеджера Service --> Topic: Обработка завершена deactivate Service end @enduml