AnpherosAnpheros PlatformDevelopers

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é.

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

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.

Il ne suggère pas de diagnostic ni de maladie.

6. Comment les applications l'utilisent

7. Limites

Liens connexes

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