# 의료 데이터 출처(Provenance) 설명

> FHIR R4 레코드에 대한 모든 쓰기 작업 시 출처 기록은 작성자 유형, 개인, 조직, 소스 시스템, 버전을 기록합니다. 헤더를 사용하여 설정하는 방법, 읽는 방법, AI 모델에 제공되는 데이터를 어떻게 레이블링하는지 설명합니다.

Source: https://developers.anpheros.com/ko/guides/medical-data-provenance

**출처(Provenance)는 의료 데이터 조각이 어디에서 왔는지에 대한 기록입니다. 즉, 누가 작성했는지, 어떤 조직을 대신하여, 어떤 시스템에서, 언제 작성했으며, 각 버전에서 무엇이 변경되었는지에 대한 기록입니다.** 환자, 기기, 병원, 실험실 및 AI에서 수집된 데이터를 기록하는 시스템에서 출처는 값의 신뢰성을 높이는 요소입니다. 출처가 없다면 집에서 입력한 혈압 측정값과 병원에서 측정한 혈압 측정값은 동일하게 보일 것입니다. Anpheros에서는 HL7 FHIR R4 레코드에 대한 모든 쓰기 작업 시 FHIR `Provenance` 리소스가 자동으로 생성됩니다. 이 페이지에서는 해당 리소스에 포함되는 내용, 올바르게 채우는 방법 및 읽는 방법에 대해 설명합니다.

## 프로비넌스(Provenance)가 중요한 이유

- **임상적 신뢰.** 의사는 검사 결과와 환자가 직접 입력한 값, 또는 AI가 사진에서 추출한 수치를 다르게 판단합니다.
- **AI 안전성.** 기록을 받은 모델은 어떤 항목이 사실이고 어떤 항목이 다른 모델이 작성한 메모인지 알아야 합니다. 레이블이 없으면 모든 항목을 동일하게 취급합니다.
- **수정 및 분쟁.** 값이 변경될 때, 이전 값, 변경한 사람, 변경 이유를 모두가 알아야 합니다.
- **책임성.** GDPR 및 European Health Data Space에 따라 조직은 개인의 건강 데이터로 무엇을 했는지 증명할 수 있어야 합니다.
- **공유.** 환자가 두 번째 병원에서 자신의 기록을 읽도록 허용할 때, 해당 병원은 첫 번째 병원에서 작성한 데이터를 알아야 합니다.

## Anpheros가 모든 쓰기 작업 시 기록하는 내용

| 질문 | 기록되는 위치 | 설정 방법 |
|---|---|---|
| 어떤 종류의 작성자인가? | `agent.who.identifier` (author type) | `/v1`의 `author_type`, 또는 `X-Anpheros-Author-Type` 헤더: `patient`, `practitioner`, `device`, `import`, `ai` |
| 어떤 사람인가? | `agent.who.reference` | `X-Anpheros-Author-Ref: Practitioner/<id>`, 또는 `X-Anpheros-Acting-As` |
| 어떤 조직을 위한 것인가? | `agent.onBehalfOf` | `PractitionerRole`의 조직, 또는 `X-Anpheros-On-Behalf-Of: Organization/<id>` |
| 어떤 시스템에서 왔는가? | `source` 역할을 가진 `entity` | `X-Anpheros-Source-System: <name>` |
| 해당 시스템의 어떤 레코드인가? | origin id | `X-Anpheros-Origin-Id: <id>` |
| 언제, 무엇이 발생했는가? | `recorded`, `activity` (CREATE, UPDATE, DELETE) | 자동 |
| 어떤 버전인가? | `target`은 `<Resource>/<id>/_history/<version>`를 가리킴 | 자동 |

작성자가 누구인지 명시하지 않으면 플랫폼은 `import`을 기록합니다. 환자에게 잘못 귀속된 값은 가져온 것으로 정직하게 표시된 값보다 나쁘기 때문에, 플랫폼은 `patient`을 절대 가정하지 않습니다.

## 완전한 출처를 가진 기록

클리닉의 심장 전문의가 방문 중에 클리닉 소프트웨어를 통해 심박수를 기록합니다.

```bash
curl -X POST https://platform.anpheros.com/fhir/R4/Observation -H "Authorization: Bearer $KEY" \
     -H "Content-Type: application/fhir+json" \
     -H "X-Anpheros-Author-Type: practitioner" \
     -H "X-Anpheros-Acting-As: PractitionerRole/$ROLE" \
     -H "X-Anpheros-Source-System: ccn-emr" \
     -d '{ "resourceType": "Observation", "status": "final", "code": {"coding": [{"system": "http://loinc.org", "code": "8867-4"}]}, … }'
```

플랫폼이 기록하는 출처(Provenance) 정보:

```json
{"resourceType": "Provenance",
 "target": [{"reference": "Observation/8660eb7c-…/_history/1"}],
 "recorded": "2026-10-12T20:41:47.469000Z",
 "activity": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/v3-DataOperation", "code": "CREATE"}]},
 "agent": [{"type": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/provenance-participant-type", "code": "author"}]},
            "who": {"reference": "PractitionerRole/e6d8c227-…",
                    "identifier": {"system": "https://anpheros.com/fhir/CodeSystem/author-type", "value": "practitioner"}},
            "onBehalfOf": {"reference": "Organization/c3a56a4b-…", "display": "Clinica Cardio Nord"}}],
 "entity": [{"role": "source", "what": {"identifier": {"system": "ccn-emr"}}}]}
```

의사의 역할, 소속 클리닉, 작성자 유형, 출처 시스템이 모두 표준 FHIR 형식으로 포함되어 있습니다. `PractitionerRole`는 프로젝트 디렉토리에 존재하고 활성화되어 있어야 합니다. 다른 사람의 실무자(practitioner)를 명시하는 요청은 거부됩니다.

```json
{"resourceType": "OperationOutcome", "issue": [{"severity": "error", "code": "invalid",
  "diagnostics": "Unknown or inactive Practitioner in X-Anpheros-Acting-As."}]}
```

디렉토리 설정은 [클리닉 시스템을 FHIR 백엔드와 통합하는 방법](https://developers.anpheros.com/ko/guides/integrate-clinic-systems-fhir)에서 다룹니다.

## 버전: 자동 덮어쓰기 없음

각 업데이트는 리소스의 새 버전을 생성하고 해당 리소스에 대한 새 Provenance를 생성합니다. 위 심박수가 92에서 88로 수정된 후:

```bash
curl https://platform.anpheros.com/fhir/R4/Observation/$OBS/_history -H "Authorization: Bearer $KEY"
```

는 버전 2(88)와 버전 1(92)을 반환합니다. REST 뷰는 각 버전의 Provenance를 요약합니다:

```bash
curl https://platform.anpheros.com/v1/patients/$PID/provenance/Observation/$OBS -H "Authorization: Bearer $KEY"
```

```json
{"data": [
  {"version": 1, "activity": "CREATE", "recorded": "2026-10-12T20:41:47.469000Z", "author_type": "practitioner", "author": "PractitionerRole/e6d8c227-…", "source_system": "ccn-emr", "fhir": "Provenance/6ed91529-…"},
  {"version": 2, "activity": "UPDATE", "recorded": "2026-10-12T20:41:47.500000Z", "author_type": "practitioner", "fhir": "Provenance/3fbf270f-…"}],
 "total": 2}
```

삭제는 소프트 삭제입니다: 삭제된 리소스는 검색 결과에서 사라지지만, 해당 리소스의 기록과 Provenance는 유지됩니다.

## 프로비넌스 읽기

```bash
# who wrote this resource (all versions)
GET /fhir/R4/Provenance?target=Observation/{id}
# everything a practitioner recorded
GET /fhir/R4/Provenance?agent=PractitionerRole/{id}
# the same, summarised, per resource
GET /v1/patients/{pid}/provenance/Observation/{id}
```

## AI 맥락에서의 출처 정보

[컨텍스트 API](https://developers.anpheros.com/ko/guides/llm-healthcare-data)는 `author_type` 및 `source`과 같이 모델에 제공되는 모든 항목에 출처 정보를 전달합니다. 텍스트 형식은 다음과 같습니다.

```
- Type 2 diabetes mellitus (E11), active, onset 2024-10-15 [import/anpheros-sandbox]
- Metformin 1000 mg 1 tablet twice daily with meals, active [patient/anpheros-sandbox]
- Glucose [Mass/volume] in Blood: 2026-09-16: 140.0 mg/dL [device/anpheros-sandbox]
```

`author_type: ai`으로 작성된 측정값은 이러한 사실들 사이에 나타나지 않습니다. 이들은 `ai_notes` 아래에 별도로 나열되며 검증되지 않은 것으로 표시되므로, 모델이 이전 모델의 추측을 측정값으로 오해하지 않도록 합니다. 모델에게 레이블의 의미를 설명하고 인용하도록 요청하십시오. [FHIR 백엔드로 AI 헬스케어 앱 구축 방법](https://developers.anpheros.com/ko/guides/build-ai-healthcare-app)에서는 이를 수행하는 프롬프트를 보여줍니다.

## 환자가 보는 정보

Provenance는 환자가 보는 정보이기도 합니다. 환자의 기록에는 각 항목을 누가 추가했는지 표시되며, 연결 목록에는 각 애플리케이션별로 누가 무엇에 액세스했는지 표시됩니다. 의료 전문가가 활동한 경우에는 이름이 표시됩니다("Dr. Ana Popescu · Clinica Cardio Nord가 귀하의 검사 결과를 읽었습니다"). [동의 및 액세스 모델](https://developers.anpheros.com/ko/guides/consent)을 참조하십시오.

## 프로비넌스(Provenance)를 유용하게 만드는 규칙

1.  **항상 작성자 유형을 설정하십시오.** 필드 하나만 사용하며, 레코드에서 가장 중요한 레이블입니다.
2.  **사람이 작성한 경우 해당 사람의 이름을 지정하십시오.** 임상 직원의 경우 `X-Anpheros-Acting-As`을 사용하십시오.
3.  **소스 시스템의 이름을 지정하고**, 소스 자체 ID가 있는 경우 해당 ID를 origin id로 전달하십시오.
4.  **삭제 후 다시 생성하는 대신 업데이트하여 수정하십시오.** 업데이트는 이전 값과 새 값 간의 연결을 유지합니다.
5.  **AI 출력은 `ai`로 레이블을 지정하십시오.** 모델이 문서에서 추출한 값도 포함됩니다. 문서에서 파생된 값은 `derived_from`를 사용하여 문서로 다시 연결할 수도 있습니다.

## 자주 묻는 질문

### 의료 분야에서 데이터 출처(provenance)란 무엇인가요?
건강 데이터의 문서화된 출처 및 기록으로, 누가, 누구를 대신하여, 어떤 시스템에서, 언제 생성하거나 변경했는지를 나타냅니다. HL7 FHIR에서는 `Provenance` 리소스로 표현되며, 이는 설명하는 리소스의 정확한 버전을 가리킵니다.

### 출처(provenance)와 감사 로그(audit log)는 같은 것인가요?
아닙니다. 출처는 데이터를 설명합니다: 누가 각 버전을 작성했는지. 감사 로그는 접근을 설명합니다: 누가 무엇을 언제, 어떤 동의 하에 읽거나 썼는지. Anpheros는 둘 다 유지합니다. 환자는 자신의 기록에 연결된 모든 애플리케이션에 대한 접근 로그를 볼 수 있습니다.

### 직접 출처(Provenance) 리소스를 작성할 수 있나요?
Anpheros는 모든 생성, 업데이트 및 삭제에 대해 하나씩 작성하므로 일반적으로 직접 작성할 필요는 없습니다. 더 정확하게 하려면 위의 헤더를 사용하십시오. 클라이언트가 제공하는 출처는 단일 환자의 리소스만 대상으로 해야 합니다.

## 관련 자료

- [동의 및 액세스 모델](https://developers.anpheros.com/ko/guides/consent)
- [FHIR 백엔드와 클리닉 시스템 통합 방법](https://developers.anpheros.com/ko/guides/integrate-clinic-systems-fhir)
- [의료 데이터 정규화 방법](https://developers.anpheros.com/ko/guides/normalize-medical-data)
- [의료 데이터 상호 운용성](https://developers.anpheros.com/ko/guides/interoperability)
- [보안, 개인 정보 보호 및 데이터 상주](https://developers.anpheros.com/ko/guides/security)
