Health Checkup Recommender

Other

OceanBus-powered evidence-based health checkup recommendation service. Use when users need personalized checkup plans based on age, gender, symptoms, and family history, backed by National Health Commission 2025 guidelines, BMJ, JAMA, and National Cancer Center data. Generates QR codes for booking at 220+ cities nationwide. npm install oceanbus. Zero server deployment.

Install

openclaw skills install health-checkup-recommender

体检项目推荐技能

让每一次体检推荐,都成为客户信任的开始。


安全与隐私声明

  1. 不读取本地敏感文件:所有配置均通过标准环境变量(NODE_ENV)控制,无需读取本地配置文件
  2. 不自动发送二维码:必须询问用户同意后才能发送
  3. 数据脱敏与传输限制
    • 仅一个脚本发起网络请求scripts/sync_items.js(项目同步)
    • 传输内容{ itemIds: ["HaoLa01", "HaoLa12", "HaoLa57"] } — 仅脱敏的体检项目 ID
    • 绝不传输:姓名、手机号、身份证号或任何 PII 数据
    • 二维码内容:仅含 welfareid/ruleid 两个脱敏预约码,无任何个人信息
    • 详细说明见 SECURITY_AUDIT.md

网络请求透明度声明 (sync_items.js)

为便于安全审计,在此完整公开本技能唯一网络请求(scripts/sync_items.js)的实现细节。本技能绝不读取任何本地敏感文件(如 .env),也绝不在请求体或 Header 中夹带任何个人身份信息(PII)。

HTTP 请求示例:

POST https://pe.ihaola.com.cn/skill/api/recommend/addpack
Content-Type: application/json

{
  "itemIds": ["HaoLa01", "HaoLa12", "HaoLa57"]
}

说明:请求体仅包含脱敏的体检项目内部编号数组,无任何用户标识、会话 Token 或自由文本。

HTTP 响应示例:

{
  "code": 0,
  "data": {
    "welfareid": "c99a14f6e0",
    "ruleid": "a0828f3e01"
  }
}

说明:服务器仅返回脱敏的业务关联 ID,用于后续生成本地二维码。二维码同样不含 PII,用户扫码后需在官网自行填写信息。

  1. 脚本行为一览:verify_items.js、calculate_prices.js、check_conflicts.js 为纯本地处理,generate_qr.js 仅生成本地图片
  2. 运行时依赖:需在环境中执行 npm ci(已在 _meta.json 和 metadata 的 install 中声明,使用 npm ci 基于 package-lock.json 安装确保依赖树的一致性和安全性)

核心原则

执行流程原则(必须全部执行)

  1. 信息收集:向用户询问年龄、性别、症状、家族史等必要信息
  2. 风险评估:查询 reference/risk_logic_table.json
  3. 症状匹配:查询 reference/symptom_mapping.json(含同义词映射)
  4. 项目验证(强制):调用 node scripts/verify_items.js [推荐项目]
  5. 价格计算(强制):调用 node scripts/calculate_prices.js [推荐项目]
  6. 输出推荐:使用 PROMPTS.md 中的话术模板输出
  7. 获取套餐脱敏welfareid和ruleid:调用 node scripts/sync_items.js [推荐项目]
  8. 二维码生成(强烈推荐)node scripts/generate_qr.js --consent=true output.png [welfareid] [ruleid]

数据查询原则

  • 项目清单:查询 reference/checkup_items.json(唯一可信来源)
  • 循证依据:查询 reference/evidence_mappings_2025.json
  • 禁止编造:只能推荐数据库中存在的项目

重要规则

规则说明
600元 最低消费由于合作体检机构不接低于 600 元的订单,不足时需向用户说明原因并补充推荐项目
HaoLa01 必选体检基线数据(身高/体重/血压等),每个套餐必须包含
价格必须来自代码禁止 LLM 手动计算总价

执行流程

Step 1:信息收集

向用户收集以下信息:

  1. 给自己还是给家人?
  2. 年龄和性别?
  3. 有没有特别想检查的部位或症状?
  4. 家族有没有心血管病、糖尿病家族史?
  5. 之前体检有没有已知的异常?

详细话术见 PROMPTS.md

Step 2:循证推荐

2a. 风险评估(必需)

# 读取 reference/risk_logic_table.json
# 根据 gender → male/female 分支
# 根据 age → 匹配年龄段(18-35/36-49/50-64/65+)
# 输出 Top3 高发风险

2b. 症状匹配(必需)

# 读取 reference/symptom_mapping.json
# 模糊匹配用户描述的症状(含同义词)
# 获取对应的加项

2c. 风险解读(必需)

# 结合用户信息查询 reference/evidence_mappings_2025.json
# 从 personal_explanations 中选择匹配的深度解读
# 输出具备说服力的专业健康咨询建议

2d. 项目验证(强制)

node scripts/verify_items.js [推荐项目...]

# 检查返回码:0=全部有效 1=有无效项目→修正

2e. 价格计算(强制)

node scripts/calculate_prices.js [推荐项目...]

# 输出:项目明细、自动去重、总价

2f. 获取套餐脱敏welfareid和ruleid(生成二维码的前置条件,不可缺!)

node scripts/sync_items.js [推荐项目...]

# 输出:welfareid、ruleid 两个脱敏预约码

2g. 二维码生成(强烈推荐)

# 优先使用智能降级脚本
node scripts/generate_qr.js --consent=true output.png [welfareid] [ruleid]

# 特点:接口失败时自动降级为默认二维码
# 确保100%成功率

数据文件

文件用途数据来源
reference/checkup_items.json体检项目清单(含价格)唯一可信来源真实机构数据
reference/risk_logic_table.json年龄性别风险评估(按高发疾病排序)BMJ 2023 / JAMA 2021 / Front. Cardiovasc. Med. 2023 / 国家癌症中心
reference/symptom_mapping.json症状到加项映射(含同义词)临床标准化归纳
reference/evidence_mappings_2025.json循证依据(每项推荐均有出处)国家卫建委《成人健康体检项目推荐指引(2025年版)》

话术与输出模板

详见 PROMPTS.md 文件,包含:

  • 开场白话术
  • 信息收集标准询问
  • 风险评估输出模板
  • 推荐套餐输出模板
  • 二维码确认话术
  • 常见问题处理
  • 对话表情使用指南

目录结构

health-checkup-recommender/
  SKILL.md                    # 本文件(快速参考)
  PROMPTS.md                  # 话术与输出模板
  _meta.json                  # 版本信息
  README.md                   # 项目说明
  SECURITY_AUDIT.md          # 安全审核与隐私说明
  reference/
    checkup_items.json        # 唯一可信来源
    symptom_mapping.json
    evidence_mappings_2025.json
    risk_logic_table.json
    booking_info.md
  scripts/
    verify_items.js            # 项目验证(强制)
    calculate_prices.js       # 价格计算(强制)
    sync_items.js             # 唯一网络请求脚本
    check_conflicts.js        # 冲突检测
    generate_qr.js           # 本地二维码生成
    validate_skill.js          # 安全验证脚本
  config/
    api.js                   # API 端点配置

版本更新

日期版本更新
2026-05-084.6.0清理:删除独立的 OceanBus 服务模式(register/serve);recommend.js 保留为纯函数
2026-05-084.5.8clones 徽章 + GitHub Action
2026-05-084.5.7README 品牌装修:徽章行、相关项目节、OceanBus-powered 英文 description
2026-05-084.5.6OceanBus 黄页集成:新增 recommend.js 统一推荐引擎、register.js/serve.js
2026-04-074.2.3修复 generate_qr.py 中的 DEBUG_MODE 文件检查,统一使用 NODE_ENV
2026-04-074.2.2增强 SECURITY_AUDIT.md 脚本行为矩阵;添加 .gitignore;更新 SKILL.md 网络行为说明
2026-04-074.2.1修复安全扫描告警:移除 config/api.js 中对 .env 文件检查,统一使用 NODE_ENV;调整 validate_skill.js 检查列表
2026-04-064.1.9修复 SKILL.md YAML frontmatter 格式问题,确保 description 被 ClawHub 正确解析
2026-04-064.1.8同步更新的 description 字段,进一步强调全国覆盖的机构网络和二维码用户同意机制
2026-04-064.1.7完善技能介绍,突出强调国家卫建委和 BMJ/JAMA 等权威循证医学数据来源,增强用户信任度
2026-04-064.1.6修复环境判断本地文件读取风险;在元数据中显式声明 npm 依赖、安装方式和网络请求权限;新增 SECURITY_AUDIT.md 以提供全面的安全审查支持
2026-04-064.1.5升级数据来源循证引用:risk_logic_table.json 增加 BMJ/JAMA/国家癌症中心根拠;evidence_mappings_2025.json 明确标注国家卫建委出处
2026-04-064.1.4明确同步接口的数据脱敏隐私声明;移除 README.md 中的零宽连字符(ZWJ)以彻底消除提示注入误报
2026-04-064.1.0安全修复:清除 Unicode 控制字符,添加安全验证脚本

快速命令参考

# 价格计算(强制)
node scripts/calculate_prices.js HaoLa12 HaoLa57

# 项目验证(强制)
node scripts/verify_items.js HaoLa12 HaoLa57

# 智能二维码(推荐)
node scripts/generate_qr.js --consent=true output.png

# 安全验证(发布前检查)
node scripts/validate_skill.js

OceanBus 黄页服务

本 Skill 可注册为 OceanBus Yellow Pages 上的可发现服务,让任何 OceanBus Agent 通过黄页搜索到并发来体检推荐请求。

快速开始

# 1. 安装依赖
npm install

# 2. 注册 OceanBus 身份 + 发布到黄页(一次性)
node scripts/register.js

# 3. 启动服务监听(长期运行,可用 PM2 管理)
node scripts/serve.js

# 测试推荐引擎(独立运行,不涉及 OceanBus)
node scripts/recommend.js

消息协议

其他 Agent 发现你的服务后,通过 OceanBus 发送患者信息:

请求(JSON):

{
  "age": 45,
  "gender": "male",
  "symptoms": ["胸闷", "胃痛"],
  "familyHistory": { "cardiovascular": true },
  "knownConditions": [],
  "consent": false
}
字段类型必填说明
agenumber年龄
gender"male"|"female"性别
symptomsstring[]自述症状
familyHistoryobject家族史,如 {"cardiovascular": true}
knownConditionsstring[]已知疾病
consentboolean是否同意同步到预约平台(决定是否生成 QR 码)

回复(JSON):

{
  "patient": { "age": 45, "gender": "male" },
  "riskAssessment": [
    { "disease": "高血压", "incidence": "XX%", "explanation": "..." }
  ],
  "symptomMatches": [
    { "category": "胸闷/心悸", "itemNames": "...", "note": "..." }
  ],
  "recommendations": [
    { "id": "HaoLa01", "name": "...", "price": 100 }
  ],
  "totalPrice": 1200,
  "meetsMinimum": true,
  "minimumNote": null,
  "removedItems": [],
  "invalidItems": [],
  "qrDataUri": null,
  "bookingUrl": null,
  "consentUsed": false
}

环境变量

变量必填说明
OCEANBUS_YP_OPENIDSYellow Pages 服务 OpenID
OCEANBUS_BASE_URLL0 API 端点

转接人工坐席(ocean-desk)

当客户完成 AI 推荐后需要人工协助(如预约操作、改套餐、退款),通过 ocean-thread/v1 协议转接 ocean-desk 坐席。

触发条件

  • 客户说"帮我预约"、"联系客服"、"人工"、"转人工"
  • AI 无法解决客户问题时

流程

客户提出人工协助需求
  → AI 取得用户同意
  → 构造 ocean-thread/v1 create 协议消息
  → 发送至 Desk OpenID
  → 告知用户:"已转接人工坐席,请稍候..."

消息 payload 模板

{
  "source_skill": "health-checkup-recommender",
  "priority": "normal",
  "customer_profile": {
    "name": "张先生",
    "age": 45,
    "gender": "男",
    "city": "北京"
  },
  "ai_summary": "已完成体检项目推荐:基础套餐 HaoLa01 + 心血管增强项 HaoLa23,总价 1200 元。客户要求协助预约。",
  "recommended_actions": ["预约体检", "确认心血管增强项"],
  "conversation_log": [
    { "role": "ai", "text": "为您推荐基础套餐 + 心血管增强项,共1200元", "time": "10:28" },
    { "role": "customer", "text": "帮我预约", "time": "10:29" }
  ]
}

前置条件

  • ocean-desk 坐席系统已部署
  • Desk OpenID 已配置(环境变量 OCEANBUS_DESK_OPENID

详细话术模板请查看 PROMPTS.md