Skip to main content

医生解读 API

AI 分析给出的是算法结论。医生解读是在同一份心电数据上,由执业医师复核 AI 结果并出具人工结论。

人工过程,时效以小时计

提交后由医生排队处理,不是秒级返回。请按分钟级轮询,详见轮询建议。

需单独开通,不含在套餐权益内

医生解读不包含在基础版、高阶版等任何套餐权益中—— 它是人工服务,额度按需单独约定。需要使用请联系我们开通,长程与短程两项可分别开通。 额度按数据时长扣减,见计费规则。


支持的分析类型​

分析接口解读提交接口
/api/v1/advanced/ecg/holter/fast/submit(长程快速分析)/api/v1/advanced/interpretation/holter
/api/v1/advanced/ecg/holter/submit(长程完整分析)/api/v1/advanced/interpretation/holter
/api/v1/advanced/ecg/analyze(ECG 完整分析)/api/v1/advanced/interpretation/ecg
/api/v1/basic/ecg/1-lead/analyze(ECG 基础分析)/api/v1/advanced/interpretation/ecg

两条长程通道共用同一个提交接口与同一份配额,两条短程通道同理。


计费规则​

医生解读按数据时长扣减额度,而不是按调用次数。长程与短程各扣各的额度。

类型规则
短程1 分钟记 1 次,超出部分每 1 分钟记 1 次,不足 1 分钟按 1 分钟计
长程每满 24 小时记 1 次;不足 24 小时的部分,不到 2 小时记 0.5 次,满 2 小时按 24 小时计
数据时长扣减
短程不超过 1 分钟1 次
短程超过 1 分钟、不超过 2 分钟2 次
短程超过 4 分钟、不超过 5 分钟5 次
长程不到 2 小时0.5 次
长程 2 小时(含)~ 24 小时1 次
长程超过 24 小时、不到 26 小时1.5 次
长程 26 小时(含)~ 48 小时2 次

解读流程​


接口列表​

接口方法说明
/api/v1/advanced/interpretation/holterPOST为一次长程分析申请医生解读(快速与完整通用)
/api/v1/advanced/interpretation/ecgPOST为一次 ECG 短程分析申请医生解读(基础与完整通用)
/api/v1/advanced/interpretation/result/:interpretationIdGET查询解读状态与结果

Step 1:申请解读​

POST /api/v1/advanced/interpretation/holter​

请求体参数​

参数类型必填说明
sourceIdstring是长程分析(快速或完整)提交接口返回的分析 ID,也就是查询该次分析结果时用的那个 ID

请求示例​

curl -X POST "https://api.heartvoice.com.cn/api/v1/advanced/interpretation/holter" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "sourceId": "2092896927501512704" }'

POST /api/v1/advanced/interpretation/ecg​

请求体参数​

参数类型必填说明
sourceIdstring是ECG 完整分析或基础分析响应体里的 recordId,与其它分析字段平级

请求示例​

curl -X POST "https://api.heartvoice.com.cn/api/v1/advanced/interpretation/ecg" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "sourceId": "2103548812345678901" }'

响应示例​

{
"errorCode": "0",
"msg": "成功",
"data": "2092896927501598321"
}

说明​

  • 返回值 data 为本次解读的 interpretationId,是字符串形式的 19 位数字,请勿按数值类型解析(JavaScript 等语言会丢失精度)。
  • 接口返回成功表示解读申请已受理,不代表医生已出结论。
  • 同一次分析不能重复申请,重复提交返回 000021,改用上次返回的 interpretationId 查询即可。
  • 长程分析结果为无效数据时不能申请解读,返回 000023。这类数据医生也判读不了,请重新采集。

错误响应​

HTTP 状态errorCode说明建议处理
400000005未开通医生解读,或剩余额度不足以覆盖本次数据时长医生解读不含在套餐权益内,请联系我们开通或追加额度
400000002sourceId 缺失或格式非法检查是否传了完整的 19 位 ID 字符串
400000019待解读的分析记录不存在,或不属于当前 API Key确认 sourceId 取自本 Key 的分析响应
400000020该分析尚未完成先轮询到分析 SUCCESS 再申请解读
400000021该分析已申请过医生解读直接用上次返回的 interpretationId 查询
400000023该分析结果为无效数据,无法申请解读重新采集后再分析,不要对同一份数据重试
429000006请求过于频繁降低请求频率后重试
500000022医生解读服务暂不可用稍后对同一个 sourceId 重试

Step 2:查询解读结果​

GET /api/v1/advanced/interpretation/result/:interpretationId​

路径参数​

参数类型必填说明
interpretationIdstring是申请解读时返回的 ID

请求示例​

curl -X GET "https://api.heartvoice.com.cn/api/v1/advanced/interpretation/result/2092896927501598321" \
-H "Authorization: Bearer YOUR_API_KEY"

返回字段说明​

字段类型说明
statusstring解读状态,取值见下表
reportobject解读结果,仅 status = SUCCESS 时非空

status 取值​

取值含义是否继续轮询
PROCESSING解读中是
SUCCESS解读完成,report 即为结果否
FAILED解读失败否

解读中示例​

{
"errorCode": "0",
"msg": "成功",
"data": {
"status": "PROCESSING",
"report": null
}
}

长程解读报告​

由 /api/v1/advanced/interpretation/holter 申请的解读返回该结构(快速与完整两条通道相同)。

report 是医生复核后的完整分析结果:与长程分析结果同构,同名字段含义完全一致,见长程分析结果 JSON 字段说明。在此之上多出下面三个字段。

字段类型说明
diagContentstring医生诊断结论。多行文本,换行为 \r\n
reportEcgFragmentsobject[]医生复核后勾选的代表性片段。每项含 label(节律标签)与 idx(片段起止采样点下标)。与分析结果里的 labelIdx 同类,区别是这份经过医生复核
pdfUrlstring医生出具的报告 PDF 下载地址,未上传时为 null
{
"errorCode": "0",
"msg": "成功",
"data": {
"status": "SUCCESS",
"report": {
"premature": {
"totalPAC": 0, "singlePAC": 0, "pairedPAC": 0, "pairedPACCnt": 0,
"bigeminyPAC": 0, "bigeminyPACCnt": 0, "triadPAC": 0, "triadPACCnt": 0,
"totalSVT": 0, "totalSVTCnt": 0,
"totalPVC": 4, "singlePVC": 2, "pairedPVC": 1, "pairedPVCCnt": 2,
"bigeminyPVC": 0, "bigeminyPVCCnt": 0, "triadPVC": 0, "triadPVCCnt": 0,
"totalVT": 0, "totalVTCnt": 0,
"totalPJC": 0, "singlePJC": 0, "pairedPJC": 0, "pairedPJCCnt": 0,
"bigeminyPJC": 0, "bigeminyPJCCnt": 0, "triadPJC": 0, "triadPJCCnt": 0,
"totalJT": 0, "totalJTCnt": 0
},
"SNB": null,
"SNT": {
"idx": [309735, 321922],
"maxBeatCount": 110,
"maxDuration": 60,
"totalDuration": 700
},
"hr": {
"avgHr": 99,
"minHr": 79,
"minHrIdx": 291866,
"maxHr": 138,
"maxHrIdx": 157900,
"maxTopHr": [
{ "hr": 138, "idx": 157900 },
{ "hr": 135, "idx": 158433 },
{ "hr": 132, "idx": 157379 },
{ "hr": 132, "idx": 158979 },
{ "hr": 132, "idx": 160646 }
],
"minTopHr": [
{ "hr": 83, "idx": 380846 },
{ "hr": 82, "idx": 409429 },
{ "hr": 81, "idx": 351327 },
{ "hr": 79, "idx": 291866 },
{ "hr": 78, "idx": 350439 }
]
},
"diagDescription": "记录全过程为窦性心律,部分时间PP差>0.16s;心率介于79~138次/分,平均心率99次/分,心率正常。偶发室性早搏,单发室早1次。",
"diagContent": "结论:\r\n1.窦性心律,窦性心律不齐\r\n2.偶发室性早搏\r\n",
"reportEcgFragments": [
{ "label": "SINGLE_PVC", "idx": [8538, 8651] },
{ "label": "SINGLE_PVC", "idx": [157900, 157987] },
{ "label": "PAIRED_PVC", "idx": [161975, 162178] }
],
"pdfUrl": "https://ecgdata-1255716792.cos.ap-shanghai.myqcloud.com/oem/1033064347457294336/2609081349599242.pdf?sign=xxx"
}
}
}

数据得不出结论时的返回:

{
"errorCode": "0",
"msg": "成功",
"data": {
"status": "SUCCESS",
"report": {
"premature": null,
"SNB": null,
"SNT": null,
"hr": null,
"diagDescription": "无效数据,请重新采集",
"diagContent": "结论:\r\n1.无效数据\r\n",
"reportEcgFragments": null,
"pdfUrl": "https://ecgdata-1255716792.cos.ap-shanghai.myqcloud.com/oem/1033064347457294336/2609081349599242.pdf?sign=xxx"
}
}
}

短程解读报告​

由 /api/v1/advanced/interpretation/ecg 申请的解读返回该结构。

字段类型说明
conclusionstring医生结论
labelsstring[]医生确认的疾病标签,医生未选标签时为空数组。标签字典见 ECG 高阶版 API 中的诊断标签对照表
{
"errorCode": "0",
"msg": "成功",
"data": {
"status": "SUCCESS",
"report": {
"conclusion": "窦性心律,可见房性早搏,未见明显 ST-T 改变。建议心内科门诊复查。",
"labels": ["SN", "PAC"]
}
}
}
两种报告结构完全不同

短程只有 conclusion 与 labels 两个字段;长程是一份与分析结果同构的嵌套对象,另带 pdfUrl。请按申请时用的接口写解析逻辑,不要用同一套字段读两种报告。

错误响应​

HTTP 状态errorCode说明
400000018解读记录不存在,或该记录不属于当前 API Key
429000006请求过于频繁
信封 errorCode 恒为 "0"

只要查询请求本身被正确处理,响应信封的 errorCode 就是 "0"。解读失败体现在 data.status = "FAILED",而不是信封的错误码,请不要把 status = FAILED 当作查询失败去重试。

轮询建议​

医生解读是人工过程,时效与医生排班有关,通常在小时级。

  • 提交后至少等待 5 分钟再发起第一次查询,之后每 5~15 分钟查询一次。
  • 总超时按业务需要设置,建议不低于 24 小时。
不要按秒轮询

解读进度由医生决定,高频查询不会让结果更早返回,反而容易触发 000006 频率限制。