# Date sintetice de pacienți pentru testare

> Synthea, persoane și date generate de model comparate, ce conțin date de test bune și ce s-a întâmplat când am încărcat pacienți Synthea într-un server FHIR.

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

**Datele sintetice de pacienți sunt înregistrări medicale inventate — pacienți, diagnostice, medicamente, rezultate de laborator, vizite — generate pentru a arăta și a se comporta ca cele reale, astfel încât să puteți construi, testa și demonstra software medical fără a atinge informațiile de sănătate ale nimănui.** Este implicit pentru dezvoltare: datele reale ale pacienților într-un mediu de testare reprezintă un risc de confidențialitate și, de obicei, o problemă legală. Această pagină acoperă principalele modalități de a obține date sintetice, la ce este bun și la ce este rău fiecare, cum să proiectați teste în jurul lor și cum să le încărcați într-un server FHIR — inclusiv ce s-a întâmplat când am încărcat pacienți Synthea în Anpheros.

## Trei modalități de a obține pacienți sintetici

| Abordare | Exemplu | Potrivit pentru | Atenție la |
|---|---|---|---|
| Simulare bazată pe reguli | [Synthea](https://github.com/synthetichealth/synthea) (open source, de la MITRE): simulează vieți de la naștere cu module de boli și exportă bundle-uri FHIR R4, C-CDA și CSV | Volum, istorice complete, formate standard | Centrat pe SUA implicit (demografie, resurse de facturare, coduri); modelele sunt realiste doar în măsura modulelor |
| Personaje curate | Pacienți proiectați manual cu afecțiuni specifice | Demo-uri, cazuri limită, teste repetabile | Puțini pacienți; cineva trebuie să le mențină coerența |
| Generare statistică sau ML din date reale | Modele antrenate pe un set de date real | Realism în cercetare | Poate divulga persoane reale dacă este făcută prost; necesită evaluare a confidențialității, nu doar "este sintetic" |

Textul scris de un model lingvistic la cerere este o a patra sursă, riscantă: se citește bine, dar adesea se contrazice (un medicament fără afecțiunea pe care o tratează, valori de laborator imposibile) și nu ar trebui să stea la baza testelor.

## Ce conține un set bun de date de test

Mediile realiste nu sunt suficiente. Codul se defectează la limite, așa că asigurați-vă că datele dvs., fie sintetice, fie nu, includ:

- **Date lipsă și parțiale:** un rezultat de laborator fără un interval de referință, o medicație fără doză, un pacient fără dată de naștere.
- **Unități și formate:** același test în mg/dL și mmol/L, virgule zecimale, ore cu și fără fus orar.
- **Corecții și istoric:** un rezultat modificat, o intrare ștearsă (`entered-in-error`), o afecțiune care s-a rezolvat.
- **Duplicate:** același raport trimis de două ori.
- **Istorice lungi și scurte:** un nou-născut, cineva cu zece ani de date, cineva cu o singură vizită.
- **Mai multe limbi și țări** dacă deserviți mai mult de o piață.
- **Modificări ale consimțământului:** o aplicație al cărei acces este revocat în mijlocul unei sesiuni.

## Încărcarea pacienților Synthea într-un server FHIR

Synthea scrie un pachet FHIR R4 `transaction` per pacient. Am generat doi pacienți (`java -jar synthea-with-dependencies.jar -p 2 -s 4242 Massachusetts`) și i-am încărcat într-o instanță locală Anpheros. Pachetul primului pacient a avut 221 de intrări:

| Păstrate (tipuri pe care Anpheros le stochează) | Eliminate (tipuri pe care Anpheros nu le stochează) |
|---|---|
| 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 |

Loader-ul întreabă serverul ce tipuri suportă, păstrează doar pe acelea și postează restul ca o singură tranzacție:

```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);
```

Rezultat: 182 de resurse create într-o singură tranzacție. Referințele `urn:uuid` dintre intrările păstrate au fost rezolvate la ID-uri de server (un `result` DiagnosticReport indică un Observation existent); referințele către cele 39 de intrări eliminate rămân așa cum au fost scrise, deci înainte de încărcare, colectați `fullUrl` fiecărei intrări eliminate și ștergeți sau convertiți referințele păstrate care indică spre ele, iar `Patient/{id}/$summary` a produs un International Patient Summary cu 15 probleme, 6 imunizări, 15 rezultate și 28 de semne vitale. `$everything` a returnat 363 de intrări, inclusiv provenance pe care platforma o adaugă la fiecare scriere.

Trei lucruri de știut înainte de a vă baza pe ea:

- **Referințele condiționale rămân așa cum au fost scrise.** Synthea indică practicieni, organizații și locații cu referințe condiționale precum `Practitioner?identifier=http://hl7.org/fhir/sid/us-npi|9999967398`. Anpheros nu rezolvă referințele condiționale într-o tranzacție; acestea sunt stocate așa cum au fost scrise, cu textul lor `display` și nu se rezolvă la o resursă. Dacă codul dvs. urmează aceste legături, încărcați practicienii și organizațiile separat și rescrieți referințele.
- **Datele de facturare și de aprovizionare sunt pierdute.** Facturile și explicațiile de beneficii sunt centrale pentru modelul de cost al Synthea din SUA și nu fac parte dintr-un dosar clinic în Anpheros.
- **Rețetele devin absente, nu convertite.** `MedicationRequest` este eliminat; dacă aveți nevoie de medicamente în dosar, convertiți-le în `MedicationStatement` înainte de încărcare.

Numele din Synthea includ numere (`Marcelo725 Gulgowski816`) intenționat, astfel încât nimeni să nu le confunde cu persoane reale.

## Pacienți sintetici în sandbox-ul Anpheros

Fiecare proiect sandbox Anpheros primește propria copie a 30 de pacienți sintetici, generați din persoane create manual: vârste de la 3 la 85 de ani, mai multe țări și limbi din UE, afecțiuni codificate în ICD-10, medicamente în ATC, analize de laborator și semne vitale în LOINC cu unități UCUM și intervale de referință, șase luni de istoric și documente. Un proiect proaspăt populat conține 30 de pacienți, 43 de afecțiuni, 51 de declarații de medicamente, 1.811 observații, 57 de documente și 6 alergii. Datele sunt deterministe — fiecare proiect vede aceiași oameni cu aceleași valori, doar cu ID-uri diferite — iar o resetare le restaurează. Fiecare persoană păstrează un identificator stabil, astfel încât `Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02` găsește întotdeauna aceeași persoană. Vezi [Bază de date FHIR gratuită și sandbox](https://developers.anpheros.com/ro/guides/free-fhir-database).

Folosiți persoanele atunci când doriți înregistrări mici, coerente, care acoperă limbile europene și caracteristicile proprii ale platformei; încărcați Synthea atunci când aveți nevoie de volum sau de istorii în stil american.

## Întrebări frecvente

### Ce este datele sintetice despre pacienți?
Înregistrări medicale inventate, care seamănă cu cele reale ca structură și modele, dar nu descriu nicio persoană reală. Permite dezvoltatorilor să construiască și să testeze fără a utiliza informații protejate despre sănătate.

### Datele sintetice sunt anonime prin definiție?
Datele generate din reguli, precum cele ale Synthea, nu conțin pacienți reali. Datele generate de modele antrenate pe înregistrări reale pot dezvălui în continuare persoane reale și necesită o evaluare a confidențialității înainte de a fi partajate.

### Pot importa date Synthea într-un server FHIR?
Da. Synthea exportă bundle-uri de tranzacții FHIR R4. Eliminați tipurile de resurse pe care serverul nu le suportă, verificați cum gestionează referințele condiționale și postați fiecare bundle ca o tranzacție.

### Sandbox-ul Anpheros include pacienți sintetici?
Da: 30 per proiect, cu șase luni de istoric codificat, plus până la 50 de pacienți de test pe care îi creați singur.

## Conexe

- [Bază de date și sandbox FHIR gratuit](https://developers.anpheros.com/ro/guides/free-fhir-database)
- [Exemple FHIR R4 JSON](https://developers.anpheros.com/tools/fhir-examples/)
- [Cum se normalizează datele medicale](https://developers.anpheros.com/ro/guides/normalize-medical-data)
- [Cum se stochează dosarele medicale folosind FHIR R4](https://developers.anpheros.com/ro/guides/store-medical-records-fhir)
- [Platformă FHIR](https://developers.anpheros.com/ro/guides/fhir)
