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 | Обсяг, повні історії, стандартні формати | За замовчуванням орієнтований на США (демографія, ресурси виставлення рахунків, коди); шаблони реалістичні настільки, наскільки реалістичні модулі |
| Куровані персонажі | Пацієнти, розроблені вручну з конкретними станами | Демонстрації, граничні випадки, повторювані тести | Мало пацієнтів; хтось повинен підтримувати їхню узгодженість |
| Статистична або ML генерація з реальних даних | Моделі, навчені на реальному наборі даних | Реалізм досліджень | Може призвести до витоку реальних людей, якщо зроблено погано; потребує оцінки конфіденційності, а не просто "це синтетично" |
Текст, написаний мовною моделлю на запит, є четвертим, ризикованим джерелом: він добре читається, але часто суперечить сам собі (ліки без захворювання, яке вони лікують, неможливі лабораторні показники) і не повинен бути основою тестів.
Що містить якісні тестові дані
Реалістичних середніх значень недостатньо. Код ламається на крайніх випадках, тому переконайтеся, що ваші дані, синтетичні чи ні, включають:
- Відсутні та часткові дані: результат лабораторного дослідження без референсного діапазону, ліки без дозування, пацієнт без дати народження.
- Одиниці вимірювання та формати: той самий тест у mg/dL та mmol/L, десяткові коми, час із часовими поясами та без них.
- Виправлення та історія: змінений результат, видалений (
entered-in-error) запис, стан, який було вирішено. - Дублікати: той самий звіт, надісланий двічі.
- Довга та коротка історія: новонароджений, людина з десятирічними даними, людина з одним візитом.
- Кілька мов та країн, якщо ви обслуговуєте більше одного ринку.
- Зміни згоди: додаток, доступ до якого було відкликано посеред сеансу.
Завантаження пацієнтів 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 вказує на практикуючих лікарів, організації та місця розташування за допомогою умовних посилань, таких як
Practitioner?identifier=http://hl7.org/fhir/sid/us-npi|9999967398. Anpheros не розв'язує умовні посилання в транзакції; вони зберігаються як написані, з їхнімdisplayтекстом, і не розв'язуються до ресурсу. Якщо ваш код дотримується цих посилань, завантажте практикуючих лікарів та організації окремо та перепишіть посилання. - Дані про виставлення рахунків та постачання втрачено. Запити (Claims) та пояснення вигоди (explanations of benefit) є центральними для моделі витрат Synthea в США і не є частиною клінічного запису в Anpheros.
- Рецепти стають відсутніми, а не конвертованими.
MedicationRequestвидаляється; якщо вам потрібні ліки в записі, конвертуйте їх уMedicationStatementперед завантаженням.
Імена в 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 тестових пацієнтів, яких ви створюєте самостійно.
Пов'язане
- Безкоштовна база даних FHIR та пісочниця
- Приклади FHIR R4 JSON
- Як нормалізувати медичні дані
- Як зберігати медичні записи за допомогою FHIR R4
- Платформа FHIR
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card