← 返回文档总览
专项健康管理服务 · 工程交付文档

接口需求清单

面向后端研发 / 前端研发 / 测试 / 联调对接的接口契约文档。定义用户端、运营后台、医生后台三端全部数据交互接口,含免登录激活、报告上传、状态机流转、AI 解读、审核审批、建议书、咨询与随访、客户 360、工单、穿戴数据等 12 大分类共 36 个 REST 端点与 1 组 WebSocket 事件。

36个 REST 端点(12 分类)
9类 WebSocket 事件(IM 咨询)
18个标准错误码(含业务场景码)
3端对接(用户/运营/医生)
Owner:后端研发 V2.1 对接基线 状态:评审通过
1

对接总览

协议与公共约定

协议与鉴权

  • Base URL:https://api.you-thealth.cn/api
  • HTTPS + JSON,UTF-8 编码
  • 免登录激活换取短期 Token
  • 除激活类接口外均携带 Token

公共请求头

  • Authorization: Bearer {token}
  • X-App-Ver 客户端版本
  • X-Biz-Line 业务线标识
  • X-Request-Id 幂等/追踪可用(建议)

统一响应结构

  • code 业务码(0 为成功)
  • msg 提示信息
  • data 业务数据(可空)
  • traceId 链路追踪
三条业务线(基础健康管理 / 慢病专项 / 肿瘤专项)页面结构完全一致,业务数据通过请求头与路径中的业务线维度隔离;除线上咨询、随访、学术评审等个别差异化字段外,接口契约在三条业务线间复用。

端点索引

免登录鉴权

链接激活 · 身份识别

S1–S4

报告上传

拍照 / PDF / 多张

U1–U5

进度 / AI 解读

4 节点 · 解析

P1–P4

各级审核

材料 / 医助 / 医生 / 主任

R1–R8

建议书

生成 / 编辑 / 下载

G1–G4

问卷 / 咨询

跳题 · 72 小时会话

Q1–Q3

随访 / 360 / 工单

计划 · 补录 · 聚合

F1–F3

穿戴 / 文件

指标 · 通用存储

W1–W2
2

免登录鉴权

链接激活 · 身份识别
端点method请求参数响应格式鉴权错误码
/auth/activate
(链接激活)
POST ticket(激活票据)、bizLine(业务线)、channel(渠道)、openId(可选,微信) {code,msg,data:{userId,token,expiresIn,isNew,serviceId}} 免登录票据20101 票据失效 / 20102 已过期
无需账号密码打开链接即激活;服务闭环第一步,防重放(单次票据、有效期)。
/auth/identityGET ticket / userKey {data:{customerId,name,gender,age,services:[{serviceId,status}]}} 免登录20103 身份不可识别
/auth/refreshPOST refreshToken {data:{token,expiresIn}} RefreshToken20104 Refresh 失效
/auth/sessionGET — {data:{valid,serviceId,progress,contactPhone}} 需 Token401 / 20101
免登录提权必须收敛于激活票据机制。一旦 Token 或会话泄露,应支持即时作废;微信内链接激活后回调签名须校验来源域名。
3

报告上传

拍照 / PDF / 多张 / 删除 / 进度
端点method请求参数响应格式鉴权错误码
/report/upload/imagePOST image(multipart)、serviceId、type(体检/影像)、可多页 {data:{fileId,url,thumbUrl,ocrStatus,exifAware}} 需 Token20201 文件过大 / 20204 非图片
/report/upload/pdfPOST pdf(单 PDF ≤20MB)、serviceId、页范围 {data:{fileId,pageCount,size,ocrStatus}} 需 Token20202 PDF 解析失败
/report/upload/multiPOST files[](≤20 张/次)、逐张 image 或 pdf、次序 {data:{items:[{fileId,ok,err}],overall:"partial"/"all"}} 需 Token20205 批量超限 / 20203 单张失败
/report/upload/{id}DELETE — {code,msg} 需 Token404 / 20206 已提交不可删
/report/upload/taskGET taskId / serviceId {data:{progress,stage,fileCount,totalBytes,status}} 需 Token404
体检报告须在 1 年内(有效期校验在提交审核时执行);上传阶段允许多张图片与 PDF 混传,目标是"拍照即可识别结构"。未提交审核前允许增删,提交后锁定。
4

报告进度查询 · AI 报告解读

状态机 · OCR 与指标提取
端点method请求参数响应格式鉴权错误码
/report/statusGET serviceId {data:{nodes:[{key,label,time,operator}],current,overall:"pending/processing/done"}} 需 Token404
/report/detailGET serviceId {data:{images[],metrics[],abnormal[],aiSummary}} 需 Token404
/ai/parsePOST reportId、files[]、options(OCR+指标提取+初步结论) {data:{taskId,status,progress}} 需 Token20301 解析排队 / 20302 模型异常
/ai/parse/{reportId}GET — {data:{ocrText,metrics[],abnormalFlags[],conclusion,tos,suggestion}} 挂起/就绪/失败 需权限20303 未就绪
AI 解读结果仅作为医助/医生的"参考",最终结论必须由医助确认与医生背书,AI 结论不得直接呈现给客户或独立出书面结论,以规避"非诊疗"合规红线。
5

各级审核

材料 → 医助 → 医生初审 → 主任复审
端点method请求参数响应格式鉴权错误码
/review/material/listGET分页 / status / bizLine{data:{list,total,page}}运营401 / 403
/review/material/{id}/approvePOSTremark(可选){data:{nextNode:"ai_parse"}}运营20401 材料不完整
/review/material/{id}/rejectPOSTreason必填、退回节点{code,msg}运营20402 退回原因必填
/review/assistant/listGET分页 / 业务线{data:{list,total}}运营401 / 403
/review/assistant/{id}GET—内含 aiReference(富文本+AI 参考)运营404
/review/assistant/{id}/submitPOSTdraft富文本、aiRefResult核对结论、riskLevel{data:{nextNode:"doctor"}}运营20403 核对项缺失
/review/doctor/listGET分页 / 医生维度{data:{list,total}}医生401 / 403
/review/doctor/{id}/apply-codePOSTassessBody富文本、signPhone{data:{sent:true,expiresIn}} 发送短信签名验证码医生20501 验证码限频 / 20502 手机号不匹配
/review/doctor/{id}/assessPOSTassessBody、smsCode、recommendation{data:{nextNode:"chief"}} 携带短信号签提交医生20503 签名验证码错误 / 20504 评估未填写必填项
/review/chief/{id}GET—含 doctorAssess 预览主任404
/review/chief/{id}/finalizePOSTcomment、决定通过{data:{nextNode:"suggestion"}}主任20601 二次签名缺失
/review/chief/{id}/revertPOSTreason必填、目标节点{code,msg} 专家撤回主任20602 撤回原因必填
评估流水线状态机:材料审核 → AI 解析 → 医助评估 → 医生初审 → 主任确认 → 建议书 → 完成。除主任可"专家撤回"外,运营/医助/医生在同节点内可退回材料端;任一环节携带签名与操作溯源日志。
6

建议书生成与下载

生成 / 编辑 / 预览 / PDF
端点method请求参数响应格式鉴权错误码
/suggestion/generatePOSTserviceId、合并主任结论与医生评估{data:{suggestionId,status,pdfReady}}医生/主任20701 缺少评审结论
/suggestion/{id}GET—{data:{content,version,status}}需 Token404
/suggestion/{id}/editPUTcontent富文本、version乐观锁{data:{version:v+1}} 仅待确认态可编辑医生20702 版本冲突 / 20703 非可编辑状态
/suggestion/{id}/confirmPOSTsignInfo确认签名{data:{status:"confirmed"}}医生20704 未签名不可确认
/suggestion/{id}/pdfGET—application/pdf 流式下载(可加水印)需 Token20705 PDF 未就绪
建议书为最终客户交付物,PDF 生成须加时间戳、平台落款与"本建议书不替代诊疗"免责声明;下载密钥可一次有效,防止外泄。
7

健康问卷 · 线上咨询

条件跳题 · 72 小时会话
端点method请求参数响应格式鉴权错误码
/questionnaire/templateGETbizLine、version{data:{items:[{id,type,branchRules}]}} 含条件跳题规则需 Token401
/questionnaire/submitPOSTanswers[]、按跳题逻辑强校验{data:{score?,riskFlag,nextValid}}需 Token20801 必答遗漏 / 20802 跳题非法
/consult/createPOSTserviceId、topic、需在服务内{data:{sessionId,expiryAt(now+72h)}}需 Token20901 会话已存在
/consult/listGET分页 / 状态{data:{sessions[],unread}}需 Token401
/consult/{id}/messagePOSTcontent、type(text/image)、客户端 msgId{data:{serverMsgId,ts}}需 Token20902 会话已过期(72h)
线上咨询会话固定 72 小时有效期,过期后仅可查看历史、不能再发消息;届时提示客户通过新链接/新服务重新发起,保障回复时效与合规留痕。
8

随访 · 客户 360 · 线下工单 · 穿戴 · 文件

第1/2/3次 · 聚合 · 指标
端点method请求参数响应格式鉴权错误码
/followup/planGETserviceId{data:{cycles:[{seq:1/2/3,dueAt,status}]}}运营401
/followup/{id}/phone-recordPOSTcycle、callAt、outcome、note补录{data:{recordId}}运营21001 呼叫状态异常
/followup/{id}/taskPOSTdateRange、assignee{data:{taskId,plan}}运营21002 计划冲突
/customer/{id}/360GET—{data:{profile,reports[],services[],consults[],followups[],orders[],risk}}/运营 / 医生21101 无查看权限
/ticket/createPOSTtype(体检预约/线下就诊)、slot、prefer{data:{ticketId,status,dispatch}}需 Token21201 槽位已满
/ticket/{id}GET—{data:{status,history[]}}需 Token404
/wearable/metricGETfrom/to、bindDeviceId{data:{series[],interval}}需 Token21301 绑定失效
/file/uploadPOSTfile(≤50MB)、scope{data:{fileId,url}} 内容安全未过则 21402需 Token21401 类型受限 / 21402 安全审核不通过
/file/{id}GET—application/octet-stream需 Token404
客户 360 视图为运营/医生共用的聚合入口:跨三条业务线的全部服务、报告、咨询、随访、工单与穿戴数据集中呈现,助力"以客户为中心"的整体把控。
9

WebSocket 线上咨询事件

IM · 实时推送

连接端点:wss://api.you-thealth.cn:8443/ws?token={jwt}。消息为 JSON 文本,携带 traceId 与递增序列 seq。

事件类型方向字段说明
message.new服务端→客户端sessionId,msgId,from,content,type,sentAt对外发消息的实时送达(72 小时会话内)
message.send客户端→服务端sessionId,clientMsgId,content,type客户端发起消息;服务端回 ack
ack服务端→客户端clientMsgId,serverMsgId消息落库回执,用于 UI 状态从"发送中→已发送"
message.delivered服务端→客户端msgId,to对方已接收(可达但未读)
message.read两端双向msgId,reader,timestamp对方已读,UI 更新"已读"标识与气泡角标
typing两端双向sessionId,state:"on/off"正在输入提示
presence.online服务端→客户端userId,activeAt会话对象上线(在线状态)
presence.offline服务端→客户端userId,leaveAt会话对象离线
session.expired服务端→客户端sessionId,expiredAt72 小时会话过期通知,清理 UI、禁止发送
WebSocket 仅承载实时交互(消息、已读、在线与过期通知);消息全文存 MySQL,历史通过 REST 拉取。断线重连须携带 lastSeq 做增量补齐,防丢消息。
10

标准错误码表

全局码 + HTTP 映射
codeHTTP含义处理建议
0200成功—
-1500系统内部错误展示兜底提示并上报 traceId
401401Token 缺失/失效/过期跳登录/重新激活
403403无权限(角色/业务线不符)提示无权访问
404404资源不存在提示已删除或链接失效
429429触发限频(发送/提交)引导稍后再试
20101400激活票据无效/失效引导重新获取链接
20102400激活票据过期引导重新获取链接
20103404身份不可识别工单或人工核验
20201400文件超过上传大小上限压缩后重传
20202400PDF 解析失败/损坏换格式或重新上传
20401422材料不完整无法通过审核补齐材料
20503400医生短信签名验证码错误重新获取/校验
20602422主任撤回原因未填写补充撤回原因
20702409建议书版本冲突刷新后重试
20902400咨询会话已超 72 小时过期新建服务重新发起
21201400体检预约/就诊槽位已满改期选择
21402400上传内容未通过安全审核移除违规内容后重传
调用双方需统一约定 code==0 判成功;HTTP 状态仅做传输层粗分类,业务判断一律以 code 为准。所有业务码在本表基础上追加,新码须同步登记本清单并评审。