# Datos sintéticos de pacientes para pruebas

> Synthea, personas y datos generados por modelos comparados, qué contiene un buen conjunto de datos de prueba y qué sucedió cuando cargamos pacientes de Synthea en un servidor FHIR.

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

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

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

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 texto `display`, 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.** `MedicationRequest` se elimina; si necesita los medicamentos en el registro, conviértalos a `MedicationStatement` antes 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](https://developers.anpheros.com/es/guides/free-fhir-database).

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](https://developers.anpheros.com/es/guides/free-fhir-database)
- [Ejemplos JSON de FHIR R4](https://developers.anpheros.com/tools/fhir-examples/)
- [Cómo normalizar datos médicos](https://developers.anpheros.com/es/guides/normalize-medical-data)
- [Cómo almacenar registros médicos usando FHIR R4](https://developers.anpheros.com/es/guides/store-medical-records-fhir)
- [Plataforma FHIR](https://developers.anpheros.com/es/guides/fhir)
