#InterSystems IRIS for Health

0 关注者 · 894 帖子

InterSystems IRIS for Health™ 是全球第一个也是唯一一个专门为医疗应用程序的快速开发而设计的数据平台,用于管理全世界最重要的数据。它包括强大的开箱即用的功能:事务处理和分析、可扩展的医疗保健数据模型、基于 FHIR 的解决方案开发、对医疗保健互操作性标准的支持等等。所有这些将使开发者能够快速实现价值并构建具有突破性的应用程序。了解更多信息

文章 姚 鑫 · 七月 31, 2023 2m read

第八章 HL7 架构和可用工具 - 测试转换

显示段地址

要显示段地址,请将光标悬停在阴影列中的段名称上。工具提示显示以下内容:

  • 在虚拟属性路径中使用的段地址
  • 该段的描述性名称

显示字段地址

要显示字段地址,请将光标悬停在消息结构中的字段上。工具提示显示以下内容:

  • 在虚拟属性路径中使用的字段地址(作为数字)
  • 在虚拟属性路径中使用的字段地址(作为名称)
  • 指示该字段的语法规则的字符。字符可以这样开头:
Symbol Meaning
! (仅限 1) 该字段为必填项;它必须只发生一次。
? 01)该字段是可选的,但如果出现,则可能只出现一次。
+ 1 次或多次)该字段可以重复一次或多次。
* 0 次或多次)该字段可以重复零次或多次。
& 该字段可能存在,并且可能重复,但仅在某些条件下。
n* (0n) 该字段最多重复 n 次。
(m) m 是字段中的最大字符数。该字段的每次重复都可以包含此数量的字符。

批量消息

如果字段用尖括号 (<,>) 括起来,则它是指向子文档的链接。单击它可查看该文档的摘要报告和消息数据。

测试转换

要测试转换:

  1. 单击转换文档?。
  2. 对于选择数据转换,选择数据转换。
  3. 对于选择显示选项,请选择以下选项之一:
    • 仅转换结果 — 仅显示转换后的文档。
    • 原始消息和结果一起显示 -
0
0 125
文章 Lilian Huang · 七月 31, 2023 2m read

FHIR® SQL Builder或 Builder 是 InterSystems IRIS 医疗版数据平台 的一个组件。它是一种复杂的投射工具,用于将 InterSystems IRIS  医疗版数据平台FHIR 存储库中的数据创建为自定义的 SQL 模式,而无需将数据移动到单独的 SQL 存储库中。 Builder 专门设计用于与 InterSystems IRIS 医疗版数据平台中的 FHIR 存储库和多模型数据库配合使用。

Builder 的目标是使数据分析师和商业智能开发人员能够使用熟悉的SQL分析工具使用 FHIR,而无需学习新的查询语法。 FHIR 数据以复杂的有向图编码,无法使用标准 SQL 语法进行查询。基于图的查询语言 FHIRPath 旨在查询 FHIR 数据,但它是非关系型的。 Builder 使数据管理员能够使用表、列和索引创建其 FHIR 存储库的自定义 SQL 来投射,使数据分析师能够查询 FHIR 数据,而无需学习 FHIRPath 或 FHIR 搜索语法的复杂性。
存储库将加载 FHIR 资源,您所需要做的就是配置 FHIR SQL BUILDER。
对于配置,导航到http://localhost:55037/csp/fhirsql/index.

0
0 286
文章 姚 鑫 · 七月 30, 2023 3m read

第七章 HL7 架构和可用工具 - 使用 HL7 消息查看器页面

使用 HL7 消息查看器页面

HL7 提供了消息查看器页面。可以使用此页面显示、转换和导出 HL7 消息(外部文件或来自生产消息存档的消息)。

要访问此页面,请选择互操作性 > 互操作 > HL7 v2.x > HL7 v2.x 消息查看器。

选择选项

要指定要显示的文档:

  1. 对于文档源,选择文件、消息标头 ID 或消息正文 ID
  2. 指定要显示的文档:
    • 如果选择“文件”,请使用“浏览”选择文件。对于文件中的文档编号,输入要显示的文档编号。
    • 如果选择了“消息标头 ID”或“消息正文 ID”,请键入要显示的消息标头或消息正文的 ID
  3. 指定如何解析文档。为此,请为文档结构或架构选择以下选项之一:
    • 由业务服务接收 — 使用由业务服务分配的架构。如果选择此选项,请从下拉列表中选择业务服务。 此选项使能够确定特定业务服务将此文档分配到的 DocType
    • 使用特定架构类别/版本 - 从下拉列表中选择文档类别。
    • 使用特定的 DocType — 以类别:结构格式输入文档结构 (<MessageStructure>) 的名称。解析器使用此文档结构。
    • 使用内容声明的版本:名称 — 使用与文档中声明的文档类型关联的文档结构。
    • 使用对象存储的 DocType — 使用文档正文对象中声明的 DocType
0
0 255
文章 姚 鑫 · 七月 27, 2023 3m read

第四章 HL7 架构和可用工具 - 查看数据结构

查看数据结构

当单击“数据结构”列中的名称时,InterSystems 会显示该数据结构中的所有字段。这是 HL7 数据结构页面。显示的以下列是最有用的:

  • 组件列列出了可用于访问段内字段的数字。
  • 属性名称列列出了可用于访问段内字段的名称。
  • 单击“数据结构”列中的条目可深入了解详细信息。
  • 单击“代码表”列(如果有)中的条目可查看可在此字段中输入的有效代码。

当单击上面段结构页面中名为 2.3:XCN 的数据结构项时,将出现以下示例页面。该页面指出类别 2.3 数据结构 XCN 描述“扩展复合 ID 号和名称”并由 14 个字段组成。其中,有些是简单值,有些是数据结构,有些是代码。

有了这些信息,就可以为消息结构 2.3:ADT_A01 中的复杂 PR1grp().PR1:Surgeon 字段创建虚拟属性路径,如下所示:

PR1grp().PR1:Surgeon.familyname
PR1grp().PR1:Surgeon.degree

查看代码表

当单击“代码表”列中的名称时,它会列出并解释该字段的有效代码。这是 HL7 代码表页面。当单击上一节中显示的数据结构页面中名为 2.3:200 的代码表项时,将出现以下示例页面。

上面的示例示出类别2.3代码表200描述可以具有值LOMACD的“名称类型”。

0
0 161
文章 姚 鑫 · 七月 26, 2023 3m read

第三章 HL7 架构和可用工具 - 使用 HL7 架构结构页面

使用 HL7 架构结构页面

通过 HL7 架构页面,可以导入和查看 HL7 版本 2 架构规范。要显示此页面,请从主页中选择互操作性 > 互操作 > HL7 v2.x > HL7 v2.x 架构结构。有关使用此页面的一般信息,请参阅在产品中使用虚拟文档中的“使用架构结构页面”。

HL7 模式页面提供了一个附加选项卡:消息类型。此选项卡将两个消息结构标识为请求/响应对。

查看文档类型列表

要列出某个类别中的所有文档类型结构,请首先选择该类别,然后单击“DocType 结构”选项卡。

查看消息结构

要查看消息结构的内部组织,请从 HL7 架构页面上的 DocType 结构选项卡单击其名称(选择互操作性 > 互操作 > HL7 v2.x > HL7 v2.x 架构结构)。 InterSystems 产品使用以下视觉提示和命名约定在“结构”部分中显示消息的段结构。

  • 组成消息结构的段按从上到下的顺序列出。
  • 段名称必须全部大写。
  • 显示每个消息段的三个字母名称:MSHNTEPID 等。该名称指示 HL7 消息结构中该位置存在的段类型。包含选项、重复或包含一组其他段的段的名称会在名称中附加特殊字符。
  • 绿色虚线包围可选的段、组或字段。
  • 可以重复的段在段名称后附加了括号。例如,如果PID段可以重复,则出现PID()
0
0 145
文章 姚 鑫 · 七月 25, 2023 3m read

第二章 HL7 架构和可用工具 - HL7 模式和消息概述

HL7 模式和消息概述

InterSystems 产品可以处理和传递 HL7 消息,而无需使用架构来解析它,但将架构与消息关联允许执行以下操作:

  • 解析消息并访问以下字段值:
    • 数据转换
    • 路由规则
    • 自定义 ObjectScript 代码
  • 验证消息是否符合架构。

每个 HL7 消息均由消息类型标识,该消息类型在 MSHMessageType 字段 (MSH:9) 中指定。一些消息类型共享相同的消息结构。例如,在HL7版本2.3.1中,用于预先接纳患者的ADT_A05消息具有与ADT_A01接纳消息相同的结构。该架构指定 ADT_A05 消息具有结构类型 ADT_A01

为了解析 HL7 消息,需要两条信息:

  • 架构类别 — 这是 HL7 版本号,例如 2.3.12.7,或者它可能是 InterSystems 产品中定义的自定义架构的类别。production 从业务服务消息模式类别设置或从数据转换设置获取模式类别。尽管 HL7 消息在 MSHVersionID 字段中包含模式版本号 (MSH:12),但 InterSystems 不使用此值,因为许多应用程序并未一致地设置此字段。
  • 结构类型 - productionMSH:9 字段获取消息类型,然后检查架构定义以获取该消息的结构类型。
1
0 184
文章 姚 鑫 · 七月 23, 2023 3m read

第六十七章 开发Productions - ObjectScript Productions - Production品及其零部件的生命周期 - BO和适配器的生命周期

BO和适配器的生命周期

IRIS 自动管理每个业务操作的生命周期。

Production Startup

Production生产(或更改特定业务操作的配置)时, IRIS 自动为每个配置的业务操作类(即,为Production定义中列出的每个业务操作)执行以下任务:

  1. 它调用类的 OnProductionStart() 回调方法(如果已定义)。

OnProductionStart() 方法是一种类方法,它为Production配置中列出的每个业务操作类调用一次。业务操作类可以使用此回调来执行它可能需要的任何类范围的初始化。

  1. 它创建一个或多个后台进程来执行业务操作。

后台进程的数量由Production配置中业务操作的 PoolSize 属性决定。每个后台进程都称为业务操作的实例,并包含业务操作对象的实例。

如果满足以下条件, IRIS 只会为业务操作创建后台进程:

  • 业务操作类必须将其INVOCATION类参数设置为Queue
  • Production配置中业务操作的 Enabled 属性必须设置为 1(否则业务操作被视为已禁用)。已禁用的业务操作仍具有传入消息队列。在启用业务操作之前,不会处理发布到此队列的任何请求。
0
0 147
文章 姚 鑫 · 七月 22, 2023 3m read

第六十六章 开发Productions - ObjectScript Productions - Production品及其零部件的生命周期 - 业务流程的生命周期

业务流程的生命周期

每次Production启动时, IRIS都会为Production创建公共参与者池。ActorPoolSize设置的值确定池中的作业数。

在执行元池中的每个作业中,都有一个Ens.ActorEns.在一个对象中,该对象负责管理业务流程对其作业的使用。在一个Ens.Actor时称为执行元。

Production中的业务流程可以共享名为 Ens.Actor 的公共消息队列。此公共队列是发送到生产中没有自己的专用队列的任何业务流程的所有消息的目标。只要 Actor 有空托管业务流程,它们就会监听 Ens.Actor 队列。当请求到达 Ens.Actor 队列时,任何空闲的参与者都可以分配其作业来托管请求中指定的业务流程。 Ens.Actor 队列上的请求按照接收顺序进行处理。每个连续的请求都由下一个可用的参与者持续声明。

与业务服务和业务操作的生命周期不同,业务流程的OnInitOnTearDown 方法不会在业务流程启动或停止时被调用。相反,每次业务流程(InProcQueued)处理请求时都会执行这些方法。

0
0 117
文章 姚 鑫 · 七月 21, 2023 3m read

第六十五章 开发Productions - ObjectScript Productions - Production品及其零部件的生命周期 - Runtime

Runtime

Production运行时,业务服务会重复调用入站适配器的 OnTask() 方法。此 OnTask 循环由业务服务的 CallInterval 设置和 %WaitForNextCallInterval 属性控制,如下所示:

  1. 业务服务调用入站适配器的 OnTask() 方法。
  2. OnTask()IRIS 生产外部检查业务服务感兴趣的输入事件:
  • 如果找到输入,OnTask() 将调用关联业务服务对象的 ProcessInput() 方法。
  • 如果未找到输入,OnTask() 将控制权返回给业务服务,业务服务等待下一个 CallInterval 过去,然后返回到步骤 1
  • 可能存在多个输入事件。例如,如果业务服务使用File.InboundAdapter,则可能有多个文件在指定目录中等待。

如果有多个输入事件:

  • 通常,OnTask() 方法会根据需要多次调用 ProcessInput() 来处理所有可用的输入事件,直到找不到更多输入事件为止。
  • 或者,入站适配器可以限制 OnTask() 在每个 CallInterval 中仅调用一次 ProcessInput(),即使存在多个输入事件也是如此。
0
0 125
文章 姚 鑫 · 七月 20, 2023 3m read

第六十四章 开发Productions - ObjectScript Productions - Production品及其零部件的生命周期

此页面描述了Production及其组成部分的生命周期,以供参考。

Production的生命周期

Production启动

Production开始时,动作顺序如下:

  1. Production类被实例化;其可选的 OnStart() 方法执行。
  2. Production实例化每个业务操作并执行其可选的 OnProductionStart() 方法。
  3. Production实例化每个业务流程并执行其可选的 OnProductionStart() 方法。
  4. Production会清除上一次运行遗留的任何指标值的业务指标缓存。
  5. Production实例化每个业务服务并执行其可选的 OnProductionStart() 方法。
  6. Production过程处理已放入队列中的所有项目。这包括Production停止时排队的异步消息。
  7. Production现在接受来自外部 IRIS 的输入。

Production Shutdown

Production停止时,操作顺序如下:

  1. Production使每个业务服务脱机并执行其可选的 OnProductionStop() 方法。此操作会停止来自 IRIS 外部的所有请求。
  2. 所有业务主机都会收到进入静止状态的信号。
0
0 101
文章 姚 鑫 · 七月 19, 2023 2m read

第六十三章 开发Productions - ObjectScript Productions - 部署Production - 在目标系统上部署Production

管理门户自动执行将Productions从开发系统部署到实时系统的过程。本节介绍当在实时系统上加载Productions的新版本时,IRIS 会执行哪些操作。

获得部署包 XML 文件后,可以将其加载到目标系统上。在管理门户中,选择正确的命名空间并单击互操作性、管理、部署更改、部署,然后单击打开部署或打开本地部署按钮,具体取决于 XML 部署包位于服务器上还是本地计算机上。如果位于服务器计算机上,则“打开本地部署”按钮不处于活动状态。选择 XML 部署包文件后,表单会列出部署包中的新项和更改项,显示创建包时指定的部署说明,并允许指定以下部署设置:

  • 目标Production —指定将添加组件的Production。如果部署包包含来自源ProductionProduction类,则目标Production将设置为源Production且无法更改。否则, IRIS 将默认Production设置为当前打开的Production,但允许更改它。
  • 回滚文件—指定包含回滚信息的文件。回滚文件包含由部署替换的所有组件的当前定义。
  • 部署日志文件—包含由部署引起的更改的日志。
0
0 163
文章 姚 鑫 · 七月 18, 2023 4m read

第六十二章 开发Productions - ObjectScript Productions - 部署Production - 导出Production

导出Production

要使用管理门户导出ProductionXML,请打开Production,单击Production设置和操作选项卡,然后单击导出按钮。 IRIS 选择所有业务服务、业务流程、业务操作和一些相关类,然后显示以下表单以允许添加导出注释和其他组件。

还可以导出业务服务、流程或操作,方法是在Productions配置中选择组件,然后单击“操作”选项卡上的“导出”按钮。在这两种情况下,都可以通过单击其中一个按钮并选择一个组件来将其他组件添加到包中。以通过清除该复选框来从包中删除组件。

可以使用导出注释来描述部署包中的内容。例如,可以描述完整的Productions是否位于作为Productions更新的包或组件集中。当使用管理门户将包部署到目标系统时,会显示导出注释。

当导出部署包时,应该做出的第一个决定是目标系统是否具有旧版本的Productions

如果将Productions部署为新安装,应该:

  • 包括Production类的定义。
  • 包括Production设置。
  • 包括Production中使用的所有组件的定义。
  • 排除每个组件的Production设置(ptd 文件)。这将重复Production类中的定义。
0
0 151
文章 姚 鑫 · 七月 17, 2023 3m read

第六十一章 开发Productions - ObjectScript Productions - 部署Production

部署Production

通常,在开发系统上开发Production,然后在测试部署上完成并测试生产后,将其部署在实时生产系统上。本页介绍如何使用管理门户打包开发系统中的部署,然后将其部署到另一个系统上。它还描述了如何开发和测试对生产的更改,然后将这些更新部署到使用实时业务数据运行的系统。

部署Production概述

可以使用管理门户或 IDE 来部署Production。管理门户会自动执行一些需要使用 IDE 手动执行的步骤。如果有正在使用的实时Production,并且正在开发该Production的更新,则需要确保在不中断业务数据处理的情况下更新实时Production。在最简单的层面上,部署Production是通过从一个系统导出ProductionXML 定义并在目标系统上导入和编译 XML 来完成的。从开发到上线系统的成功部署最重要的问题是:

  • 确保 XML 部署文件具有所有必需的组件。
  • 在将部署文件部署到实时系统之前,先在测试系统上测试部署文件。
  • 确保部署文件加载到目标系统上而不中断实时Production

通常,将Production部署到实时系统是一个迭代过程,包括以下步骤:

  1. 从开发系统导出Production
  2. 在测试系统上部署部署文件。
0
0 107
文章 姚 鑫 · 七月 16, 2023 13m read

一篇文章了解IRIS/Caché编码方案

一直以来,编码问题像幽灵一般,不少开发人员都受过它的困扰。

试想你请求一个数据,却得到一堆乱码,丈二和尚摸不着头脑。有同事质疑你的数据是乱码,虽然你很确定传了UTF-8 ,却也无法自证清白,更别说帮同事 debug 了。

有时,靠着百度和一手瞎调的手艺,乱码也能解决。尽管如此,还是很羡慕那些骨灰级程序员。为什么他们每次都能犀利地指出问题,并快速修复呢?原因在于,他们早就把编码问题背后的各种来龙去脉搞清楚了。

ASCII

标准ASCII 码,使用7 位二进制数(最高位为0)来表示所有的大写和小写字母,数字09、半角标点符号,以及在英语中使用的特殊控制符号。

最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母a的编码是97,小写字母z的编码是122

IRIS/Caché中获取字符ASCII码与二进制字符串,如下代码示例:

USER>w $a("a")
97
USER>w ##class(M.Code).LogicalToDisplay(97)
10000110

经过如下二进制转十进制计算可得出 1+32+64 = 97

2**0 + 2**5 + 2**6 = 97

Unicode

GB2312GBKGB18030 都是中文编码字符集。

0
0 550
文章 姚 鑫 · 七月 16, 2023 2m read

第六十章 开发Productions - ObjectScript Productions - 从管理门户进行测试 - 调试Production代码

调试Production代码

调试的第一步是启用跟踪,如监控生产中所述。如果这没有揭示问题,可以使用调试器单步调试代码,如下所示:

  1. IDE 中编辑代码以在要开始调试的位置插入 BREAK 命令。
  2. 为使用要调试的类的业务主机启用前台设置。
  3. 开始Production。在步骤 2 中标记的作业在终端的前台运行。
  4. 当到达该 BREAK 命令时,终端将进入调试模式,可以单步调试代码。

启用 %ETN 日志记录

事件日志自动包含有关系统级异常(包括代码中的异常)的部分信息。默认情况下,这些事件日志条目的结尾如下:

-- logged as '-' number - @' quit arg1/arg2 }'

要获得有关此类错误的更完整信息:

  1. 将 ^Ens.Debug("LogETN") 全局节点设置为任意值。

这会导致 IRIS 记录系统级异常的附加详细信息。

  1. 重新运行认为导致异常的代码(例如,重新发送消息)。
0
0 76
文章 姚 鑫 · 七月 15, 2023 3m read

第五十九章 开发Productions - ObjectScript Productions - 测试和调试Production - 从管理门户进行测试

从管理门户进行测试

可以使用管理门户在开发、测试和调试Production时执行多项任务:

  • 能够查看和修改系统配置。
  • 能够启动和停止Production
  • 能够查看队列及其内容;消息及其详细信息;适配器和参与者及其状态;业务流程及其状态;配置项的代码和图形表示。
  • 能够查看、排序和有选择地清除事件日志条目。
  • 能够暂停(并稍后重新发送)连接暂时被阻止的消息。
  • 能够使用图形用户界面或通过输入 SQL SELECT 命令,按类别或消息内容过滤和搜索消息仓库中的特定消息。
  • 能够使用图形用户界面直观地跟踪消息活动。
  • 能够创建和查看统计报告。

对于开发人员来说,最有用的门户功能是不断收集运行时数据的监视服务、可用于向正在开发的产品发出模拟请求的测试服务以及记录业务主机发出的状态消息的事件日志。同时使用这些功能来生成测试数据并研究结果。

管理门户具有测试菜单,可以在其中测试业务主机和数据转换。它包含以下项目:

  • 业务主机-互操作性>测试>业务主机页面允许测试业务流程和业务操作。
  • 数据转换-此选项将带到另一个页面,可以在其中选择数据转换并单击测试。

使用测试服务

测试服务允许测试活动命名空间中正在运行的Production的业务流程或业务操作。

0
0 112
文章 姚 鑫 · 七月 14, 2023 2m read

第五十八章 开发Productions - ObjectScript Productions - 测试和调试Production

本主题介绍可用于测试和调试产品的工具。该信息对于故障排除和调整企业已在使用的Production软件也很有用。

纠正Production问题状态

如果Production暂停或出现问题,请阅读本节。

暂停Production

Production在队列中的所有异步消息可以被处理之前停止时,就会发生暂停Production。如果不手动清除这些异步消息,它们会在Production开始备份时自动处理。如果希望处理消息,则在开始暂停Production之前不需要其他步骤。

恢复陷入困境的Production

如果 IRIS 停止但Production没有正常关闭,Production将获得故障状态。如果在没有先停止Production的情况下重新启动 IRIS 或重新启动机器,就会发生这种情况。

在这种情况下,“恢复”命令将显示在“Production配置”页面上。单击“恢复”关闭并清理有问题的Production实例,以便可以在准备好时运行新实例。

或者可能需要使用命令行来恢复Production。请参阅使用 Ens.Director 启动和停止Production

0
0 93
文章 姚 鑫 · 七月 13, 2023 3m read

第五十七章 开发Productions - ObjectScript Productions - 不常见的任务 - 以编程方式使用查找表

IRIS 提供了名为 Lookup() 的实用函数,以便可以轻松地从业务规则或 DTL 数据转换中执行表查找。此功能仅在创建至少一个查找表并用适当的数据填充后才起作用。

有关定义查找表的信息,请参阅配置产品中的定义数据查找表。

如果需要比管理门户提供的更直接的查找表操作,请在类中使用 Ens.Util.LookupTable。此类公开查找表以通过对象或 SQL 进行访问。此外,它还提供类方法来清除表、将数据导出为 XML 以及从 XML 导入数据。

Ens.Util.LookupTable提供以下字符串属性:

TableName

查找表的名称,最多 255 个字符。可以通过在 IRIS 门户中选择“互操作性”、“配置”和“数据查找表”,然后选择“打开”来查看命名空间中定义的查找表。

KeyName

查找表中条目的键,最多 255 个字符。这是互操作性 > 配置 > 数据查找表页面上键字段的值。

DataValue

查找表中与此键关联的值,最多 32000 个字符。这是互操作性 > 配置 > 数据查找表页面上的值字段中的值。

示例 SQL 查询是:

SELECT KeyName,DataValue FROM Ens_Util.
0
0 86
文章 Michael Lei · 七月 13, 2023 1m read

前不久,北京市人民政府印发了《关于更好发挥数据要素作用进一步加快发展数字经济的实施意见》的通知。其中提到要“率先探索数据跨境流通”。今年1月,北京市互联网信息办公室也发文公示,首都医科大学附属北京友谊医院与荷兰阿姆斯特丹大学医学中心合作研究项目成为全国首个被北京网信办批准的数据出境安全评估案例(编号20220001)。可以预见,为更好发挥数据要素作用将来可能出现越来越多的跨境数据流通。那么我们今天仅仅看下,在医疗领域国际主要流行的数据标准都有哪些。

以下是国际数字医疗合作组织的主要统计(该组织协同了世界卫生组织WHO,OECD和33个不同的国家和地区)

从上表可以看出,数据共享领域 DICOM,HL7 v2, CDA, FHIR,v3 是主要的标准,在临床术语方面 ICD9/10/11, SNOMED 和Lionc是目前国际上各个国家和地区最主流的医疗数据标准。供大家参考。

相关阅读

FHIR标准和国际基于FHIR的互联互通实践

论集成标准的选择对医院信息集成平台建设的影响

对话:“数据二十条”与FHIR标准

原文链接:https://www.healthit.gov/topic/global-digital-health-partnership

0
0 512
文章 姚 鑫 · 七月 12, 2023 3m read

第五十六章 开发Productions - ObjectScript Productions - 不常见的任务 - 在适配器类中包含凭据

在适配器类中包含凭据

要在适配器类中包含生产凭证,请在类定义中执行以下操作:

  • 包括名为 Credentials 的设置。
  • 定义一个名为 CredentialsSet() 的方法,该方法使用 Credentials 设置的值作为键来查找 Credentials 表中的用户名和密码。然后实例化一个包含用户名和密码的凭据对象。

覆盖Production凭证

虽然Production凭证系统集中管理并将登录数据保留在源代码之外,但有时需要编写代码以从其他来源获取凭证。例如,代码可能会从 Web 表单或 cookie 中检索用户名和密码,然后将它们与 HTTP 出站适配器一起使用以连接到其他站点。

处理此问题的方法是在业务服务或业务操作代码中,在调用任何适配器方法之前执行以下两项操作:

  • 提供实例化凭证对象并向其分配用户名和密码值的代码
  • 请勿随后设置适配器 Credentials 属性或调用适配器 CredentialsSet() 方法,否则值可能会被重置。
  If .Adapter.Credentials="" {
     Set .Adapter.%CredentialsObj=##class(Ens.Config.
0
0 91
文章 Kelly Huang · 七月 12, 2023 4m read

FHIR 通过提供标准化数据模型来构建医疗保健应用程序并促进不同医疗保健系统之间的数据交换,彻底改变了医疗保健行业。由于 FHIR 标准基于现代 API 驱动的方法,因此移动和 Web 开发人员更容易使用它。然而,与 FHIR API 交互仍然具有挑战性,尤其是在使用自然语言查询数据时。

隆重推出FHIR - AI 和 OpenAPI 链应用程序,该解决方案允许用户使用自然语言查询与 FHIR API 进行交互。该应用程序使用OpenAILangChainStreamlit构建,简化了查询 FHIR API 的过程并使其更加用户友好。

 

FHIR OpenAPI 规范是什么?

OpenAPI 规范(以前称为 Swagger,目前是OpenAPI Initiative的一部分)已成为软件开发领域的重要工具,使开发人员能够更有效地设计、记录 API 并与 API 交互。 OpenAPI 规范定义了一种标准的机器可读格式来描述 RESTful API,提供了一种清晰一致的方式来理解其功能并有效地使用它们。

在医疗保健领域,FHIR 成为数据交换和互操作性的领先标准。为了增强FHIR的互操作能力, HL7正式记录了FHIR OpenAPI规范,使开发人员能够将FHIR资源和操作无缝集成到他们的软件解决方案中。

0
0 439
文章 Lilian Huang · 七月 9, 2023 5m read

#Embedded Python #HL7 #InterSystems IRIS for Health

写在回复社区帖子《Python能否动态创建HL7消息》中。

前提条件和设置

使用一个启用了集成的命名空间。
注意:USER命名空间默认不启用互操作性。
如果以下建议创建一个新的互操作性命名空间来探索功能。

# 切换到
ZN "[互操作性名称空间名称]"

# 启动交互式Python shell:
Do $SYSTEM.Python.Shell()

启动脚本

#Load dependencies

import datetime as dt
import uuid

# Cache current time in CCYYMMDDHHMMss format
hl7_datetime_now=dt.datetime.now().strftime('%Y%m%d%H%M%S')

# Create HL7 Message
hl7=iris.cls("EnsLib.HL7.Message")._New()

# Set the doc type
# 2.5.1:ORU_R01 - Unsolicited transmission of an observation message
hl7.PokeDocType("2.5.
0
0 390
文章 姚 鑫 · 七月 9, 2023 4m read

第五十三章 开发Productions - ObjectScript Productions - 不常见的任务 - 使用 Ens.Director 访问设置

使用 Ens.Director 访问设置

即使production未运行,类中的以下 Ens.Director 方法也允许检索生产设置:

GetAdapterSettings()

返回一个数组,其中包含所标识的配置项(业务服务或业务操作)的所有适配器设置的值。该数组由设置名称下标。可以使用 IRIS $ORDER 函数来访问数组的元素。此方法的第一个参数是一个字符串,其中包含由两个竖线 (||) 分隔的产品名称和配置项名称。返回值是状态值。如果状态值不是 $$$OK,则无法找到指定的生产名称 (myProd) 和配置项名称 (myOp) 组合。

 Set tSC=##class(Ens.Director).GetAdapterSettings("myProd||myOp",.tSettings)

GetAdapterSettingValue()

返回标识的配置项的命名适配器设置的值:业务服务或业务操作。第一个参数是一个字符串,其中包含由两个竖线 (||) 分隔的产品名称和配置项名称。第二个参数是配置设置的名称。第三个输出参数返回调用的状态值。例如:

 Set val=##class(Ens.Director).
0
0 110
文章 姚 鑫 · 七月 7, 2023 3m read

第五十一章 开发Productions - ObjectScript Productions - 不常见的任务

定义自定义实用函数

IRIS提供了一组可以从业务规则和DTL中调用的实用函数;这些在开发业务规则的Productions中使用的效用函数中有所描述。可以添加自己的功能,业务规则引擎和业务规则编辑器会自动适应您的扩展。

要添加新的效用函数:

  1. 创建一个新类,它是 Ens.Rule.FunctionSet 的子类。此类不得扩展任何其他超类,只能扩展 Ens.Rule.FunctionSet
  2. 对于希望定义的每个函数,将一个类方法添加到新函数集类中。不支持多态性,所以准确的说,你必须把这些类方法标记为final。可以在现有的 Ens.Util.FunctionSet 方法中查看这个(Ens.Util.FunctionSetEns.Rule.FunctionSet的超类)。
  3. 编译新类。新函数现在可用于规则表达式。要调用这些函数,请使用子类中的 ClassMethod 名称。与 Ens.Rule.FunctionSet 中定义的函数不同,用户定义的方法名称必须使用它们所属的类进行完全限定。如果通过从管理门户中的向导中选择名称来添加它们,则会自动发生这种情况。

例如,以下函数集类提供了用于业务规则的日期和时间函数。

0
0 122
文章 Jingwei Wang · 七月 7, 2023 2m read
  1. 主机和备机为什么总是切换,会不会是与仲裁机连接的心跳检测出问题了
    • 查看镜像状态 打开管理门户 - ‘系统操作’ - ‘镜像监视器’
    • 如遇到主备切换,可以通过消息日志查看切换原因 打开管理门户 - ‘系统操作’ - ‘系统日志’ - ‘消息日志’      
  2. 基础问题怎么查询
    • 通过管理门户查看日志 打开管理门户 - ‘系统操作’ - ‘系统日志’ - ‘消息日志’
    • 通过监控告警日志 告警日志文件:<intall-dir>/mgr/alerts.log文件      
  3. Production所有组件设置重试间隔、故障超时是什么意思
    • 重试间隔:与回复代码操作配合使用,当发生回复代码操作中设置的回复发生时,按照重试间隔设置的时间对外部业务系统再次访问。
    • 故障超时:发生故障时继续传递消息的总秒数,可以与回复代码操作配合使用。      
  4. 有队列出现怎么办
    • 查看队列的方式 打开管理门户 - ‘Interoperability’ - ‘监视器’ - ‘队列’ 首先,查看队列计数是否是在降低,及时有队列,但是队列在正常下降,此状态为正常情况。 但是,如果队列持续升高,没有任何下降趋势,查看产生队列的相应组件的日志,查看是否是平台内部有异常出现。如果平台内部没有异常,查看第三方下游业务系统是否能正常通信。
0
0 305
文章 Jingwei Wang · 七月 7, 2023 2m read

本篇文章主要介绍互联互通套件的一些基础问题:

  1. 基于互联互通套件通过互联互通成熟的测评的实施工作量
    • 电子病历共享文档部分:需要客户将业务系统数据灌入CCH套件SQL模型中

    • 服务部分:在平台做消息改造,或者直接做业务系统接口改造  
  2. 基于互联互通套件通过电子病例五级+互联互通成熟度测评四级需要的最低人员配备和项目总耗时
    • 需要了医院现有业务系统和人员配备,做进一步评估及分析  
  3. 目标只是通过互联互通成熟度测评需不需要FHIR
    • 不需要,如果只是过测评,只需要互联互通套件基础版就够了  
  4. BI相关功能如何实现
    • 可以使用DeepSee,基于Cubes做数据分析及钻取
  5. 如何使用Java进行快速开发
    • 可以使用PEX,支持Java开发,但是如果使用Production,推荐使用内置开发语言ObjectScript,学习成本更低,未来开发新特性能力更强大
  6. 有没有自带的ETL工具
    • InterSystems 互联互通套件中没有ETL工具,但是支持所有ETL工具的连接  
  7. 发送失败消息是否有记录
    • 所有错误消息都能够在平台监控到,且可以进行转发或者重发  
  8. 有没有按照单个服务流程进行整个业务流程的修改和查看
    • 平台内所有服务都可以按照类别区分,也可以按照服务查看业务流程,但是没有按照单个服务修改整个业务流程的界
0
0 172
文章 姚 鑫 · 七月 6, 2023 3m read

第五十章 开发Productions - ObjectScript Productions - 高效处理批量记录

高效处理批量记录

RecordMap 功能一次导入一条记录,但如果正在导入或导出大量记录,则可以通过使用 RecordMap Batch 获得显着的效率提升。 RecordMap Batch 功能处理同类记录并一次处理一批中的所有记录。可以选择在批次之前加上一个标题记录,然后跟一个尾部记录。

要创建 RecordMap 批处理,需要实现一个继承自中的 %PersistentEnsLib.RecordMap.Batch的类。 Batch 类包含处理解析和写出与特定批次关联的任何标头和尾部的方法。必须提供解析和编写标头的代码。对于简单的表头和表尾,可以使用类中的 EnsLib.RecordMap.SimpleBatch,它继承自 Batch 类,并提供处理简单表头和表尾的代码。如果需要处理更复杂的标头和尾数据,可以扩展这两个批处理实现中的任何一个。

批处理遵循用于其他production消息格式(如 X12)的方法。这与处理 RecordMap 批处理对象的内置业务操作特别相关:这些业务操作接受 Batch 对象或扩展 EnsLib.RecordMap.BaseRecordMap 对象,或 BatchRolloverRequest 类型的请求。

0
0 103
文章 Michael Lei · 七月 4, 2023 11m read

这是个实验项目,使用OpenAI API与FHIR资源和Python相结合来回答医疗行业的用户提问。

项目想法

生成式人工智能,如OpenAI上提供的LLM模型, 已被证明在理解和回答高层次问题方面具有显著能力。他们使用大量的数据来训练他们的模型,因此他们可以回答复杂的问题。

他们甚至可以使用编程语言,根据提示创建代码 --我不得不承认,让我的工作自动化的想法让我感到有些焦虑。但到目前为止,似乎这是人们必须要习惯的事情,不管你喜不喜欢。所以我决定做一些尝试。

这个项目的主要想法是在我读到这篇文章关于ChatARKit项目时产生的。这个项目使用OpenAI的API来解释语音命令,在智能手机摄像头的实时视频中渲染3D物体--非常酷的项目。而且,这似乎是一个热门话题,因为我发现最近有一篇论文遵循类似的想法。

让我最担心的是使用ChatGPT对AR进行**编程。由于有一个开放的github repo,我搜索了一下,发现作者是如何使用ChatGPT生成代码的。这种技术被称为提示工程Prompt Engineering--这是维基百科关于它的文章,或者这两个更实用的参考资料: 12

所以我想--为什么不结合FHIR和Python试试类似的东西?

1
0 245
文章 姚 鑫 · 七月 5, 2023 3m read

第四十九章 开发Productions - ObjectScript Productions - 使用复杂记录映射器 - 复杂的记录映射类结构

复杂的记录映射类结构

有两个类以类似于描述记录映射的两个类的方式描述复杂的记录映射。描述复杂记录映射的两个类是:

  • 复杂记录映射,描述复杂记录的外部结构并实现复杂记录解析器和编写器。
  • 生成的复杂记录类定义了包含数据的对象的结构。该对象允许在数据转换和路由规则条件中引用数据。

一个复杂的记录映射业务服务读取并解析传入的数据并创建一条消息,该消息是生成的记录类的一个实例。业务流程可以读取、修改或生成生成的复杂记录类的实例。最后,复杂记录映射业务操作使用实例中的数据,使用复杂记录映射作为格式化模板写入输出数据。复杂记录映射类和生成的复杂记录类都具有描述数据的层次结构。复杂记录映射类和生成的复杂记录类具有并行结构。这与 RecordMap 类不同,其中生成的记录类可以具有不同的层次结构。

当创建一个新的复杂记录映射并将其保存在管理门户中时,此操作定义了一个类,用于在扩展 EnsLib.RecordMap.ComplexMap和在类中扩展 Ens.RequestO。为了定义生成的记录类,必须单击管理门户中的生成,这会调用 EnsLib.ComplexGenerator 类中的 Generate() 方法。

0
0 122