Black Box View
Overview
This scenario illustrates the case where the sender elects to receive a business acknowledgement. In this case the ITK API allows the setting of a message property to request the return of a Business Acknowledgement.
It is important to note that the Business Acknowledgement is a Routed messages and therefore requires an Infrastructure Acknowledgement itself, making this is the most complex of the ITK message patterns.
Sender View
From the Sender perspective this is very similar to the previous CDA scenario, except that the sender requests a Business Acknowledgement.
The sending application must also provide the capability to receive and acknowledge the Business Acknowledgement.
ITK Router View
The ITK Router is not affected by the request for a Business Acknowledgement. This is simply forwarded as an attribute of the message.
Receiver View
The Receiver at the infrastructure level - essentially within the Reference Implementation - is not affected by the request for a Business Acknowledgement. This is an application responsibility and must be handled by the application code.
The application will construct the Business Acknowledgement (according to the schema in the ITK Core Pack) and send back to the originator ITK address using the standard sendAsync method of the API.
It is important to note that because the
Request Message (Get example)
The Business Acknowledgement is requested in the handling specification section.
<itk:header service="urn:nhs-itk:services:201005:SendCDADocument-v2-0" trackingid="A40BF902-AEDE-4ABC-94A1-2623C9D3E357"> <itk:addresslist> <itk:address uri="urn:nhs-uk:addressing:ods:TESTORGS:CDAEMULATORLOCAL"/> </itk:addresslist> <itk:auditIdentity> <itk:id uri="urn:nhs-uk:identity:ods:R59:oncology"/> </itk:auditIdentity> <itk:manifest count="1"> <itk:manifestitem id="uuid_NJ3" mimetype="text/xml" profileid="urn:nhs-en:profile:nonCodedCDADocument-v2-0"/> </itk:manifest> <itk:senderAddress uri="urn:nhs-uk:addressing:ods:R59:oncology"/> <itk:handlingSpecification> <itk:spec key="urn:nhs:itk:ns:201005:ackrequested" value="true"/> </itk:handlingSpecification> </itk:header>
Response Message (Get example)
The Business Acknowledgement is a Core Message contained within the Distribution Envelope.
<itk:DistributionEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <itk:header service="urn:nhs-itk:services:201005:SendBusinessAck-v1-0" trackingid="2A966984-4 ... <itk:addresslist> ... </itk:addresslist> <itk:auditIdentity> ... </itk:auditIdentity> <itk:manifest count="1"> <itk:manifestitem id="uuid_CDE4A7DB-979B-4D15-A7F3-53F247B4BAA7" mimetype="text/xml" profileid="urn:nhs-en:profile:ITKBusinessAcknowledgement-v1-0"/> </itk:manifest> <itk:senderAddress uri="urn:nhs-uk:addressing:ods:TESTORGS:ORGA"/> </itk:header> <itk:payloads count="1"> <itk:payload id="uuid_CDE4A7DB-979B-4D15-A7F3-53F247B4BAA7"> <v3:BusinessResponseMessage xmlns:v3="urn:hl7-org:v3"> <v3:id root="CDE4A7DB-979B-4D15-A7F3-53F247B4BAA7"/> <v3:creationTime value="201302051101"/> <v3:interactionId extension="urn:nhs-itk:interaction:ITKBusinessAcknowledgement-v1-0" root="2.16.840.1.113883.2.1.3.2.4.12"/>
Step 1 (Sending Application)
The sending application builds a SimpleMessage and populates the business payload with the CDA Document in serialized form. The application requests a business acknowledgement by adding a handling specification into the message properties.
The full source code for the Hello World CDA example can be seen here.
// Create the message ITKMessage msg = new SimpleMessage(); msg.setBusinessPayload(docText); ... // Set the message properties mp.setServiceId("urn:nhs-itk:services:201005:SendCDADocument-v2-0"); ... // Request the business ack. if (businessAckRequired.equalsIgnoreCase("Y")){ mp.addHandlingSpecification(ITKMessageProperties.BUSINESS_ACK_HANDLING_SPECIFICATION_KEY, "true"); } // Create the sender ITKMessageSender sender = new ITKMessageSenderImpl(); ... // Send this message Asynchronously - return is void. sender.sendAsync(msg);
Step 2 (Sending R.I.)
The sendAsync API builds handling specifictions into the Distribution Envelope on the wire as shown in this example..
<itk:header service="urn:nhs-itk:services:201005:SendCDADocument-v2-0" trackingid="A40BF902-AEDE-4ABC-94A1-2623C9D3E357"> <itk:addresslist> <itk:address uri="urn:nhs-uk:addressing:ods:TESTORGS:CDAEMULATORLOCAL"/> </itk:addresslist> <itk:auditIdentity> <itk:id uri="urn:nhs-uk:identity:ods:R59:oncology"/> </itk:auditIdentity> <itk:manifest count="1"> <itk:manifestitem id="uuid_NJ3" mimetype="text/xml" profileid="urn:nhs-en:profile:nonCodedCDADocument-v2-0"/> </itk:manifest> <itk:senderAddress uri="urn:nhs-uk:addressing:ods:R59:oncology"/> <itk:handlingSpecification> <itk:spec key="urn:nhs:itk:ns:201005:ackrequested" value="true"/> </itk:handlingSpecification> </itk:header>
Step 3 (Receiver App)
The message properties, including the handling specifications, are deserialized by the Reference Implementation and presented back to the receiving application handler as they were built by the sender.
Where the Business Ack handling specification is present then the application handler knows that it must return a business acknowledgement.
When this happens will depend on the business process of the receiver and the agreement between sender and receiver as the business acknowledgement is a generic wrap designed to contain content as agreed locally.