Cómo ejecutar transformaciones XSL en HealthShare desde el Terminal

Primary tabs

This is the translation of the original article.

¡Hola Comunidad!

HealthShare utiliza muchas transformaciones XSL. Estas transformaciones se utilizan para convertir los documentos médicos de la iniciativa “Integración de las Empresas Sanitarias (IHE)” en SDA (formatos interno de HealthShare), y convertirlos nuevamente en los formatos IHE, con el fin de crear resúmenes de los informes y para lidiar con los perfiles en el IHE (por ejemplo, consultar la información de los pacientes, proporcionar documentos y registrarlos). Los clientes pueden configurar las XSLT para personalizar los informes, o para utilizarlas de alguna otra manera.

Para la depuración y el desarrollo es muy conveniente que se pueda ejecutar un XSLT desde el Terminal.

El método de clase

A continuación, se muestra una clase que contiene un método de clase, que permitirá ejecutar un XSLT desde el terminal en Windows. Previamente, se debe crear la clase en HSREGISTRY o en algún otro namespace en HealthShare (no utilizar HSLIB o VIEWERLIB), y procede a la compilación.


Class Local.XsltTransformer Extends %RegisteredObject
{
ClassMethod Transform(XslDirectory As %String, XslBaseFilename As %String, Directory As %String, InputFilename As %String, OutputFilename As %String, byref Parameters = "")
{
   // Run the XSLT transform with the base filename XslBaseFilename (i.e., without the .xsl
   // extension) that is in the XslDirectory. Run it on the input file with name InputFilename
   // and put the output in the file with name OutputFilename. The input file must be in the
   // directory Directory, and the output will be put in the same directory. The Parameters
   // argument may be used to pass parameters to the transform (rarely needed). This class
   // method should be run from Terminal in a HealthShare namespace other than HSLIB or
   // VIEWERLIB. The method will write out the path and name of the transform and any error
   // messages.
   set In                        = ##class(%Stream.FileCharacter).%New()
   set In.Filename               = Directory _ "\" _ InputFilename
   set Out                       = ##class(%Stream.FileCharacter).%New()
   set Out.Filename              = Directory _ "\" _ OutputFilename
   set Transformer               = ##class(HS.Util.XSLTTransformer).%New()
   set Transformer.XSLTCacheMode = "N"
   set Transformer.XSLTDirectory = XslDirectory
   write !, XslDirectory _ "\" _ XslBaseFilename _ ".xsl"
   set Status = Transformer.Transform( .In, XslBaseFilename _ ".xsl", .Out, .Parameters )
   if $system.Status.IsOK( Status ) {
      set Status = Out.%Save()
   }
   if $system.Status.IsError( Status ) {
      write $system.Status.GetErrorText( Status )
   }
}
}

Los siguientes son los parámetros del método de la clase Transformar: XslDirectory es el directorio donde está el archivo XSLT. La clase primero intentará añadir \Custom al directorio cuando busque la transformación, después intentará hacerlo sin él. XslBaseFilename es el nombre del archivo para la transformación XSL, pero sin la extensión .xsl. Directory es el directorio en el que se encuentra el documento de entrada y donde se quiere que la transformación transcriba los datos de salida de dicha transformación. InputFilename es el nombre del archivo del documento de entrada, incluida su extensión. OutputFilename es el nombre del archivo del documento de salida, incluida su extensión. Los parámetros pueden utilizarse para pasar parámetros la transformación, pero pocas veces son necesarios.

Cómo ejecutar la transformación en el terminal

Para ejecutar una transformación XSL, abre el Terminal, cambia el namespace y ejecuta el método Transformar. Por ejemplo, vamos a ejecutar la transformación de CCDA a SDA que viene con HealthShare. Tengo instalado a HealthShare en C:\InterSystems\HealthShare2016.1.1. Pondré un CCDA llamado "Sample_CCDA.xml" en mi carpeta c:\Junk.

USER>zn "hsregistry"
HSREGISTRY>do ##class(Local.XsltTransformer).Transform( "C:\InterSystems\HealthShare2016.1.1\CSP\xslt\SDA3", "CCDA-to-SDA", "c:\Junk", "Sample_CCDA.xml", "SDA_Out.xml" )
C:\InterSystems\HealthShare2016.1.1\CSP\xslt\SDA3\CCDA-to-SDA.xsl
HSREGISTRY>

El archivo de salida SDA_Out.xml ahora se encuentra en c:\Junk.

Se debe tener en cuenta que no se debe utilizar las transformaciones que se encuentran en el directorio CSP\xslt\SDA. Se debe utilizar  las transformaciones que se encuentran en el directorio CSP\xslt\SDA3. Las transformaciones que se encuentran en el directorio SDA son para una versión antigua de SDA (la versión 2).

Asistente para transformaciones Studio XSL

Una alternativa a ejecutar tus transformaciones desde el Terminal es utilizar el Asistente para transformaciones Studio XSL. En Studio, selecciona la ruta Herramientas > Complementos > Asistente para transformaciones XSL. Introduce el archivo de entrada en el campo  "XML File" y la transformación XSLT en el campo "XSL File". Para el campo "XSLT Helper Class", seleccione "HSREGISTRY" y "HS.Util.XSLTHelper". Hacer clic en "Finalizar". El resultado se visualizará en la ventana de diálogo (podrás copiarlo y pegarlo):

Depuración de errores

Cuando realices la depuración de errores en las transformaciones XSL, un método para depurar los archivos es añadir elementos <xsl:comment> a las XSLT para que puedas observar varios elementos en la salida. Estos son algunos ejemplos:

<xsl:comment>useFirstTranslation <xsl:value-of select="$useFirstTranslation"/>.
             referenceValue      <xsl:value-of select="$referenceValue"/>.
             displayName         <xsl:value-of select="@displayName"/>.
             originalText        <xsl:value-of select="hl7:originalText/text()"/>.
             descriptionValue    <xsl:value-of select="$descriptionValue"/>.
</xsl:comment>
<xsl:comment>Context node:</xsl:comment>
<xsl:copy-of select="." />
<xsl:comment>End of context node.</xsl:comment>

Varios de los XSLT de HealthShare envían una solicitud a una plantilla de "Canonización". Por ejemplo, CCDA-to-SDA.xsl esto se hace cuando veas el comentario "Canonizar la salida SDA". La canonización eliminará los comentarios desde la salida, por ello es posible que desee realizar los comentarios durante la depuración.

Documentación

Para obtener más información sobre los XSLT en HealthShare, puedes consultar los siguientes capítulos del libro "Descripción general de Health Connect (Overview of Health Connect)", los cuales se encuentran disponibles en los documentos:

  • Capítulo 6: Documentos CDA y Transformaciones XSL en HealthShare
  • Capítulo 7: Personalización del CDA y transformaciones en XSL

En particular, en el Capítulo 7 se proporcionan algunas sugerencias para realizar la depuración. Además, puedes consultar el siguiente capítulo del libro "Registros de los intercambios de información":

  • Capítulo 14: Gestión de los tipos de informes de resumen en XML