Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Motore Sintomi Anpheros: metodologia
Come i sintomi in testo libero in qualsiasi lingua diventano concetti WHO ICD-10 e ICD-11: il normalizzatore AI, rilevamento presenza ed esperiente, il vocabolario controllato dall'OMS, risultati di valutazione, corrispondenza casi simili e limiti.
L'Anpheros Symptom Engine trasforma ciò che una persona scrive su come si sente, con le proprie parole e lingua, in concetti clinici internazionali: un identificatore Anpheros stabile, un codice WHO ICD-10, un codice WHO ICD-11 e un sistema corporeo, insieme alla determinazione se il sintomo è presente, risolto, ipotetico o riguarda qualcun altro. Funziona in produzione dietro Anpheros Daily, pubblica i suoi risultati come HL7 FHIR R4 Observations sulla Anpheros Platform ed espone la stessa terminologia a qualsiasi applicazione tramite un'API REST e FHIR. Questa pagina descrive come funziona, come è stato verificato, cosa misura e quali sono i suoi limiti.
A colpo d'occhio
| Concetti | 274 (197 sintomi, 77 riscontri), identificatori SYM-0001…, mai riutilizzati |
| Classificazioni | WHO ICD-10 (Versione 2019) e WHO ICD-11 MMS (2025-01), con l'equivalenza di ogni mappatura |
| Sistemi corporei | 13, tratti dai blocchi del capitolo 21 dell'ICD-11 (nervoso, digestivo, respiratorio, pelle…) |
| Lingue | nomi in 20 lingue; testo libero nella lingua della persona |
| Segni di allarme | 32, per 14 concetti, citati parola per parola da CDC e NIDDK |
| Valutazione del normalizzatore | 5 lingue (rumeno, inglese, spagnolo, tedesco, francese): codice primario 97.5–100 %, presenza e soggetto 92.5–98 %, sintomi negati riportati come presenti 0 % in ogni lingua |
| Revisione clinica | nessuno ancora: clinical_review: false su ogni risposta |
| Standard | HL7 FHIR R4 (CodeSystem, ValueSet, ConceptMap, Observation), ICD-10, ICD-11, LOINC per i risultati di laboratorio |
1. La pipeline
Un sintomo attraversa quattro fasi. Il testo della persona non viene mai modificato; ogni fase aggiunge dati accanto ad esso.
- Acquisizione. L'input grezzo viene memorizzato così come è stato scritto, con il momento in cui è stato annotato, il fuso orario del telefono, la lingua e, opzionalmente, l'intensità (1–10), l'insorgenza e la fine. Nessun processo downstream lo riscrive.
- Normalizzazione (AI). Un modello linguistico di grandi dimensioni (Google Gemini su Vertex AI) legge il testo e restituisce, per ogni sintomo menzionato: un codice ICD-10 primario, codici secondari opzionali, un'etichetta breve e due attributi, assertion (presente, assente, risolto, ipotetico, incerto) e subject (la persona o qualcun altro). Il modello può scegliere codici solo dal vocabolario Anpheros; qualsiasi altra risposta, una voce omessa o un codice primario non valido conta come un tentativo fallito, mai come "sintomo sconosciuto".
- Mappatura dei concetti (deterministica). Il codice ICD-10 viene mappato al concetto Anpheros e, da esso, a ICD-11 e al sistema corporeo. Questa fase utilizza tabelle fisse, non AI, quindi lo stesso codice fornisce sempre lo stesso concetto.
- Pubblicazione. Solo i sintomi che sono presenti e riguardano la persona diventano FHIR Observations nel record della persona, e solo dopo che la normalizzazione ha avuto successo. Se una modifica successiva o una ri-normalizzazione cambiano questo stato, l'Observation viene ritirata; la cronologia delle versioni rimane.
2. Presenza, tempo ed esperiente
Il testo clinico menziona spesso sintomi che la persona non ha. L'elaborazione del linguaggio naturale clinico chiama questo negazione, temporalità ed esperiente (la famiglia di metodi NegEx e ConText). Il motore gestisce le stesse tre domande con gli attributi di asserzione e soggetto del modello:
| Scritto | Asserzione / soggetto | Pubblicato come sintomo della persona? |
|---|---|---|
| "Ho mal di testa da martedì" | presente / sé | sì |
| "non mi fa più male la testa" | risolto / sé | no |
| "potrei avere la febbre domani" | ipotetico / sé | no |
| "mia madre ha la tosse" | presente / altro | no |
Il lamento di un parente non viene mai trasformato automaticamente in storia familiare.
3. Il vocabolario e come è stato verificato
Il vocabolario copre il capitolo XVIII dell'ICD-10 (R00–R94 e, dalla versione 2026.10.3, le sue sottocategorie non residue come R06.0 dispnea) e, laddove l'OMS classifica un sintomo in un altro capitolo, il codice OMS: stipsi K59.0, tinnito H93.1, visione doppia H53.2, visione offuscata H53.8, prurito L29.9, dolore articolare M25.5, mal di schiena M54, problemi di sonno G47.
- ICD-10. Ogni codice e titolo inglese è stato verificato rispetto al browser WHO ICD-10 Versione 2019, incluse le note di inclusione ed esclusione di ciascun codice. Laddove le note spostavano un sintomo altrove (ad esempio, R19.4 esclude la stipsi), il vocabolario ha seguito l'OMS.
- ICD-11. Ogni concetto è mappato a un codice ICD-11 MMS 2025-01 tratto dalla Simple Tabulation dell'OMS e confrontato con la tabella ufficiale di mappatura WHO ICD-10 → ICD-11. Il motore utilizza il codice sintomo del capitolo 21 anziché un codice di malattia (mal di testa → MB4D, non 8A8Z "disturbi del mal di testa"); ognuna delle 21 deviazioni dalla tabella statistica dell'OMS è elencata con la sua motivazione nel file di rilascio. 67 mappature sono equivalenti, le restanti sono contrassegnate come più ampie, più strette o imprecise.
- Scelte documentate. "Emicrania" scritta da una persona è codificata come mal di testa (R51) e diarrea non specificata come R19, poiché i codici OMS alternativi (G43, A09) sono diagnosi; il motore registra i sintomi riportati, non le diagnosi.
- Traduzioni. I nomi inglesi sono i titoli dell'OMS. I nomi in altre 18 lingue sono traduzioni automatiche riviste termine per termine, con assistenza AI, rispetto ai titoli dell'OMS (
review: ai_reviewed); cinque sono state riscritte in ogni lingua in cui il significato non corrispondeva al codice. Nessun traduttore medico professionista le ha ancora revisionate. - Segnali di avvertimento. Citati parola per parola, mai parafrasati, da pagine di pubblico dominio del CDC (ictus, infarto) e del NIDDK (diarrea, stipsi), ognuno con la sua fonte, licenza e la nota che non si tratta di una diagnosi. Laddove una citazione dice 9-1-1, la nota aggiunge il 112 europeo.
4. Valutazione
Il normalizzatore viene valutato su un set fisso di 100 casi sintetici scritti in rumeno (la lingua della maggior parte degli utenti attuali), ognuno con il codice primario, l'asserzione e il soggetto attesi. 32 dei casi sono deliberatamente assenti: negati, risolti, ipotetici, incerti o riguardanti un'altra persona. Risultati con il prompt corrente (versione 3, 15 ottobre 2026):
| Metrica | Risultato | Obiettivo |
|---|---|---|
| Codice primario corretto | 100 % | ≥ 85 % |
| Asserzione e soggetto entrambi corretti | 98 % | — |
| Sintomi negati riportati come presenti | 0 % | ≤ 3 % |
I due errori erano voci amministrative ("un appuntamento con il cardiologo martedì", "voglio perdere 5 kg") classificate come ipotetiche invece che presenti; nessuna delle due è un sintomo. Il set di test non è stato revisionato da un clinico, quindi i punteggi sono indicativi.
Altre lingue (16 ottobre 2026). 40 dei casi, che coprono ogni categoria, sono stati tradotti in inglese, spagnolo, tedesco e francese, con le stesse risposte attese; i casi informali sono stati riscritti nello stile informale di ogni lingua. Le istruzioni per il modello sono rimaste le stesse.
| Lingua | Casi | Codice primario | Presenza e soggetto | Negati riportati come presenti |
|---|---|---|---|---|
| Rumeno | 100 | 100 % | 98 % | 0 % |
| Inglese | 40 | 100 % | 97.5 % | 0 % |
| Spagnolo | 40 | 97.5 % | 92.5 % | 0 % |
| Tedesco | 40 | 100 % | 97.5 % | 0 % |
| Francese | 40 | 100 % | 95 % | 0 % |
La maggior parte degli errori rimanenti sono le stesse voci amministrative ("appuntamento dal cardiologo martedì", "check-up, tutto bene") o una scelta tra due stati non presenti ("nessuna febbre oggi" come risolto piuttosto che assente); nessuno di essi pubblica un sintomo. L'unica differenza di codifica è stata lo spagnolo "escalofríos y malestar" (brividi e malessere) codificato come malessere (R53) con brividi (R68) come codice secondario, piuttosto che il contrario.
I nomi mostrati alle persone seguono la loro lingua: l'app visualizza il nome del concetto nella lingua dell'utente (nome comune prima) e la nota di presenza ("risolto", "qualcun altro") nelle 20 lingue dell'app.
In produzione (16 ottobre 2026), dopo che il vocabolario è stato verificato rispetto all'OMS, ogni sintomo memorizzato è stato rinormalizzato. Sui record degli utenti reali: tutti i sintomi normalizzati, 0 sintomi presenti lasciati come "non chiari", e 0 sintomi non presenti pubblicati come propri della persona (audit indipendente delle Osservazioni pubblicate).
5. Casi simili (in sviluppo)
Il componente successivo confronta le persone in base ai loro sintomi e ai risultati di laboratorio anomali, per suggerire, solo con esplicito consenso, persone che segnalano qualcosa di molto simile.
- Profilo. Sintomi auto-riferiti degli ultimi 90 giorni per concetto Anpheros, e risultati di laboratorio degli ultimi 180 giorni al di fuori dell'intervallo di riferimento stampato dal laboratorio, per codice LOINC. I profili sono indipendenti da lingua e paese: un referto di laboratorio in rumeno e uno in inglese mappano allo stesso codice LOINC.
- Punteggio. Un indice Jaccard pesato: segni condivisi su tutti i segni di entrambe le persone. Sintomi molto comuni (mal di testa, dolore addominale, affaticamento, febbre, tosse, vertigini...) pesano 0,25, sintomi specifici 1, un risultato di laboratorio anomalo 1,5. Da 50 partecipanti, i pesi vengono anche scalati in base alla rarità di un segno nella popolazione (frequenza inversa del documento). Due segni diversi nello stesso sistema corporeo ottengono crediti parziali.
- Regola. Una coppia viene considerata solo con almeno tre sintomi specifici condivisi, o due più un risultato di laboratorio anomalo condiviso: le lamentele comuni da sole non rendono mai due persone "simili". Un invito viene offerto da un punteggio di 0,70; la persona vede casi simili da 0,80.
- Privacy. Solo titolari di account adulti, consenso esplicito (GDPR Art. 9), revocabile in qualsiasi momento con eliminazione immediata. Una persona vede i conteggi e i segni condivisi, mai chi siano gli altri.
Non suggerisce una diagnosi o una malattia.
6. Come le applicazioni lo utilizzano
- Anpheros Daily (iOS, Android, Mac, web): ogni sintomo che una persona annota passa attraverso la pipeline sopra; la persona può vedere e correggere il risultato.
- Anpheros Platform: i sintomi vengono archiviati come FHIR
Observationcon categoriaurn:anpheros:observation-category|symptom, sia codici che testo proprio della persona. Qualsiasi applicazione con il consenso della persona può leggerli. - La tua applicazione: cerca concetti con
GET /v1/terminology/symptoms, espandi il FHIRValueSet, traduci codici con iConceptMapin ICD-10 e ICD-11, e valida le Osservazioni rispetto al profiloanpheros-symptom. Vedi Symptom data API per richieste e risposte. - Assistenti e agenti AI leggono gli stessi dati strutturati tramite la Context API invece di testo libero, in modo che le loro risposte possano citare i codici.
7. Limiti
- Il motore nomina e codifica i sintomi; non diagnostica, non classifica le cause né collega i sintomi alle malattie.
- Nessun clinico ha ancora revisionato il vocabolario, le traduzioni o i segnali di avvertimento.
- I set di valutazione sono sintetici; 15 delle 20 lingue non dispongono ancora di un set di valutazione.
- ICD-11 è concesso in licenza dall'OMS sotto CC BY-ND 3.0 IGO; codici e titoli sono riprodotti invariati.
Correlati
- API dati sintomi: concetti, terminologia FHIR e sintomi riportati dal paziente
- Anpheros Search: gli stessi sintomi insieme a condizioni e trattamenti in un unico catalogo pubblico, ogni voce con le sue fonti
- Sistemi di codici FHIR
- API dati longitudinali del paziente
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card