网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > .Net >

LIS中的HL7如何解析?

时间:2024-12-02 15:47

人气:

作者:admin

标签:

导读:HL7(Health#160;Level#160;Severn,健康信息交换第七层协议)组织是一家非盈利性质的国际性组织,主要从事卫生保健环境临床和管理电子数据交换的标准开发。HL7组织参考了国际标准组织ISO(...

HL7(Health Level Severn,健康信息交换第七层协议)组织是一家非盈利性质的国际性组织,主要从事卫生保健环境临床和管理电子数据交换的标准开发。HL7组织参考了国际标准组织ISO(International Standards Organization),采用开放式系统互联OSI (Open System Interconnection)的通信模式,将HL7纳为最高的一层,也就是应用层。
HL7标准可以应用于多种操作系统和硬件环境,也可以进行多应用系统间的文件和数据交换。它是医疗领域不同应用系统之间电子数据传输的协议,主要目的是要发展各型医疗信息系统间,如临床、检验、保险、管理及行政等各项电子资料交换的标准;主要应用在医疗保健领域,特别是在住院患者急需的医护设施领域内(如医院)进行及时的电子数据交换。
HL7标准实现的功能:
◆ 信息交换(Message interchange)
◆ 软件组织(Software components)
◆ 文档与记录架构(Document and record architecture)
◆ 医学逻辑(Medical Logic)

C# 代码解析如下。

首先构造类如下:

private string hl7_msg_str;
/// <summary>
/// hl7的消息字符串
/// </summary>
public string Hl7_msg_str
{
    get { return hl7_msg_str; }
    set { setHl7_msg_str(value); }
}

private void setHl7_msg_str(string str)
{
    hl7_msg_str = str;
    hl7_protocol_msg = new HL7Lib.Base.Message(str);
}

解析类:

  public override object decoder(object data)
  {
      string rlt = (string)data;

      HL7_DD_Info hl7_dd_info = new HL7_DD_Info();
      hl7_dd_info.Hl7_msg_str = rlt;

      string HL7_msg_name = "";
      List<ResultInfo> list = decoderData(out HL7_msg_name, hl7_dd_info, GlobalParams.devConfig.Devcode);

      hl7_dd_info.List_result = list;
      hl7_dd_info.HL7_msg_name = HL7_msg_name;

      return hl7_dd_info;
  }
decoderData方法定义不是永恒不变的,这里面需要你自己修改的,但大概如下:
 private List<ResultInfo> decoderData(out string hl7MesName, HL7_DD_Info hl7_dd_info, string devcode)
 {
     lock (this)
     {
         hl7MesName = "";
         List<ResultInfo> list = new List<ResultInfo>();

         try
         {
             List<Segment> segmentList = hl7_dd_info.Hl7_protocol_msg.Segments;
             //string barcode = "000000000000";
             string barcode = string.Empty;
             string app_id = "0";
             string chkdate = "";
             string chktime = "";

             hl7MesName = hl7_dd_info.getValue(segmentList, "MSH", "Message Control ID", 0);
             barcode = hl7_dd_info.getValue(segmentList, "OBR", "Placer Order Number", 0);
             app_id = hl7_dd_info.getValue(segmentList, "OBR", "Filler Order Number", 0);
             app_id = this.updateId(app_id);


             string datetime = hl7_dd_info.getValue(segmentList, "OBR", "Observation Date/Time", 0);
                    if (!string.IsNullOrEmpty(datetime))
                    {
                        try
                        {
                            DateTime date = DateTime.ParseExact(datetime, "yyyyMMddHHmmss", null);
                            chkdate = date.ToString(Constant.DATE_FORMAT_SHORT);
                            chktime = date.ToString("HH:mm:ss");
                        }
                        catch (Exception e)
                        {
                            chkdate = DateTime.Now.ToString(Constant.DATE_FORMAT_SHORT);
                            LogUtils.writeErrLog("解析日期失败,按当天处理");
                        }
                    }
                   foreach (Segment segment in segmentList)//遍历消息段
                   {
                       string segmentName = segment.Name.ToUpper();

                       switch (segmentName)
                       {
                           case "OBX":
                               #region 消息在OBX时,取得具体检查项目结果
                               if (string.IsNullOrEmpty(app_id) || segment.Fields.Count < 6)
                                   continue;

                               string tag = segment.Fields[2].Components[0].Value;   //判断是项目 还是 图片编码
                               ResultInfo ri = null;
                               switch (tag)
                               {
                                   case "NM":
                                       ri = new ResultInfo();
                                       ri.DevCode = GlobalParams.devConfig.Devcode;
                                       ri.Date = chkdate;
                                       ri.Time = chktime;
                                       ri.Id = app_id;
                                       ri.Channel = segment.Fields[3].Components[0].Value;
                                       ri.Val = segment.Fields[5].Components[0].Value; ;
                                       ri.BarCode = barcode;
                                       list.Add(ri);
                                       break;
                                   case "ED":
                                       string base64str = segment.Fields[5].Components[3].Value.Replace("<CR>", "");
                                       byte[] ImgBytes = Base64.GetDecoderBytes(base64str);//将图片的Base64格式转换成二进制格式
                                             string ImgPath = Base64.BytesToImg(ImgBytes, chkdate, app_id, segment.Fields[3].Components[0].Value);//通过二进制转换成图片,并返回图片所在路径
                                       if (string.IsNullOrEmpty(ImgPath))
                                           continue;

                                       ri = new ResultInfo();
                                       ri.DevCode = GlobalParams.devConfig.Devcode;
                                       ri.Date = chkdate;
                                       ri.Time = chktime;
                                       ri.Id = app_id;
                                       ri.BarCode = barcode;
                                       ri.Channel = segment.Fields[3].Components[0].Value; // channel
                                       ri.Val = ImgPath;
                                       ri.IsImage = true;
                                       list.Add(ri);
                                       break;
                                    default:
                                        break;
                                }
                                #endregion
                                break;
                            default:
                                break;
                        }

                    }
                }
                catch (Exception e)
                {
                }
                return list;
            }
        }

 



温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信