Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Motor de Sintomas Anpheros: metodologia
Como sintomas em texto livre em qualquer idioma se tornam conceitos ICD-10 e ICD-11 da OMS: o normalizador de IA, deteção de presença e experienciador, o vocabulário verificado pela OMS, resultados de avaliação, correspondência de casos semelhantes e limites.
O Anpheros Symptom Engine transforma o que uma pessoa escreve sobre como se sente, nas suas próprias palavras e idioma, em conceitos clínicos internacionais: um identificador Anpheros estável, um código WHO ICD-10, um código WHO ICD-11 e um sistema corporal, juntamente com se o sintoma está presente, resolvido, hipotético ou sobre outra pessoa. Funciona em produção por trás do Anpheros Daily, publica os seus resultados como HL7 FHIR R4 Observations na Anpheros Platform e expõe a mesma terminologia a qualquer aplicação através de uma API REST e FHIR. Esta página descreve como funciona, como foi verificado, o que mede e onde estão os seus limites.
Resumo
| Conceitos | 274 (197 sintomas, 77 achados), identificadores SYM-0001…, nunca reutilizados |
| Classificações | OMS ICD-10 (Versão 2019) e OMS ICD-11 MMS (2025-01), com a equivalência de cada mapeamento |
| Sistemas do corpo | 13, retirados dos blocos do capítulo 21 da ICD-11 (nervoso, digestivo, respiratório, pele…) |
| Idiomas | nomes em 20 idiomas; texto livre no idioma da pessoa |
| Sinais de alerta | 32, para 14 conceitos, citados palavra por palavra do CDC e NIDDK |
| Avaliação do normalizador | 5 idiomas (Romeno, Inglês, Espanhol, Alemão, Francês): código primário 97,5–100 %, presença e sujeito 92,5–98 %, sintomas negados reportados como presentes 0 % em todos os idiomas |
| Revisão clínica | ainda nenhuma: clinical_review: false em cada resposta |
| Normas | HL7 FHIR R4 (CodeSystem, ValueSet, ConceptMap, Observation), ICD-10, ICD-11, LOINC para resultados de laboratório |
1. O pipeline
Um sintoma passa por quatro etapas. O texto da pessoa nunca é alterado; cada etapa adiciona dados ao lado dele.
- Captura. A entrada bruta é armazenada como escrita, com o momento em que foi registada, o fuso horário do telefone, o idioma e, opcionalmente, a intensidade (1–10), o início e o fim. Nada a jusante a reescreve.
- Normalização (IA). Um modelo de linguagem grande (Google Gemini no Vertex AI) lê o texto e retorna, para cada sintoma que menciona: um código ICD-10 primário, códigos secundários opcionais, um rótulo curto e dois atributos, asserção (presente, ausente, resolvido, hipotético, incerto) e sujeito (a pessoa, ou outra pessoa). O modelo só pode escolher códigos do vocabulário Anpheros; qualquer outra resposta, uma entrada omitida ou um código primário inválido conta como uma tentativa falhada, nunca como "sintoma desconhecido".
- Mapeamento de conceitos (determinístico). O código ICD-10 é mapeado para o conceito Anpheros e, a partir dele, para ICD-11 e o sistema corporal. Esta etapa utiliza tabelas fixas, não IA, pelo que o mesmo código dá sempre o mesmo conceito.
- Publicação. Apenas os sintomas que estão presentes e são sobre a pessoa se tornam Observações FHIR no registo da pessoa, e apenas após a normalização ter sucesso. Se uma edição posterior ou re-normalização alterar isso, a Observação é retirada; o histórico de versões permanece.
2. Presença, tempo e experienciador
O texto clínico menciona frequentemente sintomas que a pessoa não tem. O processamento de linguagem natural clínico chama a isto deteção de negação, temporalidade e experienciador (a família de métodos NegEx e ConText). O motor lida com as mesmas três questões com os atributos de asserção e sujeito do modelo:
| Escrito | Asserção / sujeito | Publicado como sintoma da pessoa? |
|---|---|---|
| "Tenho tido dores de cabeça desde terça-feira" | presente / próprio | sim |
| "já não me dói a cabeça" | resolvido / próprio | não |
| "posso ter febre amanhã" | hipotético / próprio | não |
| "a minha mãe tem tosse" | presente / outro | não |
A queixa de um familiar nunca é transformada automaticamente em historial familiar.
3. O vocabulário e como foi verificado
O vocabulário abrange o capítulo XVIII da ICD-10 (R00–R94 e, desde a versão 2026.10.3, as suas subcategorias não residuais como R06.0 dispneia) e, onde a OMS classifica um sintoma noutro capítulo, o código da OMS: obstipação K59.0, acufenos H93.1, visão dupla H53.2, visão turva H53.8, prurido L29.9, dor articular M25.5, dor nas costas M54, problemas de sono G47.
- ICD-10. Cada código e título em inglês foi verificado no navegador WHO ICD-10 Versão 2019, incluindo as notas de inclusão e exclusão de cada código. Onde as notas moviam um sintoma para outro local (por exemplo, R19.4 exclui obstipação), o vocabulário seguiu a OMS.
- ICD-11. Cada conceito é mapeado para um código ICD-11 MMS 2025-01 retirado da Tabela Simples da OMS e comparado com a tabela oficial de mapeamento WHO ICD-10 → ICD-11. O motor utiliza o código de sintoma do capítulo 21 em vez de um código de doença (dor de cabeça → MB4D, não 8A8Z "doenças de dor de cabeça"); cada um dos 21 desvios da tabela estatística da OMS está listado com a sua razão no ficheiro de lançamento. 67 mapeamentos são equivalentes, os restantes são marcados como mais amplos, mais estreitos ou inexatos.
- Escolhas documentadas. "Enxaqueca" escrita por uma pessoa é codificada como dor de cabeça (R51), e diarreia não especificada como R19, porque os códigos alternativos da OMS (G43, A09) são diagnósticos; o motor regista os sintomas relatados, não diagnósticos.
- Traduções. Os nomes em inglês são os títulos da OMS. Os nomes em mais 18 idiomas são traduções automáticas revistas termo a termo, com assistência de IA, contra os títulos da OMS (
review: ai_reviewed); cinco foram reescritos em todos os idiomas onde o significado não correspondia ao código. Nenhum tradutor médico profissional os revisou ainda. - Sinais de alerta. Citados palavra por palavra, nunca parafraseados, de páginas de domínio público do CDC (AVC, ataque cardíaco) e NIDDK (diarreia, obstipação), cada um com a sua fonte, licença e a nota de que não é um diagnóstico. Onde uma citação diz 9-1-1, a nota adiciona o 112 europeu.
4. Avaliação
O normalizador é avaliado num conjunto fixo de 100 casos sintéticos escritos em romeno (a língua da maioria dos utilizadores atuais), cada um com o código primário, a afirmação e o sujeito esperados. 32 dos casos estão deliberadamente ausentes: negados, resolvidos, hipotéticos, incertos ou sobre outra pessoa. Resultados com o prompt atual (versão 3, 15 de outubro de 2026):
| Métrica | Resultado | Meta |
|---|---|---|
| Código primário correto | 100 % | ≥ 85 % |
| Afirmação e sujeito ambos corretos | 98 % | — |
| Sintomas negados relatados como presentes | 0 % | ≤ 3 % |
Os dois erros foram entradas administrativas ("uma consulta com o cardiologista na terça-feira", "quero perder 5 kg") classificadas como hipotéticas em vez de presentes; nenhuma delas é um sintoma. O conjunto de testes não foi revisto por um clínico, pelo que as pontuações são indicativas.
Outras línguas (16 de outubro de 2026). 40 dos casos, cobrindo todas as categorias, foram traduzidos para inglês, espanhol, alemão e francês, com as mesmas respostas esperadas; os casos informais foram reescritos no estilo informal de cada língua. As instruções para o modelo permaneceram as mesmas.
| Língua | Casos | Código primário | Presença e sujeito | Negados relatados como presentes |
|---|---|---|---|---|
| Romeno | 100 | 100 % | 98 % | 0 % |
| Inglês | 40 | 100 % | 97.5 % | 0 % |
| Espanhol | 40 | 97.5 % | 92.5 % | 0 % |
| Alemão | 40 | 100 % | 97.5 % | 0 % |
| Francês | 40 | 100 % | 95 % | 0 % |
A maioria dos erros restantes são as mesmas entradas administrativas ("consulta de cardiologia na terça-feira", "check-up, tudo bem") ou uma escolha entre dois estados não presentes ("sem febre hoje" como resolvido em vez de ausente); nenhum deles publica um sintoma. A única diferença de codificação foi o espanhol "escalofríos y malestar" (calafrios e mal-estar) codificado como mal-estar (R53) com calafrios (R68) como código secundário, em vez do inverso.
Os nomes mostrados às pessoas seguem a sua língua: a aplicação exibe o nome do conceito na língua do utilizador (nome leigo primeiro) e a nota de presença ("resolvido", "outra pessoa") nas 20 línguas da aplicação.
Em produção (16 de outubro de 2026), após o vocabulário ter sido verificado contra a OMS, todos os sintomas armazenados foram renormalizados. Nos registos de utilizadores reais: todos os sintomas normalizados, 0 sintomas presentes deixados como "incertos", e 0 sintomas que não estão presentes publicados como sendo da própria pessoa (auditoria independente das Observações publicadas).
5. Casos semelhantes (em desenvolvimento)
O próximo componente compara pessoas com base nos seus sintomas e resultados anormais de laboratório, para sugerir, apenas com consentimento explícito, pessoas que relatam algo muito semelhante.
- Perfil. Sintomas auto-relatados dos últimos 90 dias por conceito Anpheros, e resultados de laboratório dos últimos 180 dias fora do intervalo de referência impresso pelo laboratório, por código LOINC. Os perfis são independentes de idioma e país: um relatório de laboratório em romeno e um em inglês mapeiam para o mesmo código LOINC.
- Pontuação. Um índice Jaccard ponderado: sinais partilhados sobre todos os sinais de ambas as pessoas. Sintomas muito comuns (dor de cabeça, dor abdominal, fadiga, febre, tosse, tonturas…) pesam 0,25, sintomas específicos 1, um resultado anormal de laboratório 1,5. A partir de 50 participantes, os pesos são também escalados pela raridade de um sinal na população (frequência inversa de documentos). Dois sinais diferentes no mesmo sistema corporal ganham crédito parcial.
- Regra. Um par só é considerado com pelo menos três sintomas específicos partilhados, ou dois mais um resultado anormal de laboratório partilhado: queixas comuns isoladamente nunca tornam duas pessoas "semelhantes". É oferecido um convite a partir de uma pontuação de 0,70; a pessoa vê casos semelhantes a partir de 0,80.
- Privacidade. Apenas titulares de contas adultas, consentimento explícito (RGPD Art. 9), revogável a qualquer momento com eliminação imediata. Uma pessoa vê contagens e os sinais partilhados, nunca quem são os outros.
Não sugere um diagnóstico ou uma doença.
6. Como as aplicações o utilizam
- Anpheros Daily (iOS, Android, Mac, web): cada sintoma que uma pessoa regista passa pelo pipeline acima; a pessoa pode ver e corrigir o resultado.
- Anpheros Platform: os sintomas são armazenados como FHIR
Observations com categoriaurn:anpheros:observation-category|symptom, tanto códigos como o texto próprio da pessoa. Qualquer aplicação com o consentimento da pessoa pode lê-los. - A sua aplicação: procure conceitos com
GET /v1/terminology/symptoms, expanda o FHIRValueSet, traduza códigos com osConceptMaps para ICD-10 e ICD-11, e valide Observações contra o perfilanpheros-symptom. Consulte a API de dados de sintomas para pedidos e respostas. - Assistentes e agentes de IA leem os mesmos dados estruturados através da API de Contexto em vez de texto livre, para que as suas respostas possam citar códigos.
7. Limites
- O motor nomeia e codifica sintomas; não diagnostica, classifica causas nem liga sintomas a doenças.
- Nenhum clínico revisou ainda o vocabulário, as traduções ou os sinais de alerta.
- Os conjuntos de avaliação são sintéticos; 15 das 20 línguas ainda não têm conjunto de avaliação.
- O ICD-11 é licenciado pela OMS sob a licença CC BY-ND 3.0 IGO; os códigos e títulos são reproduzidos inalterados.
Relacionado
- API de dados de sintomas: conceitos, terminologia FHIR e sintomas reportados pelo paciente
- Anpheros Search: os mesmos sintomas juntamente com condições e tratamentos num catálogo público, cada entrada com as suas fontes
- Sistemas de códigos FHIR
- API de dados longitudinais do paciente
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card