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.
- Ação: Login.
- Camada:
Apps/AppMedical+Shared/Auth. - Mecanismo: O roteador global utiliza o
RequireRoleLayoutpara envolver as rotas médicas. - Step-by-Step:
- O usuário solicita
/medical/agenda. RequireRoleLayoutintercepta e verifica o token noAuthContext.- Se
role === 'DOCTOR', o componente de Agenda (Lazy Loaded) é baixado.
- O usuário solicita
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.
- Ação: Navegação para
/medical/consultation/:id. - Camada:
Domains/Consultation. - Mecanismo: Injeção dinâmica de Redux e Saga no momento da montagem do componente.
- Step-by-Step:
ConsultationPagechamauseInjectReducereuseInjectSaga.- 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.
- Ação: Início da sessão de teleconsulta.
- Camada:
Domains/Consultation/Machines. - Mecanismo: XState gerencia os estados paralelos de Vídeo, Chat e Prontuário.
- 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.
- A máquina transita para
Passo 4: Prescrição e Segurança (Saga Guards)
Dra. Ana preenche uma prescrição digital.
- Ação: Clique em "Salvar Prescrição".
- Camada:
Domains/MedicalRecord/Store. - Mecanismo: Saga atua como Guard para evitar duplicidade e validar regras clínicas.
- Step-by-Step:
- Saga intercepta
SAVE_PRESCRIPTION_REQUEST. - Verifica
selectIsSavingpara evitar cliques duplos (debounce/reentrancy). - Valida se o paciente possui alergia ao medicamento selecionado (Regra de Negócio).
- Se OK, chama
medicalRecordApi.save().
- Saga intercepta
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
Consultationpublica o eventoCONSULTATION_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.
- Ação: Saída da rota de consulta.
- Mecanismo: O sistema desmonta os componentes e pode limpar a store.
- Resultado: Memória liberada para o próximo atendimento, garantindo performance em dispositivos de baixo custo.