Skip to content

Imutabilidade e Funções Puras na Saúde Digital

No desenvolvimento de sistemas críticos para saúde, a previsibilidade é uma exigência inegociável. Garantir que o prontuário de um paciente seja atualizado sem efeitos colaterais imprevistos depende de dois conceitos fundamentais: Imutabilidade e Funções Puras.

O Problema da Mutabilidade

Em JavaScript, objetos e arrays são passados por referência. Se um módulo de Triagem altera diretamente um objeto Patient, essa alteração pode afetar outros módulos (como o Agendamento) de forma imprevisível.

Impactos em Sistemas Médicos:

  • Race Conditions: Dois processos tentando atualizar o mesmo prontuário simultaneamente podem corromper os dados.
  • Dificuldade de Debugging: Se os dados mudam "no lugar", é impossível rastrear quem alterou o quê e quando.

Imutabilidade como Salvaguarda

Nossa arquitetura utiliza o Redux Toolkit, que por baixo dos panos utiliza a biblioteca Immer. Isso nos permite escrever código que "parece" mutável, mas que gera novos estados de forma segura.

Por que Imutabilidade?

  1. Rastreabilidade (Undo/Redo): Como cada estado é um novo objeto, podemos facilmente implementar o histórico de alterações (Audit Log) de uma consulta.
  2. Performance em UI: O React consegue detectar mudanças de forma extremamente rápida comparando apenas a referência dos objetos. Se a referência é a mesma, nada mudou. Se é diferente, a UI é atualizada com precisão.
  3. Consistência de Dados: Garantimos que o estado do paciente exibido na tela do médico seja uma "fotografia" fiel do momento da consulta.

Funções Puras (Pure Functions)

Uma função pura é aquela que:

  1. Dada a mesma entrada, sempre retorna a mesma saída.
  2. Não possui efeitos colaterais (não altera variáveis externas, não faz chamadas de rede).

Exemplos no Projeto:

  • Reducers: São o exemplo clássico. Eles recebem o state atual e uma action, e retornam o novo state.
  • Selectors: Funções que extraem dados da Store de forma pura. Se a Store não mudar, o seletor retorna o valor em cache (Memoização).

Efeitos Colaterais Controlados (Redux-Saga)

Nem tudo no sistema médico pode ser puro. Chamadas de API, acesso ao histórico de navegação e WebSockets são impuros por natureza. Nossa arquitetura isola esses efeitos colaterais nos Sagas.

O Fluxo Previsível:

  1. Action Pura: Disparada pela UI (ex: SAVE_CONSULTATION).
  2. Saga Impuro: Intercepta a Action, faz a chamada de rede, valida as regras.
  3. Action Pura de Resultado: Disparada pelo Saga (SAVE_CONSULTATION_SUCCESS).
  4. Reducer Puro: Atualiza a Store gerando um novo estado imutável.

Conclusão

Ao adotar imutabilidade e funções puras, transformamos o fluxo de dados em um processo determinístico. Isso reduz drasticamente o número de bugs em produção e facilita a criação de testes automatizados, garantindo que a lógica médica seja verificada de forma isolada e confiável.