config/instrument.json ·
标「改完需重启」的项目要重启服务才生效;标「热生效」的改完立即生效。
data/archive/<日期>/,解析失败的文件移到 data/inbox/_failed/。
X-API-Key: <密钥>(见下面第 2 块)。请求体支持四种:
application/json(结构化结果)、text/plain(HL7 或 ASTM 报文原文)、
multipart/form-data(字段名 file,等同文件夹里的文件)、
application/json 里的 text 字段(报文原文)。
密钥不对返回 401。加 ?force=true 可对同一指纹强制重出报告。
127.0.0.1(不对外网开放)。HL7 按 MLLP 包帧(0x0B…0x1C 0x0D),收到后回
MSA|AA|<消息号>;ASTM 按 E1381 帧(STX + 帧号 + 数据 + ETX/ETB + 校验和 + CR LF),多帧自动拼接,
每帧回一个 ACK(校验和不符回 NAK 且不入库)。
| 时间 | 来源 | 样本号 | 识别项数 | 未识别 | 重复 | 报告编号 | 状态 | 错误 |
|---|---|---|---|---|---|---|---|---|
| 加载中… | ||||||||
data/instrument/events.jsonl① 文件夹监听(最常用):适合「仪器工作站能把结果导出成文件」的场景。在仪器工作站/中间件里设置
导出目录=本页「监听目录」(默认 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_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/<日期>/。