Skip to content

Exemplo Prático: Jornada do Médico no Atendimento

Este guia descreve o fluxo completo de um médico utilizando o ecossistema de saúde, desde a visualização da agenda até a conclusão da teleconsulta, demonstrando como as camadas da arquitetura interagem em harmonia.


Passo 1: Autenticação e Agenda (Routing & RBAC)

A Dra. Ana acessa o App Medical. O sistema deve validar seu papel antes de carregar qualquer módulo de negócio.

  1. Ação: Login.
  2. Camada: Apps/AppMedical + Shared/Auth.
  3. Mecanismo: O roteador global utiliza o RequireRoleLayout para envolver as rotas médicas.
  4. Step-by-Step:
    • O usuário solicita /medical/agenda.
    • RequireRoleLayout intercepta e verifica o token no AuthContext.
    • Se role === 'DOCTOR', o componente de Agenda (Lazy Loaded) é baixado.
tsx
<Route element={<RequireRoleLayout role="DOCTOR" />}>
  <Route path="/medical/agenda" element={<AgendaPage />} />
</Route>

Passo 2: Preparação do Contexto (Dynamic Injection)

Dra. Ana clica em "Iniciar Atendimento". O App navega para o domínio de Consulta.

  1. Ação: Navegação para /medical/consultation/:id.
  2. Camada: Domains/Consultation.
  3. Mecanismo: Injeção dinâmica de Redux e Saga no momento da montagem do componente.
  4. Step-by-Step:
    • ConsultationPage chama useInjectReducer e useInjectSaga.
    • A Store global é estendida com a chave consultation.
    • O Saga de consulta começa a ouvir as ações.
typescript
const ConsultationPage = () => {
  useInjectReducer({ key: 'consultation', reducer: consultationReducer });
  useInjectSaga({ key: 'consultation', saga: consultationSaga });
  // ...
};

Passo 3: Execução em Atendimento (State Machine Paralela)

Dra. Ana está na sala. O sistema orquestra múltiplos fluxos independentes.

  1. Ação: Início da sessão de teleconsulta.
  2. Camada: Domains/Consultation/Machines.
  3. Mecanismo: XState gerencia os estados paralelos de Vídeo, Chat e Prontuário.
  4. Step-by-Step:
    • A máquina transita para EM_ATENDIMENTO.
    • Região Vídeo: Inicia handshake WebRTC.
    • Região Chat: Conecta ao WebSocket e recupera mensagens anteriores.
    • Região Prontuário: Libera campos de texto para edição.

Passo 4: Prescrição e Segurança (Saga Guards)

Dra. Ana preenche uma prescrição digital.

  1. Ação: Clique em "Salvar Prescrição".
  2. Camada: Domains/MedicalRecord/Store.
  3. Mecanismo: Saga atua como Guard para evitar duplicidade e validar regras clínicas.
  4. Step-by-Step:
    • Saga intercepta SAVE_PRESCRIPTION_REQUEST.
    • Verifica selectIsSaving para evitar cliques duplos (debounce/reentrancy).
    • Valida se o paciente possui alergia ao medicamento selecionado (Regra de Negócio).
    • Se OK, chama medicalRecordApi.save().

Passo 5: Conclusão e Integração (Domain Events)

Dra. Ana finaliza a consulta. Outros sistemas precisam reagir a este fato.

  • Objetivo: Clique em "Finalizar Atendimento".
  • Camada: Domains/Consultation -> Core/DomainEvents.
  • Mecanismo: Publicação de evento para desacoplamento de domínios secundários (como Agendamento de Retorno).
  • Step-by-Step:
    • State Machine valida se o CID foi preenchido.
    • Domínio de Consultation publica o evento CONSULTATION_FINISHED.
    • O Domínio de Scheduling (que pode nem estar carregado na memória do médico) receberá este evento via Backend ou via barramento se estiver ativo em outra instância, sugerindo a data de retorno para o paciente.

Passo 6: Cleanup (Performance)

O atendimento é fechado.

  1. Ação: Saída da rota de consulta.
  2. Mecanismo: O sistema desmonta os componentes e pode limpar a store.
  3. Resultado: Memória liberada para o próximo atendimento, garantindo performance em dispositivos de baixo custo.