@startuml Редактирование счета на оплату
!pragma teoz true

title AS IS Редактирование счета на оплату (флоу из ТЗ COMPRO-3467)

actor "Пользователь (АРМ)" as User
participant "Frontend (АРМ)" as Front
participant "Gateway (Прокси)" as Gateway
participant "OMS-Documents (метаданные)" as Docs
participant "Хранилище (S3)" as S3
participant "OMS-Print (конвертация)" as Print
participant "Редактор (Tiptap)" as Editor

== 1. ИНИЦИАЦИЯ РЕДАКТИРОВАНИЯ (ПОЛУЧЕНИЕ HTML) ==

User -> Front: Клик "Редактировать счет" (актуальный)
activate Front

Front -> Gateway: GET /documents/v1/invoice/{id}/html
activate Gateway

Gateway -> Docs: Запрос docURL для invoiceID
activate Docs
Docs --> Gateway: docURL (ссылка на PDF в S3)
deactivate Docs

Gateway -> S3: Запрос PDF файла по docURL
activate S3
S3 --> Gateway: PDF файл счета
deactivate S3

Gateway -> Print: Конвертация PDF в HTML (вызов метода)
activate Print
Print --> Gateway: HTML файл счета
deactivate Print

Gateway --> Front: HTML файл (ответ 200)
deactivate Gateway

Front -> Editor: Инициализация редактора с HTML
activate Editor
Editor --> Front: Готово
deactivate Editor

Front --> User: Открыто окно редактора
deactivate Front

== 2. РЕДАКТИРОВАНИЕ И СОХРАНЕНИЕ НОВОЙ ВЕРСИИ ==

User -> Editor: Вносит изменения (текст, таблицы)
activate Editor
Editor --> User: Изменения отображены
User -> Editor: Клик "Сохранить"
Editor -> Front: Передача измененного HTML
deactivate Editor
activate Front

Front -> Gateway: POST /documents/v1/invoice/{id}/html\n{ "html": "..." }
activate Gateway

Gateway -> Print: Конвертация HTML в PDF
activate Print
Print --> Gateway: Новый PDF файл
deactivate Print

Gateway -> S3: Сохранение нового PDF файла
activate S3
S3 --> Gateway: newDocURL (ссылка на новый файл)
deactivate S3

Gateway -> Docs: Создание новой версии записи\n(новый docURL, isSend:false, обновленные Base/Details)
activate Docs
Docs --> Gateway: OK (новая версия создана)
deactivate Docs

Gateway --> Front: 204 No Content (Успех)
deactivate Gateway

== 3. ОБНОВЛЕНИЕ ИНТЕРФЕЙСА ==

Front -> User: 1. Закрывает редактор\n2. Уведомление "Счет изменен"
Front -> Gateway: Вызов getInvoiceLatest (перезапрос)
activate Gateway
Gateway -> Docs: Запрос последней версии счета
activate Docs
Docs --> Gateway: Данные обновленного счета (с newDocURL)
deactivate Docs
Gateway --> Front: Данные обновленного счета
deactivate Gateway

Front -> User: Обновляет отображение во вкладке "Счет на оплату"
deactivate Front

@enduml

@startuml

@enduml



@startuml

title TO BE Логика расчета НДС

actor "Триггер" as User
participant "OMS" as OMS
participant "NDS" as NDS

User -> OMS: Создание спеки / счета на оплату / триггер ПМП
OMS --> OMS: Заполнение необходимых данных (Блок КА, блок доставок,\nшапка документа и т.д. в зависимости от типа документа)
OMS -> NDS: Вызывает метод: nds/vat_calc в сервисе NDS
alt Если вернулся nds_calc = nds_reverse || nds_calc = nds_direct
OMS -> NDS: Запрашашивает НДС и производные
NDS --> OMS: answer
OMS --> OMS: Подставляет НДС и производные из ответа сервиса NDS
else Если вернулся nds_calc = self
OMS --> OMS: Рассчитывает НДС и производные по формуле (UnitPrice*20)/120\n(как и было)
end
OMS --> User: answer
@enduml