header element is required for the addressing elements OCL (not self.header.oclIsUndefined()) body element is required OCL not self.soapBody.oclIsUndefined() The header element SHALL be present (wsn-ws_base_notification-1.3-spec-os, 4.2) OCL not self.header.oclIsUndefined() The beady element SHALL be present (wsn-ws_base_notification-1.3-spec-os, 4.2) OCL not self.soapBody.oclIsUndefined() The WS-Addressing [action] Message Addressing Property MUST contain the URI http://docs.oasis-open.org/wsn/bw-2/NotificationProducer/SubscribeRequest (wsn-ws_base_notification-1.3-spec-os, 4.2) OCL self.action->size()=1 and self.action->first()='http://docs.oasis-open.org/wsn/bw-2/NotificationProducer/SubscribeRequest' the body shall contains only one subscribe element (wsn-ws_base_notification-1.3-spec-os, 4.2) OCL not self.subscribe.oclIsUndefined() /wsnt:Subscribe/wsnt:ConsumerReference SHALL be present (wsn-ws_base_notification-1.3-spec-os, 4.2) OCL (not self.consumerReference.oclIsUndefined()) if /wsnt:Subscribe/wsnt:Filter/wsnt:TopicExpression present, /wsnt:Subscribe/wsnt:Filter/wsnt:TopicExpression/@dialect SHALL be present (wsn-ws_base_notification-1.3-spec-os, 4.2) OCL self.filter.oclIsUndefined() or self.filter.topicExpression.oclIsUndefined() or (not self.filter.topicExpression.dialect.oclIsUndefined()) /filter/TopicExpression shall be from : ihe:FullFocumentEntry, ihe:MinimalDocumentEntry, ihe:FolderMetadata or ihe:SubmissionSetMetadata (IHE DSUB_SUP, 3.52.5) OCL (not self.filter.oclIsUndefined()) and (not self.filter.topicExpression.oclIsUndefined()) and (not self.filter.topicExpression.value.oclIsUndefined()) and ( self.filter.topicExpression.value='ihe:FullDocumentEntry' or self.filter.topicExpression.value='ihe:MinimalDocumentEntry' or self.filter.topicExpression.value='ihe:FolderMetadata' or self.filter.topicExpression.value='ihe:SubmissionSetMetadata' ) Each subscription request SHALL contain exactly one topic expression, /filter/TopicExpression and /filter/AdhocQuery are required (IHE DSUB_SUP, 3.52.5.3) OCL (not self.filter.oclIsUndefined()) and (not self.filter.topicExpression.oclIsUndefined()) and (not self.filter.adhocQuery.oclIsUndefined()) The adhoc query on the filter element shall have id='urn:uuid:aa2332d0-f8fe-11e0-be50-0800200c9a66' or 'urn:uuid:9376254e-da05-41f5-9af3-ac56d63d8ebd' or 'urn:uuid:fbede94e-dbdc-4f6b-bc1f-d730e677cece' (IHE DSUB_SUP, 3.52.2) OCL self.filter.oclIsUndefined() or self.filter.adhocQuery.oclIsUndefined() or ( (not self.filter.adhocQuery.id.oclIsUndefined()) and ( self.filter.adhocQuery.id='urn:uuid:aa2332d0-f8fe-11e0-be50-0800200c9a66' or self.filter.adhocQuery.id='urn:uuid:9376254e-da05-41f5-9af3-ac56d63d8ebd' or self.filter.adhocQuery.id='urn:uuid:fbede94e-dbdc-4f6b-bc1f-d730e677cece' ) ) $XDSDocumentEntryClassCode does not support AND/OR on DSUB-AdhocQuery based on FindDocuments query (ITI TF-2a 3.18.4.1.2.3.7.1)) OCL self.slot->select(sl : SlotType1 | (not sl.name.oclIsUndefined()) and sl.name='$XDSDocumentEntryClassCode' )->size()<2 $XDSDocumentEntryPracticeSettingCode does not support AND/OR on DSUB-AdhocQuery based on FindDocuments query (ITI TF-2a 3.18.4.1.2.3.7.1)) OCL self.slot->select(sl : SlotType1 | (not sl.name.oclIsUndefined()) and sl.name='$XDSDocumentEntryPracticeSettingCode' )->size()<2 $XDSDocumentEntryHealthcareFacilityTypeCode does not support AND/OR on DSUB-AdhocQuery based on FindDocuments query (ITI TF-2a 3.18.4.1.2.3.7.1)) OCL self.slot->select(sl : SlotType1 | (not sl.name.oclIsUndefined()) and sl.name='$XDSDocumentEntryHealthcareFacilityTypeCode' )->size()<2 $XDSDocumentEntryAuthorPerson does not support AND/OR on DSUB-AdhocQuery based on FindDocuments query (ITI TF-2a 3.18.4.1.2.3.7.1)) OCL self.slot->select(sl : SlotType1 | (not sl.name.oclIsUndefined()) and sl.name='$XDSDocumentEntryAuthorPerson' )->size()<2 $XDSDocumentEntryFormatCode does not support AND/OR on DSUB-AdhocQuery based on FindDocuments query(ITI TF-2a 3.18.4.1.2.3.7.1)) OCL self.slot->select(sl : SlotType1 | (not sl.name.oclIsUndefined()) and sl.name='$XDSDocumentEntryFormatCode' )->size()<2 $XDSDocumentEntryPatientId does not support AND/OR on DSUB-AdhocQuery based on FindDocuments query (ITI TF-2a 3.18.4.1.2.3.7.1)) OCL self.slot->select(sl : SlotType1 | (not sl.name.oclIsUndefined()) and sl.name='$XDSDocumentEntryPatientId' )->size()<2 $XDSDocumentEntryPatientId is not multivalued on DSUB-AdhocQuery based on FindDocuments query (ITI TF-2a 3.18.4.1.2.3.7.1)) OCL self.slot->select(sl : SlotType1 | (not sl.name.oclIsUndefined()) and sl.name='$XDSDocumentEntryPatientId' )->forAll(sl : SlotType1 | (sl.valueList.oclIsUndefined()) or (sl.valueList.value->size()<2)) $XDSDocumentEntryPatientId is required on DSUB-AdhocQuery based on FindDocuments query (ITI TF-2a 3.18.4.1.2.3.7.1)) OCL self.slot->select(sl : SlotType1 | (not sl.name.oclIsUndefined()) and sl.name='$XDSDocumentEntryPatientId' )->size()>0 Allowed metadata are only ones detailed on the TF DSUB Supp, 3.52.5.2.1 : XDSDocumentEntryClassCode, XDSDocumentEntryPracticeSettingCode, XDSDocumentEntryHealthcareFacilityTypeCode, XDSDocumentEntryEventCodeList, XDSDocumentEntryConfidentialityCode, XDSDocumentEntryAuthorPerson, XDSDocumentEntryFormatCode, XDSDocumentEntryPatientId. Other parameters have no clear applicability as a filter expression (IHE DSUB Supp, 3.52.5.2.1) OCL self.slot->forAll(sl : SlotType1 | (not sl.name.oclIsUndefined()) and ( sl.name='$XDSDocumentEntryClassCode' or sl.name='$XDSDocumentEntryPracticeSettingCode' or sl.name='$XDSDocumentEntryHealthcareFacilityTypeCode' or sl.name='$XDSDocumentEntryEventCodeList' or sl.name='$XDSDocumentEntryConfidentialityCode' or sl.name='$XDSDocumentEntryAuthorPerson' or sl.name='$XDSDocumentEntryFormatCode' or sl.name='$XDSDocumentEntryPatientId' ) ) $XDSFolderPatientId is required on DSUB-AdhocQuery based on FindDocuments query (ITI DSUB, Subscriptions for folders metadata) OCL self.slot->select(sl : SlotType1 | (not sl.name.oclIsUndefined()) and sl.name='$XDSFolderPatientId' )->size()>0 Allowed metadata are only ones detailed on the TF DSUB Supp, 3.52.5.2.1 : XDSFolderPatientId, DSFolderUniqueId, and XDSFolderCodeList (IHE DSUB Supp,3.52.5.2.2) OCL self.slot->forAll(sl : SlotType1 | (not sl.name.oclIsUndefined()) and ( sl.name='$XDSFolderPatientId' or sl.name='$DSFolderUniqueId' or sl.name='$XDSFolderCodeList' ) ) $XDSSubmissionSetPatientId is required on DSUB-AdhocQuery based on FindDocuments query (ITI DSUB, Subscriptions for SubmissionSets metadata) OCL self.slot->select(sl : SlotType1 | (not sl.name.oclIsUndefined()) and sl.name='$XDSSubmissionSetPatientId' )->size()>0 Allowed metadata are only ones detailed on the TF DSUB Supp, 3.52.5.2.1 : XDSSubmissionSetPatientId, XDSSubmissionSetSourceId, XDSSubmissionSetAuthor and XDSSubmissionSetIntendedRecipient (IHE DSUB Supp,3.52.5.2.3) OCL self.slot->forAll(sl : SlotType1 | (not sl.name.oclIsUndefined()) and ( sl.name='$XDSSubmissionSetPatientId' or sl.name='$XDSSubmissionSetSourceId' or sl.name='$XDSSubmissionSetAuthor' or sl.name='$XDSSubmissionSetIntendedRecipient' ) ) The header element SHALL be present (wsn-ws_base_notification-1.3-spec-os, 4.2) OCL not self.header.oclIsUndefined() The body element SHALL be present (wsn-ws_base_notification-1.3-spec-os, 4.2) OCL not self.soapBody.oclIsUndefined() The WS-Addressing [action] Message Addressing Property MUST contain the URI http://docs.oasis-open.org/wsn/bw-2/NotificationProducer/SubscribeResponse (wsn-ws_base_notification-1.3-spec-os, 4.2) OCL self.action->size()=1 and self.action->first()='http://docs.oasis-open.org/wsn/bw-2/NotificationProducer/SubscribeResponse' the body shall contains one and only one of these elements : SubscribeResponse, ResourceUnknownFault, InvalidFilterFault, TopicExpressionDialectUnknownFault, InvalidTopicExpressionFault, TopicNotSupportedFault, InvalidProducerPropertiesExpressionFault, InvalidMessageContentExpressionFault, UnrecognizedPolicyRequestFault, UnsupportedPolicyRequestFault, NotifyMessageNotSupportedFault, UnacceptableInitialTerminationTimeFault, SubscribeCreationFailedFault (wsn-ws_base_notification-1.3-spec-os, 4.2) OCL Bag{self.subscribeResponse.oclIsUndefined(), self.invalidFilterFault.oclIsUndefined(), self.topicExpressionDialectUnknownFault.oclIsUndefined(), self.invalidTopicExpressionFault.oclIsUndefined(), self.invalidProducerPropertiesExpressionFault.oclIsUndefined(), self.invalidMessageContentExpressionFault.oclIsUndefined(), self.unrecognizedPolicyRequestFault.oclIsUndefined(), self.unsupportedPolicyRequestFault.oclIsUndefined(), self.notifyMessageNotSupportedFault.oclIsUndefined(), self.unacceptableInitialTerminationTimeFault.oclIsUndefined(), self.subscribeCreationFailedFault.oclIsUndefined(),self.resourceUnknownFault.oclIsUndefined(), self.topicNotSupportedFault.oclIsUndefined()}->select(bol : Boolean | bol = false)->size()=1 /wsnt:SubscribeResponse/wsnt:SubscriptionReference shall be present (wsn-ws_base_notification-1.3-spec-os, 4.2) OCL not self.subscriptionReference.oclIsUndefined() The body of the soap envelope shall contains the element Unsubscribe OCL not self.unsubscribe.oclIsUndefined() The header shall have a:Action with value='http://docs.oasis-open.org/wsn/bw-2/SubscriptionManager/UnsubscribeRequest' (wsn-ws_base_notification-1.3-spec-os, 6.1.2) OCL self.action->size()=1 and self.action->first()='http://docs.oasis-open.org/wsn/bw-2/SubscriptionManager/UnsubscribeRequest' The body element shall contains one and only one of these elements : UnsubscribeResponse, ResourceUnknownFault, UnableToDestroySubscriptionFault OCL Bag{self.unsubscribeResponse.oclIsUndefined(), self.resourceUnknownFault.oclIsUndefined(), self.unableToDestroySubscriptionFault.oclIsUndefined()}->select(bol : Boolean | bol= false)->size()=1 The header/action of the unsubscribe response shall be http://docs.oasis-open.org/wsn/bw-2/SubscriptionManager/UnsubscribeResponse OCL self.action->size()=1 and self.action->first()='http://docs.oasis-open.org/wsn/bw-2/SubscriptionManager/UnsubscribeResponse' the header/action shall be http://docs.oasis-open.org/wsn/bw-2/NotificationConsumer/Notify (wsn-ws_base_notification-1.3-spec-os, 3.2) OCL self.action->size()=1 and self.action->first()='http://docs.oasis-open.org/wsn/bw-2/NotificationConsumer/Notify' the body shall contain Notify element OCL not self.notify.oclIsUndefined() The <rim:RegistryObjectList> element shall be the only child of the <lcm:SubmitObjectsRequest> element (IHE DSUB Supp, 3.52.4.1.2) OCL (not self.registryObjectList.oclIsUndefined()) and self.requestSlotList.oclIsUndefined() publish transaction shall be conform to the FULL notification structure of Notify message (or submission set, or folder notification) (IHE DSUB SUPP, 3.54.4.1.2) OCL self.notificationMessage->forAll(nm : NotificationMessageHolderType | (not nm.message.oclIsUndefined()) and (not nm.message.submitObjectsRequest.oclIsUndefined()) and (not nm.message.submitObjectsRequest.registryObjectList.oclIsUndefined()) and ( nm.message.submitObjectsRequest.registryObjectList.ExtrinsicObject->size()>0 or nm.message.submitObjectsRequest.registryObjectList.RegistryPackage->size()>0 ) ) /wsnt:Notify/wsnt:NotificationMessage shall be present (wsn-ws_base_notification-1.3-spec-os, 3.2) OCL self.notificationMessage->size()>0 /wsnt:Notify/wsnt:NotificationMessage/wsnt:Message shall be present (wsn-ws_base_notification-1.3-spec-os, 3.2) OCL self.notificationMessage->forAll(nott : NotificationMessageHolderType| not nott.message.oclIsUndefined()) There shall be a single wsnt:Notify/wsnt:NotificationMessage/wsnt:Message element in this transaction (IHE DSUB Supp, 3.53.4.1.2) OCL self.notificationMessage->size()=1 and (not self.notificationMessage->first().message.oclIsUndefined()) A Full Notification shall be sent if the subscription request included the topic ihe:FullDocumentEntry. The <lcm:SubmitObjectsRequest> element is the only child of the wsnt:Notify/wsnt:NotificationMessage/wsnt:Message element in this message (IHE DSUB Supp, 3.53.4.1.2) OCL self.notificationMessage->forAll(notm : NotificationMessageHolderType | notm.topic.oclIsUndefined() or notm.topic.value.oclIsUndefined() or (not self.matches(notm.topic.value, '.*FullDocumentEntry$')) or ( (not notm.message.oclIsUndefined()) and (not notm.message.submitObjectsRequest.oclIsUndefined()) ) ) A Minimal Notification shall be sent if the subscription request included the topic ihe:MinimalDocumentEntry. The <lcm:SubmitObjectsRequest> element is the only child of the wsnt:Notify/wsnt:NotificationMessage/wsnt:Message element in this message (IHE DSUB Supp, 3.53.4.1.2) OCL self.notificationMessage->forAll(notm : NotificationMessageHolderType | notm.topic.oclIsUndefined() or notm.topic.value.oclIsUndefined() or (not self.matches(notm.topic.value, '.*MinimalDocumentEntry$')) or ( (not notm.message.oclIsUndefined()) and (not notm.message.submitObjectsRequest.oclIsUndefined()) ) ) NotificationMessage/topic is required and shall be equal to ihe:MinimalDocumentEntry, ihe:FullDocumentEntry, ihe:FolderMetadata or ihe:SubmissionSetMetadata. (IHE DSUB Supp, 3.53.4.1.2) OCL self.notificationMessage->size()>0 and self.notificationMessage->forAll(msg : NotificationMessageHolderType | (not msg.topic.oclIsUndefined()) and ( self.matches(msg.topic.value, '.*MinimalDocumentEntry$') or self.matches(msg.topic.value, '.*FullDocumentEntry$') or self.matches(msg.topic.value, '.*FolderMetadata$') or self.matches(msg.topic.value, '.*SubmissionSetMetadata$') ) ) When FullDocumentEntry used, only ExtrinsicObject are allowed under wsnt:Notify/wsnt:NotificationMessage/wsnt:Message/lcm:SubmitObjectsRequest/rim:RegistryObjectList (DSUB, 3.53.4.1.2) OCL self.notificationMessage->select(notm : NotificationMessageHolderType | (not notm.topic.oclIsUndefined()) and (not notm.topic.value.oclIsUndefined()) and self.matches(notm.topic.value, '.*FullDocumentEntry$') )->forAll(notm : NotificationMessageHolderType | (not notm.message.oclIsUndefined()) and (not notm.message.submitObjectsRequest.oclIsUndefined()) and (not notm.message.submitObjectsRequest.registryObjectList.oclIsUndefined()) and notm.message.submitObjectsRequest.registryObjectList.RegistryPackage->size()=0 ) When Minimal notification used, only rim:ObjectRef are allowed under wsnt:Notify/wsnt:NotificationMessage/wsnt:Message/lcm:SubmitObjectsRequest/rim:RegistryObjectList (DSUB, 3.53.4.1.2) OCL self.notificationMessage->select(notm : NotificationMessageHolderType | (not notm.topic.oclIsUndefined()) and (not notm.topic.value.oclIsUndefined()) and self.matches(notm.topic.value, '.*MinimalDocumentEntry$') )->forAll(notm : NotificationMessageHolderType | (not notm.message.oclIsUndefined()) and (not notm.message.submitObjectsRequest.oclIsUndefined()) and (not notm.message.submitObjectsRequest.registryObjectList.oclIsUndefined()) and notm.message.submitObjectsRequest.registryObjectList.RegistryPackage->size()=0 and notm.message.submitObjectsRequest.registryObjectList.ExtrinsicObject->size()=0 ) When FolderMetadata notification used, only rim:RegistryPackage are allowed under wsnt:Notify/wsnt:NotificationMessage/wsnt:Message/lcm:SubmitObjectsRequest/rim:RegistryObjectList with classificationScheme="urn:uuid:d9d542f3-6cc4-48b6-8870-ea235fbc94c2" (DSUB, 3.53.4.1.2) OCL self.notificationMessage->select(notm : NotificationMessageHolderType | (not notm.topic.oclIsUndefined()) and (not notm.topic.value.oclIsUndefined()) and self.matches(notm.topic.value, '.*FolderMetadata$') )->forAll(notm : NotificationMessageHolderType | (not notm.message.oclIsUndefined()) and (not notm.message.submitObjectsRequest.oclIsUndefined()) and (not notm.message.submitObjectsRequest.registryObjectList.oclIsUndefined()) and notm.message.submitObjectsRequest.registryObjectList.ExtrinsicObject->size()=0 and notm.message.submitObjectsRequest.registryObjectList.RegistryPackage->forAll( rp : RegistryPackageType | ( rp.classification->select( cl : ClassificationType | (not cl.classificationNode.oclIsUndefined()) and (cl.classificationNode='urn:uuid:d9d542f3-6cc4-48b6-8870-ea235fbc94c2') and (not cl.classifiedObject.oclIsUndefined()) and (cl.classifiedObject=rp.id) )->size()>0) or ( notm.message.submitObjectsRequest.registryObjectList.Classification->select( cl : ClassificationType | (not cl.classificationNode.oclIsUndefined()) and (cl.classificationNode='urn:uuid:d9d542f3-6cc4-48b6-8870-ea235fbc94c2') and (not cl.classifiedObject.oclIsUndefined()) and (cl.classifiedObject=rp.id) )->size()>0 ) ) ) When submissionSet notification used, only rim:RegistryPackage are allowed under wsnt:Notify/wsnt:NotificationMessage/wsnt:Message/lcm:SubmitObjectsRequest/rim:RegistryObjectList with classificationScheme="urn:uuid:a54d6aa5-d40d-43f9-88c5-b4633d873bdd" (DSUB, 3.53.4.1.2) OCL self.notificationMessage->select(notm : NotificationMessageHolderType | (not notm.topic.oclIsUndefined()) and (not notm.topic.value.oclIsUndefined()) and self.matches(notm.topic.value, '.*SubmissionSetMetadata$') )->forAll(notm : NotificationMessageHolderType | (not notm.message.oclIsUndefined()) and (not notm.message.submitObjectsRequest.oclIsUndefined()) and (not notm.message.submitObjectsRequest.registryObjectList.oclIsUndefined()) and notm.message.submitObjectsRequest.registryObjectList.ExtrinsicObject->size()=0 and notm.message.submitObjectsRequest.registryObjectList.RegistryPackage->forAll( rp : RegistryPackageType | ( rp.classification->select( cl : ClassificationType | (not cl.classificationNode.oclIsUndefined()) and (cl.classificationNode='urn:uuid:a54d6aa5-d40d-43f9-88c5-b4633d873bdd') and (not cl.classifiedObject.oclIsUndefined()) and (cl.classifiedObject=rp.id) )->size()>0) or ( notm.message.submitObjectsRequest.registryObjectList.Classification->select( cl : ClassificationType | (not cl.classificationNode.oclIsUndefined()) and (cl.classificationNode='urn:uuid:a54d6aa5-d40d-43f9-88c5-b4633d873bdd') and (not cl.classifiedObject.oclIsUndefined()) and (cl.classifiedObject=rp.id) )->size()>0 ) ) )