Segurança

Prontuário médico é dado sensível. Tratamos assim.

Segurança não é uma camada adicional no ClinCRM — é parte da arquitetura, do banco de dados ao navegador.

🔐
Controle de acesso

RBAC aplicado no servidor

A permissão de cada perfil (Gestor, Médico, Recepção, Desenvolvedor) é verificada em toda rota da API, não apenas escondida na interface. Mesmo que alguém tente acessar uma rota diretamente, o servidor recusa se o perfil não tiver permissão para aquela ação.

Saiba mais sobre controle de acesso

Esconder um botão na tela não impede alguém de chamar a rota por trás dele — por isso a checagem de permissão acontece de novo no servidor, em toda requisição, independente do que a interface mostra.

Na prática, cada rota da API passa por duas camadas antes de tocar qualquer dado:

  1. Sessão válida — o token de sessão é verificado antes de qualquer outra coisa. Sem sessão, a resposta é recusada (401), nem chega perto da lógica da rota.
  2. Permissão para aquele módulo ou ação — o perfil da sessão (Gestor, Médico, Recepção, Desenvolvedor) é comparado contra o que aquela rota específica exige. Um médico tentando acessar uma rota do módulo Financeiro recebe 403 (Acesso negado), mesmo tendo uma sessão válida.

Há ainda uma terceira camada em rotas que lidam com dados de um paciente específico: mesmo um médico com acesso ao módulo clínico só enxerga prontuários de pacientes com quem já teve algum agendamento — um médico não consegue abrir o prontuário de um paciente que nunca atendeu, só porque adivinhou o identificador dele.

Exemplo de checagem
Gestor → agenda completaPermitido
Recepção → prontuário clínicoBloqueado
📝
Rastreabilidade

Trilha de auditoria

Toda ação sensível — criação, edição ou exclusão de dados de paciente, prontuário, prescrição ou usuário — fica registrada com quem fez, o quê e quando. Isso permite reconstruir o histórico de qualquer alteração no sistema.

Saiba mais sobre auditoria

O registro fica disponível para o gestor consultar a qualquer momento, em Configurações → Auditoria, com filtros por perfil, por pessoa e por período — útil tanto para investigar um problema pontual quanto para atender uma exigência de conformidade no futuro.

Cada linha da trilha guarda, no mínimo:

  • quem fez a ação (nome e perfil de acesso no momento);
  • o que foi feito (criar paciente, assinar prontuário, emitir prescrição, criar ou remover usuário, alterar a própria senha, entre outras);
  • a entidade afetada e seu identificador, quando aplicável;
  • data e hora exatas do servidor — não o relógio do computador de quem agiu.

O registro de auditoria é gravado de forma independente da ação principal: mesmo que o registro de auditoria falhe por algum motivo, ele nunca bloqueia nem reverte a ação do usuário — e o inverso também vale, a ação em si não depende da auditoria para acontecer.

Registro de auditoria
Dra. Souzaeditou prontuário · 14:32
Recepçãocriou agendamento · 14:20
🗄️
Infraestrutura

Banco de dados isolado

O banco MySQL roda dentro de uma rede Docker privada e nunca é exposto diretamente à internet. A aplicação usa uma credencial de banco com privilégio mínimo — apenas as operações que o dia a dia exige — separada da credencial usada para aplicar migrações de schema.

Saiba mais sobre o isolamento

Mesmo que a aplicação seja comprometida, a credencial que ela usa não tem permissão para alterar a estrutura do banco — só para ler e escrever os dados do dia a dia.

Algumas camadas adicionais de isolamento:

  • Rede privada Docker — o banco não tem porta exposta na internet pública; só os containers da própria aplicação, na mesma rede interna, conseguem alcançá-lo.
  • Credenciais separadas por função — a credencial usada pela aplicação no dia a dia é diferente da credencial usada para aplicar migrações de schema, que só é usada manualmente, no momento de um deploy.
  • Acesso administrativo só por túnel SSH — quando é preciso inspecionar o banco diretamente (raramente), o acesso passa por um túnel autenticado por chave, nunca por uma porta aberta ao público.
  • Backups diários com rotação — reduz o impacto de uma falha de infraestrutura ou de um erro operacional.

Documentos anexados ao prontuário (exames, PDFs) também ficam salvos direto no banco, não em um serviço de arquivos externo — um ponto a menos de exposição.

Caminho até o banco
🖥️
App
🔒
Rede privada
🗄️
Banco
🔑
Criptografia

Senhas protegidas com bcrypt

Nenhuma senha é armazenada em texto puro. Todo login passa por hash criptográfico (bcrypt) antes de tocar o banco de dados.

Saiba mais sobre criptografia

O hash é uma via de mão única — não existe forma de “descriptografar” de volta para a senha original, nem para quem tem acesso direto ao banco de dados.

O algoritmo usado é o bcrypt, com um fator de custo deliberadamente alto — o que torna cada tentativa de adivinhação por força bruta computacionalmente cara, mesmo que alguém consiga uma cópia do banco de dados. Cada senha recebe também um “sal” único, então duas pessoas com a mesma senha nunca geram o mesmo hash — o que impede ataques baseados em tabelas pré-computadas (rainbow tables).

Trocar a própria senha (Configurações → Minha conta) sempre exige informar a senha atual antes de definir a nova.

Antes / depois
senha123↓ bcrypt$2b$10$Xk9F7z…
🛡️
Proteção

Rate limiting em tentativas de login

Tentativas de login em série (força bruta) são limitadas automaticamente, dificultando ataques de adivinhação de senha.

Saiba mais sobre essa proteção

Depois de várias tentativas seguidas sem sucesso, novas tentativas para aquela conta ficam bloqueadas por um tempo — o suficiente para inviabilizar um ataque automatizado sem atrapalhar quem só errou a senha uma vez.

O limite é aplicado no servidor, por origem da tentativa — não depende de nenhuma configuração no navegador de quem está tentando entrar, então não há como simplesmente limpar o histórico ou trocar de aba para contornar o bloqueio. Passado o tempo de espera, as tentativas voltam ao normal automaticamente, sem precisar de intervenção manual do gestor ou do suporte.

5tentativas por 15 min
👤
Privacidade

Cada perfil só vê o que precisa

Um recepcionista não vê o conteúdo clínico do prontuário; um médico não acessa configurações administrativas da clínica. O acesso é desenhado para o mínimo necessário de cada função.

Saiba mais sobre os perfis

Os quatro perfis do ClinCRM, e o que cada um foi desenhado para enxergar:

  • Gestor — visão completa da clínica: dashboard geral, agenda de todos os médicos, financeiro, estoque, documentação legal e gestão de usuários.
  • Médico(a) — área médica, prontuário e prescrição; a própria agenda e os próprios pacientes, não os de outros profissionais.
  • Recepção — agendamento, cadastro de pacientes e um dashboard operacional enxuto; sem acesso ao conteúdo clínico do prontuário nem ao financeiro.
  • Desenvolvedor(a) — acesso técnico de manutenção, incluindo as áreas administrativas, para suporte e evolução do sistema.

Veja a lista completa de recursos por perfil na página de recursos.

Quem vê o quê
Médico vê prontuário clínicoSim
Recepção vê prontuário clínicoNão
Recepção vê agendaSim

Quer entender como isso se aplica à sua clínica?

Conheça os planos disponíveis e fale com a nossa equipe.

Ver planos