Integrated Reporting Applications
1.0.0 - Trial-Implementation
This page is part of the Integrated Reporting Applications (v1.0.0: Publication) based on FHIR v5.0.0. This is the current published version. For a full list of available versions, see the Directory of published versions
The Integrated Reporting Applications (IRA) Profile helps applications that are used together during reporting (e.g., image display, report creator, clinical applications, AI tools, etc.) to share information using a standard called FHIRcast. Each application can share data it is using or creating, referred to as Content. Each application can also signal a change in the patient, study or report being worked on, referred to as Context, so that other applications can switch to that new Context in an automated and synchronized fashion. Other applications are notified so they can then intelligently synchronize their behavior or use the new data.
For example, the report creator could share that the user is starting a new report, and the other applications could synchronize by opening the corresponding study. An AI tool could generate a tumor measurement and the report creator could get that data and add an entry in the report after reviewed by the radiologist.
Note that there are often other supporting activities happening during reporting. For example, an Image Display triggers a tumor analysis application to detect any tumors exist in the study. These supporting activities are out of scope in this profile.
This section defines the actors, transactions, and/or content modules in this profile. General definitions of actors are given in the Technical Frameworks General Introduction Appendix A. IHE Transactions can be found in the Technical Frameworks General Introduction Appendix B. Both appendices are located at https://profiles.ihe.net/GeneralIntro/.
Figure 1:53.1-1 shows the actors directly involved in the IRA Profile and the relevant transactions between them. If needed for context, other actors that may be indirectly involved due to their participation in other related profiles are shown in dotted lines. Actors which have a required grouping are shown in conjoined boxes (see Section 1:53.3).
Figure 1:53.1-1: IRA Actor Diagram
Table 1:53.1-1 lists the transactions for each actor directly involved in the IMR Profile. To claim compliance with this profile, an actor shall support all required transactions (labeled “R”) and may support the optional transactions (labeled “O”).
Table 1:53.1-1: IRA Profile - Actors and Transactions
Actors | Transactions | Initiator or Responder | Optionality | Reference |
---|---|---|---|---|
Image Display | Subscribe to Reporting Session [RAD-146] | Initiator | R | RAD TF-2: 4.146 |
Connect to Notification Channel [RAD-147] | Initiator | R | RAD TF-2: 4.147 | |
Open Report Context [RAD-148] | Initiator | R | RAD TF-2: 4.148 | |
Close Report Context [RAD-149] | Initiator | R | RAD TF-2: 4.149 | |
Unsubscribe Session [RAD-152] | Initiator | R | RAD TF-2: 4.152 | |
Get Current Context [RAD-153] | Initiator | R | RAD TF-2: 4.153 | |
Distribute Context Event [RAD-154] | Responder | R | RAD TF-2: 4.154 | |
Generate SyncError Event [RAD-155] | Responder | R | RAD TF-2: 4.155 | |
Notify Error [RAD-156] | Initiator | R | RAD TF-2: 4.156 | |
Report Creator | Subscribe to Reporting Session [RAD-146] | Initiator | R | RAD TF-2: 4.146 |
Connect to Notification Channel [RAD-147] | Initiator | R | RAD TF-2: 4.147 | |
Open Report Context [RAD-148] | Initiator | R | RAD TF-2: 4.148 | |
Close Report Context [RAD-149] | Initiator | R | RAD TF-2: 4.149 | |
Unsubscribe Session [RAD-152] | Initiator | R | RAD TF-2: 4.152 | |
Get Current Context [RAD-153] | Initiator | R | RAD TF-2: 4.153 | |
Distribute Context Event [RAD-154] | Responder | R | RAD TF-2: 4.154 | |
Generate SyncError Event [RAD-155] | Responder | R | RAD TF-2: 4.155 | |
Notify Error [RAD-156] | Initiator | R | RAD TF-2: 4.156 | |
Worklist Client | Subscribe to Reporting Session [RAD-146] | Initiator | R | RAD TF-2: 4.146 |
Connect to Notification Channel [RAD-147] | Initiator | R | RAD TF-2: 4.147 | |
Open Report Context [RAD-148] | Initiator | R | RAD TF-2: 4.148 | |
Close Report Context [RAD-149] | Initiator | R | RAD TF-2: 4.149 | |
Unsubscribe Session [RAD-152] | Initiator | R | RAD TF-2: 4.152 | |
Get Current Context [RAD-153] | Initiator | R | RAD TF-2: 4.153 | |
Distribute Context Event [RAD-154] | Responder | R | RAD TF-2: 4.154 | |
Generate SyncError Event [RAD-155] | Responder | R | RAD TF-2: 4.155 | |
Notify Error [RAD-156] | Initiator | R | RAD TF-2: 4.156 | |
Evidence Creator | Subscribe to Reporting Session [RAD-146] | Initiator | R | RAD TF-2: 4.146 |
Connect to Notification Channel [RAD-147] | Initiator | R | RAD TF-2: 4.147 | |
Unsubscribe Session [RAD-152] | Initiator | R | RAD TF-2: 4.152 | |
Get Current Context [RAD-153] | Initiator | R | RAD TF-2: 4.153 | |
Distribute Context Event [RAD-154] | Responder | R | RAD TF-2: 4.154 | |
Generate SyncError Event [RAD-155] | Responder | R | RAD TF-2: 4.155 | |
Notify Error [RAD-156] | Initiator | R | RAD TF-2: 4.156 | |
Stateless Evidence Creator | Subscribe to Reporting Session [RAD-146] | Initiator | R | RAD TF-2: 4.146 |
Connect to Notification Channel [RAD-147] | Initiator | R | RAD TF-2: 4.147 | |
Unsubscribe Session [RAD-152] | Initiator | R | RAD TF-2: 4.152 | |
Get Current Context [RAD-153] | Initiator | R | RAD TF-2: 4.153 | |
Distribute Context Event [RAD-154] | Responder | R | RAD TF-2: 4.154 | |
Generate SyncError Event [RAD-155] | Responder | R | RAD TF-2: 4.155 | |
Notify Error [RAD-156] | Initiator | R | RAD TF-2: 4.156 | |
Content Creator | Update Report Content [RAD-150] | Initiator | O (Note 1) | RAD TF-2: 4.150 |
Select Report Content [RAD-151] | Initiator | O (Note 1) | RAD TF-2: 4.151 | |
Watcher | Subscribe to Reporting Session [RAD-146] | Initiator | R | RAD TF-2: 4.146 |
Connect to Notification Channel [RAD-147] | Initiator | R | RAD TF-2: 4.147 | |
Unsubscribe Session [RAD-152] | Initiator | R | RAD TF-2: 4.152 | |
Get Current Context [RAD-153] | Initiator | R | RAD TF-2: 4.153 | |
Distribute Context Event [RAD-154] | Responder | R | RAD TF-2: 4.154 | |
Generate SyncError Event [RAD-155] | Responder | R | RAD TF-2: 4.155 | |
Notify Error [RAD-156] | Initiator | R | RAD TF-2: 4.156 | |
Hub | Subscribe to Reporting Session [RAD-146] | Responder | R | RAD TF-2: 4.146 |
Connect to Notification Channel [RAD-147] | Responder | R | RAD TF-2: 4.147 | |
Open Report Context [RAD-148] | Responder | R | RAD TF-2: 4.148 | |
Close Report Context [RAD-149] | Responder | R | RAD TF-2: 4.149 | |
Update Report Content [RAD-150] | Responder | R | RAD TF-2: 4.150 | |
Select Report Content [RAD-151] | Responder | R | RAD TF-2: 4.151 | |
Unsubscribe Session [RAD-152] | Responder | R | RAD TF-2: 4.152 | |
Get Current Context [RAD-153] | Responder | R | RAD TF-2: 4.153 | |
Distribute Context Event [RAD-154] | Initiator | R | RAD TF-2: 4.154 | |
Generate SyncError Event [RAD-155] | Initiator | R | RAD TF-2: 4.155 | |
Notify Error [RAD-156] | Responder | R | RAD TF-2: 4.156 |
Note 1: A Content Creator shall support at least one of the update or select transactions.
Most requirements are documented in RAD TF-2: Transactions. This section documents any additional requirements on this profile’s actors.
Note: Many actor requirements below assume an understanding of FHIRcast and how this profile uses it. Please refer to the Concepts section.
The Image Display presents patients’ studies and relevant information to the user so that the user can make diagnostic decisions on the studies.
The Image Display provides tools for the user to navigate images in a study. It may include a worklist component that lets the user select studies to read. It may also include tools to create evidence data such as annotations, key images, etc.
When the Image Display starts up, it shall obtain hub.url
and hub.topic
to join a reporting session.
The Image Display shall be able to launch other applications and synchronize them to the same report context through the Hub. It shall have the following capabilities:
hub.url
and the reporting session ID as hub.topic
Note that the actual application launch method is out of scope of this profile. See Application Launch Scenarios and Session Discovery for more details.
Table 1:53.1.1.1.1-1 specifies behavior requirements for the Image Display when it receives FHIRcast events.
The Image Display shall support all Behaviors shown as “R” in Optionality. The Image Display may support suggested behaviors (“O” in Optionality). For each Received Event in the table, ‘Context Key’ identifies the context in the Received Event, and ‘Resources’ specifies the FHIR resource used in the given context.
Table 1:53.1.1.1.1-1: Event Handling Requirements
Received Event | Context Key | Resource | Optionality | Behavior |
---|---|---|---|---|
DiagnosticReport-open | report |
DiagnosticReport | R | Maintain association of report context to associated patient and study |
patient |
Patient | R | Display the patient metadata | |
study |
ImagingStudy | R | Display the study images | |
DiagnosticReport-update | updates |
DiagnosticReport | R | Display the updated status value (DiagnosticReport.status ) |
updates |
DiagnosticReport | O | Display the comparison study (DiagnosticReport.associatedStudy ) |
|
updates |
ImagingSelection | O | Display annotations to selected images | |
updates |
Observation | O | Display measurements and annotations | |
DiagnosticReport-select | select |
ImagingStudy | O | Bring the comparison study to focus |
select |
ImagingSelection | O | Bring selected images and annotations to focus | |
DiagnosticReport-close | report |
DiagnosticReport | R | Stop display the study images associated to the report context |
SyncError | operationoutcome |
OperationOutcome | O | Notify the user regarding the synchronization error, including the details of the error reported and the Subscriber that reported the error |
If the report context is resumed, then the Image Display shall be able to restore the application to a state associated to that report context prior to suspension. It is the responsibility of the implementation to determine what elements of application state are significant to the user to be restored when the application resumes the report context.
Note: The DiagnosticReport-open event does not explicitly indicate if the report context is new or resumed. See Subscriber Local Context and Local State for design considerations.
When the Image Display wants to publish content events into a reporting session, then it shall be grouped with a Content Creator to enable it to publish events using one or more FHIR resources. See Section 1:53.1.1.6 for details.
Note: The FHIR resources which the actor can publish as FHIRcast contents are documented in its CapabilityStatement.
The Report Creator produces a diagnostic report for patients’ studies.
In order to complete a study dictation, the Report Creator:
The Report Creator provides tools for the user to insert report content such as findings and impressions. The Report Creator may use the report content shared by other applications through the Hub (e.g., image references shared by Image Display, or measurements shared by Evidence Creator) to directly update the report (e.g., insert measurements) or generate derived report content (e.g., inject hyperlinks from image references)
When the Report Creator starts up, it shall obtain hub.url
and hub.topic
to join a reporting session.
The Report Creator shall be able to launch other applications and synchronize them to the same report context through the Hub. It shall have the following capabilities:
hub.url
and the reporting session ID as hub.topic
Note that the actual application launch method is out of scope of this profile. See Application Launch Scenarios and Session Discovery for more details.
Table 1:53.1.1.2.1-1 specifies behavior requirements for the Report Creator when it receives FHIRcast events.
The Report Creator shall support all Behaviors shown as “R” in Optionality. The Report Creator may support suggested behaviors (“O” in Optionality). For each Received Event in the table, ‘Context Key’ identifies the context in the Received Event, and ‘Resources’ specifies the FHIR resource used in the given context.
Table 1:53.1.1.2.1-1: Event Handling Requirements
Received Event | Context Key | Resource | Optionality | Behavior |
---|---|---|---|---|
DiagnosticReport-open | report |
DiagnosticReport | R | Maintain association of report context to associated patient and study |
patient |
Patient | R | Be ready for reporting for the patient. If re-opening a previously opened report context, resume to the previous state of the report context when it was suspended. | |
study |
ImagingStudy | R | Be ready for reporting for the study. If re-opening a previously opened report context, resume to the previous state of the report context when it was suspended. | |
DiagnosticReport-update | updates |
DiagnosticReport | R | Make provided report updates (e.g., change in status, add/remove comparison studies available defined in associatedStudy extension attribute, etc.) for reference in the report |
updates |
ImagingSelection | R | Make images and/or annotations in the ImageSelection resource available for reference in the report | |
updates |
Observation | R | Make provided measurements and annotations available for reference in the report | |
DiagnosticReport-select | select |
ImagingSelection | R | Bring images and/or annotations to focus and be able to apply user commands (See Note 1) |
select |
Observation | R | Bring measurements and annotations to focus and be able to apply user commands (See Note 1) | |
DiagnosticReport-close | report |
DiagnosticReport | R | Stop display of the study report |
SyncError | operationoutcome |
OperationOutcome | O | Notify the user regarding the synchronization error, including the details of the error reported and the Subscriber that reported the error |
Note 1: The Report Creator may provide application logic that can make use of the selected resources. For example, a nodule (as
ImagingSelection
) and corresponding measurements (asObservation
) are selected. Then the radiologist issues a voice command “insert hyperlink”. In this case, the Report Creator applies the command with the selected resources and inserts a hyperlink reference to the nodule with measurement.
If the report context is resumed, then the Report Creator shall be able to restore the application to a state associated to that report context prior to suspension. It is the responsibility of the implementation to determine what elements of application state are significant to the user to be restored when the application resumes the report context.
Note: The DiagnosticReport-open event does not explicitly indicate if the report context is new or resumed. See Subscriber Local Context and Local State for design considerations.
The Report Creator shall be grouped with a Content Creator to publish report status update associated to the report anchor context. In the DiagnosticReport-update
context change request, the report status update shall be specified in DiagnosticReport.status
in the update
context key.
The Report Creator may publish other content updates. See Section 1:53.1.1.6 for details.
Note: The Report Creator documents the FHIR Resources it can publish as FHIRcast content in its CapabilityStatement.
The Worklist Client provides a reporting worklist to the user.
When a user selects a study from the worklist, the Worklist Client opens a new report context to synchronize other applications through the Hub to enable dictation on the studies. The Worklist Client may also launch other applications (e.g., Image Display, Report Creator, etc.) if necessary.
When the Worklist Client starts up, it shall obtain hub.url
and hub.topic
to join a reporting session.
The Worklist Client shall be able to launch other applications and synchronize them to the same report context through the Hub. It shall have the following capabilities:
hub.url
and the reporting session ID as hub.topic
Note that the actual application launch method is out of scope of this profile. See Application Launch Scenarios and Session Discovery for more details.
When a study dictation is complete, the Worklist Client consumes the report anchor context update event so that it can mark the study as dictated and remove it from the worklist.
Table 1:53.1.1.3.1-1 specifies behavior requirements for the Worklist Client when it receives FHIRcast events.
The Worklist Client shall support all Behaviors shown as “R” in Optionality. The Worklist Client may support suggested behaviors (“O” in Optionality). For each Received Event in the table, ‘Context Key’ identifies the context in the Received Event, and ‘Resources’ specifies the FHIR resource used in the given context.
Table 1:53.1.1.3.1-1: Event Handling Requirements
Received Event | Context Key | Resource | Optionality | Behavior |
---|---|---|---|---|
DiagnosticReport-open | report |
DiagnosticReport | R | Maintain association of report context to associated patient and study. |
patient |
Patient | R | Display the patient metadata | |
study |
ImagingStudy | R | Display the study metadata | |
DiagnosticReport-update | updates |
DiagnosticReport | R | Reflect updated status DiagnosticReport.status in the worklist |
DiagnosticReport-select | select |
Any | O | Process selected resources if applicable |
DiagnosticReport-close | report |
DiagnosticReport | R | Stop processing the study associated to the report context |
SyncError | operationoutcome |
OperationOutcome | O | Notify the user regarding the synchronization error, including the details of the error reported and the Subscriber that reported the error |
If the report context is resumed, then the Worklist Client shall be able to restore the application to a state associated to that report context prior to suspension. It is the responsibility of the implementation to determine what elements of application state are significant to the user to be restored when the application resumes the report context.
Note: The DiagnosticReport-open event does not explicitly indicate if the report context is new or resumed. See Subscriber Local Context and Local State for design considerations.
When the Worklist Client wants to publish content events into a reporting session, then it shall be grouped with a Content Creator to enable it to publish events using one or more FHIR resources. See Section 1:53.1.1.6 for details.
Note: The FHIR resources which the actor can publish as FHIRcast contents are documented in its CapabilityStatement.
The Evidence Creator consumes events in the reporting session and producing evidence data such as annotations, measurements, key image references, etc. for the patients’ studies. For example, an Evidence Creator may detect lung nodules and produce measurements and bounding boxes of the nodules detected.
The Evidence Creator may capture the evidence data in FHIR resource format (e.g., lung nodule measurements as FHIR Observation resource, image references and bounding box as FHIR ImagingSelection resource) and share them by publishing content sharing events back to the reporting session through the Hub.
Alternatively, the Evidence Creator may capture the evidence data in formats, such as DICOM SR, that are shared with other systems using methods outside of this profile (e.g., as Evidence Creator in the IHE AIR Profile). In this case, other synchronizing applications in the same reporting session may not be aware of the evidence data created by the Evidence Creator.
The Evidence Creator may be a standalone application such as an Specialty AI application, or it may be grouped with another actor such as Image Display.
When the Evidence Creator starts up, it shall obtain hub.url
and hub.topic
to join a reporting session.
Note that the actual application launch method is out of scope of this profile. See Application Launch Scenarios and Session Discovery for more details.
In Table 1:53.1.1.4.1-1 specifies behavior requirements for the Evidence Creator when it receives FHIRcast events.
The Evidence Creator shall support all Behaviors shown as “R” in Optionality. The Evidence Creator may support suggested behaviors (“O” in Optionality). For each Received Event in the table, ‘Context Key’ identifies the context in the Received Event, and ‘Resources’ specifies the FHIR resource used in the given context.
Table 1:53.1.1.4.1-1: Event Handling Requirements
Received Event | Context Key | Resource | Optionality | Behavior |
---|---|---|---|---|
DiagnosticReport-open | report |
DiagnosticReport | R | Maintain association of report context to associated patient and study |
patient |
Patient | R | Process the patient data | |
study |
ImagingStudy | R | Process the study data | |
DiagnosticReport-update | Any | Any | O | Update the report, patient or study record, or add/modify/delete received contents, if applicable. |
DiagnosticReport-select | Any | Any | O | Process the applicable selected resources |
DiagnosticReport-close | report |
DiagnosticReport | R | Stop display the study and stop sharing new content to the report context (See Note 1) |
SyncError | operationoutcome |
OperationOutcome | O | Notify the user regarding the synchronization error, including the details of the error reported and the Subscriber that reported the error |
Note 1: If the Evidence Creator is displaying the study associated to the report context, then it shall stop displaying the study. The Evidence Creator is not prohibited to continue processing the context and content according to its business logic. For example, capturing the results of its processing in a DICOM SR object.
If the report context is resumed, then the Evidence Creator shall be able to restore the application to a state associated to that report context prior to suspension. It is the responsibility of the implementation to determine what elements of application state are significant to the user to be restored when the application resumes the report context.
Note: The DiagnosticReport-open event does not explicitly indicate if the report context is new or resumed. See Subscriber Local Context and Local State for design considerations.
When the Evidence Creator wants to publish content events into a reporting session, then it shall be grouped with a Content Creator to enable it to publish events using one or more FHIR resources. See Section 1:53.1.1.6 for details.
Note: The FHIR resources which the actor can publish as FHIRcast contents are documented in its CapabilityStatement.
The Stateless Evidence Creator has the same requirements as the Evidence Creator, except that it is not required to detect if the received DiagnosticReport-open event is a new report context or a report context that is resumed, and it is not required to restore application state in case of resuming a report context (See Evidence Creator Event Handling Requirements for details).
The Content Creator creates and selects additional contents in report contexts of the reporting session which are the basis of synchronization and collaboration between the subscribing actors.
Note: This actor represents content creation / selection capabilities that may be present in implementation of other actors. As such, the Content Creator is required to be grouped with another actor. This actor cannot be claimed as a standalone actor.
For example, when an Image Display user clicks on the bounding box of a detected nodule, the grouped Content Creator publishes a selection event referencing the affected images and bounding boxes as an ImagingSelection resource, and referencing the corresponding measurements as an Observation resource. Upon receiving the event, a Report Creator might show those details in a side panel to the user. Finally the user issues a voice command to the Report Creator to inject a hyperlink, which is adding to the finding section.
The Content Creator shall support at least one of the following capabilities:
The Content Creator shall use the specified FHIR resource if it implements any of the capabilities listed in Table 1:53.1.1.6-1:
Table 1:53.1.1.6-1: FHIR Resources Used For Content Sharing Capability
Capability | FHIR Resource |
---|---|
Update report status | DiagnosticReport |
Add, update or remove comparison study used during reporting | DiagnosticReport |
Capture DICOM series or image references (including image or non-image objects such as GPSP, Structured Report, Segmentation, etc.) | ImagingSelection |
Capture 2D or 3D regions within an imaging study frame of reference (See Note) | ImagingSelection |
Capture measurements or textual annotations | Observation |
The Content Creator may use other resources for purposes other than those defined in this profile.
The Content Creator shall only publish DiagnosticReport-select events for user initiated selection.
When the grouped actor restores the application to a previous known state due to resuming a report context, if there are any contents known to be selected by the user prior to the suspension and the grouped actor is the originator of the corresponding DiagnosticReport-select event, then
The Watcher listens to events in a session and performs actions according to it business logic. The specific actions are out of scope of this profile.
For example, the Watcher consumes the initiation and termination of report contexts and calculates the turnaround time for different types of studies in different departments. Another example is a Watcher that monitors how often an Evidence Creator publishes content sharing events and correlates how effective an AI application is with respect to the turnaround time by comparing the time before and after the Evidence Creator is deployed.
When the Watcher starts up, it shall obtain hub.url
and hub.topic
to join a reporting session.
Note that the actual application launch method is out of scope of this profile. See Application Launch Scenarios and Session Discovery for more details.
Table 1:53.1.1.7.1-1 specifies behavior requirements for the Watcher when it receives FHIRcast events.
The Watcher shall support all Behaviors shown as “R” in Optionality. The Watcher may support suggested behaviors (“O” in Optionality). For each Received Event in the table, ‘Context Key’ identifies the context in the Received Event, and ‘Resources’ specifies the FHIR resource used in the given context.
Table 1:53.1.1.7.1-1: Event Handling Requirements
Received Event | Context Key | Resource | Optionality | Behavior |
---|---|---|---|---|
DiagnosticReport-open | report |
DiagnosticReport | R | Maintain association of report context to associated patient and study |
patient |
Patient | R | Process according to business logic | |
study |
ImagingStudy | R | Process according to business logic | |
DiagnosticReport-update | Any | Any | O | Update the report, patient or study record, or add/modify/delete received contents, if applicable. |
DiagnosticReport-select | Any | Any | O | Process the applicable selected resources |
DiagnosticReport-close | report |
DiagnosticReport | R | Process according to business logic |
SyncError | operationoutcome |
OperationOutcome | O | Process the synchronization error, including the details of the error reported and the Subscriber that reported the error |
When the Watcher wants to publish content events into a reporting session, then it shall be grouped with a Content Creator to enable it to publish events using one or more FHIR resources. See Section 1:53.1.1.6 for details.
Note: The FHIR resources which the actor can publish as FHIRcast contents are documented in its CapabilityStatement.
The Hub manages event flows between Subscribers in reporting sessions and maintaining the current context.
The Hub authorizes the following:
Note: This profile does not mandate a specific authorization mechanism. See Cross Profile Considerations for recommendations.
The Hub shall support content sharing.
The Hub shall monitor the established websocket connections. If it detects a websocket connection issue with a Subscriber, then the Hub shall:
The Hub shall be able to process all valid events conforming to the FHIRcast Event Format received using FHIRcast Request Context Change requests.
Note: This implies that the Hub cannot only process events defined in this profile. The Hub is required to support other valid events regardless of whether they are defined in the FHIRcast Event Catalog. For example, Subscribers in a reporting session are permitted to send Request Context Change requests with events (e.g.,
HeartBeat
,ImagingStudy-*
, etc.) beyond those explicitly defined in this profile.
For all received events, the Hub shall support the following core behaviors:
*-open
and *-close
events) (see Request Context Change)*-update
events) (see Content Sharing)*-update
and *-select
events)*-update
, *-select
or *-close
events for a context that is not opened, then it shall return 409
Conflict response.Additional profile requirements for specific events are defined in the corresponding transactions.
Options that may be selected for each actor in this implementation guide, are listed in Table 1:53.2-1 below. Dependencies between options, when applicable, are specified in notes.
Table 1:53.2-1: IRA - Actors and Options
Actor | Option Name | Reference |
---|---|---|
Image Display | No options defined | - |
Report Creator | No options defined | - |
Worklist Client | No options defined | - |
Evidence Creator | No options defined | - |
Stateless Evidence Creator | No options defined | - |
Content Creator | No options defined | – |
Watcher | No options defined | - |
Hub | No options defined | – |
An actor from this profile (Column 1) shall implement all of the required transactions and/or content modules in this profile in addition to all of the requirements for the grouped actor (Column 3).
In some cases, required groupings are defined as at least one of an enumerated set of possible actors; this is designated by merging column one into a single cell spanning multiple potential grouped actors. Notes are used to highlight this situation.
Section 1:53.5 describes some optional groupings that may be of interest for security considerations and Section 1:52.6 describes some optional groupings in other related profiles.
Table 1:53.3-1: IRA Required Actor Groupings
IRA Actor | Grouping Condition | Actor(s) to be grouped with | Reference |
---|---|---|---|
Image Display | – | None | – |
Report Creator | – | IRA / Content Creator | RAD TF-1: 53.1.1.2 |
Worklist Client | – | None | – |
Evidence Creator | – | None | – |
Stateless Evidence Creator | – | None | – |
Content Creator (Note 1) | – | IRA / Image Display IRA / Report Creator IRA / Worklist Client IRA / Evidence Creator IRA / Stateless Evidence Creator |
RAD TF-1: 53.1.1 |
Watcher | – | None | – |
Hub | – | None | – |
Note 1: The Content Creator shall be grouped with at least one of the actors in Column 3.
At its heart, this profile synchronizes a group of applications using a Publish and Subscribe model as implemented by FHIRcast which in turn is an implementation of WebSub.
The following are some key concepts:
Subscribers
that register with and communicate with a Hub
Hub
only communicates with authenticated Subscribers
Subscribers
do not communicate with other Subscribers
directlySubscribers
generate data that should be made available to other applications, or perform actions of which other applications should be aware, they publish it by sending an event request with the relevant details to the HubSubscriber
that may launch other applications, providing them with the address of the Hub
and the topic ID
so they can join the same session
Hub
forwards accepted event requests from a Subscriber
to other Subscribers
subscribed to that type of eventSubscribers
can configure their subscription to limit what types of events the Hub
forwards to themSubscribers
react to events from the Hub
based on their internal business logicSubscribers
to be aware of what other Subscribers
(if any) are receiving an event they requested to be forwarded by the Hub
, nor how other Subscribers
react to the eventHub
maintains the current state of content (if any) associated with all open contextsSubscribers
can request the current context and associated contents from the Hub
Hub
can simultaneously manage multiple groups of Subscribers
and their associated data in different sessions
session
is identified by a unique “topic ID”The terminology used in FHIRcast and adopted in this profile can be found in the FHIRcast Glossary.
Figure 1:53.4.1.2-1 is a representation of the data model.
Figure 1:53.4.1.2-1: FHIRcast Concept Data Model
Figure 1:53.4.1.2-1: FHIRcast Concept Data Model
Figure 1:53.4.1.2-2 is a representation of the interaction model.
Figure 1:53.4.1.2-2: IRA Concept Interaction Model
A Session
is an abstract concept representing a shared workspace, such as a user’s login session across multiple applications or a shared view of one application distributed to multiple users. A session results from a user logging into an application and can encompass one or more workflows.
For instance, a reporting session is a shared workspace across multiple applications to communicate activities of a user, such as initiating a new report context when opening a study for reporting. These applications as Subscribers
share events using the Hub
. As long as there are Subscribers
associated to a Session
, the Session
stays open. Therefore a Session
has a long duration.
A Context
is a FHIR resource associated with a Session
which indicates a subject on which applications should synchronize as appropriate to their functionality. As soon as the subject is complete, the corresponding Context
can be closed. Therefore a Context
has a limited duration within a Session
.
Communication patterns between two systems fall in two general categories: Events
and Commands
.
Events
represent facts that have happened. For example, DiagnosticReport-open
represents an event that an application has opened a study for reporting. Note that an event has an initiator but no target recipient(s). It is the responsibility of any applications that are interested in such events to subscribe to them. Any applications subscribed to the event will receive the event and the application can determine how to process the event. The application that is producing the event is not aware of the actions being performed by the consuming applications, unless these consuming applications in turn publishes additional events.
In this profile, the messages that a Subscriber
sends to the Hub
represents an Event
. Each event captures what has happened, and there is no explicit recipient(s) specified.
On the other hand, Commands
represent intention. In addition to an initiator, Commands
have specific target recipient(s). For example, Send-Study represents an intention to send a study. The application that sends the commands often has direct knowledge of which applications should execute the commands, or delegate to a proxy service that has the knowledge.
Note: Some implementations may define commands using Extensions or custom events with explicit recipient(s). These are out of scope of this profile.
A starting application is a subscriber that initiates a context change request. From the starting application perspective, it is desirable for all subscribers to be synchronized as soon as possible. On the other hand, FHIRcast is a network protocol which incurs a non-trivial cost to send each event. Therefore, a starting application should take into account when an action is considered to be complete or stable, and hence ready to be captured and communicated as events.
For example, when a user is actively making measurements or annotations, instead of capturing every change a user makes (e.g., incremental changes in size or location of a shape) as an event which can result in many intermittent and partial events, a starting application may use specific triggers (e.g., when a user saves the changes) or an idle time threshold to detect when the user completed making the changes. The application then creates the corresponding event(s) to capture the result.
On the other hand, this profile is designed to communicate in-progress data as soon as possible. Therefore it is not desirable for the starting application to wait too long. For example, if the starting application supports exporting measurements and annotations as DICOM SR or other DICOM objects, it is not appropriate to wait until the DICOM objects are created before sending the corresponding event.
A reasonable approach could be for an application to acquire a complete measurement and perhaps some measurement characteristics, then send an event request containing this information to the Hub.
This profile does not mandate any specific implementation design regarding when a starting application should capture the result of an action as an event. The intention is that the starting application will send an event as soon as feasible so that all subscribers in a reporting session can be synchronized and provide a good user experience.
Event Awareness
means a synchronizing application, upon receiving an event from the Hub
, has the knowledge that an event has happened.
Event Consumption
means a synchronizing application, upon receiving an event from the Hub
, reacts to the event and performs some actions according to its business logic.
This means from the content sharing application perspective, in order to synchronize the context with other applications, it may be desirable for a starting application to publish events frequently so that other subscribers can be aware of the same context as in the content sharing application.
On the other hand, from the subscribing application perspective, it is up to its business logic to determine how to react to the received event. This business logic may be automatic or require additional user input.
For example, when the user goes through the study images in Image Display (a content sharing application), for each nodule that the user identified (e.g., 1, 2, …, 9, 10), the Image Display publishes a corresponding event. In the Report Creator (a synchronizing application), for each event received, it keeps track of the nodule in its nodule tracking bookmark. Once the user finished reviewing the full study, the user uses the nodule tracking bookmark in the Report Creator and selects the top 3 (e.g., 2, 5, 9) to include in the final report. Note that since the Report Creator is aware of all the nodules observed by synchronizing the context with the Image Display, selecting a subset of the nodules to be included in the final report (i.e., event consumption) is an operation internal to the Report Creator.
FHIRcast uses FHIR resources to capture the context and content in an event. These FHIR resources may be transient, meaning that they do not necessarily exist in any system, nor are they expected to be persisted by any system. Furthermore, even if an application decides to persist the FHIR resource(s), it is not required to use the same resource ID in the event as the ID of the persisted resource. The application can generate new IDs instead. See Content Sharing for details.
The DiagnosticReport-open
event includes both the report
anchor context and associated contexts patient
and study
. Subsequent event(s) for this anchor context will only provide the report
context. Therefore, it is up to the Subscriber to record internally the patient
and study
contexts associated with the report
anchor context if that information is relevant to its business logic.
Occasionally a report context may be suspended, meaning that a starting application opens a subsequent report context without closing an initial report context. For example, a radiologist needs to suspend a report on a study in order to review an urgent study.
The Hub
switches the Current Context
to the urgent study being opened. The Hub
distributes the open event to all subscribers to keep them synchronized. The initial report context is still maintained by the Hub
since it is not closed, but it is suspended (i.e., not the Current Context
).
When the user finishes reviewing the urgent study, the report context of the urgent study is closed and all subscribers receive the close event. The Hub
sets the Current Context
to empty after closing the Current Context
.
The starting application sends a new open event for the suspended report context to make it the Current Context
. All subscribers receive the open event and resume to the suspended report context. Alternatively the starting application could choose to open any other report context as appropriate.
See Use Case #3 for more details.
Local context
and local state
refers to the information specific to each Subscriber that it maintains locally for each report context in the session that it participates in. When resuming to a previous context, this information, if present, would enable the subscribing application to restore to the same state associated to the report context as before the suspension.
Local context
refers to the Subscriber’s view / copy of the shared context maintained in the Hub.
Local state
refers to information related to a given context that is not replicated into the Hub This local state
may keep track of application specific information, such as
Upon receiving events from the Hub
, a Subscriber maintains its local context
according to its need. i.e., the Subscriber is not to maintained a full copy of the context that is in the Hub, since some parts of the context may not be relevant to the Subscriber activities.
It is up to the Subscriber to decide on implementation details, such as:
The Hub can be a standalone application or embedded within another application (e.g., the Image Manager, Report Creator and Worklist Client are grouped with the Hub independently). As a result, which Hub to use for the reporting session needs to be configurable during deployment.
The Hub can be deployed on premises or in the cloud. The other actors may or may not be deployed in the same location as the Hub. Since this profile is aimed at providing streamline user experience for all integrated applications, the effectiveness of this profile depends on timely communications with the Hub, whether it is the context change request, or the subsequent event distribution. Therefore it is important to have a reliable low latency network connection between applications and the Hub, taking into account all the network appliances in between (e.g., firewall, reverse proxy, load balancer, etc.).
When a user selects some content in an application, for example, an image frame with an observed nodule in the Image Display, this can trigger the application to send a DiagnosticReport-select event referencing the corresponding selected content (e.g., an image frame). This event enables other applications to trigger corresponding synchronization logic based on the selected content. There are several different behavioral patterns a receiving application can implement:
These behavioral patterns can be bidirectional. For example, an Evidence Creator selects a nodule in its analysis, which triggers the Evidence Creator to sends a DiagnosicReport-select event referencing this nodule and the corresponding image frame. Upon receiving this event, the Image Display displays the referenced image frame along with other annotations automatically.
It is important to note the following characteristics of the FHIRcast *-select
events:
As a result, selection is intended for user initiated synchronization. It is not suitable for automatic background navigation synchronization due to potential race condition.
Furthermore, due to the implicit unselect semantics, if multiple items are intended to be selected and processed together, then it is necessary to select all the items first and then send a single DiagnosticReport-select
event with all selected items, rather than sending multiple select events, each with a single item.
In a basic reporting session, a user uses two actors, the Image Display and the Report Creator, to complete reporting on a study.
The Basic Reporting Use Case is intended to capture the common reporting activities happened during a reporting session. The Image Display handles all user needs for displaying the study and the Report Creator handles all user needs for report creation.
Note: Figure 1:53.4.2.1.2-1 shows a high level workflow and highlights the user interaction with the two actors involved. This use case is broken down into multiple steps. The steps shown in the diagram are not actual transactions. The interactions between the Image Display and Report Creator during a reporting session are omitted to highlight the user interactions more clearly. The hyperlinks provided in the diagram link to the subsections that describe the corresponding steps with actual transactions in details. Furthermore, the Examples tab contains sample events following this use case.
In this use case,
Note: In more complex scenarios, a separate Worklist Client can be used to drive the Image Display and Report Creator, while the Image Display can launch a separate Evidence Creator on demand to perform advanced visualization and measurements. See Use Case 2 for an example.
Figure 1:53.4.2.1.2-1: Basic Reporting Flow in IRA Profile
When a radiologist starts reporting, the Image Display, as a Starting Application, starts a reporting session.
Note that there is no explicit creation of a session. If the Hub receives a session (i.e., topic ID) that does not already exist, then the Hub will automatically create the session and add the subscriber (i.e., Image Display) to the session.
The Image Display subscribes to events so that it can:
Once the Image Display completes its subscription, it launches the Report Creator. The Report Creator, as a Synchronizing Application, can follow the context and content events automatically.
Note that launching the Report Creator (or any Synchronizing Application) by the Image Display (or any Starting Application) may be implemented in different ways. For example, the Synchronizing Application can be started and terminated, or it can be put in focus and minimized when not needed but kept running in the background for efficiency, or any combination thereof.
When launched, the first thing that the Report Creator does as a Synchronizing Application is to subscribe to the reporting session. The information about the Hub and the session is provided by the Image Display during launch.
Furthermore, the Report Creator queries the Hub to get the current context to ensure it has the latest context and content. Since the reporting session has just begun, and the Image Display has not yet opened any report context, the result of the query will be empty.
Figure 1:53.4.2.1.2.1-1: Open Reporting Session Flow in IRA Profile
When the radiologist selects a study in the worklist, the Image Display, as a Starting Application, opens a new report context. Once the Hub accepts the event, it broadcasts the event to all Subscribers.
The Report Creator, as a Synchronizing Application, receives the event and opens the corresponding procedure for the study.
Furthermore, the event has a version ID. For the Image Display as a Starting Application, including the version ID when submitting the next event allows the Hub to ensure proper event sequence. For the Report Creator as a Synchronizing Application, keeping track of the version ID enables it to check if it missed any prior events. Event sequencing is important for content sharing because all updates and selects are expected to be applied in the same sequence as they are emitted by one or more Content Creators (See FHIRcast event-based content sharing for details).
Figure 1:53.4.2.1.2.2-1: Open Study in Context Flow in IRA Profile
Note: Amending a report uses the same workflow as in Step 2. A new report context is opened with the same patient and study context as the original report.
Having opened the new report context, it will be up to the Report Creator to determine whether the original report is being amended or a new report is being added to the study. A new report context is used in either case because the report context associated with the original report was transient and is no longer available for use.
It is possible that actors such as the Report Creator may choose to populate content related to the original report back into the new report context, e.g., to facilitate further editing.
Sometimes the radiologist may annotate the images with markups and measurements. When this happens, the Image Display, grouped with the Content Creator, updates the report context at the Hub with new content using Update Report Content [RAD-150]. The Hub broadcasts the event to all Synchronizing Applications.
When the Report Creator receives and accepts the event, it can apply the updates according to its business logic. For example, it may automatically create a hyperlink in the report, or keep track of the content in a panel for the user to perform other activities later.
Figure 1:53.4.2.1.2.3-1: Add Content Flow in IRA Profile
Occasionally it is desirable to trigger activities on Subscribers based on user navigation. With FHIRcast, this can be achieved using the content selection events.
Content selection can be used in various ways:
Sometimes the radiologist selects certain elements (e.g., images, annotation, specific measurements, etc.) in the Image Display. When this happens, the Image Display, grouped with the Content Creator, sends a event to the Hub using Select Report Content [RAD-151] indicating what contents have been selected. The Hub broadcasts the event to all Subscribers.
When the Report Creator receives the event, it can apply the selection according to its business logic. For example, it can highlight to the user what is selected so that the user can perform an appropriate action. In this example, the radiologist uses a voice command to insert a hyperlink in the report. The Report Creator uses the selected content to generate the hyperlink.
Generally, selecting a content means putting the content in ‘focus’. Note that this profile is agnostic about the user interface implementation of ‘focus’, e.g., selection may result in the content being highlighted in the user interface, or it may result in the selected content being flagged in the backend service. Specific behavior depends on the implementation.
Figure 1:53.4.2.1.2.4-1: Select Content Flow in IRA Profile
The radiologist completes dictation and signs off the report on the Report Creator. The Report Creator sends an update event notifying about the report status change (e.g., draft, preliminary, final, amended, etc.) The Image Display updates the status of the study in its worklist.
Note: The report status is a critical attribute in a reporting workflow. Usually the Report Creator is the only actor that updates the report status. Alternative workflows where other content creators modify the report status need to be approached carefully.
In this diagram, the Report Creator closes the report context after it sends the report status update event. Recall that this report context was opened by the Image Display.
Note: Alternatively, the Image Display can close the report context upon successfully processing the report status update event. Both scenarios are valid and which method is used is determined by site configuration of the Image Display and Report Creator.
The Hub sends the update event and the termination event to all Subscribers. Once the Hub successfully processed the termination event, it disallows any further interaction of that closed report context.
Upon receiving the termination event, the Image Display removes the study from its worklist.
Note: The Image Display may have different behavior when processing the termination event depending on the report status of the study. For example, if the status is draft completed, then the Image Display may set the study in a separate Draft worklist for later follow up.
The Report Creator may have some internal mechanism to keep the report for a grace period after the report is signed off and before sending the report to other recipients. The Report Creator persists the report according to its business logic.
Figure 1:53.4.2.1.2.5-1: Sign-off Report Flow in IRA Profile
Note 1: It is important to note that in common cases, Report Creator is the actor to close the report context. Occasionally, Image Display or Worklist Client can close the report context. This should be carefully considered and ensure all actors are configured appropriately. See Use Case #3: Suspend and Resume Flow for example.
Note 2: The Report Creator, if it receives the report close context, it may save the content and re-open the context if necessary.
The flow above shows the simple case with a sequential switching of report context. In this case, a report context is opened and then closed before the next report context is opened.
In practice, the radiologist is likely to continue with the next study in the worklist without any awareness of the events happening behind the scene. If the initiating Starting Application and terminating Starting Application are different as in this example, then when the radiologist moves to the next study, it is possible that the Image Display opens a new report context before the Image Display receives the Close Report Context [RAD-149] event of the reported study.
Such rapid context switching is supported by this profile. The Hub and each Subscriber maintains multiple open contexts simultaneously. As long as the context is not closed, it still exists. Each event is associated to a particular anchor context. Therefore a Subscriber can reliably match an event to its internal state according to the context ID of the anchor context in the event.
The following diagram shows what can happen in case of rapid switching of the report context.
Figure 1:53.4.2.1.2.5-2: Rapid Context Switching Flow in IRA Profile
Eventually, the radiologist completes all the studies in the worklist and closes the Report Creator. The Report Creator unsubscribes to the reporting session so that it will no longer receive any future events.
The Hub closes the connection to the Report Creator. Note that if there are other Subscribers on the same session, those applications are not affected and will continue to receive notification on the session.
Figure 1:53.4.2.1.2.6-1: Close Reporting Session Flow in IRA Profile
This reporting workflow is more complex because there are 5 actors collaborating closely:
In this diagram, a single Evidence Creator performs multiple functions. Alternatively, there can be multiple Evidence Creators, each performing a specific function.
In this use case,
Note that at Step 7, since all the necessary applications have already been started, there is no need to relaunch the applications and re-establish their subscriptions. However, it may be desirable for some specialty applications that are not in common use to be terminated and restarted if their capabilities are later required.
Figure 1:53.4.2.2-1: Complex Reporting in IRA Profile
Occasionally a radiologist is interrupted while reporting on a study. She needs to open a different study (e.g., for consultation purpose) before the study that is currently in progress is ready for sign-off.
This profile permits a new report context to be opened before the previous report context is closed. The Hub can maintain multiple anchor contexts simultaneously within a reporting session. The current context is the most recent anchor context that has been opened but not yet closed. This current context enables all Synchronizing Applications to be synchronized and working on the same context all the time.
Once the interrupting study is complete, the Report Creator closes the report context of the interrupting study. The Hub removes the context of the interrupting study and sets the current context to empty.
Note: In some situations, the user can complete the work required for the interrupting study without using the Report Creator. In these occasions, the Image Display (or Worklist Client, not shown in the diagram) is permitted to close the report context.
If the Report Creator business logic determines that the ‘close’ event sent by the Image Display was premature and the Report Creator still needed to do some work, then the Report Creator may ‘re-open’ the report context, synchronize and close the report context.
The Image Display, as the Starting Application in this example, resumes the report context back to the previously opened study. It restores its application state associated to the report context prior to suspension and then re-opens the same report context to the Hub. Note that all associated context and contents remain in the Hub.
As a result, all subscribers will resume to the same report context. If an application has business logic to resume something else rather than the previous report context, that application should send a new Open Report Context [RAD-148] event to set the new report context accordingly.
Figure 1:53.4.2.3-1: Suspend and Resume Flow in IRA Profile
Error handling is driven by two factors:
Figure 1:53.4.2.4-1: Error Handling Flow in IRA Profile
Figure 1:53.4.2.4-2 shows two sample use cases for how error handling can be used in reporting.
Figure 1:53.4.2.4-2: Error Handling Example Flows in IRA Profile
A radiologist wants to review a draft report created by a resident. She opens the draft report in the Report Creator. The Report Creator opens a new report context for the draft report, including the corresponding patient and study context. The Image Display receives the event distributed by the Hub and opens the study in context. The radiologist reviews the study associated to the report using the Image Display.
Later a radiologist selects a nodule measurement on the report. The Report Creator sends a content selection event for the observation. The Image Display receives the event and display the observation on the study.
In case a reporting session has not been started when the radiologist reviews the draft report, the Report Creator can start a new reporting session and launch the Image Display to join it.
Figure 1:53.4.2.5-1: Overread Draft Report Flows in IRA Profile
This profile strongly recommends all actors to consider the FHIRcast Security Considerations.
This profile strongly recommends all actors group with an ITI ATNA Secure Application or Secure Node Actor using the Radiology Audit Trail Option.
The ATNA Profile requires actors to implement:
Furthermore, for the HTTP-based transactions, this profile strongly recommends the use of ITI Internet User Authorization (IUA) Profile to ensure that communications are only allowed for authenticated and authorized users and/or systems.
Additionally, although this profile does not specify any particular method for an application to launch other synchronizing applications, this profile strongly recommends the use of SMART App Launch for application launching. In addition to the use of OAuth2 as specified in the ITI IUA Profile, FHIRcast extends SMART App Launch with FHIRcast specific OAuth2 scopes that can be used by the Hub to validate if the Subscriber is authorized to invoke the transaction. Furthermore, the authorization server returns the FHIRcast SMART launch parameters which can be used by the synchronizing applications to join the session. See Section 4.1.1 SMART on FHIR for more details.
The events as defined in this profile contain personal demographic information and clinical information. It is appropriate for products implementing the this profile to include appropriate PHI controls. Specifying such mechanisms and features is outside the scope of this profile.
Note: Once the websocket connections are established, the Hub will distribute events to Subscribers according to their subscription. If some contents are not appropriate for certain Subscribers (e.g., a Subscriber should not receive any PHI), then separate sessions may be considered.
Table 1:53.6-1 describes various actors in various other profiles that might be useful to group with IRA Profile actors.
Table 1:53.6-1: IRA - Optional Actor Groupings
IRA Actor | Might group with | Potential Purpose |
---|---|---|
Report Creator | IMR Report Creator | To produce multi-media interactive report using the context and content (e.g., image references, measurements, etc.) received in a reporting session. To share report contents (e.g., findings, impressions) with other Subscribers in a reporting session. |
IUA Authorization Client | To provide authorization claims when invoking a request with another actor. | |
IMR Report Creator | To receive image references and measurements input from Image Display for the interactive hyperlinks. | |
Image Display | SWF.b Image Display | To display patients' studies and share context and content with other synchronized applications |
IUA Authorization Client | To provide authorization claims when invoking a request with another actor. | |
IMR Image Display | To enhance the interactivity with the Report Creator after the Image Display is launched. | |
Worklist Client | IUA Authorization Client | To provide authorization claims when invoking a request with another actor. |
Evidence Creator | SWF.b Evidence Creator | To provide measurements and other evidence data and share the content with other synchronized applications. |
IUA Authorization Client | To provide authorization claims when invoking a request with another actor. | |
AIW-I Task Performer | To provide an additional method to share the output with other synchronizing applications in a reporting session. | |
AIR Evidence Creator | To support creating the various AI results. | |
Resumable Evidence Creator | SWF.b Evidence Creator | To provide measurements and other evidence data and share the content with other synchronized applications. |
IUA Authorization Client | To provide authorization claims when invoking a request with another actor. | |
AIW-I Task Performer | To provide an additional method to share the output with other synchronizing applications in a reporting session. | |
AIR Evidence Creator | To support creating the various AI results. | |
Watcher | IUA Authorization Client | To provide authorization claims when invoking a request with another actor. |
AIW-I Watcher | To watch an additional infrastructure for events. | |
Hub | IUA Resource Server | To enforce only authorized access to the resources stored in the repository. |