Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
테스트용 합성 환자 데이터
Synthea, 페르소나 및 모델 생성 데이터 비교, 좋은 테스트 데이터에 포함되는 것, Synthea 환자를 FHIR 서버에 로드했을 때 발생한 일.
합성 환자 데이터는 실제 환자 데이터처럼 보이도록 생성된 가상의 의료 기록(환자, 진단, 처방, 검사 결과, 방문 기록 등)으로, 실제 환자의 건강 정보를 건드리지 않고 의료 소프트웨어를 구축, 테스트 및 시연할 수 있도록 합니다. 개발 시 기본으로 사용됩니다. 테스트 환경에서 실제 환자 데이터를 사용하는 것은 개인 정보 보호 위험이며 일반적으로 법적 문제입니다. 이 페이지에서는 합성 데이터를 얻는 주요 방법, 각 방법의 장단점, 이를 중심으로 테스트를 설계하는 방법, 그리고 Anpheros에 Synthea 환자를 로드했을 때 발생한 일을 포함하여 FHIR 서버에 로드하는 방법에 대해 다룹니다.
합성 환자를 얻는 세 가지 방법
| 접근 방식 | 예시 | 적합한 경우 | 주의 사항 |
|---|---|---|---|
| 규칙 기반 시뮬레이션 | Synthea (MITRE의 오픈 소스): 질병 모듈을 사용하여 출생부터 삶을 시뮬레이션하고 FHIR R4 번들, C-CDA 및 CSV로 내보냅니다. | 볼륨, 전체 기록, 표준 형식 | 기본적으로 미국 중심(인구 통계, 청구 리소스, 코드); 패턴은 모듈만큼만 현실적입니다. |
| 큐레이션된 페르소나 | 특정 질환을 가진 수작업으로 설계된 환자 | 데모, 엣지 케이스, 반복 가능한 테스트 | 환자 수가 적음; 누군가가 일관성을 유지해야 합니다. |
| 실제 데이터 기반 통계 또는 ML 생성 | 실제 데이터 세트로 학습된 모델 | 연구 현실성 | 잘못 수행될 경우 실제 사람을 유출할 수 있음; "합성"일 뿐만 아니라 개인 정보 보호 평가가 필요합니다. |
언어 모델이 요청에 따라 작성한 텍스트는 네 번째 위험한 소스입니다. 잘 읽히지만 종종 자체적으로 모순됩니다(치료하는 질환이 없는 약물, 불가능한 실험실 값). 테스트의 기반으로 사용해서는 안 됩니다.
좋은 테스트 데이터의 구성 요소
현실적인 평균값만으로는 충분하지 않습니다. 코드는 예외적인 상황에서 오류가 발생하므로, 합성 데이터든 아니든 다음을 포함하도록 데이터를 구성해야 합니다.
- 누락 및 부분 데이터: 참조 범위가 없는 검사 결과, 용량이 없는 약물, 생년월일이 없는 환자.
- 단위 및 형식: 동일한 검사를 mg/dL 및 mmol/L로, 소수점 구분 기호로 쉼표 사용, 시간대 포함 및 미포함 시간.
- 수정 및 기록: 수정된 결과, 삭제된 (
entered-in-error) 항목, 해결된 질병. - 중복: 동일한 보고서가 두 번 전송된 경우.
- 길고 짧은 기록: 신생아, 10년의 데이터가 있는 환자, 한 번의 방문 기록만 있는 환자.
- 여러 언어 및 국가: 여러 시장을 서비스하는 경우.
- 동의 변경: 세션 중간에 액세스가 취소된 앱.
Synthea 환자를 FHIR 서버로 로드하기
Synthea는 환자당 하나의 FHIR R4 transaction 번들을 작성합니다. 저희는 두 명의 환자(java -jar synthea-with-dependencies.jar -p 2 -s 4242 Massachusetts)를 생성하여 Anpheros의 로컬 인스턴스에 로드했습니다. 첫 번째 환자의 번들에는 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 참조는 서버 ID로 확인되었습니다 (DiagnosticReport의 result는 존재하는 Observation을 가리킵니다). 삭제된 39개 항목에 대한 참조는 작성된 대로 유지됩니다. 따라서 로드하기 전에 삭제된 각 항목의 fullUrl를 수집하고 해당 항목을 가리키는 유지된 참조를 제거하거나 변환해야 합니다. Patient/{id}/$summary는 15개의 문제, 6개의 예방 접종, 15개의 결과 및 28개의 활력 징후를 포함하는 International Patient Summary를 생성했습니다. $everything는 플랫폼이 각 쓰기에 추가하는 provenance를 포함하여 363개의 항목을 반환했습니다.
신뢰하기 전에 알아야 할 세 가지 사항이 있습니다.
- 조건부 참조는 작성된 대로 유지됩니다. Synthea는
Practitioner?identifier=http://hl7.org/fhir/sid/us-npi|9999967398와 같은 조건부 참조를 사용하여 의사, 조직 및 위치를 가리킵니다. Anpheros는 트랜잭션에서 조건부 참조를 확인하지 않습니다. 작성된 대로display텍스트와 함께 저장되며 리소스로 확인되지 않습니다. 코드가 해당 링크를 따르는 경우 의사 및 조직을 별도로 로드하고 참조를 다시 작성해야 합니다. - 청구 및 공급 데이터는 누락됩니다. 청구 및 혜택 설명은 Synthea의 미국 비용 모델에 중요하며 Anpheros의 임상 기록의 일부가 아닙니다.
- 처방은 변환되지 않고 누락됩니다.
MedicationRequest는 제거됩니다. 기록에 약물이 필요한 경우 로드하기 전에MedicationStatement로 변환해야 합니다.
Synthea의 이름에는 실제 사람으로 오인되지 않도록 의도적으로 숫자가 포함되어 있습니다 (Marcelo725 Gulgowski816).
Anpheros 샌드박스의 합성 환자
모든 Anpheros 샌드박스 프로젝트는 수작업으로 설계된 페르소나에서 생성된 30명의 합성 환자 복사본을 받습니다. 나이는 3세에서 85세까지이며, 여러 EU 국가 및 언어를 포함합니다. 조건은 ICD-10으로 코딩되고, 약물은 ATC로, 검사 및 활력징후는 LOINC와 UCUM 단위 및 참조 범위로, 6개월의 기록 및 문서가 포함됩니다. 새로 시드된 프로젝트는 30명의 환자, 43개의 조건, 51개의 약물 기록, 1,811개의 관찰, 57개의 문서 및 6개의 알레르기를 포함합니다. 데이터는 결정론적이므로 모든 프로젝트는 동일한 사람과 동일한 값을 보지만 ID만 다릅니다. 리셋 시 복원됩니다. 각 페르소나는 안정적인 식별자를 유지하므로 Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02는 항상 같은 사람을 찾습니다. Free FHIR database and sandbox를 참조하십시오.
유럽 언어와 플랫폼 자체 기능을 포괄하는 작고 일관성 있는 기록이 필요할 때 페르소나를 사용하십시오. 볼륨 또는 미국식 기록이 필요할 때는 Synthea를 로드하십시오.
자주 묻는 질문
합성 환자 데이터란 무엇인가요?
실제 데이터와 유사한 구조 및 패턴을 가지지만 실제 인물을 설명하지 않는 가상의 건강 기록입니다. 이를 통해 개발자는 개인 건강 정보(PHI)를 사용하지 않고도 애플리케이션을 구축하고 테스트할 수 있습니다.
합성 데이터는 정의상 익명인가요?
Synthea와 같이 규칙 기반으로 생성된 데이터에는 실제 환자가 포함되어 있지 않습니다. 실제 기록을 기반으로 학습된 모델로 생성된 데이터는 여전히 실제 인물을 드러낼 수 있으므로 공유 전에 개인 정보 보호 평가가 필요합니다.
Synthea 데이터를 FHIR 서버로 가져올 수 있나요?
예. Synthea는 FHIR R4 트랜잭션 번들을 내보냅니다. 서버에서 지원하지 않는 리소스 유형을 제거하고, 조건부 참조를 처리하는 방식을 확인한 후 각 번들을 트랜잭션으로 게시하세요.
Anpheros 샌드박스에는 합성 환자가 포함되어 있나요?
예. 프로젝트당 30명의 합성 환자가 포함되며, 6개월 분량의 코딩된 기록이 제공됩니다. 또한 직접 생성할 수 있는 최대 50명의 테스트 환자도 사용할 수 있습니다.
관련 자료
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card