Cette page explique comment les études, les séries et les instances DICOM de l'API Cloud Healthcare peuvent être mises à jour et corrigées sur place. Pour savoir comment remplir les magasins de l'API Cloud Healthcare avec des données DICOM, consultez Utiliser la norme DICOMweb.
Mettre à jour des instances DICOM
Les instances DICOM peuvent être remplacées en important une nouvelle version du fichier .dcm.
Comme pour storeInstances,
un fichier multipart peut également être utilisé pour
mettre à jour plusieurs instances à la fois (souvent pour mettre à jour une
étude ou une série comportant plusieurs instances). Après la mise à jour, l'instance d'origine sera entièrement remplacée.
Contrairement à storeInstances,
la mise à jour d'une instance complète ne peut pas être effectuée avec des métadonnées JSON. Pour les mises à jour partielles
avec JSON, consultez Appliquer un correctif aux métadonnées DICOM.
La mise à jour d'une instance sera traitée comme une "mise à jour/insertion". Si l'instance existe, elle sera mise à jour. Si l'instance n'existe pas, elle sera créée et insérée dans le magasin.
Lors de l'insertion d'une nouvelle instance, les valeurs SOP_CLASS_UID, SOP_INSTANCE_UID, STUDY_INSTANCE_UID et SERIES_INSTANCE_UID sont collectées à partir des métadonnées fournies. Les UID doivent répondre aux exigences suivantes :
- Ne contenir que des valeurs numériques séparées par des points.
- Ne contenir aucune donnée de santé protégée.
L'exemple suivant montre comment mettre à jour une instance dans un magasin DICOM. Pour en savoir plus, consultez
projects.locations.datasets.dicomStores.updateInstances.
curl
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
PROJECT_ID: ID de votre Google Cloud projetLOCATION: emplacement de l'ensemble de donnéesDATASET_ID: ensemble de données parent du magasin DICOMDICOM_STORE_ID: ID du magasin DICOMDICOM_INSTANCE_FILE: chemin d'accès à un fichier d'instance DICOM sur votre ordinateur local, se terminant par le suffixe.dcm
L'exemple suivant montre une requête PUT utilisant 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"
La sortie est la réponse XML suivante :
Mettre à jour plusieurs instances à la fois
L'exemple suivant montre comment mettre à jour une étude ou une série DICOM, composée de plusieurs instances, à l'aide d'un message multipart.
curl
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
PROJECT_ID: ID de votre Google Cloud projetLOCATION: emplacement de l'ensemble de donnéesDATASET_ID: ensemble de données parent du magasin DICOMDICOM_STORE_ID: ID du magasin DICOMMULTIPART_FILE: chemin d'accès à un fichier multipart sur votre ordinateur local. Le fichier contient plusieurs instances DICOM, chacune séparée par une limite.BOUNDARY: limite utilisée pour séparer les instances DICOM dans le fichier multipart
L'exemple suivant montre une requête PUT utilisant 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"
La sortie est la réponse XML suivante :
Appliquer un correctif aux métadonnées DICOM
Vous pouvez ajouter, supprimer ou modifier un tag DICOM au niveau de l'étude, de la série ou de l'instance. Le comportement de chacun des niveaux est le suivant :
- Si vous modifiez un tag au niveau de l'étude à l'aide de
projects.locations.datasets.dicomStores.studies.updateMetadata, la modification s'applique à toutes les instances de l'étude. Une opération de longue durée sera renvoyée. - Si vous modifiez un tag au niveau de la série à l'aide de
projects.locations.datasets.dicomStores.studies.series.updateMetadata, la modification s'applique à toutes les instances de la série. Une opération de longue durée sera renvoyée. - Si vous modifiez un tag au niveau de l'instance à l'aide de
projects.locations.datasets.dicomStores.studies.series.instances.updateMetadata, la modification ne s'applique qu'à l'instance que vous avez spécifiée. La modification se produira de manière synchrone et les métadonnées JSON concernant l'instance modifiée seront renvoyées.
Pour les correctifs qui renvoient une opération de longue durée, tous les échecs d'application du correctif à une instance seront consignés dans Cloud Logging. Le nombre d'instances ayant échoué est renvoyé dans les métadonnées de l'opération, ainsi qu'un lien vers les journaux associés.
Correctif JSON
La syntaxe de modification des tags suit la
norme de correctif JSON.
Seules les opérations add, replace et remove sont acceptées. Vous pouvez spécifier un tag à l'aide de son mot clé public (si le tag est public) ou par un identifiant hexadécimal à huit chiffres. Notez que tous les chemins d'accès aux tags doivent être précédés d'un /. Lorsque vous add ou replace un tag, vous devez spécifier une VR et une valeur pour le tag, ainsi que l'identifiant du tag. Lorsque vous remove un tag, il vous suffit de spécifier l'identifiant du tag.
La modification des tags dans une séquence est acceptée, tout comme le remplacement de séquence.
Consultez les limites des correctifs pour savoir ce qui n'est pas accepté à l'aide d'un
correctif. Pour spécifier un tag dans une séquence, séparez la séquence et le tag enfant avec l'index de l'élément et des barres obliques inverses. Voici un exemple qui add le tag InstanceCreationDate au deuxième élément de ReferencedInstanceSequence (notez que les éléments de séquence sont indexés à partir de 0) :
[
{
"op": "add",
"path": "/ReferencedInstanceSequence/1/InstanceCreationDate",
"value": {
"vr": "DA",
"Value": [ "20240501" ]
}
}
]
Pour ajouter une séquence complète (ou remplacer une séquence complète), le champ value de l'entrée de correctif JSON doit être la représentation JSON DICOM d'une séquence. Voici un exemple d'ajout de la séquence OtherPatientIDs avec deux éléments à une instance :
[
{
"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" ]
}
}
]
}
}
]
Appliquer un correctif à une seule instance
curl
Pour modifier les tags DICOM d'une seule instance, envoyez une requête PATCH et spécifiez les informations suivantes :
PROJECT_ID: ID de votre Google Cloud projetLOCATION: emplacement de l'ensemble de donnéesDATASET_ID: ensemble de données parent du magasin DICOMDICOM_STORE_ID: ID du magasin DICOMSTUDY_UID: UID de l'étude de l'instance DICOMSERIES_UID: UID de la série de l'instance DICOMINSTANCE_UID: UID de l'instance DICOM
L'exemple suivant montre une requête PATCH utilisant 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 requête aboutit, le serveur renvoie la réponse au format JSON :
{
"studyUID": "STUDY_UID",
"seriesUID": "SERIES_UID",
"instanceUID": "INSTANCE_UID",
"createTimestamp": "CREATE_TIMESTAMP",
"metadata": {
// Full DICOM JSON metadata for the instance after edits applied
}
}
Appliquer un correctif à une étude ou une série
curl
Pour modifier les tags DICOM de toutes les instances d'une étude donnée, envoyez une requête PATCH et spécifiez les informations suivantes :
PROJECT_ID: ID de votre Google Cloud projetLOCATION: emplacement de l'ensemble de donnéesDATASET_ID: ensemble de données parent du magasin DICOMDICOM_STORE_ID: ID du magasin DICOMSTUDY_UID: UID de l'étude DICOM
L'exemple suivant montre une requête PATCH utilisant 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 requête aboutit, le serveur renvoie la réponse au format JSON :
{
"name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}
La réponse contient un ID d'opération. Pour suivre l'état de l'opération
et afficher plus de détails, utilisez la
méthode getde l'opération :
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 requête aboutit, le serveur renvoie une réponse avec l'état de l'opération au format 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": "..."
}
}
Limites
Les restrictions et comportements supplémentaires suivants s'appliquent lors de la modification de tags DICOM :
- Vous ne pouvez pas modifier les tags suivants :
SOPInstanceUID (0008,0018)SeriesInstanceUID (0020,000E)StudyInstanceUID (0020,000D)Modality (0008,0060)ModalitiesInStudy (0008,0061)SpecificCharacterSet (0008,0005)- Tout tag dont le numéro de groupe est inférieur à "0008"
- Tout tag considéré comme bulkdata (voir la définition de bulkdata)
- En plus de la définition précédente, aucun tag avec une VR de type OD, OF, OL, OV, SV ou UV ne peut être ajouté à l'aide de
patch(opérationsaddoureplace), quelle que soit sa longueur.
- Une séquence contenant un tag considéré comme bulkdata ne peut pas être modifiée.
- Cela signifie que les opérations
replaceouremovesur un tag de séquence échoueront si l'un des tags contenus dans la séquence d'origine est considéré comme bulkdata. - De plus, toutes les opérations
replaceouaddsur un tag de séquence échoueront si l'un des tags contenus dans la nouvelle séquence est considéré comme bulkdata.
- Cela signifie que les opérations
- Si vous essayez de
replaceou deremoveun tag qui n'existe pas, l'API Cloud Healthcare renvoie une erreur et la modification échoue. - Si vous essayez d'
addun tag qui existe déjà, l'opération de modification se comporte de la même manière que si vous aviez appelé une opération de remplacement. L'opération de remplacement remplace la valeur existante du tag par la nouvelle valeur spécifiée dans l'opération. - Bien que les séquences puissent être ajoutées/remplacées/supprimées (et que les tags dans les éléments d'une séquence puissent également être modifiés), les éléments individuels d'une séquence ne peuvent pas être ajoutés/remplacés/supprimés.
- En pratique, cela signifie que toute modification avec un chemin d'accès de tag se terminant par un index sera rejetée (par exemple,
/ReferencedSeriesSequence/0). - Si des modifications doivent être apportées à un élément individuel d'une séquence, remplacez l'intégralité de la séquence parente par une copie à laquelle les modifications ont été appliquées.
- En pratique, cela signifie que toute modification avec un chemin d'accès de tag se terminant par un index sera rejetée (par exemple,
Mettre à jour à l'aide de DICOM Studio
Vous pouvez utiliser DICOM Studio pour mettre à jour les métadonnées DICOM d'une étude, d'une série ou d'une instance.
Pour mettre à jour les métadonnées DICOM à l'aide de DICOM Studio :
- Recherchez l'étude, la série ou l'instance que vous souhaitez mettre à jour.
- Dans les résultats de recherche, cliquez sur l'élément pour accéder à sa page d'informations.
- Cliquez sur l'onglet Métadonnées.
- Cochez la case correspondant à un ou plusieurs tags que vous souhaitez modifier, puis cliquez sur Modifier.
- Dans le panneau de modification, développez le tag que vous souhaitez modifier.
- Modifiez le mot clé, la VR ou la valeur du tag.
- Cliquez sur Enregistrer.
Toutes les limites s'appliquent toujours à l'interface utilisateur. De plus, l'interface utilisateur présente les limites suivantes :
- L'interface de modification des tags n'est pas compatible avec la modification des tags dont la multiplicité de valeur (VM) est supérieure à 1.
- L'interface de modification des tags ne fournit aucune indication ni validation sur les types de VR ou de valeurs attendus.