Instruction de conformité DICOM v2
Remarque
API version 2 est la dernière version de l’API. Pour obtenir la liste des modifications apportées à v2 par rapport à v1, consultez les modifications apportées à l’API de service DICOM v2
Le serveur d’imagerie médicale pour DICOM® prend en charge un sous-ensemble de DICOMweb Standard. La prise en charge inclut les éléments suivants :
En outre, ces API non standard sont prises en charge :
Le service utilise le contrôle de version de l’API REST. La version de l’API REST doit être spécifiée explicitement dans le cadre de l’URL de base, comme dans l’exemple suivant :
https://<service_url>/v<version>/studies
Cette version de l’instruction de conformité correspond à la v2
version des API REST.
Pour plus d’informations sur la façon de spécifier la version lors d’une demande, consultez la documentation relative au contrôle de version des API.
Vous trouverez des exemples de requêtes pour les transactions prises en charge dans la collection Postman.
Nettoyage du préambule
Le service ignore le préambule du fichier de 128 octets et remplace son contenu par des caractères null. Ce comportement garantit qu’aucun fichier transmis par le service n’est vulnérable à la vulnérabilité de préambule malveillante. Toutefois, cette assainissement du préambule signifie également que les préambules utilisés pour encoder du contenu au double format, tels que TIFF, ne peuvent pas être utilisés avec le service.
Service d’études
Le service Studies permet aux utilisateurs de stocker, récupérer et rechercher des études DICOM, des séries et des instances. Nous avons ajouté la transaction de suppression non standard pour activer un cycle de vie de ressources complet.
Store (STOW-RS)
Cette transaction utilise la méthode POST ou PUT pour stocker des représentations d’études, de séries et d’instances contenues dans la charge utile de la requête.
Method | Path | Description |
---|---|---|
POST | .. /études | Stocker des instances. |
POST | .. /studies/{study} | Stocker des instances pour une étude spécifique. |
PUT | .. /études | Instances Upsert. |
PUT | .. /studies/{study} | Instances Upsert pour une étude spécifique. |
Le paramètre study
correspond à l’attribut DICOM StudyInstanceUID. Si elle est spécifiée, toute instance qui n’appartient pas à l’étude fournie est rejetée avec un 43265
code d’avertissement.
Voici le seul en-tête de réponse Accept
pris en charge :
application/dicom+json
Les en-têtes suivants Content-Type
sont pris en charge :
multipart/related; type="application/dicom"
application/dicom
Remarque
Le serveur ne force pas ou ne remplace pas les attributs qui entrent en conflit avec les données existantes pour les requêtes POST. Toutes les données sont stockées comme indiqué. Pour les demandes upsert (PUT), les données existantes sont remplacées par les nouvelles données reçues.
Stocker les attributs requis
Les éléments DICOM suivants doivent être présents dans chaque fichier DICOM qui tente d’être stocké :
StudyInstanceUID
SeriesInstanceUID
SOPInstanceUID
SOPClassUID
PatientID
Remarque
Tous les UID doivent être compris entre 1 et 64 caractères, et contiennent uniquement des caractères numériques alpha ou les caractères spéciaux suivants : .
, -
. PatientID
continue d’être une balise requise et peut avoir la valeur null dans l’entrée. PatientID
est validé en fonction de son LO
VR
type.
Chaque fichier stocké doit avoir une combinaison unique de StudyInstanceUID
, SeriesInstanceUID
et SopInstanceUID
. Le code 45070
d’avertissement est retourné si un fichier contenant les mêmes identificateurs existe déjà.
Seules les syntaxes de transfert avec des représentations de valeur explicites sont acceptées.
Remarque
Les demandes sont limitées à 4 Go. Aucun fichier DICOM unique ou combinaison de fichiers ne peut dépasser cette limite.
Stocker les modifications de v1
Dans les versions précédentes, une requête store échoue si l’un des attributs requis ou pouvant faire l’objet d’une recherche a échoué. À compter de V2, la requête échoue uniquement si les attributs requis échouent à la validation.
Échec de la validation des attributs non requis par l’API entraîne le stockage du fichier avec un avertissement. Un avertissement est donné à chaque attribut défaillant par instance. Lorsqu’une séquence contient un attribut qui échoue à la validation ou lorsqu’il existe plusieurs problèmes avec un attribut unique, seule la première raison de l’attribut défaillant est notée.
Si un attribut est rembourré avec des valeurs Null, l’attribut est indexé lorsqu’il peut faire l’objet d’une recherche et est stocké tel qu’il se trouve dans des métadonnées dicom+json. Aucun avertissement de validation n’est fourni.
Codes d’état de réponse du magasin
Code | Description |
---|---|
200 (OK) |
Toutes les instances SOP de la requête ont été stockées. |
202 (Accepted) |
Le serveur d’origine a stocké certaines instances et d’autres ont échoué ou retourné des avertissements. Des informations supplémentaires sur cette erreur peuvent être trouvées dans le corps du message de réponse. |
204 (No Content) |
Aucun contenu n’a été fourni dans la demande de transaction de magasin. |
400 (Bad Request) |
La demande a été mal mise en forme. Par exemple, l’identificateur d’instance d’étude fourni n’a pas conforme le format UID attendu. |
401 (Unauthorized) |
Le client n’est pas authentifié. |
406 (Not Acceptable) |
L’en-tête spécifié Accept n’est pas pris en charge. |
409 (Conflict) |
Aucune des instances de la demande de transaction de magasin n’a été stockée. |
415 (Unsupported Media Type) |
L’élément fourni Content-Type n’est pas pris en charge. |
424 (Failed Dependency) |
Le service DICOM ne peut pas accéder à une ressource dont il dépend pour effectuer cette demande. Par exemple, l’accès au magasin Data Lake connecté ou au coffre de clés pour prendre en charge le chiffrement de clé géré par le client n’est pas pris en charge. |
500 (Internal Server Error) |
Le serveur a rencontré une erreur interne inconnue. Réessayez plus tard. |
503 (Service Unavailable) |
Le service n’est pas disponible ou occupé. Réessayez plus tard. |
Store response paylo
La charge utile de réponse remplit un jeu de données DICOM avec les éléments suivants :
Balise | Nom | Description |
---|---|---|
(0008, 1190) | RetrieveURL |
URL de récupération de l’étude si l’StudyInstanceUID a été fourni dans la demande de magasin et qu’au moins une instance est correctement stockée. |
(0008, 1198) | FailedSOPSequence |
Séquence d’instances qui n’ont pas pu être conservées. |
(0008, 1199) | ReferencedSOPSequence |
Séquence d’instances stockées. |
Chaque jeu de données dans le fichier FailedSOPSequence
DICOM contient les éléments suivants (si le fichier DICOM qui tente d’être stocké peut être lu) :
Balise | Nom | Description |
---|---|---|
(0008, 1150) | ReferencedSOPClassUID |
Identificateur unique de la classe SOP de l’instance qui n’a pas pu stocker. |
(0008, 1155) | ReferencedSOPInstanceUID |
Identificateur unique de l’instance SOP de l’instance qui n’a pas pu stocker. |
(0008, 1197) | FailureReason |
Code de raison pour laquelle cette instance n’a pas pu stocker. |
(0008, 1196) | WarningReason |
Un WarningReason indique les problèmes de validation détectés, mais qui n’ont pas été suffisamment graves pour échouer l’opération de magasin. |
(0074, 1048) | FailedAttributesSequence |
Séquence de ErrorComment ce qui inclut la raison de chaque attribut ayant échoué. |
Chaque jeu de données du jeu ReferencedSOPSequence
de données contient les éléments suivants :
Balise | Nom | Description |
---|---|---|
(0008, 1150) | ReferencedSOPClassUID |
Identificateur unique de la classe SOP de l’instance stockée. |
(0008, 1155) | ReferencedSOPInstanceUID |
Identificateur unique de l’instance SOP de l’instance stockée. |
(0008, 1190) | RetrieveURL |
URL de récupération de cette instance sur le serveur DICOM. |
Exemple de réponse avec Accept
un en-tête application/dicom+json
sans FailedAttributesSequence dans une référenceSOPSequence :
{
"00081190":
{
"vr":"UR",
"Value":["http://localhost/studies/d09e8215-e1e1-4c7a-8496-b4f6641ed232"]
},
"00081198":
{
"vr":"SQ",
"Value":
[{
"00081150":
{
"vr":"UI","Value":["cd70f89a-05bc-4dab-b6b8-1f3d2fcafeec"]
},
"00081155":
{
"vr":"UI",
"Value":["22c35d16-11ce-43fa-8f86-90ceed6cf4e7"]
},
"00081197":
{
"vr":"US",
"Value":[43265]
}
}]
},
"00081199":
{
"vr":"SQ",
"Value":
[{
"00081150":
{
"vr":"UI",
"Value":["d246deb5-18c8-4336-a591-aeb6f8596664"]
},
"00081155":
{
"vr":"UI",
"Value":["4a858cbb-a71f-4c01-b9b5-85f88b031365"]
},
"00081190":
{
"vr":"UR",
"Value":["http://localhost/studies/d09e8215-e1e1-4c7a-8496-b4f6641ed232/series/8c4915f5-cc54-4e50-aa1f-9b06f6e58485/instances/4a858cbb-a71f-4c01-b9b5-85f88b031365"]
}
}]
}
}
Exemple de réponse avec Accept
un en-tête application/dicom+json
avec un FailedAttributesSequence dans un ReferencedSOPSequence :
{
"00081190":
{
"vr":"UR",
"Value":["http://localhost/studies/d09e8215-e1e1-4c7a-8496-b4f6641ed232"]
},
"00081199":
{
"vr":"SQ",
"Value":
[{
"00081150":
{
"vr":"UI",
"Value":["d246deb5-18c8-4336-a591-aeb6f8596664"]
},
"00081155":
{
"vr":"UI",
"Value":["4a858cbb-a71f-4c01-b9b5-85f88b031365"]
},
"00081190":
{
"vr":"UR",
"Value":["http://localhost/studies/d09e8215-e1e1-4c7a-8496-b4f6641ed232/series/8c4915f5-cc54-4e50-aa1f-9b06f6e58485/instances/4a858cbb-a71f-4c01-b9b5-85f88b031365"]
},
"00081196": {
"vr": "US",
"Value": [
1
]
},
"00741048": {
"vr": "SQ",
"Value": [
{
"00000902": {
"vr": "LO",
"Value": [
"DICOM100: (0008,0020) - Content \"NotAValidDate\" does not validate VR DA: one of the date values does not match the pattern YYYYMMDD"
]
}
},
{
"00000902": {
"vr": "LO",
"Value": [
"DICOM100: (0008,002a) - Content \"NotAValidDate\" does not validate VR DT: value does not mach pattern YYYY[MM[DD[HH[MM[SS[.F{1-6}]]]]]]"
]
}
}
]
}
}]
}
}
Codes de raison de l’échec du magasin
Code | Description |
---|---|
272 |
La transaction de magasin n’a pas stocker l’instance en raison d’un échec général lors du traitement de l’opération. |
43264 |
L’instance DICOM a échoué la validation. |
43265 |
L’instance StudyInstanceUID fournie ne correspond pas à celle spécifiée StudyInstanceUID dans la demande de magasin. |
45070 |
Instance DICOM avec le même StudyInstanceUID , SeriesInstanceUID et SopInstanceUID a déjà été stockée. Si vous souhaitez mettre à jour le contenu, supprimez d’abord cette instance. |
45071 |
Une instance DICOM est créée par un autre processus, ou la tentative précédente de création a échoué et le processus de nettoyage n’est pas terminé. Supprimez d’abord l’instance avant de tenter de créer à nouveau. |
Stocker les codes de raison de l’avertissement
Code | Description |
---|---|
45063 |
Un jeu de données d’instance DICOM ne correspond pas à la classe SOP. La transaction du magasin d’études (section 10.5) a observé que le jeu de données ne correspondait pas aux contraintes de la classe SOP pendant le stockage de l’instance. |
1 |
La transaction du magasin d’études (section 10.5) a observé que le jeu de données a la validation |
Codes d’erreur du magasin
Code | Description |
---|---|
100 |
Les attributs d’instance fournis ne répondent pas aux critères de validation. |
Retrieve (WADO-RS)
Cette récupération de transaction offre la prise en charge de la récupération d’études stockées, de séries, d’instances et de trames par référence.
Method | Path | Description |
---|---|---|
GET | .. /studies/{study} | Récupère toutes les instances d’une étude. |
GET | .. /studies/{study}/metadata | Récupère les métadonnées de toutes les instances d’une étude |
GET | .. /studies/{study}/series/{series} | Récupère toutes les instances d’une série |
GET | .. /studies/{study}/series/{series}/metadata | Récupère les métadonnées de toutes les instances d’une série |
GET | .. /studies/{study}/series/{series}/instances/{instance} | Récupère une instance unique |
GET | .. /studies/{study}/series/{series}/instances/{instance}/metadata | Récupère les métadonnées d’une instance unique |
GET | .. /studies/{study}/series/{series}/instances/{instance}/rendu | Récupère une instance rendue dans un format d’image |
GET | .. /studies/{study}/series/{series}/instances/{instance}/frames/{frames} | Récupère une ou plusieurs images à partir d’une seule instance. Pour spécifier plusieurs images, une virgule sépare chaque image à retourner. Par exemple : /studies/1/series/2/instance/3/frames/4,5,6 . |
GET | .. /studies/{study}/series/{series}/instances/{instance}/frames/{frame}/rendu | Récupère un cadre unique rendu dans un format d’image |
Récupérer des instances au sein d’une étude ou d’une série
Les en-têtes suivants Accept
sont pris en charge pour récupérer des instances au sein d’une étude ou d’une série.
multipart/related; type="application/dicom"; transfer-syntax=*
multipart/related; type="application/dicom";
(lorsque la syntaxe de transfert n’est pas spécifiée, la version 1.2.840.10008.1.2.1 est utilisée comme valeur par défaut)multipart/related; type="application/dicom"; transfer-syntax=1.2.840.10008.1.2.1
multipart/related; type="application/dicom"; transfer-syntax=1.2.840.10008.1.2.4.90
*/*
(lorsque la syntaxe de transfert n’est pas spécifiée,*
est utilisée comme valeur par défaut et mediaType par défaut surapplication/dicom
)
Récupérer une instance
Les en-têtes suivants Accept
sont pris en charge pour récupérer une instance spécifique.
application/dicom; transfer-syntax=*
multipart/related; type="application/dicom"; transfer-syntax=*
application/dicom;
(lorsque la syntaxe de transfert n’est pas spécifiée,1.2.840.10008.1.2.1
est utilisée comme valeur par défaut)multipart/related; type="application/dicom"
(lorsque la syntaxe de transfert n’est pas spécifiée,1.2.840.10008.1.2.1
est utilisée comme valeur par défaut)application/dicom; transfer-syntax=1.2.840.10008.1.2.1
multipart/related; type="application/dicom"; transfer-syntax=1.2.840.10008.1.2.1
application/dicom; transfer-syntax=1.2.840.10008.1.2.4.90
multipart/related; type="application/dicom"; transfer-syntax=1.2.840.10008.1.2.4.90
*/*
(lorsque la syntaxe de transfert n’est pas spécifiée,*
est utilisée comme valeur par défaut et mediaType par défaut surapplication/dicom
)
Récupérer des images
Les en-têtes suivants Accept
sont pris en charge pour récupérer des images.
multipart/related; type="application/octet-stream"; transfer-syntax=*
multipart/related; type="application/octet-stream";
(lorsque la syntaxe de transfert n’est pas spécifiée,1.2.840.10008.1.2.1
est utilisée comme valeur par défaut)multipart/related; type="application/octet-stream"; transfer-syntax=1.2.840.10008.1.2.1
multipart/related; type="image/jp2";
(lorsque la syntaxe de transfert n’est pas spécifiée,1.2.840.10008.1.2.4.90
est utilisée comme valeur par défaut)multipart/related; type="image/jp2";transfer-syntax=1.2.840.10008.1.2.4.90
application/octet-stream; transfer-syntax=*
pour la récupération d’images unique
*/*
(lorsque la syntaxe de transfert n’est pas spécifiée,*
est utilisée comme valeur par défaut et mediaType par défaut surapplication/octet-stream
)
Récupérer la syntaxe de transfert
Lorsque la syntaxe de transfert demandée est différente du fichier d’origine, le fichier d’origine est transcodé en syntaxe de transfert demandée. Le fichier d’origine doit être l’un des formats suivants pour que le transcodage réussisse, sinon le transcodage peut échouer.
- 1.2.840.10008.1.2 (Little Endian Implicit)
- 1.2.840.10008.1.2.1 (Little Endian Explicit)
- 1.2.840.10008.1.2.2 (Explicit VR Big Endian)
- 1.2.840.10008.1.2.4.50 (processus de référence JPEG 1)
- 1.2.840.10008.1.2.4.57 (JPEG Lossless)
- 1.2.840.10008.1.2.4.70 (valeur de sélection sans perte JPEG 1)
- 1.2.840.10008.1.2.4.90 (JPEG 2000 Sans perte uniquement)
- 1.2.840.10008.1.2.4.91 (JPEG 2000)
- 1.2.840.10008.1.2.5 (RLE Lossless)
Un résultat non pris en charge transfer-syntax
est .406 Not Acceptable
Récupérer des métadonnées (pour l’étude, la série ou l’instance)
L’en-tête suivant Accept
est pris en charge pour récupérer les métadonnées d’une étude, d’une série ou d’une instance.
application/dicom+json
La récupération des métadonnées ne retourne pas d’attributs avec les représentations de valeur suivantes.
Nom vr | Description |
---|---|
OB | Autres octets |
OD | Autre double |
OF | Autre float |
OL | Autre long |
OV | Autre 64 bits très long |
OW | Autre mot |
UN | Inconnu |
Les métadonnées récupérées incluent le caractère Null lorsque l’attribut a été rembourré avec des valeurs Null et stockés tel quel.
Récupérer la validation du cache de métadonnées (pour l’étude, la série ou l’instance)
La validation du cache est prise en charge à l’aide du ETag
mécanisme. Dans la réponse à une demande de métadonnées, ETag est retourné en tant qu’en-têtes. Cet ETag peut être mis en cache et ajouté en tant qu’en-tête If-None-Match
dans les requêtes ultérieures pour les mêmes métadonnées. Deux types de réponses sont possibles si les données existent.
- Les données sont inchangées depuis la dernière requête : la
HTTP 304 (Not Modified)
réponse est envoyée sans corps de réponse. - Données modifiées depuis la dernière requête : la
HTTP 200 (OK)
réponse est envoyée avec eTag mis à jour. Les données requises sont retournées dans le corps.
Récupérer l’image rendue (par exemple ou frame)
Les en-têtes suivants Accept
sont pris en charge pour récupérer une image rendue, une instance ou un frame.
image/jpeg
image/png
Dans le cas où aucun en-tête n’est Accept
spécifié, le service affiche un image/jpeg
par défaut.
Le service prend uniquement en charge le rendu d’une trame unique. Si le rendu est demandé pour une instance avec plusieurs images, par défaut, seul le premier frame est rendu en tant qu’image.
Lors de la spécification d’une trame particulière à retourner, l’indexation d’images commence à 1.
Le quality
paramètre de requête est également pris en charge. Une valeur entière comprise entre 1
et 100
inclusive (1 étant la pire qualité, et 100 étant de meilleure qualité) peut être passée en tant que valeur pour le paramètre de requête. Ce paramètre est utilisé pour les images rendues en tant que jpeg
, et est ignoré pour les png
demandes de rendu. Si ce paramètre n’est pas spécifié par défaut 100
, la valeur est .
Récupérer la version d’origine
L’utilisation de l’opération de mise à jour en bloc vous permet de récupérer la version d’origine ou la dernière version d’une étude, d’une série ou d’une instance. La dernière version d’une étude, d’une série ou d’une instance est toujours retournée par défaut. La version d’origine peut être retournée en définissant l’en-tête msdicom-request-original
sur true
. Voici un exemple de demande :
GET ../studies/{study}/series/{series}/instances/{instance}
Accept: multipart/related; type="application/dicom"; transfer-syntax=*
msdicom-request-original: true
Content-Type: application/dicom
Récupérer les codes d’état de réponse
Code | Description |
---|---|
200 (OK) |
Toutes les données demandées ont été récupérées. |
304 (Not Modified) |
Les données demandées sont inchangées depuis la dernière requête. Le contenu n’est pas ajouté au corps de la réponse dans ce cas. Pour plus d’informations, consultez la section précédente Récupérer la validation du cache de métadonnées (pour l’étude, la série ou l’instance). |
400 (Bad Request) |
La demande a été mal mise en forme. Par exemple, l’identificateur d’instance d’étude fourni n’est pas conforme au format UID attendu, ou l’encodage de syntaxe de transfert demandé n’est pas pris en charge. |
401 (Unauthorized) |
Le client n’est pas authentifié. |
403 (Forbidden) |
L’utilisateur n’est pas autorisé. |
404 (Not Found) |
La ressource DICOM spécifiée n’a pas pu être trouvée, ou pour la requête rendue, l’instance ne contenait pas de données de pixels. |
406 (Not Acceptable) |
L’en-tête spécifié Accept n’est pas pris en charge, ou pour les requêtes rendues et transcode les demandes demandées étaient trop volumineuses. |
424 (Failed Dependency) |
Le service DICOM ne peut pas accéder à une ressource dont il dépend pour effectuer cette demande. Par exemple, l’accès au magasin Data Lake connecté ou au coffre de clés pour prendre en charge le chiffrement de clé géré par le client n’est pas pris en charge. |
503 (Service Unavailable) |
Le service n’est pas disponible ou occupé. Réessayez plus tard. |
Rechercher (QIDO-RS)
La requête basée sur l’ID des objets DICOM (QIDO) vous permet de rechercher des études, des séries et des instances par attributs.
Method | Path | Description |
---|---|---|
Rechercher des études | ||
GET | .. /études?... | Rechercher des études |
Rechercher une série | ||
GET | .. /série?... | Rechercher des séries |
GET | .. /studies/{study}/series?... | Rechercher des séries dans une étude |
Rechercher des instances | ||
GET | .. /Cas?... | Rechercher des instances |
GET | .. /studies/{study}/instances?... | Rechercher des instances dans une étude |
GET | .. /studies/{study}/series/{series}/instances?... | Rechercher des instances dans une série |
L’en-tête suivant Accept
est pris en charge pour la recherche.
application/dicom+json
Rechercher des modifications à partir de la version 1
Dans l’API v1 et poursuivie pour v2, si une balise de requête étendue présente des erreurs, car une ou plusieurs des instances existantes avaient une valeur d’étiquette qui n’a pas pu être indexée, les requêtes de recherche suivantes contenant la balise de requête étendue retournent erroneous-dicom-attributes
comme indiqué dans la documentation. Toutefois, les balises (également appelées attributs) avec des avertissements de validation de STOW-RS ne sont pas incluses dans cet en-tête. Si une demande de magasin génère des avertissements de validation pour les attributs pouvant faire l’objet d’une recherche au moment où l’instance a été stockée, ces attributs peuvent ne pas être utilisés pour rechercher l’instance stockée. Toutefois, les attributs pouvant faire l’objet d’une recherche ayant échoué peuvent retourner des résultats si les valeurs sont remplacées par des instances dans la même étude ou série stockée après l’échec, ou si les valeurs sont déjà stockées correctement par une instance précédente. Si les valeurs d’attribut ne sont pas remplacées, elles ne produisent aucun résultat de recherche.
Un attribut peut être corrigé de la manière suivante.
- Supprimer l’instance stockée et charger une nouvelle instance avec les données corrigées
- Charger une nouvelle instance dans la même étude/série avec des données corrigées
Paramètres de recherche pris en charge
Les paramètres suivants pour chaque requête sont pris en charge :
Clé | Valeurs de prise en charge | Nombre autorisé | Description |
---|---|---|---|
{attributeID}= |
{value} |
0...N | Rechercher la correspondance d’attribut/valeur dans la requête |
includefield= |
{attributeID} all |
0...N | Les autres attributs à retourner dans la réponse. Les balises publiques et privées sont toutes deux prises en charge. Une fois all fourni, reportez-vous à la réponse de recherche pour plus d’informations.Si un mélange et {attributeID} all est fourni, le serveur utilise par défaut all |
limit= |
{value} |
0..1 | Valeur entière pour limiter le nombre de valeurs retournées dans la réponse. La valeur peut être comprise entre la plage 1 >= x <= 200. Valeur par défaut 100 |
offset= |
{value} |
0..1 | Ignorez les {value} résultats.Si un décalage est fourni plus grand que le nombre de résultats de la requête de recherche, une réponse 204 (aucun contenu) est retournée. |
fuzzymatching= |
true / false |
0..1 | Si la correspondance approximative vraie est appliquée à l’attribut PatientName. Il effectue une correspondance de mot de préfixe de n’importe quelle partie de nom dans la valeur PatientName. Par exemple, si PatientName est « John^Doe », « joh », « do », « jo do », « Doe » et « John Doe » correspondent tous. Mais « ohn » ne correspond pas. |
Attributs pouvant faire l’objet d’une recherche
Nous prenons en charge la recherche dans les attributs et types de recherche suivants.
Mot clé d’attribut | Toutes les études | Toutes les séries | Toutes les instances | Série d’études | Instances de l’étude | Instances de la série d’études |
---|---|---|---|---|---|---|
StudyInstanceUID |
X | X | X | |||
PatientName |
X | X | X | |||
PatientID |
X | X | X | |||
PatientBirthDate |
X | X | X | |||
AccessionNumber |
X | X | X | |||
ReferringPhysicianName |
X | X | X | |||
StudyDate |
X | X | X | |||
StudyDescription |
X | X | X | |||
ModalitiesInStudy |
X | X | X | |||
SeriesInstanceUID |
X | X | X | X | ||
Modality |
X | X | X | X | ||
PerformedProcedureStepStartDate |
X | X | X | X | ||
ManufacturerModelName |
X | X | X | X | ||
SOPInstanceUID |
X | X | X |
Remarque
Nous ne prenons pas en charge la recherche à l’aide d’une chaîne vide pour tous les attributs.
Correspondance de recherche
Nous prenons en charge les types correspondants suivants.
Type de recherche | Attribut pris en charge | Exemple |
---|---|---|
Requête de plage | StudyDate /PatientBirthDate |
{attributeID}={value1}-{value2} . Pour les valeurs de date/heure, nous prenons en charge une plage inclusive sur la balise. Cette plage est mappée à attributeID >= {value1} AND attributeID <= {value2} . Si {value1} ce n’est pas spécifié, toutes les occurrences de dates/heures antérieures, et y compris {value2} sont mises en correspondance. De même, s’il {value2} n’est pas spécifié, toutes les occurrences des {value1} dates/heures suivantes sont mises en correspondance. Toutefois, l’une de ces valeurs doit être présente. {attributeID}={value1}- et {attributeID}=-{value2} sont valides, cependant, {attributeID}=- n’est pas valide. |
Correspondance exacte | Tous les attributs pris en charge | {attributeID}={value1} |
Correspondance approximative | PatientName , ReferringPhysicianName |
Correspond à n’importe quel composant du nom qui commence par la valeur |
Correspondance de liste UID | StudyInstanceUID |
Correspond aux études identifiées par les valeurs fournies dans la liste. Prend en charge la virgule (,) ou une barre oblique inverse (\) comme séparateur valide. {attributeID}=1.2.3,5.6.7,8.9.0 retourne les détails associés à toutes les études, étant donné qu’elles existent. |
ID d’attribut
Les balises peuvent être encodées de plusieurs façons pour le paramètre de requête. Nous avons partiellement implémenté la norme telle que définie dans PS3.18 6.7.1.1.1. Les encodages suivants pour une balise sont pris en charge.
Valeur | Exemple |
---|---|
{group}{element} |
0020000D |
{dicomKeyword} |
StudyInstanceUID |
Exemple de requête de recherche d’instances :
../instances?Modality=CT&00280011=512&includefield=00280010&limit=5&offset=0
Réponse de recherche
La réponse est un tableau de jeux de données DICOM. Selon la ressource, par défaut , les attributs suivants sont retournés.
Balises d’étude par défaut
Balise | Nom de l’attribut |
---|---|
(0008, 0020) | StudyDate |
(0008, 0050) | AccessionNumber |
(0008, 1030) | StudyDescription |
(0009, 0090) | ReferringPhysicianName |
(0010, 0010) | PatientName |
(0010, 0020) | PatientID |
(0010, 0030) | PatientBirthDate |
(0020, 000D) | StudyInstanceUID |
Balises de série par défaut
Balise | Nom de l’attribut |
---|---|
(0008, 0060) | Modality |
(0008, 1090) | ManufacturerModelName |
(0020, 000E) | SeriesInstanceUID |
(0040, 0244) | PerformedProcedureStepStartDate |
Balises d’instance par défaut
Balise | Nom de l’attribut |
---|---|
(0008, 0018) | SOPInstanceUID |
Si includefield=all
, ces attributs sont inclus avec les attributs par défaut. Outre les attributs par défaut, cette liste contient une liste complète d’attributs pris en charge à chaque niveau de ressource.
Autres balises d’étude
Balise | Nom de l’attribut |
---|---|
(0008, 0005) | SpecificCharacterSet |
(0008, 0030) | StudyTime |
(0008, 0056) | InstanceAvailability |
(0008, 0201) | TimezoneOffsetFromUTC |
(0008, 0063) | AnatomicRegionsInStudyCodeSequence |
(0008, 1032) | ProcedureCodeSequence |
(0008, 1060) | NameOfPhysiciansReadingStudy |
(0008, 1080) | AdmittingDiagnosesDescription |
(0008, 1110) | ReferencedStudySequence |
(0010, 1010) | PatientAge |
(0010, 1020) | PatientSize |
(0010, 1030) | PatientWeight |
(0010, 2180) | Occupation |
(0010, 21B0) | AdditionalPatientHistory |
(0010, 0040) | PatientSex |
(0020, 0010) | StudyID |
Autres balises de série
Balise | Nom de l’attribut |
---|---|
(0008, 0005) | SpecificCharacterSet |
(0008, 0201) | TimezoneOffsetFromUTC |
(0020, 0011) | SeriesNumber |
(0020, 0060) | Latéralité |
(0008, 0021) | SeriesDate |
(0008, 0031) | SeriesTime |
(0008, 103E) | SeriesDescription |
(0040, 0245) | PerformProcedureStepStartTime |
(0040, 0275) | RequestAttributesSequence |
Autres balises d’instance
Balise | Nom de l’attribut |
---|---|
(0008, 0005) | SpecificCharacterSet |
(0008, 0016) | SOPClassUID |
(0008, 0056) | InstanceAvailability |
(0008, 0201) | TimezoneOffsetFromUTC |
(0020, 0013) | NuméroInstance |
(0028, 0010) | Lignes |
(0028, 0011) | Colonnes |
(0028, 0100) | BitsAllocated |
(0028, 0008) | NumberOfFrames |
Les attributs suivants sont retournés.
- Tous les paramètres de requête et UID de correspondance dans l’URL de ressource
IncludeField
attributs pris en charge au niveau de la ressource- Si la ressource cible est
All Series
,Study
les attributs de niveau sont également retournés. - Si la ressource cible est
All Instances
, lesStudy
attributs de niveau sontSeries
également retournés. - Si la ressource cible est
Study's Instances
,Series
les attributs de niveau sont également retournés. NumberOfStudyRelatedInstances
l’attribut agrégé est pris en charge auStudy
niveauincludeField
.NumberOfSeriesRelatedInstances
l’attribut agrégé est pris en charge auSeries
niveauincludeField
.
Codes de réponse de recherche
L’API de requête retourne l’un des codes d’état suivants dans la réponse.
Code | Description |
---|---|
200 (OK) |
La charge utile de réponse contient toutes les ressources correspondantes. |
204 (No Content) |
La recherche s’est terminée avec succès, mais aucun résultat n’a été retourné. |
400 (Bad Request) |
Le serveur n’a pas pu effectuer la requête, car le composant de requête n’était pas valide. Le corps de la réponse contient les détails de l’échec. |
401 (Unauthorized) |
Le client n’est pas authentifié. |
403 (Forbidden) |
L’utilisateur n’est pas autorisé. |
414 (URI Too Long) |
L’URI a dépassé la longueur maximale prise en charge de 8192 caractères. |
424 (Failed Dependency) |
Le service DICOM ne peut pas accéder à une ressource dont il dépend pour effectuer cette demande. Par exemple, l’accès au magasin Data Lake connecté ou au coffre de clés pour prendre en charge le chiffrement de clé géré par le client n’est pas pris en charge. |
503 (Service Unavailable) |
Le service n’est pas disponible ou occupé. Réessayez plus tard. |
Notes
- L’interrogation à l’aide du
TimezoneOffsetFromUTC (00080201)
fichier n’est pas prise en charge. - L’API de requête ne retourne
413 (request entity too large)
pas . Si la limite de réponse de requête demandée est en dehors de la plage acceptable, une requête incorrecte est retournée. Tout ce qui est demandé dans la plage acceptable est résolu. - Lorsque la ressource cible est Study/Series, il existe un risque de métadonnées de niveau étude/série incohérentes sur plusieurs instances. Par exemple, deux instances peuvent avoir des
patientName
différences. Dans ce cas, les dernières victoires et vous ne pouvez rechercher que sur les données les plus récentes. - Les résultats paginés sont optimisés pour retourner la dernière instance correspondante en premier, ce qui peut entraîner des enregistrements en double dans les pages suivantes si des données plus récentes correspondant à la requête ont été ajoutées.
- La correspondance n’est pas sensible à la casse et n’est pas sensible aux accents pour les types PN VR.
- La correspondance n’est pas sensible à la casse et respecte l’accentuation pour les autres types VR de chaîne.
- Seule la première valeur est indexée d’un élément de données à valeur unique qui a incorrectement plusieurs valeurs.
- L’utilisation des attributs par défaut ou la limitation du nombre de résultats demandés optimise les performances.
- Lorsqu’un attribut a été stocké à l’aide du remplissage null, il peut être recherché avec ou sans remplissage null dans l’encodage d’URI. Les résultats récupérés sont destinés aux attributs stockés avec et sans remplissage null.
Supprimer
Cette transaction ne fait pas partie du DICOMweb Standard officiel. Il utilise la méthode DELETE pour supprimer les représentations des études, des séries et des instances du magasin.
Method | Path | Description |
---|---|---|
DELETE | .. /studies/{study} | Supprimez toutes les instances d’une étude spécifique. |
DELETE | .. /studies/{study}/series/{series} | Supprimez toutes les instances d’une série spécifique dans une étude. |
DELETE | .. /studies/{study}/series/{series}/instances/{instance} | Supprimez une instance spécifique dans une série. |
Paramètres study
, series
et instance
correspondent aux attributs StudyInstanceUID
DICOM , SeriesInstanceUID
et SopInstanceUID
respectivement.
Il n’existe aucune restriction sur l’en-tête, Content-Type
l’en-tête ou le contenu du corps de Accept
la requête.
Remarque
Après une transaction Delete, les instances supprimées ne sont pas récupérables.
Codes d’état de réponse
Code | Description |
---|---|
204 (No Content) |
Lorsque toutes les instances SOP sont supprimées. |
400 (Bad Request) |
La demande a été mal mise en forme. |
401 (Unauthorized) |
Le client n’est pas authentifié. |
403 (Forbidden) |
L’utilisateur n’est pas autorisé. |
404 (Not Found) |
Lorsque la série spécifiée n’a pas été trouvée dans une étude ou que l’instance spécifiée n’a pas été trouvée dans la série. |
424 (Failed Dependency) |
Le service DICOM ne peut pas accéder à une ressource dont il dépend pour effectuer cette demande. Par exemple, l’accès au magasin Data Lake connecté ou au coffre de clés pour prendre en charge le chiffrement de clé géré par le client n’est pas pris en charge. |
503 (Service Unavailable) |
Le service n’est pas disponible ou occupé. Réessayez plus tard. |
Supprimer la charge utile de réponse
Le corps de la réponse est vide. Le code d’état est la seule information utile retournée.
Service de liste de travail (UPS-RS)
Le service DICOM prend en charge les fournisseurs de services Envoyer (push) et Extraire (pull) du Service de liste de travail (UPS-RS). Ce service fournit l’accès à une liste de travail contenant des éléments de travail, chacun représentant une étape de procédure unifiée (UPS).
Tout au long de l’ensemble, la variable {workitem}
d’un modèle d’URI correspond à un UID Workitem.
Les points de terminaison UPS-RS disponibles sont les suivants :
Verbe | Path | Description |
---|---|---|
POST | {s}/workitems{ ? AffectedSOPInstanceUID} | Créer un élément de travail |
POST | {s}/workitems/{instance}{ ?transaction} | Mettre à jour un élément de travail |
GET | {s}/workitems{ ?query*} | Rechercher des éléments de travail |
GET | {s}/workitems/{instance} | Récupérer un élément de travail |
PUT | {s}/workitems/{instance}/state | Modifier l’état de l’élément de travail |
POST | {s}/workitems/{instance}/cancelrequest | Annuler l’élément de travail |
POST | {s}/workitems/{instance}/subscribers/{AETitle}{ ?deletionlock} | Créer un abonnement |
POST | {s}/workitems/1.2.840.10008.5.1.4.34.5/ | Suspendre l’abonnement |
DELETE | {s}/workitems/{instance}/subscribers/{AETitle} | Supprimer l’abonnement |
GET | {s}/subscribers/{AETitle} | Ouvrir le canal d’abonnement |
Créer un élément de travail
Cette transaction utilise la méthode POST pour créer un élément Workitem.
Method | Path | Description |
---|---|---|
POST | .. /workitems | Créez un workitem. |
POST | .. /workitems ? {workitem} | Crée un workitem avec l’UID spécifié. |
S’il n’est pas spécifié dans l’URI, le jeu de données de charge utile doit contenir l’élément Workitem dans l’attribut SOPInstanceUID
.
Les Accept
en-têtes et Content-Type
les en-têtes sont requis dans la requête et doivent avoir la valeur application/dicom+json
.
Il existe plusieurs exigences liées aux attributs de données DICOM dans le contexte d’une transaction spécifique. Les attributs peuvent être tenus d’être présents, de ne pas être présents, d’être vides ou de ne pas être vides. Ces exigences sont disponibles dans ce tableau.
Remarque
Bien que le tableau de référence indique que l’INTERFACE UTILISATEUR de l’instance SOP ne doit pas être présente, cette aide est spécifique au protocole DIMSE et est gérée différemment dans DICOMWeb. L’UID de l’instance SOP doit être présente dans le jeu de données, si ce n’est pas dans l’URI.
Remarque
Tous les codes d’exigence conditionnelle, y compris 1C et 2C, sont traités comme facultatifs.
Créer des codes d’état de réponse
Code | Description |
---|---|
201 (Created) |
L’élément Workitem cible a été créé avec succès. |
400 (Bad Request) |
Il y a eu un problème avec la demande. Par exemple, la charge utile de la demande ne répondait pas aux exigences. |
401 (Unauthorized) |
Le client n’est pas authentifié. |
403 (Forbidden) |
L’utilisateur n’est pas autorisé. |
409 (Conflict) |
L’élément Workitem existe déjà. |
415 (Unsupported Media Type) |
L’élément fourni Content-Type n’est pas pris en charge. |
424 (Failed Dependency) |
Le service DICOM ne peut pas accéder à une ressource dont il dépend pour effectuer cette demande. Par exemple, l’accès au magasin Data Lake connecté ou au coffre de clés pour prendre en charge le chiffrement de clé géré par le client n’est pas pris en charge. |
503 (Service Unavailable) |
Le service n’est pas disponible ou occupé. Réessayez plus tard. |
Créer une charge utile de réponse
Une réponse de réussite n’a aucune charge utile. Les Location
en-têtes de réponse et Content-Location
les en-têtes contiennent une référence d’URI à l’élément Workitem créé.
Une charge utile de réponse d’échec contient un message décrivant l’échec.
Annulation de la demande
Cette transaction permet à l’utilisateur de demander l’annulation d’un Workitem non détenu.
Il existe quatre états Workitem valides :
SCHEDULED
IN PROGRESS
CANCELED
COMPLETED
Cette transaction réussit uniquement sur Workitems dans l’état SCHEDULED
. Tout utilisateur peut revendiquer la propriété d’un workitem en définissant son UID transactionnel et en modifiant son état IN PROGRESS
sur . À partir de là, un utilisateur peut uniquement modifier l’élément Workitem en fournissant l’INTERFACE utilisateur de transaction correcte. Bien que UPS définit des classes Watch et Event SOP qui autorisent le transfert des demandes d’annulation et d’autres événements, ce service DICOM n’implémente pas ces classes, et donc les demandes d’annulation sur les éléments de travail qui IN PROGRESS
retournent un échec. Un workitem appartenant peut être annulé via la transaction Change Workitem State .
Method | Path | Description |
---|---|---|
POST | .. /workitems/{workitem}/cancelrequest | Demander l’annulation d’un workitem planifié |
L’en-tête Content-Type
est obligatoire et doit avoir la valeur application/dicom+json
.
La charge utile de la demande peut inclure des informations d’action telles que définies dans la norme DICOM.
Codes d’état de la réponse d’annulation de demande
Code | Description |
---|---|
202 (Accepted) |
La demande a été acceptée par le serveur, mais l’état Target Workitem n’est pas encore modifié. |
400 (Bad Request) |
Il y a eu un problème avec la syntaxe de la requête. |
401 (Unauthorized) |
Le client n’est pas authentifié. |
403 (Forbidden) |
L’utilisateur n’est pas autorisé. |
404 (Not Found) |
L’objet Workitem cible n’a pas été trouvé. |
409 (Conflict) |
La requête est incohérente avec l’état actuel de l’élément de travail cible. Par exemple, l’élément Workitem cible est dans l’état ou COMPLETED dans l’étatSCHEDULED . |
415 (Unsupported Media Type) |
L’élément fourni Content-Type n’est pas pris en charge. |
424 (Failed Dependency) |
Le service DICOM ne peut pas accéder à une ressource dont il dépend pour effectuer cette demande. Par exemple, l’accès au magasin Data Lake connecté ou au coffre de clés pour prendre en charge le chiffrement de clé géré par le client n’est pas pris en charge. |
503 (Service Unavailable) |
Le service n’est pas disponible ou occupé. Réessayez plus tard. |
Charge utile de réponse d’annulation de requête
Une réponse de réussite n’a pas de charge utile et une charge utile de réponse d’échec contient un message décrivant l’échec.
Si l’instance Workitem est déjà dans un état annulé, la réponse inclut l’en-tête d’avertissement HTTP suivant : 299: The UPS is already in the requested state of CANCELED.
Récupérer Workitem
Cette transaction récupère un workitem. Il correspond à l’opération UPS DIMSE N-GET.
Faire référence à: https://dicom.nema.org/medical/dicom/current/output/html/part18.html#sect_11.5
Si l’élément Workitem existe sur le serveur d’origine, l’élément Workitem est retourné dans un type de média acceptable. L’élément Workitem retourné ne contient pas l’attribut Transaction UID (0008,1195). Cela est nécessaire pour conserver le rôle de l’attribut en tant que verrou d’accès.
Method | Path | Description |
---|---|---|
GET | .. /workitems/{workitem} | Demande de récupération d’un objet Workitem |
L’en-tête Accept
est obligatoire et doit avoir la valeur application/dicom+json
.
Récupérer les codes d’état de réponse Workitem
Code | Description |
---|---|
200 (OK) | L’instance Workitem a été récupérée avec succès. |
400 (Requête incorrecte) | Il y a eu un problème avec la demande. |
401 (Non autorisé) | Le client n’est pas authentifié. |
403 (Interdit) | L’utilisateur n’est pas autorisé. |
404 (Introuvable) | L’objet Workitem cible n’a pas été trouvé. |
424 (Dépendance ayant échoué) | Le service DICOM ne peut pas accéder à une ressource dont il dépend pour effectuer cette demande. Par exemple, l’accès au magasin Data Lake connecté ou au coffre de clés pour prendre en charge le chiffrement de clé géré par le client n’est pas pris en charge. |
503 (Service indisponible) | Le service n’est pas disponible ou occupé. Réessayez plus tard. |
Récupérer la charge utile de réponse Workitem
- Une réponse de réussite a une charge utile de partie unique contenant l’élément Workitem demandé dans le type de média sélectionné.
- L’élément Workitem retourné ne contient pas l’attribut Transaction UID (0008, 1195) de l’élément Workitem, car cela ne doit être connu que du propriétaire.
Mettre à jour Workitem
Cette transaction modifie les attributs d’un workitem existant. Il correspond à l’opération UPS DIMSE N-SET.
Faire référence à: https://dicom.nema.org/medical/dicom/current/output/html/part18.html#sect_11.6
Pour mettre à jour un élément Workitem actuellement dans l’état SCHEDULED
, l’attribut Transaction UID
ne doit pas être présent. Pour un workitem dans l’état IN PROGRESS
, la requête doit inclure l’UID transactionnel actuel en tant que paramètre de requête. Si l’élément Workitem est déjà dans le COMPLETED
ou CANCELED
les états, la réponse est 400 (Bad Request)
.
Method | Path | Description |
---|---|---|
POST | .. /workitems/{workitem} ? {transaction-uid} | Mettre à jour la transaction Workitem |
L’en-tête Content-Type
est obligatoire et doit avoir la valeur application/dicom+json
.
La charge utile de la requête contient un jeu de données avec les modifications à appliquer à l’élément Workitem cible. Lorsqu’une séquence est modifiée, la requête doit inclure tous les éléments de la séquence, pas seulement les éléments à modifier. Lorsque vous devez mettre à jour plusieurs attributs en tant que groupe, mettez-les à jour en tant que plusieurs attributs dans une seule requête, et non comme plusieurs requêtes.
Il existe de nombreuses exigences liées aux attributs de données DICOM dans le contexte d’une transaction spécifique. Les attributs peuvent être tenus d’être présents, de ne pas être présents, d’être vides ou de ne pas être vides. Ces exigences sont disponibles dans ce tableau.
Remarque
Tous les codes d’exigence conditionnelle, y compris 1C et 2C, sont traités comme facultatifs.
Remarque
La requête ne peut pas définir la valeur de l’attribut État de l’étape de procédure (0074 1000). L’état de l’étape de procédure est géré à l’aide de la transaction d’état de modification ou de la transaction d’annulation de demande.
Mettre à jour les codes d’état de la réponse de transaction Workitem
Code | Description |
---|---|
200 (OK) |
L’objet Workitem cible a été mis à jour. |
400 (Bad Request) |
Il y a eu un problème avec la demande. Par exemple : (1) l’élément de travail cible était dans l’état ou CANCELED dans l’étatCOMPLETED . (2) l’UID de transaction est manquant. (3) l’UID de transaction est incorrect. (4) le jeu de données n’est pas conforme aux exigences. |
401 (Unauthorized) |
Le client n’est pas authentifié. |
403 (Forbidden) |
L’utilisateur n’est pas autorisé. |
404 (Not Found) |
L’objet Workitem cible n’a pas été trouvé. |
409 (Conflict) |
La requête est incohérente avec l’état actuel de l’élément de travail cible. |
415 (Unsupported Media Type) |
L’élément fourni Content-Type n’est pas pris en charge. |
424 (Failed Dependency) |
Le service DICOM ne peut pas accéder à une ressource dont il dépend pour effectuer cette demande. Par exemple, l’accès au magasin Data Lake connecté ou au coffre de clés pour prendre en charge le chiffrement de clé géré par le client n’est pas pris en charge. |
503 (Service Unavailable) |
Le service n’est pas disponible ou occupé. Réessayez plus tard. |
Mettre à jour la charge utile de réponse de transaction Workitem
Le serveur d’origine prend en charge les champs d’en-tête requis dans le tableau 11.6.3-2.
Une réponse de réussite n’a aucune charge utile ou une charge utile contenant un document Rapport d’état.
Une charge utile de réponse d’échec peut contenir un rapport d’état décrivant les échecs, avertissements ou autres informations utiles.
Modifier l’état workitem
Cette transaction est utilisée pour modifier l’état d’un workitem. Il correspond à l’opération UPS DIMSE N-ACTION « Modifier l’état UPS ». Les modifications d’état sont utilisées pour revendiquer la propriété, terminer ou annuler un workitem.
Faire référence à: https://dicom.nema.org/medical/dicom/current/output/html/part18.html#sect_11.7
Si l’élément Workitem existe sur le serveur d’origine, l’élément Workitem est retourné dans un type de média acceptable. L’élément Workitem retourné ne contient pas l’attribut Transaction UID (0008,1195). Cela est nécessaire pour conserver le rôle de l’attribut en tant que verrou d’accès, comme décrit ici.
Method | Path | Description |
---|---|---|
PUT | .. /workitems/{workitem}/state | Modifier l’état de l’élément de travail |
L’en-tête Accept
est obligatoire et doit avoir la valeur application/dicom+json
.
La charge utile de la requête contient les éléments de données d’état UPS de modification. Ces éléments de données sont les suivants.
- UID de transaction (0008, 1195). La charge utile de la requête inclut un UID de transaction. L’agent utilisateur crée l’UID de transaction lors de la demande d’une transition vers l’état
IN PROGRESS
d’un workitem donné. L’agent utilisateur fournit cet UID transactionnel dans les transactions suivantes avec cet élément Workitem. - État de l’étape de procédure (0074, 1000). Les valeurs légales correspondent à la transition d’état demandée. Voici :
IN PROGRESS
, ouCOMPLETED
CANCELED
.
Modifier les codes d’état de réponse de l’état Workitem
Code | Description |
---|---|
200 (OK) |
L’instance Workitem a été récupérée avec succès. |
400 (Bad Request) |
La requête ne peut pas être effectuée pour l’une des raisons suivantes : (1) la requête n’est pas valide en fonction de l’état actuel de l’élément de travail cible. (2) l’UID de transaction est manquant. (3) l’UID de transaction est incorrect |
401 (Unauthorized) |
Le client n’est pas authentifié. |
403 (Forbidden) |
L’utilisateur n’est pas autorisé. |
404 (Not Found) |
L’objet Workitem cible n’a pas été trouvé. |
409 (Conflict) |
La requête est incohérente avec l’état actuel de l’élément de travail cible. |
424 (Failed Dependency) |
Le service DICOM ne peut pas accéder à une ressource dont il dépend pour effectuer cette demande. Par exemple, l’accès au magasin Data Lake connecté ou au coffre de clés pour prendre en charge le chiffrement de clé géré par le client n’est pas pris en charge. |
503 (Service Unavailable) |
Le service n’est pas disponible ou occupé. Réessayez plus tard. |
Modifier la charge utile de réponse de l’état Workitem
- Les réponses incluent les champs d’en-tête spécifiés dans la section 11.7.3.2.
- Une réponse de réussite n’a aucune charge utile.
- Une charge utile de réponse d’échec peut contenir un rapport d’état décrivant les échecs, avertissements ou autres informations utiles.
Rechercher des éléments de travail
Cette transaction vous permet de rechercher des workitems par attributs.
Method | Path | Description |
---|---|---|
GET | .. /workitems ? | Rechercher des éléments de travail |
L’en-tête suivant Accept
est pris en charge pour la recherche.
application/dicom+json
Paramètres de recherche pris en charge
Les paramètres suivants pour chaque requête sont pris en charge :
Clé | Valeurs de prise en charge | Nombre autorisé | Description |
---|---|---|---|
{attributeID}= |
{value} |
0...N | Recherchez la correspondance d’attribut/valeur dans la requête. |
includefield= |
{attributeID} all |
0...N | Les autres attributs à retourner dans la réponse. Seuls les attributs de niveau supérieur peuvent être inclus , et non pas les attributs qui font partie de séquences. Les balises publiques et privées sont prises en charge. Quand all est fourni. Pour plus d’informations sur les attributs retournés pour chaque type de requête, consultez La réponse de recherche. Si un mélange est {attributeID} all fourni, le serveur utilise par défaut « all ». |
limit= |
{value} |
0...1 | Valeur entière pour limiter le nombre de valeurs retournées dans la réponse. La valeur peut être comprise entre la plage 1 >= x <= 200 . Valeur par défaut : 100 . |
offset= |
{value} |
0...1 | Ignorez les résultats {value}. Si un décalage est fourni plus grand que le nombre de résultats de la requête de recherche, une 204 (no content) réponse est retournée. |
fuzzymatching= |
true \ false |
0...1 | Si la correspondance approximative vraie est appliquée à tous les attributs avec la représentation de valeur PN (Person Name). Il effectue une correspondance de mot de préfixe de n’importe quelle partie de nom à l’intérieur de ces attributs. Par exemple, si PatientName c’est John^Doe , joh puis , do , jo do , et Doe John Doe toutes les correspondances. Toutefois ohn , cela ne correspond pas. |
Attributs pouvant faire l’objet d’une recherche
Nous prenons en charge la recherche sur les attributs suivants.
Mot clé d’attribut |
---|
PatientName |
PatientID |
ReferencedRequestSequence.AccessionNumber |
ReferencedRequestSequence.RequestedProcedureID |
ScheduledProcedureStepStartDateTime |
ScheduledStationNameCodeSequence.CodeValue |
ScheduledStationClassCodeSequence.CodeValue |
ScheduledStationGeographicLocationCodeSequence.CodeValue |
ProcedureStepState |
StudyInstanceUID |
Remarque
Nous ne prenons pas en charge la recherche à l’aide d’une chaîne vide pour tous les attributs.
Correspondance de recherche
Nous prenons en charge les types correspondants suivants.
Type de recherche | Attribut pris en charge | Exemple |
---|---|---|
Requête de plage | ScheduledProcedureStepStartDateTime |
{attributeID}={value1}-{value2} . Pour les valeurs de date/heure, nous prenons en charge une plage inclusive sur la balise. Cette plage est mappée à attributeID >= {value1} AND attributeID <= {value2} . Si {value1} ce n’est pas spécifié, toutes les occurrences de dates/heures antérieures, et y compris {value2} sont mises en correspondance. De même, s’il {value2} n’est pas spécifié, toutes les occurrences des {value1} dates/heures suivantes sont mises en correspondance. Toutefois, l’une de ces valeurs doit être présente. {attributeID}={value1}- et {attributeID}=-{value2} sont valides, cependant, {attributeID}=- n’est pas valide. |
Correspondance exacte | Tous les attributs pris en charge | {attributeID}={value1} |
Correspondance approximative | PatientName |
Correspond à n’importe quel composant du nom qui commence par la valeur. |
Correspondance de caractères génériques | PatientID , ReferencedRequestSequence.AccessionNumber , ReferencedRequestSequence.RequestedProcedureID , ProcedureStepState , ScheduledStationNameCodeSequence.CodeValue , ScheduledStationClassCodeSequence.CodeValue , ScheduledStationGeographicLocationCodeSequence.CodeValue |
Les caractères génériques suivants sont pris en charge : * - Correspond à zéro ou plusieurs caractères. Par exemple : {attributeID}={val*} correspond à « val », « valid », « value », mais pas à « evaluate ». ? - Correspond à un caractère unique. Par exemple : {attributeID}={valu?} correspond à « value », « valu1 », mais pas à « valued » ou « value » |
Remarque
Bien que nous ne prenions pas en charge la correspondance de séquence complète, nous prenons en charge la correspondance exacte sur les attributs répertoriés dans une séquence.
ID d’attribut
Les balises peuvent être encodées de plusieurs façons pour le paramètre de requête. Nous avons partiellement implémenté la norme telle que définie dans PS3.18 6.7.1.1.1. Les encodages suivants pour une balise sont pris en charge.
Valeur | Exemple |
---|---|
{group}{element} |
00100010 |
{dicomKeyword} |
PatientName |
Exemple de requête :
../workitems?PatientID=K123&0040A370.00080050=1423JS&includefield=00404005&limit=5&offset=0
Réponse de recherche
La réponse est un tableau de jeux de 0...N
données DICOM avec les attributs suivants retournés.
- Tous les attributs dans DICOM PowerShell 3.4 Table CC.2.5-3 avec un type de clé de retour de 1 ou 2
- Tous les attributs de la table DICOM PowerShell 3.4 Table CC.2.5-3 avec un type de clé de retour de 1C pour lequel les exigences conditionnelles sont remplies
- Tous les autres attributs Workitem passés en tant que paramètres de correspondance
- Tous les autres attributs Workitem passés en tant que
includefield
valeurs de paramètre
Codes de réponse de recherche
L’API de requête retourne l’un des codes d’état suivants dans la réponse :
Code | Description |
---|---|
200 (OK) |
La charge utile de réponse contient toutes les ressources correspondantes. |
206 (Partial Content) |
La charge utile de réponse contient uniquement certains des résultats de la recherche, et le reste peut être demandé par le biais de la requête appropriée. |
204 (No Content) |
La recherche s’est terminée avec succès, mais aucun résultat n’a été retourné. |
400 (Bad Request) |
Il y a eu un problème avec la demande. Par exemple, syntaxe de paramètre de requête non valide. Le corps de la réponse contient les détails de l’échec. |
401 (Unauthorized) |
Le client n’est pas authentifié. |
403 (Forbidden) |
L’utilisateur n’est pas autorisé. |
424 (Failed Dependency) |
Le service DICOM ne peut pas accéder à une ressource dont il dépend pour effectuer cette demande. Par exemple, l’accès au magasin Data Lake connecté ou au coffre de clés pour prendre en charge le chiffrement de clé géré par le client n’est pas pris en charge. |
503 (Service Unavailable) |
Le service n’est pas disponible ou occupé. Réessayez plus tard. |
Remarques supplémentaires
L’API de requête ne retourne 413 (request entity too large)
pas . Si la limite de réponse de requête demandée est en dehors de la plage acceptable, une requête incorrecte est retournée. Tout ce qui est demandé dans la plage acceptable est résolu.
- Les résultats paginés sont optimisés pour retourner la dernière instance correspondante en premier, ce qui peut entraîner des enregistrements en double dans les pages suivantes si des données plus récentes correspondant à la requête ont été ajoutées.
- La correspondance ne respecte pas la casse et ne respecte pas les accents pour les types PN VR.
- La correspondance ne respecte pas la casse et respecte les accents pour les autres types VR de chaîne.
- S’il existe un scénario dans lequel l’annulation d’un workitem et l’interrogation se produisent en même temps, la requête exclut probablement l’élément Workitem qui est mis à jour et le code de réponse est
206 (Partial Content)
.
Remarque
DICOM® est une marque déposée de la National Electrical Manufacturers Association pour ses publications de standards relatifs aux communications numériques des informations médicales.