检测机器数据接口

仪器自动收样 → 解析 19 项 → 自动生成报告(可选自动打印)|三种接入口可分别开关,共用同一条流水线
配置:加载中… TCP:— 密钥:— ← 返回报告页

1接入口配置

配置文件:config/instrument.json ·  标「改完需重启」的项目要重启服务才生效;标「热生效」的改完立即生效。
① 文件夹监听(仪器工作站把结果导出成文件)改完需重启
识别 .csv / .xlsx / .txt / .hl7 / .astm / .pdf;同一文件「大小与修改时间连续两次一致」才会处理(半写保护), 处理完移动到 data/archive/<日期>/,解析失败的文件移到 data/inbox/_failed/。
② HTTP 推送接口(带密钥,给工作站 / 中间件 / 操作员终端)热生效
请求头必须带 X-API-Key: <密钥>(见下面第 2 块)。请求体支持四种: application/json(结构化结果)、text/plain(HL7 或 ASTM 报文原文)、 multipart/form-data(字段名 file,等同文件夹里的文件)、 application/json 里的 text 字段(报文原文)。 密钥不对返回 401。加 ?force=true 可对同一指纹强制重出报告。
③ TCP 监听(网口仪器:HL7 MLLP / ASTM LIS2-A2)改完需重启
默认关闭、默认只绑 127.0.0.1(不对外网开放)。HL7 按 MLLP 包帧(0x0B…0x1C 0x0D),收到后回 MSA|AA|<消息号>;ASTM 按 E1381 帧(STX + 帧号 + 数据 + ETX/ETB + 校验和 + CR LF),多帧自动拼接, 每帧回一个 ACK(校验和不符回 NAK 且不入库)。
正在读取配置…

2API Key(仪器侧 / 中间件要填这个)

密钥只在保存后写入 config/instrument.json;重置后请同步更新仪器侧配置。

3最近接收记录(默认 50 条)

时间来源样本号识别项数未识别 重复报告编号状态错误
加载中…
接收日志文件:data/instrument/events.jsonl

4投放测试(走同一条流水线,不会自动打印)

把文件拖到这里,或点击选择文件
支持 .csv / .xlsx / .pdf / .txt / .hl7 / .astm / .json
也可以直接粘贴报文原文(HL7 / ASTM / JSON),点下面按钮投放:
等待投放。投放结果会直接显示在这里,并写入上面的接收记录。
检测机器接法说明(点开):三种接法怎么设置 · 报文示例 · 去重规则 · 自动打印注意事项 · 常见故障

一、三种接法分别怎么设置

① 文件夹监听(最常用):适合「仪器工作站能把结果导出成文件」的场景。在仪器工作站/中间件里设置 导出目录=本页「监听目录」(默认 data/inbox,即项目目录下的 data\inbox),导出格式选 CSV / Excel / TXT, 文件名随意(没有样本号时会用文件名兜底生成)。仪器每导出一份,服务在 1 个轮询周期内自动接收、出报告, 之后把原文件归档到 data/archive/<日期>/。
② HTTP 推送:适合「工作站 / 中间件 / 操作员终端」能发 HTTP 的场景。用 POST 打 <服务地址> + api/instrument/push(本页「推送地址」框里已给出完整 URL), 请求头加 X-API-Key: <密钥>: JSON 结构化结果直接入库;HL7 / ASTM 报文用 text/plain 原文发过来;也可以 multipart/form-data 用字段名 file 上传文件。密钥错误返回 401。
③ TCP 监听:适合「仪器自带网口、主动往 LIS 推」的场景。在仪器上把 LIS/主机地址设为服务所在电脑的 IP、 端口设为本页配置的 TCP 端口(默认 12000,本页示例自检用 12001),协议选 HL7(MLLP)或 ASTM(LIS2-A2)。 默认关闭且只绑 127.0.0.1;如果仪器在另一台电脑上,才需要把绑定地址改成该网卡 IP(改完需重启服务)。

二、报文示例(可直接复制到下面「投放测试」里试)

HL7 v2(每行以 CR 结尾,网络传输时外面包 MLLP:0x0B … 0x1C 0x0D):

MSH|^~\&|BS240|LAB|P020|REPORT|20260925103000||ORU^R01|MSG0001|P|2.3.1
PID|1||20260925-A002||张三||19780520|M
OBR|1||20260925-A002|19项生化
OBX|1|NM|ALT^丙氨酸氨基转移酶||165|U/L|9-50|H|||F
OBX|2|NM|GLU^空腹葡萄糖||6.6|mmol/L|3.9-6.1|H|||F

ASTM(LIS2-A2)(每行以 CR 结尾;线路层每帧为 STX + 帧号 + 数据 + ETX/ETB + 校验和 + CR LF,多帧拼接):

H|\^&|||BS240^1|||||||P|LIS2-A2|20260925103000
P|1||20260925-A002||张三||19780520|M
O|1|20260925-A002||^^^19项生化|R
R|1|^^^ALT^丙氨酸氨基转移酶^L|165|U/L|9-50|H||F||||20260925103000
R|2|^^^GLU^空腹葡萄糖|6.6|mmol/L|3.9-6.1|H||F
L|1|N

JSON(结构化直接入库):

{"sample_no": "20260925-A003", "name": "李四", "sex": "男", "age": 40,
 "collected_at": "2026-09-25 09:30", "values": {"ALT": 25.3, "GLU": 5.2},
 "lab_refs": {"ALT": "9-50", "GLU": "3.9-6.1"}}

项目名可以是编码(ALT)、中文名(丙氨酸氨基转移酶)或别名(谷丙转氨酶 / 空腹血糖),统一由报告系统内置的 19 项指标库匹配(与「上传检测数据」用的是同一套匹配逻辑)。参考区间写法 9-50、3.9-6.1、 <5.2、≥1.0 都能识别;报文里带的单位与区间只用于报告展示,血脂 / 血糖 4 项的判定仍按指南分级带。

三、去重规则

指纹 = sha256(样本号 + "|" + 按编码排序的「编码=数值」串)。同一指纹再次到达时记为「重复」, 只写日志、不重复生成报告(避免仪器重发导致重复出报告 / 重复打印)。接收记录里「重复」列会标红。 确实要用同一份结果重出报告时,在投放测试勾选 force=true,或推送时加 ?force=true。 重启服务不会丢这个记忆——指纹会从 events.jsonl 重新载入。

四、自动打印(auto_print)注意事项

默认关闭。打开后,每次成功接收并生成报告都会真的往默认打印机送一份纸, 无人值守场景下请务必确认:① 打印机里有纸、不缺墨;② 仪器不会重复推送同一份结果(有去重兜底); ③ 需要「先审后打」时把 auto_report 也关掉,改为人工在报告页生成。本页的「投放测试」不会触发自动打印。

五、常见故障

1) 识别 0 项(matched=0):报文里的项目名不在 19 项里,或列分隔符不对。看接收记录「未识别」列的提示, 提示会逐条列出没匹配上的项目名;HL7 用 | 分字段、^ 分子字段,ASTM 用 | 分字段、 ^ 分子字段、多结果项用 \ 分隔——分隔符不对会整段读不出。
2) 端口被占用:启动日志会写「TCP 监听启动失败(地址:端口):…」,接收记录里也会记一条错误。换个端口保存后重启服务即可; 注意同一台机器上服务端口(默认 8920)与仪器 TCP 端口不能冲突。
3) 样本号重复 / 判成重复报文:仪器用同一个样本号推了两次同样的结果,第二次会标「重复」并不再出报告; 如果确是同一受检者需要重做一份报告,请用 force=true。
4) 文件丢进 inbox 没反应:确认文件扩展名在支持列表里、文件已经写完(写入中不会处理)、 监听目录配置正确、服务在运行(文件夹监听开启时才轮询);解析失败的文件会被移到 data/inbox/_failed/, 接收记录里有一条带中文错误的原因。
5) 报告生成失败:接收记录「状态」列显示 report_failed、「错误」列给原因(例如 Edge 渲染超时)。 原始报文已归档、数据已入 data/instrument/reports/,可在报告页手工重出。

六、数据落地位置

原始报文 data/instrument/raw/<日期>/<时间戳>_<来源>.<扩展名>; 接收日志 data/instrument/events.jsonl(每行一条 JSON); 报告数据模型 data/instrument/reports/<报告编号>.json(供追溯 / 重打); 报告 PDF output/报告_<报告编号>.pdf;归档原件 data/archive/<日期>/。