Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Moteur de symptômes Anpheros : méthodologie
Comment les symptômes en texte libre dans n'importe quelle langue deviennent des concepts OMS ICD-10 et ICD-11 : le normaliseur IA, la détection de présence et d'expérimentateur, le vocabulaire vérifié par l'OMS, les résultats d'évaluation, la correspondance de cas similaires et les limites.
Le moteur de symptômes Anpheros transforme ce qu'une personne écrit sur ce qu'elle ressent, dans ses propres mots et sa propre langue, en concepts cliniques internationaux : un identifiant Anpheros stable, un code OMS ICD-10, un code OMS ICD-11 et un système corporel, ainsi que la présence, la résolution, l'hypothèse ou l'attribution du symptôme à une autre personne. Il fonctionne en production derrière Anpheros Daily, publie ses résultats sous forme d'Observations HL7 FHIR R4 sur la plateforme Anpheros, et expose la même terminologie à toute application via une API REST et FHIR. Cette page décrit son fonctionnement, comment il a été vérifié, ce qu'il mesure et quelles sont ses limites.
Aperçu
| Concepts | 274 (197 symptômes, 77 constatations), identifiants SYM-0001…, jamais réutilisés |
| Classifications | OMS CIM-10 (Version 2019) et OMS CIM-11 MMS (2025-01), avec l'équivalence de chaque mappage |
| Systèmes corporels | 13, tirés des blocs du chapitre 21 de la CIM-11 (nerveux, digestif, respiratoire, cutané…) |
| Langues | noms dans 20 langues ; texte libre dans la langue de la personne |
| Signes d'alerte | 32, pour 14 concepts, cités mot pour mot du CDC et du NIDDK |
| Évaluation du normaliseur | 5 langues (roumain, anglais, espagnol, allemand, français) : code primaire 97,5–100 %, présence et sujet 92,5–98 %, symptômes niés rapportés comme présents 0 % dans chaque langue |
| Revue clinique | aucune pour l'instant : clinical_review: false sur chaque réponse |
| Normes | HL7 FHIR R4 (CodeSystem, ValueSet, ConceptMap, Observation), CIM-10, CIM-11, LOINC pour les résultats de laboratoire |
1. Le pipeline
Un symptôme passe par quatre étapes. Le texte de la personne n'est jamais modifié ; chaque étape ajoute des données à côté.
- Capture. L'entrée brute est stockée telle qu'écrite, avec le moment où elle a été notée, le fuseau horaire du téléphone, la langue, et éventuellement l'intensité (1-10), le début et la fin. Rien en aval ne la réécrit.
- Normalisation (IA). Un grand modèle linguistique (Google Gemini sur Vertex AI) lit le texte et renvoie, pour chaque symptôme mentionné : un code ICD-10 primaire, des codes secondaires optionnels, une étiquette courte et deux attributs, assertion (présent, absent, résolu, hypothétique, incertain) et sujet (la personne, ou quelqu'un d'autre). Le modèle ne peut choisir que des codes du vocabulaire Anpheros ; toute autre réponse, une entrée omise ou un code primaire invalide compte comme une tentative échouée, jamais comme "symptôme inconnu".
- Mappage de concepts (déterministe). Le code ICD-10 est mappé au concept Anpheros et, à partir de celui-ci, à ICD-11 et au système corporel. Cette étape utilise des tables fixes, pas d'IA, donc le même code donne toujours le même concept.
- Publication. Seuls les symptômes qui sont présents et concernent la personne deviennent des Observations FHIR dans le dossier de la personne, et ce, uniquement après que la normalisation ait réussi. Si une modification ultérieure ou une re-normalisation change cela, l'Observation est retirée ; l'historique des versions reste.
2. Présence, temps et expérimentateur
Le texte clinique mentionne souvent des symptômes que la personne n'a pas. Le traitement automatique du langage naturel clinique appelle cela la détection de négation, de temporalité et d'expérimentateur (la famille de méthodes NegEx et ConText). Le moteur traite les trois mêmes questions avec les attributs d'assertion et de sujet du modèle :
| Écrit | Assertion / sujet | Publié comme symptôme de la personne ? |
|---|---|---|
| "J'ai mal à la tête depuis mardi" | present / self | oui |
| "ma tête ne me fait plus mal" | resolved / self | non |
| "Je pourrais avoir de la fièvre demain" | hypothetical / self | non |
| "ma mère a une toux" | present / other | non |
La plainte d'un parent n'est jamais automatiquement transformée en antécédents familiaux.
3. Le vocabulaire et sa vérification
Le vocabulaire couvre le chapitre XVIII de la CIM-10 (R00–R94, et depuis la version 2026.10.3 ses sous-catégories non résiduelles telles que R06.0 dyspnée) et, lorsque l'OMS classe un symptôme dans un autre chapitre, le code OMS : constipation K59.0, acouphènes H93.1, vision double H53.2, vision floue H53.8, démangeaisons L29.9, douleur articulaire M25.5, douleur dorsale M54, problèmes de sommeil G47.
- CIM-10. Chaque code et titre anglais a été vérifié par rapport au navigateur OMS CIM-10 Version 2019, y compris les notes d'inclusion et d'exclusion de chaque code. Lorsque les notes déplaçaient un symptôme ailleurs (par exemple, R19.4 exclut la constipation), le vocabulaire a suivi l'OMS.
- CIM-11. Chaque concept est mappé à un code CIM-11 MMS 2025-01 issu de la tabulation simple de l'OMS et comparé au tableau officiel de mappage CIM-10 → CIM-11 de l'OMS. Le moteur utilise le code symptôme du chapitre 21 plutôt qu'un code de maladie (mal de tête → MB4D, pas 8A8Z "troubles du mal de tête") ; chacun des 21 écarts par rapport au tableau statistique de l'OMS est répertorié avec sa raison dans le fichier de version. 67 mappages sont équivalents, les autres sont marqués comme plus larges, plus étroits ou inexacts.
- Choix documentés. "Migraine" écrit par une personne est codé comme mal de tête (R51), et diarrhée non spécifiée comme R19, car les codes OMS alternatifs (G43, A09) sont des diagnostics ; le moteur enregistre les symptômes rapportés, pas les diagnostics.
- Traductions. Les noms anglais sont les titres de l'OMS. Les noms dans 18 autres langues sont des traductions automatiques révisées terme par terme, avec l'aide de l'IA, par rapport aux titres de l'OMS (
review: ai_reviewed) ; cinq ont été réécrites dans chaque langue où le sens ne correspondait pas au code. Aucun traducteur médical professionnel ne les a encore revues. - Signes d'alerte. Citations mot pour mot, jamais paraphrasées, provenant de pages du domaine public du CDC (AVC, crise cardiaque) et du NIDDK (diarrhée, constipation), chacune avec sa source, sa licence et la note qu'il ne s'agit pas d'un diagnostic. Lorsqu'une citation mentionne 9-1-1, la note ajoute le 112 européen.
4. Évaluation
Le normaliseur est évalué sur un ensemble fixe de 100 cas synthétiques rédigés en roumain (la langue de la plupart des utilisateurs actuels), chacun avec le code primaire attendu, l'assertion et le sujet. 32 des cas sont délibérément absents : niés, résolus, hypothétiques, incertains ou concernant une autre personne. Résultats avec le prompt actuel (version 3, 15 octobre 2026) :
| Métrique | Résultat | Cible |
|---|---|---|
| Code primaire correct | 100 % | ≥ 85 % |
| Assertion et sujet tous deux corrects | 98 % | — |
| Symptômes niés rapportés comme présents | 0 % | ≤ 3 % |
Les deux erreurs concernaient des entrées administratives ("un rendez-vous chez le cardiologue mardi", "je veux perdre 5 kg") classées comme hypothétiques au lieu de présentes ; aucune n'est un symptôme. L'ensemble de test n'a pas été revu par un clinicien, les scores sont donc indicatifs.
Autres langues (16 octobre 2026). 40 des cas, couvrant chaque catégorie, ont été traduits en anglais, espagnol, allemand et français, avec les mêmes réponses attendues ; les cas informels ont été réécrits dans le style informel propre à chaque langue. Les instructions données au modèle sont restées les mêmes.
| Langue | Cas | Code primaire | Présence et sujet | Niés rapportés comme présents |
|---|---|---|---|---|
| Roumain | 100 | 100 % | 98 % | 0 % |
| Anglais | 40 | 100 % | 97.5 % | 0 % |
| Espagnol | 40 | 97.5 % | 92.5 % | 0 % |
| Allemand | 40 | 100 % | 97.5 % | 0 % |
| Français | 40 | 100 % | 95 % | 0 % |
La plupart des erreurs restantes concernent les mêmes entrées administratives ("rendez-vous chez le cardiologue mardi", "bilan de santé, tout va bien") ou un choix entre deux états non présents ("pas de fièvre aujourd'hui" comme résolu plutôt qu'absent) ; aucun d'entre eux ne publie un symptôme. La seule différence de codage concernait l'espagnol "escalofríos y malestar" (frissons et malaise) codé comme malaise (R53) avec frissons (R68) comme code secondaire, plutôt que l'inverse.
Les noms présentés aux personnes suivent leur langue : l'application affiche le nom du concept dans la langue de l'utilisateur (nom vernaculaire en premier) et la note de présence ("résolu", "une autre personne") dans les 20 langues de l'application.
En production (16 octobre 2026), après vérification du vocabulaire par rapport à l'OMS, chaque symptôme stocké a été re-normalisé. Sur les enregistrements de vrais utilisateurs : tous les symptômes normalisés, 0 symptôme présent laissé comme "incertain", et 0 symptôme non présent publié comme appartenant à la personne (audit indépendant des Observations publiées).
5. Cas similaires (en développement)
Le composant suivant compare des personnes en fonction de leurs symptômes et de leurs résultats de laboratoire anormaux, afin de suggérer, avec consentement explicite uniquement, des personnes qui rapportent quelque chose de très similaire.
- Profil. Présente les symptômes auto-déclarés des 90 derniers jours par concept Anpheros, et les résultats de laboratoire des 180 derniers jours en dehors de la plage de référence imprimée par le laboratoire, par code LOINC. Les profils sont indépendants de la langue et du pays : un rapport de laboratoire en roumain et un en anglais correspondent au même code LOINC.
- Score. Un indice de Jaccard pondéré : signes partagés sur tous les signes des deux personnes. Les symptômes très courants (mal de tête, douleurs abdominales, fatigue, fièvre, toux, vertiges...) pèsent 0,25, les symptômes spécifiques 1, un résultat de laboratoire anormal 1,5. À partir de 50 participants, les poids sont également mis à l'échelle en fonction de la rareté d'un signe dans la population (fréquence inverse du document). Deux signes différents dans le même système corporel rapportent un crédit partiel.
- Règle. Une paire n'est considérée qu'avec au moins trois symptômes spécifiques partagés, ou deux plus un résultat de laboratoire anormal partagé : les plaintes courantes seules ne rendent jamais deux personnes "similaires". Une invitation est proposée à partir d'un score de 0,70 ; la personne voit des cas similaires à partir de 0,80.
- Confidentialité. Titulaires de compte adultes uniquement, consentement explicite (RGPD Art. 9), révocable à tout moment avec suppression immédiate. Une personne voit les décomptes et les signes partagés, jamais qui sont les autres.
Il ne suggère pas de diagnostic ni de maladie.
6. Comment les applications l'utilisent
- Anpheros Daily (iOS, Android, Mac, web) : chaque symptôme qu'une personne note passe par le pipeline ci-dessus ; la personne peut voir et corriger le résultat.
- Anpheros Platform : les symptômes sont stockés sous forme de FHIR
Observationavec une catégorieurn:anpheros:observation-category|symptom, à la fois des codes et le texte propre à la personne. Toute application avec le consentement de la personne peut les lire. - Votre application : recherchez des concepts avec
GET /v1/terminology/symptoms, développez le FHIRValueSet, traduisez les codes avec lesConceptMapvers ICD-10 et ICD-11, et validez les Observations par rapport au profilanpheros-symptom. Voir Symptom data API pour les requêtes et les réponses. - Les assistants et agents IA lisent les mêmes données structurées via le Context API au lieu de texte libre, de sorte que leurs réponses peuvent citer des codes.
7. Limites
- Le moteur nomme et code les symptômes ; il ne diagnostique pas, ne classe pas les causes ni ne relie les symptômes aux maladies.
- Aucun clinicien n'a encore examiné le vocabulaire, les traductions ou les signes d'alerte.
- Les ensembles d'évaluation sont synthétiques ; 15 des 20 langues n'ont pas encore d'ensemble d'évaluation.
- L'ICD-11 est sous licence de l'OMS sous CC BY-ND 3.0 IGO ; les codes et les titres sont reproduits inchangés.
Liens connexes
- API des données de symptômes : concepts, terminologie FHIR et symptômes rapportés par le patient
- Anpheros Search : les mêmes symptômes, associés aux conditions et aux traitements, dans un catalogue public unique, chaque entrée avec ses sources
- Systèmes de codes FHIR
- API des données longitudinales du patient
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card