Skip to content

Exemplo Prático: Jornada da Enfermeira e Paciente

Este guia detalha um fluxo complexo de atendimento iniciado por um profissional de enfermagem, passando pela triagem, fila de espera do paciente, até o atendimento final com o médico.


Passo 1: Busca e Identificação (RBAC)

A enfermeira Maria acessa o App Medical. Ela precisa localizar o paciente Carlos.

  1. Ação: Pesquisa por CPF.
  2. Camada: Apps/AppMedical + Domains/Users.
  3. Mecanismo: RequireRoleLayout role="NURSE" garante que apenas enfermeiras acessem este módulo de busca.
  4. Step-by-Step:
    • Maria digita o CPF na UI de busca (shared/ui/DataTable).
    • O domínio de Users busca os dados e exibe o perfil de Carlos.

Passo 2: Triagem e Impersonation (Auth & Events)

Carlos possui dificuldades com o App. Maria inicia a triagem e "assume" o lugar de Carlos no sistema para ajudá-lo.

  1. Ação: Iniciar Protocolo de Triagem.
  2. Camada: Domains/Consultation + Core/Auth.
  3. Mecanismo: Geração de token de Impersonation.
  4. Step-by-Step:
    • Maria clica em "Iniciar Triagem".
    • O sistema publica o evento TRIAGE_STARTED.
    • O domínio de consulta gera uma sessão onde Maria atua em nome do paciente Carlos temporariamente.
typescript
domainEventsBus.publish(DomainEventNames.TRIAGE_COMPLETED, {
  patientId: 'carlos-789',
  nurseId: 'maria-456',
  queueId: 'geriatria-priority'
});

Passo 3: Gestão de Fila (State Machine)

Carlos (agora via sistema) entra na fila virtual de espera.

  1. Ação: Entrada na Fila de Prioridade.
  2. Camada: Domains/Consultation/Machines.
  3. Mecanismo: queueMachine (XState) gerencia o status do paciente.
  4. Step-by-Step:
    • O evento TRIAGE_COMPLETED faz a máquina de Carlos transitar para EM_FILA.
    • O App Patient de Carlos (se ele abrir) mostra: "Você é o 3º na fila".

Passo 4: O "Match" (WebSockets & Domain Events)

O Dr. Roberto fica disponível e o sistema realiza o pareamento.

  1. Ação: Match Automático.
  2. Camada: Core/DomainEvents + Core/WebSockets.
  3. Mecanismo: Barramento de eventos notifica as Apps em tempo real.
  4. Step-by-Step:
    • O Backend dispara CONSULTATION_MATCHED.
    • O Saga no App de Carlos detecta o evento e redireciona para a sala virtual.
typescript
function* watchMatchEvent() {
  const channel = domainEventsBus.createChannel();
  while (true) {
    const event = yield take(channel);
    if (event.name === DomainEventNames.CONSULTATION_MATCHED) {
      yield put(push(`/patient/room/${event.payload.roomId}`));
    }
  }
}

Passo 5: Atendimento Ativo (Visão Paralela)

Carlos e Dr. Roberto iniciam a conversa.

  1. Ação: Atendimento Multimodal.
  2. Camada: Domains/Consultation/UI + Domains/Chat.
  3. Mecanismo: Estados paralelos para gerenciar Vídeo e Chat simultaneamente.
  4. Step-by-Step:
    • Carlos vê o vídeo do médico (Região Vídeo).
    • Carlos pode enviar mensagens ou ver o resumo da triagem feito pela Maria (Região Chat).
    • A máquina garante que o atendimento só conte como "Iniciado" quando ambos estão conectados.

Resumo de Atribuições

AtorEtapaCamada Chave
EnfermeiraIdentificação e TriagemDomains/Users
EnfermeiraAssistência (Impersonation)Core/Auth
PacienteEspera ReativaConsultation/Machines
SistemaOrquestração (Match)Core/DomainEvents
PacienteInteração (Vídeo/Chat)Domains/Consultation