• Extract key content from DICOM SR (AI result, measurement report, etc.) into FHIR resources, Observation
  • Make mapping independent of final discussion around DiagnosticReport vs Composition 
  • Bidirectional mapping is out-of-scope.
  • Publish an IG



  • Observation UID is not in TIDs but in core DICOM attributes for SR content
    • See if there are more non-TID elements that should be included in the mapping
      • Tentatively no
  • Is this a bundle of observations or is the output a FHIR Diagnostic report?
    • Pros for bundle of observations is probably a bit easier.  Harder to group them in terms of DICOM SR
    • all observations related to an event
    • same accession #
    • Diagnostic report because they are collected for a single diagnostic report.  This is what an EHR would expect?
    • bundle path could be a composition.  
    • review the CDA to FHIR mapping. 
    • what do you do with ancillary data for a diagnostic report?
      •  Out of scope or use composition
      • Need to ask O&O what they would expect.
      • Need EMR vendors
      • Would payors need to know the resultant data
      • Composition makes sense for AI results?
      • What is the context for the observation?
      • Could be either, just focus on 1500 to single observation or panel of observations
      • Could be either composition or a diagnostic report based on specific use case
    • Custom FHIR resource? 
      • Imaging selection is the discriminator.
  • Input is TID 1500

Needed: SR IOD Equipment Module to Device Resource

TID 1410 Parameters

Container: EV (125007, DCM, "Measurement Group")
Concept NameVTVM



DICOM SR Parameter/Value Set ConstraintDescription

EV (C67447, NCIt, "Activity Session")

DT (112039, DCM, "Tracking Identifier")

EV (112040, DCM, "Tracking Unique Identifier")

DTID 1419 “ROI Measurements”



Coded term or Context Group for Concept Name of measurement


Units for the measurement


Modifier Name for Concept Name of measurement



Modifier Value for Concept Name of measurement

EV (370129005, SCT, "Measurement Method")code1U


Value for Measurement Method

EV (121401, DCM, "Derivation")


Value for Measurement Derivation

EV (363698007, SCT, "Finding Site")code1-nU


Value for Anatomic Location of measurement

> DT (106233006, SCT, "Topographical modifier")code1U


Modifier Value for Anatomic Location of measurement

>EV (272741003, SCT, "Laterality")code1UDCID 244 “Laterality”


Coded term or Context Group for the equation or table from which the measurement was derived or computed


Bibliographic reference or authority for statistical properties of a reference population


Bibliographic reference or authority for the normal range of the measurement

Not mapped


Coded term or Context Group for Concept Name of a derivation parameter

Not Mapped


Units of derivation parameter


Evaluations encoded with code or text responses


Value of evaluations encoded with code responses

Not mapped


Modifier Name of evaluations encoded with code or text responses

Not Mapped


Modifier Value of evaluations encoded with code or text responses

EV (121071, DCM, "Finding")


Type of the finding

DTID 4019 “Algorithm Identification”

DTID 310 “Measurement Properties”

$RefAuthority = $RefAuthority
$RangeAuthority = $RangeAuthority

Draft SR Mapping to Observation

DICOM SR Content

Observation Name



DomainResourceMeasurements and simple assertions

Σ0..*IdentifierBusiness Identifier for observation

Content Item: Observation UID (0040,A171)

... identifier:ObservationUID

Unique Measurement Identifier

EV(112040,DCM,"Tracking Unique Identifier")

... identifier:TrackingUID

Unique Tracking Identifier

EV(112039,DCM,"Tracking Identifier")

... identifier:TrackingID

Human Readable Tracking identifier

EV (C67447, NCIt, "Activity Session")

... identifier:ActivitySession


.Referenced Request Sequence(0040,A370)

Σ0..*Reference(CarePlan  DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder  | ServiceRequest| Appointment | AppointmentResponse | Task)Request fulfilled

>Placer Order Number/Imaging Service Request(0040,2016)

>Order Placer Identifier Sequence(0040,0026)

... BasedOn:ServiceRequest



>Placer Filler Number/Imaging Service Request(0040,2017)

>Order Placer Identifier Sequence(0040,0027)

... BasedOn:ServiceRequest


>Accession Number(0008,0050)

>Issuer of Accession Number Sequence(0008,0051)

... BasedOn:ServiceRequest



Reference(MedicationAdministration | MedicationDispense | MedicationStatement | Procedure | Immunization | ImagingStudy)

Open Question: ImagingReference or ImagingStudy?

Part of referenced event

>Study Instance UID(0020,000D)Σ0..1ImagingStudy.Identifier.type=SIUID

>Requested Procedure ID(0040,1001)
>Requested Procedure Description(0032,1060)
>Requested Procedure Code Sequence(0032,1064)
>Reason for the Requested Procedure(0040,1002)
>Reason for Requested Procedure Code Sequence(0040,100A)

Preliminary Flag(0040,A496) = preliminary

Verification Flag(0040,A493) = final

?!Σ1..1coderegistered | preliminary | final | amended +
ObservationStatus (Required)

CATAGORY = Imaging
0..*CodeableConceptClassification of type of observation
Observation Category Codes (Preferred)

EV (121071, DCM, "Finding")Σ1..1CodeableConceptType of observation (code / type)
LOINC Codes (Example)

Patient ModuleΣ0..1Reference(Patient | Group | Device | Location)Who and/or what the observation is about

Content Date (0008,0023)

Content Time (0008,0033)

Σ0..1instantDate/Time this version was made available

Person or responsible for the analysis

Author Observer Sequence (0040,A078)

Bring more in

Σ0..*Reference(Practitioner | PractitionerRole | Organization | CareTeam | Patient | RelatedPerson)Who is responsible for the observation

Actual result

.... valueQuantity


.... valueCodeableConcept


text value if $QualType is text
.... valueString


Boolean value if $QualType is boolean

.... valueBoolean


.... valueInteger


$measurement as Range

.... valueRange


$measurement as Ratio

.... valueRatio


.... valueSampledData


Value Time
.... valueTime


Value Date Time
.... valueDateTime


0..*CodeableConceptHigh, low, normal, etc.
Observation Interpretation Codes (Extensible)

... interpretation:Abnormality

HL7 V2

... interpretation:ActionableFinding

CID 7035 “Actionable Finding Classification”

EV (363698007, SCT, "Finding Site")=$TargetSite
0..1CodeableConceptObserved body part
SNOMED CT Body Structures (Example)


DCID 244 “Laterality”


EV (370129005, SCT, "Measurement Method") 

0..1CodeableConceptHow it was done
Observation Methods (Example)

SR IOD Equipment Module as Device Resource

DTID 4019 “Algorithm Identification”

0..1Reference(Device | DeviceMetric)(Measurement) Device

I0..*BackboneElementProvides guide for interpretation
+ Rule: Must have at least a low or a high or text

DCID 223 “Normal Range Values” - low.... lowI0..1SimpleQuantityLow Range, if relevant

DCID 223 “Normal Range Values” - High.... highI0..1SimpleQuantityHigh Range, if relevant

.... type
0..1CodeableConceptReference range qualifier
Observation Reference Range Meaning Codes (Preferred)

.... appliesTo
0..*CodeableConceptReference range population
Observation Reference Range Applies To Codes (Example)

.... age
0..1RangeApplicable age range, if relevant

.... text
0..1stringText based reference range in an observation

... hasMemberΣ0..*Reference(Observation | QuestionnaireResponse|MolecularSequence)Related resource that belongs to the Observation group

ImagingReference to images or other DICOM IODs the measurement was derived from

TID 1420 has observations the result is derived from

... derivedFromΣ0..*Reference(DocumentReference | ImagingStudy | Media | QuestionnaireResponse | Observation | MolecularSequence| ImagingReference)Related measurements the observation is made from

when do we use components vs multiple observations in SR?

Component example: RECIST.

This would be explanatory text in the IG.

... componentΣ0..*BackboneElementComponent results

.... codeΣ1..1CodeableConceptType of component observation (code / type)
LOINC Codes (Example)

.... value[x]Σ0..1
Actual component result

..... valueQuantity


..... valueCodeableConcept


..... valueString


..... valueBoolean


..... valueInteger


..... valueRange


..... valueRatio


..... valueSampledData


..... valueTime


..... valueDateTime


..... valuePeriod


.... dataAbsentReasonI0..1CodeableConceptWhy the component result is missing
DataAbsentReason (Extensible)

.... interpretation
0..*CodeableConceptHigh, low, normal, etc.
Observation Interpretation Codes (Extensible)

.... referenceRange
0..*see referenceRangeProvides guide for interpretation of component result

  • No labels


  1. Thanks for this good initiative and clear goals. Also good input for discussion. I have one major comment on the mapping of Tracking identifiers. The (112039, DCM, "Tracking Identifier") and (112040, DCM, "Tracking Unique Identifier") should not be mapped to the Observation.identifier. The Observation.identifier is the identifier of the Observation instance. The tracking identifiers should refer to the real world object under observation (e.g. a lesion); this should be a reference (Foreign key) to another resource instance, representing the real world object (e.g. a BodyStructure or similar TBD).

    1. Potential solution: Observation.focus referencing BodySite.identifier

  2. For BodySite.identifier please read BodyStructure.identifier

  3. I am struggling with the multiple flags on DICOM SR getting mapped to status. Which value is equivalent to what in order to do a round trip from DICOM to FHIR to DICOM without losing any value

    1. Hi Diana, we talked a little about this on the last call. I think the tentative conclusion we reached was that Observation.status should match Preliminary Flag (0040,A496) only.

      Completion Flag (0040,A491) is document level and does not seem to apply to a single observation extracted from an SR.

      Similarly Verification Flag (0040,A493) seems like it is more appropriate to a DiagnosticReport or a Composition that includes SR-based observations rather than the observation itself.

      Additionally, round trip conversion is not part of the proposed scope of this IG. In future we may look at more document-level SR-to-FHIR mappings but the focus for now is on extracting observation-level SR content.

      Happy to discuss further. The next call is at 11AM Eastern time.

  4. If I chose Diagnostic Report for encapsulating the SR Observations, which would be the code to be used? The same question applies for a Composition.section.code

    18782-3Radiology Study observation (narrative)Study observation
    19005-8Radiology Imaging study [Impression] (narrative)Imaging study
    18834-2Radiology Comparison study (narrative)Comparison.study
    68604-8Radiology Diagnostic study noteDiagnostic study note
  5. Observation vs Observation components:

    1. If the lesion has details like diameter, axis, volume etc does it make sense to put them as separate observations by linking together? in which scenario, they will be queried separately.
    2. Rather, if we create one observation for one measurement group and put all findings as observation components then linking would be more meaningful. 

    Any comments/suggestions?

    1. In general FHIR does not encourage using components.

      Ad 1. Please read my comment on Component example: RECIST in the table above.

  6. FHIR Observation effective[x] : Which of the DICOM SR tags would map to Observation.effective ( Clinically relevant time/time-period for observation). Content Date/Time?