@startuml
'skinparam monochrome true
skinparam packageStyle rectangle
skinparam shadowing false

participant "Organization Employee" as HRM
participant ":CreateTaskController" as CTRL
participant ":ApplicationSession" as _APP
participant "appSession\n:ApplicationSession" as APP
participant "currentSession\n:UserSession" as SESSAO
participant ":Repositories" as RepositorySingleton
participant "repositories\n:Repositories" as PLAT
participant "organizationRepository:\nOrganizationRepository" as OrganizationRepository
participant "organization\n:Organization" as ORG
participant "task\n:Task" as TAREFA

autonumber

activate HRM

HRM -> CTRL: createTask(reference, description, informalDescription, technicalDescription, duration, cost, taskCategoryDescription)
activate CTRL
CTRL -> _APP: getInstance()
activate _APP
_APP --> CTRL: appSession
deactivate _APP
CTRL -> APP: getCurrentSession()
activate APP
APP --> CTRL: currentSession
deactivate APP
CTRL -> SESSAO: getUserEmail()
activate SESSAO
SESSAO --> CTRL: email
deactivate SESSAO
CTRL -> PLAT: getOrganizationRepository()
activate PLAT
PLAT --> CTRL: organizationRepository
deactivate PLAT
CTRL -> OrganizationRepository: getOrganizationByEmployeeEmail(email)
activate OrganizationRepository
OrganizationRepository -> ORG: anyEmployeeHasEmail(email)
activate ORG
ORG --> OrganizationRepository : true/false
deactivate ORG
OrganizationRepository --> CTRL : organization
deactivate OrganizationRepository
CTRL -> ORG: getEmployeeByEmail(email)
activate ORG
ORG --> CTRL : employee
deactivate ORG
CTRL -> ORG: createTask(employee, reference, description, informalDescription, technicalDescription, duration, cost, taskCategoryDescription)
activate ORG
ORG -> TAREFA: create(reference, description, informalDescription, technicalDescription, duration, cost, taskCategoryDescription, employee)
ORG -> ORG: addTask(task)
activate ORG
ORG -> ORG: validateTask(task)
deactivate ORG
ORG --> CTRL : task
deactivate ORG
CTRL --> HRM : task
deactivate CTRL

deactivate HRM
@enduml
