ToB企服应用市场:ToB评测及商务社交产业平台
标题:
LIS中的HL7如何解析?
[打印本页]
作者:
梦见你的名字
时间:
2024-12-2 16:55
标题:
LIS中的HL7如何解析?
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); }
}<br><br>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;<br><br> HL7_DD_Info hl7_dd_info = new HL7_DD_Info();
hl7_dd_info.Hl7_msg_str = rlt;<br><br> string HL7_msg_name = "";
List<ResultInfo> list = decoderData(out HL7_msg_name, hl7_dd_info, GlobalParams.devConfig.Devcode);<br><br> hl7_dd_info.List_result = list;
hl7_dd_info.HL7_msg_name = HL7_msg_name;<br><br> 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>();<br><br> 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 = "";<br><br> 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);<br><br>
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();<br><br> switch (segmentName)
{
case "OBX":
#region 消息在OBX时,取得具体检查项目结果
if (string.IsNullOrEmpty(app_id) || segment.Fields.Count < 6)
continue;<br><br> 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;<br><br> 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;
}<br><br> }
}
catch (Exception e)
{
}
return list;
}
}
复制代码
<br><br>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4