@startuml lookAuto_signAPP

title "Осмотр автомобиля и подписание АПП"


' loads the package bootstrap
!include <C4/C4_Container>
!include <C4/C4_Component>
!include https://raw.githubusercontent.com/tmorin/plantuml-libs/master/distribution/eventstorming/single.puml


skinparam svgLinkTarget _blank

LAYOUT_LEFT_RIGHT()

Container_Boundary(container3, "") {
    System('kafka_serviceLegalDocumentsEventsConsumer', 'kafka_serviceLegalDocumentsEventsConsumer')
    DomainEvent('ЗадачаПриемкаТСЗакрыта', 'Задача "Приемка ТС" закрыта')
    Aggregate('Task1','Task')
    Policy('ДолжнаБытьСозданаЗадачаПередачаТСвЦех', 'Должна быть создана задача "Передача ТС в цех"')
    Command('СоздатьЗадачу', 'Создать задачу')
    DomainEvent('ЗадачаПередачаТСвЦехСоздана', 'Задача "Передача ТС в цех" создана')
    Aggregate('Task2','Task')
}

'yellow
Person('МК1', 'МК')
Person('МК2', 'МК')
Person('МК3', 'МК')
Person('МК4', 'МК')


'blue
Command('ЗаполнитьЧеклист', 'Заполнить чек-лист')
Command('СохранитьЧеклист', 'Сохранить чек-лист')
Command('ЗагрузитьФотовидеоАМ', 'Загрузить фото/видео АМ')
Command('ПоменятьСтатус', 'Поменять статус')
Command('ЗакрытьЗадачу', 'Закрыть задачу')


'pink
System('UICommand', 'UI Command')
System('addChecklist', 'addChecklist')
System('createDocumentPhotoVideo', 'createDocumentPhotoVideo')
System('createLegalDocument', 'createLegalDocument')
System('generatePdfForLegalDocument', 'generatePdfForLegalDocument')
System('pforms_getPDF', 'pforms_getPDF')
System('signLegalDocument', 'signLegalDocument')
System('uploadSignedLegalDocument', 'uploadSignedLegalDocument')



'fiolet
Policy('АвтомобильДолженБытьОсмотрен', 'Автомобиль должен быть осмотрен')
Policy('НеобходимостьЗарузкиМедиаФайлов', 'Необходимость зарузки медиа файлов')
Policy('УДокументаДолженБытьИзмененСтатус', 'У документа должен быть изменен статус')
Policy('ДолжнаБытьЗакрытаЗадачаПриемкаТС', 'Должна быть закрыта задача "Приемка ТС"')



DomainEvent('ЮридическоеСобытиеЗаключёноПредварительноеСоглашениеСоздано', 'Юридическое событие "Заключёно предварительное соглашение" создано')
DomainEvent('ЗаполненыОпцииЧекЛистаПроверкиАМ', 'Заполнены опции чек-листа проверки А/М')
DomainEvent('АвтомобильОсмотрен', 'Автомобиль осмотрен')
DomainEvent('ЧекЛистСохранен', 'Чек-лист сохранен')
DomainEvent('МедиафайлыРезультатаОсмотраЗагружены', 'Медиафайлы результата осмотра загружены')
DomainEvent('ЮридическийДокументАППСервисСоздан', 'Юридический документ "АПП Сервис" создан')
DomainEvent('ЮридическийДокументАППСервисРаспечатан', 'Юридический документ "АПП Сервис" распечатан')
DomainEvent('ЮридическийДокументАППСервисПодписанКлиентомиПриемщиком1', 'Юридический документ "АПП Сервис" подписан клиентом и приемщиком')
DomainEvent('СПРКиМКПодписалиАППСервис', 'СПРК и МК подписали "АПП Сервис"')
DomainEvent('ЮридическийДокументАППСервисПодписанКлиентомиПриемщиком2', 'Юридический документ "АПП Сервис" подписан клиентом и приемщиком')


'grenn
UserInterface('ЭкранПриемкаТС', 'Экран "Приемка ТС"')
UserInterface('ОкноЗаполненияЧекЛиста1', 'Окно заполнения чек-листа')
UserInterface('ОкноЗаполненияЧекЛиста2', 'Окно заполнения чек-листа')
UserInterface('КнопкаСохранитьЧеклист', 'Кнопка "Сохранить чек-лист"')
UserInterface('ЗагрузитьФотоВидео', 'Загрузить фото / видео')
UserInterface('ОкноНеобходимоПодтвердитьПодписаниеДокументасКлиентом', 'Окно "Необходимо подтвердить подписание документа с клиентом"')


Aggregate('LegalEvent', 'Legal Event')
Aggregate('LegalDocument1','Legal Document')
Aggregate('LegalDocument2','Legal Document')
Aggregate('LegalDocument3','Legal Document')
Aggregate('LegalDocument4','Legal Document')

ЮридическоеСобытиеЗаключёноПредварительноеСоглашениеСоздано .. LegalEvent
LegalEvent .. АвтомобильДолженБытьОсмотрен

АвтомобильДолженБытьОсмотрен--ЭкранПриемкаТС
ЭкранПриемкаТС--ОкноЗаполненияЧекЛиста1
ОкноЗаполненияЧекЛиста1--МК1
МК1--ЗаполнитьЧеклист
ЗаполнитьЧеклист--UICommand
UICommand--ЗаполненыОпцииЧекЛистаПроверкиАМ
ЗаполненыОпцииЧекЛистаПроверкиАМ--АвтомобильОсмотрен
АвтомобильОсмотрен--ОкноЗаполненияЧекЛиста2
ОкноЗаполненияЧекЛиста2--КнопкаСохранитьЧеклист
КнопкаСохранитьЧеклист--МК2
МК2--СохранитьЧеклист
СохранитьЧеклист--addChecklist
addChecklist--ЧекЛистСохранен
ЧекЛистСохранен--НеобходимостьЗарузкиМедиаФайлов

НеобходимостьЗарузкиМедиаФайлов-->ЗагрузитьФотоВидео
ЗагрузитьФотоВидео--МК3
МК3--ЗагрузитьФотовидеоАМ
ЗагрузитьФотовидеоАМ--createDocumentPhotoVideo
createDocumentPhotoVideo--МедиафайлыРезультатаОсмотраЗагружены

МедиафайлыРезультатаОсмотраЗагружены-->createLegalDocument
НеобходимостьЗарузкиМедиаФайлов-->createLegalDocument

createLegalDocument--ЮридическийДокументАППСервисСоздан

ЮридическийДокументАППСервисСоздан .. LegalDocument2
LegalDocument2 .. generatePdfForLegalDocument

generatePdfForLegalDocument--pforms_getPDF
pforms_getPDF--ЮридическийДокументАППСервисРаспечатан

ЮридическийДокументАППСервисРаспечатан .. LegalDocument3
LegalDocument3 .. ЮридическийДокументАППСервисПодписанКлиентомиПриемщиком1

ЮридическийДокументАППСервисПодписанКлиентомиПриемщиком1 .. LegalDocument4
LegalDocument4 .. СПРКиМКПодписалиАППСервис

СПРКиМКПодписалиАППСервис--УДокументаДолженБытьИзмененСтатус
УДокументаДолженБытьИзмененСтатус--ОкноНеобходимоПодтвердитьПодписаниеДокументасКлиентом
ОкноНеобходимоПодтвердитьПодписаниеДокументасКлиентом--МК4
МК4-ПоменятьСтатус

ПоменятьСтатус--signLegalDocument
ПоменятьСтатус--uploadSignedLegalDocument

signLegalDocument--ЮридическийДокументАППСервисПодписанКлиентомиПриемщиком2
uploadSignedLegalDocument--ЮридическийДокументАППСервисПодписанКлиентомиПриемщиком2

ЮридическийДокументАППСервисПодписанКлиентомиПриемщиком2 .. LegalDocument1
LegalDocument1 .. ДолжнаБытьЗакрытаЗадачаПриемкаТС

ДолжнаБытьЗакрытаЗадачаПриемкаТС--ЗакрытьЗадачу
ЗакрытьЗадачу--kafka_serviceLegalDocumentsEventsConsumer
kafka_serviceLegalDocumentsEventsConsumer--ЗадачаПриемкаТСЗакрыта
ЮридическийДокументАППСервисПодписанКлиентомиПриемщиком2-->ЗадачаПриемкаТСЗакрыта

ЗадачаПриемкаТСЗакрыта .. Task1
Task1 .. ДолжнаБытьСозданаЗадачаПередачаТСвЦех

ДолжнаБытьСозданаЗадачаПередачаТСвЦех--СоздатьЗадачу
СоздатьЗадачу--ЗадачаПередачаТСвЦехСоздана

ЗадачаПередачаТСвЦехСоздана .. Task2

@enduml