- Isolamento por clínica
- Nenhum dado é filtrado por clínica no código da aplicação. São 139 políticas de segurança em nível de linha, aplicadas a 34 tabelas dentro do próprio banco. Um cliente adulterado não passa a ver outra clínica — ele recebe zero linhas.
- Funções e permissões
- 5 funções e 18 permissões, verificadas pelo banco em toda escrita, não pela interface. A tela esconder um botão é conveniência; a permissão que vale é a que o banco cobra.
- Interface e banco não divergem
- Um teste automatizado compara a matriz de permissões da interface com a do banco e falha se as duas discordarem. É o tipo de divergência que normalmente só aparece como um acesso indevido meses depois.
- Exclusão não existe pela API
- Nenhuma tabela de dados clínicos ou financeiros tem política de exclusão. Uma chamada direta de delete não apaga nada porque não encontra linha nenhuma. Toda remoção real passa por função específica, com registro.
- Senha-mestra por clínica
- Operações destrutivas exigem uma segunda senha, separada da senha de login. Após 5 tentativas erradas o recurso trava por 15 minutos, e cada tentativa fracassada fica registrada.
- Trilha de auditoria
- Alterações em pacientes, evoluções, estoque, planos e financeiro gravam quem fez, quando, e o conteúdo antes e depois. A tabela de auditoria não aceita escrita, alteração nem exclusão por nenhum usuário.
- LGPD, art. 18
- Exportação completa dos dados de um paciente em um arquivo, com o registro de auditoria gravado antes da leitura — de modo que a exportação não pode acontecer sem deixar rastro. E anonimização irreversível, que apaga os dados pessoais inclusive de dentro da trilha de auditoria.
- Anexos
- Arquivos de paciente nunca são servidos por caminho fixo. Cada download usa um endereço assinado que expira em 1 hora.
- Acesso por convite
- Não há cadastro público. O convite é um link de uso único, guardado no banco apenas como hash — quem tem acesso ao banco não consegue reutilizar um convite.
- Transporte e cabeçalhos
- HTTPS obrigatório por 2 anos via HSTS, o sistema não pode ser embutido em iframe de terceiros, o endereço nunca vaza no cabeçalho de referência, e a política de conteúdo limita para onde o navegador pode enviar dados.
- Testes
- Mais de 460 testes automatizados em TypeScript e 49 suítes rodando contra o banco de dados, uma para cada função com lógica. Rodar as duas verdes antes de publicar é regra do projeto.