Wednesday, April 22, 2015

QIDO-RS Capability Breakdown

Recently I created a github repository to track the available DICOMWeb implementations and their capabilities.  While a vendor may claim to support a given DICOMWeb API, the devil really is in the details.  These details are supposed to be described in the conformance statement but these are usually incomplete (or wrong).  This post attempts to break down QIDO-RS at a deeper level so we can more accurately assess how complete and compliant a given implementation is:


Feature Description
application/dicom+xml Can return responses with Content-Type: multipart/related; application/dicom+xml
application/json Can return responses with Content-Type: application/json
gzip Can return responses with Content-Encoding: gzip. Note that this is not mentioned in the standard and is therefore not required (but I feel should be supported and am therefore including it)
no-cache Supports the Cache-control: no-cache header which ensures the result is current and not cached on the client side. Note that this is not required by the standard (but I feel should be supported and am therefore including it)
group/element Supports specifying DICOM elements by group/element (e.g. 0020000D)
keyword Supports specifying DICOM elements by DICOM keyword (e.g. StudyInstanceUID)
sequences Supports specifying sequence elements (e.g. RequestAttributeSequence.RequestedProcedureID)
limit Supports the limit option for queries (limits the number of records returned)
offset Supports the offset option for queries (skips records in the response to support paging)
TimezoneOffsetFromUTC Supports specification of the timezone as part of date/time queries. Note that this is not required by the standard
QIDO-RS Studies Supports searching for studies via the /studies endpoint
QIDO-RS Studies response /studies response includes all required attributes
StudyDate - single Supports searching for studies by study date by single value match (e.g. exact match)
StudyDate - range Supports searching for studies by study date range
StudyTime - single Supports searching for studies by study time by single value match (e.g. exact match)
StudyTime - range Supports searching for studies by study time range
AccessionNumber - single Supports searching for studies by accession number by single value match (e.g. 1233456)
AccessionNumber - wildcard Supports searching for studies by accession number by wildcard (e.g. 1234*)
ModalitiesInStudy - single Supports searching for studies by modalities in study by single value match e.g. (CT)
ModalitiesInStudy - list Supports searching for studies by modalities in study by list of values (e.g. CT,MR,US)
ReferringPhysicianName - single Supports searching for studies by ReferringPhysicianName by single value match
ReferringPhysicianName - wildcard Supports searching for studies by ReferringPhysicianName by wildcard
PatientName - single Supports searching for studies by PatientName by single value match
PatientName - wildcard Supports searching for studies by PatientName by wildcard
PatientID - single Supports searching for studies by PatientID by single value match
PatientID - wildcard Supports searching for studies by PatientID by wildcard
PatientID - list Supports searching for studies by PatientID by list of values
StudyInstanceUID - single Supports searching for studies by StudyInstanceUID by single value match
StudyInstanceUID - list Supports searching for studies by StudyInstanceUID by list of values
StudyId - single Supports searching for studies by StudyId by single value match
StudyId - list Supports searching for studies by StudyId by list of values
StudyId - wildcard Supports searching for studies by StudyId by wildcard match
QIDO-RS Study Series Supports searching for series via the /studies/{StudyInstanceUID}/series endpoint
QIDO-RS Series Supports searching for series via the /series endpoint
QIDO-RS Series response Search for series response includes all required attributes
Modality - single Supports searching for series by Modality by single value match
Modality - list Supports searching for series by Modality by list of values
SeriesInstanceUID - single Supports searching for series by SeriesInstanceUID by single value match
SeriesInstanceUID - list Supports searching for series by SeriesInstanceUID by single value match
SeriesNumber - single Supports searching for series by SeriesNumber by single value match
SeriesNumber - range Supports searching for series by SeriesNumber by matching a range of values
SeriesNumber - list Supports searching for series by SeriesNumber by matching a list of values
PerformedProcedureStepStartDate - single Supports searching for series by PerformedProcedureStepStartDate by single value match
PerformedProcedureStepStartDate - range Supports searching for series by PerformedProcedureStepStartDate by matching a range of values
PerformedProcedureStepStartTime - single Supports searching for series by PerformedProcedureStepStartTime by single value match
PerformedProcedureStepStartTime - range Supports searching for series by PerformedProcedureStepStartTime by range of values match
ScheduledProcedureStepID - single Supports searching for series by RequestAttributeSequence.ScheduledProcedureStepID by single value match
RequestedProcedureID - single Supports searching for series by RequestAttributeSequence.RequestedProcedureID by single value match
QIDO-RS Series Instances Supports searching for instances in a series via the /studies/{StudyInstanceUID}/series/{SeriesInstanceUID}/instances endpoint
QIDO-RS Study Instances Supports searching for instances in a study via the /studies/{StudyInstanceUID}/instances endpoint
QIDO-RS Instances Supports searching for instances via the /instances endpoint
QIDO-RS Instance response Search for Instance response includes all required attributes
SOPClassUID - single Supports searching for instances by SOPClassUID by single value match
SOPClassUID - list Supports searching for instances by SOPClassUID by list of values
SOPInstanceUID - single Supports searching for instances by SOPInstanceUID by single value match
SOPInstanceUID - list Supports searching for instances by SOPInstanceUID by list of values
InstanceNumber - single Supports searching for instances by InstanceNumber by single value match
InstanceNumber - range Supports searching for instances by InstanceNumber by range of values
InstanceNumber - list Supports searching for instances by InstanceNumber by list of values


Vendors can go beyond this list of features by adding support for additional matching keys, including additional fields in the response, fuzzy matching and relational queries.  I didn't include these features as they are not required by the standard, not required by most use cases and rarely implemented.

What are your thoughts on this list?  Should something be added or removed?

2 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. If limit & offset is used for paging, then it is hard to see how any sorting of results can be done when querying with qido-rs. My thinking is that it would be nice if qido-rs had some fields to specify sort order on the server.

    ReplyDelete