Ensemble: Cómo incrustar un archivo PDF en un mensaje HL7

Solapas principales

¡Hola Comunidad!

En este artículo describiré e incluiré un ejemplo de cómo incrustar un archivo PDF externo en un segmento HL7, concretamente en el segmento OBX() de un mensaje ADT_A01 versión 2.3.1  .  Esto puede ser útil para  insertar imágenes u otros datos externos en un mensaje HL7. En este ejemplo, el nombre del archivo PDF a incrustar nos llega en el mensaje HL7 entrante en el campo OBX(1):ObservationValue.


Los requisitos básicos para este ejemplo son los siguientes:

  1. Aceptar un archivo PDF
  2. Aceptar un mensaje HL7
  3. Usar el nombre del archivo PDF para incrustar los datos del PDF en el mensaje HL7
  4. Sacar el mensaje a un archivo

 

   


  

 

 

 

 

 

Al usar EnsLib.File.InboundAdapter, el ejemplo tiene dos servicios empresariales configurados. Uno para tomar archivos PDF usando el EnsLib.File.PassthroughService integrado. El otro para aceptar mensajes HL7 usando el EnsLib.HL7.Service.FileService integrado.


Procesamiento de PDF 

El orden de estos componentes es fundamental, ya que el archivo PDF tiene que obtenerse primero. También es importante que el servicio empresarial del PDF tenga definida una ruta de archivo (Archive Path) y una ruta de trabajo (Work Path) en el mismo directorio. Esto guarda una copia del PDF localmente, que más tarde se usará para incrustar los datos en el mensaje HL7.

Para que el servicio empresarial guarde el archivo PDF en este directorio de la ruta de archivo/trabajo, se debe llamar a SendRequestAsyn(). Este método se llama de forma predeterminada al realizar envíos entre componentes Ensemble/HealthShare.

Para lograrlo, el servicio empresarial del PDF se configura para enviar el mensaje PDF a una operación empresarial personalizada, que acepta el mensaje sin realizar acciones adicionales.

Nota: el componente objetivo del servicio empresarial del PDF es irrelevante para este ejemplo, pero podría construirse para realizar cualquier acción adicional con el mensaje PDF.


Procesamiento de HL7

El mensaje HL7 proveniente del servicio empresarial se envía a un proceso empresarial personalizado. El proceso empresarial llama a un Lenguaje del Proceso Empresarial (BPL) que identifica y abre el archivo PDF correcto y luego llama a un Lenguaje de transformación de datos (DTL) para hacer la incrustación de los datos en el mensaje HL7. 

 

=== BPL ===

El BPL realiza las siguientes tareas:

  1. Extraer el nombre del archivo PDF del mensaje HL7
  2. Consultar la tabla Ens.StreamContainer, en busca de entradas que coincidan con el nombre de archivo extraído
  3. Llamar a un DTL para que haga la incrustación
    1. Vea la sección “DTL” del artículo
  4. Después, el BPL envía el mensaje hacia abajo, a una operación empresarial integrada EnsLib.HL7.Operaiton.FileOperation

 

=== DTL ===

  1. Utiliza target.{OBX(*)} para contar la cantidad de segmentos OBX
  2. Incrementa en uno el recuento de OBX
  3. Usa StoreFieldStreamBase64() para añadir los datos del PDF a un nuevo segmento OBX()
    1. Vea “Código de Acción DTL ” para conocer este código

 

 

 

=== Código de Acción DTL ===

//Obtener el objeto de flujo PDF previamente guardado

   Set pdfStreamContainer = ##Class(Ens.StreamContainer).%OpenId(context.StreamContainerID)

   Try {

     Set pdfStreamObj = pdfStreamContainer.StreamGet()

   }

   Catch {

      $$$TRACE("Error opening stream object ID = "_context.StreamContainerID)

      Quit

   }

 //Colocar el objeto de flujo PDF dentro del nuevo segmento OBX:5

   Set status = target.StoreFieldStreamBase64(pdfStreamObj,"OBX("_count_"):ObservationValue(1)")

   Set ^testglobal("status",$H) = status


Producción de muestra

A continuación os muestro los archivos incluidos en la muestra adjunta.

  1. El mensaje HL7 inicial solo con el nombre del archivo del PDF incrustado en OBX(1)
  2. El archivo PDF de muestra
  3. Una exportación de clase que incluye lo siguiente:
    1. Clase de producción
    2. Operación empresarial de PDF personalizado
    3. Regla de enrutamiento
    4. BPL
    5. DTL

 

Este ejemplo fue compilado en Ensemble 2016.2.0 pero también fue probado en Ensemble 2015.1.2 sin problemas de compatibilidad.  Puede encontrar el archivo .zip aquí:

https://community.intersystems.com/sites/default/files/post-associated-docs/sample_hl7_embedpdf_production_export.zip

  • + 1
  • 0
  • 19
  • 1

Respuestas