# 患者模块说明(`src/patients`) ## 1. 目标 - B 端:按组织与角色范围查询患者(强依赖 `hospitalId`)。 - C 端:按 `phone + idCardHash` 做跨院聚合查询。 ## 2. B 端可见性 - `DOCTOR`:仅可查自己名下患者 - `LEADER`:可查本组医生名下患者(按医生当前 `groupId` 反查) - `DIRECTOR`:可查本科室医生名下患者(按医生当前 `departmentId` 反查) - `HOSPITAL_ADMIN`:可查本院全部患者 - `SYSTEM_ADMIN`:需显式传入目标 `hospitalId` ## 2.1 B 端 CRUD - `GET /b/patients`:按角色查询可见患者 - `GET /b/patients/doctors`:查询当前角色可见的医生候选(用于患者表单) - `POST /b/patients`:创建患者 - `GET /b/patients/:id`:查询患者详情 - `PATCH /b/patients/:id`:更新患者 - `DELETE /b/patients/:id`:删除患者(若存在关联设备返回 409) 说明: 患者表只绑定 `doctorId + hospitalId`,不直接绑定小组/科室。医生调组或调科后, 可见范围会按医生当前组织归属自动变化,无需迁移患者数据。 ## 3. C 端生命周期聚合 接口:`GET /c/patients/lifecycle?phone=...&idCardHash=...` 查询策略: 1. 不做医院隔离(跨租户) 2. 双字段精确匹配 `phone + idCardHash` 3. 关联查询 `Patient -> Device -> TaskItem -> Task` 4. 返回扁平生命周期列表(按 `Task.createdAt DESC`) ## 4. 响应结构 全部接口统一返回: - 成功:`{ code: 0, msg: "成功", data: ... }` - 失败:`{ code: x, msg: "中文错误", data: null }`