Subscription Adapter Implementation Guide
0.1.0 - ci-build
Publish Box goes here
Use the source adapter role when your organization supplies care data, but the source system does not implement FHIR Subscriptions.
In this role, the adapter sits between external subscribers and the internal source system.
subscriber party
-> FHIR Subscription request
source adapter
-> simple event/data calls
source system
The source adapter role is responsible for the FHIR Subscription side of the interaction:
The source system remains responsible for the clinical data:
The source system does not need a Subscription endpoint.
A source system needs only two capabilities for this prototype.
First, it must signal that an event exists:
POST /source-system/internal/events/heart-failure-daily-check
Content-Type: application/json
{
"patientId": "hf-patient-001",
"weightKg": 83.4,
"dyspnea": "toegenomen kortademigheid bij traplopen",
"status": "attention-needed"
}
Second, it must let the adapter retrieve the FHIR resources for a specific event. In the prototype this is modeled as simple FHIR search by notification-id:
GET /source-system/fhir/Observation?notification-id={notification-id}
GET /source-system/fhir/QuestionnaireResponse?notification-id={notification-id}
The source adapter then exposes the public notified-pull endpoint:
GET /source-adapter/fhir/$notify-pull?notification-id={notification-id}
Subscriptions are scoped by:
If the same endpoint asks for the same topic and patient again, the adapter returns the existing subscription instead of creating a duplicate. A different patient on the same topic creates a separate subscription.
This is important for operational safety. A retrying client should not accidentally multiply notifications.
When the source system signals an event, the adapter:
event-notification to each matching subscriber endpoint;related-query URL in the notification;The pull result is intentionally event-specific. It should not return the full patient history. In the heart-failure example it returns only:
Observation;QuestionnaireResponse.A production source adapter must add controls that are deliberately small or absent in this prototype: