Separar estudios dependiendo del AE llamado

788 views
Skip to first unread message

Abraham Del Villar Hernández

unread,
Nov 23, 2018, 7:56:13 PM11/23/18
to dcm4che
Buen día amigos. Espero me puedan ayudar con un problema que tengo.

He logrado configurar sistemas de archivos en dcm4chee para dos clientes diferentes, mi problema es que al consultar cualquiera de los dos AE me trae todos los estudios que hay en el servidor, como podría hacer para que me los traiga por separado dependiendo del AE llamado?

lfd

unread,
Nov 24, 2018, 11:03:56 PM11/24/18
to dcm4che
Hola, me gustaria hacer hacer lo mismo quiero que cuando consulte un AE solo vea ciertos estudio en especifico.

Jon Ander Zuccaro

unread,
Nov 26, 2018, 4:57:47 PM11/26/18
to dcm4che
Tienes que especificar si usas dcm4chee 2 o el 5

Ricardo Leonel

unread,
Nov 26, 2018, 5:07:40 PM11/26/18
to dcm...@googlegroups.com
Hay como hacerlo para dcm4chee 5?

--
You received this message because you are subscribed to the Google Groups "dcm4che" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dcm4che+u...@googlegroups.com.
To post to this group, send email to dcm...@googlegroups.com.
Visit this group at https://groups.google.com/group/dcm4che.
For more options, visit https://groups.google.com/d/optout.


--
Cualquier situación que se requiera, quedo al pendiente.

Atte.,

Ing. Sist. Ricardo Aguilar

Aguilar Solutions

Jon Ander Zuccaro

unread,
Nov 26, 2018, 5:14:39 PM11/26/18
to dcm4che

Abraham Del Villar Hernández

unread,
Nov 26, 2018, 8:58:35 PM11/26/18
to dcm4che
Muchas gracias por la atención.
Estoy usando dcm4chee 2
Message has been deleted

Jon Ander Zuccaro

unread,
Nov 26, 2018, 10:20:17 PM11/26/18
to dcm4che
Hablas de "clientes" diferentes, por lo tanto me supongo que no te basta un simple filtro, debes limitar el acceso de una sección a la otra sección.


Toma en cuenta que habrá una única tabla de Pacientes para los dos centros, si usan mecanismos distintos para asignarle un ID al paciente podrías tener IDs repetidos y un conflicto.


Si tienes problemas leyendo esa documentación, te entiendo perfectamente porque es pésima. No se entiende un pito.


El concepto es más o menos este: desde la interfaz Web creas dos usuarios y dos roles. Le asignas un rol a cada usuario. Registras en la parte de Application Entities a dos AETitles diferentes, uno para cada usuario y al crearlos llenas los campos user_id con el usuario que creaste para cada centro y su contraseña.

La diferencia con lo que pides es que es el AETitle que llama  y no el llamado el que va a diferenciar, y por eso tienes que registrarlos en el PACS, después debes restringir el acceso al PACS a únicamente AETitles que estén registrados. De la otra manera, si logro saber el AETitle de la otra institución puedo ver los estudios sin problema al llamar a un AETitle distinto.

Después tienes que decidir que criterio vas a usar para determinar que un estudio es de un centro o del otro. Debes ir en la consola JMX a StudyPermission y marcar UpdateOnSeriesStored y UpdateOnNewStudy como true y después editar el archivo que está en ...conf/dcm4chee-permission/series-permission.xsl  De esta manera vas a marcar cada estudio recibido como perteneciente a uno de los dos roles de manera que los AETitles asociados mediante el usuario a uno de los roles o al otro sean los únicos que lo puedan ver.

Tienes otra alternativa menos segura, utilizar attribute coercion, La idea es que interceptes el query y según tanto el AETitle llamado (lo que se parece mas a lo que quieres) como el que llama, agregues un parámetro adicional a la petición para que únicamente devuelva estudios de una de las instituciones. Para eso, nuevamente, los estudios deben contener algún atributo que te permita diferenciar si son de un sitio u otro. El archivo que quieres cambiar es cfindrq.xsl. Busca ejemplos de como hacerlo.

Sinceramente... la manera mas fácil lograr lo que estas haciendo sería tener dos instancias separadas con sus bases de datos independientes. Es mucho menos complicado.

Abraham Del Villar Hernández

unread,
Nov 27, 2018, 10:43:35 AM11/27/18
to dcm4che
Sera que me pudieras indicar como crear las dos instancias que me indicas. Por favor.

Jon Ander Zuccaro

unread,
Nov 27, 2018, 11:41:48 AM11/27/18
to dcm4che
Me parece que tu mejor opción es no usar la funcionalidad de Study Permission y mas bien filtrar los queries para solo devolver estudios de una institución o de otra según el AETitle llamado. Es lo mas fácil, de lo contrario tendrías que asignarle a cada estudio una permisología en retroactivo y encima tener que registrar cada uno de los AETitles posibles que podrían llamarte desde cada institución. Aparte es tu requerimiento inicial.

Asumiendo que ya fuiste a QueryRetrieveScp y en CalledAETitles ya tienes 2 AETitles registrados para recibir peticiones:

En los estudios que tienes actualmente, cuál es el campo que los distingue como pertenecientes a una institución u otra?

Hay un campo 0008,0080 Institution Name, o quizá es 0010,0021 Issuer of patient ID?

En tus estudios actuales, cómo vas a saber diferenciar a través de un campo DICOM que pertenecen a una institución o a otra?

Abraham Del Villar Hernández

unread,
Dec 5, 2018, 8:39:20 AM12/5/18
to dcm4che
Gracias por el aporte.
Al crear los sistemas de archivos distintos para cada AE, se pueden distinguir de dónde llegan mediante el campo ae_retrive de la tabla study.
Pero sigo con el problema de que al llamar cualquiera de los 3 AE, me devuelve todos los estudios del servidor.

Jon Ander Zuccaro

unread,
Dec 5, 2018, 1:32:48 PM12/5/18
to dcm4che
El AETitle desde donde se originó el estudio es un atributo de nivel de series, no de estudio. Está en la tabla series y se llama src_aet. Esto es porque un mismo estudio puede tener series que se originen de distintos equipos, incluso pueden ser de distinta modalidad.

Necesitas un atributo DICOM para diferenciar los estudios de nivel de estudio, un buen candidato sería Institution Name 0008,0080. No te sirve algo que esté en la base de datos únicamente porque tienes que filtrar el query DICOM que harán las distintas instituciones y solo tienes disponibles atributos DICOM para lograrlo.

Revisa con un query DICOM si tus estudios ya tienen ese atributo, si no es el caso podrías hacer el siguiente proceso:

Al recibir los estudios, dependiendo del AETitle de origen o el AETitle llamado, como te convenga mas, llena el campo con un nombre de institución u otro. Utiliza para eso el archivo de coerción cstorerq.xsl (https://groups.google.com/forum/#!searchin/dcm4che/cstorerq.xsl%7Csort:date/dcm4che/YeJNHQsYxP4/WUAjFxvZBgAJ)

A los estudios que vengan de A  le agregas "A" en el atributo 0008,0080
A los estudios que vengan de B  le agregas "B" en el atributo 0008,0080

Después, utiliza el archivo cfindrq.xsl (https://groups.google.com/forum/#!msg/dcm4che/X43VjG8Pi1E/CIQE43QAqAEJ) para agregar el nombre de institución a los queries que vengan de un sitio o de otro. Estarías forzando a los queries que vengan de "A" a filtrar por estudios que tengan un valor "A" en Institution Name.

Esas son tus opciones, lee cuidadosamente como funciona la coerción de atributos para hacerlo de esta manera (en el archivo ...server/default/conf/dcm4chee-ae/README.TXT) o vas a tener que hacerlo con el mecanismo de Study Permissions.

Abraham Del Villar Hernández

unread,
Dec 7, 2018, 8:33:16 AM12/7/18
to dcm4che
Muchas gracias, lo intentaré y haber si logro que funcione.

Abraham Del Villar Hernández

unread,
Dec 14, 2018, 11:51:16 AM12/14/18
to dcm4che
De nuevo consultando amigo.

De favor podrías indicarme en qué carpeta está o debo crear el archivo cfindrq.xls?

Por lo que he entendido, ese archivo puede ser la clave para lo que intento hacer.

Jon Ander Zuccaro

unread,
Dec 14, 2018, 12:01:56 PM12/14/18
to dcm4che
../server/default/conf/dcm4chee-ae/

Los archivos colocados directamente en el directorio afectan a todos los AETitle que llamen. Si quieres aplicar el archivo a un AETitle en particular crea una carpeta en ese directorio con el nombre del AETitle y coloca el archivo xsl adentro.

Cuidado que es xSl no xLs.

Abraham Del Villar Hernández

unread,
Dec 14, 2018, 1:03:11 PM12/14/18
to dcm4che
Ya intenté realizar una prueba pero no sucede nada.
Hay alguna parte que se tenga que activar para la ejecución o lectura del archivo cfindrq.xsl?

Jon Ander Zuccaro

unread,
Dec 14, 2018, 1:15:05 PM12/14/18
to dcm4che
Deberias colocar aqui una copia del archivo que estas utilizando.

Si todo esta funcionando deberia verse reflejado en el log del servidor al momento de hacerle una peticion.

De pronto es una buena idea reiniciar Jboss y probar de nuevo.

Abraham Del Villar Hernández

unread,
Dec 14, 2018, 1:34:30 PM12/14/18
to dcm4che
Intenté que la consulta me devolviera estudios que su Numero de acceso comenzara con 5879 de la siguiente manera.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>


  <xsl:param name="calling" select="'AE_CALLING'"/>
  <xsl:param name="called" select="'DCM4CHEE'"/>
  <xsl:param name="date" select="'20051206'"/>
  <xsl:param name="time" select="'115600.000'"/>
  <xsl:template match="/">
    <dataset>
        <xsl:choose>
<xsl:when test="starts-with($calling, 'CLIENTE1')">
<attr tag="00080050" vr="SH">5879*</attr>
</xsl:when>

        </xsl:choose>

    </dataset>
  </xsl:template>

</xsl:stylesheet>

El AE title de mi visor es CLIENTE1, en la ruta que me indicaste (../server/default/conf/dcm4chee-ae/) cree la carpeta de nombre CLIENTE1 y en ella el archivo cfindrq.xsl con el codigo anterior, reinicie el servidor y parece no funcionar.

Jon Ander Zuccaro

unread,
Dec 14, 2018, 2:06:46 PM12/14/18
to dcm4che
Simplifica de esta manera:

En dcm4chee-ae crea una carpeta CLIENTE1

Dentro de la carpeta CLIENTE1 crea el archivo con este contenido:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
 
<xsl:param name="calling" select="'AE_CALLING'"/>
 
<xsl:param name="called" select="'DCM4CHEE'"/>
 
<xsl:param name="date" select="'20051206'"/>
 
<xsl:param name="time" select="'115600.000'"/>
 
<xsl:template match="/">
   
<dataset>

       
<attr tag="00080050" vr="SH">5879*</attr>

   
</dataset>
 
</xsl:template>

</xsl:stylesheet>

Con eso te ahorras la comparación del calling AETitle porque solo se va a aplicar a lo que venga de CLIENTE1

Revisa si tienes una entrada en el log del servidor parecida a esta después de cada query:

CLIENTE1->DCM4CHEE (TCPServer-1) [org.dcm4chex.archive.util.CoercionUtils] Coerce (0008,0050) Accession Number,SH,*0,#0,[] to (0008,0050) Accession Number,SH,*1,#6,[5879*]


Asegúrate también de que el calling AETitle sea realmente "CLIENTE1"

Abraham Del Villar Hernández

unread,
Dec 14, 2018, 5:20:31 PM12/14/18
to dcm4che
Por ahora ya funciona.
Seguiré haciendo pruebas y analizando los resultados.
Muchas gracias por el aporte.

Abraham Del Villar Hernández

unread,
Mar 19, 2019, 10:08:09 AM3/19/19
to dcm4che
Hola de nuevo Jon.

Para consultarte si es que existe alguna forma de usar el operador OR en este tipo de consultas.

Ejemplo: Retornar estudios con Numero de acceso 5879* ó 5880.

<dataset>
        
<attr tag="00080050" vr="SH">5879*</attr> or <attr tag="00080050" vr="SH">5880*</attr>
</dataset>

De antemano muchas gracias por el apoyo.

Saludos!

Jon Ander Zuccaro

unread,
Mar 19, 2019, 12:25:15 PM3/19/19
to dcm4che
No, creo que eso no va a funcionar.

Creo que esto tampoco va a funcionar:

<attr tag="00080050" vr="SH">5879* or 5880*</attr>

XSLT tiene el operador "or" pero no así como lo estas utilizando.

Creo que no vas a poder seguir usando el Accession Number, tendrás que usar otro campo que sea realmente único para cada sitio.

Prueba de todas maneras, tampoco estoy tan seguro.

Abraham Del Villar Hernández

unread,
Mar 21, 2019, 9:54:40 AM3/21/19
to dcm4che
Podrías enseñarme como usar ese operador por favor?

Jon Ander Zuccaro

unread,
Mar 21, 2019, 11:23:58 AM3/21/19
to dcm4che
Para saber por que no va a funcionar tienes que entender lo que estas haciendo.

En el archivo de coerción estas agregando a la solicitud que vino del Nodo DICOM un valor adicional que es el equivalente a que desde la estación desde donde haces la búsqueda tengas un campo para Accession Number y ahí escribas "5879*" y le des a buscar.

Prueba lo siguiente, ve a la búsquda de dcm4chee y en el campo Accession Number coloca "5879*"... veras que te va a traer todos los estudios que tengan un Accession Number que comienza por 5879... pero si en la búsqueda escribes "5879* or 5880*" no te va a traer nada porque no se interpreta el operador "or".

Aunque dcm4chee soporta según su DICOM Conformance Statement búsquedas por rango de algunos de los campos del estudio, eso solo funciona para campos numéricos y el Accession Number no es un campo numérico porque puede tener letras, el caso es que no hay una manera de que puedas hacer una búsqueda que sea estudios que tengan un accesion number que comience por X o por Y a la vez.

Vas a tener que usar otro campo o vas a tener que agregar al accession number un prefijo que puedas controlar mediante un trigger en la base de datos, por ejemplo, cada vez que se cree un estudio yo haría un trigger que verifique si el accession number comienza por 5879 o 5880 y le agregaría algo tipo "A_" por delante, entonces tendrías accession numbers de la manera A_5880... y A_5879... de manera que en tu archivo de coerción usarias "A_*"

Otra opción es que entre dcm4chee y el nodo que hace la búsqueda coloques un Proxy, de manera que el Nodo haga la búsqueda contra el Proxy y el Proxy haga varias búsquedas contra dcm4chee para cada variante de Accession Number, combine todos los resultados y devuelva la lista de la sumatoria de estudios que cumplen con ambos criterios. No se si puedes hacer eso con algo como Mirth Connect o lo programas directamente usando el toolkit.

Reply all
Reply to author
Forward
0 new messages