# 同意和访问模型

> 谁可以看到什么：项目隔离、成对 ID、授权、写入所有权、出处以及患者可以看到的关于每个有访问权限的应用程序的信息。

Source: https://developers.anpheros.com/zh/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` 资源的 Bundle 返回，其结构遵循 IHE Basic Audit Log Patterns（类型 `rest`，交互作为子类型，应用程序和通过它进行操作的人员作为代理，患者和资源作为实体，不包含临床数据），因此另一个系统可以将其合并到个人对谁访问了其记录的视图中。

每个 Provenance 资源记录的内容及设置方法：[Medical data provenance explained](https://developers.anpheros.com/zh/guides/medical-data-provenance)。

## SMART Health Links (通过 QR 码或链接共享)

用户无需中间应用程序即可共享其记录：`POST /me/patients/{id}/shl` 创建一个
[SMART Health Link](https://hl7.org/fhir/uv/smart-health-cards-and-links/)，用于**紧急**子集（过敏、药物、病史、免疫接种 — 无结果或历史记录）或**完整**的国际患者摘要，并可选择设置密码和有效期。响应会携带 `shlink:/…` URI（用于 QR 码）以及 `/shl/view` 上的查看器地址，该地址会在任何浏览器中打开。扫描者会将信息发布到 manifest 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 Transparency）。可以查看记录的项目将收到一个精简的 `proposal.created` webhook。使用项目自己的密钥对项目创建的记录进行的写入不受此限制。
