Tranformar Fichero .dcm enviado a Servicio REST mediante STOW-RS a formato DICOM de Ensemble para emitirlo por TCP
Buenos días,
Nos gustaría compartir lo que estamos investigando y en lo que necesitamos su apoyo, para continuar con ello:
1) Hemos desarrollado un Circuito REST: Servicio REST + Proceso + Operacion REST.
Los cuales reciben un fichero de estudios de imágenes médicas .dcm y lo envían tal cual. Para ello enviamos mediante el simulador dcm4che y en concreto mediante la línea:
./stowrs --disableTM --allowAnyHost --url https://[IP del ESB]:[Puerto del ESB]/aplicaciones/scs/cconcertadostest/almacenarImagen /opt/contenedor/PACS/dcm4che-5.27.0-bin/dcm4che-5.27.0/bin/shared/dicom/d1I00012.dcm
Observamos la traza:
Enviamos el mismo fichero tal cual, recibiéndolo en el Servidor Destino que simulamos mediante dcm4che y comando:
./stowrsd -b 8080 --unpack
De manera que en el Servidor se genera el .dcm
De manera que se ve la imagen:
2) Hemos probado un proceso DICOM > Operacion TCP > Servidor Destino que recibe DICOM
Reenviando una traza:
El servidor el cual hemnos iniciado previamente mediante:
./storescp -b VNAPRE:11112 --filepath {00100020}/{0020000D}/{0020000E}/{00080018}.dcm
recibe el DICOM enviado mediante la Operacion TCP
Y se genera el .dcm
Viendose de manera igual:
3) El desafío, reto y necesidad que se nos genera es la siguiente:
El circuito real necesario es:
Servicio REST + Proceso + Operación TCP
Es decir, sistema origen es necesario que nos envíe sí o sí en REST, y sistema destino necesita sí o sí que enviemos mediante TCP
¿ qué documentación , ejemplos , medios , herramientas , vídeos , tutoriales , referencias , o lecturas nos pueden indicar, exponer, anotar; para nosotros indagar y buscar la forma de realizarlo ?
Hemos indagado por nuestra cuenta lo siguiente:
Hemos añadido en el Servicio REST las líneas que pensamos que parece que pudieran convertir un fichero .dcm REST en un DICOM de Ensemble a Enviar por TCP:
set dicom = ##class(EnsLib.DICOM.Document).%New()
do ##class(EnsLib.DICOM.Document).CreateFromDicomFileStream(pInput,dicom)
set objetoEntrada.dicom = dicom
$$$LOGINFO("objetoEntrada.dicom: "_objetoEntrada.dicom)
Además, a fines informativos, para visualizar en el Visor de Mensajes, el contenido de los EnsLib.DICOM.Document hemos escrito en la clase:
Siendo el Mensaje Request:
{
Parameter RESPONSECLASSNAME = "Mensajes.Response.CConcertadostoPACS.AlmacenarImagenResponse";
Property mensaje As %String(MAXLEN = "");
Property dicom As EnsLib.DICOM.Document;
De esta manera vemos en la traza, una estructura que recuerda a DICOM de Ensemble , la pega, reto, desafío, o lo que nos queda por entender y que nos resulta extraño es ¿por qué el <FileStream> es vacío? :
Siendo una traza DICOM de Ensemble con Imagen una en la que sí se ve el <FileStream> relleno:
🤲 Muchas gracias de antemano, porque ustedes disponen de más conocimiento, entereza, práctica, saber hacer, templanza y sobre todo nos pueden auxiliar, aportar, apoyar; en esta aventura
¿ qué documentación , ejemplos , medios , herramientas , vídeos , tutoriales , referencias , o lecturas nos pueden indicar, exponer, anotar; para nosotros indagar y buscar la forma de realizarlo ?
Un saludo
Hola,
En este bloque de código:
set dicom = ##class(EnsLib.DICOM.Document).%New()
do ##class(EnsLib.DICOM.Document).CreateFromDicomFileStream(pInput,dicom)
set objetoEntrada.dicom = dicom
$$$LOGINFO("objetoEntrada.dicom: "_objetoEntrada.dicom)
El do ##class(EnsLib.DICOM.Document).CreateFromDicomFileStream() crea siempre una nueva instancia de Dicom document que devuelve como output. Creo que en este bloque de codigo no hace falta hacer el %New() previo de la variable "dicom" y hay que pasarle por referencia a la funccion "CreateFromDicomFileStream" (con el "PUNTO" delante del parametro dicom:
do ##class(EnsLib.DICOM.Document).CreateFromDicomFileStream(pInput,.dicom)
No se si sera suficiente para areglar el problema, es solo un primer paso.
Hola Yone,
En los adaptadores de interoperabilidad no hay directamente un adaptador STOW-RS pero puedes intentar implementar la parte de servicios REST en la plataforma y luego enviarlo utilizando los adaptadores DICOM TCP convencionales.
Los servicios y operaciones incluidos que utilizan adaptadores DICOM TCP emplean siempre como mensaje
EnsLib.DICOM.Document
. Y sí, puedes instanciar un documento DICOM desde un fichero (stream) conCreateFromDicomFileStream
.Comprueba siempre el resultado de
CreateFromDicomFileStream
por si devuelve algún error. Si todo va bien, debería ser1
o lo que es lo mismo un$$$OK
.Una vez tengas tu instancia de
EnsLib.DICOM.Document
ya puedes enviarlo por DICOM TCP convencional. En tu ejemplo, parece que lo has incluido en otro mensaje.Quizá se haya construido con errores el
EnsLib.DICOM.Document
, o simplemente sea un tema de representación en el visor de mensajes. Siempre puedes instanciar el mensaje en concreto que quieras en el terminal y examinar su contenido para quedarte seguro.