@startuml
autonumber
'hide footbox
actor "SNSUser" as SNU

participant "ScheduleVaccineUI" as UI
participant "ScheduleVaccineController" as CTRL
participant "Company" as COMP
participant "ScheduleVaccineStore" as SVSTORE
participant "VaccinationCenterStore" as VCStore
participant "VaccineTypeStore" as VTStore
participant "ScheduleVaccine" as VS
participant "VaccineType" as VT
participant "VaccinationCenter" as VC
participant "VaccineScheduleDto" as SVDto
participant "VaccineMapper" as SVMapp
participant "task\n:Task" as TAREFA

activate SNU
SNU -> UI : starts the schedule a vaccination
activate UI
UI --> SNU : shows vaccination centers and vaccine types, requires selection one of each
deactivate UI

SNU -> UI : types requested data (SNSUser number, vaccination center, vaccine type, date, time)\n and choose a vaccination center and vaccine type
activate UI

UI -> CTRL : createNewScheduleVaccination(snsNumber, vaccinationCenter, vaccineType, localDateTime)
activate CTRL

CTRL -> COMP : svc= getVaccinationCenterList()
activate COMP
CTRL -> COMP : svt= getVaccinationTypeList()
deactivate COMP

CTRL -> VCStore : vc = getVaccinationCenterList(id)
activate VCStore
deactivate VCStore

CTRL -> VTStore : vt = getVaccineType(vaccineTypeCode)
activate VTStore
deactivate VTStore


|||
deactivate CTRL

UI --> SNU : shows task categories list and ask to select one
deactivate UI
deactivate COMP
SNU -> UI : selects a task category
activate UI

UI -> CTRL : createTask(ref,designation,informalDesc,technicalDesc,duration,cost,categoryId)
activate CTRL

CTRL -> PLAT : cat=getCategoryById(categoryId)
activate PLAT
|||
deactivate PLAT

CTRL -> _APP: app = getInstance()
activate _APP
|||
deactivate _APP

CTRL -> APP: session = getCurrentSession()
activate APP
|||
deactivate APP

CTRL -> SESSAO: email = getUserEmail()
activate SESSAO
|||
deactivate SESSAO

CTRL -> PLAT: org = getOrganizationByUserEmail(email)
activate PLAT
|||
deactivate PLAT

CTRL -> ORG: task=createTask(ref,designation,informalDesc,technicalDesc,duration,cost,cat)
activate ORG

ORG --> TAREFA**: create(ref,designation,informalDesc,technicalDesc,duration,cost,cat)
ORG -> ORG: validateTask(task)

CTRL --> UI: result

UI --> SNU: shows all data and requests confirmation
deactivate ORG
deactivate PLAT
deactivate CTRL
deactivate UI

SNU -> UI : confirms the data
activate UI
UI -> CTRL : saveTask()
activate CTRL

CTRL -> ORG : saveTask(task)
activate ORG

ORG -> ORG: validateTask(task)
ORG -> ORG: addTask(task)

CTRL --> UI: result

UI --> SNU : informs operation success
deactivate ORG
deactivate CTRL
deactivate UI

deactivate SNU

@enduml