目前接触的LIS行业不到2年,浅谈一下对LIS通讯协议的理解。通讯协议解析主要的模式无非3中,HL7、ASTM、String 。通常标准的仪器厂家以前两种格式居多,String格式为字符串解析,常用于尿检仪,或格式不是很常见的数据处理。
大致先说一说HL7解析:
直接上代码:
我缩减了部分项目,该仪器为优利特5260,为标准的HL7格式。至于每行代码的大致意思,在通讯协议里面是可以看到的。
HL7通讯协议以及格式大同小异,目前采用的是NHapi.Base.dll 动态库进行的解析,效率以及兼容上,能够满足大多数HL7仪器的需求。
动态库下载地址:动态库
下面讲下改动态库的大致用法:
private void HL7(string messageString)
{
PipeParser parser = new PipeParser();
IMessage message = parser.Parse(messageString);
#region 测试结果上传
if (message.GetStructureName() == "ORU_R01")//结果消息
{
var version = message.Version;
NHapi.Model.V231.Message.ORU_R01 oru_r01 = message as NHapi.Model.V231.Message.ORU_R01;
if (oru_r01 == null) return;
if (oru_r01.MSH.ProcessingID.ProcessingID.Value != "P") return;//消息处理 ID。取值:“P”-样本、工作单查询信息; “Q”-质控计数结果信息;在 Ack 消息中,它与之前接收到的消息一致
foreach (var patient_results in oru_r01.PATIENT_RESULTs)
{
var pid = patient_results.PATIENT.PID != null ? patient_results.PATIENT.PID : null;
if (pid == null) continue;
foreach (var order in patient_results.ORDER_OBSERVATIONs)
{
GWLISMachineReport machineReport = new GWLISMachineReport();
#region 病人信息
var patientName = pid.GetPatientName(0);
if (patientName != null