Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Motorul de Simptome Anpheros: metodologie
Cum devin simptomele text liber în orice limbă concepte ICD-10 și ICD-11 ale OMS: normalizatorul AI, detectarea prezenței și a celui care experimentează, vocabularul verificat de OMS, rezultatele evaluării, potrivirea cazurilor similare și limitele.
Anpheros Symptom Engine transformă ceea ce scrie o persoană despre cum se simte, în propriile cuvinte și limbă, în concepte clinice internaționale: un identificator Anpheros stabil, un cod WHO ICD-10, un cod WHO ICD-11 și un sistem corporal, împreună cu informații despre dacă simptomul este prezent, rezolvat, ipotetic sau despre altcineva. Rulează în producție în spatele Anpheros Daily, publică rezultatele sale ca HL7 FHIR R4 Observations pe Anpheros Platform și expune aceeași terminologie oricărei aplicații printr-un API REST și FHIR. Această pagină descrie cum funcționează, cum a fost verificat, ce măsoară și unde sunt limitele sale.
Pe scurt
| Concepte | 274 (197 simptome, 77 constatări), identificatori SYM-0001…, niciodată reutilizați |
| Clasificări | WHO ICD-10 (Versiunea 2019) și WHO ICD-11 MMS (2025-01), cu echivalența fiecărei mapări |
| Sisteme corporale | 13, preluate din blocurile capitolului 21 ICD-11 (nervos, digestiv, respirator, piele…) |
| Limbi | nume în 20 de limbi; text liber în limba proprie a persoanei |
| Semne de avertizare | 32, pentru 14 concepte, citate cuvânt cu cuvânt de la CDC și NIDDK |
| Evaluarea Normalizatorului | 5 limbi (română, engleză, spaniolă, germană, franceză): cod primar 97,5–100 %, prezență și subiect 92,5–98 %, simptome negate raportate ca prezente 0 % în fiecare limbă |
| Revizuire clinică | încă nu: clinical_review: false la fiecare răspuns |
| Standarde | HL7 FHIR R4 (CodeSystem, ValueSet, ConceptMap, Observation), ICD-10, ICD-11, LOINC pentru rezultate de laborator |
1. Pipeline-ul
Un simptom trece prin patru etape. Textul persoanei nu este niciodată modificat; fiecare etapă adaugă date lângă el.
- Capturare. Înregistrarea brută este stocată așa cum a fost scrisă, împreună cu momentul în care a fost notată, fusul orar al telefonului, limba și, opțional, intensitatea (1–10), debutul și sfârșitul. Nimic ulterior nu o rescrie.
- Normalizare (AI). Un model lingvistic mare (Google Gemini pe Vertex AI) citește textul și returnează, pentru fiecare simptom menționat: un cod ICD-10 primar, coduri secundare opționale, o etichetă scurtă și două atribute, afirmare (prezent, absent, rezolvat, ipotetic, incert) și subiect (persoana sau altcineva). Modelul poate alege coduri doar din vocabularul Anpheros; orice alt răspuns, o intrare omisă sau un cod primar invalid este considerat o încercare eșuată, niciodată "simptom necunoscut".
- Mapare conceptuală (deterministică). Codul ICD-10 este mapat la conceptul Anpheros și, din acesta, la ICD-11 și sistemul corporal. Această etapă folosește tabele fixe, nu AI, deci același cod oferă întotdeauna același concept.
- Publicare. Doar simptomele care sunt prezente și despre persoană devin Observații FHIR în registrul persoanei, și numai după ce normalizarea reușește. Dacă o editare ulterioară sau o re-normalizare modifică acest lucru, Observația este retrasă; istoricul versiunilor rămâne.
2. Prezență, timp și experimentator
Textul clinic menționează adesea simptome pe care persoana nu le are. Procesarea limbajului natural clinic numește aceasta negare, temporalitate și experimentator (familia de metode NegEx și ConText). Motorul gestionează aceleași trei întrebări cu atributele de aserțiune și subiect ale modelului:
| Scris | Aserțiune / subiect | Publicat ca simptom al persoanei? |
|---|---|---|
| "Am avut dureri de cap de marți" | prezent / sine | da |
| "capul meu nu mai doare" | rezolvat / sine | nu |
| "s-ar putea să fac febră mâine" | ipotetic / sine | nu |
| "mama mea are tuse" | prezent / altcineva | nu |
O plângere a unei rude nu este niciodată transformată automat în istoricul familial.
3. Vocabularul și modul în care a fost verificat
Vocabularul acoperă capitolul XVIII din ICD-10 (R00–R94 și, începând cu versiunea 2026.10.3, subcategoriile sale non-reziduale, cum ar fi R06.0 dispnee) și, acolo unde OMS clasifică un simptom într-un alt capitol, codul OMS: constipație K59.0, tinitus H93.1, vedere dublă H53.2, vedere încețoșată H53.8, mâncărime L29.9, dureri articulare M25.5, dureri de spate M54, probleme de somn G47.
- ICD-10. Fiecare cod și titlu în limba engleză a fost verificat în browserul WHO ICD-10 Versiunea 2019, inclusiv notele de includere și excludere ale fiecărui cod. Acolo unde notele au mutat un simptom în altă parte (de exemplu, R19.4 exclude constipația), vocabularul a urmat OMS.
- ICD-11. Fiecare concept este mapat la un cod ICD-11 MMS 2025-01 preluat din WHO Simple Tabulation și comparat cu tabelul oficial de mapare WHO ICD-10 → ICD-11. Motorul utilizează codul capitolului 21 simptom în locul unui cod de boală (dureri de cap → MB4D, nu 8A8Z "tulburări de durere de cap"); fiecare dintre cele 21 de abateri de la tabelul statistic OMS este listată cu motivul său în fișierul de lansare. 67 de mapări sunt echivalente, restul sunt marcate ca mai largi, mai înguste sau inexacte.
- Alegeri documentate. "Migrena" scrisă de o persoană este codificată ca durere de cap (R51), iar diareea nespecificată ca R19, deoarece codurile alternative OMS (G43, A09) sunt diagnostice; motorul înregistrează simptomele raportate, nu diagnosticele.
- Traduceri. Numele în limba engleză sunt titlurile OMS. Numele în alte 18 limbi sunt traduceri automate revizuite termen cu termen, cu asistență AI, în raport cu titlurile OMS (
review: ai_reviewed); cinci au fost rescries în fiecare limbă în care sensul nu corespundea codului. Niciun traducător medical profesionist nu le-a revizuit încă. - Semne de avertizare. Citate cuvânt cu cuvânt, niciodată parafrazate, din pagini din domeniul public ale CDC (accident vascular cerebral, atac de cord) și NIDDK (diaree, constipație), fiecare cu sursa sa, licența și nota că nu este un diagnostic. Acolo unde un citat menționează 9-1-1, nota adaugă numărul european 112.
4. Evaluare
Normalizatorul este evaluat pe un set fix de 100 de cazuri sintetice scrise în limba română (limba majorității utilizatorilor actuali), fiecare cu codul primar, afirmația și subiectul așteptat. 32 dintre cazuri sunt în mod deliberat absente: negate, rezolvate, ipotetice, incerte sau despre o altă persoană. Rezultate cu promptul curent (versiunea 3, 15 octombrie 2026):
| Metrică | Rezultat | Țintă |
|---|---|---|
| Cod primar corect | 100 % | ≥ 85 % |
| Afirmație și subiect ambele corecte | 98 % | — |
| Simptome negate raportate ca prezente | 0 % | ≤ 3 % |
Cele două erori au fost înregistrări administrative („o programare la cardiolog marți”, „vreau să slăbesc 5 kg”) clasificate ca ipotetice în loc de prezente; niciuna nu este un simptom. Setul de testare nu a fost revizuit de un clinician, deci scorurile sunt indicative.
Alte limbi (16 octombrie 2026). 40 dintre cazuri, acoperind fiecare categorie, au fost traduse în engleză, spaniolă, germană și franceză, cu aceleași răspunsuri așteptate; cazurile informale au fost rescrie în stilul informal propriu fiecărei limbi. Instrucțiunile către model au rămas aceleași.
| Limbă | Cazuri | Cod primar | Prezență și subiect | Negate raportate ca prezente |
|---|---|---|---|---|
| Română | 100 | 100 % | 98 % | 0 % |
| Engleză | 40 | 100 % | 97.5 % | 0 % |
| Spaniolă | 40 | 97.5 % | 92.5 % | 0 % |
| Germană | 40 | 100 % | 97.5 % | 0 % |
| Franceză | 40 | 100 % | 95 % | 0 % |
Majoritatea erorilor rămase sunt aceleași înregistrări administrative („programare la cardiolog marți”, „control, totul în regulă”) sau o alegere între două stări neprezente („fără febră astăzi” ca rezolvată în loc de absentă); niciuna dintre ele nu publică un simptom. Singura diferență de codificare a fost în spaniolă „escalofríos y malestar” (frisoane și stare de rău) codificată ca stare de rău (R53) cu frisoane (R68) ca un cod secundar, mai degrabă decât invers.
Numele afișate persoanelor urmează limba lor: aplicația afișează numele conceptului în limba utilizatorului (numele laic primul) și nota de prezență („rezolvat”, „altcineva”) în cele 20 de limbi ale aplicației.
În producție (16 octombrie 2026), după ce vocabularul a fost verificat în raport cu OMS, fiecare simptom stocat a fost re-normalizat. Pe înregistrările utilizatorilor reali: toate simptomele normalizate, 0 simptome prezente lăsate ca „neclare” și 0 simptome care nu sunt prezente publicate ca fiind ale persoanei (audit independent al Observațiilor publicate).
5. Cazuri similare (în curs de dezvoltare)
Următorul component compară persoane pe baza simptomelor și a rezultatelor anormale de laborator, pentru a sugera, doar cu consimțământ explicit, persoane care raportează ceva foarte similar.
- Profil. Simptome auto-raportate din ultimele 90 de zile, conform conceptului Anpheros, și rezultate de laborator din ultimele 180 de zile, în afara intervalului de referință tipărit de laborator, conform codului LOINC. Profilurile sunt independente de limbă și țară: un raport de laborator în română și unul în engleză corespund aceluiași cod LOINC.
- Scor. Un indice Jaccard ponderat: semne comune împărțite la toate semnele ambelor persoane. Simptomele foarte comune (durere de cap, durere abdominală, oboseală, febră, tuse, amețeală...) cântăresc 0.25, simptomele specifice 1, un rezultat anormal de laborator 1.5. De la 50 de participanți, ponderile sunt, de asemenea, scalate în funcție de cât de rar este un semn în populație (frecvența inversă a documentului). Două semne diferite din același sistem corporal primesc credit parțial.
- Regulă. O pereche este luată în considerare doar dacă există cel puțin trei simptome specifice comune, sau două plus un rezultat anormal de laborator comun: plângerile comune singure nu fac niciodată două persoane "similare". O invitație este oferită de la un scor de 0.70; persoana vede cazuri similare de la 0.80.
- Confidențialitate. Doar deținătorii de conturi adulți, consimțământ explicit (GDPR Art. 9), revocabil în orice moment cu ștergere imediată. O persoană vede numărul și semnele comune, niciodată cine sunt ceilalți.
Acesta nu sugerează un diagnostic sau o boală.
6. Cum folosesc aplicațiile
- Anpheros Daily (iOS, Android, Mac, web): fiecare simptom notat de o persoană trece prin fluxul de mai sus; persoana poate vedea și corecta rezultatul.
- Anpheros Platform: simptomele sunt stocate ca FHIR
Observationcu categorieurn:anpheros:observation-category|symptom, atât coduri, cât și textul propriu al persoanei. Orice aplicație, cu consimțământul persoanei, le poate citi. - Aplicația dvs.: căutați concepte cu
GET /v1/terminology/symptoms, extindeți FHIRValueSet, traduceți coduri cuConceptMapîn ICD-10 și ICD-11 și validați Observații în raport cu profilulanpheros-symptom. Consultați Symptom data API pentru cereri și răspunsuri. - Asistenții și agenții AI citesc aceleași date structurate prin Context API în loc de text liber, astfel încât răspunsurile lor pot cita coduri.
7. Limite
- Motorul numește și codifică simptome; nu diagnostichează, nu clasifică cauzele și nu leagă simptomele de boli.
- Niciun clinician nu a revizuit încă vocabularul, traducerile sau semnele de avertizare.
- Seturile de evaluare sunt sintetice; 15 din cele 20 de limbi nu au încă un set de evaluare.
- ICD-11 este licențiat de OMS sub licența CC BY-ND 3.0 IGO; codurile și titlurile sunt reproduse neschimbate.
Conexe
- API pentru date despre simptome: concepte, terminologie FHIR și simptome raportate de pacienți
- Anpheros Search: aceleași simptome împreună cu afecțiuni și tratamente într-un singur catalog public, fiecare intrare cu sursele sale
- Sisteme de coduri FHIR
- API pentru date longitudinale ale pacienților
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card