# Syntetická data pacientů pro testování

> Synthea, persony a modelovaná data – porovnání, co dobrá testovací data obsahují a co se stalo, když jsme načetli pacienty ze Synthea na FHIR server.

Source: https://developers.anpheros.com/cs/guides/synthetic-patient-data

**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](https://github.com/synthetichealth/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:

```ts
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 jejich `display` textem 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.** `MedicationRequest` je odstraněno; pokud potřebujete léky v záznamu, převeďte je na `MedicationStatement` př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](https://developers.anpheros.com/cs/guides/free-fhir-database).

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](https://developers.anpheros.com/cs/guides/free-fhir-database)
- [Příklady FHIR R4 JSON](https://developers.anpheros.com/tools/fhir-examples/)
- [Jak normalizovat lékařská data](https://developers.anpheros.com/cs/guides/normalize-medical-data)
- [Jak ukládat lékařské záznamy pomocí FHIR R4](https://developers.anpheros.com/cs/guides/store-medical-records-fhir)
- [Platforma FHIR](https://developers.anpheros.com/cs/guides/fhir)
