436 lines
33 KiB
Markdown
436 lines
33 KiB
Markdown
# 老年健康系统:运动预约、志愿者协助、智能体与摄像头扩展
|
||
|
||
> 更新日期:2026-10-05(Asia/Shanghai)。本文保存用户新增愿景和实现约束,作为旧项目迁移到芋道后的设计上下文。
|
||
|
||
> 历史设计快照:健康身份与基础档案已开始实施;最新确认规则及已完成内容见 [健康业务模块与身份模型](健康业务模块与身份模型.md)。每个账号仅允许一种业务身份,第一版由管理员建号建档,志愿者须审核,家属关联须确认;本文其余设计建议不代表已实现。
|
||
>
|
||
> 文档状态:用户需求已记录;数据模型、状态名、实现阶段是设计建议,尚未写入业务代码。未启动服务、接入设备、大模型、短信或外部呼叫服务。
|
||
>
|
||
> 来源:本次用户对 7 个需求问题的回答;目标模板静态检查。不要把“目标能力”“预留接口”“已经实现”混为一谈。旧系统既有功能仍按此前迁移分析处理。
|
||
|
||
## 1. 用户已经确认的范围
|
||
|
||
### 1.1 场地与多人活动
|
||
|
||
- 需要轻量的场地、人数、设备管理。
|
||
- 允许多个老人一起参加运动。
|
||
- 保留扩展性,但不过度复杂,便于维护。
|
||
- 第一版不需要复杂排班平台、物联网平台、独立微服务或通用资源调度引擎。
|
||
|
||
### 1.2 老人预约与运动提醒
|
||
|
||
- 暂时只允许老人本人发起预约。
|
||
- 老人可以安排想运动的时间,系统应有提醒功能。
|
||
- 需要协助时,系统可自动向志愿者派单。
|
||
- 不是所有运动都需要志愿者协助。
|
||
- 管理员可以设置运动类别是否强制需要协助;部分情况下可由老人自行选择。
|
||
- 未来可以根据年龄、基础病等指标,由大模型/智能体判断是否需要协助。
|
||
- 已确认同时支持自主预约(项目与期望时间)和管理员发布活动场次供老人报名;具体预约时间/时长限制仍待后续确定。
|
||
|
||
### 1.3 志愿者安排
|
||
|
||
- 自动匹配派单与管理员派单都需要支持。
|
||
- 需要根据条件进行智能匹配。
|
||
- 志愿者可以拒单,但拒单次数有限制。
|
||
- 已确认拒单按月限制,每次拒单必须填写理由;具体上限由管理员配置。
|
||
- 拒单理由是否可申请例外、达到上限后的处理、取消/超时是否计入仍需在实施时细化。
|
||
|
||
### 1.4 健康评估与活动建议
|
||
|
||
- 希望通过大模型分析,将健康评估结果与活动关联。
|
||
- 老人可以自由选择运动,也可以接受大模型建议或安排。
|
||
- 预期会使用智能体,不能只做固定页面里的文字聊天。
|
||
- 医学限制、建议适用范围与智能安排的确认方式尚未最终确定。
|
||
|
||
### 1.5 服务过程和投诉
|
||
|
||
- 认可基本流程:提交预约 → 分配志愿者 → 接单 → 到场签到 → 开始运动 → 结束记录。
|
||
- 志愿者可以点击按钮结束服务,类似配送员确认送达。
|
||
- 老人或家属可以投诉异常情况。
|
||
- 不要求将老人/家属确认作为普通服务完成的必经步骤。
|
||
|
||
### 1.6 摄像头与视频
|
||
|
||
- 摄像头固定在场地中,后续接入。
|
||
- 计划输出骨骼信息、动作类型、次数、动作是否标准/动作评分,以及跌倒等异常检测结果。
|
||
- 希望循环保存最近 72 小时视频,超过时间自动清理。
|
||
- 当前需预留接口,识别算法和设备协议尚未确定。
|
||
|
||
### 1.7 安全告警愿景
|
||
|
||
- 检测到异常应通知管理员。
|
||
- 中控页面应有声音和视觉提示。
|
||
- 希望无回应时自动拨打 120,并给家属发短信。
|
||
- “老人是否回应”的判断尚待商榷;回应渠道、超时、复核、自动呼叫渠道均未定。
|
||
- 该愿景不代表目前已有可用的 120 呼叫 API 或接入授权;一期保留能力接口和升级规则,不把号码当成可直接调用的服务。
|
||
|
||
## 2. 本轮追加确认的实施约束
|
||
|
||
| 项目 | 用户确认 | 实施含义 |
|
||
| --- | --- | --- |
|
||
| 第一阶段范围 | 健康档案与评估迁移+运动预约+志愿者派单+提醒,同时预留摄像头和智能体接口 | 一期不要求真实设备/模型接入;原系统核心评估能力需要迁移 |
|
||
| 预约形态 | 自主预约与管理员发布活动场次并存 | 老人可安排个人运动,也可报名多人活动 |
|
||
| 拒单计数周期与理由 | 按月限制,每次必须写理由;次数由管理员配置 | 保存拒单历史和理由,按月份统计,不用按天/周规则 |
|
||
|
||
以上三项已收到用户明确答复,属于确认需求。其他章节具体字段、状态和技术选型仍为设计建议;第 16 节列出尚待细化的事项。
|
||
|
||
## 3. 已探索的芋道模板事实
|
||
|
||
目标源码位置:`C:/Users/Administrator/Desktop/projects/elder-yudao`。
|
||
|
||
- `pom.xml`:`2.0.1-jdk8-snapshot`,Java 8,Spring Boot 2.7.18。
|
||
- `yudao-dependencies/pom.xml`:MyBatis-Plus 3.5.5,Flowable 6.8.0。
|
||
- 根 Maven 构建和 `yudao-server/pom.xml` 当前只接入 system、infra 业务模块;member/bpm/report 等有源码但未加载。
|
||
- 默认 `application.yaml` 选择 local 环境,多租户开启;local HTTP 端口 48080。
|
||
- 当前目录没有前端工程、health 业务模块或 ai 模块。
|
||
- 后台账号与 App 会员是两种主体:`system_users` / `member_user`。
|
||
- Web 框架按 controller.admin/controller.app 包自动添加 `/admin-api` / `/app-api`。
|
||
- system 已有短信、站内信 API,均能区分 admin/member。
|
||
- infra 已有文件配置、文件管理、定时任务和接口日志。
|
||
- framework 已有 WebSocket、Redis、锁/幂等/限流、数据权限和租户隔离。
|
||
|
||
可复用接口的位置:
|
||
|
||
```text
|
||
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/sms/SmsSendApi.java
|
||
sendSingleSmsToAdmin / sendSingleSmsToMember
|
||
|
||
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/notify/NotifyMessageSendApi.java
|
||
sendSingleMessageToAdmin / sendSingleMessageToMember
|
||
|
||
yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/core/handler/JobHandler.java
|
||
execute(String param)
|
||
|
||
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/FileClient.java
|
||
upload / delete / getContent / getPresignedObjectUrl
|
||
```
|
||
|
||
注意:FileClient 的 getPresignedObjectUrl 默认实现是不支持;S3FileClient 的现有实现生成的是 PUT 上传预签名 URL,不能直接当成私有视频 GET 播放签名。实际播放适配、视频流/录像服务需额外核对。
|
||
|
||
## 4. 建议的业务结构:一个健康模块,按职责分包
|
||
|
||
保留 system、infra,启用 member,新增 `yudao-module-health`;是否拆为 api/biz 跟随目标项目现有结构。健康业务分包,不先拆成独立服务:
|
||
|
||
| 包/职责 | 内容 |
|
||
| --- | --- |
|
||
| profile / assessment | 老人档案、志愿者资料、家属关系、问卷、评分、评估结果 |
|
||
| activity / booking | 运动项目、场地、活动场次、预约、报名与人数 |
|
||
| service | 协助工单、志愿者匹配、派单、接单/拒单、签到/开始/结束、投诉 |
|
||
| exercise | 实际运动会话、参与者、运动结果、既有运动记录与汇总 |
|
||
| monitoring | 设备、检测事件、异常、安全告警、中控和录像索引 |
|
||
| notification | 运动提醒、派单提醒、告警升级、渠道发送与重试 |
|
||
| intelligence / integration | 模型分析、智能体工具、摄像头协议适配、外部呼叫适配 |
|
||
|
||
老人和家属采用 member 主体;志愿者初步也用 member 主体加健康业务身份。后台管理员/课题组操作员使用 system 主体。志愿者资质、拒单规则、服务分配属于健康业务,不直接用后台菜单角色来代替。
|
||
|
||
家属发起预约暂不开放,但有效关联且有授权的家属可以查看对应老人服务、接收通知和提交投诉。多租户继续生效;需明确课题组/机构与租户的关系,新业务不能把 tenant_id 都写成默认值。
|
||
|
||
## 5. 预约、活动场次、协助工单和运动会话的关系
|
||
|
||
这四个对象需要分开,才能支持“不需要志愿者”和“多人运动”:
|
||
|
||
| 对象 | 表达的事实 | 示例 |
|
||
| --- | --- | --- |
|
||
| 预约 Booking | 某位老人打算在某时参加某运动 | 老人 A 预约 10 月 8 日 9:00 散步 30 分钟 |
|
||
| 活动场次 ActivityOccurrence | 一个有时间、地点、人数上限的活动安排 | 社区 9:00 八段锦场次,最多 8 人 |
|
||
| 协助工单 ServiceTask | 某活动需要志愿者完成的协助工作 | 协助 9:00 八段锦活动的 3 位需要协助的老人 |
|
||
| 运动会话 ExerciseSession | 运动实际发生的一次过程 | 实际 9:05~9:36;参与者、志愿者、设备和结果 |
|
||
|
||
用户已确认同时支持两种入口;建议底层共用对象:
|
||
|
||
- 自主预约:选择运动、期望开始时间/时长、地点和协助意愿;后台可形成仅本人可见的活动安排。
|
||
- 活动报名:选择管理员已发布的场次;每位老人有独立报名/预约记录,共用场地与场次。
|
||
|
||
不需要协助的预约不创建协助工单,但仍有提醒和运动记录。摄像头可以在没有志愿者时记录运动或发现异常。
|
||
|
||
多人活动初步采用“一个场次一个协助工单,允许多个志愿者岗位/派单记录”,工单关联需要协助的参与老人。场次中不需要协助的老人仍可以参加。具体配置志愿者数量/每人协助人数,先做简单上限配置;未来可拆工单或分组,不先做复杂优化调度。
|
||
|
||
管理员发布场次时可以要求先确认最低志愿者数量才开放报名,或者报名后招募。哪种策略采用由运营流程确认;不能因为创建了工单就认为协助已经落实。
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
Elder[老人选择项目或场次] --> Booking[预约与协助判断]
|
||
Booking --> Reminder[运动提醒]
|
||
Booking --> Need{需要协助}
|
||
Need -->|否| Exercise[实际运动会话]
|
||
Need -->|是| Task[协助工单]
|
||
Task --> Dispatch[规则匹配或管理员派单]
|
||
Dispatch --> Accept[志愿者接单]
|
||
Accept --> Arrival[到场与开始服务]
|
||
Arrival --> Exercise
|
||
Device[场地摄像头] --> Exercise
|
||
Exercise --> Result[结束记录与效果评估]
|
||
Exercise --> Alert[安全告警]
|
||
Result --> Complaint[老人或家属投诉]
|
||
```
|
||
|
||
## 6. 运动协助政策与智能体边界
|
||
|
||
运动项目的 assist_policy 建议采用以下枚举,而不是单一需要/不需要布尔值:
|
||
|
||
| 政策 | 默认行为 |
|
||
| --- | --- |
|
||
| REQUIRED | 必须有协助,老人不能关闭 |
|
||
| OPTIONAL | 老人选择是否需要;智能体可以建议 |
|
||
| RULE_BASED | 后端规则结合资料决定,未来智能体参与分析 |
|
||
|
||
无协助作为判断结果,而不再另造一套工单流程。老人主动要求协助时可以增加需求;管理员禁止开放的项目/场地或强制协助约束不会被模型撤销。
|
||
|
||
决策输入建议包括:运动类型/强度/时长、年龄、既有评估结果、基础病、行动能力、明确风险信息、资料更新时间、场地设备和可用协助。存储 assist_required、decision_source、reason、rule/model_version、assessed_at 和必要的输入引用快照,便于解释“为什么派单”。
|
||
|
||
初期规则也要明确资料缺失或过期时如何处理,例如要求补充评估或转人工确认;不要把缺失数据默认等同于低风险。具体年龄/疾病阈值没有用户确认,不在此文编造医学规则。
|
||
|
||
智能体预留三个用途:
|
||
|
||
1. 评估分析:把结构化问卷、指标和历史记录转换为风险摘要与运动建议。
|
||
2. 运动规划:从管理员维护的有效项目/场次中推荐,或生成候选运动计划。
|
||
3. 协助判断/匹配解释:建议是否协助、匹配哪些志愿者,并提供依据。
|
||
|
||
建议接口为 AssessmentAnalysisProvider、ExercisePlanningProvider、AssistDecisionProvider、VolunteerMatchStrategy。首版可使用规则实现和未启用的模型适配,不要把未调用模型的结果命名为 AI 分析。
|
||
|
||
模型建议输出结构化对象,包含来源、模型版本、证据/输入引用、有效期和建议理由。智能体通过受控工具查询项目、场次和已授权资料;创建预约/调整安排必须走同一业务 Service,验证时间、容量、身份和幂等。个人未确认的“建议”不应直接变成占用资源的预约,除非后续明确允许自动计划。
|
||
|
||
安全关键动作采用确定的业务规则:告警升级、对象授权、容量与重复派单检查不能只让大模型做自然语言决定。自然语言投诉也可以辅助分类,但不由模型直接认定责任或删除记录。
|
||
|
||
## 7. 志愿者匹配、派单与拒单
|
||
|
||
### 7.1 初期匹配实现
|
||
|
||
先做“硬条件过滤 + 可解释排序 + 管理员介入”,为后续模型匹配提供稳定业务接口。
|
||
|
||
硬条件示例:账号和志愿者身份有效、允许提供服务、服务区域/场地、空闲时间、所需技能、已有工单时间冲突、可协助人数。技能要求和资质流程尚未确定,字段可先轻量维护。
|
||
|
||
排序可参考:距离/区域、技能匹配程度、近期服务次数、负载、响应表现、已拒绝当前任务。权重由管理员配置并记录版本,首版只选几项确定数据,不需要机器学习模型。
|
||
|
||
派单记录保存候选、分数/理由、发出时间、响应截止时间、结果和尝试次数。自动派单与手动派单走同一入口。已有有效接单时不得被后台操作静默覆盖;改派应撤销原记录并通知。
|
||
|
||
自动派单是发出指派并等待接单,不是替志愿者完成接单。志愿者自助抢单是否开放尚未确认;“自动匹配/管理员派单两种方式”不等于已经确定开放抢单大厅。
|
||
|
||
### 7.2 拒单限制
|
||
|
||
- 用户已确认按月限制且每次填写理由;具体次数由管理员配置,原因例外和达到上限的措施尚待确定。
|
||
- 管理端维护 monthly_refusal_limit;按服务端时间统计。建议以 Asia/Shanghai 自然月计算,保存明确月份(如 2026-10);“自然月或滚动 30 天”未明确时,以自然月作为待确认的实施假设,不删除过去月份历史。
|
||
- 拒单 reason 必填且 trim 后非空,后端同样校验;可加原因类别和说明,但只做理由文本即可满足用户当前要求。
|
||
- 只计主动拒绝实际收到的有效指派。超时未回应、管理员撤销、老人取消、重复请求分别记录,不默认混成拒单。
|
||
- 可考虑健康、交通、突发事项由管理员标记例外;是否允许/怎么审核待定。
|
||
- 达到上限后可暂停自动派单资格或转管理员处理;不建议在真实无法服务时强迫用户维持工单。最终执行措施待定。
|
||
- 拒单后换候选,避免立即把同一工单派回同一个人。
|
||
- 所有候选耗尽、快到开始时间、协助人数不足时通知管理员;老人端准确展示等待协助,不显示“已落实”。
|
||
|
||
状态变更和拒单计数需原子处理;同一点击/网络重试不能计两次。并发派单不能让同一人占用冲突时间,也不能超出工单所需志愿者数量。
|
||
|
||
## 8. 服务状态、完成与投诉
|
||
|
||
预约、工单、单次指派、运动会话、安全告警应有独立状态,避免一列 status 混用。
|
||
|
||
| 对象 | 建议状态 |
|
||
| --- | --- |
|
||
| 预约 | PENDING(条件/协助待落实)、CONFIRMED、CANCELLED、COMPLETED、NO_SHOW |
|
||
| 协助工单 | WAITING_ASSIGNMENT、WAITING_ACCEPTANCE、READY、IN_PROGRESS、COMPLETED、CANCELLED |
|
||
| 指派记录 | OFFERED、ACCEPTED、REJECTED、EXPIRED、REVOKED;到场信息独立记录 |
|
||
| 运动会话 | READY、RUNNING、ENDED、ABORTED |
|
||
| 投诉 | SUBMITTED、PROCESSING、RESOLVED、CLOSED |
|
||
| 安全告警 | DETECTED、ACKNOWLEDGED、HANDLING、RESOLVED;升级阶段独立保存 |
|
||
|
||
这是拟定状态集;是否需要预约人工审核仍未确认,PENDING 不等于管理员审核。
|
||
|
||
简单服务流程:待分配 → 发出指派 → 接单 → 到场签到 → 开始 → 志愿者点击结束 → 保存实际时长/运动结果/服务说明。只需要一个确认服务完成的责任人时,可指定工单负责人;多人协助时区分某志愿者结束自己参与和负责人结束整个工单,避免一个人退出就关闭全场。
|
||
|
||
“无人协助运动”的实际开始/结束可以由老人按钮、场地操作员或后续设备事件触发,不能依赖志愿者。到预约结束时间只能标记超时/待核实,不直接捏造实际运动完成。
|
||
|
||
签到方式先选按钮/场地码等轻量方案,定位、二维码是否必需待定。摄像头事件作为过程证据,不自动代替服务完成声明;实际没检测到动作也不能直接认定志愿者未服务。
|
||
|
||
投诉关联 booking_id、task_id、session_id 中必要对象,包含投诉人、与老人的授权关系、内容、时间、附件和处理记录。投诉与安全事件可相互关联,但投诉不是即时紧急告警。完成后仍可投诉;投诉处理不删除原服务历史。
|
||
|
||
## 9. 轻量场地、人数与设备管理
|
||
|
||
### 9.1 场地
|
||
|
||
轻量字段建议:名称、地址/区域、负责人、启停状态、人数上限、允许时段、备注。不要首版构造多层楼宇/空间数字孪生。
|
||
|
||
场次人数与场地容量需要区分:场次有报名上限;同一场地同时存在多个场次时还要检查共享容量/占用。首版可让场地配置“独占/共享”和简单人数上限;独占场次限制重叠,共享累计人数限制容量。
|
||
|
||
预约开始/结束时间保存时间戳或目标标准时间类型,业务按 Asia/Shanghai 展示和配置,明确跨天。人数判断、报名提交和取消释放名额要在事务/锁或条件更新下执行,防止并发超售。
|
||
|
||
### 9.2 设备
|
||
|
||
设备先有:唯一 device_code、类型、所属场地、名称、启停状态、能力列表、最近心跳、在线状态、厂商/协议版本、配置引用。摄像头固定绑定场地,暂不做复杂设备借用流程。
|
||
|
||
“设备启用”和“设备在线”是两种状态;心跳超时可以发设备故障提醒,不能自动当作老人跌倒或无回应。管理员能看设备列表、绑定场地、状态和最近事件即可。
|
||
|
||
同场地多摄像头可共用一场运动会话,不默认每个摄像头都占一份场地人数。普通器材如需数量管理,可以轻量记录总量/可用量与场次需求,后续再加维护/借还。
|
||
|
||
## 10. 摄像头接入合同与多人关联
|
||
|
||
### 10.1 用业务 DTO 隔离硬件协议
|
||
|
||
预留 DeviceEventAdapter 和 RecognitionEventService;HTTP 回调、MQTT、WebSocket 或队列通过适配层转换成统一事件,尚未确认的协议不写死。
|
||
|
||
建议统一事件字段:
|
||
|
||
```text
|
||
eventId 设备事件唯一 ID/幂等键
|
||
schemaVersion 我们的事件结构版本
|
||
deviceCode 设备编号,服务端查绑定场地与租户
|
||
occurredAt / receivedAt 设备发生时间/服务端收到时间
|
||
eventType heartbeat / motion_summary / skeleton / fall_detected / ...
|
||
providerModelVersion 检测算法版本
|
||
sessionRef 已绑定的运动会话;可为空,但需标明归属状态
|
||
subjectTrackId 摄像头跟踪 ID;不是会员 ID
|
||
confidence 如算法提供,保存置信度及定义/范围
|
||
payload 动作类型、次数、分值、关节点、异常详情
|
||
clipRef 可选录像片段引用
|
||
```
|
||
|
||
设备回调通过设备凭据/签名或实际网关身份鉴别;租户、场地从服务端绑定关系取得,不信任设备传入任意会员或 tenant_id。同一 eventId 重试可安全接收;允许记录迟到/乱序事件,不能把迟到的旧检测覆盖新状态。
|
||
|
||
### 10.2 多人场景的关键问题
|
||
|
||
骨骼跟踪 ID 通常只识别视频里的一个人,并不自然知道是哪个老人。必须预留 track_id ↔ session_participant 的映射来源、有效期和可信度。
|
||
|
||
可选方案:到场登记后由工作人员绑定、站位/区域绑定、设备端提供标识映射。具体方式与课题组算法团队确认;当前不承诺使用人脸识别。
|
||
|
||
无法确认身份的跌倒事件仍可以按场地发中控告警,显示“人员待确认”;不能随机给某位老人家属发短信或把动作分写到其档案。多人参与关联是后续接入前的必要联调点。
|
||
|
||
### 10.3 数据量控制
|
||
|
||
业务数据库保存运动摘要和异常:动作、次数、标准程度、关键时间、模型版本、绑定信息。原始视频和连续高频骨骼序列不逐帧写 MySQL;保存文件/流服务引用,按需要保留关键帧或片段。
|
||
|
||
动作是否标准的分数必须记录算法定义/版本,不能直接与医学量表分数相加。后续效果评估从量表变化、服务记录和动作结果分别计算。
|
||
|
||
## 11. 最近 72 小时录像保留
|
||
|
||
目标为滚动时间窗口,而不是每天清空一个目录。优先让摄像头/NVR/录像服务按片段存储,平台保留索引:device_id、venue_id、session_id(可空)、start_at、end_at、storage_config_id、object_key、expire_at、删除状态。
|
||
|
||
建议正常录像片段以 end_at + 72h 为过期时间;应约定片段长度与清理扫描周期,因此实际剩余边界可能有一个片段长度/扫描间隔的偏差。若必须严格保留窗口,应由录像端直接执行策略。
|
||
|
||
清理 Job 或存储生命周期策略删除真实片段,同时更新索引;删除失败记录重试,不能只删数据库行。服务重启后补查过期片段;文件缺失和索引过期可核对。
|
||
|
||
活动教学视频属于长期内容库,监控录像属于短期留存,两者使用不同路径/保留策略,避免清理最近 72 小时录像的任务误删教学视频。
|
||
|
||
用户目前没有确认事故录像额外长期保存。若后续需要投诉/事故片段保全,应另行定义权限和保存期限;当前规则仍为 72 小时。异常事件的文字/结构化记录可以独立保留,但不能假装过期视频仍可播放。
|
||
|
||
平台的文件 API 适合附件与普通媒体索引,不应由 Java 应用直接把所有场地连续视频先读入 byte[] 再上传。预留录像端/对象存储接口和受控播放地址,后续决定 NVR、RTSP 拉流或摄像头推片方案。
|
||
|
||
## 12. 安全告警、中控与回应
|
||
|
||
### 12.1 将三类确认分开
|
||
|
||
| 确认 | 含义 | 不能据此推断 |
|
||
| --- | --- | --- |
|
||
| 管理员 ACK | 有管理员看见并接手告警 | 老人已经安全 |
|
||
| 老人 RESPONDED | 老人按规定渠道做了回应 | 跌倒已经解除、无需帮助 |
|
||
| 事件 RESOLVED | 经处置确认事件结束,记录结果 | 所有通知已经送达 |
|
||
|
||
提醒/短信“发送成功”、App“在线”、中控“已播放声音”同样不是老人回应。
|
||
|
||
建议告警记录 severity、来源、发生时间、设备/场地、可能的参与者、当前处理人、处理状态、升级阶段、回应结果及证据、通知尝试和处置结果。多摄像头同一异常可归并,但归并窗口由算法联调确定,不盲目吞掉重复发生的异常。
|
||
|
||
### 12.2 升级流程候选
|
||
|
||
1. 收到可信异常,创建持久化告警,中控通过 WebSocket 更新事件列表/醒目标识并尝试声音提示。
|
||
2. 管理员接手或系统请求确认,向老人端发有 event_id 和有效期的回应请求;现场志愿者/工作人员可以报告观察结果。
|
||
3. 配置时限内未得到有效确认,升级给管理员/备用负责人;向已授权且手机号有效的家属发短信。
|
||
4. 若确认启用外部呼叫接入,按明确的紧急规则发出请求并记录反馈,区分“待请求、已提交、接通、失败、人工接管”。
|
||
5. 处置完成,记录结果;解除告警由有权限人员执行,不能仅凭通知已发或模型回答正常来解除。
|
||
|
||
步骤、等待时间、严重程度例外和短信触发时间仍待确定。可能的严重事件可以不等待普通确认流程;该规则需要业务/课题组确认。
|
||
|
||
### 12.3 老人回应的候选方式
|
||
|
||
- App 弹窗按钮:如“我没事”“我需要帮助”。“需要帮助”仍为有效回应,但不能关闭告警。
|
||
- 现场志愿者/工作人员确认:记录人员、时间、结论和事件关联。
|
||
- 语音回应:后续模型辅助解析,仍保留原始回应证据、识别结果与不确定状态。
|
||
- 摄像头姿态变化:仅作辅助证据,没有确认规则前不替代老人或现场人员的回应。
|
||
|
||
回应 API 绑定老人/事件/一次性或短期 challenge,服务端核验权限和有效期,防止旧回应解除新的异常。老人端断网、没带手机或通知没送到记 UNKNOWN/UNREACHABLE 等原因,不能直接判定医学意义的无反应。
|
||
|
||
中控页面声音受浏览器播放权限和用户设置限制;提供启用声音的交互和显著视觉兜底。WebSocket 断开后重连拉取未处理事件,确保告警不只活在内存推送里。管理员无 ACK 时可升级备用人,名单和时限待定。
|
||
|
||
### 12.4 自动拨打 120 的接入边界
|
||
|
||
保存为目标需求,预留 EmergencyContactGateway,但尚未确定能调用的外部通道、所在地区/机构接入方式、可传地址和回调、自动触发条件。普通短信渠道不能直接等同于外呼服务,手机 tel: 链接也不等同于服务端自动报警。
|
||
|
||
第一版可以实现告警、升级、管理员操作记录和模拟网关联调;没有真实通道时明确显示“未配置/人工联系”,不能展示已报警成功。将来经确认启用后,遵守同一事件幂等/取消/反馈合同,防止重复触发外部呼叫。
|
||
|
||
## 13. 建议数据对象:先保持轻量
|
||
|
||
以下是逻辑对象草案,不是必须一次建齐的表清单。按当前阶段逐步建表,复杂字段和重复数据避免过早加入。
|
||
|
||
| 对象 | 关键字段/关系 | 第一阶段建议 |
|
||
| --- | --- | --- |
|
||
| 运动项目 | 名称、启停、强度/建议时长、assist_policy、技能要求 | 建立 |
|
||
| 场地 | 名称、地址、负责人、容量、开放时段、占用政策 | 建立 |
|
||
| 设备 | device_code、场地、类型、启停/心跳、能力、协议 | 轻量登记;真实事件接入后续 |
|
||
| 活动场次 | 项目、场地、起止时间、容量、公开/私人、状态、协助配置 | 若支持活动报名则建立;私人预约可复用 |
|
||
| 预约/报名 | 老人 ID、场次/项目、时间、协助意愿/结果、决策依据、状态 | 建立 |
|
||
| 协助工单 | 场次/预约范围、需要人数、负责人、服务状态、实际时间 | 仅需要协助时创建 |
|
||
| 工单参与关系 | 工单与需要协助的预约/老人 | 支持多人,不复制全部老人档案 |
|
||
| 志愿者资料 | member_id、服务区域、技能、可用时段、状态 | 复用/扩展旧档案 |
|
||
| 指派记录 | 工单、志愿者、来源、尝试/结果、截止时间、拒单原因 | 建立,兼作拒单审计来源 |
|
||
| 运动会话与参与者 | 实际起止、活动、工单、老人、人员跟踪映射 | 可先简化;为设备预留关联 |
|
||
| 提醒/通知任务 | 业务 ID、接收者与主体类型、渠道、计划时间、状态/重试、幂等键 | 建立/扩展旧提醒 |
|
||
| 投诉 | 服务/会话/老人、投诉人、内容/附件、处理状态 | 基础流程 |
|
||
| 检测事件/摘要 | event_id、设备、时间、会话、track、模型版本、payload 引用 | 先定合同,设备接入时建立 |
|
||
| 录像片段索引 | 设备/场地、起止、object_key、expire_at、删除状态 | 录像接入时建立 |
|
||
| 安全告警与处置日志 | 来源、上下文、严重度、状态、回应、升级、处理记录 | 中控阶段建立 |
|
||
| AI 分析/建议记录 | 输入引用、模型/规则版本、结构化建议、状态/有效期、采纳结果 | 模型阶段建立 |
|
||
|
||
普通后台参数如提醒提前量、拒单次数、派单响应时限、匹配权重可先用模块配置/芋道参数配置;需要各机构不同规则时再做 tenant 级业务设置。不要为了几个配置先实现复杂规则编辑器。
|
||
|
||
重要唯一/并发约束:同一老人同场次重复报名、同一设备事件重试、同一有效指派、同一提醒/渠道发送、同一告警外呼请求均需幂等。预约改期/取消同步调整提醒、释放容量、撤销指派,整个流程用服务层事务和必要异步补偿。
|
||
|
||
## 14. 提醒、通知和定时任务
|
||
|
||
运动提醒和协助派单是不同触发事件:可以在预约确认后立即发起匹配,提前提醒按配置执行;具体提前多久由业务配置,不能把“到运动时间才派单”作为固定实现。
|
||
|
||
提醒支持至少开始前提醒、变更/取消通知、志愿者待接单提醒、临近开始协助不足提醒;异常升级有自己的规则。老人可配置自己想运动的时间,但关闭普通运动提醒不应关闭后台安全告警。
|
||
|
||
调度采用持久化任务 + 芋道 Job 扫描到期任务,而不是为每个预约创建一个内存定时器。Job 扫描、领取、执行、重试有状态;服务重启、重复扫描不重复发。使用业务键约束,并记录变更版本,防止改期后旧任务仍通知。
|
||
|
||
站内信、WebSocket、短信通过通知适配调用 system/infra/framework 能力。每个渠道保存结果,推送失败可重试或升级;发送成功只表示渠道接受/反馈结果,不能冒充实际阅读或回应。
|
||
|
||
App 后台/关闭时 WebSocket 不保证收到提醒,未来选择短信、平台订阅消息、App 推送或本地通知补充。用户尚未明确普通运动提醒采用哪些渠道,不能承诺关闭手机 App 也必达。
|
||
|
||
## 15. 分阶段落地与验收重点
|
||
|
||
用户已确认第一阶段先完成核心流程并预留摄像头/智能体接口;之后 B~D 阶段是待进一步安排的候选。
|
||
|
||
| 阶段 | 工作 | 边界 |
|
||
| --- | --- | --- |
|
||
| A(已确认核心范围) | 旧健康档案/评估迁移、可信身份、运动项目、轻量场地/设备、自主预约和活动报名、协助政策、规则/手动派单、服务状态、提醒 | 可运行核心服务闭环,按月拒单且理由必填;规则判断明确标为规则;投诉基础流程是相关设计建议,实施排期再细化 |
|
||
| B | 结构化模型评估、运动建议、受控智能体工具和可解释匹配 | 明确模型提供商/规则,建议与执行区分 |
|
||
| C | 固定摄像头适配、人员映射、动作摘要、跌倒告警、中控、72 小时录像 | 与课题组联调,真实协议和算法输出到位 |
|
||
| D | 回应核验、升级与家属短信、真实外部紧急呼叫 | 确认回应政策和实际通道后再启用 |
|
||
|
||
第一阶段即使不连接设备/模型,也应把 session_id、多人参与、决策来源、协议适配和事件幂等留好,避免以后推翻预约与工单模型。只做接口合同和必要关联,不创建空壳大型平台。
|
||
|
||
关键验收场景:
|
||
|
||
- 不需要协助、老人主动需要、强制需要三类预约;协助未落实的正确展示。
|
||
- 单人自主预约、多人场次、同场地容量与时间冲突、并发最后一个名额。
|
||
- 自动与手动派单、拒单理由不能为空、按月上限/跨月计数、拒单/超时/撤销区分、达到拒单上限、无候选与快到开始时升级、网络重试幂等。
|
||
- 老人取消/改期时容量/派单/提醒一致;多人中一个取消不关闭全场工单。
|
||
- 志愿者确认服务完成、多人责任人、未协助运动开始/结束、投诉授权与保留历史。
|
||
- 老人/家属/志愿者/管理员与不同租户的数据范围;同名 ID 不混主体。
|
||
- 模型不可用/资料缺失时有明确状态;建议不得越过容量和强制协助政策;不得把静态文案伪装成模型结果。
|
||
- 设备离线与老人异常分开;匿名 track 的场地告警、多摄像头重复/乱序、身份映射与动作归属。
|
||
- 72 小时清理边界、重启补偿、删除失败重试、教学视频不受录像策略影响。
|
||
- 中控断线重连、声音不可用的视觉提示;管理员 ACK 与老人回应分开;无通道时不展示呼叫成功。
|
||
|
||
## 16. 后续仍需确认但不阻碍写设计的事项
|
||
|
||
第 2 节三项已确认;以下问题后续按实施阶段逐步细化:
|
||
|
||
- 首批运动项目、场地和老人/志愿者规模;是否有真实名单/区域资料。
|
||
- 志愿者技能/资质、可用时段采集方式、单次最大协助人数、每月拒单上限、自然月/滚动月边界、改派/拒单例外和达到上限的措施。
|
||
- 场次报名、自动计划的确认方式、预约提前/取消/改期时间限制、场地占用规则。
|
||
- 普通提醒渠道、通知提前量、服务无回应/无候选处理时限。
|
||
- 大模型提供商、现有智能体研究方案、年龄/基础病/量表规则与资料有效期。
|
||
- 摄像头设备协议、时钟同步、event_id、人体跟踪 ID 持续性、动作分定义、场地人员绑定方式。
|
||
- NVR/录像保存位置、分片长度、是否允许事故片段超过 72 小时保存。
|
||
- 异常等级、有效回应渠道、严重事件直升规则、备用管理员、短信触发条件。
|
||
- 120/其他紧急联系人呼叫实际通道和反馈,失败人工接管流程。
|
||
|
||
后续 Codex 读取本文时,先分清第 1~2 节用户确认、第 16 节待定与其他章节设计建议,再按当前芋道工程实现;不要把所有待定项一次性要求用户回答,也不要未经实现/验证就报告集成完成。
|