Profile: Subscription

This profile provides guidance for implementing FHIR R5 Subscription resource features & elements using extensions defined in FHIR R4.

It is used by a Subscriber to request subscription to a specific events and get notification whenever these events are created or updated by the Subscription Service.

In order to align with the use of FHIR R4 at OntarioHealth, Subscriptions are expected to conform to the Subscription profile defined by the [Subscriptions R5 Backport Implementation Guide] (https://hl7.org/fhir/uv/subscriptions-backport/StructureDefinition-backport-subscription.html).

Simplifier project page: R4/B Topic-Based Subscription

Derived from: FHIR R5 Backport

Formal Views of Profile Content

Description of Profiles, Differentials, Snapshots and how the different presentations work

Differential View

idΣ0..1string
metaΣ0..1Meta
implicitRulesΣ ?!0..1uri
language0..1codeBinding
text0..1Narrative
contained0..*Resource
extensionI0..*Extension
modifierExtension?! I0..*Extension
statusΣ ?!1..1codeBinding
contactΣ0..*ContactPoint
endΣ0..1instant
reasonΣ1..1string
id0..1string
filterCriteriaS I0..*Extension(string)
value0..1System.String
errorΣ0..1string
id0..1string
NotificationRetryPeriodI0..*Extension(Complex)
heartbeatPeriodI0..*Extension(unsignedInt)
timeoutI0..*Extension(unsignedInt)
maxCountI0..*Extension(positiveInt)
parameterI0..*Extension(string)
modifierExtensionΣ ?! I0..*Extension
id0..1string
customChannelTypeS I0..*Extension(Coding)
value0..1System.String
endpointΣ0..1url
id0..1string
contentS I1..1Extension(code)
value0..1System.String
headerΣ0..*string

Hybrid View

idΣ0..1string
metaΣ0..1Meta
implicitRulesΣ ?!0..1uri
language0..1codeBinding
text0..1Narrative
contained0..*Resource
extensionI0..*Extension
modifierExtension?! I0..*Extension
statusΣ ?!1..1codeBinding
contactΣ0..*ContactPoint
endΣ0..1instant
reasonΣ1..1string
id0..1string
filterCriteriaS I0..*Extension(string)
value0..1System.String
errorΣ0..1string
id0..1string
NotificationRetryPeriodI0..*Extension(Complex)
heartbeatPeriodI0..*Extension(unsignedInt)
timeoutI0..*Extension(unsignedInt)
maxCountI0..*Extension(positiveInt)
parameterI0..*Extension(string)
modifierExtensionΣ ?! I0..*Extension
id0..1string
customChannelTypeS I0..*Extension(Coding)
value0..1System.String
endpointΣ0..1url
id0..1string
contentS I1..1Extension(code)
value0..1System.String
headerΣ0..*string

Snapshot View

idΣ0..1string
metaΣ0..1Meta
implicitRulesΣ ?!0..1uri
language0..1codeBinding
text0..1Narrative
contained0..*Resource
extensionI0..*Extension
modifierExtension?! I0..*Extension
statusΣ ?!1..1codeBinding
contactΣ0..*ContactPoint
endΣ0..1instant
reasonΣ1..1string
id0..1string
filterCriteriaS I0..*Extension(string)
value0..1System.String
errorΣ0..1string
id0..1string
NotificationRetryPeriodI0..*Extension(Complex)
heartbeatPeriodI0..*Extension(unsignedInt)
timeoutI0..*Extension(unsignedInt)
maxCountI0..*Extension(positiveInt)
parameterI0..*Extension(string)
modifierExtensionΣ ?! I0..*Extension
id0..1string
customChannelTypeS I0..*Extension(Coding)
value0..1System.String
endpointΣ0..1url
id0..1string
contentS I1..1Extension(code)
value0..1System.String
headerΣ0..*string

Table View

Subscription..
Subscription.criteria..
Subscription.criteria.extensionExtension..
Subscription.channel..
Subscription.channel.extensionExtension..
Subscription.channel.extensionExtension..
Subscription.channel.extensionExtension..
Subscription.channel.extensionExtension..
Subscription.channel.extensionExtension..
Subscription.channel.type..
Subscription.channel.type.extensionExtension..
Subscription.channel.payload1..
Subscription.channel.payload.extension1..
Subscription.channel.payload.extensionExtension..
Subscription.channel.header..

JSON View

{
    "resourceType": "StructureDefinition",
    "url": "http://ontariohealth.ca/fhir/StructureDefinition/ca-on-oh-subscription",
    "name": "R4BackportedR5Subscription",
    "status": "draft",
    "fhirVersion": "4.0.1",
    "kind": "resource",
    "abstract": false,
    "type": "Subscription",
    "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Subscription",
    "derivation": "constraint",
    "differential": {
        "element":  [
            {
                "id": "Subscription.criteria",
                "path": "Subscription.criteria",
                "mustSupport": true
            },
            {
                "id": "Subscription.criteria.extension:filterCriteria",
                "path": "Subscription.criteria.extension",
                "sliceName": "filterCriteria",
                "type":  [
                    {
                        "code": "Extension",
                        "profile":  [
                            "http://ontariohealth.ca/fhir/StructureDefinition/ca-on-ext-SubscriptionfilterCriteria"
                        ]
                    }
                ],
                "mustSupport": true,
                "isModifier": false
            },
            {
                "id": "Subscription.channel.extension:NotificationRetryPeriod",
                "path": "Subscription.channel.extension",
                "sliceName": "NotificationRetryPeriod",
                "type":  [
                    {
                        "code": "Extension",
                        "profile":  [
                            "http://ontariohealth.ca/fhir/StructureDefinition/ca-on-ext-SubscriptionNotificationRetryPeriod"
                        ]
                    }
                ],
                "isModifier": false
            },
            {
                "id": "Subscription.channel.extension:heartbeatPeriod",
                "path": "Subscription.channel.extension",
                "sliceName": "heartbeatPeriod",
                "type":  [
                    {
                        "code": "Extension",
                        "profile":  [
                            "http://ontariohealth.ca/fhir/StructureDefinition/ca-on-ext-heartbeatPeriod"
                        ]
                    }
                ],
                "isModifier": false
            },
            {
                "id": "Subscription.channel.extension:timeout",
                "path": "Subscription.channel.extension",
                "sliceName": "timeout",
                "type":  [
                    {
                        "code": "Extension",
                        "profile":  [
                            "http://ontariohealth.ca/fhir/StructureDefinition/ca-on-ext-SubmissionTimeout"
                        ]
                    }
                ],
                "isModifier": false
            },
            {
                "id": "Subscription.channel.extension:maxCount",
                "path": "Subscription.channel.extension",
                "sliceName": "maxCount",
                "type":  [
                    {
                        "code": "Extension",
                        "profile":  [
                            "http://ontariohealth.ca/fhir/StructureDefinition/ca-on-ext-SubscriptionmaxCount"
                        ]
                    }
                ],
                "isModifier": false
            },
            {
                "id": "Subscription.channel.extension:parameter",
                "path": "Subscription.channel.extension",
                "sliceName": "parameter",
                "type":  [
                    {
                        "code": "Extension",
                        "profile":  [
                            "http://ontariohealth.ca/fhir/StructureDefinition/ca-on-ext-SubscriptionParameterExtension"
                        ]
                    }
                ],
                "isModifier": false
            },
            {
                "id": "Subscription.channel.type.extension:customChannelType",
                "path": "Subscription.channel.type.extension",
                "sliceName": "customChannelType",
                "definition": "Additional channel types not defined before FHIR R5",
                "type":  [
                    {
                        "code": "Extension",
                        "profile":  [
                            "https://ontariohealth.ca/fhir/StructureDefinition/ca-on-ext-SubcriptioncustomChannelType"
                        ]
                    }
                ],
                "mustSupport": true,
                "isModifier": false
            },
            {
                "id": "Subscription.channel.payload",
                "path": "Subscription.channel.payload",
                "min": 1
            },
            {
                "id": "Subscription.channel.payload.extension",
                "path": "Subscription.channel.payload.extension",
                "min": 1
            },
            {
                "id": "Subscription.channel.payload.extension:content",
                "path": "Subscription.channel.payload.extension",
                "sliceName": "content",
                "type":  [
                    {
                        "code": "Extension",
                        "profile":  [
                            "http://ontariohealth.ca/fhir/StructureDefinition/ca-on-ext-Subscriptioncontent"
                        ]
                    }
                ],
                "mustSupport": true
            },
            {
                "id": "Subscription.channel.header",
                "path": "Subscription.channel.header",
                "definition": "Use to specify additional information that will be included inside the notification payload when the notification is sent. Each entry consists of a key-value pair. This should support sending client certificates and client keys with validation to determine if it is the certificate itself or just the name.",
                "comment": "This can convey additional information to the recipient and/or meet security requirements; for example, support of multiple headers in the outgoing notifications for rest-hook type subscriptions."
            }
        ]
    }
}

Usage Notes

.status

  • The status of the subscription - requesters should set this value to "requested" when creating a subscrition request

.criteria

  • Used to capture the canonical URL of the SubscriptionTopic

.criteria.extension:filterCriteria

  • Used to apply filter criteria, similar to those used in search strings

.channel.extension:heartbeatPeriod

  • Interval in seconds to send 'heartbeat' notification

.channel.extension:timeout

  • Timeout in seconds to attempt notification delivery

.channel.extension:maxCount

  • Maximum number of triggering resources included in notification bundles

.channel.type

  • allowed values: rest-hook | websocket
  • for rest-hook, must supply bearer certificate for Mutual TLS or authorization header
  • user may use polling of notifications as a recovery mechanism via web socket channel

.channel.endpoint

  • URL endpoint used to deliver subscription notifications, notably URL for rest-hook and websocket.

.channel.type.extension:customeChannelType

  • not used in this implementation

.channel.payload

  • MIME type to be used to transmit the payload

.channel.payload.extension:content

  • used to convey the type of payload requested: empty (no resource content is sent in notifications), id-only (only resource ids are sent in notifications), or full-resource (entire resource is sent in notification)

.channel.header

  • used to specify additional information that will be included inside the notifaction payload when the notification is sent. Each entry consists of a key-value pair. This should support sending client certificates and client keys with validation to determine if it is the certificate itself or just the name.