翼度科技»论坛 编程开发 .net 查看内容

LIS中的HL7如何解析?

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
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# 代码解析如下。
首先构造类如下:
  1. private string hl7_msg_str;
  2. /// <summary>
  3. /// hl7的消息字符串
  4. /// </summary>
  5. public string Hl7_msg_str
  6. {
  7.     get { return hl7_msg_str; }
  8.     set { setHl7_msg_str(value); }
  9. }<br><br>private void setHl7_msg_str(string str)
  10. {
  11.     hl7_msg_str = str;
  12.     hl7_protocol_msg = new HL7Lib.Base.Message(str);
  13. }
复制代码
解析类:
  1.   public override object decoder(object data)
  2.   {
  3.       string rlt = (string)data;<br><br>      HL7_DD_Info hl7_dd_info = new HL7_DD_Info();
  4.       hl7_dd_info.Hl7_msg_str = rlt;<br><br>      string HL7_msg_name = "";
  5.       List<ResultInfo> list = decoderData(out HL7_msg_name, hl7_dd_info, GlobalParams.devConfig.Devcode);<br><br>      hl7_dd_info.List_result = list;
  6.       hl7_dd_info.HL7_msg_name = HL7_msg_name;<br><br>      return hl7_dd_info;
  7.   }
复制代码
  1. decoderData方法定义不是永恒不变的,这里面需要你自己修改的,但大概如下:
复制代码
  1. private List<ResultInfo> decoderData(out string hl7MesName, HL7_DD_Info hl7_dd_info, string devcode)
  2. {
  3.      lock (this)
  4.      {
  5.          hl7MesName = "";
  6.          List<ResultInfo> list = new List<ResultInfo>();<br><br>         try
  7.          {
  8.              List<Segment> segmentList = hl7_dd_info.Hl7_protocol_msg.Segments;
  9.              //string barcode = "000000000000";
  10.              string barcode = string.Empty;
  11.              string app_id = "0";
  12.              string chkdate = "";
  13.              string chktime = "";<br><br>             hl7MesName = hl7_dd_info.getValue(segmentList, "MSH", "Message Control ID", 0);
  14.              barcode = hl7_dd_info.getValue(segmentList, "OBR", "Placer Order Number", 0);
  15.              app_id = hl7_dd_info.getValue(segmentList, "OBR", "Filler Order Number", 0);
  16.              app_id = this.updateId(app_id);<br><br>
  17.              string datetime = hl7_dd_info.getValue(segmentList, "OBR", "Observation Date/Time", 0);
  18.                     if (!string.IsNullOrEmpty(datetime))
  19.                     {
  20.                         try
  21.                         {
  22.                             DateTime date = DateTime.ParseExact(datetime, "yyyyMMddHHmmss", null);
  23.                             chkdate = date.ToString(Constant.DATE_FORMAT_SHORT);
  24.                             chktime = date.ToString("HH:mm:ss");
  25.                         }
  26.                         catch (Exception e)
  27.                         {
  28.                             chkdate = DateTime.Now.ToString(Constant.DATE_FORMAT_SHORT);
  29.                             LogUtils.writeErrLog("解析日期失败,按当天处理");
  30.                         }
  31.                     }
  32.                    foreach (Segment segment in segmentList)//遍历消息段
  33.                    {
  34.                        string segmentName = segment.Name.ToUpper();<br><br>                       switch (segmentName)
  35.                        {
  36.                            case "OBX":
  37.                                #region 消息在OBX时,取得具体检查项目结果
  38.                                if (string.IsNullOrEmpty(app_id) || segment.Fields.Count < 6)
  39.                                    continue;<br><br>                               string tag = segment.Fields[2].Components[0].Value;   //判断是项目 还是 图片编码
  40.                                ResultInfo ri = null;
  41.                                switch (tag)
  42.                                {
  43.                                    case "NM":
  44.                                        ri = new ResultInfo();
  45.                                        ri.DevCode = GlobalParams.devConfig.Devcode;
  46.                                        ri.Date = chkdate;
  47.                                        ri.Time = chktime;
  48.                                        ri.Id = app_id;
  49.                                        ri.Channel = segment.Fields[3].Components[0].Value;
  50.                                        ri.Val = segment.Fields[5].Components[0].Value; ;
  51.                                        ri.BarCode = barcode;
  52.                                        list.Add(ri);
  53.                                        break;
  54.                                    case "ED":
  55.                                        string base64str = segment.Fields[5].Components[3].Value.Replace("<CR>", "");
  56.                                        byte[] ImgBytes = Base64.GetDecoderBytes(base64str);//将图片的Base64格式转换成二进制格式
  57.                                              string ImgPath = Base64.BytesToImg(ImgBytes, chkdate, app_id, segment.Fields[3].Components[0].Value);//通过二进制转换成图片,并返回图片所在路径
  58.                                        if (string.IsNullOrEmpty(ImgPath))
  59.                                            continue;<br><br>                                       ri = new ResultInfo();
  60.                                        ri.DevCode = GlobalParams.devConfig.Devcode;
  61.                                        ri.Date = chkdate;
  62.                                        ri.Time = chktime;
  63.                                        ri.Id = app_id;
  64.                                        ri.BarCode = barcode;
  65.                                        ri.Channel = segment.Fields[3].Components[0].Value; // channel
  66.                                        ri.Val = ImgPath;
  67.                                        ri.IsImage = true;
  68.                                        list.Add(ri);
  69.                                        break;
  70.                                     default:
  71.                                         break;
  72.                                 }
  73.                                 #endregion
  74.                                 break;
  75.                             default:
  76.                                 break;
  77.                         }<br><br>                    }
  78.                 }
  79.                 catch (Exception e)
  80.                 {
  81.                 }
  82.                 return list;
  83.             }
  84.         }
复制代码
 
  1. <br><br>
复制代码
来源:https://www.cnblogs.com/ZaraNet/p/18582018
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具