AnpherosAnpheros PlatformDevelopers

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Синтетические данные пациентов для тестирования

Сравнение Synthea, персон и данных, сгенерированных моделями, что содержат хорошие тестовые данные и что произошло, когда мы загрузили пациентов Synthea в FHIR-сервер.

Синтетические данные пациентов — это вымышленные медицинские записи: пациенты, диагнозы, лекарства, результаты лабораторных исследований, визиты — сгенерированные так, чтобы они выглядели и вели себя как настоящие, чтобы вы могли создавать, тестировать и демонстрировать медицинское программное обеспечение, не затрагивая чью-либо медицинскую информацию. Это стандартный подход для разработки: реальные данные пациентов в тестовой среде представляют риск конфиденциальности и обычно являются юридической проблемой. На этой странице рассматриваются основные способы получения синтетических данных, их преимущества и недостатки, как проектировать тесты на их основе и как загружать их на FHIR-сервер, включая то, что произошло, когда мы загрузили пациентов Synthea в Anpheros.

Три способа получить синтетических пациентов

Подход Пример Подходит для Обратите внимание
Симуляция на основе правил Synthea (open source, от MITRE): симулирует жизнь с рождения с помощью модулей заболеваний и экспортирует пакеты FHIR R4, C-CDA и CSV Большой объем, полные истории, стандартные форматы По умолчанию ориентирован на США (демография, платежные ресурсы, коды); закономерности реалистичны только настолько, насколько реалистичны модули
Курируемые персоны Пациенты, разработанные вручную с конкретными состояниями Демонстрации, крайние случаи, повторяемые тесты Небольшое количество пациентов; кто-то должен поддерживать их согласованность
Статистическая генерация или генерация с помощью МО на основе реальных данных Модели, обученные на реальном наборе данных Исследование реализма Может привести к утечке данных реальных людей при плохом исполнении; требует оценки конфиденциальности, а не просто "это синтетика"

Текст, написанный языковой моделью по запросу, является четвертым, рискованным источником: он хорошо читается, но часто противоречит сам себе (лекарство без заболевания, которое оно лечит, невозможные лабораторные значения) и не должен быть основой для тестов.

Что должно содержаться в хороших тестовых данных

Реалистичных средних значений недостаточно. Код ломается на граничных случаях, поэтому убедитесь, что ваши данные, синтетические или нет, включают:

Загрузка пациентов Synthea на FHIR-сервер

Synthea записывает один FHIR R4 transaction Bundle на пациента. Мы сгенерировали двух пациентов (java -jar synthea-with-dependencies.jar -p 2 -s 4242 Massachusetts) и загрузили их в локальный экземпляр Anpheros. Bundle первого пациента содержал 221 запись:

Сохранено (типы, которые хранит Anpheros) Удалено (типы, которые 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

Загрузчик запрашивает у сервера, какие типы он поддерживает, сохраняет только их и отправляет остальные одной транзакцией:

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

Результат: 182 ресурса создано в одной транзакции. urn:uuid ссылки между сохраненными записями были разрешены в серверные идентификаторы (result DiagnosticReport ссылается на существующий Observation); ссылки на 39 удаленных записей остаются как есть, поэтому перед загрузкой соберите fullUrl каждой удаленной записи и удалите или преобразуйте сохраненные ссылки, которые на них указывают, а Patient/{id}/$summary сгенерировал International Patient Summary с 15 проблемами, 6 прививками, 15 результатами и 28 жизненными показателями. $everything вернул 363 записи, включая provenance, который платформа добавляет к каждой записи.

Три вещи, которые нужно знать, прежде чем полагаться на это:

Имена в Synthea включают цифры (Marcelo725 Gulgowski816) намеренно, чтобы никто не принял их за реальных людей.

Синтетические пациенты в песочнице Anpheros

Каждый проект песочницы Anpheros получает свою копию из 30 синтетических пациентов, сгенерированных на основе разработанных вручную персон: возраст от 3 до 85 лет, несколько стран и языков ЕС, состояния, закодированные в ICD-10, медикаменты в ATC, лабораторные исследования и жизненные показатели в LOINC с единицами UCUM и референсными диапазонами, шестимесячная история и документы. Свежезагруженный проект содержит 30 пациентов, 43 состояния, 51 назначение медикаментов, 1 811 наблюдений, 57 документов и 6 аллергий. Данные детерминированы — каждый проект видит одних и тех же людей с одинаковыми значениями, только с разными идентификаторами — и сброс восстанавливает их. Каждая персона сохраняет стабильный идентификатор, поэтому Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02 всегда находит одного и того же человека. См. Бесплатная база данных FHIR и песочница.

Используйте персоны, когда вам нужны небольшие, связные записи, охватывающие европейские языки и собственные функции платформы; загрузите Synthea, когда вам нужен объем или истории в американском стиле.

Часто задаваемые вопросы

Что такое синтетические данные пациента?

Вымышленные медицинские записи, которые по структуре и закономерностям напоминают реальные, но не описывают реального человека. Это позволяет разработчикам создавать и тестировать приложения без использования защищенной медицинской информации.

Являются ли синтетические данные анонимными по определению?

Данные, сгенерированные по правилам, как в Synthea, не содержат реальных пациентов. Данные, сгенерированные моделями, обученными на реальных записях, все еще могут раскрывать реальных людей и требуют оценки конфиденциальности перед распространением.

Могу ли я импортировать данные Synthea на FHIR-сервер?

Да. Synthea экспортирует пакеты транзакций FHIR R4. Удалите типы ресурсов, которые сервер не поддерживает, проверьте, как он обрабатывает условные ссылки, и отправьте каждый пакет как транзакцию.

Включает ли песочница Anpheros синтетических пациентов?

Да: 30 на проект с шестимесячной кодированной историей, плюс до 50 тестовых пациентов, которых вы создаете сами.

Связанные материалы

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Product updates by email

New features, guides and the end of the beta. One email a month at most.

Send me occasional Anpheros Platform updates by email (new features, API changes, guides). I'll confirm by email and can unsubscribe in one click from any email. Privacy