# 医疗健康记录

医疗健康记录是本地记忆的一种结构化模板，用于整理就诊、检查检验、用药、疫苗与复诊资料。它沿用本机加密、附件、编辑、搜索与转出机制，内容由用户输入和确认。

## 模型与字段

手动选择固定模板时，两端使用稳定类型标识 `health`。iOS 在 `MemoryKind.health` 中定义字段，Android 在 `MemoryTemplates` 中定义对应模板，八个字段 ID 保持一致。iOS 若应用识别生成的医疗 schema，编辑器会以 `kind=note` 加 `generatedSchema` 保存主题与固定字段；程序不能仅按 kind=health 判断所有医疗主题。

| 字段 ID | 显示名称 | 输入与限制 |
| --- | --- | --- |
| `healthRecordType` | 记录类型 | 就诊、检查检验、用药、疫苗接种、其他 |
| `healthSubject` | 记录对象 | 文本，最多 200 字符 |
| `healthRecordDate` | 记录日期 | 可选日期 |
| `medicalInstitution` | 医疗机构 | 文本，最多 200 字符 |
| `departmentDoctor` | 科室与医生 | 文本，最多 200 字符 |
| `medicalResult` | 诊断／检查结果 | 多行文本，最多 2,000 字符 |
| `medicationInstructions` | 用药与医嘱 | 多行文本，最多 2,000 字符 |
| `followUpOn` | 复诊日期 | 可选日期 |

标题、正文和附件仍是独立内容：标题最多 80 字符，正文最多 20,000 字符；单附件最多 20 MiB，每条最多 20 个、合计 50 MiB。日期按明确格式保存，未选择日期时保持为空，选择模板不会自动把当天写成记录或复诊日期。

## 输入、保存与检索

用户进入“记忆”后新建或编辑记录，选择“医疗健康记录”，填写所需字段并添加图片或文件，再明确保存。字段均可留空；仅选中模板不会生成空记录。长文本编辑器保留换行；缩写、检验指标名称和英文原文按输入保存，不进行语义改写。

iOS 将字段放入 `MemoryEntry.fields`，保存时仅接受模板允许的字段 ID，并清理首尾空白、执行长度限制。Android 将字段放入记录 JSON，同主题编辑会替换可见字段，同时保留未展示的旧键和未知字段，防止编辑新表单时丢失历史内容。两端都沿用记忆加密存储；加密失败或原库无法读取时禁止覆盖，见[本地记忆](https://document.thestarline.cn/app/local-memory.md)。

详情页展示已填写字段，列表可用前两项有效字段形成摘要。搜索可命中医疗机构、医生、记录对象、结果、医嘱、日期、正文和附件名；它不会分析附件中的检查内容，也不会自动从图片提取指标。

## 本机推荐的约束

输入出现“医疗、就诊、检查报告、用药、复诊”等关键词时，客户端可以推荐健康模板。iOS 对明确人类医疗输入直接返回固定健康字段，不调用系统模型生成新的诊断选项；Android 使用本机关键词匹配。宠物与疫苗词共同出现时仍优先进入宠物接种字段，英文动物匹配采用单词边界，避免把其他单词误识别为猫或狗。

推荐只决定记录类型与可填写结构，不推断诊断、处方、药量或用户尚未提供的信息。用户仍需确认模板，并按原始资料填写。

## 编辑、搜索与关联规则

每条记录以 UUID 区分，不以医院、姓名或日期作为唯一键。同一对象在同一天可有多条独立记录，保存不会自动合并；更改记录对象或机构不会创建另一位“患者档案”。当前没有患者实体、医院目录关联、药品知识库、检验参考值模型，也没有记录之间的关系索引。附件只按附件 ID 关联该条记忆，不会自动解释为某项检验。

iOS 保存时把同 ID 的旧记录替换为更新后的记录并移到列表前端，保留 createdAt，更新 updatedAt；Android 修改已有 JSON 保持当前列表位置，新建插到前面。两端都能在列表显示字段摘要，但摘要只取已填写字段中的前两项，不是按医学重要性排序。未显示在摘要中的医嘱仍可在详情和搜索中访问。

例如合成检验值“TSH 2.0; ALT 30”会作为文本保存，大小写或标点不会被改为医学解释；字段值首尾空白可被清理，内部换行保留。普通搜索使用字符串匹配，多个空白分词须全部命中但可以分布在不同字段；搜“机构名 检查”并不保证两词位于同一个字段。日期字段可按其原始格式被匹配，不能把关键词搜索结果称为临床全文分析。

删除正文、清空某个可见字段、移除附件与删除整条记录是不同操作。Android 同主题编辑会明确移除已清空的可见字段，保留未展示旧键；iOS 按当前允许字段重新保存。删除整条记忆先更新索引，再清理其文件，两端的清理失败策略不同，不能承诺闪存安全擦除或撤回已经转出的明文副本。

## 扩展方式

新增医疗字段时应同步更新两端模板、展示、搜索和字段长度规则，保持已有 ID 稳定；新类型不能覆盖旧记录。若计划引入 OCR、提醒、健康平台或云端能力，需要分别设计用户授权、数据来源、删除和失败恢复路径，不能仅增加一个日期字段就宣称已经支持提醒。

## 当前范围与验证

当前实现不包含自动复诊通知、医院系统对接、HealthKit、Health Connect、云端病历同步或自动医学判断；复诊日期只是可选记录值。记忆转出需走账号许可流程，输出包含原文与附件的明文 JSON，详见[认证](https://document.thestarline.cn/app/authentication.md)和[安全与隐私](https://document.thestarline.cn/app/security-and-privacy.md)。

仓库中 iOS 存储测试覆盖医疗长字段截断、重开、编辑、附件加密及空记录；Android 单元和设备测试包含固定字段、多行文本、临床缩写、搜索、旧字段保留与加密附件。测试代码存在不等于本次已执行通过：本篇编写未运行构建、模拟器或真实医疗数据。回归应使用虚构资料，并按[测试](https://document.thestarline.cn/app/testing.md)记录当前设备和结果。
