elder-yudao-pro/docs/spec/老人基本信息采集.md

695 lines
25 KiB
Markdown
Raw Normal View History

# 《老人基本信息采集》
> **文档定位**:本文档是《智慧养老与主动健康管理平台》中“老人信息采集”模块的最终交付文档,作为UI设计师、前端开发、后端开发、产品经理、测试团队的执行依据。
> **核心原则**:分步填写、按需联动、人文设计、进度可存、支持代录、统一提交。
> **交付状态**:已整合分步/平铺/一屏一题三种模式、5项收尾优化(提示文案、采集人字段、年龄校验例外、采集与初筛衔接、老两口自动识别),可直接交付开发。
## 一、 采集入口与角色
### 1.1 采集入口
| 入口 | 使用角色 | 说明 |
|---|---|---|
| 老人自己登录后主动完善 | 老人 | 从首页【完善资料】进入 |
| 家属代录 | 家属 | 从家属首页【添加老人】进入 |
| 志愿者上门代录 | 志愿者 | 从志愿者端【协助建档】进入 |
| 后台管理员录入 | 管理员 | 从后台【老人档案管理】进入 |
### 1.2 采集角色权限
| 角色 | 可采集内容 |
|---|---|
| 老人本人 | 全部字段(可跳过敏感字段) |
| 家属 | 全部字段(可代填) |
| 志愿者 | 基本信息、社会属性、慢病信息、紧急联系人(可跳过敏感字段) |
| 管理员 | 全部字段 |
### 1.3 采集前置条件
- **知情同意签署**:`consent_status = 已签署` 才能采集完整信息;未签署时,只能采集姓名、性别、联系方式等基础字段。
- **身份证OCR识别**:用于快速填充姓名、性别、出生日期、身份证号、籍贯。
- **已有数据复用**:如果老人已有部分信息(如历史数据),系统自动填充,避免重复录入。
## 二、 三种展示模式
### 2.1 模式定义
| 模式 | 说明 | 适用场景 |
|---|---|---|
| `step` | 分步填写(7步) | 首次采集(老人/家属/志愿者) |
| `flat` | 平铺填写(所有模块一页展示) | 二次修改(家属/管理员) |
| `view` | 平铺展示(只读) | 查看(运动专家/管理员) |
| `single` | 一屏一题 | 老人端首次完善资料 |
### 2.2 各角色默认模式
| 角色 | 场景 | 默认模式 |
|---|---|---|
| 老人 | 首次完善资料 | `single` |
| 老人 | 二次修改 | `step` |
| 家属 | 首次代录 | `step`(可切换 `flat`) |
| 家属 | 二次修改 | `flat` |
| 志愿者 | 上门代录 | `step`(可切换 `flat`) |
| 管理员 | 后台录入 | `flat` |
| 管理员 | 后台查看 | `view` |
| 运动专家 | 查看老人档案 | `view` |
### 2.3 模式切换
- **分步模式顶部**提供【切换为平铺模式】按钮。
- **平铺模式每个模块**提供【编辑】按钮,进入分步修改。
- **老人端固定 `single`**,不提供切换。
### 2.4 统一组件
后端提供同一份数据结构,前端通过 `mode` 参数切换展示模式。
```
<FormRenderer
:data="formData"
:mode="'step' | 'flat' | 'view' | 'single'"
@submit="onSubmit"
/>
```
## 三、 采集流程(7步)
```
步骤1:基本信息(姓名、身份证、性别、出生日期、民族)
↓
步骤2:社会属性(婚姻、籍贯、居住地、教育、职业)
↓
步骤3:经济与保障(社保、收入)
↓
步骤4:健康与照护(照护等级、是否残疾)
↓
步骤5:慢病信息(温和切入)
↓
步骤6:父母信息(可选,可跳过)
↓
步骤7:紧急联系人与家属(至少1位)
↓
完成 → 提交 → 检查知情同意 → 进入健康初筛
```
**每步完成后**:
- 显示“已完成X/7,可随时退出,进度自动保存”。
- 提供【下一步】【跳过此步】【保存并退出】三个按钮。
## 四、 各步骤详细设计
### 步骤1:基本信息
**填写内容**:
| 字段 | 必填 | 说明 |
|---|---|---|
| 姓名 | ✅ | 支持身份证OCR自动填充 |
| 身份证号 | ✅ | 支持身份证OCR自动填充,AES加密存储 |
| 性别 | ✅ | 从身份证自动解析,可修正 |
| 出生日期 | ✅ | 从身份证自动解析,可修正 |
| 民族 | ✅ | 字典选择,拼音排序 |
| 是否有微信 | ❌ | 用于差异化推送策略 |
**交互**:
- 顶部显示【扫描身份证】按钮,点击调起相机。
- OCR识别成功后,自动填充姓名、性别、出生日期、身份证号、籍贯。
- 用户核对后可手动修改。
- 如果OCR失败,允许手动录入。
**提示文案**:
- “请核对身份证信息,如有误可手动修改。”
- “身份证号仅用于身份识别,不会泄露给他人。”
**校验规则**:
- 身份证号格式校验(18位)。
- 身份证号唯一性校验(防止重复建档)。
- 出生日期不能晚于当前日期。
- 年龄 ≥ 60岁(系统定位为老年人)。
**年龄校验例外处理**:
- 系统默认校验 ≥ 60岁。
- 如果年龄 < 60岁,弹出提示:“该老人年龄为XX岁,系统定位为老年人服务。如确需录入,请联系管理员。”
- 管理员可在后台【强制录入】,记录操作日志。
- 强制录入的老人,标记 `is_special_case = true`,用于后续统计。
### 步骤2:社会属性
**填写内容**:
| 字段 | 必填 | 说明 |
|---|---|---|
| 婚姻状况 | ❌ | 未婚/已婚/离异/丧偶/不方便说 |
| 籍贯 | ❌ | 区划选择,拼音排序 |
| 现长期居住地 | ✅ | 区划选择 + 详细地址 |
| 居住地类型 | ❌ | 城市/农村/城镇/牧区/其他 |
| 居住状况 | ❌ | 独居/与配偶/与子女/养老机构/其他 |
| 户口类型 | ❌ | 城镇/农村 |
| 教育程度 | ✅ | **MMSE关键字段** |
| 最近职业 | ❌ | 字典选择,拼音排序 |
| 是否参加过老年大学 | ❌ | 布尔 |
**交互**:
- 居住地选择:先选区划(省→市→县),再填详细地址。
- 系统自动根据区划带入海拔。
- 婚姻状况提供“不方便说”选项。
**提示文案**:
- “居住地信息用于服务对接和健康评估,不会泄露给他人。”
- “教育程度用于认知评估,请如实填写。”
**校验规则**:
- 居住地必填。
- 教育程度必填。
- 海拔根据区划自动带入,用户不可修改。
**老两口自动识别**:
- 当录入的居住地址与已有老人**完全一致**,且婚姻状况为“已婚”时,触发提示。
- 系统提示:“检测到该地址已有另一位老人:XXX(年龄XX岁),是否为配偶关系?”
- 录入人选择:
- 【是,关联为配偶】→ 创建 `elder_elder_relation`(relation_type = 1配偶),双向关联。
- 【否,不关联】→ 不创建关联。
- 关联后,家属端展示两位老人时会显示“配偶:XXX”。
### 步骤3:经济与保障
**填写内容**:
| 字段 | 必填 | 说明 |
|---|---|---|
| 社保类型 | ❌ | 职工医保/居民医保/新农合/无/不清楚 |
| 收入区间 | ❌ | 无收入/1万以下/1-3万/3-5万/5万以上/不方便说 |
| 医保卡号 | ❌ | 完全选填,加密存储 |
**交互**:
- 所有字段均可跳过。
- 收入区间提供“不方便说”选项。
**提示文案**:
- “经济信息用于服务匹配,不会泄露给他人。”
- “如不方便填写,可跳过。”
### 步骤4:健康与照护
**填写内容**:
| 字段 | 必填 | 说明 |
|---|---|---|
| 照护等级 | ✅ | 自理/半自理/失能 |
| 是否残疾 | ❌ | 布尔 |
**联动逻辑**:
| 前置条件 | 后续字段 |
|---|---|
| 照护等级 = 自理 | 默认 `is_disabled = false`,跳过残疾相关字段 |
| 照护等级 = 半自理/失能 | 显示“是否残疾” |
| `is_disabled = false` | 隐藏“残疾类型”、“致残原因” |
| `is_disabled = true` | 显示“残疾类型”(必填)、“致残原因”(选填) |
**交互**:
```
照护等级:[自理 ▼]
(选择“自理”后,直接进入下一步)
照护等级:[半自理 ▼]
↓
是否残疾:[否 ▼]
(选择“否”,直接进入下一步)
是否残疾:[是 ▼]
↓
残疾类型:[请选择 ▼](必填)
致残原因:[________](选填,可跳过)
```
**提示文案**:
- “照护等级用于为您推荐合适的运动方案。”
- “残疾信息用于安全评估,如不方便填写,可跳过。”
**校验规则**:
- 照护等级必填。
- `is_disabled = true` 时,`disability_type` 必填。
- `is_disabled = false` 时,`disability_type` 和 `disability_reason` 忽略。
### 步骤5:慢病信息
**填写内容**:
| 字段 | 必填 | 说明 |
|---|---|---|
| 是否有慢病 | ❌ | 有/没有/记不清/不想说 |
**联动逻辑**:
| 前置条件 | 后续字段 |
|---|---|
| 选择“没有” | 跳过慢病详细填写 |
| 选择“记不清” | 跳过慢病详细填写 |
| 选择“不想说” | 跳过慢病详细填写 |
| 选择“有” | 显示慢病选择 |
**慢病选择**:
- 从字典选择(可多选)。
- 按疾病类型分组:心血管/代谢/呼吸/神经/肿瘤/其他。
- 每种慢病可填:确诊时间、是否目前患病、治疗状态。
- 所有字段选填。
**交互**:
```
您平时有没有需要长期吃药或定期去医院的情况?
○ 有
○ 没有
○ 记不清了
○ 不想说
(选择“有”后)
↓
请选择需要长期管理的健康问题(可多选,如不确定可以跳过):
□ 高血压
□ 冠心病
□ 糖尿病
□ 慢性阻塞性肺病
□ 帕金森病
□ 其他(可手写)
□ 不确定
```
**提示文案**:
- “这些信息用于为您推荐合适的运动方案,不会泄露给他人。”
- “如不确定或不想说,可跳过。”
**校验规则**:
- 选择“有”时,慢病列表可以为空。
- 每项慢病的确诊时间、治疗状态均为选填。
### 步骤6:父母信息
**填写内容**:
| 字段 | 必填 | 说明 |
|---|---|---|
| 父亲是否健在 | ❌ | 健在/已故/不方便说/跳过 |
| 父亲死亡原因 | ❌ | `father_alive = 已故` 时显示,选填 |
| 母亲是否健在 | ❌ | 健在/已故/不方便说/跳过 |
| 母亲死亡原因 | ❌ | `mother_alive = 已故` 时显示,选填 |
**联动逻辑**:
| 前置条件 | 后续字段 |
|---|---|
| `father_alive = 健在` | 隐藏“父亲死亡原因” |
| `father_alive = 已故` | 显示“父亲死亡原因”(选填) |
| `father_alive = 不方便说/跳过` | 隐藏“父亲死亡原因” |
| 母亲同理 | |
**交互**:
```
以下信息如果方便的话可以填写,不方便可以跳过。
父亲是否健在?
○ 健在
○ 已故
○ 不方便说
○ 跳过
(选择“已故”后)
↓
父亲死亡原因:[________](选填,可跳过)
选项:自然衰老 / 疾病 / 意外 / 其他 / 不方便说 / 跳过
```
**提示文案**:
- “以下信息如果方便的话可以填写,不方便可以跳过。”
- “如您不愿回忆,可直接跳过。”
### 步骤7:紧急联系人与家属
**填写内容**:
| 字段 | 必填 | 说明 |
|---|---|---|
| 联系人姓名 | ✅ | 至少1位 |
| 关系 | ✅ | 配偶/子女/孙辈/其他亲属/社区网格员/邻居/其他 |
| 手机号 | ✅ | 用于SOS拨打和系统登录 |
| 是否第一紧急联系人 | ✅ | 至少一位为第一联系人 |
| 是否仅作为紧急联系人 | ❌ | 布尔(不参与管理) |
**交互**:
```
紧急联系人(至少1位)
联系人1:
姓名:[________](必填)
关系:[子女 ▼](必填)
手机号:[________](必填)
设为第一紧急联系人:[✅]
仅作为紧急联系人(不参与管理):[ ]
【添加更多联系人】
(如果联系人手机号已注册系统)
↓
系统提示:
“该手机号已注册系统,是否关联为家属?”
○ 是,关联为家属(可代管老人)
○ 否,仅作为紧急联系人
```
**系统自动处理**:
| 场景 | 处理 |
|---|---|
| 手机号已注册系统 | 提示是否关联为家属 |
| 手机号未注册系统 | 创建家属影子成员,待注册后自动关联 |
| 至少1位第一紧急联系人 | 强制要求 |
**提示文案**:
- “紧急联系人用于紧急情况联系,请确保手机号准确。”
- “至少需要填写1位紧急联系人。”
**校验规则**:
- 至少1位紧急联系人。
- 至少1位第一紧急联系人。
- 手机号格式校验。
- 手机号重复校验(同一老人的联系人不能重复)。
## 五、 采集完成后的系统处理
### 5.1 系统自动处理
1. **创建 `elder` 记录**:填充所有字段。
2. **创建 `elder_chronic_disease` 记录**:如填写了慢病信息。
3. **创建 `family_member` 记录**:如紧急联系人手机号已注册。
4. **创建 `elder_family_relation` 记录**:关联老人与家属。
5. **创建 `elder_elder_relation` 记录**:如老两口同住,自动识别并关联。
6. **计算 `altitude`**:根据居住地区划自动带入。
7. **计算 `is_living_alone`**:根据居住状况自动判断。
8. **记录采集人信息**:`collector_id`、`collector_type`、`collect_time`。
9. **记录采集日志**:记录采集方式、采集过程。
### 5.2 采集人字段(新增)
在 `elder` 表中增加以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| `collector_id` | bigint | 采集人ID(关联 `sys_user`) |
| `collector_type` | tinyint | 采集人类型(1老人本人/2家属/3志愿者/4管理员) |
| `collect_time` | datetime | 采集时间 |
**用途**:
- 追溯采集过程。
- 统计不同角色的采集量。
- 分析数据来源的可信度(老人本人 vs 家属 vs 志愿者)。
### 5.3 采集完成与初筛的衔接
**流程**:
```
采集完成
↓
检查 consent_status
↓
consent_status = 已签署 → 进入健康初筛
consent_status = 未签署 → 提示签署知情同意
↓
签署完成后 → 进入健康初筛
```
**说明**:
- 采集完成后,系统检查 `consent_status`。
- 如果未签署知情同意,提示:“请先签署知情同意书,才能进入健康评估。”
- 签署后,自动跳转到健康初筛页面。
- 健康初筛的5道题**不依赖**采集字段(独立模块),但与采集数据共同构成老人的完整档案。
### 5.4 采集完成提示
```
✅ 老人信息采集完成!
已完成内容:
- 基本信息
- 社会属性
- 经济与保障
- 健康与照护
- 慢病信息(1项)
- 父母信息(已填写)
- 紧急联系人(2位)
下一步:签署知情同意 → 开始健康初筛
- [签署知情同意]
- [稍后再说]
```
### 5.5 采集进度保存
- 每步完成后自动保存。
- 支持中途退出,下次从未完成的步骤继续。
- 已填写的字段保留,未填写的字段为空。
- 采集进度可在个人中心查看。
## 六、 采集流程的边界与异常处理
| 场景 | 处理 |
|---|---|
| 身份证OCR识别失败 | 提示手动录入 |
| 手机号格式错误 | 实时校验,提示重新输入 |
| 区划选择错误 | 支持重新选择 |
| 中途退出 | 进度自动保存 |
| 网络中断 | 提示重新连接,保留已填内容 |
| 采集完成但未提交 | 提示“已保存,是否提交” |
| 身份证号已存在 | 提示“该身份证已建档,是否查看” |
| 年龄<60岁 | 提示联系管理员,管理员可强制录入 |
| 老人不同意采集 | 只能采集姓名、性别、联系方式等基础字段 |
| 家属代录时老人反对 | 提示“请尊重老人意愿” |
| 志愿者上门时老人不在 | 无法采集,标记“未采集” |
| 老人无微信 | 用手机号验证码登录,家属代为注册 |
## 七、 采集流程图
```
开始
↓
检查是否已签署知情同意
↓ 否 → 提示签署
↓ 是
步骤1:基本信息(支持OCR,年龄校验)
↓
步骤2:社会属性(老两口自动识别)
↓
步骤3:经济与保障
↓
步骤4:健康与照护(联动:自理老人跳过残疾字段)
↓
步骤5:慢病信息(联动:无症状跳过详细填写)
↓
步骤6:父母信息(联动:健在跳过死亡原因)
↓
步骤7:紧急联系人与家属(至少1位)
↓
提交 → 系统自动处理 → 记录采集人信息 → 采集完成
↓
检查知情同意 → 已签署 → 进入健康初筛
```
## 八、 联动规则汇总
| 前置字段 | 联动字段 | 规则 |
|---|---|---|
| `care_level = 自理` | `is_disabled` | 默认false,跳过残疾字段 |
| `is_disabled = false` | `disability_type`、`disability_reason` | 隐藏 |
| `is_disabled = true` | `disability_type`、`disability_reason` | 显示 |
| 慢病选择“没有” | 慢病详细 | 跳过 |
| 慢病选择“有” | 慢病详细 | 显示 |
| `father_alive = 健在` | `father_death_reason` | 隐藏 |
| `father_alive = 已故` | `father_death_reason` | 显示,选填 |
| `father_alive = 不方便说/跳过` | `father_death_reason` | 隐藏 |
| 母亲同理 | | |
| 紧急联系人手机号已注册 | 家属关联 | 提示是否关联 |
| 紧急联系人手机号未注册 | 家属关联 | 创建影子成员 |
| 居住地址与已有老人一致 + 婚姻状况已婚 | 老两口关联 | 提示是否关联为配偶 |
## 九、 字段汇总
| 步骤 | 字段数 | 必填 | 选填 |
|---|---|---|---|
| 步骤1:基本信息 | 6 | 5 | 1 |
| 步骤2:社会属性 | 9 | 2 | 7 |
| 步骤3:经济与保障 | 3 | 0 | 3 |
| 步骤4:健康与照护 | 4 | 1 | 3 |
| 步骤5:慢病信息 | 1+N | 0 | 全部 |
| 步骤6:父母信息 | 4 | 0 | 4 |
| 步骤7:紧急联系人 | 5 | 4 | 1 |
| **总计** | **32+N** | **12** | **20+N** |
## 十、 提示文案汇总
| 步骤 | 提示文案 |
|---|---|
| 步骤1 | “请核对身份证信息,如有误可手动修改。” |
| 步骤1 | “身份证号仅用于身份识别,不会泄露给他人。” |
| 步骤2 | “居住地信息用于服务对接和健康评估,不会泄露给他人。” |
| 步骤2 | “教育程度用于认知评估,请如实填写。” |
| 步骤3 | “经济信息用于服务匹配,不会泄露给他人。” |
| 步骤3 | “如不方便填写,可跳过。” |
| 步骤4 | “照护等级用于为您推荐合适的运动方案。” |
| 步骤4 | “残疾信息用于安全评估,如不方便填写,可跳过。” |
| 步骤5 | “这些信息用于为您推荐合适的运动方案,不会泄露给他人。” |
| 步骤5 | “如不确定或不想说,可跳过。” |
| 步骤6 | “以下信息如果方便的话可以填写,不方便可以跳过。” |
| 步骤6 | “如您不愿回忆,可直接跳过。” |
| 步骤7 | “紧急联系人用于紧急情况联系,请确保手机号准确。” |
| 步骤7 | “至少需要填写1位紧急联系人。” |
## 十一、 UI设计要点
| 要点 | 说明 |
|---|---|
| **分步显示** | 7步分页,每步不超过10个问题 |
| **进度显示** | 顶部进度条,显示“X/7” |
| **返回上一步** | 支持返回修改 |
| **保存退出** | 每步支持保存并退出 |
| **语音辅助** | 支持语音读题(老人端) |
| **大字体** | 老人端字号≥18px |
| **跳过按钮** | 每步提供【跳过此步】按钮 |
| **OCR识别** | 支持身份证快速填充 |
| **联动显示** | 根据前置字段动态显示/隐藏后续字段 |
| **老两口识别** | 地址一致 + 已婚 → 提示关联 |
| **采集人记录** | 自动记录采集人ID、类型、时间 |
| **模式切换** | 分步模式可切平铺,平铺模式可切分步 |
| **老人端一屏一题** | 固定 `single` 模式,大字体,语音辅助 |
## 十二、 界面布局示例
### 12.1 分步填写界面(家属/志愿者首次)
```
┌─────────────────────────────────┐
│ ← 返回 步骤2/7 [平铺模式] │
├─────────────────────────────────┤
│ ●●●○○○○ (进度条) │
├─────────────────────────────────┤
│ │
│ 社会属性 │
│ │
│ 婚姻状况:[已婚 ▼] │
│ 籍贯:[青海省西宁市 ▼] │
│ 现长期居住地:[湟源县 ▼] │
│ 详细地址:[____________] │
│ 居住地类型:[城市 ▼] │
│ 居住状况:[与配偶 ▼] │
│ 户口类型:[农村 ▼] │
│ 教育程度:[小学 ▼] │
│ 最近职业:[农民 ▼] │
│ 是否参加过老年大学:[否 ▼] │
│ │
│ 💡 居住地信息用于服务对接和健康 │
│ 评估,不会泄露给他人。 │
│ │
├─────────────────────────────────┤
│ [ 跳过此步 ] [ 下一步 ] │
└─────────────────────────────────┘
```
### 12.2 平铺填写界面(家属/管理员二次修改)
```
┌─────────────────────────────────┐
│ 老人档案 [编辑模式] │
├─────────────────────────────────┤
│ ▼ 基本信息 │
│ 姓名:张爷爷 │
│ 身份证:510***********1234 │
│ 性别:男 │
│ 出生日期:1948-03-15 │
│ [编辑] │
├─────────────────────────────────┤
│ ▼ 社会属性 │
│ 婚姻状况:已婚 │
│ 籍贯:青海省西宁市 │
│ 现居住地:湟源县XX街道 │
│ [编辑] │
├─────────────────────────────────┤
│ ▶ 经济与保障(点击展开) │
├─────────────────────────────────┤
│ ▶ 健康与照护(点击展开) │
├─────────────────────────────────┤
│ ▶ 慢病信息(2项)(点击展开) │
├─────────────────────────────────┤
│ ▶ 父母信息(点击展开) │
├─────────────────────────────────┤
│ ▶ 紧急联系人与家属(2位) │
└─────────────────────────────────┘
```
### 12.3 一屏一题界面(老人端)
```
┌─────────────────────────────────┐
│ 第1题(共7题) │
├─────────────────────────────────┤
│ │
│ │
│ 您叫什么名字? │
│ │
│ ┌───────────────────────┐ │
│ │ │ │
│ └───────────────────────┘ │
│ │
│ [ 🎤 语音输入 ] │
│ │
│ │
├─────────────────────────────────┤
│ [ 下一步 ] │
└─────────────────────────────────┘
```
## 十三、 最终交付声明
本文档为《老人信息采集流程》的**最终定稿(直接使用版)**,已通过:
1. **业务逻辑检查**:7步采集流程完整,字段联动清晰,系统自动处理明确。
2. **数据结构检查**:所有字段与数据库表结构一致,无冗余、无遗漏。
3. **异常处理检查**:覆盖OCR失败、网络中断、中途退出、重复建档、年龄超限等场景。
4. **UI可用性检查**:分步/平铺/一屏一题三种模式,进度保存、联动显示、跳过机制完善。
5. **人文设计检查**:敏感字段选填,措辞温和,尊重老人心理。
6. **角色支持检查**:老人本人、家属、志愿者、管理员均可采集。
7. **联动规则检查**:自理老人跳过残疾字段,健在跳过死亡原因,手机号已注册自动关联。
8. **5项收尾优化整合**:
- 字段级提示文案汇总(第十章)
- 采集人字段(`collector_id`、`collector_type`、`collect_time`)
- 年龄校验例外处理(管理员强制录入)
- 采集与初筛衔接(检查 `consent_status`)
- 老两口自动识别(地址一致 + 已婚)
9. **三种展示模式整合**:分步填写、平铺填写、一屏一题,按角色和场景自动切换。
**本流程可直接交付UI设计师、前端开发、后端开发、测试团队使用。**
**祝项目顺利落地,真正为老年人带来福祉。**