Ir al contenido principal

Programación de flujos de trabajo

Programación

Programación DICOM

La programación DICOM incluye los atributos DICOM Proxy y DICOM Wb.

DICOM Proxy

Operaciones:

La programación de flujos de trabajo DICOM dentro de DICOM Proxy admite actualmente cuatro operaciones:

  • Envío DICOM (CSTORESCU): Envío de objetos DICOM a otra entidad.

  • Recepción DICOM (CSTORESCP): Recepción de objetos DICOM de otra entidad.

  • Búsqueda de salida (CFINDSCP): Aplicación de scripts al conjunto de datos resultante de las operaciones C-FIND, que devuelven resultados de búsqueda.

  • Búsqueda entrante (CFINDSCU): Aplicación de scripts al conjunto de datos de solicitud de las operaciones C-FIND, que contienen parámetros de búsqueda.

Los tipos de operación se definen como enumeraciones en DICOMOperationType.cs de RamSoft.Common. Esto proporciona a los usuarios flexibilidad para determinar el escenario en el que desean ejecutar su lógica.

Ejemplo de script:

Este script modifica el número de acceso añadiéndole «RAM» al principio al recibir objetos. Si el número de acceso es «1234», el resultado será «RAM1234».

(function() {
var accessionNum;

// Para la operación DICOM Send
if (Operation === 'CSTORESCU') {
// Lectura del número de acceso
if (DICOMObject["00080050"]) {
accessionNum = DICOMObject["00080050"]["Value"];
}

// Actualización del número de acceso
if ("00080050" in DICOMObject) {
DICOMObject["00080050"] = {"vr" : "SH", "Value": [ 'RAM ' + accessionNum]}
}
}
})();

DICOM Web

Operaciones:

La programación de scripts DICOM en DICOM Web implica varias operaciones:

  • Búsqueda entrante (SearchInbound): Búsqueda de objetos DICOM en la dirección entrante.

  • Búsqueda saliente (SearchOutbound): Búsqueda de objetos DICOM en la dirección saliente.

  • Recuperación entrante (RetrieveInbound): Recuperación de objetos DICOM en la dirección de entrada.

  • Recuperación saliente (RetrieveOutbound): Recuperación de objetos DICOM en la dirección de salida.

  • Almacenamiento entrante (StoreInbound): Almacenamiento de objetos DICOM en la dirección entrante.

  • Almacenamiento saliente (StoreOutbound): Almacenamiento de objetos DICOM en la dirección saliente.

Los tipos de operación se definen como enumeraciones en DICOMOperationType.cs de RamSoft.Common.

Script de ejemplo:

Este script muestra diversos escenarios de modificación de atributos DICOM en función de diferentes operaciones.

(function () {
var patientName;
if (Operation === 'SearchOutbound') {
// Lectura del nombre del paciente
if (DICOMObject['PatientName']) {
patientName = DICOMObject['PatientName'];
}
// Actualización de PatientName
if ('PatientName' in DICOMObject) {
DICOMObject['PatientName'] = 'SearchOut^' + patientName;
}
}

if (Operation === 'SearchInbound') {
// Lectura de PatientName
if (DICOMObject['PatientName']) {
patientName = DICOMObject['PatientName'];
}
// Actualización del nombre del paciente
if ('PatientName' in DICOMObject) {
DICOMObject['PatientName'] = 'SearchIn^' + patientName;
}
}

var accessionNum;

if (Operation === 'StoreOutbound') {
// Lectura del número de acceso
if (DICOMObject['00080050']) {
accessionNum = DICOMObject['00080050']['Value'];
}

// Actualización del número de acceso
if ('00080050' in DICOMObject) {
DICOMObject['00080050'] = { vr: 'SH', Value: ['StoreOut^' + accessionNum] };
}
}

if (Operation === 'StoreInbound') {
// Lectura del número de acceso
if (DICOMObject['00080050']) {
núm. de acceso = DICOMObject['00080050']['Value'];
}

// Actualización del número de acceso
si ('00080050' está en DICOMObject) {
DICOMObject['00080050'] = { vr: 'SH', Value: ['StoreIn^' + accessionNum] };
}
}

if (Operation === 'RetrieveOutbound') {
// Lectura del número de acceso
if (DICOMObject['00080050']) {
accessionNum = DICOMObject['00080050']['Value'];
}

// Actualización del número de acceso
if ('00080050' in DICOMObject) {
DICOMObject['00080050'] = { vr: 'SH', Value: ['RetrieveOut^' + accessionNum] };
}
}

if (Operation === 'RetrieveInbound') {
// Lectura del número de acceso
if (DICOMObject['00080050']) {
accessionNum = DICOMObject['00080050']['Value'];
}

// Actualización del número de acceso
if ('00080050' in DICOMObject) {
DICOMObject['00080050'] = { vr: 'SH', Value: ['RetrieveIn^' + accessionNum] };
}
}
})();

Programación de flujos de trabajo mediante el Editor de scripts

El Editor de scripts de flujos de trabajo permite a los usuarios personalizar los flujos de trabajo mediante scripts de JavaScript. Esta función ofrece a las organizaciones gestoras la flexibilidad necesaria para diseñar scripts personalizados que definan su flujo de trabajo, los cuales pueden ser heredados posteriormente por organizaciones subordinadas o de imagenología. El Editor de scripts proporciona accesos directos para operaciones de uso habitual, recursos JSON DICOM y otros parámetros, lo que facilita una personalización fluida.

Pasos para configurar el flujo de trabajo mediante el Editor de scripts:

  1. Acceda a la programación de flujos de trabajo: Navegue hasta la sección «Automatización de flujos de trabajo» .

wf 12

  1. Abra el editor de scripts: Haga clic en la esquina superior derecha de «Automatización de flujos de trabajo» , lo que le dirigirá a la página de programación de flujos de trabajo.

WF 13

  1. Edite el script: Haga clic en el botón «Editar» para abrir el script en el Editor de scripts de flujos de trabajo. Esta acción mostrará el panel de herramientas, que contiene diversas opciones para agilizar la creación de scripts.

  2. Utilice el panel de herramientas: El panel de herramientas ofrece varias funcionalidades:

> Operaciones: Incluye accesos directos para las operaciones «Fetch», «Retrieve and Route», > «Route» y «Status Transition», lo que facilita la personalización del flujo de trabajo. > > DICOM JSON: Ayuda a componer la estructura DICOM JSON necesaria para una operación «Fetch». > > > Campos FHIR: Proporciona acceso a los campos FHIR de uso habitual para facilitar la > integración. Puede arrastrar y soltar estos campos en el editor de scripts. > > Dispositivos: Muestra la lista de estaciones asociadas a la > organización específica. > > Estados de los estudios: Muestra una lista de los estados de los estudios a modo de referencia.

WF 14

  1. Creación del script: Puede escribir directamente el script del flujo de trabajo en el editor de scripts de flujo de trabajo o utilizar los atajos proporcionados en el panel de herramientas para agilizar la creación del script.

  2. Implementar script: Una vez creado el script, haga clic en «Implementar». Esta acción garantiza que el script esté listo y se ejecute cuando se produzca el evento correspondiente.

  3. Guardar o descartar cambios: Tras crear o editar el script, puede elegir «Guardar» para conservar los cambios o «Cancelar» para descartarlos.

Personalización del flujo de trabajo con operaciones:

  1. Operación de recuperación: Ejecuta una búsqueda C-FIND en todas las estaciones de archivo asociadas a la organización gestora mediante el dispositivo OmegaAI Link . Esta operación busca estudios basándose en los parámetros de búsqueda definidos dentro de la estructura JSON de C-FIND. Nota: Solo se buscarán las estaciones DICOM que tengan habilitada la opción «Servidor de archivo».

  2. Operación de recuperación y reenvío: Recupera un estudio de una estación de archivo y, posteriormente, lo reenvía a otra estación. El caso de uso más habitual consiste en enviar un estudio dentro del sistema junto con los estudios anteriores recuperados previamente.

Ejemplo de script de recuperación y reenvío:

(function(operationJson, imagingStudyJson, patientJson, encounterJson, serviceRequestJson, organizationJson, practitionerJson) {
function getExtensionValue(imagingStudyJson, url, type) {
let data = imagingStudyJson['extension'].find((item) => {
return item.url == url;
});
return data ? data[type] : null;
}

if (getExtensionValue(imagingStudyJson, 'http://hl7.org/fhir/us/core/StructureDefinition/status', 'valueString') == 'COMPLETED') {
let findDICOMJson = {};
findDICOMJson["00100020"] = { "vr": "LO", "Value": [ patientJson.identifier[0].value ] };
findDICOMJson["00100010"] = { "vr": "PN", "Value": [ patientJson.name[0].text ] };
// Buscar estudios relacionados
host.fetch(imagingStudyJson, patientJson, findDICOMJson);
}

if (operationJson.type == 'Fetched Studies') {
let studies = operationJson.studies;

// Determinar qué estudios son relevantes
for (let study of studies) {
if (study.description == 'PET/CT DEL CRÁNEO AL MUSLO') {
host.retrieveAndRoute(study, 'toronto-hgua', 3);
}
}

// Envío al dispositivo
host.route('toronto-hgua', 3);
}
})();
  1. Operación de envío: Envía un estudio dentro de OmegaAI a otro sistema. Esta operación se lleva a cabo mediante el envío de una tarea de almacenamiento DICOM, que posteriormente es procesada por el dispositivo OmegaAI Link. Nota: Un caso de uso habitual consiste en enviar un estudio dentro del sistema junto con estudios anteriores recuperados previamente.

Script de ejemplo para el enrutamiento de objetos:

Este script enviará objetos individuales tan pronto como se reciban o se importen.

(function(operationJson, imagingStudyJson, patientJson, encounterJson, serviceRequestJson, organizationJson, practitionerJson, objectJson, deviceJson) {
if (operationJson.type == 'DICOM Object Received' || operationJson.type == 'DICOM Object Imported' ) {
// Envía el objeto al dispositivo (objectJson, imagingStudyJson, deviceName, deviceId)
host.routeObject(objectJson, imagingStudyJson, '11MED PACS LitePowerServer', 51);
}
})