Nova postagem

查找

Pergunta
· Mar. 5

HL7 search and replace and adding extra carriage return/line feed after a segment - resolved

Sample with multiple Items;

 

MSH|^~\&|GMRC IF CONSULT|XXX^XXXXX^DNS|GMRC IF CONSULT|YYY^^DNS|20250123175341+0000|CRNR|ORM^O01^ORM_O01|Q5808332894T6790522104|T|2.3|||State|State|USA

PID|1||1013570973V041977^^^ICN^ID~1110106796^^^EDIPI^EDIPI||PROSTEST^EHR||19760902|M||||||||||129256619|678235672

ORC|NW|15207778763^XXX^GMRCIFR|||||^^^20250123175300+0000^^R||20250123175331+0000|XXX8051652^PCP1^Physician||XXX8051652^PCP1^Physician|||20250123175341+0000||YYY

OBR|1|15207778763^XXX^GMRCIFR||YYY^PROSTHETICS IFC^757Office1235||20250123175300+0000||||||||||XXX8051652^PCP1^Physician|||Implant Usage (PSAS)||||||||^^^20250123175300+0000

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|1|Implant Usage (PSAS)||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|2|REASON FOR REQUEST: Item Number: 00801741016608||||||O   <<<< Remove ALL instances of “REASON FOR REQUEST:”

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|3|REASON FOR REQUEST:      Transaction Date/Time: 01/22/2025 17:45||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|4|REASON FOR REQUEST:      Station Number: 757||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|5|REASON FOR REQUEST:      Item Description: Plug Surgical 1.3in Groin Monofilament ||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|6|REASON FOR REQUEST: Nonabsorbable Perfix Polypropylene Medium Taper 1.55in Sterile Hernia ||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|7|REASON FOR REQUEST: Repair 0112760||||||O

………… continued

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|128|REASON FOR REQUEST: Item Number: 00380650697127||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|129|REASON FOR REQUEST:      Transaction Date/Time: 01/23/2025 16:10||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|130|REASON FOR REQUEST:      Station Number: 757||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|131|REASON FOR REQUEST:      Item Description: Lens SP PmmA 5.25x12.0mm (5) +13.0D||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|132|REASON FOR REQUEST:      Manufact urer: ALCON||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|133|REASON FOR REQUEST:      Manufacturer Model Number: LX10BD 13.0||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|134|REASON FOR REQUEST:      HCPCS:||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|135|REASON FOR REQUEST:      Lot Number: 01232025||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|136|REASON FOR REQUEST:      Expiration Date/Time: 02/28/2025 05:00||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|137|REASON FOR REQUEST:      Serial Number: 01232025||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|138|REASON FOR REQUEST:      Source: 757-TrackCore Inv||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|139|REASON FOR REQUEST:      Used Quantity:           0||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|140|REASON FOR REQUEST:      Waste Quantity:           0||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|141|REASON FOR REQUEST:      Unit Cost:           0.00||||||O

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|142|REASON FOR REQUEST:      Total Cost:           0.00      <<<<<<||||||O     Add a line break but only on messages with multiple “Item Number:”.

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|143|Special Instructions: ||||||O

OBX|2|CE|^PROVISIONAL DIAGNOSIS|1|R52^Pain, unspecified^I10||||||O

NTE|P|UCID:757_15207778763

 

Req 1

Add line breaks to OBX 5 segment with  Prosthetics orders contains "Issued in Clinic (PSAS)" OR "Implant Usage (PSAS)" with multiple items but Not messages with only one Item

Example

 

 

Req 2

Remove repeating text "REASON FOR REQUEST:" in OBX 5, with Prosthetics orders contains "Issued in Clinic (PSAS)" OR "Implant Usage (PSAS)".

Description: If PSAS order type is "Implant Usage (PSAS)" OR PSAS Order type is "Issued in Clinic (PSAS)" then remove string "REASON FOR REQUEST:" from OBX-5 fields where string "REASON FOR REQUEST:" is found.

15 Comments
Discussão (15)3
Entre ou crie uma conta para continuar
Anúncio
· Mar. 5

[Video] Energy Consumption for AI

Hey Community!

We're happy to share the next video in the series dedicated to Gen AI on our InterSystems Developers YouTube:

⏯ Energy Consumption for AI

Explore the energy demands of AI technologies and major tech companies' growing investments in nuclear power to sustain AI advancements. Learn how to optimize AI energy usage:

  • Use only what you need – limit energy consumption where possible.
  • Use the right tool for the job – avoid unnecessary AI use when simpler solutions suffice.
  • Consider scale – design AI technologies with global adoption and efficiency in mind.

🗣  Presenter: @Jess Jowdy, Manager of Healthcare Sales Engineering, InterSystems

Enjoy watching, and look forward to more videos! 👍

Discussão (0)1
Entre ou crie uma conta para continuar
Anúncio
· Mar. 5

Enquête annuelle 2025 sur l'écosystème des développeurs InterSystems

Bonjour développeurs,

Merci beaucoup d'avoir fait partie de l'écosystème de la communauté des développeurs InterSystems pour une année de plus ! Nous sommes ravis que vous participiez à la vie de la Сommunauté des Développeurs, d'Open Exchange, de Global Masters et du Portail d'Idées.

Nous aimerions savoir ce que vous pensez de nos portails. Veuillez prendre un moment pour nous faire savoir ce que vous en pensez et ce qui pourrait être amélioré :

👉 Enquête annuelle 2025 sur l'écosystème des développeurs InterSystems 👈

Remarque : l'enquête prendra moins de 10 minutes à compléter.

Vos commentaires sont également les bienvenus dans les commentaires de cet article.

Nous avons hâte de connaître votre avis ! 😉

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· Mar. 5 6min de leitura

Criação de JWT e integração com InterSystems IRIS

O que é JWT?

JWT (JSON Web Token) é um padrão aberto (RFC 7519) que oferece um método leve, compacto e auto-contido para transmitir informações de forma segura entre duas partes. É comumente usado em aplicações web para autenticação, autorização e troca de informações.

Um JWT é tipicamente composto por três partes:

1. Cabeçalho JOSE (JSON Object Signing and Encryption) 
2. Payload (Carga útil)
3. Assinatura

Essas partes são codificadas no formato Base64Url e concatenadas com pontos (.) separando-as.

Estrutura de um JWT

Cabeçalho

{ "alg": "HS256", "typ": "JWT"}

Payload

{"sub": "1234567890", "name": "John Doe", "iat": 1516239022}

Assinatura:

A assinatura é usada para verificar se o remetente do JWT é quem ele diz ser e para garantir que a mensagem não foi adulterada.

Para criar a assinatura:

1. Cabeçalho e carga útil codificados em base64.
2. Aplicar o algoritmo de assinatura (por exemplo, HMAC SHA256 ou RSA) com uma chave secreta (para algoritmos simétricos como HMAC) ou uma chave privada (para algoritmos assimétricos como RSA).
3.Codificar o resultado em Base64Url para obter a assinatura..

JWT de exemplo. Veja o conteúdo do JWT 

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

 

Criação de JWT no IRIS

Observação: Antes de 2024, a classe %OAuth2.JWT era usada para gerar JWTs no IRIS. A classe %Net.JSON.JWTé agora a classe primária para a criação de JWT, e usarei esta classe no código de exemplo.

Visão geral de JWK 

JWK representa uma chave criptográfica, particularmente para assinar e verificar os JWTs. Os JWKs permitem que você represente chaves públicas (para verificação) e chaves privadas (para assinatura) em um formato padronizado que pode ser facilmente trocado entre sistemas. O JWKS contém múltiplos JWKs.

Fluxo de trabalho do JWT

 

1. Construa seu cabeçalho como um %DynamicObject e adicione cabeçalhos personalizados, se necessário.

2. Construa o corpo/claims diretamente como um %DynamicObject

3. Chame o método Create da classe %Net.JSON.JWT.

Set sc = ##Class(%Net.JSON.JWT).Create(header, , claims, jwks, , .JWT)

Create JWK

Set sc = ##Class(%Net.JSON.JWK).Create("HS256","1212ASD!@#!#@$@#@$$#SDFDGD#%+_)(*@$SFFS",.privateJWK,.publicJWK)

Isso deve retornar a chave privada

{"kty":"oct","k":"MTIxMkFTRCFAIyEjQCRAI0AkJCNTREZER0QjJStfKSgqQCRTRkZT","alg":"HS256"

Algumas propriedades importantes do JWK

"kty": "oct" - representa o algoritmo simétrico
"kty": "RSA" / "kty": "EC" - representa o algoritmo assimétrico

Uma vez que o JWK é criado, ele pode ser adicionado ao JWKS.

Vamos criar JWKS no IRIS

Set sc = ##class(%Net.JSON.JWKS).PutJWK(jwk,.JWKS)

Este método retorna o JWKS.

Gerando o JWT no IRIS

Você pode criar JWTs de chave Simétrica ou Assimétrica no IRIS. A classe %Net.JSON.JWK é usada principalmente para gerar o JWT. Antes de chamar o método, certifique-se de criar e enviar o JWKS tanto para criptografia Simétrica quanto Assimétrica ao gerar o JWT.

Criptografia Simétrica

Algoritmos simétricos usam uma chave secreta compartilhada, onde tanto o remetente quanto o destinatário usam a mesma chave para assinar e verificar o JWT. Esses algoritmos, como HMAC (HS256, HS512, HS384), geram um hash (assinatura) para o payload do JWT. Essa abordagem não é recomendada para sistemas de alta segurança, pois tanto a assinatura quanto a verificação são expostas, apresentando potenciais riscos de segurança.

O método Create da classe %Net.JSON.JWK é usado para gerar o JWK. Ele recebe dois parâmetros de entrada e retorna dois parâmetros de saída:

1. algorithm - O algoritmo para o qual criar o JWK.
2. secret - A chave usada para assinar e verificar o JWT
3. privateJWK - A Chave Web JSON privada que é criada.

4. publicJWK - A chave Web JSON pública que é criada.

Para algoritmos de chave simétrica - você obterá privateJWK
Para algoritmos de chave assimétrica - você obterá privateJWK e publicJWK
 
SymmetricKeyJWT

Output 

LEARNING>d ##class(Learning.JWT.NetJWT).SymmetricKeyJWT()
privateJWK={"kty":"oct","k":"MTIxMkFTRCFAIyEjQCRAI0AkJCNTREZER0QjJStfKSgqQCRTRkZT","alg":"HS256"}  ; <DYNAMIC OBJECT>
privateJWKS="{""keys"":[{""kty"":""oct"",""k"":""MTIxMkFTRCFAIyEjQCRAI0AkJCNTREZER0QjJStfKSgqQCRTRkZT"",""alg"":""HS256""}]}"
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsIngtYyI6InRlIn0.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.PcCs_I8AVy5HsLu-s6kQYWaGvuwqwPAElIad11NpM_E

Criptografia Assimétrica

A criptografia assimétrica refere-se ao uso de um par de chaves: uma chave para assinar o token (chave privada) e outra chave para verificar o token (chave pública). Isso é diferente da criptografia simétrica.

Chave Privada: Esta chave é usada para assinar o JWT. Ela é mantida em segredo e nunca deve ser exposta.

Chave Pública: Esta chave é usada para verificar a autenticidade do JWT. Ela pode ser compartilhada e distribuída com segurança, pois não pode ser usada para assinar novos tokens.

Você pode gerar a criptografia assimétrica do JWT com chave privada/certificado via %SYS.X509Credentials. Portanto, você precisa armazenar seu certificado nesta classe persistente.

 
AsymmetricWithx509

 

JWT em aplicações Web

A partir da versão 2023, o IRIS inclui a criação de JWT integrada para aplicações web por padrão. Certifique-se de que a Autenticação JWT esteja habilitada ao configurar sua aplicação web.

Adicionei uma breve explicação sobre a configuração:

1. Habilite a Autenticação JWT em sua aplicação web.
2. Se ainda não o fez, crie uma classe REST.
3. O recurso de endpoint padrão "/login" está incluído. Faça uma chamada de API REST usando autenticação básica com o payload como {"user": "_SYSTEM", "password": "SYS"}.
4. A resposta será um JSON contendo o "access_token", "refresh_token" e outros detalhes relevantes.
5. Use o "access_token" para autorização.

Discussão (0)1
Entre ou crie uma conta para continuar
InterSystems Oficial
· Mar. 5

Retirada de MultiValue en InterSystems IRIS 2025.1

A partir de la versión 2025.1 de la plataforma de datos IRIS® de InterSystems, InterSystems deja oficialmente de utilizar MultiValue y lo incluye en la lista de funciones obsoletas y descatalogadas. Aunque InterSystems seguirá dando soporte a los clientes actuales que utilicen MultiValue, no se recomienda para nuevas aplicaciones.

Qué significa esto para vosotros:

  • Soporte continuado: El soporte para MultiValue seguirá estando disponible a través del Worldwide Response Center (WRC) sobre la base del «mejor esfuerzo», como se proporciona para las versiones anteriores a nuestras Versiones Mínimas Soportadas.
  • Posibilidad de retirada en el futuro: Aunque no hay planes inmediatos para eliminar MultiValue de nuestros productos, InterSystems se reserva el derecho de hacerlo en una futura versión.
  • Orientación al cliente: Si tenéis alguna pregunta sobre el uso actual o previsto de MultiValue, os animamos a que os pongáis en contacto con vuestro equipo de cuentas de InterSystems para que os orienten.

La designación «obsoleto» indica que los clientes deben planificar la eliminación del uso de MultiValue. Somos conscientes de que esto puede afectar a los proyectos en curso, y agradecemos vuestra cooperación a medida que continuamos evolucionando nuestra plataforma.

Si deseáis más información o tenéis alguna duda, no dudéis en comentar a continuación o poneros en contacto con vuestro representante de InterSystems.

Discussão (0)1
Entre ou crie uma conta para continuar