Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Syntetická data pacientů pro testování
Synthea, persony a data generovaná modelem v porovnání, co dobrá testovací data obsahují a co se stalo, když jsme načetli pacienty ze Synthea na FHIR server.
Syntetická data pacientů jsou vymyšlené lékařské záznamy – pacienti, diagnózy, léky, laboratorní výsledky, návštěvy – generované tak, aby vypadaly a chovaly se jako skutečné, abyste mohli vytvářet, testovat a předvádět zdravotnický software, aniž byste se dotkli informací o zdraví kohokoli. Je to výchozí možnost pro vývoj: skutečná data pacientů v testovacím prostředí představují riziko pro soukromí a obvykle i právní problém. Tato stránka pokrývá hlavní způsoby získávání syntetických dat, co je pro každý z nich dobré a špatné, jak kolem nich navrhovat testy a jak je načítat na FHIR server – včetně toho, co se stalo, když jsme načetli pacienty ze Synthea do Anpheros.
Tři způsoby, jak získat syntetické pacienty
| Přístup | Příklad | Vhodné pro | Pozor na |
|---|---|---|---|
| Simulace založená na pravidlech | Synthea (open source, od MITRE): simuluje životy od narození pomocí modulů pro nemoci a exportuje FHIR R4 bundles, C-CDA a CSV | Objem, kompletní historie, standardní formáty | Ve výchozím nastavení zaměřeno na USA (demografie, fakturační zdroje, kódy); vzory jsou pouze tak realistické, jak jsou moduly |
| Kurátorované persony | Ručně navržení pacienti se specifickými stavy | Dema, okrajové případy, opakovatelné testy | Málo pacientů; někdo je musí udržovat v souladu |
| Statistické nebo ML generování z reálných dat | Modely trénované na reálné datové sadě | Realismus výzkumu | Může dojít k úniku skutečných osob, pokud je provedeno špatně; vyžaduje hodnocení soukromí, nejen "je to syntetické" |
Text napsaný jazykovým modelem na vyžádání je čtvrtým, rizikovým zdrojem: čte se dobře, ale často si protiřečí (lék bez stavu, který léčí, nemožné laboratorní hodnoty) a neměl by být základem testů.
Co dobrá testovací data obsahují
Realistické průměry nestačí. Kód selhává na okrajích, takže se ujistěte, že vaše data, ať už syntetická nebo ne, zahrnují:
- Chybějící a neúplná data: laboratorní výsledek bez referenčního rozsahu, lék bez dávkování, pacient bez data narození.
- Jednotky a formáty: stejný test v mg/dL a mmol/L, desetinné čárky, časy s časovými zónami i bez nich.
- Opravy a historie: opravený výsledek, smazaný (
entered-in-error) záznam, vyřešená diagnóza. - Duplicity: stejná zpráva odeslaná dvakrát.
- Dlouhé a krátké historie: novorozenec, někdo s desetiletými daty, někdo s jednou návštěvou.
- Několik jazyků a zemí, pokud obsluhujete více než jeden trh.
- Změny souhlasu: aplikace, jejíž přístup je v polovině relace odvolán.
Načítání pacientů ze Synthea na FHIR server
Synthea zapisuje jeden FHIR R4 transaction Bundle na pacienta. Vygenerovali jsme dva pacienty (java -jar synthea-with-dependencies.jar -p 2 -s 4242 Massachusetts) a načetli je do lokální instance Anpheros. Bundle prvního pacienta obsahoval 221 záznamů:
| Ponecháno (typy, které Anpheros ukládá) | Odstraněno (typy, které Anpheros neukládá) |
|---|---|
| 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 |
Načítací modul se serveru zeptá, které typy podporuje, ponechá pouze ty a zbytek odešle jako jednu transakci:
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);
Výsledek: 182 zdrojů vytvořeno v jedné transakci. urn:uuid reference mezi ponechanými záznamy byly přeloženy na ID serveru (result DiagnosticReport odkazuje na existující Observation); reference na 39 vyřazených záznamů zůstávají tak, jak byly zapsány, takže před načtením shromážděte fullUrl každého vyřazeného záznamu a odstraňte nebo převeďte ponechané reference, které na ně ukazují, a Patient/{id}/$summary vygeneroval International Patient Summary s 15 problémy, 6 imunizacemi, 15 výsledky a 28 vitálními funkcemi. $everything vrátil 363 záznamů, včetně provenance, kterou platforma přidává ke každému zápisu.
Tři věci, které je třeba vědět, než se na to budete spoléhat:
- Podmíněné reference zůstávají tak, jak jsou zapsány. Synthea odkazuje na praktické lékaře, organizace a místa pomocí podmíněných referencí, jako je
Practitioner?identifier=http://hl7.org/fhir/sid/us-npi|9999967398. Anpheros nerozpoznává podmíněné reference v transakci; jsou uloženy tak, jak jsou zapsány, s jejichdisplaytextem a nerozpoznávají se na zdroj. Pokud váš kód tyto odkazy sleduje, načtěte praktické lékaře a organizace samostatně a reference přepište. - Fakturační a dodací data jsou pryč. Nároky a vysvětlení přínosů jsou klíčové pro americký nákladový model Synthea a nejsou součástí klinického záznamu v Anpheros.
- Předpisy se stanou nepřítomnými, nikoli převedenými.
MedicationRequestje odstraněno; pokud potřebujete léky v záznamu, převeďte je naMedicationStatementpřed načtením.
Názvy v Synthea zahrnují čísla (Marcelo725 Gulgowski816) záměrně, aby si je nikdo nemýlil s reálnými lidmi.
Syntetickí pacienti v sandboxu Anpheros
Každý projekt sandboxu Anpheros získá vlastní kopii 30 syntetických pacientů, generovaných z ručně navržených person: věk 3 až 85 let, několik zemí a jazyků EU, stavy kódované v ICD-10, léky v ATC, laboratorní výsledky a vitální funkce v LOINC s jednotkami UCUM a referenčními rozsahy, šest měsíců historie a dokumentů. Čerstvě inicializovaný projekt obsahuje 30 pacientů, 43 stavů, 51 medikačních záznamů, 1 811 pozorování, 57 dokumentů a 6 alergií. Data jsou deterministická — každý projekt vidí stejné osoby se stejnými hodnotami, pouze s různými ID — a reset je obnoví. Každá persona si zachovává stabilní identifikátor, takže Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02 vždy najde stejnou osobu. Viz Bezplatná FHIR databáze a sandbox.
Použijte persony, když chcete malé, koherentní záznamy, které pokrývají evropské jazyky a vlastní funkce platformy; načtěte Synthea, když potřebujete objem nebo historie ve stylu USA.
Často kladené dotazy
Co jsou syntetická data pacientů?
Vymyšlené zdravotní záznamy, které svou strukturou a vzory připomínají skutečné, ale nepopisují žádnou skutečnou osobu. Umožňují vývojářům vytvářet a testovat bez použití chráněných zdravotních informací.
Jsou syntetická data z definice anonymní?
Data generovaná na základě pravidel, jako jsou ta v Synthea, neobsahují žádné skutečné pacienty. Data generovaná modely trénovanými na skutečných záznamech mohou stále odhalit skutečné osoby a vyžadují posouzení soukromí před jejich sdílením.
Mohu importovat data ze Synthea na FHIR server?
Ano. Synthea exportuje transakční svazky FHIR R4. Odeberte typy zdrojů, které server nepodporuje, zkontrolujte, jak zpracovává podmíněné odkazy, a odešlete každý svazek jako transakci.
Obsahuje sandbox Anpheros syntetické pacienty?
Ano: 30 na projekt, se šesti měsíci kódované historie, plus až 50 testovacích pacientů, které si vytvoříte sami.
Související
- Bezplatná FHIR databáze a sandbox
- Příklady FHIR R4 JSON
- Jak normalizovat lékařská data
- Jak ukládat lékařské záznamy pomocí FHIR R4
- Platforma FHIR
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card