RFC 001: Arquitetura de Módulos Isolados (Modular Monolith)
- Status: Draft
- Autor: Charleston Anjos
- Data: 2026-02-19
- Escopo: Arquitetura Core do Ecossistema de Saúde
1. Resumo (Summary)
Esta RFC propõe a adoção de uma arquitetura de Monólito Modular baseada em Domain-Driven Design (DDD) para o novo ecossistema de saúde digital. A solução visa suportar mais de 100 milhões de usuários distribuídos nos 26 estados brasileiros, garantindo isolamento de falhas, escalabilidade de times e performance extrema em dispositivos de baixo custo através de Injeção Dinâmica e Comunicação Baseada em Eventos.
2. Motivação (Motivation)
O desafio de atender a uma população de nível nacional (100M+ pessoas) exige uma arquitetura que resolva os seguintes problemas críticos identificados:
- Complexidade Crescente: Sistemas de saúde tendem a se tornar "Bolas de Lama" (Big Ball of Mud) onde mudanças no agendamento quebram o prontuário.
- Latência e Performance: Usuários em regiões remotas com conexões 3G instáveis não podem carregar bundles gigantescos.
- Risco Clínico e Jurídico: A falta de controle de fluxo pode levar a estados impossíveis (ex: finalizar consulta sem diagnóstico).
- Conflitos de Desenvolvimento: Múltiplos times trabalhando no mesmo código causam gargalos de deploy e merge.
3. Proposta Técnica (Technical Proposal)
A arquitetura será estruturada em um Monorepo com as seguintes camadas e responsabilidades:
3.1. Estrutura de Camadas
- Apps: Orquestradores leves (Entry Points) para diferentes perfis (Médico, Paciente, Admin).
- Modules: Unidades de negócio isoladas (Bounded Contexts) contendo sua própria Store (Redux), Efeitos (Sagas) e UI.
- Shared: Design System e utilitários agnósticos ao negócio.
- Core: Infraestrutura técnica (Event Bus, Injetores, WebRTC, WebSocket).
- Contracts: Única fonte de verdade para tipagem TypeScript e contratos de eventos.
3.2. Mecanismos de Isolamento
- Injeção Dinâmica: Uso de
useInjectReducereuseInjectSagapara carregar lógica apenas sob demanda. - Domain Events: Comunicação indireta entre módulos via Pub/Sub para evitar acoplamento lateral.
- Boundaries: Imposição de regras de importação via ESLint/NX (ex: Módulo A não importa do Módulo B).
3.3. Segurança de Processo
- State Machines (XState): Uso obrigatório para fluxos críticos de atendimento para garantir conformidade com protocolos médicos.
4. Impactos e Riscos (Impact & Risks)
- Curva de Aprendizado: Desenvolvedores precisarão se adaptar aos padrões de Redux-Saga e XState.
- Boilerplate: A criação de um novo módulo exige uma estrutura de pastas rigorosa (mitigado por geradores de código/scaffolding).
- Complexidade de Debugging: O rastreio de fluxos baseados em eventos exige ferramentas de telemetria e observabilidade robustas (previstas no Roadmap).
5. Alternativas Consideradas (Alternatives)
- Microfrontends (Module Federation): Descartado inicialmente devido à complexidade operacional e perda de Type Safety entre deploys independentes. A proposta atual é "MFE-Ready".
- React Context: Descartado para lógica de negócio devido a problemas de performance de re-renderização em escala de 100M.
6. Plano de Rollout (Rollout Plan)
- Fase 1: Implementação do Core (Injetores e Event Bus).
- Fase 2: Migração dos domínios piloto (Agendamento e Autenticação).
- Fase 3: Implementação do Atendimento Online com XState.
- Fase 4: Auditoria de performance simulando carga nacional.
7. Conclusão
Esta proposta estabelece as bases para um sistema resiliente, escalável e seguro, capaz de sustentar a transformação digital da saúde no Brasil nos próximos anos.