Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Dados sintéticos de pacientes para testes
Synthea, personas e dados gerados por modelos comparados, o que bons dados de teste contêm e o que aconteceu quando carregámos pacientes Synthea para um servidor FHIR.
Dados sintéticos de pacientes são registos médicos inventados — pacientes, diagnósticos, medicamentos, resultados de laboratório, consultas — gerados para parecerem e comportarem-se como os reais, para que possa criar, testar e demonstrar software de saúde sem tocar em qualquer informação de saúde de alguém. É o padrão para desenvolvimento: dados reais de pacientes num ambiente de teste representam um risco de privacidade e geralmente um problema legal. Esta página aborda as principais formas de obter dados sintéticos, os pontos fortes e fracos de cada um, como projetar testes em torno deles e como carregá-los num servidor FHIR — incluindo o que aconteceu quando carregámos pacientes Synthea no Anpheros.
Três formas de obter pacientes sintéticos
| Abordagem | Exemplo | Ideal para | Atenção |
|---|---|---|---|
| Simulação baseada em regras | Synthea (open source, da MITRE): simula vidas desde o nascimento com módulos de doenças e exporta bundles FHIR R4, C-CDA e CSV | Volume, históricos completos, formatos standard | Centrado nos EUA por defeito (demografia, recursos de faturação, códigos); os padrões são tão realistas quanto os módulos |
| Personas curadas | Pacientes desenhados manualmente com condições específicas | Demos, casos extremos, testes repetíveis | Poucos pacientes; alguém tem de os manter coerentes |
| Geração estatística ou ML a partir de dados reais | Modelos treinados num conjunto de dados real | Realismo da investigação | Pode vazar pessoas reais se feito incorretamente; necessita de avaliação de privacidade, não apenas "é sintético" |
Texto escrito por um modelo de linguagem a pedido é uma quarta fonte, arriscada: lê-se bem, mas muitas vezes contradiz-se (uma medicação sem a condição que trata, valores de laboratório impossíveis) e não deve ser a base de testes.
O que os bons dados de teste contêm
Médias realistas não são suficientes. O código falha nas extremidades, por isso certifique-se de que os seus dados, sintéticos ou não, incluem:
- Dados em falta e parciais: um resultado de laboratório sem intervalo de referência, um medicamento sem dose, um paciente sem data de nascimento.
- Unidades e formatos: o mesmo teste em mg/dL e mmol/L, vírgulas decimais, horas com e sem fuso horário.
- Correções e histórico: um resultado alterado, uma entrada eliminada (
entered-in-error), uma condição que foi resolvida. - Duplicados: o mesmo relatório enviado duas vezes.
- Históricos longos e curtos: um recém-nascido, alguém com dez anos de dados, alguém com uma consulta.
- Várias línguas e países se servir mais do que um mercado.
- Alterações de consentimento: uma aplicação cujo acesso é revogado a meio de uma sessão.
Carregar Pacientes Synthea num Servidor FHIR
O Synthea gera um Bundle FHIR R4 transaction por paciente. Gerámos dois pacientes (java -jar synthea-with-dependencies.jar -p 2 -s 4242 Massachusetts) e carregámo-los numa instância local do Anpheros. O bundle do primeiro paciente continha 221 entradas:
| Mantido (tipos que o Anpheros armazena) | Removido (tipos que o Anpheros não armazena) |
|---|---|
| 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 |
O carregador pergunta ao servidor quais os tipos que suporta, mantém apenas esses e envia os restantes como uma transação:
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 criados numa transação. As referências urn:uuid entre as entradas mantidas foram resolvidas para IDs do servidor (um result de DiagnosticReport aponta para uma Observation existente); as referências às 39 entradas descartadas permanecem como escritas, pelo que, antes de carregar, recolha os fullUrl de cada entrada descartada e remova ou converta as referências mantidas que apontam para elas, e Patient/{id}/$summary produziu um International Patient Summary com 15 problemas, 6 imunizações, 15 resultados e 28 sinais vitais. $everything retornou 363 entradas, incluindo a proveniência que a plataforma adiciona a cada escrita.
Três coisas a saber antes de confiar nele:
- Referências condicionais permanecem como escritas. O Synthea aponta para praticantes, organizações e locais com referências condicionais como
Practitioner?identifier=http://hl7.org/fhir/sid/us-npi|9999967398. O Anpheros não resolve referências condicionais numa transação; elas são armazenadas como escritas, com o seu textodisplay, e não são resolvidas para um recurso. Se o seu código seguir essas ligações, carregue praticantes e organizações separadamente e reescreva as referências. - Dados de faturação e fornecimento desapareceram. Reclamações e explicações de benefício são centrais para o modelo de custos dos EUA do Synthea e não fazem parte de um registo clínico no Anpheros.
- Prescrições tornam-se ausentes, não convertidas.
MedicationRequesté removido; se precisar dos medicamentos no registo, converta-os paraMedicationStatementantes de carregar.
Os nomes no Synthea incluem números (Marcelo725 Gulgowski816) propositadamente, para que ninguém os confunda com pessoas reais.
Pacientes sintéticos na sandbox Anpheros
Cada projeto sandbox Anpheros recebe a sua própria cópia de 30 pacientes sintéticos, gerados a partir de personas desenhadas manualmente: idades de 3 a 85 anos, vários países e línguas da UE, condições codificadas em ICD-10, medicamentos em ATC, laboratórios e sinais vitais em LOINC com unidades UCUM e intervalos de referência, seis meses de histórico e documentos. Um projeto recém-inicializado contém 30 pacientes, 43 condições, 51 declarações de medicação, 1.811 observações, 57 documentos e 6 alergias. Os dados são determinísticos — cada projeto vê as mesmas pessoas com os mesmos valores, apenas com IDs diferentes — e um reset restaura-os. Cada persona mantém um identificador estável, pelo que Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02 encontrará sempre a mesma pessoa. Ver Base de dados FHIR gratuita e sandbox.
Utilize as personas quando pretender registos pequenos e coerentes que cubram línguas europeias e as funcionalidades da própria plataforma; carregue Synthea quando precisar de volume ou de históricos ao estilo dos EUA.
Perguntas frequentes
O que são dados sintéticos de pacientes?
Registos de saúde inventados que se assemelham a registos reais em estrutura e padrões, mas que não descrevem nenhuma pessoa real. Permite que os desenvolvedores criem e testem sem usar informações de saúde protegidas.
Os dados sintéticos são anónimos por definição?
Dados gerados a partir de regras, como os do Synthea, não contêm pacientes reais. Dados gerados por modelos treinados em registos reais ainda podem revelar pessoas reais e necessitam de uma avaliação de privacidade antes de serem partilhados.
Posso importar dados do Synthea para um servidor FHIR?
Sim. O Synthea exporta pacotes de transação FHIR R4. Remova os tipos de recursos que o servidor não suporta, verifique como ele lida com referências condicionais e publique cada pacote como uma transação.
A sandbox Anpheros inclui pacientes sintéticos?
Sim: 30 por projeto, com seis meses de histórico codificado, mais até 50 pacientes de teste que você cria.
Relacionado
- Base de dados e sandbox FHIR gratuitos
- Exemplos JSON FHIR R4
- Como normalizar dados médicos
- Como armazenar registos médicos utilizando FHIR R4
- Plataforma FHIR
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card