@startuml "Container Diagram"

title "OC-Paciente - Diagrama de container do sistema"

!include https://raw.githubusercontent.com/adrianvlupu/C4-PlantUML/latest/C4_Component.puml

LAYOUT_WITH_LEGEND()

skinparam backgroundcolor transparent

/'Actors'/
Person(ActorPatient, "Paciente", "Indíviduo que está sob cuidado de um profissional da saúde e/ou instituição de cuidado.")
Person(ActorCompanion, "Acompanhante", "Indivíduo autorizado pelo paciente para gerir seus dados.")

/'Internal Systems'/
Container_Boundary(SystemOCPatient, "Sistema OC-Paciente") {
  Container(ContainerWebApp, "Aplicação Web (oc-frontend-patient)", "Container: NextJS/React", "Provê aos usuários acesso as funcionalidades a partir do cliente.")
  Container(ContainerServerApi, "API REST (oc-api-patient)", "Container: NestJS/Node", "Provê as funcionalidades do OC-Paciente via API JSON/HTTPS.")
  Container(ContainerDatabaseRedis, "Cache", "Container: Redis", "Armazena dados temporários.")

  Rel(ActorPatient, ContainerWebApp, "Acessa paciente.grupooncoclinicas.com", "HTTPS")
  Rel(ActorCompanion, ContainerWebApp, "Acessa paciente.grupooncoclinicas.com", "HTTPS")
  Rel(ContainerServerApi, ContainerDatabaseRedis, "Realiza leitura e armazena dados", "TCP")
  Rel(ContainerWebApp, ContainerServerApi, "Faz chamada API", "JSON/HTTPS")
}

/'External Systems'/
System_Ext(SystemMyPhysicianApi, "API Meu Médico", "Responsável por fornecer conexão direta com o sistema Meu Médico.")
System_Ext(SystemApiCore, "API Core", "Responsável por fornecer conexão direta com os dados do CMS da api-core.")
System_Ext(SystemTasyApi, "API Tasy", "Responsável por fornecer conexão direta com o sistema Tasy.")
System_Ext(SystemAWSCognito, "AWS Cognito", "Responsável por gerenciar todo a autenticação do usuário (Cadastro, Login, MFA, Recuperação de conta).")
System_Ext(SystemGoogleRecaptcha, "Google Recaptcha", "Responsável por validar token recaptcha.")

/'Relations'/
Rel(SystemOCPatient, SystemGoogleRecaptcha, "Valida token recaptcha", "@google-cloud/recaptcha-enterprise")
Rel(SystemOCPatient, SystemAWSCognito, "Autentica o paciente", "HTTPS")
Rel(SystemOCPatient, SystemMyPhysicianApi, "Obtém agendamentos do paciente", "JSON/HTTPS")
Rel(SystemOCPatient, SystemTasyApi, "Obtém dados do Tasy", "JSON/HTTPS")
Rel(SystemOCPatient, SystemApiCore, "Gestão de acesso ao prontuário", "JSON/HTTPS")

@enduml
