Imaging
Introduction #
The ImagingOrder, ImagingReview, ImagingReport, and ImagingReportCoding models represent imaging results.
Basic Usage #
To retrieve an ImagingOrder, ImagingReview, or ImagingReport by identifier, use the get method on the model manager:
from canvas_sdk.v1.data.imaging import ImagingOrder, ImagingReview, ImagingReport
imaging_order = ImagingOrder.objects.get(id="d2194110-5c9a-4842-8733-ef09ea5ead11")
imaging_review = ImagingReview.objects.get(id="c02c6b02-2581-46bf-819c-b5aacad2134c")
imaging_report = ImagingReport.objects.get(id="c1a5a35a-4ee2-4a0e-85c0-21739dc8c4a8")
If you have a patient object, the orders, reviews, and reports can be accessed with the imaging_orders, imaging_reviews, and imaging_results attributes, respectively on a Patient object:
from canvas_sdk.v1.data.patient import Patient
patient = Patient.objects.get(id="1eed3ea2a8d546a1b681a2a45de1d790")
orders = patient.imaging_orders.all()
reviews = patient.imaging_reviews.all()
reports = patient.imaging_results.all()
Filtering #
Imaging orders, reviews, and reports can be filtered by any attribute that exists on the models.
Filtering is done with the filter method on the ImagingOrder, ImagingReview, and ImagingReport model managers.
By attribute #
Specify an attribute with filter to filter by that attribute:
from canvas_sdk.v1.data.imaging import ImagingOrder, ImagingReview, ImagingReport
orders = ImagingOrder.objects.filter(status="completed")
reviews = ImagingReview.objects.filter(is_released_to_patient=False)
reports = ImagingReport.objects.filter(requires_signature=True)
By ValueSet #
See Value Sets for the library of built-in value sets and how to create your own.
ImagingReport supports ValueSet filtering through the find method on its model manager:
from canvas_sdk.v1.data.imaging import ImagingReport
from canvas_sdk.value_set.v2022.diagnostic_study import Mammography
reports = ImagingReport.objects.find(Mammography)
find joins through the report’s codings reverse relation and matches on (system, code) pairs from the value set, so a coding must match both the code system and the code to be included.
Committed records #
The committed method returns ImagingOrder and ImagingReview records that have been committed and not entered in error:
from canvas_sdk.v1.data.imaging import ImagingOrder, ImagingReview
committed_orders = ImagingOrder.objects.committed()
committed_reviews = ImagingReview.objects.committed()
Related Tasks #
To retrieve an Imaging Order’s related tasks, use the get_task_objects method on the ImagingOrder object.
from canvas_sdk.v1.data.imaging import ImagingOrder
imaging_order = ImagingOrder.objects.get(id="d2194110-5c9a-4842-8733-ef09ea5ead11")
tasks = imaging_order.get_task_objects().all()
The task_list computed property returns the same related tasks as a list[Task]:
from canvas_sdk.v1.data.imaging import ImagingOrder
imaging_order = ImagingOrder.objects.get(id="d2194110-5c9a-4842-8733-ef09ea5ead11")
tasks = imaging_order.task_list
Accessing the report file #
The document_url property on ImagingReport returns a presigned S3 URL for securely accessing the report’s file. The URL is valid for one hour and is regenerated on each access, so don’t persist or cache it. If the report has no associated file, document_url returns None.
from canvas_sdk.v1.data.imaging import ImagingReport
imaging_report = ImagingReport.objects.get(id="c1a5a35a-4ee2-4a0e-85c0-21739dc8c4a8")
# Presigned S3 URL to the report file, or None if the report has no file
url = imaging_report.document_url
Accessing the imaging order PDF #
The document_url property on ImagingOrder returns a presigned S3 URL for the order’s PDF, or None when the order has none. Canvas saves the PDF the first time the order is faxed. Printing the order doesn’t save it, so an order that has never been faxed has no file. The URL is valid for one hour, so generate it when you need it rather than storing it.
from canvas_sdk.v1.data.imaging import ImagingOrder
imaging_order = ImagingOrder.objects.get(id="d2194110-5c9a-4842-8733-ef09ea5ead11")
# Presigned S3 URL to the order PDF, or None if no PDF has been saved
url = imaging_order.document_url
Review assignment #
An imaging report is assigned for review to staff members or to a team. reviewers holds the assigned staff members, and team holds the assigned team, or None when no team is assigned.
from canvas_sdk.v1.data import ImagingReport, Staff
imaging_report = ImagingReport.objects.get(id="c1a5a35a-4ee2-4a0e-85c0-21739dc8c4a8")
# The staff members and the team the imaging report is assigned to
reviewers = imaging_report.reviewers.all()
team = imaging_report.team
# Every imaging report assigned to this staff member
staff = Staff.objects.get(id="4150cd20de8a470aa570a852859ac87e")
assigned = ImagingReport.objects.filter(reviewers__id=staff.id)
The document reference #
A report that has a file also has a DocumentReference pointing back at it — the record that carries the report’s document coding, category, and status, and that represents it in the FHIR API. document_url above is the direct route to the file itself; reach for the document reference when you want that surrounding metadata.
Resolve the ContentType at runtime from its stable app_label and model — never hardcode the per-environment dbid — and match object_id against the report’s dbid:
from canvas_sdk.v1.data import ContentType, DocumentReference, ImagingReport
imaging_report = ImagingReport.objects.get(id="c1a5a35a-4ee2-4a0e-85c0-21739dc8c4a8")
content_type = ContentType.objects.filter(app_label="api", model="imagingreport").first()
document = DocumentReference.objects.filter(
content_type=content_type, object_id=imaging_report.dbid
).first()
Attributes #
ImagingOrder #
| Field Name | Type |
|---|---|
| id | UUID |
| dbid | Integer |
| created | DateTime |
| modified | DateTime |
| originator | CanvasUser |
| committer | CanvasUser |
| entered_in_error | CanvasUser |
| patient | Patient |
| note | Note |
| assessment | Assessment |
| imaging | String |
| imaging_center | ServiceProvider |
| note_to_radiologist | String |
| internal_comment | String |
| status | OrderStatus |
| date_time_ordered | DateTime |
| ordering_provider | Staff |
| priority | String |
| delegated | Boolean |
| document | File (S3 key) |
| document_url | String (computed) |
| task_ids | String |
| results | ImagingReport[] |
| action_events | ImagingOrderActionEvent[] |
ImagingReview #
| Field Name | Type |
|---|---|
| id | UUID |
| dbid | Integer |
| created | DateTime |
| modified | DateTime |
| originator | CanvasUser |
| committer | CanvasUser |
| entered_in_error | CanvasUser |
| patient_communication_method | ReviewPatientCommunicationMethod |
| internal_comment | String |
| message_to_patient | String |
| is_released_to_patient | Boolean |
| status | ReviewStatus |
| note | Note |
| patient | Patient |
ImagingReport #
| Field Name | Type | Description |
|---|---|---|
| id | UUID | |
| dbid | Integer | |
| created | DateTime | |
| modified | DateTime | |
| review_mode | DocumentReviewMode | |
| junked | Boolean | |
| requires_signature | Boolean | |
| assigned_date | DateTime | |
| assigned_by | CanvasUser | |
| reviewers | Staff[] | |
| team | Team | |
| team_assigned_date | DateTime | |
| patient | Patient | |
| order | ImagingOrder | |
| source | ImagingReportSource | |
| name | String | |
| result_date | Date | |
| original_date | Date | |
| review | ImagingReview | |
| document_url | String (computed) | Presigned S3 URL, or None if the report has no file |
| codings | ImagingReportCoding[] |
ImagingReportCoding #
| Field Name | Type |
|---|---|
| dbid | Integer |
| created | DateTime |
| modified | DateTime |
| report | ImagingReport |
| system | String |
| version | String |
| code | String |
| display | String |
| user_selected | Boolean |
| value | String |
Enumeration types #
ImagingReportSource #
| Value | Label |
|---|---|
| RADIOLOGY_PATIENT | Radiology Report From Patient |
| VERBAL_PATIENT | Verbal Report From Patient |
| DIRECTLY_RADIOLOGY | Directly Radiology Report |