LIS解码程序开发手册 - LISLiod

来源:瑞美 LIS 系统内部开发手册,作者 HEDY/zenghao,修订 158 次,2007年12月18日 文档性质:LIS 仪器接口开发入门指南,面向 LIS 工程师讲解如何将检验仪器数据接入 LIS/HIS 系统

一、核心概念

LISLiod(LIS 解码程序) 是一段小程序,自动将检验仪器产生的原始数据(格式复杂、难以直接使用)解码后存入 LIS/HIS 系统,作为仪器与 LIS/HIS 之间的桥梁。

四步法接入一台新仪器

  1. 分析仪器 — 定位仪器类型,确定数据获取方式
  2. 分析原始数据 — 最关键、最困难的环节,找出数据规律
  3. 编写 LIS 解码程序 — 基于 LISLiod 框架编写解码逻辑
  4. 调试 — 完善解码程序 + 调整报表格式 + 打印机测试

二、仪器分类与数据获取策略

类别特征数据获取方式典型仪器
第一类(淘汰型)老旧、接口损坏、使用少手工录入,跳过解码—
第二类(中小型)有 COM 接口,样本号由仪器输出通信程序直接截取串口数据 → 解码电解质仪、尿液分析仪
第三类(大型先进)复杂,完全解码困难,自带操作软件从仪器软件做接口:读本地数据库 / 读 result 文件大型生化、免疫分析仪
第四类(特殊)旧、用得少、有复杂图像、无标准接口钩子程序截结果 / 截屏获取图像—

三、原始数据分析方法

3.1 TXT 文本数据分析四步

  1. 找出每个标本的起始符与结束符(特殊 ASCII 字符)
  2. 找出每个标本的日期和样本号位置
  3. 找出每个项目数据或图像数据对应的位置
  4. 总结规律,写出解码算法

示例:FA-150 尿液分析仪

  • 起始符:ASCII 13,13,2,13,13,10
  • 结束符:ASCII 3
  • 单标本固定长度:276 字节
  • 日期位:6-25
  • 标本号:49-51
  • 各项目固定偏移:GLU(60-74)、BIL(82-96)、KET(104-118)、SG(126-140)、BLD(148-162)、PH(170-184)、PRO(192-206)、URO(214-221)、NIT(236-250)、LEU(258-272)

工具:“原始数据分析”工具 — 以 ASCII 码网格显示数据,颜色区分特殊字符,精确定位。

3.2 数据库型数据分析(仪器自带软件)

大型仪器厂商通常自带软件(小型 LIS 系统),通信+解码已经做好,直接访问厂商软件数据库取数据更准确高效。

前提条件:

  1. 了解数据库类型(Access / SQL Server 等)及驱动
  2. 确认是否有密码,向厂商索取
  3. 分析掌握表结构

示例:酶标仪 Access 数据库三表模型

  • Tb_method — 项目表(仪器所有项目)
  • Tb_plate — 板子表(一次标本做了多少个项目)
  • Tb_plate_data — 结果表(一个项目做了多少标本及结果值)

关键设计:记录板子表(plate)的最后 ID,而非样本表 ID,因为仪器成批做标本。

四、LISLiod 程序架构

整体分为 5 大功能模块 + 4 大代码层次。

4.1 五大功能模块

  1. 通信程序 — 从仪器串口/网络获取原始数据
  2. 解码算法程序 — 解析原始数据,提取项目结果
  3. 插入数据库的程序 — 将解码后数据写入 LIS/HIS 数据库
  4. 报告程序 — 生成检验报告
  5. 历史备份 — 原始数据备份

4.2 四大代码层次

  1. 前台界面层(MainFrm)

    • 五个按钮:HELP / SET / DECODE / DUG / STOP
    • F9 快捷键:查看仪器匹配信息和项目配置
    • 文本框显示当前样本解码结果
    • 右键菜单 → 恢复
  2. 解码类(DataDeCode)

    • 一次解码:从原始数据提取项目值 → 存入 DataXML
    • 二次解码(ChangeDataXML):对一次解码结果再处理(公式计算/条件判断)→ 最终结果
    • 事件驱动:DataInsert 事件触发数据库插入
    • 进度事件:FrmTrayIconChange
  3. 插入数据库类(DataInsertClass)

    • 订阅 DataInsert 事件
    • 质控数据插入 vs 普通结果数据插入(通过标本号与质控号匹配判断)
    • 关键字段:标本号 / 验单号 / 图片号 / 组合代码 / 科室代码 / 分类代码 / 仪器代码 / 样本代码 / 质控代码(3个) / 检验日期
    • 三分类血常规特殊处理(IsThreepic,三个图像插入)
  4. 配置文件操作类(PublicClass)

    • 全局静态类,管理 DataXML 和配置读写
    • 关键方法:BindDataXML() 传递数据、updateNode() 记录解码断点

4.3 核心设计模式

  • 事件驱动架构:解码完成 → 触发 DataInsert 事件 → 插入类响应
  • 断点续传:记录最后解码位置(lastendnum),程序重启后从断点继续
  • 配置驱动:所有仪器参数、项目对应关系全部在 XML 配置文件中
  • 可扩展:新增仪器只需修改 decode() 和 decode2() 两个方法 + 配置文件

五、配置文件体系

DecodeSetting.xml — 解码配置

<COMDATA>
  <BaseConfig>
    <date>日期</date>
    <repno>报告号</repno>
    <lastendnum>最后结束位置</lastendnum>
    <long>标本长度</long>
    <beginbyte>起始字节</beginbyte>
    <endbyte>结束字节</endbyte>
    <rawpath>raw/</rawpath>
  </BaseConfig>
  <setdecode>项目解码配置</setdecode>
</COMDATA>

KeyDecodeSetting.xml — 二次解码配置

DataInsertSetting.xml — 数据库插入配置

  • 根节点 <DataInsert>:标本号/图片号/日期的 DataXML 字段映射
  • <BaseConfig>:基础参数(组合代码/科室代码/分类代码/仪器代码/样本代码/3个质控标本号/启动方式/日期来源/自定义标本号/二次解码开关/多项目模式/数据库连接串/三分类图像开关)
  • <DoData>:手工指定仪器所有项目(name / codename / codenum)

配置程序

  • 选择数据库中的仪器 → 左边显示仪器项目
  • 中间是解码后项目 → 点对应生成到右边
  • 关键约束:中间项目代码必须和解码配置文件中的项目代码一致

六、关键工程要点

  1. 断点续传:updateNode() 保存解码进度,防止重复插入或遗漏
  2. 质控识别:标本号匹配质控号(zkbb1/2/3)时走质控插入流程
  3. 标本号为 -1:跳过(无效标本)
  4. 多项目模式 IsMuchItem:0=固定项目数(允许重名),1=不固定项目数(不允许重名)
  5. 自定义标本号 Isrepno:0=取仪器标本号,1=自定义自增
  6. 日期来源 Isdate:0=LIS 系统日期,1=仪器日期
  7. 质控三标本:zkbb1 / zkbb2 / zkbb3 三个质控标本号

七、对 LIS 工程师的能力要求

  1. 会看仪器 — 快速定位仪器类型和数据获取方案
  2. 熟悉 LIS 系统流程 — 了解 LIS 模块功能、库表结构、项目实施方法
  3. 会做线 — RS-232-C 接线规范(25针/9针、公母匹配)
  4. 沟通能力 — 与仪器操作员协调使用时间、获取配合
  5. 注意卫生 — 检验科生物安全防护

八、技术栈

  • 语言:C#(.NET Framework)
  • 数据库:Access(Microsoft.Jet.OLEDB.4.0)+ 可扩展其他
  • 通信:RS-232 串口通信为主
  • 配置格式:XML
  • 架构模式:事件驱动 + 配置驱动 + 断点续传

关联笔记: