# Syntetické dáta pacientov na testovanie

> Synthea, persony a modelom generované dáta v porovnaní, čo dobré testovacie dáta obsahujú a čo sa stalo, keď sme načítali pacientov Synthea na FHIR server.

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

**Syntetické dáta pacientov sú vymyslené lekárske záznamy — pacienti, diagnózy, lieky, výsledky laboratórnych testov, návštevy — generované tak, aby vyzerali a správali sa ako skutočné, takže môžete vytvárať, testovať a predvádzať zdravotnícky softvér bez toho, aby ste sa dotkli akýchkoľvek zdravotných informácií kohokoľvek.** Je to štandard pre vývoj: skutočné dáta pacientov v testovacom prostredí predstavujú riziko pre súkromie a zvyčajne aj právny problém. Táto stránka pokrýva hlavné spôsoby získavania syntetických dát, čo je dobré a zlé na každom z nich, ako okolo nich navrhovať testy a ako ich načítať na FHIR server — vrátane toho, čo sa stalo, keď sme načítali pacientov Synthea do Anpheros.

## Tri spôsoby získania syntetických pacientov

| Prístup | Príklad | Vhodné pre | Pozor na |
|---|---|---|---|
| Simulácia založená na pravidlách | [Synthea](https://github.com/synthetichealth/synthea) (open source, od MITRE): simuluje životy od narodenia s modulmi chorôb a exportuje FHIR R4 zväzky, C-CDA a CSV | Objem, úplné histórie, štandardné formáty | Predvolene zamerané na USA (demografia, fakturačné zdroje, kódy); vzory sú len také realistické, aké sú moduly |
| Kurátorované persony | Ručne navrhnutí pacienti so špecifickými stavmi | Demo ukážky, okrajové prípady, opakovateľné testy | Málo pacientov; niekto ich musí udržiavať konzistentné |
| Štatistická alebo ML generácia z reálnych dát | Modely trénované na reálnej datovej sade | Realizmus výskumu | Môže dôjsť k úniku reálnych osôb, ak sa to urobí zle; vyžaduje posúdenie ochrany osobných údajov, nielen "je to syntetické" |

Text napísaný jazykovým modelom na požiadanie je štvrtým, rizikovým zdrojom: číta sa dobre, ale často si protirečí (liek bez stavu, ktorý lieči, nemožné laboratórne hodnoty) a nemal by byť základom testov.

## Čo obsahuje dobrý testovací dátový súbor

Realistické priemery nestačia. Kód zlyháva na okrajoch, preto sa uistite, že vaše dáta, syntetické alebo nie, zahŕňajú:

- **Chýbajúce a neúplné dáta:** výsledok laboratórneho testu bez referenčného rozsahu, liek bez dávkovania, pacient bez dátumu narodenia.
- **Jednotky a formáty:** rovnaký test v mg/dL a mmol/L, desatinné čiarky, časy s časovými zónami aj bez nich.
- **Opravy a história:** upravený výsledok, odstránený (`entered-in-error`) záznam, stav, ktorý bol vyriešený.
- **Duplikáty:** rovnaká správa odoslaná dvakrát.
- **Dlhé a krátke histórie:** novorodenec, niekto s desaťročnou históriou dát, niekto s jednou návštevou.
- **Niekoľko jazykov a krajín**, ak obsluhujete viac ako jeden trh.
- **Zmeny súhlasu:** aplikácia, ktorej prístup bol zrušený v strede relácie.

## Nahrávanie pacientov zo Synthea na FHIR server

Synthea zapisuje jeden FHIR R4 `transaction` Bundle na pacienta. Vygenerovali sme dvoch pacientov (`java -jar synthea-with-dependencies.jar -p 2 -s 4242 Massachusetts`) a nahrali ich do lokálnej inštancie Anpheros. Bundle prvého pacienta mal 221 záznamov:

| Ponechané (typy, ktoré Anpheros ukladá) | Odstránené (typy, ktoré Anpheros neukladá) |
|---|---|
| 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 |

Nahrávač sa pýta servera, aké typy podporuje, ponecháva iba tie a zvyšok odosiela ako jednu transakciu:

```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ýsledok: 182 zdrojov vytvorených v jednej transakcii. `urn:uuid` referencie medzi ponechanými záznamami boli preložené na serverové ID (`result` DiagnosticReport odkazuje na existujúcu Observation); referencie na 39 odhodených záznamov zostávajú tak, ako boli zapísané, takže pred nahrávaním zozbierajte `fullUrl` každého odhodeného záznamu a odstráňte alebo konvertujte ponechané referencie, ktoré na ne odkazujú, a `Patient/{id}/$summary` vygeneroval International Patient Summary s 15 problémami, 6 imunizáciami, 15 výsledkami a 28 vitálnymi funkciami. `$everything` vrátil 363 záznamov, vrátane provenance, ktorú platforma pridáva ku každému zápisu.

Tri veci, ktoré by ste mali vedieť, než sa na to budete spoliehať:

- **Podmienené referencie zostávajú tak, ako sú zapísané.** Synthea odkazuje na praktických lekárov, organizácie a lokácie pomocou podmienených referencií, ako je `Practitioner?identifier=http://hl7.org/fhir/sid/us-npi|9999967398`. Anpheros nerieši podmienené referencie v transakcii; sú uložené tak, ako boli zapísané, s ich `display` textom a neriešia sa na zdroj. Ak váš kód sleduje tieto odkazy, nahrajte praktických lekárov a organizácie samostatne a prepíšte referencie.
- **Fakturačné a dodávateľské údaje sú preč.** Nároky a vysvetlenia benefitov sú kľúčové pre americký nákladový model Synthea a nie sú súčasťou klinického záznamu v Anpheros.
- **Predpisy sa stanú neprítomnými, nie konvertovanými.** `MedicationRequest` je odstránené; ak potrebujete lieky v zázname, konvertujte ich na `MedicationStatement` pred nahrávaním.

Mená v Synthea obsahujú čísla (`Marcelo725 Gulgowski816`) zámerne, aby si ich nikto nepomýlil so skutočnými ľuďmi.

## Syntetickí pacienti v Anpheros sandboxe

Každý Anpheros sandbox projekt dostane vlastnú kópiu 30 syntetických pacientov, generovaných z ručne navrhnutých person: vo veku od 3 do 85 rokov, z viacerých krajín a jazykov EÚ, s podmienkami kódovanými v ICD-10, liekmi v ATC, laboratórnymi výsledkami a vitálnymi funkciami v LOINC s jednotkami UCUM a referenčnými rozsahmi, šesťmesačnou históriou a dokumentmi. Čerstvo inicializovaný projekt obsahuje 30 pacientov, 43 podmienok, 51 liekových záznamov, 1 811 pozorovaní, 57 dokumentov a 6 alergií. Dáta sú deterministické – každý projekt vidí rovnakých ľudí s rovnakými hodnotami, iba s inými identifikátormi – a reset ich obnoví. Každá persona si zachováva stabilný identifikátor, takže `Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02` vždy nájde rovnakú osobu. Pozri [Free FHIR database and sandbox](https://developers.anpheros.com/sk/guides/free-fhir-database).

Použite persony, keď chcete malé, koherentné záznamy, ktoré pokrývajú európske jazyky a vlastné funkcie platformy; načítajte Synthea, keď potrebujete objem alebo históriu v americkom štýle.

## Často kladené otázky

### Čo sú syntetické údaje o pacientoch?
Vymyslené zdravotné záznamy, ktoré štruktúrou a vzormi pripomínajú skutočné, ale nepopisujú žiadnu skutočnú osobu. Umožňuje vývojárom stavať a testovať bez použitia chránených zdravotných informácií.

### Sú syntetické údaje anonymné z definície?
Údaje generované na základe pravidiel, ako sú tie v Synthea, neobsahujú žiadnych skutočných pacientov. Údaje generované modelmi trénovanými na skutočných záznamoch môžu stále odhaliť skutočných ľudí a vyžadujú posúdenie ochrany súkromia pred ich zdieľaním.

### Môžem importovať údaje zo Synthea na FHIR server?
Áno. Synthea exportuje FHIR R4 transakčné balíky. Odstráňte typy zdrojov, ktoré server nepodporuje, skontrolujte, ako spracováva podmienené referencie, a odošlite každý balík ako transakciu.

### Obsahuje Anpheros sandbox syntetických pacientov?
Áno: 30 na projekt, so šiestimi mesiacmi kódovanej histórie, plus až 50 testovacích pacientov, ktorých si vytvoríte sami.

## Súvisiace

- [Bezplatná FHIR databáza a sandbox](https://developers.anpheros.com/sk/guides/free-fhir-database)
- [FHIR R4 JSON príklady](https://developers.anpheros.com/tools/fhir-examples/)
- [Ako normalizovať lekárske údaje](https://developers.anpheros.com/sk/guides/normalize-medical-data)
- [Ako ukladať lekárske záznamy pomocou FHIR R4](https://developers.anpheros.com/sk/guides/store-medical-records-fhir)
- [FHIR platforma](https://developers.anpheros.com/sk/guides/fhir)
