文章目录
- 基于`IRIS`,动态解析`HL7`消息
- 什么是`HL7`
- `HL7` 版本
- `HL7` 消息结构
- 段(`Segment`)
- 字段(`Field`)
- `HL7` 数据类型
- 在`IRIS`中查看`HL7`数据结构
- 传统方式拼写`HL7`消息结构
- 动态对象解析`HL7`消息结构。
基于IRIS,动态解析HL7消息
什么是HL7
HL7是Health Level 7的简称,是一种用于在医疗信息系统中传输和交换健康信息的国际标准。HL7最初于1987年由医疗设备和系统供应商共同开发,并且成为医疗领域中最广泛使用的信息交换标准之一。
HL7的目标是促进医疗信息系统之间的互操作性,确保不同系统之间可以有效地共享和传输健康数据。它定义了一组标准化的消息格式和协议,以便医疗信息可以在不同的系统之间进行传递和解释。这些消息可以涉及患者的基本信息、诊断结果、医嘱、医疗事件等。
通过使用
HL7标准,不同医疗信息系统可以实现互操作性,使得医疗机构、临床医生、药剂师和其他医疗专业人员可以更容易地访问和共享患者的健康信息。这有助于提高医疗服务的质量、安全性和效率,并支持临床决策、医疗研究和流程优化。
简单理解为HL7是一种在医疗领域里的消息格式,可类比为JSON、XML等、
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版本2的2.5.1版本介绍。
HL7 消息结构
HL7消息结构由不同的段(Segment)和字段(Field)组成,每个字段包含一个特定的数据元素。以下是HL7消息的常见组成部分:
- 消息头(
Message Header):消息头包含了用于标识和控制消息的元数据,如消息类型、发送方、接收方、消息控制标识符等。 - 段(
Segment):段是消息的基本单位,用于组织和描述特定类型的数据。常见的HL7段包括PID(患者标识段)、PV1(就诊信息段)、OBX(观测结果段)等。 - 字段(
Field):字段是段的组成部分,用于存储特定的数据元素。每个字段都有一个唯一的编号,如PID-3(患者ID字段)或OBX-5(观测结果值字段)。 - 重复字段(
Repeating Field):某些字段可以包含多个重复的值,例如多个电话号码或多个地址。重复字段使用相同的字段编号,并通过子字段(Subfield)来区分不同的值。 - 子字段(
Subfield):子字段是用于区分重复字段中的不同值的子元素。子字段由分隔符进行分隔,并使用相对位置或标识符来引用。 - 分隔符(
Delimiter):HL7消息使用特定的分隔符字符来分隔字段、段和子字段。常见的分隔符包括竖线(|)、脱字符(^)、波浪号(~)等。 - 控制字段(
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~CODE18,CODE16不同的重复代码&子组件分隔符,例如:|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()包含了可重复的PR1与ROL()消息组。4注解处 - 表示如果消息组不为空,那么PR1为必填消息段。

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

以上就是IRIS中查看HL7消息结构的简单介绍,接下来我们用代码写HL7消息。
传统方式拼写HL7消息结构
首先我们来看一下用硬编码方式拼写如下HL7消息:
AL1|2||^CAT DANDER||CODE257
硬编码流程如下:
- 首先通过
Portal查看HL7消息结构中AL1消息段。 - 找到
AL1消息段字段的位置,在执行拼串。
ClassMethod HardCodeHL7()
{
s fs = "|"
s Segment = "AL1"
s SetIDAL1 = 1
s AllergenTypeCode = ""
s AllergenCodeMnemonicDescript = "^PENICILLIN"
s AllergySeverityCode = ""
s AllergyReactionCode = "CODE16~CODE17~CODE18"
s str = Segment _ fs _ SetIDAL1 _ fs _ AllergenTypeCode _ fs _ AllergenCodeMnemonicDescript _ fs _ AllergySeverityCode _ fs _ AllergyReactionCode
q 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.RawContent
s 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.RawContent
s 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工具验证通过:



















