温州市人民医院在线服务
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/herenit--wzsrm-phs-cli.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @herenit/wzsrm-phs-cli。温州市人民医院互联网医院 CLI 工具,支持短信验证码登录/退出、完善注册、就诊人管理(添加/查询/选择)、预约挂号(科室/排班/号源/下单/取消)、检验检查报告查询。触发词:互联网医院、挂号、登录、就诊人、查报告、短信验证码、完善注册、herenId。只包含 python scripts/heren_mobile_wzrm.py 一个 Python 入口。
阅读全文 (展开查看完整说明)
概述
heren-mobile-wzrm — 温州市人民医院互联网医院 CLI 工具
CLI 工具,封装 phs 网关 API(互联网医院),支持 agent 驱动的流程:短信登录、就诊人管理、预约挂号、报告查询。
⚠️ 核心约束(必须遵守)
严禁自行组装 HTTP 请求
所有操作必须通过 python scripts/heren_mobile_wzrm.py 执行。 严禁自行调用 API 端点。
✅ 正确做法: 仅使用本文档列出的 CLI 子命令。参数和顺序必须与本文档示例完全一致。
原因:API 涉及加密签名、Token 注入等多级封装,自行组装极易出错。
发送短信前必须显式确认
auth login(交互式自动发验证码)和auth send-sms执行前必须向用户显式确认。- 禁止未经确认就执行任何可能触发短信发送的命令(包括
auth login --phone)。 - 登录失败或验证码错误时,必须再次确认后才能重发,禁止自动重试。
- 这是防止短信滥发的合规要求。
挂号只提医生名 → 必须反问科室
- 当用户说"挂王医生的号"只给医生名字时,必须反问用户该医生在哪个科室,不能直接去所有科室遍历搜索。
- 用户必须明确给出科室名称(如"内科"、"外科"),才能继续
reg doc-list <deptCode>查医生。
就诊人列表为空 → 查档绑定 → 建档
- 登录后获取就诊人列表为空时,优先查档绑定(
patient add-by-treated)。 - 若查档绑定未返回 patientId(999301/未查到档案),则回退建档(
patient add)。 - 禁止跳过查档直接建档。
添加就诊人报「herenId 不能为空」→ 先查登录态与就诊人
patient add / patient add-by-treated 报错提示 herenId 不能为空 时,说明会话缺少 herenId(未登录或登录态失效),按以下顺序处理:
- 先执行
auth status确认登录态:- 未登录(
loggedIn: False)→ 先走登录流程(需用户确认后发短信验证码),登录成功后再查就诊人。 - 已登录 → 继续下一步。
- 未登录(
- 执行
patient list查看是否已有就诊人:- 有就诊人 → 直接
patient select <patientId>复用,不走添加流程。 - 无就诊人 → 走「查档绑定 → 建档」流程(见上一条规则)。
- 有就诊人 → 直接
- 若已登录且确认无就诊人,仍报 herenId 为空 → 重新
auth login刷新会话后再添加。
登录后没有 herenId → 先完善注册 → 再添加就诊人
登录成功但会话里没有 herenId 时,不要卡在 herenId 上诊断/重试,按以下顺序处理:
- 先走完善注册流程(走
/register/bindRegisterUser):
python scripts/heren_mobile_wzrm.py auth complete --name "<姓名>" --id-no "<身份证号>" --phone "<手机号>" --gender 1- 向用户收集:姓名/身份证号/手机号/性别。
- 完善成功后 herenId 自然补齐(脚本会自动刷新 user-info 写入 session)。
- 再走添加就诊人流程:
patient list --json看就诊人:- 有就诊人 → 直接
patient select <patientId>复用即可。 - 无就诊人 → 走「查档绑定(add-by-treated)→ 建档(add)」流程。
- 有就诊人 → 直接
- 完善注册/添加就诊人过程中若报「herenId 不能为空」→ 走下一条规则「添加就诊人报 herenId 不能为空 → 先查登录态与就诊人」。
- 只有「完善注册已成功但 herenId 仍为空」或「流程本身报错」时,才考虑排查 herenId 本身(见「根因诊断」)。
判断依据:登录接口返回里无
herenId字段且带applicationNewRegister: 0,即表示该账号尚未注册建档——先auth complete完善注册(bindRegisterUser),再建档,herenId 自然补齐,后续科室/挂号即可正常使用。不要因此把用户支到微信小程序手动注册,CLI 即可完成。
禁止以下行为(无论 herenId 是否为空):
- ❌ 未经用户确认就自动重发验证码(每次重发都是合规风险)
- ❌ 自行写脚本直接调 API 端点测试(违反「严禁自行组装 HTTP 请求」)
- ❌ 在生产环境乱试不同的 herenId 值或擅自解密手机号字段
- ❌ 不经用户确认就
auth logout+auth login反复横跳
反例:曾有 agent 在登录 herenId 为空时,不去完善就诊人,反而自动重发验证码、写脚本测不同 API 端点、尝试解密用户信息——一连串操作同时违反「短信确认」「禁止自组 HTTP」「禁止乱猜」三条核心约束。正确做法是直接完善就诊人,禁止重蹈覆辙。
安装规范标准
1. 运行环境要求
| 项 | 要求 |
|---|---|
| Python | ≥ 3.8(实测 3.13.12 可用) |
| 依赖 | click、requests、pycryptodome |
| 平台 | Windows / macOS / Linux 均可 |
| 网络 | 需能访问 *.eheren.com(prod: https://netphs.eheren.com/gateway) |
2. ⚠️ 环境变量(必查,否则启动报错)
机器上若存在 PYTHONHOME / PYTHONPATH 环境变量(指向其他 Python 安装),会污染解释器导致启动失败:
AssertionError: SRE module mismatch执行任何命令前必须先清理:
unset PYTHONHOME && unset PYTHONPATH && python scripts/heren_mobile_wzrm.py --version若报 ModuleNotFoundError(缺依赖),说明当前解释器未安装依赖,见步骤 3。
3. 依赖安装
# 使用与运行时相同的解释器安装(本机推荐 WorkBuddy 管理版 Python 3.13.12)
"C:UsersAdministrator.workbuddybinariespythonversions3.13.12python.exe" -m pip install click requests pycryptodome禁止在系统 Python 上全局
pip install;若系统 Python 已损坏(SRE module mismatch),一律改用管理版解释器。
4. 安装验证
unset PYTHONHOME && unset PYTHONPATH && python scripts/heren_mobile_wzrm.py --version
unset PYTHONHOME && unset PYTHONPATH && python scripts/heren_mobile_wzrm.py config show--version正常输出版本号 → 安装成功config show能显示医院/登录状态 → 可开始使用- 首跑
config show若自动弹医院选择 → 输入编号1(温州市人民医院)
5. 运行入口(统一规范)
所有子命令一律通过 scripts/heren_mobile_wzrm.py 调用,严禁自行组装 HTTP 请求:
# 推荐写法:进入 skill 根目录 + 清理环境变量 + 指定解释器
cd "C:UsersAdministrator.workbuddyskills温州市人民医院" &&
unset PYTHONHOME && unset PYTHONPATH &&
"C:UsersAdministrator.workbuddybinariespythonversions3.13.12python.exe" scripts/heren_mobile_wzrm.py <子命令>
# 简写(已确认解释器/环境正常时)
python scripts/heren_mobile_wzrm.py <子命令>所有子命令均通过此入口调用。
6. 常见错误排查表(不同环境报错对照)
同一脚本在不同机器上报错原因各不相同,先对照下表定位,禁止盲目重试或改代码。
| 报错特征 | 原因 | 解决 |
|---|---|---|
AssertionError: SRE module mismatch | PYTHONHOME/PYTHONPATH 指向了其他 Python,解释器库文件混用 | unset PYTHONHOME && unset PYTHONPATH 后重跑;或改用管理版解释器 |
ModuleNotFoundError: No module named 'click'/'requests' | 当前解释器未装依赖 | 用运行时同一解释器执行 -m pip install click requests pycryptodome |
ModuleNotFoundError: No module named 'Crypto' / from Crypto.Cipher import AES 失败 | pycryptodome 未装或被 pycrypto 干扰 | pip uninstall pycrypto -y && pip install pycryptodome(两者不可共存) |
UnicodeDecodeError / 中文乱码 / 'gbk' codec can't decode | Windows 控制台默认 GBK,脚本输出含 UTF-8 中文 | 用 bash(Git Bash)执行,或设置 PYTHONIOENCODING=utf-8;不要用 cmd 直接跑 |
[SSL: CERTIFICATE_VERIFY_FAILED] | 网络环境拦截证书(公司代理/内网) | 确认能访问 netphs.eheren.com;必要时由代理环境放开域名 |
ConnectionError / timeout / Name or service not known | 网络不通或域名解析失败 | 检查网络/代理;ping netphs.eheren.com 确认可达 |
PermissionError: [Errno 13] | 会话目录 ~/.heren-mobile-wzrm/ 无写权限 | 检查用户目录写权限,不要用 sudo 跑 |
Error: No such command / Usage: ... 参数错误 | 命令或参数写错(含中英文符号) | 对照本文档示例逐字核对,禁止自行改参数 |
404 / 400 / 接口签名错误 | 会话过期、医院未选对或参数缺失 | 先 config show 确认 sysCode=1001083、重新 auth login |
| 交互命令卡住不退出 | 无 TTY 环境(agent 后台执行) | agent 调用时一律用非交互参数(--phone/--sms-code/--json),不走交互输入 |
7. 环境差异备忘(本机已知)
- 本机(Windows)推荐解释器:
C:UsersAdministrator.workbuddybinariespythonversions3.13.12python.exe - 系统 Python(
D:pythonpython)已损坏(SRE module mismatch),禁用;macOS/Linux 默认python3正常可用 - 依赖已装到管理版解释器,可直接运行;换解释器需重新
pip install
会话状态
所有状态持久化到 ~/.heren-mobile-wzrm/session.json:
| 字段 | 说明 |
|---|---|
accessToken | 登录 token |
herenId | 用户 ID |
patientId | 当前活跃就诊人 ID |
patientName | 当前活跃就诊人姓名 |
hosId | 医院 ID 缓存 |
sysCode | 系统医院编码(1001083) |
apiSuffix | API 路径后缀 |
支持的系统医院:
| 编码 | 医院名称 | API 后缀 |
|---|---|---|
1001083 | 温州市人民医院 | =wzrm4210307 |
使用流程
0. 选择系统医院(首次使用必做)
首次使用必须先选择一个支持的医院系统,后续所有 API 调用会自动拼接对应后缀:
python scripts/heren_mobile_wzrm.py config hospital执行后交互式列出可选医院,输入编号即可切换。也可通过以下命令查看当前配置:
python scripts/heren_mobile_wzrm.py config show命令分组
config — 系统配置
# 查看当前配置(环境、系统医院、登录状态等)
python scripts/heren_mobile_wzrm.py config show
# 选择/切换系统医院(首次使用必做)
python scripts/heren_mobile_wzrm.py config hospitalauth — 认证
# 交互式登录:提示输入手机号 → 自动发送验证码 → 提示输入验证码 → 登录
python scripts/heren_mobile_wzrm.py auth login
# 也可直接传入手机号跳过第一步
python scripts/heren_mobile_wzrm.py auth login --phone <phone>
# 仅发送验证码(不登录)
python scripts/heren_mobile_wzrm.py auth send-sms <phone>
# 完善注册(登录成功但无 herenId 时调用,走 /register/bindRegisterUser)
python scripts/heren_mobile_wzrm.py auth complete --name "<姓名>" --id-no "<身份证号>" --phone "<手机号>" --gender 1 [--account-type 5] [--id-type 01] [--patient-type -1] [--source 4] [--json]
# 查看登录状态
python scripts/heren_mobile_wzrm.py auth status
# 获取当前用户信息(需登录)
python scripts/heren_mobile_wzrm.py auth user-info [--json]
# 退出登录
python scripts/heren_mobile_wzrm.py auth logoutpatient — 就诊人管理
# 查看已绑定的就诊人列表
python scripts/heren_mobile_wzrm.py patient list [--json]
# 交互选择就诊人(只有一个则自动选中)
python scripts/heren_mobile_wzrm.py patient choose [--json]
# 新增就诊人(建档)
python scripts/heren_mobile_wzrm.py patient add --name "<姓名>" --id-no "<身份证号>" --phone "<手机号>" [--gender 1] [--cert-type 01] [--patient-type -1] [--nation 01]
# 查档绑定(曾就诊的患者)
python scripts/heren_mobile_wzrm.py patient add-by-treated --name "<姓名>" --id-no "<身份证号>" --phone "<手机号>" --gender 1 [--json]
# 设置活跃就诊人
python scripts/heren_mobile_wzrm.py patient select <patientId> [--name "<姓名>"]
# 获取就诊人详情
python scripts/heren_mobile_wzrm.py patient detail <patientId> [--json]--gender:1=男,2=女(默认1)--cert-type:01=身份证(默认),02=护照等--patient-type:-1=成人/儿童有身��证(默认),0=新生儿,1=军人--nation: 民族编码(默认01=汉族),见下方民族对照表
| 编码 | 民族 | 编码 | 民族 | 编码 | 民族 |
|---|---|---|---|---|---|
| 01 | 汉族 | 21 | 佤族 | 41 | 塔吉克族 |
| 02 | 蒙古族 | 22 | 畲族 | 42 | 怒族 |
| 03 | 回族 | 23 | 高山族 | 43 | 乌孜别克族 |
| 04 | 藏族 | 24 | 拉祜族 | 44 | 俄罗斯族 |
| 05 | 维吾尔族 | 25 | 水族 | 45 | 鄂温克族 |
| 06 | 苗族 | 26 | 东乡族 | 46 | 德昂族 |
| 07 | 彝族 | 27 | 纳西族 | 47 | 保安族 |
| 08 | 壮族 | 28 | 景颇族 | 48 | 裕固族 |
| 09 | 布依族 | 29 | 柯尔克孜族 | 49 | 京族 |
| 10 | 朝鲜族 | 30 | 土族 | 50 | 塔塔尔族 |
| 11 | 满族 | 31 | 达斡尔族 | 51 | 独龙族 |
| 12 | 侗族 | 32 | 仫佬族 | 52 | 鄂伦春族 |
| 13 | 瑶族 | 33 | 羌族 | 53 | 赫哲族 |
| 14 | 白族 | 34 | 布朗族 | 54 | 门巴族 |
| 15 | 土家族 | 35 | 撒拉族 | 55 | 珞巴族 |
| 16 | 哈尼族 | 36 | 毛南族 | 56 | 基诺族 |
| 17 | 哈萨克族 | 37 | 仡佬族 | 57 | 其他 |
| 18 | 傣族 | 38 | 锡伯族 | ||
| 19 | 黎族 | 39 | 阿昌族 | ||
| 20 | 傈僳族 | 40 | 普米族 |
patient add使用建档 API(addPat),适用于新增或已就诊患者。若已绑定,则返回"证件号或就诊人已存在",直接用
patient select即可。若用户表示"之前在这家医院看过病",优先尝试查档绑定(
add-by-treated)。
reg — 预约挂号
# 科室列表
python scripts/heren_mobile_wzrm.py reg dept-list [--hos-id HOS001] [--json]
# 科室下医生列表
python scripts/heren_mobile_wzrm.py reg doc-list <deptCode> [--hos-id HOS001] [--json]
# 查询号源(预约前必执行)
python scripts/heren_mobile_wzrm.py reg number-source '<schedule_data_json>' [--hos-id HOS001] [--json]
# 预约挂号(需提供排班数据和号源数据)
python scripts/heren_mobile_wzrm.py reg book <schId> [--patient-id PAT001] [--schedule-data JSON] [--number-source JSON] [--json]
# 取消挂号
python scripts/heren_mobile_wzrm.py reg cancel <orderId> [--hos-order-id HO001] [--source 19] [--json]
# 我的挂号列表
python scripts/heren_mobile_wzrm.py reg my-list [--patient-id PAT001] [--hos-id HOS001] [--page 1] [--json]
# 获取所有科室医生(保存到文件)
python scripts/heren_mobile_wzrm.py reg all-doctors [--json]预约挂号工作流:
reg dept-list --json→ 选择科室(deptCode)reg doc-list <deptCode> --json→ 选择医生(schedule 数据)reg number-source '<schedule_data_json>' --json→ 选择号源,获取 number_source 完整 JSONreg book <schId> --schedule-data '<schedule_data_json>' --number-source '<number_source_json>' --json
query — 报告查询
# 报告列表(--header-type: jy=检验, jc=检查, tj=体检)
python scripts/heren_mobile_wzrm.py query reports [--patient-id PAT001] [--hos-id HOS001] [--header-type jy] [--json]
# 检查报告详情
python scripts/heren_mobile_wzrm.py query report-detail <reportId> [--hos-id HOS001] [--patient-id PAT001] [--extend EXTEND] [--json]
# 检验报告详情
python scripts/heren_mobile_wzrm.py query report-detail-checkout <reportId> [--hos-id HOS001] [--patient-id PAT001] [--rep-type 1|2] [--extend EXTEND] [--json]--rep-type:1=普通检验报告,2=药敏报告/细菌培养报告--extend: 扩展参数,由报告列表返回时透传到详情接口。如果列表返回了 extend 字段,必须原样传入。
注意: 报告列表和报告详情是两套 API。
query reports --header-type jy返回的列表是统一入口,查检验报告详情时用report-detail-checkout(走/phs-query/checkout/),查检查报告详情时用report-detail(走/phs-query/examine/)。列表返回的extend字段需透传到对应的详情命令。
hospital — 医院信息
# 医院列表(支持按名称搜索和定位)
python scripts/heren_mobile_wzrm.py hospital list [--name "医院名"] [--type 1] [--hos-type TYPE] [--area-id AREA] [--gis-lng 120.1] [--gis-lat 30.1] [--json]--type:1=挂号预约--gis-lng/--gis-lat: 经纬度,用于最近医院距离计算
典型工作流程
0. 选择系统医院(前置步骤)
首次使用必须先选择一个医院系统,后续所有操作均基于该医院:
# 交互式选择系统医院
python scripts/heren_mobile_wzrm.py config hospital
# 查看当前配置确认
python scripts/heren_mobile_wzrm.py config show如果未选择系统医院就执行其他命令,会自动弹出医院选择界面。
1. 登录与就诊人选择
1.1 登录 → 获取用户信息
# 交互式登录:提示输入手机号 → 发送验证码 → 输入验证码 → 登录
python scripts/heren_mobile_wzrm.py auth login
# 也可直接传入手机号跳过第一步
python scripts/heren_mobile_wzrm.py auth login --phone <phone>也可以分两步执行:先
python scripts/heren_mobile_wzrm.py auth send-sms <phone>,再python scripts/heren_mobile_wzrm.py auth login --phone <phone> --sms-code <code>
登录成功后立即获取用户信息:
python scripts/heren_mobile_wzrm.py auth user-info --json1.1.1 登录成功但 herenId 为空 → 先完善注册
user-info 或 auth status 显示 herenId 为空时(登录返回无 herenId 且 applicationNewRegister: 0),先走完善注册,再走添加就诊人:
# 完善注册(收集用户姓名/身份证/手机号/性别)
python scripts/heren_mobile_wzrm.py auth complete --name "<姓名>" --id-no "<身份证号>" --phone "<手机号>" --gender 1
# 完成后确认 herenId 已补齐
python scripts/heren_mobile_wzrm.py auth status1.2 获取就诊人列表 → 判空
# 查看已绑定的就诊人列表
python scripts/heren_mobile_wzrm.py patient list --json- 列表不为空:选择一个就诊人即可
- 列表为空:走查档绑定 → 建档流程(见
2. 添加就诊人)
1.3 选择就诊人
# 选择一个就诊人(设为 session 的 active patient)
python scripts/heren_mobile_wzrm.py patient select <patientId> --name "姓名"如果只有一个就诊人会自动选中。也可交互选择:
python scripts/heren_mobile_wzrm.py patient choose --json1.4 验证登录状态
python scripts/heren_mobile_wzrm.py auth status注意
- 登录后 session 持久化到
~/.heren-mobile-wzrm/session.json,后续命令自动读取 patient select设置的patientId会作为后续所有命令的默认就诊人- 如需切换就诊人,再次调用
patient select即可
2. 添加就诊人(列表为空时)
2.1 确认登录状态
python scripts/heren_mobile_wzrm.py auth status2.2 收集就诊人信息
| 字段 | 说明 | 示例 |
|---|---|---|
| 姓名 | 真实姓名 | <姓名> |
| 身份证号 | 18位身份证 | <身份证号> |
| 手机号 | 11位手机号 | <手机号> |
| 性别 | 1=男, 2=女 | 1 |
| 证件类型 | 01=身份证(默认), 02=护照 | 01 |
2.3 先查档绑定
python scripts/heren_mobile_wzrm.py patient add-by-treated --name "<姓名>" --id-no "<身份证号>" --phone "<手机号>" --gender 1 --json2.4 查档未返回 patientId → 回退建档
python scripts/heren_mobile_wzrm.py patient add --name "<姓名>" --id-no "<身份证号>" --phone "<手机号>" --gender 1 --json2.5 错误处理
| 错误信息 | 含义 | 处理方式 |
|---|---|---|
| "证件号或就诊人已存在" | 已绑定 | 直接 patient list 复用 |
| "未查询到相关档案信息"(999301) | 无历史记录 | 回退建档 |
| "该身份证号已被其他用户绑定" | 被占用 | 确认身份证号 |
2.6 设置新就诊人
python scripts/heren_mobile_wzrm.py patient select <patientId> --name "<姓名>"2.7 验证
python scripts/heren_mobile_wzrm.py patient list --json
python scripts/heren_mobile_wzrm.py patient detail <patientId> --json3. 预约挂号
⚠️ 用户只给医生名时:必须反问科室。 例如"挂王医生的号" → 立刻反问"王医生在哪个科室?"。拿到科室名后才 reg doc-list <deptCode>。
3.1 科室 → 医生
# 先查科室
python scripts/heren_mobile_wzrm.py reg dept-list --json
# 再查科室下医生
python scripts/heren_mobile_wzrm.py reg doc-list <deptCode> --json3.2 查询号源(必须)
python scripts/heren_mobile_wzrm.py reg number-source '<schedule_data_json>' --json3.3 预约挂号
python scripts/heren_mobile_wzrm.py reg book <schId> --schedule-data '<schedule_data_json>' --number-source '<number_source_json>' --json3.4 查看/取消
python scripts/heren_mobile_wzrm.py reg my-list --json
python scripts/heren_mobile_wzrm.py reg cancel <orderId> --json温州市人民医院挂号无需支付,预约成功即完成。预约成功后提醒用户可微信搜索「温州市人民医院就诊助手」小程序同步查看挂号信息。
4. 查询检验报告
4.1 报告列表
python scripts/heren_mobile_wzrm.py query reports --header-type jy --json
python scripts/heren_mobile_wzrm.py query reports --header-type jc --json
python scripts/heren_mobile_wzrm.py query reports --header-type tj --json4.2 报告详情
# 检查报告详情(--header-type jc 列表的详情)
python scripts/heren_mobile_wzrm.py query report-detail <reportId> [--extend EXTEND] --json
# 检验报告详情(--header-type jy 列表的详情)
python scripts/heren_mobile_wzrm.py query report-detail-checkout <reportId> [--rep-type 1|2] [--extend EXTEND] --json透传规则: 如果报告列表返回了
extend字段,查详情时必须通过--extend原样传入。
JSON 输出
所有数据命令支持 --json 参数:
python scripts/heren_mobile_wzrm.py patient list --json
python scripts/heren_mobile_wzrm.py reg dept-list --jsonAPI 环境
| 环境 | Base URL |
|---|---|
prod | https://netphs.eheren.com/gateway |
Agent 注意事项
- 需要就诊人的命令默认使用 session 中的活跃
patientId,可通过--patient-id覆盖 --json适用于所有返回数据的命令- 认证状态跨调用持久化在
~/.heren-mobile-wzrm/session.json - 预约挂号必须提供
--schedule-data和--number-source