Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Synthetische Patientendaten für Tests
Synthea, Personas und modellgenerierte Daten im Vergleich, was gute Testdaten enthalten und was passierte, als wir Synthea-Patienten in einen FHIR-Server geladen haben.
Synthetische Patientendaten sind erfundene medizinische Aufzeichnungen – Patienten, Diagnosen, Medikamente, Laborergebnisse, Besuche –, die generiert werden, um wie echte auszusehen und sich wie echte zu verhalten, damit Sie Gesundheitssoftware erstellen, testen und vorführen können, ohne auf die Gesundheitsinformationen von jemandem zuzugreifen. Dies ist der Standard für die Entwicklung: Echte Patientendaten in einer Testumgebung stellen ein Datenschutzrisiko dar und sind in der Regel ein rechtliches Problem. Diese Seite behandelt die wichtigsten Möglichkeiten, synthetische Daten zu erhalten, was jede Methode gut und schlecht kann, wie Tests darum herum entworfen werden und wie sie auf einen FHIR-Server geladen werden – einschließlich dessen, was passiert ist, als wir Synthea-Patienten in Anpheros geladen haben.
Drei Wege, synthetische Patienten zu erhalten
| Ansatz | Beispiel | Geeignet für | Vorsicht |
|---|---|---|---|
| Regelbasierte Simulation | Synthea (Open Source, von MITRE): simuliert Leben ab der Geburt mit Krankheitsmodulen und exportiert FHIR R4 Bundles, C-CDA und CSV | Volumen, vollständige Historien, Standardformate | Standardmäßig US-zentriert (Demografie, Abrechnungsressourcen, Codes); Muster sind nur so realistisch wie die Module |
| Kuratierte Personas | Handgefertigte Patienten mit spezifischen Bedingungen | Demos, Grenzfälle, wiederholbare Tests | Wenige Patienten; jemand muss sie kohärent halten |
| Statistische oder ML-Generierung aus realen Daten | Modelle, die auf einem realen Datensatz trainiert wurden | Realismus für die Forschung | Kann bei schlechter Durchführung reale Personen preisgeben; erfordert Datenschutzbewertung, nicht nur "es ist synthetisch" |
Von einem Sprachmodell auf Anfrage erstellter Text ist eine vierte, riskante Quelle: Er liest sich gut, widerspricht sich aber oft (ein Medikament ohne die behandelte Erkrankung, unmögliche Laborwerte) und sollte nicht die Grundlage für Tests bilden.
Was gute Testdaten enthalten
Realistische Durchschnittswerte reichen nicht aus. Code bricht an den Rändern, stellen Sie also sicher, dass Ihre Daten, ob synthetisch oder nicht, Folgendes enthalten:
- Fehlende und unvollständige Daten: ein Laborergebnis ohne Referenzbereich, ein Medikament ohne Dosis, ein Patient ohne Geburtsdatum.
- Einheiten und Formate: derselbe Test in mg/dL und mmol/L, Dezimalkommas, Zeiten mit und ohne Zeitzonen.
- Korrekturen und Historie: ein geändertes Ergebnis, ein gelöschter (
entered-in-error) Eintrag, eine behobene Erkrankung. - Duplikate: derselbe Bericht wurde zweimal gesendet.
- Lange und kurze Historien: ein Neugeborenes, jemand mit zehn Jahren Daten, jemand mit einem Besuch.
- Mehrere Sprachen und Länder, wenn Sie mehr als einen Markt bedienen.
- Einwilligungsänderungen: eine App, deren Zugriff mitten in einer Sitzung widerrufen wird.
Laden von Synthea-Patienten in einen FHIR-Server
Synthea schreibt ein FHIR R4 transaction Bundle pro Patient. Wir haben zwei Patienten (java -jar synthea-with-dependencies.jar -p 2 -s 4242 Massachusetts) generiert und sie in eine lokale Instanz von Anpheros geladen. Das Bundle des ersten Patienten enthielt 221 Einträge:
| Beibehalten (Typen, die Anpheros speichert) | Entfernt (Typen, die Anpheros nicht speichert) |
|---|---|
| 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 |
Der Loader fragt den Server, welche Typen er unterstützt, behält nur diese und postet den Rest als eine Transaktion:
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);
Ergebnis: 182 Ressourcen in einer Transaktion erstellt. Die urn:uuid Referenzen zwischen den beibehaltenen Einträgen wurden zu Server-IDs aufgelöst (ein result von DiagnosticReport verweist auf eine existierende Observation); Referenzen zu den 39 verworfenen Einträgen bleiben wie geschrieben bestehen. Sammeln Sie daher vor dem Laden die fullUrl jedes verworfenen Eintrags und entfernen oder konvertieren Sie die beibehaltenen Referenzen, die darauf zeigen. Patient/{id}/$summary erzeugte einen International Patient Summary mit 15 Problemen, 6 Immunisierungen, 15 Ergebnissen und 28 Vitalzeichen. $everything gab 363 Einträge zurück, einschließlich der Provenance, die die Plattform zu jedem Schreibvorgang hinzufügt.
Drei Dinge, die Sie wissen sollten, bevor Sie sich darauf verlassen:
- Bedingte Referenzen bleiben wie geschrieben. Synthea verweist mit bedingten Referenzen wie
Practitioner?identifier=http://hl7.org/fhir/sid/us-npi|9999967398auf Praktiker, Organisationen und Standorte. Anpheros löst bedingte Referenzen in einer Transaktion nicht auf; sie werden wie geschrieben mit ihremdisplayText gespeichert und nicht zu einer Ressource aufgelöst. Wenn Ihr Code diesen Links folgt, laden Sie Praktiker und Organisationen separat und schreiben Sie die Referenzen neu. - Abrechnungs- und Lieferdaten sind weg. Claims und Explanations of Benefit sind zentral für Syntheas US-Kostenmodell und kein Teil eines klinischen Datensatzes in Anpheros.
- Rezepte werden entfernt, nicht konvertiert.
MedicationRequestwird entfernt; wenn Sie die Medikamente im Datensatz benötigen, konvertieren Sie sie vor dem Laden inMedicationStatement.
Namen in Synthea enthalten absichtlich Zahlen (Marcelo725 Gulgowski816), damit niemand sie mit echten Personen verwechselt.
Synthetische Patienten in der Anpheros Sandbox
Jedes Anpheros Sandbox-Projekt erhält eine eigene Kopie von 30 synthetischen Patienten, die aus handgefertigten Personas generiert wurden: Alter von 3 bis 85 Jahren, mehrere EU-Länder und Sprachen, Bedingungen kodiert in ICD-10, Medikamente in ATC, Labore und Vitalwerte in LOINC mit UCUM-Einheiten und Referenzbereichen, sechs Monate Historie und Dokumente. Ein frisch initialisiertes Projekt enthält 30 Patienten, 43 Bedingungen, 51 Medikamentenaussagen, 1.811 Beobachtungen, 57 Dokumente und 6 Allergien. Die Daten sind deterministisch – jedes Projekt sieht dieselben Personen mit denselben Werten, nur unterschiedliche IDs – und ein Reset stellt sie wieder her. Jede Persona behält eine stabile Kennung, sodass Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02 immer dieselbe Person findet. Siehe Kostenlose FHIR-Datenbank und Sandbox.
Verwenden Sie die Personas, wenn Sie kleine, kohärente Datensätze wünschen, die europäische Sprachen und die plattformeigenen Funktionen abdecken; laden Sie Synthea, wenn Sie Volumen oder US-amerikanische Historien benötigen.
Häufig gestellte Fragen
Was sind synthetische Patientendaten?
Erfundene Gesundheitsakten, die in Struktur und Mustern echten ähneln, aber keine reale Person beschreiben. Sie ermöglichen es Entwicklern, zu erstellen und zu testen, ohne geschützte Gesundheitsinformationen zu verwenden.
Sind synthetische Daten per Definition anonym?
Daten, die aus Regeln generiert werden, wie die von Synthea, enthalten keine echten Patienten. Daten, die aus Modellen generiert werden, die auf echten Datensätzen trainiert wurden, können immer noch reale Personen offenbaren und erfordern eine Datenschutzbewertung, bevor sie weitergegeben werden.
Kann ich Synthea-Daten in einen FHIR-Server importieren?
Ja. Synthea exportiert FHIR R4 Transaktionsbündel. Entfernen Sie Ressourcentypen, die der Server nicht unterstützt, überprüfen Sie, wie er mit bedingten Referenzen umgeht, und posten Sie jedes Bündel als Transaktion.
Enthält die Anpheros-Sandbox synthetische Patienten?
Ja: 30 pro Projekt, mit sechs Monaten codierter Historie, plus bis zu 50 Testpatienten, die Sie selbst erstellen.
Verwandte Themen
- Kostenlose FHIR-Datenbank und Sandbox
- FHIR R4 JSON-Beispiele
- Wie man medizinische Daten normalisiert
- Wie man Krankenakten mit FHIR R4 speichert
- FHIR-Plattform
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card