ExternalEvent

Introduction #

The ExternalEvent and ExternalVisit models represent clinical events from external data sources such as ADT (Admission, Discharge, Transfer) feeds. These models enable tracking of patient encounters that occur outside of Canvas, such as hospital admissions, emergency room visits, or transfers between facilities.

An ExternalVisit groups related events for a single patient visit, while ExternalEvent represents individual events within that visit (e.g., admission, discharge, transfer).

Basic usage #

To get an external event by identifier, use the get method on the ExternalEvent model manager:

from canvas_sdk.v1.data.external_event import ExternalEvent

event = ExternalEvent.objects.get(id="b4f8c3a1-2d5e-4f6a-8b9c-1a2b3c4d5e6f")

To get an external visit:

from canvas_sdk.v1.data.external_event import ExternalVisit

visit = ExternalVisit.objects.get(id="a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d")

Accessing related models #

If you have an external event, you can access the associated visit and patient:

from canvas_sdk.v1.data.external_event import ExternalEvent

event = ExternalEvent.objects.get(id="b4f8c3a1-2d5e-4f6a-8b9c-1a2b3c4d5e6f")

# Access the parent visit
visit = event.external_visit

# Access the patient
patient = event.patient

If you have an external visit, you can access all events within that visit:

from canvas_sdk.v1.data.external_event import ExternalVisit

visit = ExternalVisit.objects.get(id="a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d")

# Get all events in this visit
events = visit.visit_events.all()

If you have a patient object, you can access their external events and visits:

from canvas_sdk.v1.data.patient import Patient

patient = Patient.objects.get(id="1eed3ea2a8d546a1b681a2a45de1d790")

# Get all external events for this patient
events = patient.patient_events.all()

# Get all external visits for this patient
visits = patient.patient_visits.all()

Filtering #

External events and visits can be filtered by any attribute that exists on the model.

By patient #

from canvas_sdk.v1.data.external_event import ExternalEvent, ExternalVisit

# Get all events for a specific patient
events = ExternalEvent.objects.filter(patient__id="1eed3ea2a8d546a1b681a2a45de1d790")

# Get all visits for a specific patient
visits = ExternalVisit.objects.filter(patient__id="1eed3ea2a8d546a1b681a2a45de1d790")

By event type #

from canvas_sdk.v1.data.external_event import ExternalEvent

# Get all admission events
admissions = ExternalEvent.objects.filter(event_type="ADT^A01")

# Get all discharge events
discharges = ExternalEvent.objects.filter(event_type="ADT^A03")

By cancelled status #

from canvas_sdk.v1.data.external_event import ExternalEvent

# Get all non-cancelled events
active_events = ExternalEvent.objects.filter(event_cancelation_datetime__isnull=True)

# Get all cancelled events
cancelled_events = ExternalEvent.objects.filter(event_cancelation_datetime__isnull=False)

By visit identifier #

from canvas_sdk.v1.data.external_event import ExternalVisit

visit = ExternalVisit.objects.get(visit_identifier="VISIT-12345")

By facility #

from canvas_sdk.v1.data.external_event import ExternalVisit

visits = ExternalVisit.objects.filter(facility_name="General Hospital")

Attributes #

ExternalEvent #

Field NameType
idUUID
dbidInteger
createdDateTime
modifiedDateTime
external_visitExternalVisit
patientPatient
message_control_idString
message_datetimeDateTime
event_typeString
event_datetimeDateTime
event_cancelation_datetimeDateTime
raw_messageString
cancelledBoolean (property)

ExternalVisit #

Field NameType
idUUID
dbidInteger
createdDateTime
modifiedDateTime
patientPatient
visit_identifierString
information_sourceString
facility_nameString

Common Event Types #

External events typically use HL7 ADT event types:

Event TypeDescription
ADT^A01Admit/Visit Notification
ADT^A02Transfer a Patient
ADT^A03Discharge/End Visit
ADT^A04Register a Patient
ADT^A08Update Patient Information
ADT^A11Cancel Admit/Visit Notification
ADT^A12Cancel Transfer
ADT^A13Cancel Discharge/End Visit
from canvas_sdk.v1.data.external_event import ExternalEvent
from logger import log

# Get recent events for a patient and log their types
patient_id = "1eed3ea2a8d546a1b681a2a45de1d790"
events = ExternalEvent.objects.filter(patient__id=patient_id).order_by("-event_datetime")[:10]

for event in events:
    status = "CANCELLED" if event.cancelled else "ACTIVE"
    log.info(f"Event: {event.event_type} at {event.event_datetime} [{status}]")