Events
The FHIR Gateway emits events for all operations. The events are emitted using the EventDispatcher.
Develoment Use Only
This is a development feature and may change in future releases.
Event System
The FHIR Gateway uses the EventDispatcher to emit events.
Event Types
ehr.genericfhir.readfhir.searchfhir.updatefhir.deletefhir.createcds.patient.viewcds.encounter.dischargecds.order.signcds.order.selectnotereader.sign.notenotereader.process.note
Automatic Events
The FHIR Gateway automatically emits events for all operations:
from healthchain.gateway.events.dispatcher import local_handler
# Listen for FHIR read events
@local_handler.register(event_name="fhir.read")
async def audit_fhir_access(event):
event_name, payload = event
print(f"FHIR Read: {payload['resource_type']}/{payload['resource_id']} from {payload.get('source', 'unknown')}")
# Listen for patient-specific events
@local_handler.register(event_name="fhir.patient.*")
async def track_patient_access(event):
event_name, payload = event
operation = event_name.split('.')[-1] # read, create, update, delete
print(f"Patient {operation}: {payload['resource_id']}")
Custom Event Creation
# Configure custom event creation
def custom_event_creator(operation, resource_type, resource_id, resource=None, source=None):
"""Create custom events with additional metadata."""
return EHREvent(
event_type=EHREventType.FHIR_READ,
source_system=source or "unknown",
timestamp=datetime.now(),
payload={
"operation": operation,
"resource_type": resource_type,
"resource_id": resource_id,
"user_id": get_current_user_id(), # Your auth system
"session_id": get_session_id(),
"ip_address": get_client_ip()
},
metadata={
"compliance": "HIPAA",
"audit_required": True
}
)
# Apply to gateway
gateway.events.set_event_creator(custom_event_creator)