Carequality Subscription Implementation Guide for Push Notifications
0.1.1 - CI Build

Carequality Subscription Implementation Guide for Push Notifications, published by Carequality. This guide is not an authorized publication; it is the continuous build for version 0.1.1 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/Carequality/CEQSubscription/ and changes regularly. See the Directory of published versions

Resource Profile: Carequality Subscription Profile ( Experimental )

Official URL: https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQsubscription Version: 0.1.1
Draft as of 2024-04-15 Realm: United States of America flag Computable Name: CEQsubscription

Extended Elements and Constraints Specific to the Carequality Use Case Carequality has defined a custom flow for a Subscription that removes the criteria use in favor of specific events defined as URIs. This adds requirements that the PatientID and an identifier be added to the resource. The identifier element is the endpoint id [Base]/fhir/Subscription/[identifier] A termination (Subscription.end) date is required and may not be more than 2 years from original date of subscription. A renewal may be submitted prior to expiry for a period of up to two additional years.

Usage:

Formal Views of Profile Content

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

This structure is derived from Subscription

NameFlagsCard.TypeDescription & Constraintsdoco
.. Subscription C 0..* Subscription Server push subscription criteria
CEQ-Param-Name: searchParamName shall be Patient or PatientID
... Slices for extension 2..* Extension Extension
Slice: Unordered, Open by value:url
... ceqPushExtension 1..1 (Complex) Carequality Subscription Required Elements
URL: https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension
.... extension:searchParamName 1..1 Extension Extension
..... value[x] 1..1 string Value of extension
.... extension:searchModifier 1..1 Extension Extension
..... value[x] 0..1 code Value of extension
Required Pattern: eq
... subscriptionTopic 1..* canonical() Backport R5 Subscription Topic Canonical
URL: https://sequoiaproject.org/fhir/push-r4/StructureDefinition/backport-topic-canonical
... criteria 1..1 string Simplified query string for Patient using ?id= or ?identifier=
... channel
.... type 1..1 code rest-hook | websocket | email | sms | message
Fixed Value: rest-hook

doco Documentation for this format

Constraints

IdGradePath(s)DetailsRequirements
CEQ-Param-NameerrorSubscriptionsearchParamName shall be Patient or PatientID
: extension('https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension').extension('searchParamName').value in ( 'Patient' | 'PatientID' )
NameFlagsCard.TypeDescription & Constraintsdoco
.. Subscription C 0..* Subscription Server push subscription criteria
CEQ-Param-Name: searchParamName shall be Patient or PatientID
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... Slices for extension 2..* Extension Extension
Slice: Unordered, Open by value:url
... ceqPushExtension 1..1 (Complex) Carequality Subscription Required Elements
URL: https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension
.... Slices for extension 5..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:subIdentifier S 1..1 Extension A Business Identifier
..... extension 0..0
..... url 1..1 uri "subIdentifier"
.... extension:searchParamName 1..1 Extension Extension
..... extension 0..0
..... url 1..1 uri "searchParamName"
..... value[x] 1..1 string Value of extension
.... extension:searchModifier 1..1 Extension Extension
..... extension 0..0
..... url 1..1 uri "searchModifier"
..... value[x] 0..1 code Value of extension
Required Pattern: eq
.... extension:endUser 1..1 Extension End recipient of the notification
..... extension 0..0
..... url 1..1 uri "endUser"
.... extension:CQOrganization 1..1 Extension Recipient CQ Directory Reference
..... extension 0..0
..... url 1..1 uri "CQOrganization"
.... url 1..1 uri "https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension"
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... status ?!Σ 1..1 code requested | active | error | off
Binding: SubscriptionStatus (required): The status of a subscription.

... end Σ 1..1 instant When to automatically delete the subscription
... reason Σ 1..1 string Description of why this subscription was created
... criteria Σ 1..1 string Simplified query string for Patient using ?id= or ?identifier=
... channel Σ 1..1 BackboneElement The channel on which to report matches to the criteria
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... type Σ 1..1 code rest-hook | websocket | email | sms | message
Binding: SubscriptionChannelType (required): The type of method used to execute a subscription.


Fixed Value: rest-hook

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet / CodeURI
Subscription.statusrequiredSubscriptionStatus
http://hl7.org/fhir/ValueSet/subscription-status|4.0.1
from the FHIR Standard
Subscription.channel.typerequiredFixed Value: rest-hook
http://hl7.org/fhir/ValueSet/subscription-channel-type|4.0.1
from the FHIR Standard

Constraints

IdGradePath(s)DetailsRequirements
CEQ-Param-NameerrorSubscriptionsearchParamName shall be Patient or PatientID
: extension('https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension').extension('searchParamName').value in ( 'Patient' | 'PatientID' )
dom-2errorSubscriptionIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorSubscriptionIf the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource
: contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4errorSubscriptionIf a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated
: contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5errorSubscriptionIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceSubscriptionA resource should have narrative for robust management
: text.`div`.exists()
ele-1error**ALL** elementsAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1error**ALL** extensionsMust have either extensions or value[x], not both
: extension.exists() != value.exists()
NameFlagsCard.TypeDescription & Constraintsdoco
.. Subscription C 0..* Subscription Server push subscription criteria
CEQ-Param-Name: searchParamName shall be Patient or PatientID
... id Σ 0..1 id Logical id of this artifact
... meta Σ 0..1 Meta Metadata about the resource
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... text 0..1 Narrative Text summary of the resource, for human interpretation
... contained 0..* Resource Contained, inline Resources
... Slices for extension 2..* Extension Extension
Slice: Unordered, Open by value:url
... ceqPushExtension 1..1 (Complex) Carequality Subscription Required Elements
URL: https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension
.... id 0..1 string Unique id for inter-element referencing
.... Slices for extension 5..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:subIdentifier S 1..1 Extension A Business Identifier
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..0
..... url 1..1 uri "subIdentifier"
..... value[x] 0..1 string Value of extension
.... extension:searchParamName 1..1 Extension Extension
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..0
..... url 1..1 uri "searchParamName"
..... value[x] 1..1 string Value of extension
.... extension:searchModifier 1..1 Extension Extension
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..0
..... url 1..1 uri "searchModifier"
..... value[x] 0..1 code Value of extension
Required Pattern: eq
.... extension:endUser 1..1 Extension End recipient of the notification
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..0
..... url 1..1 uri "endUser"
..... value[x] 0..1 string Value of extension
.... extension:CQOrganization 1..1 Extension Recipient CQ Directory Reference
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..0
..... url 1..1 uri "CQOrganization"
..... value[x] 0..1 string Value of extension
.... url 1..1 uri "https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension"
... subscriptionTopic 1..* canonical() Backport R5 Subscription Topic Canonical
URL: https://sequoiaproject.org/fhir/push-r4/StructureDefinition/backport-topic-canonical
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... status ?!Σ 1..1 code requested | active | error | off
Binding: SubscriptionStatus (required): The status of a subscription.

... contact Σ 0..* ContactPoint Contact details for source (e.g. troubleshooting)
... end Σ 1..1 instant When to automatically delete the subscription
... reason Σ 1..1 string Description of why this subscription was created
... criteria Σ 1..1 string Simplified query string for Patient using ?id= or ?identifier=
... error Σ 0..1 string Latest error note
... channel Σ 1..1 BackboneElement The channel on which to report matches to the criteria
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... type Σ 1..1 code rest-hook | websocket | email | sms | message
Binding: SubscriptionChannelType (required): The type of method used to execute a subscription.


Fixed Value: rest-hook
.... endpoint Σ 0..1 url Where the channel points to
.... payload Σ 0..1 code MIME type to send, or omit for no payload
Binding: Mime Types (required): The mime type of an attachment. Any valid mime type is allowed.

.... header Σ 0..* string Usage depends on the channel type

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet / CodeURI
Subscription.languagepreferredCommonLanguages
Additional Bindings Purpose
AllLanguages Max Binding
http://hl7.org/fhir/ValueSet/languages
from the FHIR Standard
Subscription.statusrequiredSubscriptionStatus
http://hl7.org/fhir/ValueSet/subscription-status|4.0.1
from the FHIR Standard
Subscription.channel.typerequiredFixed Value: rest-hook
http://hl7.org/fhir/ValueSet/subscription-channel-type|4.0.1
from the FHIR Standard
Subscription.channel.payloadrequiredMime Types (a valid code from urn:ietf:bcp:13)
http://hl7.org/fhir/ValueSet/mimetypes|4.0.1
from the FHIR Standard

Constraints

IdGradePath(s)DetailsRequirements
CEQ-Param-NameerrorSubscriptionsearchParamName shall be Patient or PatientID
: extension('https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension').extension('searchParamName').value in ( 'Patient' | 'PatientID' )
dom-2errorSubscriptionIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorSubscriptionIf the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource
: contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4errorSubscriptionIf a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated
: contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5errorSubscriptionIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceSubscriptionA resource should have narrative for robust management
: text.`div`.exists()
ele-1error**ALL** elementsAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1error**ALL** extensionsMust have either extensions or value[x], not both
: extension.exists() != value.exists()

This structure is derived from Subscription

Differential View

This structure is derived from Subscription

NameFlagsCard.TypeDescription & Constraintsdoco
.. Subscription C 0..* Subscription Server push subscription criteria
CEQ-Param-Name: searchParamName shall be Patient or PatientID
... Slices for extension 2..* Extension Extension
Slice: Unordered, Open by value:url
... ceqPushExtension 1..1 (Complex) Carequality Subscription Required Elements
URL: https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension
.... extension:searchParamName 1..1 Extension Extension
..... value[x] 1..1 string Value of extension
.... extension:searchModifier 1..1 Extension Extension
..... value[x] 0..1 code Value of extension
Required Pattern: eq
... subscriptionTopic 1..* canonical() Backport R5 Subscription Topic Canonical
URL: https://sequoiaproject.org/fhir/push-r4/StructureDefinition/backport-topic-canonical
... criteria 1..1 string Simplified query string for Patient using ?id= or ?identifier=
... channel
.... type 1..1 code rest-hook | websocket | email | sms | message
Fixed Value: rest-hook

doco Documentation for this format

Constraints

IdGradePath(s)DetailsRequirements
CEQ-Param-NameerrorSubscriptionsearchParamName shall be Patient or PatientID
: extension('https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension').extension('searchParamName').value in ( 'Patient' | 'PatientID' )

Key Elements View

NameFlagsCard.TypeDescription & Constraintsdoco
.. Subscription C 0..* Subscription Server push subscription criteria
CEQ-Param-Name: searchParamName shall be Patient or PatientID
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... Slices for extension 2..* Extension Extension
Slice: Unordered, Open by value:url
... ceqPushExtension 1..1 (Complex) Carequality Subscription Required Elements
URL: https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension
.... Slices for extension 5..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:subIdentifier S 1..1 Extension A Business Identifier
..... extension 0..0
..... url 1..1 uri "subIdentifier"
.... extension:searchParamName 1..1 Extension Extension
..... extension 0..0
..... url 1..1 uri "searchParamName"
..... value[x] 1..1 string Value of extension
.... extension:searchModifier 1..1 Extension Extension
..... extension 0..0
..... url 1..1 uri "searchModifier"
..... value[x] 0..1 code Value of extension
Required Pattern: eq
.... extension:endUser 1..1 Extension End recipient of the notification
..... extension 0..0
..... url 1..1 uri "endUser"
.... extension:CQOrganization 1..1 Extension Recipient CQ Directory Reference
..... extension 0..0
..... url 1..1 uri "CQOrganization"
.... url 1..1 uri "https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension"
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... status ?!Σ 1..1 code requested | active | error | off
Binding: SubscriptionStatus (required): The status of a subscription.

... end Σ 1..1 instant When to automatically delete the subscription
... reason Σ 1..1 string Description of why this subscription was created
... criteria Σ 1..1 string Simplified query string for Patient using ?id= or ?identifier=
... channel Σ 1..1 BackboneElement The channel on which to report matches to the criteria
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... type Σ 1..1 code rest-hook | websocket | email | sms | message
Binding: SubscriptionChannelType (required): The type of method used to execute a subscription.


Fixed Value: rest-hook

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet / CodeURI
Subscription.statusrequiredSubscriptionStatus
http://hl7.org/fhir/ValueSet/subscription-status|4.0.1
from the FHIR Standard
Subscription.channel.typerequiredFixed Value: rest-hook
http://hl7.org/fhir/ValueSet/subscription-channel-type|4.0.1
from the FHIR Standard

Constraints

IdGradePath(s)DetailsRequirements
CEQ-Param-NameerrorSubscriptionsearchParamName shall be Patient or PatientID
: extension('https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension').extension('searchParamName').value in ( 'Patient' | 'PatientID' )
dom-2errorSubscriptionIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorSubscriptionIf the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource
: contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4errorSubscriptionIf a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated
: contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5errorSubscriptionIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceSubscriptionA resource should have narrative for robust management
: text.`div`.exists()
ele-1error**ALL** elementsAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1error**ALL** extensionsMust have either extensions or value[x], not both
: extension.exists() != value.exists()

Snapshot View

NameFlagsCard.TypeDescription & Constraintsdoco
.. Subscription C 0..* Subscription Server push subscription criteria
CEQ-Param-Name: searchParamName shall be Patient or PatientID
... id Σ 0..1 id Logical id of this artifact
... meta Σ 0..1 Meta Metadata about the resource
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... text 0..1 Narrative Text summary of the resource, for human interpretation
... contained 0..* Resource Contained, inline Resources
... Slices for extension 2..* Extension Extension
Slice: Unordered, Open by value:url
... ceqPushExtension 1..1 (Complex) Carequality Subscription Required Elements
URL: https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension
.... id 0..1 string Unique id for inter-element referencing
.... Slices for extension 5..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:subIdentifier S 1..1 Extension A Business Identifier
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..0
..... url 1..1 uri "subIdentifier"
..... value[x] 0..1 string Value of extension
.... extension:searchParamName 1..1 Extension Extension
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..0
..... url 1..1 uri "searchParamName"
..... value[x] 1..1 string Value of extension
.... extension:searchModifier 1..1 Extension Extension
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..0
..... url 1..1 uri "searchModifier"
..... value[x] 0..1 code Value of extension
Required Pattern: eq
.... extension:endUser 1..1 Extension End recipient of the notification
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..0
..... url 1..1 uri "endUser"
..... value[x] 0..1 string Value of extension
.... extension:CQOrganization 1..1 Extension Recipient CQ Directory Reference
..... id 0..1 string Unique id for inter-element referencing
..... extension 0..0
..... url 1..1 uri "CQOrganization"
..... value[x] 0..1 string Value of extension
.... url 1..1 uri "https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension"
... subscriptionTopic 1..* canonical() Backport R5 Subscription Topic Canonical
URL: https://sequoiaproject.org/fhir/push-r4/StructureDefinition/backport-topic-canonical
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... status ?!Σ 1..1 code requested | active | error | off
Binding: SubscriptionStatus (required): The status of a subscription.

... contact Σ 0..* ContactPoint Contact details for source (e.g. troubleshooting)
... end Σ 1..1 instant When to automatically delete the subscription
... reason Σ 1..1 string Description of why this subscription was created
... criteria Σ 1..1 string Simplified query string for Patient using ?id= or ?identifier=
... error Σ 0..1 string Latest error note
... channel Σ 1..1 BackboneElement The channel on which to report matches to the criteria
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... type Σ 1..1 code rest-hook | websocket | email | sms | message
Binding: SubscriptionChannelType (required): The type of method used to execute a subscription.


Fixed Value: rest-hook
.... endpoint Σ 0..1 url Where the channel points to
.... payload Σ 0..1 code MIME type to send, or omit for no payload
Binding: Mime Types (required): The mime type of an attachment. Any valid mime type is allowed.

.... header Σ 0..* string Usage depends on the channel type

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet / CodeURI
Subscription.languagepreferredCommonLanguages
Additional Bindings Purpose
AllLanguages Max Binding
http://hl7.org/fhir/ValueSet/languages
from the FHIR Standard
Subscription.statusrequiredSubscriptionStatus
http://hl7.org/fhir/ValueSet/subscription-status|4.0.1
from the FHIR Standard
Subscription.channel.typerequiredFixed Value: rest-hook
http://hl7.org/fhir/ValueSet/subscription-channel-type|4.0.1
from the FHIR Standard
Subscription.channel.payloadrequiredMime Types (a valid code from urn:ietf:bcp:13)
http://hl7.org/fhir/ValueSet/mimetypes|4.0.1
from the FHIR Standard

Constraints

IdGradePath(s)DetailsRequirements
CEQ-Param-NameerrorSubscriptionsearchParamName shall be Patient or PatientID
: extension('https://sequoiaproject.org/fhir/push-r4/StructureDefinition/CEQextension').extension('searchParamName').value in ( 'Patient' | 'PatientID' )
dom-2errorSubscriptionIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorSubscriptionIf the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource
: contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4errorSubscriptionIf a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated
: contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5errorSubscriptionIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceSubscriptionA resource should have narrative for robust management
: text.`div`.exists()
ele-1error**ALL** elementsAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1error**ALL** extensionsMust have either extensions or value[x], not both
: extension.exists() != value.exists()

This structure is derived from Subscription

 

Other representations of profile: CSV, Excel, Schematron