# 동의 및 접근 모델

> 누가 무엇을 보는지: 프로젝트 격리, 쌍별 ID, 권한 부여, 쓰기 소유권, 출처 및 환자가 접근 권한이 있는 모든 애플리케이션에 대해 보는 내용.

Source: https://developers.anpheros.com/ko/guides/consent

**규칙:** 환자의 동의 하에 조직은 다른 진료소에서 작성한 내용을 포함하여 전체 기록을 볼 수 있지만, 자신이 작성한 내용만 변경하거나 삭제할 수 있습니다. 모든 리소스의 모든 버전은 해당 리소스를 작성한 프로젝트와 해당 프로젝트가 작성된 조직을 기록합니다.

## 누가 무엇을 볼 수 있나요
- **프로젝트** (API 키)는 자신이 생성한 환자를 볼 수 있습니다. **권한 부여** (OAuth 토큰) 하에서 애플리케이션은 부여된 범위와 카테고리 필터로 제한되어, 모든 작성자에 걸쳐 정확히 하나의 환자만 볼 수 있습니다. 그 외의 모든 것은 404를 반환하며, 절대 403을 반환하지 않으므로 ID를 추측할 수 없습니다.
- **쌍별 ID:** 각 프로젝트는 동일한 사람에 대해 자체 ID를 받습니다. 내부 ID는 플랫폼을 벗어나지 않습니다. 범위 외부의 환자에 대한 참조는 프로젝트별 불투명 토큰으로 마스킹됩니다.
- **디렉토리** (Organization, Practitioner, PractitionerRole): 참조가 해결되도록 ID별로 전체 영역에서 읽을 수 있습니다. 프로젝트 내에서만 검색할 수 있으며, 자신의 것일 때만 `X-Anpheros-Acting-As` / `X-Anpheros-On-Behalf-Of`로 사용할 수 있습니다.
- **샌드박스와 프로덕션**은 별도의 데이터베이스입니다. 샌드박스 키는 실제 환자에게 물리적으로 접근할 수 없습니다.

## 작성 및 소유권
- 모든 리소스 버전에 대한 `project_id` = 작성자. 다른 프로젝트에서 업데이트/삭제 시 → 403 오류와 함께 설명이 제공됩니다. 대신 자체 리소스를 작성하십시오.
- `Provenance.agent.onBehalfOf` = 작성 시점의 클리닉/조직: `X-Anpheros-On-Behalf-Of`, 그렇지 않으면 활동 중인 PractitionerRole의 조직, 그렇지 않으면 프로젝트의 조직입니다.
- 모든 쓰기는 Provenance 리소스와 감사 행(누가, 무엇을, 언제, 어떤 권한으로, 어떤 애플리케이션으로, 어떤 소스 지문으로)을 생성합니다.

## 환자가 보는 내용
`/me/patients/{id}/grants`은 접근 권한이 있는 모든 애플리케이션, 해당 범위 및 만료일을 나열합니다. `…/access-log`은 각 읽기 또는 쓰기 작업에 대한 정보를 나열합니다. 이는 동의 **및** 프로젝트 자체 키를 기반으로 합니다. 철회는 다음 요청 시 적용되며, 애플리케이션은 다시 새로고침할 수 없습니다.
`format=fhir`을 사용하면 접근 로그가 FHIR R4 `AuditEvent` 리소스의 번들로 반환됩니다. 이는 IHE Basic Audit Log Patterns(유형 `rest`, 하위 유형으로서의 상호작용, 에이전트로서의 애플리케이션 및 이를 통해 작동하는 사람, 엔티티로서의 환자 및 리소스, 임상 데이터 없음)에 따라 구성되므로 다른 시스템에서 환자의 기록에 누가 접근했는지에 대한 환자의 뷰로 병합할 수 있습니다.

각 Provenance 리소스가 기록하는 내용 및 설정 방법: [의료 데이터 출처 설명](https://developers.anpheros.com/ko/guides/medical-data-provenance).

## SMART Health Links (QR 또는 링크로 공유)

사용자는 중간 애플리케이션 없이 자신의 기록을 공유할 수 있습니다. `POST /me/patients/{id}/shl`은 **응급** 서브셋(알레르기, 약물, 문제, 예방 접종 — 결과 또는 이력 없음) 또는 **전체** International Patient Summary에 대한 [SMART Health Link](https://hl7.org/fhir/uv/smart-health-cards-and-links/)를 생성하며, 선택적으로 암호와 만료일을 설정할 수 있습니다. 응답에는 `shlink:/…` URI(QR 코드용)와 `/shl/view`의 뷰어 주소가 포함되어 있으며, 이는 모든 브라우저에서 열립니다. 스캔하는 사람은 누구나 매니페스트 URL에 게시하고 링크 내의 키로 암호화된 JWE(`dir` + `A256GCM`) 형식으로 요약 정보를 받습니다. 모든 SMART Health Link 리더가 작동합니다.

- 콘텐츠는 열릴 때마다 생성됩니다(플래그 `L`, 상태 `can-change`). 따라서 휴대폰에 보관된 카드는 최신 상태를 유지합니다.
- 암호(플래그 `P`)는 서버에서 확인됩니다. 10번의 잘못된 시도 후 링크는 작동을 멈춥니다.
- `GET /me/patients/{id}/shl`는 각 링크가 얼마나 자주, 언제 열렸는지 목록을 제공하며, `…/shl/{link}/revoke`은 한 번에 하나의 링크를 비활성화합니다. 모든 열람은 액세스 로그에 기록됩니다.
- 사용자의 내부 ID는 플랫폼을 벗어나지 않습니다. 문서는 링크의 가명으로 사용자를 지칭합니다.

## AI 에이전트가 제안하고, 사람이 결정합니다

사람의 동의 하에, AI 에이전트(예: MCP를 통해 연결된 어시스턴트와 같은 에이전트로 등록된 애플리케이션)의 쓰기 또는 `author_type` `ai`를 사용한 쓰기는 즉시 적용되지 않습니다. 플랫폼은 이를 검증하고 제안 ID(헤더 `Anpheros-Proposal`)와 함께 `202 Accepted`로 응답합니다. 레코드에는 아무런 변경도 없습니다. 사람은 `GET /me/patients/{id}/proposals`에서 해당 제안이 무엇인지, 어떤 애플리케이션이 보냈는지 확인하고 수락하거나 거부합니다(`…/proposals/{proposal}/accept` 또는 `…/reject`). 수락된 제안은 보낸 그대로 기록되며, AI 작성으로 표시됩니다(HL7 AI 투명성). 레코드를 볼 수 있는 프로젝트는 얇은 `proposal.created` 웹훅을 받습니다. 프로젝트 자체 키를 사용하여 프로젝트가 생성한 레코드에 작성하는 것은 보류되지 않습니다.
