文章目录

  • 基于`IRIS`,动态解析`HL7`消息
    • 什么是`HL7`
    • `HL7` 版本
    • `HL7` 消息结构
      • 段(`Segment`)
      • 字段(`Field`)
    • `HL7` 数据类型
    • 在`IRIS`中查看`HL7`数据结构
    • 传统方式拼写`HL7`消息结构
    • 动态对象解析`HL7`消息结构。

基于IRIS,动态解析HL7消息

什么是HL7

HL7Health Level 7的简称,是一种用于在医疗信息系统中传输和交换健康信息的国际标准。HL7最初于1987年由医疗设备和系统供应商共同开发,并且成为医疗领域中最广泛使用的信息交换标准之一。

HL7的目标是促进医疗信息系统之间的互操作性,确保不同系统之间可以有效地共享和传输健康数据。它定义了一组标准化的消息格式和协议,以便医疗信息可以在不同的系统之间进行传递和解释。这些消息可以涉及患者的基本信息、诊断结果、医嘱、医疗事件等。

通过使用HL7标准,不同医疗信息系统可以实现互操作性,使得医疗机构、临床医生、药剂师和其他医疗专业人员可以更容易地访问和共享患者的健康信息。这有助于提高医疗服务的质量、安全性和效率,并支持临床决策、医疗研究和流程优化。

简单理解为HL7是一种在医疗领域里的消息格式,可类比为JSONXML等、

HL7 版本

HL7版本2 定义了一系列电子消息以支持管理、后勤、财务和临床流程。自 1987 年以来,该标准定期更新,产生了 2.1、2.2、2.3、2.3.1、2.4、2.5、2.5.1、2.6、2.7、2.7.1、2.8、2.8.1、 2.8.2 版本。v2.x 标准向后兼容。

HL7版本3采用了基于XML的消息语法,并引入了RIM作为数据模型的基础。RIM是一个概念模型,用于描述医疗信息的结构和关系。它提供了一种统一的方式来定义和表示患者信息、诊断结果、医嘱、药物信息等。

HL7版本2相比,HL7版本3更加严格和复杂,涉及更广泛的医疗信息领域。它包括许多领域特定的信息模型和消息定义,如临床文档、药物管理、实验室结果等。

HL7版本3的设计目标是提供更加精确、规范和可扩展的医疗信息交换标准。它的数据模型和消息定义具有更强的表达能力和灵活性,支持复杂的医疗信息交互和语义互操作性。

然而,尽管HL7版本3在理论上具备更强的表达能力和语义一致性,但实际应用中面临着一些挑战。HL7版本3的复杂性和学习曲线较高,导致其采用和实施的难度较大。因此,在实际应用中,HL7版本2仍然是最常用的HL7标准版本。

本篇文章以与HL7版本22.5.1版本介绍。

HL7 消息结构

HL7消息结构由不同的段(Segment)和字段(Field)组成,每个字段包含一个特定的数据元素。以下是HL7消息的常见组成部分:

  1. 消息头(Message Header):消息头包含了用于标识和控制消息的元数据,如消息类型、发送方、接收方、消息控制标识符等。
  2. 段(Segment):段是消息的基本单位,用于组织和描述特定类型的数据。常见的HL7段包括PID(患者标识段)、PV1(就诊信息段)、OBX(观测结果段)等。
  3. 字段(Field):字段是段的组成部分,用于存储特定的数据元素。每个字段都有一个唯一的编号,如PID-3(患者ID字段)或OBX-5(观测结果值字段)。
  4. 重复字段(Repeating Field):某些字段可以包含多个重复的值,例如多个电话号码或多个地址。重复字段使用相同的字段编号,并通过子字段(Subfield)来区分不同的值。
  5. 子字段(Subfield):子字段是用于区分重复字段中的不同值的子元素。子字段由分隔符进行分隔,并使用相对位置或标识符来引用。
  6. 分隔符(Delimiter):HL7消息使用特定的分隔符字符来分隔字段、段和子字段。常见的分隔符包括竖线(|)、脱字符(^)、波浪号(~)等。
  7. 控制字段(Control Field):控制字段用于标识和控制特定段或字段的属性和行为,如是否可选、重复次数、数据类型等。

ADT_A01消息示例:

MSH|^~\&|ADT1|MCM|LABADT|MCM|198808181126|SECURITY|ADT^A01|MSG00001-|P|2.5.1
EVN|A01|198808181123
PID|||PATID1234^5^M11^^AN||JONES^WILLIAM^A^III||19610615|M||2106-3|677 DELAWARE AVENUE^^EVERETT^MA^02149|GL|(919)379-1212|(919)271-3434~(919)277-3114||S||PATID12345001^2^M10^^ACSN|123456789|9-87654^NC
NK1|1|JONES^BARBARA^K|SPO|||||20011105
NK1|1|JONES^MICHAEL^A|FTH
PV1|1|I|2000^2012^01||||004777^LEBAUER^SIDNEY^J.|||SUR||-||ADM|A0
AL1|1||^PENICILLIN||CODE16~CODE17~CODE18
AL1|2||^CAT DANDER||CODE257
DG1|001|I9|1550|MAL NEO LIVER, PRIMARY|19880501103005|F
DG1|001|I9|1550|MAL NEO LIVER, PRIMARY|19880501103005|A
PR1|2234|M11|111^CODE151|COMMON PROCEDURES|198809081123
ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^SMITH^ELLEN|199505011211
PR1|2234|M11|111^CODE151|COMMON PROCEDURES|198809081124
ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^SMITH^ELLEN|199505011212
PR1|2234|M11|111^CODE151|COMMON PROCEDURES|198809081125
ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^SMITH^ELLEN|199505011213
ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^SMITH^ELLEN|199505011214
ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^SMITH^ELLEN|199505011215
GT1|1122|1519|BILL^GATES^A
GT1|1122|1519|BILL^GATES^B
IN1|001|A357|1234|BCMD|||||132987
IN2|ID1551001|SSN12345677
ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^ELLEN|199505011201
ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^ELLEN|199505011202
ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^ELLEN|199505011203
IN1|001|A357|1234|BCMD|||||132988
IN2|ID1551001|SSN12345678
IN3|ID1551002|SSN12345679
IN3|ID1551002|SSN12345680
ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^ELLEN|199505011204
ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^ELLEN|199505011205
ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^ELLEN|199505011206
ACC|20230510154848^20230510154851|^111

HL7 标准包含256个事件、116个消息类型、139个段、55种数据类型、408个数据字典,涉及79种编码系统。

段(Segment

  • MSH - 消息头包含有关消息本身的信息。该信息包括消息的发送者和接收者、消息的类型以及发送的日期和时间。每个HL7消息都将MSH指定为其第一段。
  • EVN - 事件类型
  • PID - 患者信息包含有关患者人口统计信息,例如姓名、患者ID和地址。
  • NK1 - 近亲信息细分包含患者近亲的联系信息。
  • PV1 - 患者就诊信息部分包含有关患者住院时的信息,例如分配的位置和推荐医生。
  • PV2 - 患者就诊附加信息
  • AL1 - 病人过敏信息
  • DG1 - 诊断
  • ROL - 角色
  • IN1 - 保险
  • IN2 - 保险附加信息
  • ACC - 事故
  • ORC - 医嘱命令所做的检查项目
  • OBR - 关于诊断以及观察的请求信息,用于记录医嘱信息。
  • OBX - 用于记录观察的结果。
  • QRD - 查询定义段,用来定义查询的内容,查询时间、编码格式、优先等级、ID号、请求数据的最大值、请求方的信息、所要请求的内容、数据编码的部门信息。
  • QRF - 进一步定义查询内容。
  • DSP - 重复消息段,装载LIS返回的报告结果,需要用循环的方式把数据取出。

字段(Field

HL7消息的每个段都包含一个或多个字段。默认情况下,竖线(|)分割。

例如段AL1

AL1|1||^PENICILLIN||CODE16~CODE17~CODE18
  • AL1 - 消息头。
  • 第一位1表示 - SetIDAL1
  • 第二位""表示 - AllergenTypeCode
  • 第三位^PENICILLIN表示 - AllergenCodeMnemonicDescript
  • 第四位""表示 - AllergySeverityCode
  • 第五位CODE16~CODE17~CODE18表示 - AllergyReactionCode

其中|分隔符中可以包含其他的分隔符:

  • ^ 组件分隔符,表示该位置有多个属性,例如:|123^yx| 该位置是患者信息,123是患者编号,yx是患者名字
  • ~ 重复分隔符,例如:|CODE16~CODE17~CODE18CODE16不同的重复代码
  • & 子组件分隔符,例如:|KATE^SMITH&yx^ELLEN

HL7 数据类型

类型编码 类型说明
ST 字符串
TX 文本数据
FT 格式化文本
NM 数字
SI 序列ID
SN 结构化数据
ID HL7表的编码值
IS 用户定义表的编码
EI 实体标识符
DT 日期
TM 时间
CE 编码要素
CX 具有校验数位的扩展符合ID
XCN 扩展符合ID号和ID
XAD 扩展地址
XPN 扩展姓名
XTN 扩展通讯号码

IRIS中查看HL7数据结构

Portal中点击 Interoperability->交互操作->HL7 V2.X -> HL7 V2.X Schema结构。进入到Schema界面。

在界面展示了HL7所有版本,第一个页签展示了所有消息目录,我们点击之前的ADT_A01消息示例。

选择消息后可消息结构与返回消息类型。我们继续点击2.5.1:ADT_A01

界面展示了ADT_A01消息所有可用的段Segment,图中表示如下:

  • 1注解处 - 实线消息段表示为必填消息段。
  • 2注解处 - 虚线消息段表示为可选消息段。另外消息段名称后有括号()标识,表示为可重复消息段。
  • 3注解处 - 表示消息段组,表示可重复的消息段组,例如PR1grp()包含了可重复的PR1ROL()消息组。
  • 4注解处 - 表示如果消息组不为空,那么PR1为必填消息段。

点击消息段可展示对应消息段所有字段,这里点击MSH

  • 1注解处 - 表示字段是否必填。R-必填,O -选填
  • 2注解处 - 数据结构,可点击查看组件。组件用^分隔。
  • 3注解处 - 码表,表示该字段的值为枚举值,必须为码表里的值。

以上就是IRIS中查看HL7消息结构的简单介绍,接下来我们用代码写HL7消息。

传统方式拼写HL7消息结构

首先我们来看一下用硬编码方式拼写如下HL7消息:

AL1|2||^CAT DANDER||CODE257

硬编码流程如下:

  1. 首先通过Portal查看HL7消息结构中AL1消息段。
  2. 找到AL1消息段字段的位置,在执行拼串。
ClassMethod HardCodeHL7()
{s fs = "|"s Segment = "AL1"s SetIDAL1 = 1s AllergenTypeCode = ""s AllergenCodeMnemonicDescript = "^PENICILLIN"s AllergySeverityCode = ""s AllergyReactionCode = "CODE16~CODE17~CODE18"s str = Segment _ fs _ SetIDAL1 _ fs _ AllergenTypeCode _ fs _ AllergenCodeMnemonicDescript _ fs _ AllergySeverityCode _ fs _ AllergyReactionCodeq str
}
USER>w ##class(IHE.HL7.Demo).HardCodeHL7()
AL1|1||^PENICILLIN||CODE16~CODE17~CODE18

大家对于这种方式发现什么问题了吗?

问题如下:

  • 最直观的就是通过数位置拼串,一个位置数错,后面的所有串都是错的。
  • 大量重复的拼分隔符。
  • 如消息结构示例33消息段,那么工作量巨大,还容易出错。
  • 而且这只是拼HL7消息,如果解析HL7消息反过来数位置,简直就是灾难。

动态对象解析HL7消息结构。

基于以上传统方式的弊端,使用动态对象解析HL7消息结构。用法如下:

  • 解析消息示例:
s obj = ##class(IHE.HL7.Util).HL72OBJ(rawContent)
  • rawContent - hl7消息字符串

  • 获取消息字段通过动态对象点属性即可获取到值。

ClassMethod HL72OBJ(id)
{s hl7Obj = ##class(EnsLib.HL7.Message).%OpenId(id)s rawContent = hl7Obj.RawContents obj = ##class(IHE.HL7.Util).HL72OBJ(rawContent)q obj
}
USER>s obj = ##class(IHE.HL7.Demo).HL72OBJ(10)USER>w obj.MSH.EncodingCharacters
^~\&
USER>w obj.MSH.VersionID
2.5.1
USER>w obj.PID.PatientIdentifierList
PATID1234^5^M11^^AN
USER>zw  ##class(IHE.HL7.Demo).HL72OBJ(10)
{"MSH":{"FieldSeparator":"|","EncodingCharacters":"^~\\&","SendingApplication":"ADT1","SendingFacility":"MCM","ReceivingApplication":"LABADT","ReceivingFacility":"MCM","DateTimeOfMessage":"198808181126","Security":"SECURITY","MessageType":"ADT^A01","MessageControlID":"MSG00001-","ProcessingID":"P","VersionID":"2.5.1"},"EVN":{"EventTypeCode":"A01","RecordedDateTime":"198808181123"},"PID":{"SetIDPID":"","PatientID":"","PatientIdentifierList":"PATID1234^5^M11^^AN","AlternatePatientIDPID":"","PatientName":"JONES^WILLIAM^A^III","MothersMaidenName":"","DateTimeofBirth":"19610615","AdministrativeSex":"M","PatientAlias":"","Race":"2106-3","PatientAddress":"677 DELAWARE AVENUE^^EVERETT^MA^02149","CountyCode":"GL","PhoneNumberHome":"(919)379-1212","PhoneNumberBusiness":"(919)271-3434~(919)277-3114","PrimaryLanguage":"","MaritalStatus":"S","Religion":"","PatientAccountNumber":"PATID12345001^2^M10^^ACSN","SSNNumberPatient":"123456789","DriversLicenseNumberPatient":"9-87654^NC"},"NK1()":[{"SetIDNK1":"1","Name":"JONES^BARBARA^K","Relationship":"SPO","Address":"","PhoneNumber":"","BusinessPhoneNumber":"","ContactRole":"","StartDate":"20011105"},{"SetIDNK1":"1","Name":"JONES^MICHAEL^A","Relationship":"FTH"}],"PV1":{"SetIDPV1":"1","PatientClass":"I","AssignedPatientLocation":"2000^2012^01","AdmissionType":"","PreadmitNumber":"","PriorPatientLocation":"","AttendingDoctor":"004777^LEBAUER^SIDNEY^J.","ReferringDoctor":"","ConsultingDoctor":"","HospitalService":"SUR","TemporaryLocation":"","PreadmitTestIndicator":"-","ReadmissionIndicator":"","AdmitSource":"ADM","AmbulatoryStatus":"A0"},"AL1()":[{"SetIDAL1":"1","AllergenTypeCode":"","AllergenCodeMnemonicDescript":"^PENICILLIN","AllergySeverityCode":"","AllergyReactionCode":"CODE16~CODE17~CODE18"},{"SetIDAL1":"2","AllergenTypeCode":"","AllergenCodeMnemonicDescript":"^CAT DANDER","AllergySeverityCode":"","AllergyReactionCode":"CODE257"}],"DG1()":[{"SetIDDG1":"001","DiagnosisCodingMethod":"I9","DiagnosisCodeDG1":"1550","DiagnosisDescription":"MAL NEO LIVER, PRIMARY","DiagnosisDateTime":"19880501103005","DiagnosisType":"F"},{"SetIDDG1":"001","DiagnosisCodingMethod":"I9","DiagnosisCodeDG1":"1550","DiagnosisDescription":"MAL NEO LIVER, PRIMARY","DiagnosisDateTime":"19880501103005","DiagnosisType":"A"}],"PR1grp()":[{"PR1":{"SetIDPR1":"2234","ProcedureCodingMethod":"M11","ProcedureCode":"111^CODE151","ProcedureDescription":"COMMON PROCEDURES","ProcedureDateTime":"198809081123"},"ROL()":[{"RoleInstanceID":"45^RECORDER^ROLE MASTER LIST","ActionCode":"AD","RoleROL":"RO","RolePerson":"KATE^SMITH^ELLEN","RoleBeginDateTime":"199505011211"}]},{"PR1":{"SetIDPR1":"2234","ProcedureCodingMethod":"M11","ProcedureCode":"111^CODE151","ProcedureDescription":"COMMON PROCEDURES","ProcedureDateTime":"198809081124"},"ROL()":[{"RoleInstanceID":"45^RECORDER^ROLE MASTER LIST","ActionCode":"AD","RoleROL":"RO","RolePerson":"KATE^SMITH^ELLEN","RoleBeginDateTime":"199505011212"}]},{"PR1":{"SetIDPR1":"2234","ProcedureCodingMethod":"M11","ProcedureCode":"111^CODE151","ProcedureDescription":"COMMON PROCEDURES","ProcedureDateTime":"198809081125"},"ROL()":[{"RoleInstanceID":"45^RECORDER^ROLE MASTER LIST","ActionCode":"AD","RoleROL":"RO","RolePerson":"KATE^SMITH^ELLEN","RoleBeginDateTime":"199505011213"},{"RoleInstanceID":"45^RECORDER^ROLE MASTER LIST","ActionCode":"AD","RoleROL":"RO","RolePerson":"KATE^SMITH^ELLEN","RoleBeginDateTime":"199505011214"},{"RoleInstanceID":"45^RECORDER^ROLE MASTER LIST","ActionCode":"AD","RoleROL":"RO","RolePerson":"KATE^SMITH^ELLEN","RoleBeginDateTime":"199505011215"}]}],"GT1()":[{"SetIDGT1":"1122","GuarantorNumber":"1519","GuarantorName":"BILL^GATES^A"},{"SetIDGT1":"1122","GuarantorNumber":"1519","GuarantorName":"BILL^GATES^B"}],"IN1grp()":[{"IN1":{"SetIDIN1":"001","InsurancePlanID":"A357","InsuranceCompanyID":"1234","InsuranceCompanyName":"BCMD","InsuranceCompanyAddress":"","InsuranceCoContactPerson":"","InsuranceCoPhoneNumber":"","GroupNumber":"","GroupName":"132987"},"IN2":{"InsuredsEmployeeID":"ID1551001","InsuredsSocialSecurityNumber":"SSN12345677"},"ROL()":[{"RoleInstanceID":"45^RECORDER^ROLE MASTER LIST","ActionCode":"AD","RoleROL":"RO","RolePerson":"KATE^ELLEN","RoleBeginDateTime":"199505011201"},{"RoleInstanceID":"45^RECORDER^ROLE MASTER LIST","ActionCode":"AD","RoleROL":"RO","RolePerson":"KATE^ELLEN","RoleBeginDateTime":"199505011202"},{"RoleInstanceID":"45^RECORDER^ROLE MASTER LIST","ActionCode":"AD","RoleROL":"RO","RolePerson":"KATE^ELLEN","RoleBeginDateTime":"199505011203"}]},{"IN1":{"SetIDIN1":"001","InsurancePlanID":"A357","InsuranceCompanyID":"1234","InsuranceCompanyName":"BCMD","InsuranceCompanyAddress":"","InsuranceCoContactPerson":"","InsuranceCoPhoneNumber":"","GroupNumber":"","GroupName":"132988"},"IN2":{"InsuredsEmployeeID":"ID1551001","InsuredsSocialSecurityNumber":"SSN12345678"},"IN3()":[{"SetIDIN3":"ID1551002","CertificationNumber":"SSN12345679"},{"SetIDIN3":"ID1551002","CertificationNumber":"SSN12345680"}],"ROL()":[{"RoleInstanceID":"45^RECORDER^ROLE MASTER LIST","ActionCode":"AD","RoleROL":"RO","RolePerson":"KATE^ELLEN","RoleBeginDateTime":"199505011204"},{"RoleInstanceID":"45^RECORDER^ROLE MASTER LIST","ActionCode":"AD","RoleROL":"RO","RolePerson":"KATE^ELLEN","RoleBeginDateTime":"199505011205"},{"RoleInstanceID":"45^RECORDER^ROLE MASTER LIST","ActionCode":"AD","RoleROL":"RO","RolePerson":"KATE^ELLEN","RoleBeginDateTime":"199505011206"}]}],"ACC":{"AccidentDateTime":"20230510154848^20230510154851","AccidentCode":"^111"}}  ; <DYNAMIC OBJECT>
  • 组装HL7消息示例:

    s hl7 = ##class(IHE.HL7.Util).OBJ2HL7(obj)
    
    • obj - 动态对象
  • 为了组装大量消息,就以上述返回值直接转为HL7消息。包含33个消息端。

ClassMethod OBJ2HL7(id)
{s hl7Obj = ##class(EnsLib.HL7.Message).%OpenId(id)s rawContent = hl7Obj.RawContents obj = ##class(IHE.HL7.Util).HL72OBJ(rawContent)s hl7 = ##class(IHE.HL7.Util).OBJ2HL7(obj)q hl7
}
USER>zw ##class(IHE.HL7.Demo).OBJ2HL7(10)"MSH|^~\&|ADT1|MCM|LABADT|MCM|198808181126|SECURITY|ADT^A01|MSG00001-|P|2.5.1"_$c(13)_"EVN|A01|198808181123"_$c(13)_"PID|||PATID1234^5^M11^^AN||JONES^WILLIAM^A^III||19610615|M||2106-3|677 DELAWARE AVENUE^^EVERETT^MA^02149|GL|(919)379-1212|(919)271-3434~(919)277-3114||S||PATID12345001^2^M10^^ACSN|123456789|9-87654^NC"_$c(13)_"NK1|1|JONES^BARBARA^K|SPO|||||20011105"_$c(13)_"NK1|1|JONES^MICHAEL^A|FTH"_$c(13)_"PV1|1|I|2000^2012^01||||004777^LEBAUER^SIDNEY^J.|||SUR||-||ADM|A0"_$c(13)_"AL1|1||^PENICILLIN||CODE16~CODE17~CODE18"_$c(13)_"AL1|2||^CAT DANDER||CODE257"_$c(13)_"DG1|001|I9|1550|MAL NEO LIVER, PRIMARY|19880501103005|F"_$c(13)_"DG1|001|I9|1550|MAL NEO LIVER, PRIMARY|19880501103005|A"_$c(13)_"PR1|2234|M11|111^CODE151|COMMON PROCEDURES|198809081123"_$c(13)_"ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^SMITH^ELLEN|199505011211"_$c(13)_"PR1|2234|M11|111^CODE151|COMMON PROCEDURES|198809081124"_$c(13)_"ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^SMITH^ELLEN|199505011212"_$c(13)_"PR1|2234|M11|111^CODE151|COMMON PROCEDURES|198809081125"_$c(13)_"ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^SMITH^ELLEN|199505011213"_$c(13)_"ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^SMITH^ELLEN|199505011214"_$c(13)_"ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^SMITH^ELLEN|199505011215"_$c(13)_"GT1|1122|1519|BILL^GATES^A"_$c(13)_"GT1|1122|1519|BILL^GATES^B"_$c(13)_"IN1|001|A357|1234|BCMD|||||132987"_$c(13)_"IN2|ID1551001|SSN12345677"_$c(13)_"ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^ELLEN|199505011201"_$c(13)_"ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^ELLEN|199505011202"_$c(13)_"ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^ELLEN|199505011203"_$c(13)_"IN1|001|A357|1234|BCMD|||||132988"_$c(13)_"IN2|ID1551001|SSN12345678"_$c(13)_"IN3|ID1551002|SSN12345679"_$c(13)_"IN3|ID1551002|SSN12345680"_$c(13)_"ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^ELLEN|199505011204"_$c(13)_"ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^ELLEN|199505011205"_$c(13)_"ROL|45^RECORDER^ROLE MASTER LIST|AD|RO|KATE^ELLEN|199505011206"_$c(13)_"ACC|20230510154848^20230510154851|^111"_$c(13)

  • 7Edit工具验证通过:

基于`IRIS`,动态解析`HL7`消息相关推荐

  1. Java解析HL7消息进阶(解析自定义HL7消息)

    上一篇文章博主笼统的讲了HL7解析,以及解析完成的Message结构,详情移步

  2. HL7消息解析----去掉校验

    最近接触医院系统使用的HL7消息,网上找解析的办法,大部分都是手工解析的,自己用符号拆分解析,像我这种懒人是不会用的,终于让我找到hapi框架,用起来不要太方便,建议使用.只要模板版本对应hl7消息的 ...

  3. android消息发送字符串,android - 从Android客户端通过HTTP在HL7消息中发送base64字符串时遇到错误 - 堆栈内存溢出...

    我正在android客户端(API 17)中使用HL7消息,并使用Hapi库生成和解析HL7消息.当我传输小的字符串值时,该消息工作正常. 但是我必须通过Http将图像发送到HL7服务器,为此,我正在 ...

  4. Runtime底层原理--动态方法解析、消息转发源码分析

    了解了Runtime函数含义,我们就可以直接使用Runtime的API了,那接下来继续探究Runtime的源码,经过源码分析来更加深刻的了解Runtime原理. 开发应用 都知道Runtime很重要, ...

  5. 「智慧医疗」HL7消息解析实战Demo

    1.什么是HL7? 「智慧医疗」1分钟学会解析HL7协议数据 2. 怎样解析HL7数据? 2.1.交互模型 2.2.数据样例 解析前数据样例 +---------------------------- ...

  6. 列表解析python_基于Python列表解析(列表推导式)

    列表解析--用来动态地创建列表 [expr for iter_var in iterable if cond_expr] 例子一: map(lambda x: x**2, range(6)) [0, ...

  7. Protobuf动态解析那些事儿

    2019独角兽企业重金招聘Python工程师标准>>> 需求背景 在接收到 protobuf 数据之后,如何自动创建具体的 Protobuf Message 对象,再做反序列化.&q ...

  8. 浅谈一下个人基于IRIS后端业务开发框架的理解

    文章目录 浅谈一下个人基于IRIS后端业务开发框架的理解 现状 方案 具体实现 `Base` `Biz` `Data` `Filter` `Sql` `Imp`.`Ref` `Api` `Util` ...

  9. Linux centos7 DNS服务器基于bind正反解析服务的搭建

                                                 Linux centos7 DNS服务器基于bind正反解析服务的搭建 DNS的相关基础知识: 一.DNS-- ...

最新文章

  1. C语言-用gcc指令体验C语言编译过程
  2. 开发shell脚本检查Nginx实战分享
  3. 数据采集与网站统计实现全过程
  4. oracle安装必要的,CentOSOracle安装必要的软件创建数据库
  5. 剑指offer题目汇总
  6. django mysql 游标,MySQL Cursor 存储过程之游标与相关循环
  7. 案例:使用BeautifuSoup4的爬虫
  8. 怎样利用通达信公式选股?
  9. Unity3D 游戏资源提取工具
  10. linux打开txt文件命令_linux系统文件及常用命令
  11. windows笔记本触摸板的快捷键教程
  12. 安卓第三方接入登陆-新浪登陆
  13. calloc()函数
  14. [艾兰岛]制作传送门之搭建系列——kura酱长期更新
  15. pandas使用read_csv函数读取文件的前N行数据并保留表头、pandas使用read_csv函数读取制表符分割的文件(tab-delimited)、自定义设置sep参数
  16. 多语言id1033,2052
  17. Android手账本案例
  18. 163邮箱 提示xm002 NO SELECT Unsafe Login. Please contact kefu@188.com for help
  19. Ubuntu如何设置显示器不熄屏
  20. 调用链监控:Dapper、Istio... etc.

热门文章

  1. 爬虫代理哪家强?十大付费代理详细对比评测!
  2. visual assistant x 破解版使用方法及下载地址
  3. 一个小蜜蜂游戏的源代码
  4. 企业级网络性能优化 课内8 vlanif2in1
  5. 你是人见人捏的“软柿子”吗
  6. HTML 动态夜空特效
  7. 【计算机图形学】期末大作业_虚拟场景建模
  8. ES冷热分离架构设计:一招让你的ELK日志系统节省 50% 的硬盘成本
  9. module_param传递参数
  10. 《大明王朝》阴谋诡计,下三路招呼