Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Datos sintéticos de pacientes para pruebas
Synthea, personas y datos generados por modelos comparados, qué contienen los buenos datos de prueba y qué sucedió cuando cargamos pacientes de Synthea en un servidor FHIR.
Los datos sintéticos de pacientes son registros médicos inventados —pacientes, diagnósticos, medicamentos, resultados de laboratorio, visitas— generados para que parezcan y se comporten como los reales, de modo que pueda crear, probar y demostrar software de atención médica sin tocar la información de salud de nadie. Es la opción predeterminada para el desarrollo: los datos reales de pacientes en un entorno de prueba representan un riesgo de privacidad y, por lo general, un problema legal. Esta página cubre las principales formas de obtener datos sintéticos, en qué destaca y en qué falla cada una, cómo diseñar pruebas en torno a ellos y cómo cargarlos en un servidor FHIR, incluido lo que sucedió cuando cargamos pacientes de Synthea en Anpheros.
Tres formas de obtener pacientes sintéticos
| Enfoque | Ejemplo | Ideal para | A tener en cuenta |
|---|---|---|---|
| Simulación basada en reglas | Synthea (código abierto, de MITRE): simula vidas desde el nacimiento con módulos de enfermedades y exporta bundles FHIR R4, C-CDA y CSV | Volumen, historiales completos, formatos estándar | Centrado en EE. UU. por defecto (demografía, recursos de facturación, códigos); los patrones solo son tan realistas como los módulos |
| Personas curadas | Pacientes diseñados manualmente con condiciones específicas | Demos, casos límite, pruebas repetibles | Pocos pacientes; alguien tiene que mantener su coherencia |
| Generación estadística o ML a partir de datos reales | Modelos entrenados en un conjunto de datos real | Realismo de investigación | Puede filtrar personas reales si se hace mal; necesita evaluación de privacidad, no solo "es sintético" |
El texto escrito por un modelo de lenguaje a petición es una cuarta fuente, arriesgada: se lee bien pero a menudo se contradice (un medicamento sin la condición que trata, valores de laboratorio imposibles) y no debe ser la base de las pruebas.
Qué contiene un buen conjunto de datos de prueba
Los promedios realistas no son suficientes. El código falla en los extremos, así que asegúrese de que sus datos, sintéticos o no, incluyan:
- Datos faltantes y parciales: un resultado de laboratorio sin rango de referencia, un medicamento sin dosis, un paciente sin fecha de nacimiento.
- Unidades y formatos: la misma prueba en mg/dL y mmol/L, comas decimales, horas con y sin zona horaria.
- Correcciones e historial: un resultado modificado, una entrada eliminada (
entered-in-error), una condición que se resolvió. - Duplicados: el mismo informe enviado dos veces.
- Historiales largos y cortos: un recién nacido, alguien con diez años de datos, alguien con una visita.
- Varios idiomas y países si atiende a más de un mercado.
- Cambios de consentimiento: una aplicación cuyo acceso se revoca a mitad de una sesión.
Carga de pacientes Synthea en un servidor FHIR
Synthea escribe un Bundle FHIR R4 transaction por paciente. Generamos dos pacientes (java -jar synthea-with-dependencies.jar -p 2 -s 4242 Massachusetts) y los cargamos en una instancia local de Anpheros. El bundle del primer paciente tenía 221 entradas:
| Mantenidas (tipos que Anpheros almacena) | Eliminadas (tipos que Anpheros no almacena) |
|---|---|
| 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 |
El cargador pregunta al servidor qué tipos soporta, mantiene solo esos y publica el resto como una transacción:
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);
Resultado: 182 recursos creados en una transacción. Las referencias urn:uuid entre las entradas mantenidas se resolvieron a IDs del servidor (el result de un DiagnosticReport apunta a una Observation que existe); las referencias a las 39 entradas descartadas permanecen como están escritas, por lo que antes de cargar, recopile los fullUrl de cada entrada descartada y elimine o convierta las referencias mantenidas que apuntan a ellas, y Patient/{id}/$summary produjo un International Patient Summary con 15 problemas, 6 inmunizaciones, 15 resultados y 28 signos vitales. $everything devolvió 363 entradas, incluida la procedencia que la plataforma agrega a cada escritura.
Tres cosas a saber antes de confiar en él:
- Las referencias condicionales permanecen como están escritas. Synthea apunta a profesionales, organizaciones y ubicaciones con referencias condicionales como
Practitioner?identifier=http://hl7.org/fhir/sid/us-npi|9999967398. Anpheros no resuelve referencias condicionales en una transacción; se almacenan como están escritas, con su textodisplay, y no se resuelven a un recurso. Si su código sigue esos enlaces, cargue profesionales y organizaciones por separado y reescriba las referencias. - Los datos de facturación y suministro se han ido. Las reclamaciones y las explicaciones de beneficios son centrales para el modelo de costos de EE. UU. de Synthea y no forman parte de un registro clínico en Anpheros.
- Las prescripciones se vuelven ausentes, no convertidas.
MedicationRequestse elimina; si necesita los medicamentos en el registro, conviértalos aMedicationStatementantes de cargar.
Los nombres en Synthea incluyen números (Marcelo725 Gulgowski816) a propósito, para que nadie los confunda con personas reales.
Pacientes sintéticos en el sandbox de Anpheros
Cada proyecto de sandbox de Anpheros recibe su propia copia de 30 pacientes sintéticos, generados a partir de personas diseñadas manualmente: edades de 3 a 85 años, varios países y lenguajes de la UE, condiciones codificadas en ICD-10, medicamentos en ATC, laboratorios y signos vitales en LOINC con unidades UCUM y rangos de referencia, seis meses de historial y documentos. Un proyecto recién inicializado contiene 30 pacientes, 43 condiciones, 51 declaraciones de medicación, 1.811 observaciones, 57 documentos y 6 alergias. Los datos son deterministas — cada proyecto ve a las mismas personas con los mismos valores, solo identificadores diferentes — y un reinicio los restaura. Cada persona mantiene un identificador estable, por lo que Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02 siempre encontrará a la misma persona. Ver Base de datos FHIR gratuita y sandbox.
Utilice las personas cuando desee registros pequeños y coherentes que cubran idiomas europeos y las propias características de la plataforma; cargue Synthea cuando necesite volumen o historiales de estilo estadounidense.
Preguntas frecuentes
¿Qué es el dato de paciente sintético?
Registros de salud inventados que se asemejan a los reales en estructura y patrones, pero que no describen a ninguna persona real. Permite a los desarrolladores crear y probar sin usar información de salud protegida.
¿Los datos sintéticos son anónimos por definición?
Los datos generados a partir de reglas, como los de Synthea, no contienen pacientes reales. Los datos generados por modelos entrenados con registros reales aún pueden revelar personas reales y requieren una evaluación de privacidad antes de ser compartidos.
¿Puedo importar datos de Synthea a un servidor FHIR?
Sí. Synthea exporta paquetes de transacción FHIR R4. Elimine los tipos de recursos que el servidor no admite, verifique cómo maneja las referencias condicionales y publique cada paquete como una transacción.
¿La sandbox de Anpheros incluye pacientes sintéticos?
Sí: 30 por proyecto, con seis meses de historial codificado, además de hasta 50 pacientes de prueba que usted mismo cree.
Relacionado
- Base de datos y sandbox FHIR gratuitos
- Ejemplos JSON de FHIR R4
- Cómo normalizar datos médicos
- Cómo almacenar registros médicos usando FHIR R4
- Plataforma FHIR
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card