Síntese de prontuários médicos
Para resumir um prontuário médico com um LLM local, extraia os fatos por meio de código (lote FHIR ou documento CDA R2), numere-os, faça com que a síntese seja redigida apenas a partir deles, citando a referência de cada linha, verifique por meio de um programa se cada referência e cada número existem na fonte e, depois, peça a um médico que valide o resultado. A execução local protege a confidencialidade, mas não contra as alucinações: um estudo de 2025 identificou uma taxa de 1,47 % por frase.
Um prontuário de saúde é preciso, mas fragmentado, e os modelos de linguagem redigem sínteses fluentes que podem conter erros graves. Este guia descreve um pipeline local em que o código extrai os fatos, o modelo os apresenta em texto citando suas fontes, e o resultado passa por uma verificação automatizada e depois pela validação de um médico. Ele também relembra os aspectos a verificar: sigilo médico, hospedagem de dados de saúde e finalidade da ferramenta.
#O problema: prontuários precisos, mas ilegíveis
Um profissional de saúde que assume o acompanhamento de um paciente precisa examinar relatórios, resultados de exames laboratoriais, prescrições e correspondências, muitas vezes produzidos por vários softwares. Um modelo local pode preparar, em uma página, uma síntese do prontuário para a retomada do acompanhamento. O método que funciona no contexto médico é sempre o mesmo: extrair os dados estruturados por meio de código determinístico, fazer o modelo redigir a síntese com base apenas nesses fatos, fazê-lo citar em cada linha o identificador do fato de origem, verificar a síntese por meio de um programa e depois submetê-la à validação de um médico.
Um esclarecimento de vocabulário evita uma confusão frequente. Na França, os documentos de saúde trocados e compartilhados, especialmente por meio do Dossier Médical Partagé, seguem o marco de interoperabilidade dos sistemas de informação em saúde (CI-SIS) da Agence du numérique en santé, cujos componentes descrevem documentos no formato CDA R2, um padrão HL7 baseado em XML. O HL7 versão 2 é outro padrão, baseado em mensagens de texto delimitadas por barras verticais, usado para transporte. Por fim, o FHIR, em JSON, é o padrão de intercâmbio mais recente e mais simples de processar, encontrado sobretudo nas trocas entre aplicações. Sua primeira tarefa é, portanto, saber o que seu software fornece.
#Contexto: sigilo médico, hospedagem e responsabilidade
Seu ChatGPT privado e gratuito na sua máquina em 1 hora — LM Studio, Ollama, Open WebUI, seus documentos, sem nuvem.
- Espaço online vitalício
- PDF + arquivos
- Atualizações vitalícias
Três questões se colocam antes de escrever qualquer código. A primeira é o sigilo médico e a proteção dos dados de saúde, que exigem o tratamento desses dados em uma infraestrutura controlada: a execução local é a aplicação prática disso, mas também é necessário criptografar os discos, restringir os acessos e registrar as atividades em logs. A segunda é a hospedagem de dados de saúde. O artigo L. 1111-8 do Código de Saúde Pública prevê que qualquer pessoa que hospede dados pessoais de saúde em suporte digital deve ser certificada para esse fim, quando o fizer em nome de um responsável pelo tratamento ou do paciente.
Essa obrigação nem sempre se aplica como se imagina. De acordo com a Agence du numérique en santé, citada por uma seguradora especializada, a certificação de provedor de hospedagem não é uma obrigação regulamentar quando todos os sistemas de uma instituição armazenam apenas dados de seus próprios pacientes, exceto se ela prestar serviços de hospedagem para terceiros. Ou seja, um consultório que executa a ferramenta em suas próprias instalações, para seus pacientes, não se enquadra na mesma situação que uma empresa de software que oferece esse serviço a outros consultórios. Peça à sua assessoria ou ao seu encarregado de proteção de dados que confirme como essa regra se aplica à sua situação.
A terceira questão é a finalidade. Um software que produz informações destinadas a subsidiar uma decisão médica pode estar sujeito à regulamentação de dispositivos médicos, conforme a finalidade declarada. Uma síntese para retomar a análise de um prontuário, apresentada como auxílio à leitura e validada pelo médico, não tem o mesmo alcance que uma ferramenta que sugere um tratamento. Este guia se mantém dentro da primeira formulação.
#Pilha local
Três componentes são suficientes. Python para ler os documentos: o módulo json para um lote FHIR, lxml para um documento CDA e a biblioteca hl7 para eventuais mensagens da versão 2; essa biblioteca se apresenta como um analisador de mensagens HL7 v2.x. Ollama para servir o modelo: Qwen 3.5 com 9 bilhões de parâmetros pesa 6,6 GB, com 256.000 tokens de contexto anunciados; Mistral Small 24B pesa 14 GB e anuncia 32.000 tokens. Por fim, o esquema JSON do Ollama, para obrigar o modelo a responder em um formato que possa ser verificado.
Nenhum desses modelos foi validado para uso clínico por seus desenvolvedores. A capacidade deles em francês médico deve ser avaliada com seus próprios prontuários, seguindo o protocolo abaixo. Uma placa de 8 GB é suficiente para o primeiro; o segundo exige mais memória de vídeo, especialmente se o contexto for longo.
#Ler os documentos: lote FHIR e documento CDA
Para um lote FHIR, que é um contêiner de uma coleção de recursos, a forma mais simples é ler o JSON tal como está e buscar os recursos por tipo. Isso evita depender de uma biblioteca cujas versões de FHIR variam. Cada fato registrado recebe um identificador curto (F1, F2...) e um texto legível: é isso que permitirá, posteriormente, localizar a origem de cada frase da síntese.
Em um documento CDA, o texto útil está nas seções do corpo estruturado: cada seção tem um título, um código e um bloco de texto narrativo. O código abaixo extrai essas seções com seus títulos, sem incluir o cabeçalho do documento, que contém a identidade do paciente. Os namespaces do CDA são os do HL7 versão 3.
#Quais fatos reter e com que cautela
| Recurso | O que se lê nele | Armadilha comum |
|---|---|---|
| Condition | Diagnóstico, data de início, status | Um diagnóstico resolvido ou errado pode permanecer no histórico |
| MedicationStatement | Medicamento, posologia, período | Um tratamento interrompido pode não ser marcado como tal |
| Observation | Resultado de exame laboratorial ou de medição, unidade, data | Comparar valores sem suas unidades nem valores de referência |
| AllergyIntolerance | Substância, reação, gravidade | Ausência de registro não significa ausência de alergia |
| Procedure | Procedimento realizado e sua data | Datas aproximadas ou faltantes |
| DocumentReference | Anexo, geralmente um relatório | Conteúdo codificado ou disponível por meio de um link, a ser obtido separadamente |
A última coluna conta mais do que as demais. Um modelo lê os fatos que você lhe fornece e não sabe o que falta: se um tratamento interrompido não for marcado como tal, ele aparecerá como em andamento na síntese. O código deve conter o status e a data, e o prompt deve pedir para indicar fatos sem data ou de status incerto. A ausência de informação não é uma informação: a síntese deve dizer isso.
#Escrever uma síntese que cite suas fontes, depois verificá-la
O prompt fornece os fatos numerados e exige que cada linha da síntese termine com as referências dos fatos utilizados, por exemplo [F3][F7]. Ele não contém o nome do paciente: a idade e o sexo são suficientes, e a identidade permanece no software usado na atividade profissional. A resposta tem formato livre, mas é estruturada em seções, o que permite lê-la em uma página.
O controle vem depois, no código. Duas verificações capturam a maioria dos erros graves: cada referência citada deve existir na lista de fatos e cada número da síntese deve estar presente nos fatos. Um número que aparece de forma inexplicável é um sinal típico de invenção ou erro de cópia, especialmente em valores biológicos ou posologias.
#O prompt de sistema
A seção « Pontos a verificar » é a mais útil na prática. Ela transforma as zonas de incerteza (tratamento sem data de término, resultado sem unidade, dois valores contraditórios) em perguntas a serem feitas ao médico, em vez de disfarçá-las em uma frase fluida.
#Avaliar a confiabilidade antes de qualquer uso
A confiança não se estabelece por decreto. Um estudo publicado em 2025 na npj Digital Medicine mediu os erros de modelos de linguagem na geração de notas clínicas: em 12.999 frases anotadas por profissionais clínicos, observou 1,47% de frases com alucinações e 3,45% de omissões, com 44% das alucinações consideradas graves, ou seja, capazes de afetar o diagnóstico ou a assistência ao paciente se não forem corrigidas. Esses números se referem a outra tarefa, com outros modelos: não são os seus. Eles mostram que uma baixa taxa de erro por frase continua sendo preocupante quando se considera um documento inteiro.
Uma síntese de trinta linhas com 1,5% de erro por linha, supondo erros independentes, contém pelo menos um erro em cerca de um terço dos casos. É uma ordem de grandeza para fins didáticos, não uma previsão. Daí o protocolo a seguir, que substitui o critério “zero erros em 50 prontuários”: esse critério não prova muita coisa, pois zero erros observados em 50 prontuários é compatível com uma taxa real de cerca de 6% no nível de confiança de 95% (regra dos três, 3 dividido por 50).
- 01Reunir uma amostra de prontuários anonimizadosUse prontuários variados: pacientes com múltiplas doenças, tratamentos numerosos, resultados antigos. Remova os dados de identificação e os dados desnecessários antes de qualquer uso fora do contexto de atendimento.
- 02Solicitar a anotação por um médicoCada frase de síntese é classificada: correta, imprecisa, omissão, erro. Diferencie erros que poderiam alterar uma decisão clínica.
- 03Contar por categoria e por gravidadeO número de erros graves por prontuário conta mais do que a taxa média. Defina um limite com o médico responsável antes de começar.
- 04Medir também as omissõesUm resumo que esquece uma alergia ou um tratamento é mais perigoso do que uma frase mal elaborada.
- 05Executar novamente a cada mudançaModelo, prompt ou formato de exportação: cada alteração exige executar a avaliação novamente.
#Entrada em produção: registros, acesso e escopo
- Registrar cada geração
- Conserve a data, a versão do modelo, a lista de fatos fornecida e a síntese gerada em um espaço protegido: é isso que permite reconstruir o que o médico leu.
- Controlar os acessos
- O servidor de inferência não deve ser acessível de fora; os discos estão criptografados; as contas são vinculadas a usuários identificados nominalmente.
- Mostrar fontes
- A interface mostra a síntese com o fato original correspondente a cada linha. Um médico que pode verificar com um clique realmente verifica.
- Limitar o escopo
- Comece com uso interno no consultório ou na instituição, com um pequeno número de usuários, antes de qualquer expansão. Um serviço oferecido a outras instituições altera seu status em relação à hospedagem.
- Prever uma validação humana explícita
- A síntese é assinada ou validada pelo profissional de saúde antes de ser incluída no prontuário; caso contrário, não deve constar nele.
- Saúde: transcrição de consultas
- Transcrição médica e LLM local: dados do paciente
- Criptografar o disco dos modelos
- Checklist de privacidade
- Limitar as alucinações de um LLM local
- LLM local e RGPD: dados privados nas empresas
- Fonte: seção de transmissão CDA-R2 do CI-SIS (ANS)
- Fonte: hospedagem de dados de saúde (Relyens, segundo a ANS)
- Fonte: estudo npj Digital Medicine sobre alucinações clínicas
- Fonte: recurso Bundle do FHIR R4
- Fonte: saídas estruturadas do Ollama
É possível resumir um prontuário médico com um LLM local?+
O DMP fornece seus documentos em FHIR?+
É necessário um provedor de hospedagem certificado HDS para uma ferramenta interna no consultório?+
Qual modelo local escolher para textos médicos?+
Um LLM pode inventar um resultado de exame laboratorial?+
Uma ferramenta desse tipo é um dispositivo médico?+
Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.