Esta página explica como os estudos, as séries e as instâncias DICOM na Cloud Healthcare API podem ser atualizados e corrigidos no local. Para obter informações sobre como preencher lojas na Cloud Healthcare API com dados DICOM, consulte Usar a norma DICOMweb.
Atualizar instâncias DICOM
As instâncias DICOM podem ser substituídas carregando uma nova versão do ficheiro .dcm
.
Semelhante a storeInstances
,
também pode usar um ficheiro de várias partes para
atualizar várias instâncias de uma vez (geralmente para atualizar um
estudo ou uma série com várias instâncias). Após a atualização, a instância original é totalmente substituída.
Ao contrário do storeInstances
,
não é possível atualizar uma instância completa com metadados JSON. Para atualizações parciais com JSON, consulte o artigo Aplicação de patches a metadados DICOM.
A atualização de uma instância é tratada como uma "inserção/atualização". Se a instância existir, é atualizada. Se a instância não existir, é criada e inserida na loja.
Quando insere uma nova instância, os valores SOP_CLASS_UID
,
SOP_INSTANCE_UID
,
STUDY_INSTANCE_UID
e SERIES_INSTANCE_UID
são recolhidos dos metadados fornecidos. Os UIDs têm de cumprir os seguintes requisitos:
- Contêm apenas valores numéricos separados por pontos.
- Não contenham informações de saúde protegidas (PHI).
O exemplo seguinte mostra como atualizar uma instância num arquivo DICOM. Para mais
informações, consulte
projects.locations.datasets.dicomStores.updateInstances
.
curl
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_ID
: o ID do seu Google Cloud projetoLOCATION
: a localização do conjunto de dadosDATASET_ID
: o conjunto de dados principal do arquivo DICOMDICOM_STORE_ID
: o ID da loja DICOMDICOM_INSTANCE_FILE
: o caminho para um ficheiro de instância DICOM no seu computador local que termina com o sufixo.dcm
O exemplo seguinte mostra um pedido PUT
através de 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"
O resultado é a seguinte resposta XML:
Atualizar várias instâncias em simultâneo
O exemplo seguinte mostra como atualizar um estudo ou uma série DICOM, que consiste em várias instâncias, através de uma mensagem multipartes.
curl
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_ID
: o ID do seu Google Cloud projetoLOCATION
: a localização do conjunto de dadosDATASET_ID
: o conjunto de dados principal do arquivo DICOMDICOM_STORE_ID
: o ID da loja DICOMMULTIPART_FILE
: o caminho para um ficheiro multipart no seu computador local. O ficheiro contém várias instâncias DICOM, com cada uma separada por um limite.BOUNDARY
: o limite usado para separar as instâncias DICOM no ficheiro de várias partes
O exemplo seguinte mostra um pedido PUT
através de 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"
O resultado é a seguinte resposta XML:
Aplicação de patches aos metadados DICOM
Pode adicionar, remover ou editar uma etiqueta DICOM ao nível do estudo, da série ou da instância. O comportamento de cada um dos níveis é o seguinte:
- Se editar uma etiqueta ao nível do estudo através de
projects.locations.datasets.dicomStores.studies.updateMetadata
, a edição aplica-se a todas as instâncias no estudo. É devolvida uma operação de longa duração - Se editar uma etiqueta ao nível da série através de
projects.locations.datasets.dicomStores.studies.series.updateMetadata
, a edição aplica-se a todas as instâncias da série. É devolvida uma operação de longa duração - Se editar uma etiqueta ao nível da instância através de
projects.locations.datasets.dicomStores.studies.series.instances.updateMetadata
, a edição aplica-se apenas à instância especificada. A edição ocorre de forma síncrona e são devolvidos metadados JSON sobre a instância editada
Para patches que devolvem uma operação de longa duração, quaisquer falhas na aplicação do patch a uma instância são registadas no Cloud Logging. O número de instâncias com falhas é devolvido nos metadados da operação, juntamente com um link para os registos associados.
JSON Patch
A sintaxe para a edição de etiquetas segue a norma JSON Patch.
Apenas são suportadas as operações add
, replace
e remove
. Pode especificar uma etiqueta através da respetiva palavra-chave pública (se a etiqueta for pública) ou de um identificador hexadecimal de 8 dígitos. Tenha em atenção que todos os caminhos das etiquetas têm de ter o prefixo /
. Quando add
ou replace
uma etiqueta, tem de especificar um VR e um valor para a etiqueta, juntamente com o identificador da etiqueta. Quando remove
uma etiqueta, só tem de especificar o identificador da etiqueta.
A edição de etiquetas numa sequência é suportada, bem como a substituição de sequências.
Consulte as limitações de patch para saber o que não é suportado através do patch. Para especificar uma etiqueta numa sequência, separe a sequência e a etiqueta secundária com o índice do item e barras invertidas. Segue-se um exemplo que add
s a etiquetaInstanceCreationDate
ao 2.º artigo de ReferencedInstanceSequence
(tenha em atenção que os artigos da sequência têm índice 0):
[
{
"op": "add",
"path": "/ReferencedInstanceSequence/1/InstanceCreationDate",
"value": {
"vr": "DA",
"Value": [ "20240501" ]
}
}
]
Para adicionar uma sequência completa (ou substituir uma sequência completa), o campo value
da entrada JSON Patch tem de ser a representação JSON DICOM de uma sequência. Segue-se um exemplo de adição da sequência OtherPatientIDs
com 2 elementos a uma instância:
[
{
"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ção de patches a uma única instância
curl
Para editar etiquetas DICOM para uma única instância, faça um pedido PATCH
e especifique as seguintes informações:
PROJECT_ID
: o ID do seu Google Cloud projetoLOCATION
: a localização do conjunto de dadosDATASET_ID
: o conjunto de dados principal do arquivo DICOMDICOM_STORE_ID
: o ID da loja DICOMSTUDY_UID
: o UID do estudo da instância DICOMSERIES_UID
: o UID da série da instância DICOMINSTANCE_UID
: o UID da instância DICOM
O exemplo seguinte mostra um pedido PATCH
através de 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"
Se o pedido for bem-sucedido, o servidor devolve a resposta no formato JSON:
{ "studyUID": "STUDY_UID", "seriesUID": "SERIES_UID", "instanceUID": "INSTANCE_UID", "createTimestamp": "CREATE_TIMESTAMP", "metadata": { // Full DICOM JSON metadata for the instance after edits applied } }
Aplicar patches a um estudo ou uma série
curl
Para editar etiquetas DICOM para todas as instâncias num determinado estudo, faça um pedido PATCH
e especifique as seguintes informações:
PROJECT_ID
: o ID do seu Google Cloud projetoLOCATION
: a localização do conjunto de dadosDATASET_ID
: o conjunto de dados principal do arquivo DICOMDICOM_STORE_ID
: o ID da loja DICOMSTUDY_UID
: o UID do estudo DICOM
O exemplo seguinte mostra um pedido PATCH
através de 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"
Se o pedido for bem-sucedido, o servidor devolve a resposta no formato JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
A resposta contém um ID da operação. Para acompanhar o estado da operação
e ver mais detalhes, use o
método Operation get
:
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"
Se o pedido for bem-sucedido, o servidor devolve uma resposta com o estado da operação no 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": "..." } }
Limitações
Aplicam-se as seguintes limitações e comportamento adicional quando edita etiquetas DICOM:
- Não pode editar as seguintes etiquetas:
SOPInstanceUID (0008,0018)
SeriesInstanceUID (0020,000E)
StudyInstanceUID (0020,000D)
Modality (0008,0060)
ModalitiesInStudy (0008,0061)
SpecificCharacterSet (0008,0005)
- Qualquer etiqueta com um número de grupo inferior a "0008"
- Qualquer etiqueta considerada bulkdata (consulte a definição de bulkdata)
- Além da definição anterior, não é possível adicionar nenhuma etiqueta com um VR de OD, OF, OL, OV, SV ou UV através de
patch
(operaçõesadd
oureplace
), independentemente do comprimento
- Não é possível editar uma sequência que contenha uma etiqueta considerada dados em massa
- Isto significa que as operações
replace
ouremove
numa etiqueta de sequência falham se alguma das etiquetas contidas na sequência original for considerada bulkdata - Além disso, quaisquer operações
replace
ouadd
numa etiqueta de sequência falham se alguma das etiquetas contidas na nova sequência for considerada bulkdata
- Isto significa que as operações
- Se tentar
replace
ouremove
uma etiqueta que não existe, a API Cloud Healthcare devolve um erro e a edição falha - Se tentar
add
uma etiqueta que já existe, a operação de edição comporta-se da mesma forma que se tivesse chamado uma operação de substituição. A operação de substituição substitui o valor existente da etiqueta pelo novo valor especificado na operação - Embora seja possível adicionar/substituir/remover sequências (e também editar etiquetas em itens numa sequência), não é possível adicionar/substituir/remover itens individuais numa sequência.
- Na prática, isto significa que qualquer edição com um caminho de etiqueta que termine num índice será rejeitada (por exemplo,
/ReferencedSeriesSequence/0
) - Se forem necessárias alterações a um item individual numa sequência, substitua a sequência principal completa por uma cópia com as alterações aplicadas
- Na prática, isto significa que qualquer edição com um caminho de etiqueta que termine num índice será rejeitada (por exemplo,