@startuml !theme plain title Обработка товарных позиций при корректировке start :Получена корректировка заказа; :Сравнить товары OMS и WTIS; partition "Определить операции с товарами" { :Товары для добавления; note right: Есть в OMS, нет в WTIS :Товары для удаления; note right: Есть в WTIS, нет в OMS :Товары для изменения; note right: Есть в обоих, но с отличиями } partition "Обработать изменения товаров" { if (Есть товары для изменения?) then (да) :Для каждого товара проверить изменения; if (Изменилось количество?) then (да) if (Товар в резерве?) then (да) :Создать копию с новым количеством; :Удалить избыточную часть; note right: Сложная логика split else (нет) :Изменить количество напрямую; endif endif if (Изменилась цена?) then (да) :Обновить цену и скидку; endif if (Изменился резерв?) then (да) :Обновить дату резерва; endif endif } partition "Применить операции" { if (Есть товары для добавления?) then (да) :Создать новые товарные позиции; endif if (Есть товары для изменения?) then (да) :Обновить существующие позиции; endif if (Есть товары для удаления?) then (да) :Снять резерв с товаров; :Установить статус "Удален"; :Удалить из заказа; endif } partition "Обработать резервирование" { if (Смена региона или ПВЗ?) then (да) :Снять резерв со всех товаров; note right: При смене региона/ПВЗ endif if (Есть товары для резервирования?) then (да) :Зарезервировать товары; note right: Из массива reserve endif if (Есть товары для снятия резерва?) then (да) :Снять резерв с товаров; note right: Из массива unreserve endif } :Завершить обработку; stop @enduml