Skip to content

Governança e Escalabilidade em Sistemas de Saúde ​

A integridade arquitetural de um sistema que lida com dados de saúde de mais de 100 milhões de brasileiros, distribuídos por todos os 26 estados, é fundamental. Conforme o projeto cresce para incluir novos domínios (ex: Agendamento, Vacinação, Farmácia, Laboratório) e lidar com as particularidades regionais e regulatórias de cada estado, precisamos de mecanismos automáticos que impeçam o aumento da complexidade desordenada e garantam a performance extrema exigida por essa escala nacional.

Fronteiras Arquiteturais (Architectural Boundaries) ​

Utilizamos ferramentas como ESLint (regras de importação) ou NX Boundaries para impor regras de dependência que são validadas em tempo real e no CI/CD.

Regras de Ouro de Dependência ​

  1. Isolamento de Módulos: Um arquivo em packages/modules/consultation nunca deve importar nada de packages/modules/chat.
    • Por que?: Para garantir que se o módulo de Chat for removido ou substituído, o módulo de Consultas não sofra nenhum impacto colateral. A comunicação deve ser SEMPRE via Domain Events.
  2. Unidirecionalidade Rigorosa:
    • Apps -> Modules -> Shared -> Core -> Contracts.
    • O Core nunca deve importar nada de um Domain.
    • O Shared nunca deve importar nada de um Domain.
  3. Encapsulamento via Public API: Cada pacote deve exportar apenas o que é estritamente necessário através de seu arquivo index.ts. Componentes internos, reducers específicos ou helpers de domínio não devem estar visíveis para quem consome o pacote.

Escalabilidade para Múltiplos Times ​

O isolamento por módulos (Bounded Contexts) permite que a organização escale horizontalmente:

  • Desenvolvimento em Paralelo: Um time pode refatorar completamente a lógica de Prescrição Médica sem causar conflitos de mesclagem (merge conflicts) com o time que está trabalhando no Agendamento.
  • Propriedade de Código (Code Ownership): Times diferentes podem ser "donos" de pacotes específicos no monorepo, facilitando a revisão de código e a governança.
  • Testes Focados: Podemos rodar testes apenas para os módulos que sofreram alteração, reduzindo o tempo de pipeline e acelerando o feedback para os desenvolvedores.

Visão de Futuro: De Monólito Modular para Microfrontends ​

A arquitetura atual foi projetada como um Modular Monolith propositalmente. No estágio atual, o monorepo oferece a melhor experiência de desenvolvimento, com tipagem forte de ponta a ponta e facilidade de refatoração.

No entanto, estamos preparados para o futuro:

  • Evolução para Microfrontends: Como os módulos já são isolados, possuem injeção dinâmica de estado e se comunicam via eventos, a migração para uma solução de Module Federation é quase trivial. Cada módulo em packages/modules/* pode se tornar um micro-app independente, hospedado em um bucket próprio e carregado em runtime.
  • Independência de Deploy: No futuro, o time de "Exames" poderá fazer deploy de uma correção sem precisar gerar um novo bundle para o "Portal do Médico" inteiro.

Esta estratégia garante que o sistema de saúde seja robusto hoje e flexível para os desafios de amanhã.