Skip to content

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.generic
  • fhir.read
  • fhir.search
  • fhir.update
  • fhir.delete
  • fhir.create
  • cds.patient.view
  • cds.encounter.discharge
  • cds.order.sign
  • cds.order.select
  • notereader.sign.note
  • notereader.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)