Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Dati paziente sintetici per test
Synthea, personas e dati generati da modelli a confronto, cosa contengono i dati di test di qualità e cosa è successo quando abbiamo caricato pazienti Synthea in un server FHIR.
I dati di pazienti sintetici sono cartelle cliniche inventate — pazienti, diagnosi, farmaci, risultati di laboratorio, visite — generate per assomigliare e comportarsi come quelle reali, in modo da poter creare, testare e dimostrare software sanitario senza toccare le informazioni sanitarie di nessuno. È l'impostazione predefinita per lo sviluppo: i dati reali dei pazienti in un ambiente di test rappresentano un rischio per la privacy e solitamente un problema legale. Questa pagina copre i modi principali per ottenere dati sintetici, i punti di forza e di debolezza di ciascuno, come progettare test attorno ad essi e come caricarli su un server FHIR — incluso cosa è successo quando abbiamo caricato pazienti Synthea su Anpheros.
Tre modi per ottenere pazienti sintetici
| Approccio | Esempio | Ideale per | Attenzione a |
|---|---|---|---|
| Simulazione basata su regole | Synthea (open source, da MITRE): simula vite dalla nascita con moduli di malattia ed esporta bundle FHIR R4, C-CDA e CSV | Volume, cronologie complete, formati standard | Di default incentrato sugli USA (demografia, risorse di fatturazione, codici); i pattern sono realistici solo quanto i moduli |
| Personaggi curati | Pazienti progettati manualmente con condizioni specifiche | Demo, casi limite, test ripetibili | Pochi pazienti; qualcuno deve mantenerli coerenti |
| Generazione statistica o ML da dati reali | Modelli addestrati su un set di dati reale | Realismo della ricerca | Può rivelare persone reali se fatto male; richiede valutazione della privacy, non solo "è sintetico" |
Il testo scritto da un modello linguistico su richiesta è una quarta fonte, rischiosa: si legge bene ma spesso si contraddice (un farmaco senza la condizione che tratta, valori di laboratorio impossibili) e non dovrebbe essere la base dei test.
Cosa contiene una buona suite di dati di test
Le medie realistiche non sono sufficienti. Il codice si rompe sui casi limite, quindi assicurati che i tuoi dati, sintetici o meno, includano:
- Dati mancanti e parziali: un risultato di laboratorio senza intervallo di riferimento, un farmaco senza dosaggio, un paziente senza data di nascita.
- Unità e formati: lo stesso test in mg/dL e mmol/L, virgole decimali, orari con e senza fuso orario.
- Correzioni e cronologia: un risultato modificato, una voce cancellata (
entered-in-error), una condizione risolta. - Duplicati: lo stesso report inviato due volte.
- Cronologie lunghe e brevi: un neonato, qualcuno con dieci anni di dati, qualcuno con una sola visita.
- Diverse lingue e paesi se servi più di un mercato.
- Modifiche al consenso: un'app il cui accesso viene revocato nel mezzo di una sessione.
Caricamento di pazienti Synthea su un server FHIR
Synthea scrive un Bundle FHIR R4 transaction per paziente. Abbiamo generato due pazienti (java -jar synthea-with-dependencies.jar -p 2 -s 4242 Massachusetts) e li abbiamo caricati in un'istanza locale di Anpheros. Il bundle del primo paziente conteneva 221 voci:
| Mantenute (tipi archiviati da Anpheros) | Rimosse (tipi non archiviati da Anpheros) |
|---|---|
| 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 |
Il loader chiede al server quali tipi supporta, mantiene solo quelli e invia il resto come una transazione:
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);
Risultato: 182 risorse create in una transazione. I riferimenti urn:uuid tra le voci mantenute sono stati risolti in ID del server (un result di DiagnosticReport punta a un Observation esistente); i riferimenti alle 39 voci scartate rimangono come scritti, quindi prima del caricamento, raccogliere i fullUrl di ogni voce scartata e rimuovere o convertire i riferimenti mantenuti che puntano ad esse, e Patient/{id}/$summary ha prodotto un International Patient Summary con 15 problemi, 6 immunizzazioni, 15 risultati e 28 segni vitali. $everything ha restituito 363 voci, inclusa la provenance che la piattaforma aggiunge a ogni scrittura.
Tre cose da sapere prima di fare affidamento su di esso:
- I riferimenti condizionali rimangono come scritti. Synthea punta a praticanti, organizzazioni e luoghi con riferimenti condizionali come
Practitioner?identifier=http://hl7.org/fhir/sid/us-npi|9999967398. Anpheros non risolve i riferimenti condizionali in una transazione; vengono archiviati come scritti, con il loro testodisplay, e non si risolvono in una risorsa. Se il tuo codice segue questi collegamenti, carica separatamente praticanti e organizzazioni e riscrivi i riferimenti. - I dati di fatturazione e fornitura sono persi. Claims e explanations of benefit sono centrali nel modello di costo USA di Synthea e non fanno parte di un record clinico in Anpheros.
- Le prescrizioni diventano assenti, non convertite.
MedicationRequestviene rimosso; se hai bisogno dei farmaci nel record, convertili inMedicationStatementprima del caricamento.
I nomi in Synthea includono numeri (Marcelo725 Gulgowski816) di proposito, in modo che nessuno li scambi per persone reali.
Pazienti sintetici nella sandbox Anpheros
Ogni progetto sandbox Anpheros ottiene la propria copia di 30 pazienti sintetici, generati da persone progettate manualmente: età da 3 a 85 anni, diversi paesi e lingue dell'UE, condizioni codificate in ICD-10, farmaci in ATC, laboratori e parametri vitali in LOINC con unità UCUM e intervalli di riferimento, sei mesi di cronologia e documenti. Un progetto appena inizializzato contiene 30 pazienti, 43 condizioni, 51 dichiarazioni di farmaci, 1.811 osservazioni, 57 documenti e 6 allergie. I dati sono deterministici: ogni progetto vede le stesse persone con gli stessi valori, solo ID diversi, e un reset li ripristina. Ogni persona mantiene un identificatore stabile, quindi Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02 troverà sempre la stessa persona. Vedere Database FHIR gratuito e sandbox.
Utilizzare le persone quando si desiderano record piccoli e coerenti che coprano le lingue europee e le funzionalità della piattaforma; caricare Synthea quando si necessita di volume o di cronologie in stile USA.
Domande frequenti
Cos'è il dato paziente sintetico?
Record sanitari inventati che assomigliano a quelli reali per struttura e pattern, ma non descrivono alcuna persona reale. Permette agli sviluppatori di creare e testare senza utilizzare informazioni sanitarie protette.
Il dato sintetico è anonimo per definizione?
I dati generati da regole, come quelli di Synthea, non contengono pazienti reali. I dati generati da modelli addestrati su record reali possono comunque rivelare persone reali e necessitano di una valutazione della privacy prima di essere condivisi.
Posso importare dati Synthea in un server FHIR?
Sì. Synthea esporta bundle di transazioni FHIR R4. Rimuovere i tipi di risorsa che il server non supporta, verificare come gestisce i riferimenti condizionali e inviare ogni bundle come transazione.
Il sandbox Anpheros include pazienti sintetici?
Sì: 30 per progetto, con sei mesi di cronologia codificata, più fino a 50 pazienti di test che crei tu stesso.
Correlati
- Database FHIR e sandbox gratuiti
- Esempi JSON FHIR R4
- Come normalizzare i dati medici
- Come archiviare cartelle cliniche utilizzando FHIR R4
- Piattaforma FHIR
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card