AnpherosAnpheros PlatformDevelopers

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.

  1. 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.
  2. 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".
  3. 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.
  4. 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.

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.

Non suggerisce una diagnosi o una malattia.

6. Come le applicazioni lo utilizzano

7. Limiti

Correlati

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Product updates by email

New features, guides and the end of the beta. One email a month at most.

Send me occasional Anpheros Platform updates by email (new features, API changes, guides). I'll confirm by email and can unsubscribe in one click from any email. Privacy