Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Données de patients synthétiques pour les tests
Synthea, personas et données générées par modèle comparés, ce que contiennent de bonnes données de test et ce qui s'est passé lorsque nous avons chargé des patients Synthea dans un serveur FHIR.
Les données de patients synthétiques sont des dossiers médicaux inventés — patients, diagnostics, médicaments, résultats de laboratoire, visites — générés pour ressembler et se comporter comme de vrais dossiers, afin que vous puissiez construire, tester et présenter des logiciels de santé sans toucher aux informations de santé de qui que ce soit. C'est la norme pour le développement : les données de patients réelles dans un environnement de test présentent un risque pour la vie privée et constituent généralement un problème juridique. Cette page couvre les principales façons d'obtenir des données synthétiques, ce que chacune fait bien et moins bien, comment concevoir des tests autour d'elles, et comment les charger dans un serveur FHIR — y compris ce qui s'est passé lorsque nous avons chargé des patients Synthea dans Anpheros.
Trois façons d'obtenir des patients synthétiques
| Approche | Exemple | Idéal pour | À surveiller |
|---|---|---|---|
| Simulation basée sur des règles | Synthea (open source, de MITRE) : simule des vies dès la naissance avec des modules de maladies et exporte des bundles FHIR R4, C-CDA et CSV | Volume, historiques complets, formats standards | Centré sur les États-Unis par défaut (démographie, ressources de facturation, codes) ; les modèles ne sont réalistes que dans la mesure de la qualité des modules |
| Personas sélectionnés | Patients conçus manuellement avec des conditions spécifiques | Démonstrations, cas limites, tests reproductibles | Peu de patients ; quelqu'un doit maintenir leur cohérence |
| Génération statistique ou ML à partir de données réelles | Modèles entraînés sur un jeu de données réel | Réalisme de la recherche | Peut divulguer des personnes réelles si mal fait ; nécessite une évaluation de la confidentialité, pas seulement "c'est synthétique" |
Le texte écrit par un modèle linguistique sur demande est une quatrième source, risquée : il se lit bien mais se contredit souvent (un médicament sans la condition qu'il traite, des valeurs de laboratoire impossibles) et ne devrait pas servir de base aux tests.
Ce que contiennent de bonnes données de test
Les moyennes réalistes ne suffisent pas. Le code casse sur les cas limites, alors assurez-vous que vos données, synthétiques ou non, incluent :
- Données manquantes et partielles : un résultat de laboratoire sans plage de référence, un médicament sans dosage, un patient sans date de naissance.
- Unités et formats : le même test en mg/dL et mmol/L, virgules décimales, heures avec et sans fuseaux horaires.
- Corrections et historique : un résultat modifié, une entrée supprimée (
entered-in-error), une condition résolue. - Doublons : le même rapport envoyé deux fois.
- Historiques longs et courts : un nouveau-né, une personne avec dix ans de données, une personne avec une seule visite.
- Plusieurs langues et pays si vous servez plus d'un marché.
- Changements de consentement : une application dont l'accès est révoqué au milieu d'une session.
Chargement des patients Synthea dans un serveur FHIR
Synthea écrit un Bundle FHIR R4 transaction par patient. Nous avons généré deux patients (java -jar synthea-with-dependencies.jar -p 2 -s 4242 Massachusetts) et les avons chargés dans une instance locale d'Anpheros. Le bundle du premier patient contenait 221 entrées :
| Conservé (types stockés par Anpheros) | Supprimé (types non stockés par Anpheros) |
|---|---|
| Observation 61, Procedure 48, DiagnosticReport 24, Condition 15, Encounter 12, DocumentReference 12, Immunization 6, Patient, CareTeam, CarePlan, Provenance | Claim 13, ExplanationOfBenefit 13, SupplyDelivery 9, Device 2, ImagingStudy 1, MedicationRequest 1 |
Le chargeur interroge le serveur sur les types qu'il prend en charge, ne conserve que ceux-ci et publie le reste en une seule transaction :
import { readFile } from 'node:fs/promises';
import { Anpheros, apiKey } from '@anpheros/sdk';
const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) }); // sk_test_… key
const SUPPORTED = new Set(((await anpheros.fhir.metadata()) as any).rest[0].resource.map((r: any) => r.type));
const bundle = JSON.parse(await readFile(process.argv[2], 'utf8')); // one Synthea patient file
const kept = bundle.entry.filter((e: any) => SUPPORTED.has(e.resource.resourceType));
const out: any = await anpheros.fhir.transaction({ ...bundle, entry: kept } as any);
console.log('created', out.entry.length);
Résultat : 182 ressources créées en une seule transaction. Les références urn:uuid entre les entrées conservées ont été résolues en identifiants serveur (un result de DiagnosticReport pointe vers une Observation existante) ; les références aux 39 entrées supprimées restent telles quelles. Avant le chargement, collectez donc les fullUrl de chaque entrée supprimée et supprimez ou convertissez les références conservées qui y pointent. Patient/{id}/$summary a produit un Résumé International de Patient (IPS) avec 15 problèmes, 6 immunisations, 15 résultats et 28 signes vitaux. $everything a retourné 363 entrées, y compris la provenance que la plateforme ajoute à chaque écriture.
Trois points à savoir avant de vous y fier :
- Les références conditionnelles restent telles quelles. Synthea pointe vers des praticiens, des organisations et des lieux avec des références conditionnelles telles que
Practitioner?identifier=http://hl7.org/fhir/sid/us-npi|9999967398. Anpheros ne résout pas les références conditionnelles dans une transaction ; elles sont stockées telles quelles, avec leur textedisplay, et ne résolvent pas en une ressource. Si votre code suit ces liens, chargez les praticiens et les organisations séparément et réécrivez les références. - Les données de facturation et d'approvisionnement ont disparu. Les réclamations (Claims) et les explications de remboursement (Explanation of Benefit) sont centrales dans le modèle de coûts américain de Synthea et ne font pas partie d'un dossier clinique dans Anpheros.
- Les prescriptions sont absentes, pas converties.
MedicationRequestest supprimé ; si vous avez besoin des médicaments dans le dossier, convertissez-les enMedicationStatementavant le chargement.
Les noms dans Synthea incluent des nombres (Marcelo725 Gulgowski816) intentionnellement, afin que personne ne les confonde avec de vraies personnes.
Patients synthétiques dans le bac à sable Anpheros
Chaque projet de bac à sable Anpheros reçoit sa propre copie de 30 patients synthétiques, générés à partir de personas conçus manuellement : âges de 3 à 85 ans, plusieurs pays et langues de l'UE, conditions codées en ICD-10, médicaments en ATC, laboratoires et signes vitaux en LOINC avec unités UCUM et plages de référence, six mois d'historique et de documents. Un projet fraîchement initialisé contient 30 patients, 43 conditions, 51 déclarations de médicaments, 1 811 observations, 57 documents et 6 allergies. Les données sont déterministes — chaque projet voit les mêmes personnes avec les mêmes valeurs, seulement des identifiants différents — et une réinitialisation les restaure. Chaque persona conserve un identifiant stable, ainsi Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02 trouvera toujours la même personne. Voir Base de données FHIR gratuite et bac à sable.
Utilisez les personas lorsque vous souhaitez des dossiers petits et cohérents couvrant les langues européennes et les fonctionnalités de la plateforme ; chargez Synthea lorsque vous avez besoin de volume ou d'historiques de style américain.
Foire aux questions
Qu'est-ce que les données de patients synthétiques ?
Des dossiers de santé inventés qui ressemblent à des dossiers réels en termes de structure et de modèles, mais qui ne décrivent aucune personne réelle. Cela permet aux développeurs de construire et de tester sans utiliser d'informations de santé protégées.
Les données synthétiques sont-elles anonymes par définition ?
Les données générées à partir de règles, comme celles de Synthea, ne contiennent pas de patients réels. Les données générées par des modèles entraînés sur des dossiers réels peuvent toujours révéler des personnes réelles et nécessitent une évaluation de la confidentialité avant d'être partagées.
Puis-je importer des données Synthea dans un serveur FHIR ?
Oui. Synthea exporte des lots de transactions FHIR R4. Supprimez les types de ressources que le serveur ne prend pas en charge, vérifiez comment il gère les références conditionnelles et publiez chaque lot sous forme de transaction.
Le sandbox Anpheros inclut-il des patients synthétiques ?
Oui : 30 par projet, avec six mois d'historique codé, plus jusqu'à 50 patients de test que vous créez vous-même.
Liens connexes
- Base de données FHIR et bac à sable gratuits
- Exemples FHIR R4 JSON
- Comment normaliser les données médicales
- Comment stocker des dossiers médicaux à l'aide de FHIR R4
- Plateforme FHIR
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card