En esta página, se explica cómo se pueden actualizar y aplicar parches en el lugar a los estudios, las series y las instancias de DICOM en la API de Cloud Healthcare. Para obtener información sobre cómo propagar almacenes en la API de Cloud Healthcare con datos de DICOM, consulta Cómo usar el estándar DICOMweb.
Actualiza instancias de DICOM
Las instancias de DICOM se pueden reemplazar si subes una versión nueva del archivo .dcm.
Al igual que storeInstances,
también se puede usar un archivo multiparte para
actualizar varias instancias a la vez (a menudo para actualizar un
estudio o una serie con varias instancias). Después de la actualización, la instancia original se reemplazará por completo.
A diferencia de storeInstances,
no se puede actualizar una instancia completa con metadatos JSON. Para obtener actualizaciones parciales
con JSON, consulta Aplica parches a los metadatos de DICOM.
La actualización de una instancia se tratará como una "inserción o actualización". Si la instancia existe, se actualizará. Si la instancia no existe, se creará y se insertará en el almacén.
Cuando se inserta una instancia nueva, los valores SOP_CLASS_UID, SOP_INSTANCE_UID, STUDY_INSTANCE_UID y SERIES_INSTANCE_UID se recopilan de los metadatos proporcionados. Los UIDs deben cumplir con estos requisitos:
- Contener solo valores numéricos separados por puntos
- No contener información de salud protegida (PHI)
En el siguiente ejemplo, se muestra cómo actualizar una instancia en un almacén de DICOM. Para obtener más
información, consulta
projects.locations.datasets.dicomStores.updateInstances.
curl
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_ID: es el ID del Google Cloud proyecto de .LOCATION: La ubicación del conjunto de datosDATASET_ID: El conjunto de datos superior del almacén de DICOMDICOM_STORE_ID: El ID del almacén de DICOMDICOM_INSTANCE_FILE: La ruta de acceso a un archivo de instancia de DICOM en tu máquina local, que finaliza en el sufijo.dcm
En el siguiente ejemplo, se muestra una solicitud PUT mediante curl.
curl -X PUT \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/dicom" \ --data-binary @DICOM_INSTANCE_FILE \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies"
El resultado es la siguiente respuesta XML:
Actualiza varias instancias a la vez
En el siguiente ejemplo, se muestra cómo actualizar un estudio o una serie de DICOM, que consta de varias instancias, con un mensaje multiparte.
curl
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_ID: es el ID del Google Cloud proyecto de .LOCATION: La ubicación del conjunto de datosDATASET_ID: El conjunto de datos superior del almacén de DICOMDICOM_STORE_ID: El ID del almacén de DICOMMULTIPART_FILE: La ruta de acceso a un archivo multiparte en tu máquina local. El archivo contiene varias instancias de DICOM, cada una separada por un límite.BOUNDARY: El límite que se usa para separar las instancias de DICOM en el archivo multiparte
En el siguiente ejemplo, se muestra una solicitud PUT mediante curl.
curl -X PUT \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: multipart/related; type=application/dicom; boundary=BOUNDARY" \ --data-binary @MULTIPART_FILE \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies"
El resultado es la siguiente respuesta XML:
Aplica parches a los metadatos de DICOM
Puedes agregar, quitar o editar una etiqueta de DICOM a nivel del estudio, la serie o la instancia. El comportamiento para cada uno de los niveles es el siguiente:
- Si edita una etiqueta a nivel del estudio con
projects.locations.datasets.dicomStores.studies.updateMetadata, la edición se aplica a todas las instancias del estudio. Se mostrará una operación de larga duración. - Si editas una etiqueta a nivel de la serie con
projects.locations.datasets.dicomStores.studies.series.updateMetadata, la edición se aplica a todas las instancias de la serie. Se mostrará una operación de larga duración. - Si editas una etiqueta a nivel de la instancia con
projects.locations.datasets.dicomStores.studies.series.instances.updateMetadata, la edición solo se aplica a la instancia que especificaste. La edición se realizará de forma síncrona y se mostrarán los metadatos JSON sobre la instancia editada.
En el caso de los parches que muestran una operación de larga duración, cualquier falla en la aplicación del parche a una instancia se registrará en Cloud Logging. La cantidad de instancias con errores se muestra en los metadatos de la operación, junto con un vínculo a los registros asociados.
Parche JSON
La sintaxis para editar etiquetas sigue el
estándar de parche JSON.
Solo se admiten las operaciones add, replace y remove. Puedes especificar una etiqueta con su palabra clave pública (si la etiqueta es pública) o mediante un identificador hexadecimal de 8 dígitos. Ten en cuenta que todas las rutas de acceso de las etiquetas deben tener el prefijo /. Cuando add o replace una etiqueta, debes especificar una VR y un valor para la etiqueta junto con el identificador de etiqueta. Cuando remove una etiqueta, solo necesitas especificar el identificador de la etiqueta.
Se admite la edición de etiquetas dentro de una secuencia, así como el reemplazo de secuencias.
Consulta las limitaciones de los parches para ver qué no se admite con el
parche. Para especificar una etiqueta dentro de una secuencia, separa la secuencia y la etiqueta secundaria con el índice del elemento y las barras invertidas. Aquí tienes un ejemplo en el que se add la etiqueta InstanceCreationDate al segundo elemento de ReferencedInstanceSequence (ten en cuenta que los elementos de la secuencia tienen un índice 0):
[
{
"op": "add",
"path": "/ReferencedInstanceSequence/1/InstanceCreationDate",
"value": {
"vr": "DA",
"Value": [ "20240501" ]
}
}
]
Para agregar una secuencia completa (o reemplazar una secuencia completa), el campo value de la entrada de parche JSON debe ser la representación JSON de DICOM de una secuencia. Aquí tienes un ejemplo de cómo agregar la secuencia OtherPatientIDs con 2 elementos a una instancia:
[
{
"op": "add",
"path": "/OtherPatientIDs",
"value": {
"vr": "SQ",
"Value": [
{
"00100020": {
"vr": "LO",
"Value": [ "54321" ]
},
"00100021": {
"vr": "LO",
"Value": [ "Hospital B" ]
}
},
{
"00100020": {
"vr": "LO",
"Value": [ "24680" ]
},
"00100021": {
"vr": "LO",
"Value": [ "Hospital C" ]
}
}
]
}
}
]
Aplica parches a una sola instancia
curl
Para editar las etiquetas de DICOM para una sola instancia, realiza una solicitud PATCH y especifica la siguiente información:
PROJECT_ID: es el ID del Google Cloud proyecto de .LOCATION: La ubicación del conjunto de datosDATASET_ID: El conjunto de datos superior del almacén de DICOMDICOM_STORE_ID: El ID del almacén de DICOMSTUDY_UID: El UID del estudio de la instancia de DICOMSERIES_UID: El UID de la serie de la instancia de DICOMINSTANCE_UID: El UID de la instancia de la instancia de DICOM
En el siguiente ejemplo, se muestra una solicitud PATCH mediante curl.
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data '[ { "op": "add", "path": "/ProductName", "value": { "vr": "LO", "Value": [ "My Product" ] } }, { "op": "replace", "path": "/PatientName", "value": { "vr": "PN", "Value": [ "New Patient Name" ] } }, { "op": "remove", "path": "/Manufacturer" } ]' \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_UID/series/SERIES_UID/instances/INSTANCE_UID/metadata"
Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:
{
"studyUID": "STUDY_UID",
"seriesUID": "SERIES_UID",
"instanceUID": "INSTANCE_UID",
"createTimestamp": "CREATE_TIMESTAMP",
"metadata": {
// Full DICOM JSON metadata for the instance after edits applied
}
}
Aplica parches a un estudio o una serie
curl
A fin de editar las etiquetas de DICOM para todas las instancias en un estudio determinado, realiza una solicitud PATCH y especifica la siguiente información:
PROJECT_ID: es el ID del Google Cloud proyecto de .LOCATION: La ubicación del conjunto de datosDATASET_ID: El conjunto de datos superior del almacén de DICOMDICOM_STORE_ID: El ID del almacén de DICOMSTUDY_UID: El UID del estudio de DICOM
En el siguiente ejemplo, se muestra una solicitud PATCH mediante curl.
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data '[ { "op": "add", "path": "/ProductName", "value": { "vr": "LO", "Value": [ "My Product" ] } }, { "op": "replace", "path": "/PatientName", "value": { "vr": "PN", "Value": [ "New Patient Name" ] } }, { "op": "remove", "path": "/Manufacturer" } ]' \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_UID/metadata"
Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:
{
"name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}
La respuesta contiene un ID de operación. Para realizar un seguimiento del estado de la operación
y ver más detalles, usa el
método get de la operación:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
Si la solicitud es exitosa, el servidor mostrará una respuesta con el estado de la operación en formato JSON:
{
"name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
"metadata": {
"@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata",
"apiMethodName": "google.cloud.healthcare.v1beta1.dicom.DicomWebService.UpdateStudyMetadata",
"createTime": "CREATE_TIME",
"endTime": "END_TIME",
"logsUrl": "CLOUD_LOGGING_URL",
"counter": {
"success": "1" // Number of instances updated in the study
}
},
"done": true,
"response": {
"@type": "..."
}
}
Limitaciones
Las siguientes limitaciones y comportamientos adicionales se aplican cuando se editan etiquetas de DICOM:
- No puedes editar las siguientes etiquetas:
SOPInstanceUID (0008,0018)SeriesInstanceUID (0020,000E)StudyInstanceUID (0020,000D)Modality (0008,0060)ModalitiesInStudy (0008,0061)SpecificCharacterSet (0008,0005)- Cualquier etiqueta con un número de grupo inferior a "0008"
- Cualquier etiqueta que se considere bulkdata (consulta la definición de bulkdata)
- Además de la definición anterior, no se puede agregar ninguna etiqueta con una VR de OD, OF, OL, OV, SV o UV con
patch(operacionesaddoreplace), independientemente de la longitud.
- No se puede editar una secuencia que contenga una etiqueta que se considere bulkdata.
- Esto significa que las operaciones
replaceoremoveen una etiqueta de secuencia fallarán si alguna de las etiquetas contenidas en la secuencia original se considera bulkdata. - Además, cualquier operación
replaceoadden una etiqueta de secuencia fallará si alguna de las etiquetas contenidas en la secuencia nueva se considera bulkdata.
- Esto significa que las operaciones
- Si intentas
replaceoremoveuna etiqueta que no existe, la API de Cloud Healthcare mostrará un error, y la edición fallará. - Si intentas
adduna etiqueta que ya existe, la operación de edición se comporta de la misma manera que si hubieras llamado a una operación de reemplazo. La operación de reemplazo sustituye el valor existente de la etiqueta por el valor nuevo especificado en la operación. - Si bien se pueden agregar, reemplazar o quitar secuencias (y también se pueden editar las etiquetas dentro de los elementos de una secuencia), no se pueden agregar, reemplazar ni quitar elementos individuales en una secuencia.
- En la práctica, esto significa que se rechazará cualquier edición con una ruta de acceso de etiqueta que termine en un índice (por ejemplo,
/ReferencedSeriesSequence/0). - Si es necesario realizar cambios en un elemento individual de una secuencia, reemplaza toda la secuencia superior por una copia que tenga los cambios aplicados.
- En la práctica, esto significa que se rechazará cualquier edición con una ruta de acceso de etiqueta que termine en un índice (por ejemplo,
Actualiza con DICOM Studio
Puedes usar DICOM Studio para actualizar los metadatos de DICOM de un estudio, una serie o una instancia.
Para actualizar los metadatos de DICOM con DICOM Studio, haz lo siguiente:
- Busca el estudio, la serie o la instancia que deseas actualizar.
- En los resultados de la búsqueda, haz clic en el elemento para navegar a la página de detalles correspondiente.
- Haz clic en la pestaña Metadatos.
- Haz clic en la casilla de verificación de una o más etiquetas que quieres editar y, luego, haz clic en Editar.
- En el panel de edición, expande la etiqueta que deseas modificar.
- Edita la palabra clave, la VR o el valor de la etiqueta.
- Haz clic en Guardar.
Todas las limitaciones aún se aplican a la interfaz de usuario. Además, la interfaz de usuario tiene las siguientes limitaciones:
- La interfaz de edición de etiquetas no admite la edición de etiquetas con una multiplicidad de valores (VM) superior a 1.
- La interfaz de edición de etiquetas no proporciona ninguna guía ni validación sobre los tipos de VR o valores esperados.