#GitHub

0 关注者 · 10 帖子

GitHub 是用于托管 IT 项目及其联合开发的最大的 Web 服务。此 Web 服务基于 Git 版本控制系统 - 一个分布式版本控制系统,用于在软件开发过程中跟踪源代码的变更。

了解更多信息

加入 InterSystems 开发者社区 - GitHub

公告 Claire Zheng · 十月 29, 2025

Hi 大家好!来推荐一个学习的新途径!

除了InterSystems Open Exchange 应用程序库,InterSystems Community GitHub 还提供使用 InterSystems 技术构建的示例、库和演示。

InterSystems Community GitHub (github.com/intersystems-community)

它包括

  • 示例应用程序和模板
  • 库和连接器
  • 实验项目和演示

这些代码库并未得到 InterSystems 公司的官方支持,但对于学习和探索 InterSystems 技术非常有用。

欢迎您探索这些资源库,并将它们作为您自己项目的参考。

0
0 9
文章 Nicky Zhu · 四月 24, 2022 10m read

尽管IRIS和HealthConnect拥有全面的互操作特性,但在实际工作中,还是有可能遇到需要使用遗留类库,dll SDK等方式与外部应用通信的情况。例如IRIS中并没有内嵌国密算法SM2、SM3和SM4,而开源社区中不乏通过Java、Python和C++等语言完成的具体实现。本文就将以调用SM4的Java实现为例展示ObjectScript程序与第三方语言通信的过程。

Github地址:https://github.com/LinZhuISC/javademo.SM4

跨编程环境调用设计要点

在开始实际操作之前,希望读者先针对整个调用过程中的主调方和被调方思考两个现象:

  1. ObjectScript作为主调方,Java程序对它来说是个黑盒,它既不能直接访问Java虚拟机堆栈中的变量,也不能直接操纵被调代码的行为,例如限制内存使用、控制日志输出等。
  2. Java程序作为被调方,其设计目的是通过Java容器运行或被其他Java程序调用,开发过程中通常并不会考虑其自身如何与另一个语言环境交互,因此不能确保异常信息能被主调方捕获与跟踪。

针对这两个现象,开发者需要思考,在哪一侧需要做什么样的一些工作以便调用过程能够顺畅进行。

在这个背景下,当我们需要让ObjectScript与Java相互通信和调用时,就不得不解决几个技术问题:

3
1 536
文章 Nicky Zhu · 十月 10, 2024 7m read

本演示程序用于展示如何采用自定义FHIR profile来验证数据合规性。自定义FHIR实施指南基于FHIR R4版本开发,在本例中实现了对Organization资源的扩展并用于验证数据的合规性。

安装

  1. 通过Git clone下载本项目。
  2. 执行docker-compose up -d构建并启动容器,初次执行时需执行需10~15分钟(视配置变化)。将构建InterSystems IRIS for Health镜像,安装FHIR服务器,导入自定义FHIR规范,使自定义FHIR 规范可用于验证数据。
  3. 在Postman中导入TestCases中的测试用例文件,查看各类FHIR约束的测试效果
  4. 容器启动后可查看自定义IG内容

项目代码结构

FHIRValidation
├─ ExampleIG                        
│  ├─ ig.ini
│  ├─ input
│  │  ├─ fsh
│  │  │  ├─ alias.fsh
│  │  │  ├─ codesystems.fsh
│  │  │  ├─ organization.fsh
│  │  │  └─ valuesets.fsh
│  │  └─ pagecontent
│  │     └─ index.md
│  └─ sushi-config.yaml
├─ README.md
├─ README_zh.md
├─ TestCases
│  └─ FHIR Profile-based Validation  testcases.postman_collection.json
├─ docker-compose.yml
└─ image-iris
   ├─ Dockerfile
   └─ src
      ├─ FullIG
      ├─ IGPackages
      │  ├─ hl7.fhir.uv.extensions.r4#5.1.0.tgz
      │  ├─ hl7.terminology.r4#6.0.2.tgz
      │  └─ package.tgz
      └─ init
         └─ init.sh

ExampleIG

该子目录下的所有文件为本项目所采用的自定义FHIR规范SUSHI源码,供用户定义FHIR规约时参考使用。

TestCases

该子目录下存放基于FHIR REST API的测试用例脚本,需导入到Postman中使用

image-iris

该子目录下存放nterSystems IRIS for Health镜像所需的文件,其中: └─ src ├─ FullIG 该目录中存放SUSHI生成的自定义FHIR IG ├─ IGPackages 该目录中存放自定义FHIR IG的 package 文件 └─ init 该目录中存放IRIS的Docker镜像初始化脚本

FHIR package简介

HL7组织推荐使用实施指南(Implementation Guild)来解释如何使用FHIR规范。除用于开发人员阅读的说明(如html)外,实施指南中通常也包括可直接被机器读取和应用的工件(artifacts),可被用于驱动代码生成和数据验证等任务。
FHIR实施指南采用NPM Package规范管理依赖。指南涉及的所有StructureDefinition,ValueSet等资源将被打包在一块,形成可被FHIR Server用于读取规范,生成客户端代码或执行数据质量校验的资源包。
通过SUSHI工具生成的实施指南中就包含若干package文件。如本例中,image-iris/src/IGPackages/package.tgz即为生成的package包,可被IRIS FHIR Server直接导入使用。应当注意到的是,除核心资源包(如hl7.fhir.r4.core)外,完整的FHIR规范还需要引用术语、扩展等额外的资源包。
目前FHIR规范引用机制的文档尚不完善。如基于R4版的FHIR规范除引用hl7.fhir.r4.core外,还需引用hl7.fhir.uv.extensions.r4#5.1.0hl7.terminology.r4#6.0.2,但这些引用关系在R5版本中方有记录,在R4版文档中并未完整声明,需开发者在开发过程中自行补充。
在本例中这些包已下载在image-iris/src/IGPackages文件夹下,将作为依赖在自定义FHIR实施指南之前加载。

FHIR validation简介

参见FHIR规范Validating Resources一节。FHIR规范已经设计了对数据结构、属性基数、值域、代码绑定和约束等一系列机制在内的数据质量校验机制。HL7组织在FHIR规范中并未强制要求遵循何种强度的质量控制,但建议采用宽进严出的原则处理FHIR数据。
对于保存FHIR资源的FHIR存储库而言,保障FHIR资源的数据质量是使医疗行业具有价值,保障医疗行为安全性的前提条件。因此,在构建基于FHIR存储的数据共享交换方案时,即使不得不保存不满足数据质量要求的数据,也应对其进行校验,标识不符合项,推动数据治理活动的进行,从而保障医疗安全和数据消费者的利益。
在FHIR规范指出的多种数据校验方式中,FHIR Validator和FHIR操作对数据质量校验的覆盖最为全面。
本例将使用InterSystems IRIS for Health所提供的$validate操作,通过profile参数对尚未保存的FHIR数据进行校验。使用者也可修改测试用例,构建HTTP POST参数,对存量FHIR资源进行校验。
还应当注意的是,$validate操作如被正确调用,将通过Http 200返回校验结果,如有不符合项,将在返回的OperationOutcome资源中包裹错误信息,而不通过Http代码标识错误。

对FHIR的扩展

在本例中基于FHIR R4对Organization资源进行了如下扩展:

1. 修改language的绑定强度

将机构主要语言的绑定强度修改为required

2. active字段基数从0..1改为1..1

从而使得数据的状态成为必填字段,有且只有一个元素

3. name字段基数从0..1改为1..1

组织机构名称成为必填字段,有且只有一个元素。参考我国医院除医院名称外,如果具备急救中心、胸痛中心等牌照,还可能具有多个名称。但因注意到,这些牌照通常标识了医疗机构提供的服务能力,而非在组织机构注册系统中具备的法定名称,且此类牌照生命周期与医疗机构自身的生命周期并不一致。因此,从牌照获得的名称宜视为该医疗机构的服务能力而非机构的唯一名称。在FHIR中,通过服务能力获得的名称可通过资源HealthcareService提供,该资源与Organization资源间可建立多对一的引用关系,更适合用来表达上述概念。

4. 增加医疗机构的组织机构类型

根据中国国家标准GB/T 20091-2021 组织机构类型,分别增加了CodeSystem organizationtype-code-system和ValueSet organizationtype-vs,并通过Extension向Organization资源中添加了扩展mdm-organizationTypeExtension,从而使得该资源可用于表示表示标识中国组织机构类型。
该扩展通过对Extension切片实现,且基数为1..1,即医疗机构资源必须具有组织机构类型元素。

5. 约束医疗机构证件号码

FHIR基础标准并未纳入中国组织机构统一社会信用代码的证件类型,为此增加了CodeSystem cs-identifierType-code-system,并对Identifier按其类型进行了切片,使之必须可以表达社会信用代码。且社会信用代码的格式遵循以下约束:

  1. identifier.use必须取值为official,即正式/官方用途
  2. identifier.type必须遵循cs-identifierType-code-system要求,system必须为该codesystem的uri,code必须为“USCC”
  3. identifier.value必须遵循自定义约束uscc-length-18,该字段长度必须为18位,其中前17位必须为数字,最后1位必须为数字或字母

测试用例列表

1. Without profile - All OK

未声明资源对应的profile,因此FHIR Server将不对资源中各属性的值进行校验,仅返回All OK。

2. Unknow field

在资源中加入了未被定义的属性isNational,因此校验引擎返回了Unrecognized element错误。

3. Wrong cardinality - less

在本IG中,修改了Organization资源name属性的基数为1..1,即应有且仅有一个组织机构名称。本测试用例未填写名称,因此数据校验失败。 另外,可以观察到Identifier.type经过扩展,加入了统一社会信用代码作为标识符类型,FHIR R4规范里并不包含这个值,但该字段的代码绑定强度仅为example,不强制约束。因此校验引擎返回了information级的值域代码不符合信息而没有报错。

4. Binding strength

在本IG中,组织机构的language属性的代码绑定强度改为了required,则该字段值域必须符合http://hl7.org/fhir/ValueSet/languages,因此,当该字段取值为wrong language时,因不在required值域中,将导致error级错误

5. Wrong value

在本IG中,组织机构类型的值域来自于organizationtype-code-system,因此,当类型为mdm-organizationTypeExtension的extension元素中code的值为“999”,不在值域中时,将导致error级错误

6. Failing invariant

在本IG中,组织机构的社会信用代码必须遵循自定义约束uscc-length-18(该字段长度必须为18位,其中前17位必须为数字,最后1位必须为数字或字母),因此,当其末位为字符“%”时,违反该约束,将导致error级错误

7. Failing profile

对于一个资源定义的一个profile包含了多个约束,因此,在校验时所有不满足profile的问题都将被检出,例如本例中:

  1. 错误的language代码
  2. 错误的组织机构类型
  3. 缺少name字段 可见上述问题都被检出
0
0 127
文章 Michael Lei · 三月 21, 2024 2m read

这是在 IRIS 中完全运行向量搜索演示的尝试。
没有外部工具,您需要的只是终端/控制台和管理门户。
特别感谢Alvin Ryanputra作为他的软件包iris-vector-search的基础
灵感和测试数据的来源。
我的软件包基于 IRIS 2024.1 版本,需要注意您的处理器功能。

我尝试用纯 ObjectScript 编写演示。
仅描述向量的计算是在嵌入式Python中完成的
计算 2247 个记录的 384 维向量需要时间。
在我的 Docker 容器中,它正在运行 01:53:14 来完全生成它们。

然后被警告了!
所以我将这一步调整为可重入,以允许暂停向量计算。
每 50 条记录,您就会收到一次停止的提议。
该演示如下所示:

1
0 87
文章 Michael Lei · 七月 3, 2023 4m read

你好社区
在本文中,我将介绍我的应用程序irisChatGPT ,它是基于LangChain Framework构建的。
首先,让我们对框架进行一个简单的概述。

全世界都在谈论ChatGPT以及大型语言模型 (LLM) 如何变得如此强大,并且表现超出预期,提供类似人类的对话。这只是将其应用于每个企业和每个领域的开始!

0
0 379
文章 Johnny Wang · 四月 25, 2022 39m read

    大家应该都已经很熟悉 InterSystems Ensemble(一个集成和应用程序开发平台),每个人都知道 Ensemble Workflow 子系统是什么以及它对于自动化人类交互的作用。 对于那些不了解 Ensemble Workflow 的人,我将简要介绍它的功能(已经熟悉的朋友可以直接跳过这一部分并学习如何使用 Angular.js 中的 Workflow 接口)。

InterSystems Ensemble

    InterSystems Ensemble 是一个集成和应用程序开发平台,旨在集成异构系统、自动化业务流程和创建新的复杂应用程序,这些应用程序通过新的业务逻辑或新的用户界面增强集成应用程序的功能:EAI、SOA、BPM、BAM 甚至 BI (感谢 InterSystems DeepSee:一种用于开发分析应用程序的内置技术)。

    Ensemble 具有以下关键功能:

    适配器:与应用程序、技术和数据源交互的组件。 Ensemble 提供技术和应用程序集成适配器(Web 和 REST 服务、文件、FTP、电子邮件、SQL、EDI、HL7、SAP、Siebel、1S Enterprise 等)。 您可以使用适配器 SDK 创建自己的适配器。

    业务服务:将来自外部系统的数据转换为 Ensemble 消息并启动业务流程和/或业务运营的组件。

1
0 564
文章 Michael Lei · 八月 19, 2022 2m read

我很高兴与大家分享我第一次使用docker容器版本的IRIS for Health的经验,以探索你对使用或试用的兴趣,利用docker容器的优势,它是轻量级的,易于部署。本文将通过使用Renan Lourenco编写的名为ENSDEMO的GitHub仓库的实施步骤。

设置IRIS for Health社区版docker容器环境的步骤:

  1. 启动运行Docker
  2. 下载docker 镜像image

docker pull containers.intersystems.com/intersystems/irishealth-community:2022.2.0.304.0

  1. 从GitHub 克隆源repository

git clone https://github.com/OneLastTry/irishealth-ensdemo

  1. 改一下文件目录.
  2. 从docker-compose.yml建立容器镜像

docker-compose build

  1. 运行你的容器

docker-compose up -d

在我最初的尝试中,我无法下载irishealth community:2022.2.0.304.0的确切版本,因为它在ENSDEMO的最初发布中已经发生了变化。修复方法是,当试图从InterSystems容器注册表拉出docker镜像时,在注册表中拉出最新的可用标签。

2
0 503
文章 Johnny Wang · 四月 27, 2022 3m read

    有时,我们在给客户提供技术支持时会得到重复的问题,某事或某人正在使用比预期更多的licenses,我们需要找到什么。

    我们经过分析后认为主要有两种原因。 第一种原因是在我们意识到,当应用程序无法运行或尝试通过终端连接并获得“lovely”时,许可证实际已用尽;

    <licenses限制超出> 消息:

    第二种情况是最终用户抱怨他们有时无法使用该应用程序,而当问题发生时我们发现已经太晚了。 在这些情况下,我们通常会在 messages.log 中看到以下“License Limit exceeded xxxx times”消息:

    我们要及时发现问题:

    对于第一种情况,我们看到问题正在发生,我们有一些替代方案:

  •     如果我们可以登录到系统管理门户,请转到licenses部分并检查什么在使用什么。
  •     使用 -B 参数通过终端连接(常规连接是不可能的,因为所有licenses都已使用)。 -B 参数用于在禁用登录或licenses用尽时进行管理员紧急登录。
  •     连接后,运行 License DumpLocalAll 方法以转储所有licenses并检查每个插槽的消耗量。 该文件将包含如下内容:
0
0 194
文章 Johnny Wang · 十二月 19, 2021 3m read

    如果您经常阅读我们的博客,您可能记得去年夏天我们进行了 InterSystems 速度测试,该测试由 ESG 验证,旨在测试数据库可以同时摄取和查询的数据量,以及这表现出的具体的影响。从那以后,我们 GitHub 页面的许多访问者一直在根据自己的想法重复验证这个测试

3
0 349