10 HDR Messaging Services

HDR Inbound Message Processor

The Inbound Message Processor (IMP) lets HDR receive inbound HL7 version 3.0 messages, compliant with HDR messaging schema, from sending systems and persist information to the HDR repository.

IMP provides a processMessage API to persist a HL7 V3 message, which returns a Result object containing the acknowledgement. IMP provides an invalidateCache API that will invalidate the configuration cache.

To persist a message, user must configure sender, sender interaction, and side effect for the message and create the receiver of the message as an organization in HDR. You can use Messaging Configuration Service or IMP Configuration Administration Service to do IMP configuration.

IMP extracts Sender, Receiver, and Interaction Id available in the message, and picks up the associated side effect configuration. Based on the side effect configuration, IMP sets the Reference Modifier on RIM Objects of the message. Based on which, RIM objects available in the message is created, updated, overlaid or ignored. There are certain rules that influence the value of Reference Modifier to be set on RIM Objects, which is described in the section Side Effect Configuration Rules.

After persisting the message, IMP returns a successful acknowledgment (AA), if the message is persisted successfully. IMP rejects a message with an Application Error (AE) typecode, if the content or format of the message is incorrect (such as identified object validation failed, mandatory code attribute missing). IMP rejects a message with an Application Reject (AR) typecode, if message processing fails for any reason unrelated to the content or format of the message (such as system down, internal error, and so on).

Messaging Schema

HDR includes messaging schemas for all supported message types. Messaging schema includes the following for each message type:

  • Schema (XSD Files) for the Payload of the Message Type

  • Composite Message Schema (XSD File) for each Interaction ID of the Message Type

  • Model Interchange Files (MIF files) for the Payload of the Message Type

In addition, messaging schema contains a common Vocabulary schema and data type schema for all message types.

The Composite Message Schema (CMS) has three parts: Message Wrapper, Control Act Wrapper, and Payload Reference. If there are three Interaction IDs seeded for the same Payload, there will be three composite message schemas; one for each Interaction ID and all of them will refer to the same Payload.

For samples, refer to the schemas for Lab Result available at the following locations:

  • Payload Schema for a Message Type (Lab Result)

    <hdr_domain_home>/config/hdr/message/defs/rim214101/schemas/POLB_MT004000HT01.xsd

  • Composite Message Schema for Interaction Ids POLB_IN004003, POLB_IN004004 (Lab Result)

    <hdr_domain_home>/config/hdr/message/defs/rim214101/schemas/POLB_IN004003.xsd

    <hdr_domain_home>/config/hdr/message/defs/rim214101/schemas/POLB_IN004004.xsd

  • Common Data Type Schemas

    <hdr_domain_home>/config/hdr/message/defs/rim214101/coreschemas/datatypes.xsd

    <hdr_domain_home>/config/hdr/message/defs/rim214101/coreschemas/datatypes-base.xsd

  • Common Vocabulary Schemas

    <hdr_domain_home>/config/hdr/message/defs/rim214101/coreschemas/datatypes.xsd

    <hdr_domain_home>/config/hdr/message/defs/rim214101/coreschemas/datatypes-base.xsd

For more information on message types supported, refer to the Oracle Healthcare Data Repository HL7 Version 3 Conformance Specification.

Acknowledgement Processing

Upon receipt of a message from the sending application (the source of the message), IMP synchronously processes the message into HDR, and returns an Application Acknowledgment (AA), an Application Error (AE), or an Application Reject (AR).

  • Application Acknowledgement (AA): An AA response indicates that the message was successfully processed and persisted in HDR.

  • Application Error (AE): An AE response indicates an error reported by HDR, including error information in message content or format (error type code, error detail code, free text). It is the responsibility of the interface engine to determine if the acknowledgement message is returned to the sending system or if the message should be resent to HDR or skipped (abandoning the message). IMP does not support sequence number protocol--the interface engine is responsible for assuring that messages are delivered in order.

  • Application Reject (AR): An AR response indicates that the message is rejected, for reasons unrelated to its content or format (system or network down, network transmission errors). For most such problems, the receiving system may be able to accept the message at a later time. The sending system or interface engine must decide on an application-specific basis whether the message should be sent again. Ultimately, the AR is resolved to either an AA (upon successful retransmission) or an AE--which thence generates a call to error processing.

The acknowledgement message contains the following XML segments:

Table 10-1 XML Segments in an Acknowledgement Message

Components

XPATH

Sample values

Acknowledgement Type

MCCI_MT002300HT01.Message/ acknowledgement/typeCode/@code

<typeCode code="AA"/> ,
<typeCode code="AE"/>,
<typeCode code="AR"/>

Acknowledgement Detail Code

MCCI_MT002300HT01.Message/acknowledgement/ acknowledgementDetail/ code/@code

<code code="NS250" codeSystemName="AcknowledgementDetailCode"/>

Acknowledgement Error Text

MCCI_MT002300HT01.Message/acknowledgement/ acknowledgementDetail/ text

<text mediaType="text/plain" encoding="TXT">
Application: CTB, Message Name: CTB_MS_INVALID_PROCESS_MD_CD. Tokens: PROCESSING_MODE_CODE = T1;
</text>

Acknowledgement Error Location

MCCI_MT002300HT01.Message/acknowledgement/ acknowledgementDetail/location

<location>
CTB_MS_IMP_EXCEPTION_LOCATION2
:Error occurred while processing XML
data located at line 6, column 30. XPATH: /PRPA_IN400000[1]  COMPLEX_TYPE: MCCI_MT000100HT04.Message</location>

HDR Error Code

MCCI_MT002300HT01.Message/acknowledgement/ acknowledgementDetail/text

CTB_MS_INVALID_PROCESS_MD_CD

Responder Information

MCCI_MT002300HT01.Message/sender/device/id

<sender type="CommunicationFunction">
<typeCode code="SND"/>
<device type="Device" classCode="DEV" determinerCode="INSTANCE">
<id root="9.989898.5.100" extension="ORG1000"/>
<asAgent type="RoleHeir" classCode="AGNT">
<representedOrganization type="Organization" classCode="ORG" determinerCode="INSTANCE">
<id root="9.989898.5.100" extension="ORG1000"/>
</representedOrganization>
</asAgent>
</device>
</sender>

Sender Configuration

Before processing a message, the message type must be configured for the sender. IMP extracts Sender, Receiver, and Interaction Id available in the message, and picks up the associated side-effect configuration. If Interaction ID is not configured for the Sender and Receiver, IMP rejects the message.

Based on the side-effect configuration, IMP sets the reference modifier on RIM objects available in the message. If a particular RIM object is not configured for side-effect, IMP defaults the value of reference modifier for the RIM object to MUST_EXIST. There are certain side-effect rules in IMP that influences the value of reference modifier of a RIM Object.

Message Validation

In addition to being compliant with messaging schema, IMP imposes certain validations on messages before processing the message. Major validations that affect messages are described in this section.

Identified Object Processing

All RIM objects containing ids are identified objects. If a message instance contains repeating objects with same ids, IMP merges the information of repeating objects and persists union of data from different instances into HDR Repository. This is called Identified Object Processing. If the repeating objects in the message contain inconsistent information, IMP rejects the message. For example, if the age of a particular person (having same II) has different values at different segments of the message, IMP rejects the message. For information on complete set of rules to merge information of repeating objects, refer to the Oracle Healthcare Data Repository Programmer's Guide and Oracle Healthcare Data Repository Conformance Specification Guide.

Media Type and MIME Type Validation for CDA Messages

For CDA Message Types, IMP supports only certain Media Type and MIME Type. Refer to the CDA Message Type section of the Oracle Healthcare Data Repository Message Conformance Specification V6.1.

Master Catalog Validation

Master Catalog entries must exist in HDR Repository for all Acts, Entities, and Roles submitted to HDR for persistence.

Vocabulary Validation

Code System Names used in the message must be loaded into ETS and the Codes used should be part of Coding Scheme.

State Transition Validation

All Acts, Entities, and Roles submitted to HDR for persistence is subjected to Generic State Transition validation. The Focal object in the message is subjected to focal class state transition.

Immutable Attributes Validation

An update message cannot modify values of structural attributes and code (example, act.ClassCode) of an already persisted object.

RIM Service Validation

Every message is persisted as a control act graph in HDR Repository and subjected to the validations done by RIM Persistence Service.

Messaging Metadata

To process a message, IMP needs the following RMIM schematic information about the message elements:

  • Name of RIM Foundation Class of the RIM Object available in the message element.

  • Type of RIM Association.

  • Constrained RIM Data Type of the attribute.

  • If the association is a choice.

The RMIM schematic information is not available in the schemas for message types, but present in the MIF files for the same message type. The information is extracted from the MIF file and loaded into the database after installing HDR. This information is known as Messaging Metadata.

To load Messaging Metadata, use ConcurrentProgService.loadMessagingMetadata() API.

Profile Options and System Properties

Use the CTB: Store Incoming Message profile option to indicate whether the incoming message has to be stored or not. The valid values are Y and N. If the value is Y, the incoming message is stored in the submission unit table. If the value is N, the incoming message is not stored.

The following system properties impacts behavior of the IMP engine:

Table 10-2 IMP System Properties

Property Name

Valid Values

Description

IgnoreUnrecognizedElements

Y or N

With value 'N' throws an exception when an unrecognized RIM attribute is encountered. With 'Y', just skips it. If N, IMP throws an exception when an unrecognized RIM attribute is encounters. If Y, IMP skips the validation. The default value is N.

IMP_NONDESTRUCTIVE_MODE

Y or N

If Y, IMP rollbacks all transactions and does not update the audit log. The default value is N.

IMP_BUNDLED_MODE

Y or N

If Y, IMP collects all non-runtime exceptions, and continues processing. If N, each exception aborts processing immediately. The default value is N.


See Also

  • Oracle Healthcare Data Repository Javadoc

  • Oracle Healthcare Data Repository Conformance Specification

Procedures:

The following chart provides an overview of the implementation process for Inbound Messaging Services:

Figure 10-1 Implementation Process: Inbound Messaging Services

Described in the following table

To implement Inbound Messaging Services, refer to the following procedure table:

Table 10-3 HDR Implementation Procedures: Inbound Messaging Services

Task-Step

Description

Optional?

Interface

9-1

Configuring Interactions

Yes

API

9-2

Configuring Sender, Sender Interaction, and Side Effect

No

API

9-3

Invoke Inbound Messaging Services

Yes

API


Configuring Interactions

IMP extracts Interaction Id and Trigger Event Code from the incoming message and checks whether it is configured or not. The following table lists the location of the parameters in the message

Table 10-4 Location of the Parameters in the Message

Parameter

XPath

Interaction Id

Top Level Element in the message. Example, PRPA_IN400000

Trigger Event Code

PRPA_IN400000/controlActProcess/code/@code


Interaction Ids for all supported message types are seeded. Refer to the Oracle Healthcare Data Repository HL7 Version 3 Conformance Specification for the list of seeded interaction ids. You can also configure new Interactions Id for supported messages. Use the Interactions window to configure new Interaction Id. For more information on the Interactions window, refer to Oracle Healthcare Data Repository User Interface Guide.

When you configure a new Interaction Id, an Interaction schema is generated by the Healthcare Data Repository User Interface and stored at the following location with the name of {InteractionId}.xsd::

<hdr_domain_home>/config/hdr/message/defs/customSchema/newMessageType/interaction.

Configuring Sender, Sender Interaction, and Side Effect

IMP extracts the following information (in the table) from the message and validates them for the configuration:

Table 10-5 Information Extracted and Validated by IMP

Parameter

XPath

Interaction Id

Top Level Element in the message. Example, PRPA_IN400000

Sender Root

PRPA_IN400000/sender/device/ id/@root

Sender Extension

PRPA_IN400000/sender/device/id/@extension

Receiver Root

PRPA_IN400000/receiver/device/asAgent/representedOrganization /id/@root

Receiver Extension

PRPA_IN400000/receiver/device/as Agent/representedOrganization/id/@extension

Trigger Event Code

PRPA_IN400000/controlActProcess/code/@code


If the Sender Root and Extension and Receiver Root and Extension is not configured, IMP rejects the message. This configuration thus controls a valid sender and HDR enterprises authorized to send messages. This is called the Sender Configuration.

Important: You must only use Organization's external II while creating sender configuration. You must not use any of the Internal IIs that are automatically generated in HDR.

Upon validation of the Sender Configuration, IMP uses its configuration to determine if the Interaction Id is valid for the Sender Configuration. If it is not configured for that Sender Configuration, IMP rejects the message. This configuration thus controls which types of Interaction Id a sender is permitted to send to a receiver. This is called the Sender Interaction Configuration.

Upon validation of the Sender Configuration and Sender Interaction Configuration combination, IMP processes the message payload. The focal object is created or updated in the HDR Repository. However, for non-focal objects, IMP inspects its side effect configuration to determine its behavior. You can configure IMP to let each non-focal object type create or not create the object if it is not present in the repository, and to update or overlay or not update or overlay the object if it is present in the repository. This configuration of side effects is called the Side Effect Configuration.

Use the IMPConfigAdminIntrService to configure sender and side effects.

See Also

  • Oracle Healthcare Data Repository HL7 Version 3 Conformance Specification for a list of side effect configuration records required for each message type.

Invoke Inbound Messaging Services

Reference

  • Oracle Healthcare Data Repository Javadoc

  • Oracle Healthcare Data Repository HL7 Version 3 Conformance Specification

The following table lists the principal IMP service and methods:

Table 10-6 Service and Methods: IMP

Level

Detail

Package

oracle.hsgbu.hdr.message.improcessor

Class

IMPService

Methods

  • processMessage

Class

RawIMPService

Methods

  • processMessage

Class

Result

Methods

  • getResponseXML

  • getStatus

  • getControlActId

  • getTriggerEvent


Login

This is an API-based implementation procedure.

Navigation

This is an API-based implementation procedure.

Steps

  1. Use the Service Locator to access the IMP Service.

    Note:

    RawIMPService is implemented as a container-managed transactions (CMT) bean, and does not create SubmissionUnit. Use RawIMPService if you want to use the Java Transaction API (JTA) support of IMP.

  2. Use the processMessage method with an HDR-compliant message (see following Note) as a parameter to invoke message processing services; a Result object is returned.

  3. Use the following methods to inspect the result of processing the message:

    • getResponseXML

    • getStatus

Note:

IMP supports XML formatted inbound messages that conform to the HL7 version 3 messaging standard. The messages must conform to the messaging schema for the message types supported in HDR. The schemas for all supported message type is available at the following location:

<hdr_domain_home>/config/hdr/messge/defs/rim214101/schemas

The list of supported message types is provided in Oracle Healthcare Data Repository HL7 Version 3 Conformance Specification. Using Messaging Tool Kit, additional message types can be supported. For more information, refer to Oracle Healthcare Data Repository Messaging Tool Kit User Guide.

See Also

  • Oracle Healthcare Data Repository HL7 Version 3 Conformance Specification, for information about message types supported by IMP.

See Also:

  • Oracle Healthcare Data Repository Implementation Guide describes how to implement and configure messaging services, including HDR Gateway
  • Oracle Healthcare Data Repository HL7 Version 3 Messaging Conformance Specification describes the HL7 message types supported by the current HDR release

Note:

IMP provides Java Transaction API (JTA) support through RawIMPService. RawIMPService provides the same functionality as IMPService except that RawIMPService is implemented as a container-managed transactions (CMT) bean, and does not create SubmissionUnit. Use RawIMPService if you want to use the Java Transaction API (JTA) support of IMP.

IMP Configuration API Usage

The Interaction ID based IMP Configuration Administration Service provides functions to create, remove, and find Sender Configurations. HDR Configuration Service also provides same functionality. To update a Sender Configuration, the client application removes it and creates the new Sender Configuration, including all of its child objects (sender interaction configuration and sender side effect configuration). HDR APIs support the following:

  • Moving configuration data from one environment to another

  • Writing loader applications

This section contains the following topics:

Note:

  • The client application must call the Master Catalog Service to resolve Master Catalog IDs.
  • You can use Messaging Configuration Service for updates.

Sender Configuration Attributes

Attribute Name Field Type Length Mandatory Description
Sender Id Root String 240 Yes Root part of the OID of the sending device
Sender Id Extension String 240 Yes Extension part of the OID of the sending device
Receiver Id Root String 240 Yes Root part of the OID of a valid organization registered in the system
Receiver Id Extension String 240 No Extension part of the OID of a valid organization registered in the system
Sender Interaction Configuration SenderInteractionConfiguration[] - No An array of Sender Interaction Configurations for this Sender Configuration

Sender Interaction Configuration Attributes

Attribute Name Field Type Length Mandatory Description
Interaction Id String 80 Yes Valid Interaction Id for this Sender Interaction Configuration
Sender Side Effect Configuration SenderSideEffectConfiguration[] - No An array, of Sender Side Effect Configurations, that defines permissions (create if/create or overlay/update/must exist/create or update) on referenced objects

Sender Side Effect Configuration Attributes

Attribute Name Field Type Length Mandatory Description
Master Catalog Id String - Yes The Master Catalog ID of the RIM object for which the side effect is configured. You can retrieve the Master Catalog details from the MasterCatalogService
Object Reference Modifier Code String - No Object reference modifier code value: CREATE_IF, OVERLAY, CREATE_OR_OVERLAY, MUST_EXIST, UPDATE, CREATE_OR_UPDATE
Player Reference Modifier Code String - No Player reference modifier code value: CREATE_IF, OVERLAY, CREATE_OR_OVERLAY, MUST_EXIST, UPDATE, CREATE_OR_UPDATE
Scoper Reference Modifier Code String - No Scoper reference modifier code value: CREATE_IF, OVERLAY, CREATE_OR_OVERLAY, MUST_EXIST, UPDATE, CREATE_OR_UPDATE

Figure 10-2 Sender Configuration Objects

Described in the following text

Sender Configuration is the top-level object, with Sender Interaction Configuration object as its direct child. Sender Interaction Configuration object in turn has Sender Side Effect Configuration object as its child. The client application must create the complete hierarchy before invoking the create functionality. Before removing a Sender Configuration, the client application must invoke the finder API to get the handle associated with the target configuration item to delete.

Sender Configuration Search Parameters

SenderConfigSearchConfig is a criteria object passed to the finder API as a parameter. It provides methods to set search attributes used for retrieving the Sender Configuration and associated Sender Interaction Configurations and Sender Side Effect Configurations, based on the following parameters:

  • Sender Id Root

  • Sender Id Extension

  • Receiver Id Root

  • Receiver Id Extension

Because Receiver Id Extension can have a null value, in order to support a query where in the client application searches specifically for items with Receiver Id Extension as null value, a boolean flag ReceiverIdExtensionIsNull can be set to True. If ReceiverIdExtensionIsNull is not set or set to False, the criteria matches the given root and any extension.

IMP Sender Interaction Configuration Administration Service

The IMP Sender Interaction Configuration Administration Service lets the client application create, remove, and find Sender Configurations. The code samples that follow illustrate each of these use cases:

Note:

SenderConfigFactory class is not available from 8.0.

Create Function

This code sample creates a new sender:

Example 10-1 Sample Code to Create Sender Configuration Using the newXXX Functions Returning Empty Objects

public SenderConfiguration createSenderConfiguration()
{
SenderConfiguration senderConfig = new SenderConfigurationImpl();
        senderConfig.setSenderIdRoot(SND_ROOT);
        senderConfig.setSenderIdExtension(SND_EXTN);
        senderConfig.setReceiverIdRoot(RCV_ROOT);
        senderConfig.setReceiverIdExtension(RCV_EXTN);
        SenderInteractionConfiguration senderIntrConfig = new SenderInteractionConfigurationImpl();
        senderIntrConfig.setInteractionId(INTERACTION_ID[0]);
        SenderSideEffectConfiguration sseConfig = new SenderSideEffectConfigurationImpl();
        sseConfig.setObjectRefModifierCode(SenderSideEffectConfiguration.CREATE_OR_OVERLAY);
              sseConfig.setPlayerRefModifierCode(SenderSideEffectConfiguration.CREATE_OR_OVERLAY);
        sseConfig.setMasterCatalogId(MC_IDS[0]);
        SenderSideEffectConfiguration[] sseConfigs = { sseConfig };
        senderIntrConfig.setSenderSideEffectConfiguration(sseConfigs);
        SenderInteractionConfiguration[] senderIntrConfigs = { senderIntrConfig };
        senderConfig.setSenderInteractionConfigurations(senderIntrConfigs);
        SenderConfiguration createReturn = configService.createSenderConfiguration(senderConfig);
              return createReturn;

It is not mandatory to set the Receiver Extension on the Sender Configuration because this attribute is nullable. If a reference modifier code is not set, the value, the values defaults to null.

Find Function

This code sample lets the client application retrieve a Sender Configuration using the Sender Configuration Search Criteria:

Example 10-2 Sample Code to Find Sender Configuration Using the newXXX Functions Returning Empty Search Criteria

public SenderConfiguration[] findSenderConfiguration()
{
        SenderConfigSearchCriteria criteria = new SenderConfigSearchCriteriaImpl();
        criteria.setReceiverIdRoot(RCV_ROOT);
        criteria.setReceiverIdExtension(RCV_EXTN);
        criteria.setSenderIdRoot(SND_ROOT);
        criteria.setSenderIdExtension(SND_EXTN);
        SenderConfiguration[] queriedSenderConfigs = configService.findSenderConfiguration(criteria);
        return queriedSenderConfigs;

Because all Search Criteria setters are optional, all of the records are returned if you do not set any criteria. The Receiver Extension is the only attribute that is nullable, and is thus treated differentially here. You must either set the Receiver Id Extension to a particular non-null value or set the flag using the function setReceiverIdExtensionIsNull(boolean). Setting both results in a query that ignores the value set by setReceiverIdExtension(String). The boolean flag thus takes precedence over setting of the ReceiverId Extension to a particular value. Failing to set of them either lets the user search for all records-records with both null value and non-null value Receiver Id Extension attributes.

Remove Function

This code sample permits the deletion of a particular Sender Configuration and all its child elements. The client application is expected to invoke the find function to get a handle on the Sender Configuration it wants to delete.

Example 10-3 Sample Code to delete Sender Configuration

public void removeSenderConfiguration()
{
    SenderConfigSearchCriteria criteria = new SenderConfigSearchCriteriaImpl();

        criteria.setReceiverIdExtension(RCV_EXTN);
        criteria.setSenderIdRoot(SND_ROOT);
        criteria.setSenderIdExtension(SND_EXTN);
        criteria.setReceiverIdExtensionIsNull(false);
     (RCV_ROOT, RCV_EXTN, SND_ROOT,SND_EXTN, false);
criteria.setReceiverIdRoot(RCV_ROOT);
    SenderConfiguration[] senderConfigs = configService.findSenderConfiguration(criteria);
    if (senderConfigs != null && senderConfigs.length > 0)
    {
            for (int i = 0; i < senderConfigs.length; i++)
            {
              configService.removeSenderConfiguration(senderConfigs[i]);
            }
          }
}

Examples: This section contains the following examples:

Example 10-4 Persist a Sample Message

Perform the following steps to persist a sample encounter message:

  1. Create the Receiver Organization (root="9.989898.5.100" extension = "ORG1000"), using RIM Service.

  2. Load sender and side effect configuration for the message using Bulk Load Service.

  3. Execute the program to persist the message. On successful persistence, IMP returns an acknowledgment.

Side Effect Configuration Rules

Following are the side effect processing rules enforced by IMP:Also, there are additional rules applied by RIM Services.

  1. RIM objects without IDs are always created.

  2. If side effect is not configured for a RIM Object, IMP defaults the reference modifier to MUST_EXIST.

  3. For Focal Objects, IMP overrides any side effect configuration with reference modifier to CREATE_OR_OVERLAY.

  4. If Focal Object is a role, player and scoper of the role are processed as per the side effect configuration for these entities, except Person and Unmerge messages. IMP overrides the configuration for player and scoper attached to the Focal Role of Person and Unmerge messages, with CREATE_OR_UPDATE.

  5. All side effect processing follows the traversal path through the message model. This means that side effect processing is disabled for objects downstream from an object that has been configured as MUST EXIST.

  6. If a backward/inbound participation to a role is referenced, the act that directly participates with that participation is processed as if CREATE_OR_UPDATE modifier is set on the act.

  7. Owned roles are processed following the side effect processing of the Owning Entity. If the Owning Entity is configured for the side effect reference modifier as:

    • CREATE_IF, and if it exists, the Owned Role and the associated entity are ignored.

    • MUST_EXIST, the Owned Role and the associated entity are ignored.

    • For other configurations, the Owned Role is always created or overlaid.

  8. While processing Identified Objects, the merged object is assigned with the side effect of the object with the most restrictive side effect configuration.

Example 10-5 A Sample Acknowledgement Message

Acknowledgement message returned by IMP is compliant with HL7 V3 standard. The message contains the following elements:

  • Receiver (same as respond to in the processed message).

  • Sender (same as receiver in the processed message).

  • Acknowledgement typecode.

    • AA - Message processed successfully.

    • AE - Message processing failed.

    • AR - Failed to process (reject) the message for reasons unrelated to its content or format (system down, internal error, and so on).

  • Error message, if message processing fails.

  • acknowledgementDetail. The element may be repeated couple of times, if there are multiple errors in the message. This element contains the following attributes:

    • Code: corresponding HL acknowledgement detail code.

    • Location: contains XPATH, XSD Complex Type Name, and line number of the message element responsible for the error.

    • Text: contains error message. The error text message is represented in the following format: {ERROR CODE NAME}: {ERROR MESSAGE TEXT}.

The following is a complete xml message, as it appears in an acknowledgment message:

<MCCI_MT002300HT01.Message xmlns="urn:hl7-org:v3" type="Message" xmlns:htb="http://xmlns.oracle.com/apps/ctb/messaging">
     <id root="Messsage Id root value" extension="Message Id extension value"/>
    <creationTime value="Acknowledgement creation time"/>
     <responseModeCode code="D"/>
    <interactionId root="Interaction Id root value" extension="Interaction Id extension value"/>
    <processingMode code="P"/>
     <processingModeCode code="T"/>
     <acceptAckCode code="NE"/>
     <acknowledgement type="Acknowledgement">
        <typeCode code="Type Code (AA or AE)"/>
 
   <!--Use <acknowledgementDetail> only for typecode = AE, skipped for typecode = AA -->
    <acknowledgementDetail type="AcknowledgementDetail">
      <typeCode code="E"/>
      <code code="Error Code" codeSystemName="AcknowledgementDetailCode"/>
      <text mediaType="text/plain" encoding="TXT">Error Text</text>
          <location>Error location</location>
    </acknowledgementDetail>
      <targetMessage type="Message">
         <id root="Inbound Wrapper Message Id root value" 
    extension="Inbound Wrapper Message Id extension value"/>
        </targetMessage>
      </acknowledgement>
      <receiver type="CommunicationFunction">
        <typeCode code="RCV"/>
        <device type="Device" classCode="DEV" determinerCode="INSTANCE">
          <id root="Inbound Wrapper Respond To Application Id root value"
    extension="Inbound Wrapper Respond To Application Id extension value"/>
          <asAgent type="RoleHeir" classCode="AGNT">
            <representedOrganization type="Organization" classCode="ORG" determinerCode="INSTANCE">
               <id root="Inbound Wrapper Respond To Enterprise Id root value"
      extension="Inbound Wrapper Respond To Enterprise Id extension value"/>
            </representedOrganization>
          </asAgent>
        </device>
      </receiver>
      <sender type="CommunicationFunction">
        <typeCode code="SND"/>
        <device type="Device" classCode="DEV" determinerCode="INSTANCE">
          <id root="Inbound Wrapper Target Enterprise Id root value" extension="Inbound Wrapper Target Enterprise Id extension value"/>
          <asAgent type="RoleHeir" classCode="AGNT">
            <representedOrganization type="Organization" classCode="ORG" determinerCode="INSTANCE">
              <id root="Inbound Wrapper Receiver Organization Id root value"
         extension="Inbound Wrapper Receiver Organazation Id extension value"/>
            </representedOrganization>
          </asAgent>
        </device>
      </sender>
    </MCCI_MT002300HT01.Message>

HDR Message Submission Unit

The HDR Message Submission Unit defines a structure that contains messages processed by OMP or messages received and processed by IMP. The Submission Unit is used to audit information that is related to the processing of an xml message by IMP or OMP. Every SubmissionUnit is uniquely identified by the Instance Identifier message attribute.

This package consists of two interfaces: SubmissionUnit and SubmissionUnitService. The SubmissionUnitService interface defines the mechanism for finding and updating a persisted submission unit. The SubmissionUnit interface provides methods for accessing and updating the attributes of the SubmissionUnit.

See the following section for more information about Message Submission Unit interfaces:

Message Submission Unit

This package includes two interfaces [SubmissionUnit, SubmissionUnitService] that can be used to audit the information related to the processing of an XML message by IMP or OMP. These interfaces are described in the following sections:

Task:

Find Submission Unit: Check and Resend

Submission Unit Interface

The SubmissionUnit interface defines a structure t'hat contains the messages processed by IMP or OMP. It contains get methods that can be used to track both inbound and outbound message processing.

The IMPService.processMessage method creates and updates the SubmissionUnit with the message id, acknowledgement typecode, acknowledgement message text, acknowledgement date, send date, sender id, receiver id, responder id, control act id, control act author id, original message, trigger event code, name of the application that submitted the SubmissionUnit and other related attributes. The processMessage method updates SubmittedByAppName to HTBIMP.

You can use SubmissionUnitService find methods to find a SubmissionUnit for a particular submission unit identifier or control act identifier.

Submission Unit Service Interface Methods

The SubmissionUnitService interface defines the methods for finding and updating a persisted submission unit. It contains the following finder methods to find persisted SubmissionUnits:

Submission Unit Service Interface Method

Method Description
findSubmissionUnitByControlAct(II controlActId) Returns a SubmissionUnit object with the specified control act identifier; throws ETSException
findSubmissionUnitById(java.lang.String submissionUnitId) returns a SubmissionUnit object with the specified submission unit id; throws ETSException
findSubmissionUnitByMessage(II messageId) Returns a SubmissionUnit object with the specified submission unit id; throws ETSException
updateSubmissionUnit(SubmissionUnit submissionUnit) Updates SubmissionUnit; throws ETSException
createSubmissionUnit(SubmissionUnit submissionUnit) Persists SubmissionUnit; throws ETSException

Example 10-6 Find Submission Unit: Check and Resend

Find the submission unit and check if the message generated successfully; if failed, resend the modified payload back to the receiver:

public void resendMessage(String submissionUnitId, II receiverId, II messageId)
    throws CustomerApplicationException
  {
    try {
      // Find SubmissionUnit for particular submission unit id
      SubmissionUnit subUnit =
        mSubmissionUnitService.findSubmissionUnitById(submissionUnitId);
      String ackTypeCode = subUnit.getAckTypeCode();      // If submission unit acknowledgement type code is AE, modify original message payload and 
         send it back.
      if ("AE".equals(ackTypeCode)) {
        // Get original message
        String originalMessageText = subUnit.getOriginalMessageText();
        // Modify original message
        String payload = modifyPayload(originalMessageText);
        // Resend the message
        String subId = mOMPService.resendMessage(payload, receiverId, messageId);
      }
    } catch (ETSException ETSException) {
      throw new CustomerApplicationException(ETSException.getMessage());
    }
  }  public String modifyPayload(String originalMessageText) {
    ...
    ...
    return payload;
  }

HDR RIM Service Hook

RIM Services raise workflow business events to which applications can subscribe. You can write subscription classes to listen to such events. This provides a loose coupling with the RIM Service that lets you integrate or disintegrate unique functionality by subscribing or unsubscribing to business events.

With this hook, you can code a Subscription Class subscribed to a business event; you are expected to include custom functionality in this class. The following sequence figure 10.4.1 illustrates the interaction between an application persisting data and a custom Subscription class:

Figure 10-2

Figure 10-3 Interaction between App Persisting Data and Custom Subscription Class

Description of Figure 10-3 follows
Description of ''Figure 10-3 Interaction between App Persisting Data and Custom Subscription Class''

The following sections describe the RIM Service Event and Subscription, and include a Subscription Code Example:

Event and Subscription

The RIM Service raises event oracle.hsgbu.hdr.hl7.persist.event.ControlActSubmissionPost on submit. It passes trigger event and control act identifiers of the persisted data to the event in key-value pairs:

Keys

Key Description
TRG_EVNT Trigger event of persisted message
CONTROL_ACT_ID Control act identifier root of persisted message
CONTROL_ACT_EXT Control act identifier extension of persisted message.

Example 10-7 Event and Subscription

When RIM Service raises the event oracle.hsgbu.hdr.hl7.persist.event.ControlActSubmissionPost, workflow calls the onBusinessEvent method of the customer subscription class. All of the forgoing parameters are bundled in the BusinessEvent object and passed to the subscription class. The Subscription class can read those parameters in its onBusinessEvent method as illustrated in the following example:

public void onBusinessEvent(Subscription eo, BusinessEvent event, WorkflowContext wfCxt)
    throws BusinessEventException
 {
   try {
     String TriggerEvent = event.getStringProperty("TRG_EVNT");
     String ControlActId_Root = event.getStringProperty("CONTROL_ACT_ID");
     String ControlActId_Extension = event.getStringProperty("CONTROL_ACT_EXT"); 
     ...
   } catch (Exception e) {
     e.printStackTrace();
   }
 }

Subscription Code Sample

The RIM Service receives an HL7 message, persists and resends the message to all organizations registered for that trigger event.

The functionality to resend the message to all organizations registered for the trigger event can be implemented in a subscription class to be executed when the RIM Service persists that message.

Example 10-8 Subscription Code Example

package oracle.hsgbu.hdr.sample.scenario;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Properties;
import oracle.hsgbu.hdr.fwk.base.common.ETSException;
import oracle.hsgbu.hdr.fwk.serviceLocator.common.ServiceLocator;
import oracle.hsgbu.hdr.hl7.domain.NullFlavor;
import oracle.hsgbu.hdr.hl7.factories.DataTypeFactory;
import oracle.hsgbu.hdr.hl7.types.II;
import oracle.hsgbu.hdr.hl7.types.ST;
import oracle.hsgbu.hdr.hl7.types.UID;
import oracle.hsgbu.hdr.message.omprocessor.ControlActRequest;
import oracle.hsgbu.hdr.message.omprocessor.OMPHelper;
import oracle.hsgbu.hdr.message.omprocessor.OMPService;
import oracle.hsgbu.hdr.security.Responsibility;
import oracle.hsgbu.hdr.security.SessionContext;
import oracle.hsgbu.hdr.security.SessionService;
import oracle.apps.fnd.wf.bes.BusinessEvent;
import oracle.apps.fnd.wf.bes.BusinessEventException;
import oracle.apps.fnd.wf.bes.SubscriptionInterface;
import oracle.apps.fnd.wf.bes.server.Subscription;
import oracle.apps.fnd.wf.common.WorkflowContext;
 public class WorkflowListenerSubscription implements SubscriptionInterface {
 protected ServiceLocator mServiceLocator = null;  
 public void onBusinessEvent(Subscription eo,
 BusinessEvent event,
 WorkflowContext wfCxt)
 throws BusinessEventException
 {
   try {
   // Get OMPService      
   OMPService mOMPService = getServiceLocator().getOMPService();
   // Read parameres passed by RIM Service persistence.
   String triggerEvent = event.getStringProperty("TRG_EVNT");
   String controlActId_Root = event.getStringProperty("CONTROL_ACT_ID");
   String controlActId_Ext = event.getStringProperty("CONTROL_ACT_EXT");
   DataTypeFactory mDataTypeFactory = DataTypeFactory.getInstance(getServiceLocator());
   UID uidVal = mDataTypeFactory.newUID(controlActId_Root);
   ST extVal = mDataTypeFactory.newST(controlActId_Ext);
   II controlActId = mDataTypeFactory.newII(uidVal, extVal, mDataTypeFactory.nullBL(NullFlavor.NI));
   // Create ControlActRequest
   OMPHelper ompHelper = new OMPHelper();
   ControlActRequest ompCACTRequest = ompHelper.newControlActRequest();
   ompCACTRequest.setControlActId(controlActId);
   ompCACTRequest.setTriggerEvent(triggerEvent);
   // Generate message
   mOMPService.generateMessage(ompCACTRequest);r
   } catch (Exception e) {     
     throw new BusinessEventException(e.getMessage());
   }
 }
 protected ServiceLocator getServiceLocator() throws ETSException,IOException {
   if (mServiceLocator != null) {
     return mServiceLocator;
   }
   ClassLoader loader = Thread.currentThread().getContextClassLoader();
   Properties props = new Properties(); 
   props.load(loader.getResourceAsStream("jndi.properties"));
   //Specify Client mode: Local or Remote 
   props.setProperty(ServiceLocator.CLIENT_MODE, ServiceLocator.REMOTE); 
   ServiceLocator mServiceLocator = ServiceLocator.getInstance(props); 
   mServiceLocator.login("sysadmin","sysadmin");
   return mServiceLocator;
   }
  }

See Also:

  • Oracle Workflow Administrator's Guide

  • Oracle Workflow API Reference

  • Oracle Workflow Developer's Guide

  • Oracle Workflow User's Guide

HDR Messaging Toolkit

Oracle Healthcare Data Repository (HDR) is a healthcare application development platform that exchanges healthcare information with external applications using the HL7 Version 3 Messaging Standard.

HDR ships with predefined message specifications for a comprehensive set of domains (subject areas), such as Encounter Management, Patient Care, Lab, and Public Health. Each such specification is called a Message Type. For each predefined Message Type, the inbound and outbound message processors have access to Message Type related files and data (XSD, MIF, Composite Message Schema, cmetinfo.coremif, and seeded metadata) that help them use and generate conformant XML instances.

The HDR Messaging Toolkit (MTK) provides you with a mechanism to specify custom message types, to facilitate HDR interoperation with other healthcare applications, and to suit your specific business requirements. MTK lets you perform validation and setups necessary to support custom messages types.

MTK Workflow

The following figure displays the process for creating and persisting custom message types using MTK:

Figure 10-4 Workflow for Creating and Persisting Custom Message Types Using MTK

Description of Figure 10-4 follows
Description of ''Figure 10-4 Workflow for Creating and Persisting Custom Message Types Using MTK''

To create and persist a new custom Message Type using MTK:

  1. Create an RMIM for a custom message type in any one of the following ways:

    • Designing the RMIM from scratch.

    • Modifying an Oracle-published artifact to suit your business requirements. For more information on Oracle-published artifacts, refer to the Oracle Healthcare Data Repository Conformance Specification.

    • Using an HL7 normative artifact. For more information, refer to the HL7 website (www.hl7.org).

  2. Generate the associated schema and MIF files. If the Message Type has any Common Message Element Type (CMET) references (either Oracle-published or custom) you must create a cmetinfo.coremif file.

  3. Load the XSD and MIF files into MTK. MTK performs some tasks as described in the following sections and generates reports.

  4. Use these reports to configure HDR to support these custom Message Types.

For more information on how to implement a new Message Type, refer to the Implement a New Message Type section.

Note:

The process of testing a custom message using MTK does not affect the data in HDR or existing configurations of HDR.

MTK accepts the XSD, MIF, and cmetinfo.coremif files of a custom message type as the input and performs the following:

  1. Validates inputs.

  2. Generates the configuration reports.

  3. Generates instances with minimal manual intervention.

  4. Tests the instances for compatibility with HDR.

  5. Sets up Message Type.

Validating Inputs

MTK validates the inputs for the following:

  • The Message Type must have both the XSD and MIF files.

  • The custom CMETS referenced by Message Types must be present.

  • The cmetinfo.coremif file must be provided if the Message Type has any reference to the CMETs.

  • The contents of the corresponding XSD and MIF files must match.

After successful input validation, MTK loads the submitted artifacts into a test folder and generates related metadata.

Generating Configuration Reports

MTK generates configuration reports to help you port (or create) configurations related to the custom message into the production environment. These reports are generated in plain text or CSV format. The downloaded configuration can be loaded into a different HDR instance by using the respective messaging configuration service or by converting the data into SQL loader format.

Note:

Use these reports as an aid for creating the configuration reports to set up the message type in the production environment. These reports are not to be considered as the actual report.

Configuration Reports

Report Name Report Format Description
Master Catalog CSV Lists the Acts, Roles, and Entities missing from Master Catalog for a given Message Type. You can use this report to create the appropriate Act Concept configurations in the production environment.
Side Effect Configuration CSV Lists all objects that require side effect configurations for a given Message Type. This report lists the side effect configurations for a given Message Type with the master catalog entries relating to the code type ANY. The reference modifier used in the report for the objects will be Create or Overlay. You can use this report to create the appropriate Act Concept configurations in the production environment.
Act Concept Configuration Plain Text Lists the ambiguous complexes found in the Custom Message Type Schema. You can use this report to create appropriate Act Concept configurations in the production environment.

Generating Instances

Based on the constructs available, MTK generates one or more message instances. MTK uses dummy data to generate message instance. The data for the message instance will be drawn from the data seeded in HDR. MTK follows certain rules and logic while generating the instance.

Testing Instance

MTK tests the instance for the following:

  • Generation of configuration data: Inbound Message Processor (IMP) and Outbound Message Processor (OMP) configurations required by HDR to process a Message Type are created by MTK. These configurations will be rolled back after completing the test. For information on Sender, Receiver, Interaction, and Trigger event ID, refer to the Oracle Healthcare Data Repository HL7 Version 3 Conformance Specification.

  • Persistence of the generated MTK message instance into HDR using IMP: Once the instance(s) are generated, MTK invokes the IMP services to persist the message.

  • Generation of OMP instance: After persisting the message instance(s) successfully using IMP, MTK invokes OMP services to generate outbound instances.

  • Logging of output status along with Test ID: A unique Test Id will be generated for each test requested. The format of the Test Id is {ArtifactID}_{User ID}_{Test Date}.

Setting Up Message Type

MTK also helps users to upload the successfully tested Message Type's files onto the production environment. The Message Types loaded on the production environment can be browsed and managed using MTK Services.

Messaging Toolkit (MTK) Services

Use the oracle.apps.ctb.message.mtk package for this purpose.

Following are the MTK services:

  • oracle.apps.ctb.message.mtk.MtkTestService

  • oracle.apps.ctb.message.mtk.MtkProductionLoadService

For detailed description of the APIs provided by these MTK services, refer to the HDR Javadoc.

HL7 Message Development Process

To utilize MTK to set up custom message types, you must understand the HL7 V3 process by which message types are specified.

The following steps summarize the MTK process for specifying message types:

  1. Develop storyboards and use cases that provide requirements for the content and transactions of messages.

  2. Use the HL7 RMIM Designer to produce an RMIM for a message type based on the content requirements from the previous step. Refer to the HL7 website (www.hl7.org ) for more information on RMIM Designer.

  3. Use the HL7 Schema Generator to convert RMIM Designer output into XML schema definition files (XSDs) and Message Interchange Format files (MIF). Refer to the HL7 website (www.hl7.org ) for more information on Schema Generator.

Note:

For each type of message specified, one pair of XSD and MIF files are produced that define the structure and constraints of the message. In addition, if CMETs were used in defining the message a cmetinfo.coremif file is generated.

Implement a New Message Type

A new Message Type can be implemented in HDR using the MTK Services.

The following are the prerequisites for using MTK:

  • Tools

    Either download the tools provided by HL7 or use your own tools to generate the Schema and MIF files of a new Message Type. The tools used to generate a schema must also generate the required MIF files.

    Note:

    MTK is tested with artifacts created on:
    • HL7 RIM repository v2.14.1

    • RMIM Designer - 4.3.2

    • RoseTree - 4.0.12

    • Schema Generator - 3.0.4

  • Concept Lists

    Identify from the Javadoc the Concept List used by the attributes of the new Message Type's objects. Ensure those Concept List have concepts in them.

    Note:

    If any of the Concept List used by a new Message Types Object attribute is empty, an error is thrown by MTK and the Message Type is not processed.
  • Datatypes and VOC files

    datatypes.xsd, datatypes-base.xsd, and voc.xsd files are available for download from the Test Message Types window of the MTK Service. You can use these files in the schema generation tool to create a Schema and MIF files for the new Message Type.

Procedure

The following figure illustrates the process of implementing a new message type.

Figure 10-5 Implement New Message Type Using MTK

Description of Figure 10-5 follows
Description of ''Figure 10-5 Implement New Message Type Using MTK''

Test a New Message Type

Use the MTK Service Functions or MTK Services to test a new Message Type. Ensure that you have the following inputs for the testing process:

  • Message Type's Schema and MIF files.

  • Schema and MIF files of the custom CMETs referenced by the Message Type.

  • cmetinfo.coremif file listing all the CMETS (Oracle published and custom) referenced by the Message Type. Note that the entries of the non-referenced CMET in the cmetinfo.coremif file are ignored.

  • Comments relating to the test.

MTK uses the following process to test a new Message Type:

  1. Initial Validation:

    Once the input files are submitted, MTK validates if:

    • Message Type is present.

    • Message Type has the XSD and MIF files.

    • Custom CMETs referenced by Message Type are present.

    • cmetinfo.coremif file with proper entries is provided.

  2. Loading onto Server:

    MTK loads the test files provided on the server in a test folder. This folder will be named in the format {Artifact ID}_{User ID}_{Test Date}.

  3. Generating Metadata:

    Metadata of those files is generated and persisted in the server.

  4. Interaction:

    A test interaction ID based on the artifact ID is created and inserted in the interaction table.

  5. Composite Message Schema

    Using the test interaction created Composite Message Schema is generated.

  6. Metadata for Composite Message Schema:

    From the Composite Message Schema, metadata for the Composite Message Schema is generated and stored in the server.

  7. Reports:

    Reports for ambiguous complex types, missing Master Catalog entries, sender side effect configurations is generated.

  8. Generating Test Instance:

    Data for instance will be fetched from:

    • Schema for the structural attribute;

    • Database for non-structural, non-identity, and non-coded attributes (Use the data snippets seeded in HDR);

    • Concept list for coded attributes tied to a concept list;

    • Coding scheme based on their type for coded attributes not tied to a concept list.

  9. Generating and Loading Configurations:

    • Missing Master Catalog Data: Based on the schema file the Master catalog entries are scanned to check if any of the entries are missing. The master catalog entries scanned is of the ID type ANY. If they are found missing, those entries are created.

    • Act Concept: If the Message Type has any ambiguous complex types, Act Concept configurations for those complexes will be created in the server.

    • Sender and Receiver Configurations: Using the test Sender and Receiver IDs, records relating to sender and receiver configurations will be created.

  10. Persisting and Generating Instance Into and From HDR:

    Invoke the HDR IMP Service to persist the MTK generated instance. HDR supports object attributes, datatype and its attributes, and vocabulary content.

    Invoke the HDR OMP service to generate the persisted MTK instance.

  11. Display the Status:

    If the test is successful, a message indicating that the message type has been tested successfully is displayed. If some error occurs during the processes described above, error message is displayed.

    Hyperlinks to download the files generated by the process (including test status file, IMP, and OMP instances of the test message type) are displayed.

Using the MTK Services for Testing

For more information on the services you can use for testing, refer to the Using the MTK Services section.

Verify the Test Files

This step is the final step in testing the Message Type and is required to verify if the instance generated from MTK and the one generated from HDR using OMP are the same with the exception of known differences. Once the test process is successful, download the MTK and OMP generated instance using the hyperlinks displayed in the MTK Service. Use a file compare utility, to verify the instances.

Note:

MTK does not provide an option or tools to compare MTK and OMP generated instances.

Set Up Message Types

Setting up Message Types is required if messages based on the Message Type have to be processed by HDR. To set up successfully tested Message Types in HDR:

  • Loading Message Types

  • Configuring IMP and OMP

Load Message Types

For messages to be processed, the files relating to the Message Type must be loaded onto the server. To load Message Type provide the following inputs:

  • XSD and MIF files of the Message Types.

  • XSD and MIF files of the CMETS referenced by the Message Types. Note that only custom CMETS must be provided. Do not provide any Oracle published CMETS if the Message Type references these.

  • cmetinfo.coremif file must have a list of all the CMETS (Oracle published and custom) referenced by the Message Type.

  • MTK Services: Refer to the Setting Up a New Message Type section for details on loading successfully tested custom Message Types onto a production server using Java API.

Use the MTK Services for Testing

For more information on the services you can use for loading Message Types, refer to the Using the MTK Services section.

Configure IMP and OMP

In IMP, configure the following:

  • Trigger Event

  • Interactions

  • Sender

  • Sender Interaction

  • Sender Side Effect

In OMP, configure the following:

  • Receiver

  • Receiver vocabulary

  • Act Concept

Note:

Oracle Healthcare Data Repository Implementation and System Administrator Guide for more information on configuring IMP and OMP.

Use the MTK Services

This section lists details of services that help to test custom Message Types and setup custom Message Types, along with code samples. For more information on MTK Services, refer to Oracle Healthcare Data Repository Javadoc.

Test Custom Message Types

To test a custom Message Type, perform the following steps:

  1. Initialize the ServiceLocator.

  2. Create MtkTestService.

  3. Invoke the testCustomMessageType() method of MtkTestService.

If the Message Type testing is successful, the method returns an unique Test Id. If the testing is not successful, the method throws CTBException and the Test Id can be obtained from TEST_ID parameter of the CTBException instance. The files submitted for testing as well the ones generated by MTK will be loaded in a folder with the test ID name.

The following table summarizes the service and methods referenced by this section:

Service and Methods: Testing Message Type

Level Detail
Package oracle.apps.ctb.message.mtk
Class MtkTestService
Methods
  • downloadTestFilesForATest
  • getMatchingTestIds

  • getTestStatus

  • removeTestFilesForATest

  • testCustomMessageType


Note:

Oracle Healthcare Data Repository Javadoc (oracle.apps.ctb.message.mtk.MtkTestService)

Example 10-9 Use the MTKTestService API

//Initializing Service Locator:
  ServiceLocator serviceLocator = ServiceLocator.getInstance();
  serviceLocator.login("username", "password");
 
   //Payload Xsd and Mif
   String  payloadXsdName = {”prpa_mt203000ht04.xsd”};
   String  payloadMifName = {”prpa_mt203000ht04.mif”};
 
   //Cmet Xsds and Mifs, referred by the Payload.
   String [] cmetXsdNames  =  { ”coct_mt030202ht04.xsd”,
  ”coct_mt030200ht04.xsd”, ”coct_mt150002ht02.xsd”,
  ”coct_mt150000ht04.xsd”, ”coct_mt030202ht04.xsd”};
 
  String [] cmetMifNames  =  { ”coct_mt030202ht04.mif”,
  ”coct_mt030200ht04.mif”, ”coct_mt150002ht02.mif”,
  ”coct_mt150000ht04.mif”, ”coct_mt030202ht04.mif”};
 
    //CoreMif name.
   String coreMifName =”cmetinfo.coremif”;
 
  //Initializing SchemaInformation 
  SchemaInformation [] schemaInfo = new SchemaInformation [7];
 
  //Populating SchemaInformation List with values.
  for(int i=0; i< cmetXsdNames.length; i++)
  {
      String xsdContent = readFileContent(cmetXsdNames[i]);
      String mifContent = readFileContent(cmetMifNames[i]);
      String artifactID = cmetXsdNames[i].replaceAll(”.xsd”, ””);
      schemaInfo[i] = new SchemaInformation();
      schemaInfo[i].setXsd(xsdContent);
      schemaInfo[i].setMif(mifContent);
      schemaInfo[i].setSchemaType(SchemaInformation.CMET);
      schemaInfo.setArtifactID(artifactID);
  }
 
  //Populating payload.
  String xsdContent = readFileContent(payloadXsdName);
  String mifContent = readFileContent(payloadMifName);
  String artifactID = payloadXsdName.replaceAll(”.xsd”,””);
  schemaInfo[i] = new SchemaInformation();
  schemaInfo[i].setXsd(xsdContent);
  schemaInfo[i].setMif(mifContent);
  schemaInfo[i].setSchemaType(SchemaInformation.PAYLOAD);
  schemaInfo.setArtifactID(artifactID);
 
  //Populating CoreMif.
  i++;
  String coreMifContent = readFileContent(coreMifName);
  schemaInfo[i] = new SchemaInformation();
  schemaInfo[i].setMif(coreMifContent);
  schemaInfo[i].setSchemaType(SchemaInformation.CORE_MIF);
  schemaInfo[i]. setArtifactID(coreMifName);
 
  String testDesc = ”PRPA_MT203000HT04  - Message Type testing on 16-Jan-2008.”;
  boolean generateReport = true;
  String testID = null;
  MtkTestService mtkTestService = null;
 
  //calling MtkTestService#testCustomMessageType()
  try
  {
     mtkTestService = serviceLocator.getMtkTestService();
     testID =
     mtkTestService.testCustomMessageType(schemaInfo,testDesc,
     generateReport); 
    }
   catch(CTBException ctbException)     
   {
      //Incase of CTBException, the TEST_ID can be retrieved from
      // CTBException instance.
      testID = (String)ctbException.getParameter(”TEST_ID”);
   }

Example 10-10 Searching for Test ID

//Initializing Service Locator:
  ServiceLocator serviceLocator = ServiceLocator.getInstance();
  serviceLocator.login("username", "password");
  //search key
  String searchKey = ”%PRTS%MT%”;
  String [] matchingTestIDs = null;
  MtkTestService mtkTestService = null;
 
  //invoke getMatchingTestIDs()  API. 
  try
  {
    mtkTestService = serviceLocator.getMtkTestService();
    matchingTestIDs  = mtkTestService.getMatchingTestIDs(searchKey);
  }
  catch(CTBException ctbException)
  {
      //handle or re-throw the exception
  } 

Example 10-11 Downloading Test ID Files

//Initializing Service Locator:
 ServiceLocator serviceLocator = ServiceLocator.getInstance();
 serviceLocator.login("username", "password");
 
// Input Test ID
String testID = ”PRTS_MT000008TK01_611521202”;
TestIDData testIDData = null;
 MtkTestService mtkTestService = null;
 
//Invoke downloadTestFilesForATest() API
 try 
 {
   mtkTestService = serviceLocator.getMtkTestService();
   testIDData = mtkTestService.downloadTestFilesForATest(testID);
} 
catch(CTBException ctbException)
{
  //handle or re-throw the exception
}
 
//retrieving data from TestID object
String messageTypeID = testIDData.getPayloadID();
String masterCatalogReportContent = testIDData.getMasterCatalogReport();
String sIDeEffectReportContent = testIDData. getSIDeEffectReport();
String actConceptReportContent = testIDData.getAmbiguousComplexTypeReport();
String userComments = testtIDData.getUserComment();
TestMessage[] testMessage = testIDData.getTestMessage();
 
 for (int i = 0; i < testMessage.length; i++)
 {
   String testMessage = testMessage[i].getTestMessage();
   String generatedMessage = testMessage[i].getGeneratedMessage();
 } 
 SchemaInformation[] schemaInfo = testIDData.getSchemaInformation();

Example 10-12 Deleting Test ID Files

//Initializing Service Locator:
 ServiceLocator serviceLocator = ServiceLocator.getInstance();
serviceLocator.login("username", "password");
 
//Input Test ID
String testID = ”PRTS_MT000008TK01_611521202”;
MtkTestService mtkTestService = null;
 
//Invoke removeTestFilesForATest() API
try
{
mtkTestService = serviceLocator.getMtkTestService();
mtkTestService. removeTestFilesForATest(testID);
}
catch(CTBException ctbException)
{
//handle or re-throw the exception
}

Setting Up a New Message Type

To load and manage the successfully tested new Message Types onto a new environment,

  1. Initialize ServiceLocator.

  2. Create MtkProductionLoadService.

The following table summarizes the service and methods referenced by this section:

Service and Methods: Setting Up a New Message Type

Level Detail
Package oracle.apps.ctb.message.mtk
Class MtkProductionLoadService
Methods
  • createCompositeMessageSchema
  • deleteInteractionSchema

  • deleteSchemas

  • fetchCompositeMessageShemasByPayload

  • fetchCustomCMETsForPayload

  • fetchSchemas

  • loadCustomMessageTypeToProductionServer

  • loadSchemas


Note:

Oracle Healthcare Data Repository Javadoc (oracle.apps.ctb.message.mtk.MtkProductionLoadService)

Example 10-13 Search for Message Types

//Initializing Service Locator:
 ServiceLocator serviceLocator = ServiceLocator.getInstance();
serviceLocator.login("username", "password");
 
//Message Type ID
String [] messageTypeID= { ”PRPA_MT203000HT04”};
SchemaInformation [] schemaInfo = null;
 
try
 {
  //Getting MtkProductionLoadService
  mtkProductionLoadService = serviceLocator.getMtkProductionLoadService();
 
 //Calling fetch API 
 schemaInfo = mtkProductionLoadService.fetchSchemas (messageTypeID) ;
}
catch(CTBException ctbException)
{
  //…handle or re-throw the exception
}
 
if (schemaInfo.length == 0 ) // If  Message Type not already uploaded.
{
//…Invoke loadCustomMessageTypeToProductionServer() API
}

Example 10-14 Loading Custom Message Types

//Initializing Service Locator:
 ServiceLocator serviceLocator = ServiceLocator.getInstance();
 serviceLocator.login("username", "password");
 
   //Payload Xsd and Mif
 String  payloadXsdName = {”prpa_mt203000ht04.xsd”};
 String  payloadMifName = {”prpa_mt203000ht04.mif”};
 
 //Cmet Xsd and Mif, referred by the Payload.
 String [] cmetXsdNames  =  { ”coct_mt030202ht04.xsd”, ”coct_mt030200ht04.xsd”, ”coct_mt150002ht02.xsd”, ”coct_mt150000ht04.xsd”, ”coct_mt030202ht04.xsd”};
String [] cmetMifNames  =  { ”coct_mt030202ht04.mif”, ”coct_mt030200ht04.mif”, ”coct_mt150002ht02.mif”, ”coct_mt150000ht04.mif”, ”coct_mt030202ht04.mif”};
 
 //CoreMif name.
  String coreMifName =”cmetinfo.coremif”;
 
 //Initializing SchemaInformation 
  SchemaInformation [] schemaInfo = new SchemaInformation [7];
 
  //Populating SchemaInformation List with values.
  for(int i=0; i< cmetXsdNames.length; i++)
{
      String xsdContent = readFileContent(cmetXsdNames[i]);
      String mifContent = readFileContent(cmetMifNames[i]);
      String artifactID = cmetXsdNames[i].replaceAll(”.xsd”, ””);
      schemaInfo[i] = new SchemaInformation();
      schemaInfo[i].setXsd(xsdContent);
      schemaInfo[i].setMif(mifContent);
      schemaInfo[i].setSchemaType(SchemaInformation.CMET);
      schemaInfo.setArtifactID(artifactID);
  }
 
 //Populating payload.
  String xsdContent = readFileContent(payloadXsdName);
  String mifContent = readFileContent(payloadMifName);
  String artifactID = payloadXsdName.replaceAll(”.xsd”,””);
  schemaInfo[i] = new SchemaInformation();
  schemaInfo[i].setXsd(xsdContent);
  schemaInfo[i].setMif(mifContent);
  schemaInfo[i].setSchemaType(SchemaInformation.PAYLOAD);
  schemaInfo.setArtifactID(artifactID);
 
//  Populating CoreMif.
  i++;
 String coreMifContent = readFileContent(coreMifName);
 schemaInfo[i] = new SchemaInformation();
schemaInfo[i].setMif(coreMifContent);
                                schemaInfo[i].setSchemaType(SchemaInformation.CORE_MIF);
schemaInfo[i]. setArtifactID(coreMifName);
 
 MtkProductionLoadService mtkProductionLoadService = null;
  try
  {
     //Getting MtkProductionLoadService
     mtkProductionLoadService = serviceLocator. getMtkProductionLoadService();
     //Calling upload API               
     mtkProductionLoadService.loadCustomMessageTypeToProductionServer(schemaInfo);
  }
 catch(CTBException ctbException)
 {
  //handle or re-throw the exception
 }

Example 10-15 Fetch Custom CMETs

String messageTypeID= "POXX_MT111000HT02”;
SchemaInformation [] schemaInfo = null;
MtkProductionLoadService mtkProductionLoadService = null;
 
try
{ 
//Getting MtkProductionLoadService
mtkProductionLoadService = serviceLocator.getMtkProductionLoadService();
//Calling fetch API
schemaInfo = mtkProductionLoadService. FetchCustomCMETsForPayload
(messageTypeID) ;
}
catch(CTBException ctbException)
{
//…handle and re-throw the exception
}

Example 10-16 Fetch Composite Message Schema

String messageTypeID= "POXX_MT111000HT02”;
SchemaInformation [] schemaInfo = null;
try
{
//Getting MtkProductionLoadService
mtkProductionLoadService = serviceLocator.getMtkProductionLoadService();
//Calling fetch API
schemaInfo = mtkProductionLoadService. FetchCompositeMessageShemasByPayload
(messageTypeID) ;
}
catch(CTBException ctbException)
{
//…handle and re-throw the exception
}

Note:

SchemaInformation object will not contain MIF content for an Interaction Schema.

Example 10-17 Deleting a Schema

String [] schemas = {  "coct_mt930002ht03.xsd", "poxx_mt111000ht02.xsd"};
 
MtkProductionLoadService mtkProductionLoadService = null;
 
try
{
   //Getting MtkProductionLoadService
    mtkProductionLoadService = serviceLocator.getMtkProductionLoadService();
    //Calling delete API
    mtkProductionLoadService. deleteSchemas (schemas) ;
}
catch(CTBException ctbException)
{
  //…handle or re-throw exception
 }

Sample Exercise Using MTK Services

  • Prerequisites and Tools

  • Creating a New Message Type or Modifying an Existing Message Type

  • Generating Schema (XSD) and MIF Files for the Modified Messages

Prerequisites and Tools

The following tools are used in the process of testing a custom message and generating message instances for the custom messages.

  • Microsoft® Visio 2002 SP - 2 version 10.0.6871

  • HL7 RIM repository version 2.14.1

  • HL7 RMIM Designer version 4.3.2

  • HL7 Schema Generator version 3.0.4

Note:

The steps described in the following sections were performed using the tools listed above, and may not produce expected results if executed using versions other than those specified above.

Creating a New Message Type or Modifying an Existing Message Type

For the purpose of this sample exercise, a modified version of the HDR-published domain Message Type Person Registry (PRPA_RM201000HT03) and a modified version of the HDR-published CMET E_Person (COCT_RM030202HT04) are used.

  1. Use the RMIM Designer to modify the CMET E_Person (COCT_RM030202HT04) as follows:

    1. In the focal class Person, add an attribute educationLevelCode: CE CWE [0..1] < EducationLevel

    2. Change the name of the CMET to E_Person_Custom and the CMET code ID to COCT_RM030202TK01

      Figure 10-6

      Surrounding text describes Figure 10-6 .
    3. Validate and save the Visio file as COCT_RM030202TK01.vsd. When you save the Visio file, the RMIM designer will automatically create the COCT_RM030202TK01.xml file.

  2. In the CMETInfo.txt file that is referred by RMIM designer, include an entry for the custom CMET as follows:

    E_Person_Custom,COCT_MT030202TK01,PSN,Entity,Custom Person CMET for testing MTK,identified/confirmable.

  3. Modify the message domain Person Registry (PRPA_RM201000HT03) as follows:

    1. In the class Employment (Person => Employment), add the following attributes:


      salaryTypeCode: CE CWE [0..1] < EmployeeSalaryType
      salaryQuantity: MO [0..1]
    2. Replace all references to the CMET E_Person (PSN) [identified/confirmable] (COCT_MT030202HT04) with E_Person_Custom (PSN) [identified/confirmable] (COCT_MT030202TK01).

    3. Change the name of the RMIM to Person Registry Custom and the RMIM IDcode to PRPA_RM201000TK01.

      Figure 10-7 Custom Message Person_Registry_Custom (PRPA_RM201000TK01)

      Surrounding text describes Figure 10-7 .
    4. Validate and save the Visio file as &rsquor;PRPA_RM201000TK01.vsd'.

    5. Verify that Visio automatically generates a file &rsquor;PRPA_RM201000TK01.xml'.

Generate Schema (XSD) and MIF Files for the Modified Messages

Use the Schema Generator generate schema and MIF files for the modified messages as follows:

  1. Copy the files PRPA_RM201000TK01.xml and COCT_RM030202TK01.xml in the following folder:

    <Schema Generator Root Folder>\InputFiles\VisioModelXmlFiles\

    Note that this folder must contain the xml files corresponding to all the CMETs that are used directly or indirectly by the message PRPA_RM201000TK01.

  2. Modify the file <Schema Generator Root Folder>\InputFiles\CommonSourceFiles\cmetInfoExport.txt to include following entry:

    E_Person_Custom,COCT_MT030202TK01,PSN,Entity,Custom Person CMET for testing MTK,identified/confirmable

  3. Ensure that the file <Schema Generator Root Folder>\InputFiles\configuration.txt includes the following setting:

    generateSchemas = true

  4. Execute the file <Schema Generator Root Folder>\runlogged.bat

  5. Upon completion of execution, view the file <Schema Generator Root Folder>\OutputFiles\generator.log for any errors and rectify them.

  6. After successful execution:

    • Schema Generator should generate the schema and MIF files for custom messages in following folders:

      <Schema Generator Root Folder>\OutputFiles\Schemas\

      <Schema Generator Root Folder>\OutputFiles\MIF\

      Verify that Schema Generator has generated following files:

      PRPA_MT201000TK01.xsd, PRPA_MT201000TK01.mif

      COCT_MT030202TK01.xsd, COCT_MT030202TK01.mif

    • Schema Generator should automatically update the following file:

      <Schema Generator Root Folder>\OutputFiles\MIF\cmetinfo.coremif

      and include a new entry for the custom CMET &rsquor;COCT_RM030202TK01'

      Verify that appropriate details of the custom CMET are included in the file cmetinfo.coremif

Generate Test Messages Using MTK Service

Refer to the Use the MTK Services section to test the newly created message type artifacts and retrieve the test messages generated by MTK test API.

Generating Custom Message Types

You can create custom artifacts either by using RMIM or by using the artifacts published by HL7. Ensure that you give valid names for the custom messages. You must ensure that:

  • Realm code in the artifact ID must be other than HT.

  • CMET names must be different from the Oracle-published CMET names.

Note:

  • Oracle will not provide tools to design artifacts and its associated files. You have to use the tools provided by HL7 or create your own tools.

  • The tools used to generate schema must also generate MIF files.

  • MTK is tested with artifacts created on:

    • HL7 RIM repository v2.14.1

    • HL7 RMIM Designer v4.3.2

    • RoseTree v4.0.12

    • HL7 Schema Generator v3.0.4

Generating Custom Artifacts Using RMIM

RMIMs can be created in one of the following ways:

  • Modifying the RMIM of the Oracle-published Message Types.

  • Downloading and modifying the RMIM of the HL7-published normative Message Types.

  • Creating a new RMIM for a Message Type RMIM.

Once the RMIMs are created, save the RMIM in a repository. Provide the XML of the RMIM as input to the tools generating the Schema.

Generating Custom Artifacts Without Using RMIM

To generate a custom Artifact without using an RMIM, you can do one of the following:

  • Modify Oracle-published XSD and MIF files.

  • Download and modify HL7-published XSD and MIF files.

Logic for Instance Generation

MTK uses the following logic to generate a test instance:

  • Custom Message Types and CMETs are filled with default data even if they are optional items.

  • CMETs that are mandatory are filled with data irrespective of whether they are Oracle published or custom CMETs.

  • Items (Classes, CMETs, and Attributes) in custom artifacts (Message Type, CMETs) are handled using the following logic:

    Mandatory Items

    • Classes and CMETs with {1..1, 1..N, and 1..*} cardinality are filled only once.

    • Recursions with {1..1, 1..N, and 1..*} cardinality are filled once and only one level is filled.

    • Coded Attributes with {1..1, 1..N, and 1..*} cardinality are filled only once.

    • Non-coded attributes with {1..1} cardinality are filled only once.

    • Non-coded attributes with {1..N and 1..*} cardinality are filled twice.

    • Choices with 0..* or 1..* are repeated as many number of times as the number of objects in the choice to fill all the objects within the choice.

    Optional Items

    • Classes and CMETs with {0..1, 0..N, and 0..*}, cardinality are filled once.

    • Recursions with {0..1, 0..N, and 0..*} cardinality are filled once and only one level is filled.

    • Attributes (Coded and Non-Coded) with {0..1, 0..N, and 0..*} cardinality are not filled.

    • Choices with {0..1, 0..N, and 0..*}cardinality are filled only once.

  • Items (Classes, CMETs, and Attributes) relating to Oracle-published CMETs are handled using the following logic:

    Mandatory Items

    • Classes and CMETs with {1..1, 1..N, and 1..*}, cardinality are filled only once.

    • Within the mandatory CMETs, only mandatory classes with {1..1, 1..N, and 1..*} cardinality are filled with data, and only the attributes with {1..1, 1..N, and 1..*}cardinality are populated with data.

    • Recursions with {1..1, 1..N, and 1..*} cardinality are filled once and only one level is filled.

    • Coded Attributes with {1..1, 1..N, and 1..*} cardinality are filled only once.

    • Non-coded attributes with {1..1} cardinality are filled only once.

    • Non-coded attributes with {1..N and 1..*} cardinality are filled twice.

    • Choices with {1..1, 1..N, and 1..*}cardinality are filled only once.

    Optional items

    • Classes and CMETs with {0..1, 0..N, and 0..*} cardinality are not filled.

    • Recursions with {0..1, 0..N, and 0..*} cardinality are not filled.

    • Attributes (Coded and Non-Coded) with {0..1, 0..N, and 0..*} cardinality are not filled.

    • Choices with {0..1, 0..N, and 0..*} cardinality are not filled.

  • Data for Clone class attributes are populated using the following logic:

    • Data for the structural attributes is populated from the respective schema.

    • A unique test ID is assigned for each clone class object.

    • For coded attributes bound to concept lists, data is taken from the respective concept list within ETS and populated. Note that if the concept list is empty, an error is thrown

    • For coded attributes not bound to concept lists, a value from the appropriate HL7 coding scheme is populated based on their types (For example, code attribute of Act class has code from ActCode Code System)

    • Non-Coded attributes like address, name, and others are populated with data from the sample snippets seeded in HDR.

    • Attributes with Any datatype are defaulted to ST and a default value is populated.

  • Message Wrapper and Control Act wrapper:

    • Data for the Message wrapper, Act Payload Control wrapper, and Role Payload Control wrapper is seeded in HDR.

    • The Interaction ID, Trigger event code, and Sender and Receiver II attribute values are generated during each instance generation.

    Note:

    • The objective of instance generation is to cover all the objects of custom artifacts (Message Type and CMETs) irrespective of whether they are optional or not.

    • Within an instance, if the object of external artifact is covered once, the same object is not repeated unless it is mandatory.

    • External artifacts with Roles having entity choices either as Player or Scoper will always result in more than one instance. Each of the Player/Scoper choice is included in one of the instances.

    • The order of the objects in the instance generated depend on their order in the schema file.

Master Catalog and Side Effect Configuration Reports

Master Catalog Reports

This section details the validation logic followed by MTK for Master Catalog validations, and also the logic used to generate the Master Catalog report.

Master Catalog Validation Rules

MTK follows the rules listed below to validate the schema against the Master Catalog entries to verify if the entries exist:

General Rules

  • If the object in the schema has a code attribute,

    • If the code attribute is mandatory in the schema, MTK checks if an entry for that object exists in the Master Catalog (MC) configuration with Code Type as ANY. If it is not present, MTK includes that object in the MC Report.

    • If the code attribute is optional in the schema, MTK checks if an entry for that object exists in the MC Configuration with Code Type as ANY. If it does not exist, MTK includes that object in the MC Report. In addition, MTK also checks if an entry exists for that object in the MC Configuration with Code Type as NULL. It it does not exist, MTK includes that object in the MC Report.

  • If the object in the schema does not have a code attribute, MTK checks if an entry for that object exists in the MC Configuration with Code Type as NULL. If it is not present, MTK includes that object in the MC Report.

Act

The general rules apply to all objects in the schema that are Acts.

Role: Non-owned Role without Entities

The general rules apply to all objects in the schema that are Non-owned Roles without Entities.

Role: Non-owned Role with Entities

In addition to the general rules, MTK also checks if the corresponding Entity entry exists for the Non-owned Role in the MC configuration. The general rules apply for checking an individual Entity entry in the MC Configuration. If the entry does not exist, MTK includes that object in the MC Report.

ROLE: Owned Role without Non-Owning Entity

For Owned Role, in addition to the general rules, MTK also checks if the corresponding Owning Entity entry exists for the Owned Role in the MC Configuration. The general rules apply for checking an individual Entity entry in the MC configuration. If the entry does not exist, MTK includes all the corresponding objects (both missing role and the missing entities) in the MC Report.

ROLE: Owned Role with Non-Owning Entity

For Owned Role, in addition to the general rules, MTK also checks if the corresponding Owning and Non-Owning Entity for the Owned Role has appropriate entries in the MC Configuration. The general rules apply for checking an individual Entity entry in the MC Configuration. If the entry does not exist, MTK includes all corresponding objects (both missing role and the missing entities) in the MC Report.

Note:

In case of Owned Roles, MTK also checks if the entry in the ROLE_OWNER_CODE (in the MC Configuration) has P or S, depending on whether the Owning Entity is a Player or a Scoper. If the entry does not exist, MTK includes that object in the MC Report.

Master Catalog Reporting Logic

MTK populates a report based on the rules described in the Master Catalog Validation Rules section, and then based on the value in the Report column (Yes or No). If the Report column contains the value Yes, the following logic is applied while creating an entry in the Master Catalog report:

Act

  • With mandatory code attribute: Create an entry with code type ANY.

  • With optional code attribute: Create entries with code type ANY and Null.

  • Without code attribute: Create an entry with code type Null.

Non-Owned Role with Entities

  • With mandatory code attribute: Create an entry with code type ANY, and with appropriate Entity entries.

  • With optional code attribute: Create entries with code type ANY and Null, and with appropriate Entity entries.

  • Without code attribute: Create an entry with code type Null, and with appropriate Entity entries.

Non-Owned Role without Entities

  • With mandatory code attribute: Create an entry with code type ANY, and without any entities.

  • With optional code attribute: Create entries with code type ANY and Null, and without any entities.

  • Without code attribute: Create an entry with code type Null, and without any entities.

Owned Role with non-owning Entity

  • With mandatory code attribute: Create an entry with code type ANY, and with appropriate non-owning Entity entry.

  • With optional code attribute: Create entries with code type ANY and Null, and with appropriate non-owning Entity entry.

  • Without code attribute: Create an entry with code type Null, and with appropriate non-owning Entity entry.

Entity

  • With mandatory code attribute: Create an entry with code type ANY.

  • With optional code attribute: Create entries with code type ANY and Null.

  • Without code attribute: Create an entry with code type Null.

Side Effect Configuration Report

MTK applies the following rules while creating the Side Effect Configuration report:

  • Act: Create or Overlay

  • Non-Owned Role without Entities: Create or Overlay.

  • Non-Owned Role with Entities: Create or Overlay for both Role and its entities.

  • Owned Role without non-owning Entity: No entry.

  • Owned (Type II) Role with non-owning Entity: Null for Role and owning Entity. Create or Overlay for non-owning Entity.

MTK Message Types Construct Processing

  • Constructs in External Artifacts (Message Type and CMETS)

  • Constructs Within Oracle Published CMETS

Note:

The order of the objects in the instance generated depend on their order in the schema file. The objects listed in the examples might change when compared to actual instances.

Constructs in External Artifacts (Message Type and CMETs)

Act> ActChoice with {0..1 or 1..1 or 0..n or 1..n}

MTK generates n instances where n is the number of objects in the choice (and is not same as *). MTK generates two instances if a message type that has the construct described in Figure E.1. For each object within the choice, a message instance is generated.

  • First message instance has ClinicalTrialEvent > inFulfillmentOf > ObservationEvent

  • Second message instance has ClinicalTrialEvent > inFulfillmentOf > ProcedureEvent

Figure 10-8 Act > ActChoice with {1..1}

Described in the previous text

Act> ActChoice with {0..* or 1..*}

MTK generates one instance with two inFulfillmentOf ActRelationship, if a message type has the construct shown in Figure E.2. For each object within the choice, an inFulfillmentOf ActRelationship is generated.

  • First instance of inFulfillmentOf ActRelationship would have ClinicalTrialEvent > inFulfillmentOf > ObservationEvent

  • Second instance of inFulfillmentOf ActRelationship would have ClinicalTrialEvent > inFulfillmentOf > ProcedureEvent

Figure 10-9 Act > ActChoice with {1..*}

Described in the previous text

Act> ActChoice with {0..1 or 1..1 or 0..n or 1..n}> Act with {0..1 or 1..1 or 0..n or 1..n or 0..* or 1..*}

MTK generate n instances where n is the number of objects in the first choice. MTK generate two instances if a message type has the construct described in Figure E.3. For each object within the choice, a message instance is generated along with the target pertinentInformation ActRelationship.

  • First message instance has ClinicalTrialEvent > inFulfillmentOf > ObservationEvent > pertinentInformation > ObservationInfo

  • Second message instance has ClinicalTrialEvent > inFulfillmentOf > ProcedureEvent > pertinentInformation > ObservationInfo

Figure 10-10 Act > Choice with {1..1} > Act with {1..1}

Described in the previous text

Act > ActChoice with {0..* or 1..*} > Act with {0..1 or 0..* or 0..n or 1..n or 1..1 or 1..*}

MTK generates one instance with two inFulfillmentOf ActRelationship, if a message type has the construct described in Figure E.4. For each object within the choice, an inFulfillmentOf ActRelationship is generated along with one target pertinentInformation ActRelationtionship.

  • First instance of inFulfillmentOf ActRelationship has ClinicalTrialEvent > inFulfillmentOf > ObservationEvent > pertinentInformation > ObservationInfo

  • Second instance of inFulfillmentOf ActRelationship has ClinicalTrialEvent > inFulfillmentOf > ProcedureEvent > pertinentInformation > ObservationInfo

Figure 10-11 Act > ActChoice with {1..*} > Act with {1..1}

Described in the previous text

Act > ActChoice with {0..1 or 1..1 or 0..n or 1..n} > ActChoice with {0..1 or 1..1 or 0..n or 1..n}

MTK generates n instances where n is the number of objects in the first choice. MTK generates two instance if a message type has the construct described in Figure E.5. For each object within the fulfillmentActChoice, a message instance is generated along with an object from target pertinentActChoice.

  • First message instance has ClinicalTrialEvent > inFulfillmentOf > ObservationEvent > pertinentInformation > ObservationInfo

  • Second message instance has ClinicalTrialEvent > inFulfillmentOf > ProcedureEvent > pertinentInformation > ProcedureInfo

Figure 10-12 Act > ActChoice with {1..*} > ActChoice with {1..1}

Described in the previous text

Act > ActChoice with {0..* or 1..*} > ActChoice with {0..1 or 1..1 or 0..n or 1..n}

MTK generate one instance with two inFulfillmentOf ActRelationship, if a message type has the construct described in Figure E.6. For each object within the choice, an inFulfillmentOf ActRelationship is generated along with an object from the target choice.

  • First instance of inFulfillmentOf ActRelationship has ClinicalTrialEvent > inFulfillmentOf > ObservationEvent > pertinentInformation > ObservationInfo

  • Second instance of inFulfillmentOf ActRelationship has ClinicalTrialEvent > inFulfillmentOf > ProcedureEvent > pertinentInformation > ProcedureInfo

Figure 10-13 Act > ActChoice with {1..*} > ActChoice with {1..1}

Described in the previous text

Act > ActChoice with {0..1 or 1..1 or 0..n or 1..n} > ActChoice with {0..* or 1..*}:

MTK generates n instances where n= number of objects is in the first choice. MTK generates two instance if a message type has the construct described in Figure E.7. For each object within the inFulfillmentOf, a message instance is generated along with two pertinentInformation ActRelationships.

  • First message instance has ClinicalTrialEvent > inFulfillmentOf > ObservationEvent:

    1. pertinentInformation > ObservationInfo

    2. pertinentInformation > ProcedureInfo

  • Second message instance has ClinicalTrialEvent > inFulfillmentOf > ProcedureEvent:

    1. pertinentInformation > ObservationInfo

    2. pertinentInformation > ProcedureInfo

Figure 10-14 Act > Choice with {1..1} > ActChoice with {1..*}

Described in the previous text

Act > ActChoice with {0..* or 1..*} > ActChoice with {0..*}

MTK generates one instance with two inFulfillmentOf ActRelationship, if a message type has the construct described in Figure E.8. The first inFulfillmentOf ActRelationship instance has the objects from the target pertinentActChoice. The other inFulfillmentOf ActRelationship instance does not have it.

  • First instance of inFulfillmentOf ActRelationship has ClinicalTrialEvent > inFulfillmentOf > ObservationEvent:

    1. pertinentInformation > ObservationInfo

    2. pertinentInformation > ProcedureInfo

  • Second instance of fulfillmentActChoice ActRelationship has ClinicalTrialEvent > inFulfillmentOf > ProcedureEvent

Figure 10-15 Act > ActChoice with {1..*} > ActChoice with {0..*}

Described in the previous text

Act > ActChoice with {0..* or 1..*} > ActChoice with {1..n or 1..*}

MTK generates one instance with two inFulfillmentOf ActRelationship, if a message type has the construct described in Figure E.9. For each object within FullfillmentActChoice, a inFulfillmentOf ActRelationship is generated along with the object from the target pertinentActChoice.

  • First instance of inFulfillmentOf ActRelationship has ClinicalTrialEvent > inFulfillmentOf > ObservationEvent:

    1. pertinentInformation > ObservationInfo

    2. pertinentInformation > ProcedureInfo

  • Second instance of inFulfillmentOf ActRelationship has ClinicalTrialEvent > inFulfillmentOf > ProcedureEvent (one of the below):

    1. pertinentInformation > ObservationInfo

    2. pertinentInformation > ProcedureInfo

Figure 10-16 Act > ActChoice with {1..*} > ActChoice with {1..*}

Described in the previous text

Act > Role with {0..1 or 0..n or 0..* or 1..1 or 1..n or 1..*} > Player with {0..1 or 1..1} and Scoper with {0..1 or 1..1}

MTK generates only one instance if a message type has the construct described in Figure E.10. The message instance has:

  • Message Instance: ObservationGeneral > subject > IdentifiedEntity > ScopingEntity and PlayingEntity

Figure 10-17 Act > Role with {0..*} > Player with {0..1} and Scoper with {1..1}

Described in the previous text

Act > Role with {0..1 or 0..n or 0..* or 1..1 or 1..n or 1..*} > Player with {0..1 or 1..1} and Scoper with {0..1 or 1..1} > Playedrole with {0..1 or 0..n or 0..* or 1..1 or 1..n or 1..*} > Scoper with {0..1 or 1..1}

MTK generates only one instance if a message type has the construct described in Figure E.11. The instance generated has the following:

  • Message instance: ObservationGeneral > subject > IdentifiedEntity > ScopingEntity and Playingentity<

    1. PlayingEntity > HealthChart > ScopingEntity2

Figure 10-18 Act > Role with {0..*} > Player with {0..1} and Scoper with {1..1} > Playedrole with {0..*} > Scoper with {0..1}

Described in the previous text

Act > Role with {0..1 or 0..n or 0..* or 1..1 or 1..n or 1..*} > PlayerChoice with {0..1 or 1..1} and ScoperChoice with {0..1 or 1..1} > PlayedRole with {0..1 or 0..n or 0..* or 1..1 or 1..n or 1..*} > Scoper with {0..1 or 1..1}

MTK generates n instances where n is the maximum number of entities present in a single choice. In the construct described in Figure E.12, MTK generates two instances. The instances generated might be:

  • First Instance: ObservationGeneral > subject > IdentifiedEntity > ScopingEntity and PlayingEntity

    1. Playingentity > HealthChart > ScopingEntity2

  • Second Instance: ObservationGeneral > subject > IdentifiedEntity > Organization and Person

    1. Person > HealthChart > ScopingEntity2

Figure 10-19 Act > Role with {0..*} > PlayerChoice with {0..1} and ScoperChoice with {1..1} > Playedrole with {0..*} > Scoper with {0..1}

Described in the previous text and the note following

Note:

Even if the cardinality of participation is 0..*, MTK generates multiple instances of the above structure to incorporate all the entities. This behavior is different from ActRelationships.

Act> Role with {0..1 or 0..n or 0..* or 1..1 or 1..n or 1..*}> PlayerChoice with {0..1} and ScoperChoice with {0..1 or 1..1}> PlayedRole with {0..1 or 0..n or 0..* or 1..1 or 1..n or 1..*}> Scoper with {0..1 or 1..1}

MTK generates n instances where n is the number of entities in the choice with Max entities. In the construct described in Figure E.13, MTK generates three instances:

  • Instances with player entities has the Owned role

  • One of the instances has only the scoper for IdentifiedEntity role. This instance does not have any Player as (i) the cardinality is 0..1 (ii) both the player entities would have been covered in the previous two messages.

The instance generated might be:

  • First Instance: ObservationGeneral > subject > IdentifiedEntity > Entity and Person

    1. Person > HealthChart > ScopingEntity2

  • Second Instance : ObservationGeneral > subject > IdentifiedEntity > Organization and Entity

    1. Entity > HealthChart > ScopingEntity2

  • Third Instance : ObservationGeneral > subject > IdentifiedEntity > Place

Figure 10-20 Act > Role with {0..*} > PlayerChoice with {0..1} and ScoperChoice with {1..1} > Playedrole with {0..*} > Scoper with {0..1}

Described in the previous text

Act> Role with {0..1 or 0..n or 0..* or 1..1 or 1..n or 1..*}> PlayerChoice with {1..1} and ScoperChoice with {0..1 or 1..1}> PlayedRole with {0..1 or 0..n or 0..* or 1..1 or 1..n or 1..*}> Scoper with {0..1 or 1..1}

MTK generates n instances where n is the number of entities in the choice with Max entities. In the construct described in Figure E.14, MTK generates three instances. All the three instances have the Owned role due to the cardinality on the PlayerChoice.

The instance generated might be:

  • First Instance: ObservationGeneral > subject > IdentifiedEntity > Entity and Person

    1. Person > HealthChart > ScopingEntity2

  • Second Instance: ObservationGeneral > subject > IdentifiedEntity > Organization and Entity

    1. Entity > HealthChart > ScopingEntity2

  • Third Instance: ObservationGeneral > Subject > IdentifiedEntity > Place and Person

    1. Person > HealthChart > ScopingEntity2

Figure 10-21 Act > Role with {0..*} > PlayerChoice with {1..1} and ScoperChoice with {0..1} > PlayedRole with {0..*} > Scoper with {0..1}

Described in the previous text

Constructs Within Oracle Published CMETS

Act> ActChoice with {1..1 or 1..n or 1..*}

MTK will generate one instance. The generated instance will be one of the following:

  • ClinicalTrialEvent > inFulfillmentOf > ObservationEvent

  • ClinicalTrialEvent > inFulfillmentOf > ProcedureEvent

Note:

If the choice is {0..1 or 0..*}, the generated instance will not have the fulfillmentActChoice ActRelationship.

Figure 10-22 Act > ActChoice with {1..1}

Described in the previous text

Act> ActChoice with {1..1 or 1..n or 1..*}> Act with { 1..1 or 1..n or 1..*}

MTK generates one instance. The instance will have one of the following:

  • ClinicalTrialEvent > inFulfillmentOf > ObservationEvent > pertinentInformation > ObservationInfo

  • ClinicalTrialEvent > inFulfillmentOf > ProcedureEvent > pertinentInformation > ObservationInfo

Note:

  • If the inFulfillmentOf has {0..1 or 0..*}, then the generated instance will not have the inFulfillmentOf ActRelationship and the other associated relationships

  • If the inFulfillmentOf has {1..1 or 1..*} and observationInfo has {0..1 or 0..*} then the generated instance will have inFulfillmentOf ActRelationship but not the pertinentInformation relationships

Figure 10-23 Act > ActChoice with {1..1} > ActChoice with {1..1}

Described in the previous text and notes

Act> ActChoice with {1..1 or 1..n or 1..*}> ActChoice with {1..1 or 1..n or 1..*}

MTK generates one instance, if a message type has the construct described in Figure E.17. The generated message instance has one of the following:

  • ClinicalTrialEvent > inFulfillmentOf > ObservationEvent > pertinentInformation > ObservationInfo

  • ClinicalTrialEvent > inFulfillmentOf > ProcedureEvent > pertinentInformation > ProcedureInfo

Note:

  • If the inFulfillmentOf has {0..1 or 0..*}, then the generated instance will not have the inFulfillmentOf ActRelationship and the other associated relationships.

  • If the inFulfillmentOf has {1..1 or 1..*} and if pertinentInformation has {0..1 or 0..*} then the generated instance will have inFulfillmentOf ActRelationship but not the pertinentInformation relationships.

Figure 10-24 Act > Role with {1..*} > Player with {1..1} and Scoper with {1..1}

Described in the previous text

Act > Role with {1..1 or 1..n or 1..*} > PlayerChoice with {1..1} and ScoperChoice with {1..1} > PlayedRole with {1..1 or 1..n or 1..* } > Scoper with {1..1}

In the construct described in Figure E.19, MTK generates one instance. The instance generated might be:

  • ObservationGeneral > subject > IdentifiedEntity > ScopingEntity and PlayingEntity

    1. Playingentity > HealthChart > ScopingEntity2

  • ObservationGeneral > subject > IdentifiedEntity > Organization and Person

    1. Person > HealthChart > ScopingEntity2

Note:

  • If the subject has {0..1 or 0..*} then the generated instance will not have the subject and its associated associations.

  • If the subject has {1..1 or 1..*} and Scoper and Player choice with {0..1} then the generated instance will have: ObservationGeneral > subject > IdentifiedEntity

  • If the subject has {1..1 or 1..*}, Player choice with {1..1} along with HealthChart with {1..1}, and ScoperChoice with {0..1} then the generated instance will have one of the below:

    1. ObservationGeneral > subject > IdentifiedEntity > PlayinngEntity > HealthChart > ScopingEntity2

    2. ObservationGeneral > subject > IdentifiedEntity > Person > HealthChart > ScopingEntity2

Figure 10-25 Act > Role with {1..*} > PlayerChoice with {1..1} and ScoperChoice with {1..1} > Playedrole with {1..*} > Scoper with {1..1}

Described in the previous text

XML Snippets of Seeded Data

Data seeded in HDR for MTK to generate instance for the provided Message Type schema file:

Datatypes Value 1 Value 2
AD <[attribute] use="H" > <delimiter partType="DEL">;</delimiter> <country partType="CNT">US</country> <state partType="STA">CA</state> <city partType="CTY">Fountain Hills</city> <postalCode partType="ZIP">85268</postalCode> <streetAddressLine partType="SAL">15542 OliveWest</streetAddressLine> <houseNumberNumeric partType="BNN" >999777</houseNumberNumeric> <houseNumber partType="BNR">999777</houseNumber> <direction partType="DIR">N</direction> <streetName partType="STR">Church Street</streetName> <streetNameBase partType="STB">Church Street</streetNameBase> <streetNameType partType="STTYP">Avenue</streetNameType> <unitID partType="UNID">222222</unitID> <censusTract partType="CEN">testCensusValue</censusTract> <unitType partType="UNIT">Apartment</unitType> <useablePeriod xsi:type="IVL_TS" > <low value="20070127" inclusive="true"/> <high value="20070526" inclusive="false"/> </useablePeriod> </[attribute]> <[attribute] use="H"> <delimiter partType="DEL">;</delimiter> <country partType="CNT">US</country> <state partType="STA">CA</state> <city partType="CTY">Fountain Hills</city> <postalCode partType="ZIP">852</postalCode> <streetAddressLine partType="SAL">142 OliveWest</streetAddressLine> <houseNumberNumeric partType="BNN" >9977</houseNumberNumeric> <houseNumber partType="BNR">9997</houseNumber> <direction partType="DIR">N</direction> <streetName partType="STR">Church Street</streetName> <streetNameBase partType="STB">Church Street</streetNameBase> <streetNameType partType="STTYP">Avenue</streetNameType> <unitID partType="UNID">222234</unitID> <censusTract partType="CEN">testCensusValue</censusTract> <unitType partType="UNIT">Apartment</unitType> <useablePeriod xsi:type="IVL_TS" > <low value="20070128" inclusive="true"/> <high value="20070527" inclusive="false"/> </useablePeriod> </[attribute]>
ANY <[attribute] xsi:type="ST">MTK Test1</[attribute]> <[attribute] xsi:type="ST">MTK Test2</[attribute]>
BL <[attribute] value="true"/> <[attribute] value="false"/>
BN <[attribute] value="true"/> <[attribute] value="true"/>
ControlActWrapper <controlActProcess classCode="CACT" moodCode="EVN"> <subject typeCode="SUBJ"></subject></controlActProcess> <controlActProcess classCode="CACT" moodCode="EVN"> <subject typeCode="SUBJ"> <registrationEvent classCode="REG" moodCode="EVN"> <code code="T" codeSystemName="ActCode"/> <subject typeCode="SBJ"> </subject> </registrationEvent> </subject> </controlActProcess>
ED <[attribute] mediaType="text/plain" language="en-US"> <reference value="http://example.org/xrays/128s8d9ej229se32s.png"> <useablePeriod xsi:type="IVL_TS"> <low value="200007200845"/> <high value="200008200845"/> </useablePeriod> </reference>ED.Text1 </[attribute]> <[attribute] mediaType="text/plain" language="en-US">ED.Text2 <reference value="http://example.org/xrays/128s8d9ej229se32s.png"> <useablePeriod xsi:type="IVL_TS"> <low value="200007200846"/> <high value="200008200846"/> </useablePeriod> </reference>ED.Text2 </[attribute]>
EIVL <[attribute] xsi:type="EIVL_TS"> <event code="AC" codeSystem="2.16.840.1.113883.5.139" codeSystemName="TimingEvent"/> <offset> <low value="10" unit="h"/> <high value="20" unit="h"/> </offset> </[attribute]> <[attribute] xsi:type="EIVL_TS"> <event code="ACD" codeSystem="2.16.840.1.113883.5.139" codeSystemName="TimingEvent"/> <offset> <low value="11" unit="h"/> <high value="21" unit="h"/> </offset> </[attribute]>
EN <[attribute] use="L"> <family partType="FAM">John</family> <given partType="GIV">Doe</given> <validTime xsi:type="IVL_TS"> <low value="20070127" inclusive="true"/> <high value="20070526" inclusive="false"/> </validTime> </[attribute]> <[attribute] use="L"> <family partType="FAM">John</family> <given partType="GIV">Doe</given> <validTime xsi:type="IVL_TS"> <low value="20070129" inclusive="true"/> <high value="20070529" inclusive="false"/> </validTime> </[attribute]>
II <[attribute] root="9.989898.5.100.10" extension="MTK1" assigningAuthorityName="ORACLE"/> <[attribute] root="9.989898.5.100.10" extension="MTK1" assigningAuthorityName="ORACLE"/>
INT <[attribute] xsi:type="INT" value="204" /> <[attribute] xsi:type="INT" value="205" />
IVL_INT <[attribute] xsi:type="IVL_INT"> <low value="10"/> <high value="20"/> </[attribute]> <[attribute] xsi:type="IVL_INT"> <low value="10"/> <high value="20"/> </[attribute]>
IVL_MO <[attribute] xsi:type="IVL_MO"> <low value="200" currency="USD"/> <width value="205" currency="USD"/> </[attribute]> <[attribute] xsi:type="IVL_MO"> <low value="1000" currency="USD"/> <width value="2000" currency="USD" /> </[attribute]>
IVL_PQ <[attribute] xsi:type="IVL_PQ"> <low value="10" unit="g"/> <high value="20" unit="g"/> </[attribute]> <[attribute] xsi:type="IVL_PQ"> <low value="1100" unit="g"/> <high value="2200" unit="g"/> </[attribute]>
IVL_REAL <[attribute] xsi:type="IVL_REAL"> <low value="10.05"/> <high value="20.05"/> </[attribute]> <[attribute] xsi:type="IVL_REAL" value="10.05">
IVL_TS <[attribute] xsi:type="IVL_TS"> <low value="20070127" inclusive="true"/> <high value="20070526" inclusive="false"/> </[attribute]> <[attribute] xsi:type="IVL_TS"> <low value="20070127" inclusive="true"/> <width value="2" unit="h"/> </[attribute]>
MO <[attribute] value="204" currency="USD"/> <[attribute] value="204" currency="INR"/>
ON <[attribute] use="L"> <prefix partType="PFX">Prime Health</prefix> <suffix partType="SFX">Clinic</suffix> </[attribute]> <[attribute] use="L"> <prefix partType="PFX">Prime Health</prefix> <suffix partType="SFX">Speciality Center</suffix> </[attribute]>
PIVL <[attribute] xsi:type="PIVL_TS" alignment="DW" institutionSpecified="false"> <phase> <low value="20070319" inclusive="true"/> <high value="20070324" inclusive="false"/> </phase> <period value="1" unit="wk"/> </[attribute]> <[attribute] xsi:type="PIVL_TS" alignment="HD" operator="A"> <phase> <low value="200703190900" inclusive="true"/> <high value="200703191700" inclusive="false"/> </phase> <period value="1" unit="d"/> </[attribute]>
PN <[attribute] use="L"> <family partType="FAM">Levin</family> <given partType="GIV">Henry Jr</given> </[attribute]> <[attribute] use="L"> <family partType="FAM" qualifier="VV">Levin</family> <given partType="GIV">Henry Sr</given> </[attribute]>
PQ <[attribute] xsi:type="PQ" value="204" unit="g"/> <[attribute] xsi:type="PQ" value="205" unit="g"/>
REAL <[attribute] xsi:type="REAL" value="204" /> <[attribute] xsi:type="REAL" value="205" />
RTO_INT <[attribute] xsi:type="RTO_INT"> <numerator value="204"/> <denominator value="204"/> </[attribute]> <[attribute] xsi:type="RTO_INT"> <numerator value="205"/> <denominator value="205"/> </[attribute]>
RTO_MO_PQ <[attribute] xsi:type="RTO_MO_PQ"> <numerator value="204" currency="USD"/> <denominator value="204" unit="g"/> </[attribute]> <[attribute] xsi:type="RTO_MO_PQ"> <numerator value="205" currency="USD"/> <denominator value="205" unit="g"/> </[attribute]>
RTO_PQ <[attribute] xsi:type="RTO_PQ_PQ"> <numerator xsi:type="PQ" value="2" unit="g"/> <denominator xsi:type="PQ" value="1" unit="1"/> </[attribute]> <[attribute] xsi:type="RTO_PQ_PQ"> <numerator xsi:type="PQ" value="4" unit="g"/> <denominator xsi:type="PQ" value="2" unit="1"/> </[attribute]>
RTO_PQ_PQ <[attribute] xsi:type="RTO_PQ_PQ"> <numerator xsi:type="PQ" value="2" unit="g"/> <denominator xsi:type="PQ" value="1" unit="1"/> </[attribute]> <[attribute] xsi:type="RTO_PQ_PQ"> <numerator xsi:type="PQ" value="4" unit="g"/> <denominator xsi:type="PQ" value="2" unit="1"/> </[attribute]>
RTO_QTY_QTY <[attribute] xsi:type="RTO_QTY_QTY"> <numerator xsi:type="PQ" value="2" unit="g"/> <denominator xsi:type="PQ" value="1" unit="1"/> </[attribute]> <[attribute] xsi:type="RTO_QTY_QTY"> <numerator xsi:type="PQ" value="4" unit="g"/> <denominator xsi:type="PQ" value="2" unit="1"/> </[attribute]>
ST <[attribute]>MTK Test1</[attribute]> <[attribute]>MTK Test2</[attribute]>
SXCM_TS <[attribute] xsi:type="SXPR_TS"> <comp xsi:type="IVL_TS"> <low value="20050603" /> <high value="20050603" /> </comp> <comp xsi:type="PIVL_TS" operator="A" institutionSpecified="true"> <period value="6" unit="h" /> </comp> </[attribute]> <[attribute] xsi:type="SXPR_TS"> <comp xsi:type="IVL_TS"> <low value="20050604" /> <high value="20050604" /> </comp> <comp xsi:type="PIVL_TS" operator="A" institutionSpecified="true"> <period value="7" unit="h" /> </comp> </[attribute]
TEL <[attribute] value="tel:1-690-555-1111" use="H" /> <[attribute] value="tel:1-690-555-2222" use="WP" />
TN <[attribute]>Babel Fish</[attribute]> <[attribute]>Red Herring</[attribute]>
TransmissionWrapper <MCCI_MT000100HT04.Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:hl7-org:v3" xmlns:xsip="urn:hl7-org:v3" xmlns:htb="http://xmlns.oracle.com/apps/ctb/messaging" ITSVersion= "XML_1.0"> <creationTime value="20040719080000-0800"/> <responseModeCode code="C"/> <versionCode code="V3PR1"/> <interactionId root="9.989898.5.100" extension="PRPA_HN400000"/> <profileId root="9.989898.5.1" extension="v2.14.1.01"/> <processingCode code="P"/> <processingModeCode code="T"/> <acceptAckCode code="AL"/> <receiver typeCode= "RCV"> <device classCode="DEV" determinerCode="INSTANCE" > <id root="9.989898.5.100" extension="DEV1000"/> <asAgent classCode="AGNT" > <representedOrganization classCode="ORG" determinerCode="INSTANCE" > <id root="9.989898.5.100" extension="ORG1000"/> </representedOrganization> </asAgent> </device> </receiver> <respondTo typeCode ="RSP"> <device classCode="DEV" determinerCode="INSTANCE" > <id root="9.481456.5.1" extension="DEV1001"/> <asAgent classCode="AGNT" > <representedOrganization classCode="ORG" determinerCode="INSTANCE"> <id root="9.481456.5.1" extension="ORG1001"/> </representedOrganization> </asAgent> </device> </respondTo> <sender typeCode ="SND"> <device classCode="DEV" determinerCode="INSTANCE" > <id root="9.481456.5.6" extension="MTKTest"/> <asAgent classCode="AGNT" > <representedOrganization classCode="ORG" determinerCode="INSTANCE"> <id root="9.481456.5.1" extension="ORG1001"/> </representedOrganization> </asAgent> </device> </sender></MCCI_MT000100HT04.Message>  
TS <[attribute] value="20070719080000-0800" /> <[attribute] value="20070719080000-0801" />
URL <[attribute] value="www.Oracle.com"/> <[attribute] value="http://www.hl7.org/"/>

Expected Differences in Instances

Extra Internal ID Elements

The objects in the generated message can contain one extra ID attribute when compared to the corresponding object in the input message. This is not an issue, provided this extra id attribute represents the internal id of the object.

For person and organization entity objects, three IDs are generated and for other elements two IDs are generated.

Tasks:

Example 10-18 Input XML Element

<Person type="Person" classCode="PSN" determinerCode="INSTANCE" htb:association="player">
<id root="9.989898.5.1" extension="PSN9002"/>
<name use="L">
<family partType="FAM" encoding="TXT">Mart</family>
<given partType="GIV" encoding="TXT">Bob</given>
</name>
</Person>

Example 10-19 Corresponding Output

<Person type="Person" classCode="PSN" determinerCode="INSTANCE" htb:association="player">
<id root="9.101010.5" extension="23617" displayable="false"/>
<id root="9.989898.5.1" extension="PSN9002"/>displayable="false"/>
<id root="9.989898.5" extension="5321906" displayable="false"/>
<name use="L"><family partType="FAM" encoding="TXT">Mart</family>
<given partType="GIV" encoding="TXT">Bob</given>
</name>
</Person>

Extra XML Attributes in Coded Values

The XML representations of coded values will contain their full complement of attributes in the generated message, even though some of these attributes were absent in the persisted message. This is not an issue.

Tasks:

Example 10-20 Input XML Element

<code code="PORR_TE100001" codeSystemName="HDR Supplemental"/>

Example 10-21 Corresponding Output

<code code="PORR_TE100001" 
codeSystemName="HDR Supplemental" 
codeSystem="2.16.840.1.113894.1004.100.100.2.5" 
codeSystemVersion="HDR Supplemental (2005-02-28)" 
displayName="Christian: Assembly of God"/>

Order Differences in Collection Attributes

The order of the constituent elements in collection attributes (those of type SET or BAG) may not be preserved in the generated message.

Tasks:

Example 10-22 Input XML Element

<statusCode code = "active"/><telecom value="tel:1-690-555-1111" use="H" /><telecom value="tel:1-690-555-1111" use="WP"/>

Example 10-23 Corresponding Output

<statusCode code = "active"/> 
<telecom value="tel:1-690-555-1111" use="WP" />
<telecom value="tel:1-690-555-1111" use="H"/>

Order Differences Due to Choice Elements

When a ActRelationship has cardinality greater than one, and the target's type is a choice, then the order of the output elements may not match the order of the input elements.

Tasks:

Example 10-24 Input XML Element

<PORR_MT100001HT01.InvestigationEvent …>
…
<component typeCode="COMP" >
<SubstanceAdministrationEvent classCode="SBADM" moodCode="EVN" negationInd="false"">
…
</SubstanceAdministrationEvent>
</component>
<component typeCode="COMP" >
<SpecimenObservationEvent classCode="SPCOBS" moodCode="EVN" negationInd="false" >
…
</SpecimenObservationEvent>
</component>
<component typeCode="COMP" >
<ObservationEventGeneral classCode="OBS" moodCode="EVN" negationInd="false" >
…
</ObservationEventGeneral>
</component>
<component typeCode="COMP" >
<EncounterEvent classCode="ENC" moodCode="EVN" >
…
</EncounterEvent>
</component>
…
</PORR_MT100001HT01.InvestigationEvent >

Example 10-25 Corresponding Output

<PORR_MT100001HT01.InvestigationEvent …>
…
<component typeCode="COMP" >
<SpecimenObservationEvent type="Observation" classCode="SPCOBS" moodCode="EVN" negationInd="false" >
…
</SpecimenObservationEvent>
</component>
<component typeCode="COMP" >
<SubstanceAdministrationEvent classCode="SBADM" moodCode="EVN" negationInd="false" >
…
</SubstanceAdministrationEvent>
</component>
<component typeCode="COMP" >
<EncounterEvent classCode="ENC" moodCode="EVN" >
…
</EncounterEvent>
</component>
<component typeCode="COMP" >
<ObservationEventGeneral type="Observation" classCode="OBS" moodCode="EVN" negationInd="false" >
…
</ObservationEventGeneral>
</component>
…
</PORR_MT100001HT01.InvestigationEvent >

Differences in the Order of XML Attributes

The order of XML attributes of an element may be different in the input and output messages. The order of the attributes of an XML element is not significant.

Tasks:

Example 10-26 Input XML Element

<telecom value="tel:1-490-555-2222" use="H"/>
<POXX_MT121000HT02.SpecimenObservationOrder moodCode="RQO" classCode="SPCOBS"  negationInd="false" >

Example 10-27 Corresponding Output

<telecom use="H" value="tel:1-490-555-2222"/>
<POXX_MT121000HT02.SpecimenObservationOrder classCode="SPCOBS" moodCode="RQO" negationInd="false">

Differences Due to Time Zones

A generated message may contain different literal values for time values than is present in the input message, as the generated time values are represented in the time zone of the database.

Example 10-28 Input XML Element

<id root="9.481456.5.30" extension="NC001"/>
        <creationTime value="20040719080000-0800"/>
        <versionCode code="V3PR1"/>
        <profileId root="9.989898.5.1" extension=" v2.14.1.01"/>
        <processingCode code="P"/>

Example 10-29 Corresponding Output

<id root="9.481456.5.30" extension="NC001"/>
   <creationTime value="20070719080000-0800"/>
   <versionCode code="V3PR1"/>
   <profileId root="9.989898.5.1" extension=" v2.14.1.01"/>
   <processingCode code="P"/>

Differences Due to Vocabulary Configuration

OMP can be configured to translate coded attributes before sending them out. In such cases, the input and output values for the coded attribute will be different.

Tasks:

Example 10-30 Input XML Element

<raceCode code="15754" codeSystemName="HL7"/>

Example 10-31 Corresponding Output

<raceCode code="15643001 " codeSystemName="SNOMED-CT" codeSystem="2.16.840.1.113883.6.96 " codeSystemVersion="2.01.4" displayName="White"/>

Differences in the Message Wrapper

Message wrapper of the input message is not persisted by inbound message processor. So, Outbound Message Processor will not generate the same message wrapper again.

MTK generates the test instance by using a seeded message wrapper. This message wrapper is the same for all the test messages. The only difference is the message ids. As outbound message generator does not know what is the content of the inbound message, there will be difference between the following attribute values in both the messages:

  • Message id

  • creationTime

  • responseModeCode

  • interactionId

  • acceptAckCode

  • receiver.device.id

  • respondTo.device.id

  • sender.deviceid

  • receiver. representedOrganization .Id

  • profileId

Tasks:

Example 10-32 Input XML Element

<MFFI_IN000101 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:hl7-org:v3"  xmlns:xsip="urn:hl7-org:v3" xmlns:htb="http://xmlns.oracle.com/apps/ctb/messaging" ITSVersion= "XML_1.0">
<id root = "1.2.3" extension = "158933102"/>
<creationTime value="20040719080000-0800"/>
<responseModeCode code="C"/>
<versionCode code="V3PR1"/>
<interactionId root="9.989898.5.100" extension="PRPA_HN400000"/>
<processingCode code="P"/>
<processingModeCode code="T"/>
<acceptAckCode code="AL"/>
<receiver typeCode= "RCV">
<device classCode="DEV" determinerCode="INSTANCE" >
<id root="9.989898.5.100" extension="DEV1000"/>
<asAgent  classCode="AGNT" >
<representedOrganization  classCode="ORG" determinerCode="INSTANCE" >
<id root="9.989898.5.100" extension="ORG1000"/>
</representedOrganization>
</asAgent>
</device>
</receiver>
<respondTo typeCode ="RSP">
<device classCode="DEV" determinerCode="INSTANCE" >
<id root="9.481456.5.1" extension="DEV1001"/>
<asAgent  classCode="AGNT" >
<representedOrganization  classCode="ORG" determinerCode="INSTANCE">
<id root="9.481456.5.1" extension="ORG1001"/>
</representedOrganization>
</asAgent>
</device>
</respondTo>
<sender typeCode ="SND">
<device classCode="DEV" determinerCode="INSTANCE" >
<id root="9.481456.5.6" extension="MTKTest"/>
<asAgent  classCode="AGNT" >
<representedOrganization  classCode="ORG" determinerCode="INSTANCE">
<id root="9.481456.5.1" extension="ORG1001"/>
</representedOrganization>
</asAgent>
</device>
</sender>
---------------

Example 10-33 Output XML Element

< MFFI_IN000101 xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsip="urn:hl7-org:v3" xmlns:htb="http://xmlns.oracle.com/apps/ctb/messaging" ITSVersion="XML_1.0">
   <id root="9.989898.5" extension="MTKTest"/>
   <creationTime value="20071129155115-0800"/>
   <responseModeCode code="D"/>
   <versionCode code="V3PR1"/>
   <interactionId root="9.989898.5" extension="MFPM_IN010000"/>
   <profileId root="9.989898.5" extension="2.14.1.01"/>
   <processingCode code="P"/>
   <processingModeCode code="T"/>
   <acceptAckCode code="NE"/>
   <receiver typeCode="RCV">
      <device classCode="DEV" determinerCode="INSTANCE">
         <id root="9.989898.5.100" extension="ORG1000" displayable="false"/>
         <asAgent classCode="AGNT">
            <representedOrganization classCode="ORG" determinerCode="INSTANCE">
               <id root="9.989898.5.100" extension="ORG1000" displayable="false"/>
            </representedOrganization>
         </asAgent>
      </device>
   </receiver>
   <respondTo typeCode="RSP">
      <device classCode="DEV" determinerCode="INSTANCE">
         <id root="9.989898.5" extension="1"/>
         <asAgent classCode="AGNT">
            <representedOrganization classCode="ORG" determinerCode="INSTANCE">
               <id root="9.989898.5" extension="1"/>
            </representedOrganization>
         </asAgent>
      </device>
   </respondTo>
   <sender typeCode="SND">
      <device classCode="DEV" determinerCode="INSTANCE">
         <id root="9.989898.5" extension="1"/>
         <asAgent classCode="AGNT">
            <representedOrganization classCode="ORG" determinerCode="INSTANCE">
               <id root="9.989898.5" extension="1"/>
            </representedOrganization>
         </asAgent>
      </device>
   </sender>
--------------

Sample Test Message and Corresponding Generated Message

Task Examples:

Example 10-34 Input XML Element

<MFFI_IN000101 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:hl7-org:v3"  xmlns:xsip="urn:hl7-org:v3" xmlns:htb="http://xmlns.oracle.com/apps/ctb/messaging" ITSVersion= "XML_1.0">
<id root = "1.2.3" extension = "158933102"/>
<creationTime value="20040719080000-0800"/>
<responseModeCode code="C"/>
<versionCode code="V3PR1"/>
<interactionId root="9.989898.5.100" extension="PRPA_HN400000"/>
<profileId root="9.989898.5.1" extension="v2.14.1.01"/>
<processingCode code="P"/>
<processingModeCode code="T"/>
<acceptAckCode code="AL"/>
<receiver typeCode= "RCV">
<device classCode="DEV" determinerCode="INSTANCE" >
<id root="9.989898.5.100" extension="DEV1000"/>
<asAgent  classCode="AGNT" >
<representedOrganization  classCode="ORG" determinerCode="INSTANCE" >
<id root="9.989898.5.100" extension="ORG1000"/>
</representedOrganization>
</asAgent>
</device>
</receiver>
<respondTo typeCode ="RSP">
<device classCode="DEV" determinerCode="INSTANCE" >
<id root="9.481456.5.1" extension="DEV1001"/>
<asAgent  classCode="AGNT" >
<representedOrganization  classCode="ORG" determinerCode="INSTANCE">
<id root="9.481456.5.1" extension="ORG1001"/>
</representedOrganization>
</asAgent>
</device>
</respondTo>
<sender typeCode ="SND">
<device classCode="DEV" determinerCode="INSTANCE" >
<id root="9.481456.5.6" extension="MTKTest"/>
<asAgent  classCode="AGNT" >
<representedOrganization  classCode="ORG" determinerCode="INSTANCE">
<id root="9.481456.5.1" extension="ORG1001"/>
</representedOrganization>
</asAgent>
</device>
</sender>
<controlActProcess  classCode="CACT" moodCode="EVN">
<code code = "MFFI_TE000101" codeSystemName = "HDR Supplemental"/>
<subject typeCode="SUBJ">
<registrationEvent classCode="REG" moodCode="EVN">
<code code="T" codeSystemName="ActCode"/>
<subject typeCode="SBJ">
<employmentStaff classCode="EMP">
  <id root = "1.2.3" extension = "158931102"/>
  <code code = "DEPEN" codeSystemName = "RoleCode"/>
  <addr use="H" ><delimiter partType="DEL">;</delimiter>
<country partType="CNT">US</country>
<state partType="STA">CA</state>
<city partType="CTY">Fountain Hills</city>
<postalCode partType="ZIP">85268</postalCode>
<streetAddressLine partType="SAL">15542 OliveWest</streetAddressLine>
<houseNumberNumeric partType="BNN" >999777</houseNumberNumeric>
<houseNumber partType="BNR">999777</houseNumber>
<direction partType="DIR">N</direction>
<streetName partType="STR">Church Street</streetName>
<streetNameBase partType="STB">Church Street</streetNameBase>
<streetNameType partType="STTYP">Avenue</streetNameType>
<unitID partType="UNID">222222</unitID>
<censusTract partType="CEN">testCensusValue</censusTract>
<unitType partType="UNIT">Apartment</unitType>
<useablePeriod xsi:type="IVL_TS" >
    <low value="20070127" inclusive="true"/>
    <high value="20070526" inclusive="false"/>
</useablePeriod>
</addr>
  <addr use="H">
<delimiter partType="DEL">;</delimiter>
<country partType="CNT">US</country>
<state partType="STA">CA</state>
<city partType="CTY">Fountain Hills</city>
<postalCode partType="ZIP">852</postalCode>
<streetAddressLine partType="SAL">142 OliveWest</streetAddressLine>
<houseNumberNumeric partType="BNN" >9977</houseNumberNumeric>
<houseNumber partType="BNR">9997</houseNumber>
<direction partType="DIR">N</direction>
<streetName partType="STR">Church Street</streetName>
<streetNameBase partType="STB">Church Street</streetNameBase>
<streetNameType partType="STTYP">Avenue</streetNameType>
<unitID partType="UNID">222234</unitID>
<censusTract partType="CEN">testCensusValue</censusTract>
<unitType partType="UNIT">Apartment</unitType>
<useablePeriod xsi:type="IVL_TS" >
    <low value="20070127" inclusive="true"/>
    <high value="20070526" inclusive="false"/>
</useablePeriod>
</addr>
   <telecom value="tel:1-690-555-1111" use="H" />
  <telecom value="tel:1-690-555-1111" use="WP"/>
  <statusCode code = "active"/>
  <effectiveTime xsi:type="IVL_TS">
    <low value="20070127"/>
    <high value="20070526"/>
</effectiveTime>
  <employeePerson determinerCode="INSTANCE" classCode="PSN">
    <id root = "1.2.3" extension = "158931402"/>
    <id root = "1.2.3" extension = "158931502"/>
    <name use="L">
  <family partType="FAM" >Levin</family>
  <given partType="GIV" >Henry Jr</given>
</name>
     <name use="L">
  <family partType="FAM" qualifier="VV">Levin</family>
  <given partType="GIV">Henry Sr</given>
</name>
    <desc mediaType="image/png" language="en-US" compression="GZ"  integrityCheck="3454bfb019d0e7d47a253b59cf234bc49a0e0cf8">
   <reference value="http://example.org/xrays/128s8d9ej229se32s.png">
      <useablePeriod xsi:type="IVL_TS">
         <low value="200007200845"/>
         <high value="200008200845"/>
      </useablePeriod>
   </reference>
   <thumbnail mediaType="image/jpeg" language="en-US" representation="B64"/>
      MNYD83jmMdomSJUEdmde9j44zmMir6edjzMMIjdMDSsWdIJdksIJR3373jeu83
      6edjzMMIjdMDSsWdIJdksIJR3373jeu83MNYD83jmMdomSJUEdmde9j44zmMir
      omSJUEdmde9j44zmMiromSJUEdmde9j44zmMirdMDSsWdIJdksIJR3373jeu83
      4zmMir6edjzMMIjdMDSsWdIJdksIJR3373jeu83==</desc>
    <statusCode code = "active"/>
     <telecom value="tel:1-690-555-1111" use="H" />
    <telecom value="tel:1-690-555-1111" use="WP"/>
    <administrativeGenderCode code = "F" codeSystemName = "AdministrativeGender"/>
    <birthTime value="20060719080000-0800" />
    <deceasedInd value="true"/>
    <deceasedTime value="20060719080000-0800" />
    <multipleBirthInd value="true"/>
    <multipleBirthOrderNumber xsi:type="INT" value="204"/>
    <organDonorInd value="true"/>
    <addr use="H" ><delimiter partType="DEL">;</delimiter>
<country partType="CNT">US</country>
<state partType="STA">CA</state>
<city partType="CTY">Fountain Hills</city>
<postalCode partType="ZIP">85268</postalCode>
<streetAddressLine partType="SAL">15542 OliveWest</streetAddressLine>
<houseNumberNumeric partType="BNN" >999777</houseNumberNumeric>
<houseNumber partType="BNR">999777</houseNumber>
<direction partType="DIR">N</direction>
<streetName partType="STR">Church Street</streetName>
<streetNameBase partType="STB">Church Street</streetNameBase>
<streetNameType partType="STTYP">Avenue</streetNameType>
<unitID partType="UNID">222222</unitID>
<censusTract partType="CEN">testCensusValue</censusTract>
<unitType partType="UNIT">Apartment</unitType>
<useablePeriod xsi:type="IVL_TS" >
    <low value="20070127" inclusive="true"/>
    <high value="20070526" inclusive="false"/>
</useablePeriod>
</addr>
    <addr use="H">
<delimiter partType="DEL">;</delimiter>
<country partType="CNT">US</country>
<state partType="STA">CA</state>
<city partType="CTY">Fountain Hills</city>
<postalCode partType="ZIP">852</postalCode>
<streetAddressLine partType="SAL">142 OliveWest</streetAddressLine>
<houseNumberNumeric partType="BNN" >9977</houseNumberNumeric>
<houseNumber partType="BNR">9997</houseNumber>
<direction partType="DIR">N</direction>
<streetName partType="STR">Church Street</streetName>
<streetNameBase partType="STB">Church Street</streetNameBase>
<streetNameType partType="STTYP">Avenue</streetNameType>
<unitID partType="UNID">222234</unitID>
<censusTract partType="CEN">testCensusValue</censusTract>
<unitType partType="UNIT">Apartment</unitType>
<useablePeriod xsi:type="IVL_TS" >
    <low value="20070127" inclusive="true"/>
    <high value="20070526" inclusive="false"/>
</useablePeriod>
</addr>
    <maritalStatusCode code = "A" codeSystemName = "MaritalStatus"/>
    <disabilityCode code = "1" codeSystemName = "PersonDisabilityType"/>
    <livingArrangementCode code = "G" codeSystemName = "LivingArrangement"/>
    <religiousAffiliationCode code = "1001" codeSystemName = "ReligiousAffiliation"/>
    <raceCode code = "1008-2" codeSystemName = "Race"/>
    <ethnicGroupCode code = "2135-2" codeSystemName = "Ethnicity"/>
    <languageCommunication>
      <languageCode code = "EncounterStatus" codeSystemName = "HDR Supplemental"/>
      <modeCode code = "ESGN" codeSystemName = "LanguageAbilityMode"/>
      <proficiencyLevelCode code = "E" codeSystemName = "LanguageAbilityProficiency"/>
      <preferenceInd value="true"/>
    </languageCommunication>
  </employeePerson>
  <employerOrganization determinerCode="INSTANCE" classCode="ORG">
    <id root = "1.2.3" extension = "158931702"/>
    <id root = "1.2.3" extension = "158931802"/>
    <code code = "NDA17" codeSystemName = "EntityCode"/>
    <name use="L">
   <prefix partType="PFX" >Prime Health</prefix>
   <suffix partType="SFX" >Clinic</suffix>
</name>
    <name use="L">
   <prefix partType="PFX" >Prime Health</prefix>
   <suffix partType="SFX" >Speciality Center</suffix>
</name>
    <desc mediaType="image/png" language="en-US" compression="GZ"  integrityCheck="3454bfb019d0e7d47a253b59cf234bc49a0e0cf8">
   <reference value="http://example.org/xrays/128s8d9ej229se32s.png">
      <useablePeriod xsi:type="IVL_TS">
         <low value="200007200845"/>
         <high value="200008200845"/>
      </useablePeriod>
   </reference>
   <thumbnail mediaType="image/jpeg" language="en-US" representation="B64"/>
      MNYD83jmMdomSJUEdmde9j44zmMir6edjzMMIjdMDSsWdIJdksIJR3373jeu83
      6edjzMMIjdMDSsWdIJdksIJR3373jeu83MNYD83jmMdomSJUEdmde9j44zmMir
      omSJUEdmde9j44zmMiromSJUEdmde9j44zmMirdMDSsWdIJdksIJR3373jeu83
      4zmMir6edjzMMIjdMDSsWdIJdksIJR3373jeu83==</desc>
    <statusCode code = "active"/>
     <telecom value="tel:1-690-555-1111" use="H" />
    <telecom value="tel:1-690-555-1111" use="WP"/>
    <addr use="H" ><delimiter partType="DEL">;</delimiter>
<country partType="CNT">US</country>
<state partType="STA">CA</state>
<city partType="CTY">Fountain Hills</city>
<postalCode partType="ZIP">85268</postalCode>
<streetAddressLine partType="SAL">15542 OliveWest</streetAddressLine>
<houseNumberNumeric partType="BNN" >999777</houseNumberNumeric>
<houseNumber partType="BNR">999777</houseNumber>
<direction partType="DIR">N</direction>
<streetName partType="STR">Church Street</streetName>
<streetNameBase partType="STB">Church Street</streetNameBase>
<streetNameType partType="STTYP">Avenue</streetNameType>
<unitID partType="UNID">222222</unitID>
<censusTract partType="CEN">testCensusValue</censusTract>
<unitType partType="UNIT">Apartment</unitType>
<useablePeriod xsi:type="IVL_TS" >
    <low value="20070127" inclusive="true"/>
    <high value="20070526" inclusive="false"/>
</useablePeriod>
</addr>
    <addr use="H">
<delimiter partType="DEL">;</delimiter>
<country partType="CNT">US</country>
<state partType="STA">CA</state>
<city partType="CTY">Fountain Hills</city>
<postalCode partType="ZIP">852</postalCode>
<streetAddressLine partType="SAL">142 OliveWest</streetAddressLine>
<houseNumberNumeric partType="BNN" >9977</houseNumberNumeric>
<houseNumber partType="BNR">9997</houseNumber>
<direction partType="DIR">N</direction>
<streetName partType="STR">Church Street</streetName>
<streetNameBase partType="STB">Church Street</streetNameBase>
<streetNameType partType="STTYP">Avenue</streetNameType>
<unitID partType="UNID">222234</unitID>
<censusTract partType="CEN">testCensusValue</censusTract>
<unitType partType="UNIT">Apartment</unitType>
<useablePeriod xsi:type="IVL_TS" >
    <low value="20070127" inclusive="true"/>
    <high value="20070526" inclusive="false"/>
</useablePeriod></addr>
    <standardIndustryClassCode code = "001662" codeSystemName = "HDR Supplemental"/>
    <asPartOfWhole classCode="PART">
      <id root = "1.2.3" extension = "158932002"/>
      <id root = "1.2.3" extension = "158932102"/>
      <code code = "DEPEN" codeSystemName = "RoleCode"/>
      <statusCode code = "active"/>
      <effectiveTime xsi:type="IVL_TS">
    <low value="20070127"/>
    <high value="20070526"/>
</effectiveTime>
    </asPartOfWhole>
    <contactParty classCode="CON">
      <id root = "1.2.3" extension = "158932302"/>
      <id root = "1.2.3" extension = "158932402"/>
      <code code = "DEPEN" codeSystemName = "RoleCode"/>
       <telecom value="tel:1-690-555-1111" use="H" />
      <telecom value="tel:1-690-555-1111" use="WP"/>
      <contactPerson determinerCode="INSTANCE" classCode="PSN">
        <name use="L">
  <family partType="FAM" >Levin</family>
  <given partType="GIV" >Henry Jr</given>
</name>
         <name use="L">
  <family partType="FAM" qualifier="VV">Levin</family>
  <given partType="GIV">Henry Sr</given>
</name>
         <telecom value="tel:1-690-555-1111" use="H" />
        <telecom value="tel:1-690-555-1111" use="WP"/>
        <asPersonDomain classCode="IDENT">
          <id root = "1.2.3" extension = "158932602"/>
          <code code = "DEPEN" codeSystemName = "RoleCode"/>
        </asPersonDomain>
      </contactPerson>
    </contactParty>
  </employerOrganization>
</employmentStaff>
</subject>
</registrationEvent>
</subject>
</controlActProcess>
</MFFI_IN000101>

Example 10-35 Output XML Element

<MFPM_IN000101  xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsip="urn:hl7-org:v3" xmlns:htb="http://xmlns.oracle.com/apps/ctb/messaging" ITSVersion="XML_1.0">
   <id root="9.989898.5" extension="MTKTest"/>
   <creationTime value="20071129155115-0800"/>
   <responseModeCode code="D"/>
   <versionCode code="V3PR1"/>
   <interactionId root="9.989898.5" extension="MFPM_IN010000"/>
   <profileId root="9.989898.5" extension="2.14.1.01"/>
   <processingCode code="P"/>
   <processingModeCode code="T"/>
   <acceptAckCode code="NE"/>
   <receiver typeCode="RCV">
      <device classCode="DEV" determinerCode="INSTANCE">
         <id root="9.989898.5.100" extension="ORG1000" displayable="false"/>
         <asAgent classCode="AGNT">
            <representedOrganization classCode="ORG" determinerCode="INSTANCE">
               <id root="9.989898.5.100" extension="ORG1000" displayable="false"/>
            </representedOrganization>
         </asAgent>
      </device>
   </receiver>
   <respondTo typeCode="RSP">
      <device classCode="DEV" determinerCode="INSTANCE">
         <id root="9.989898.5" extension="1"/>
         <asAgent classCode="AGNT">
            <representedOrganization classCode="ORG" determinerCode="INSTANCE">
               <id root="9.989898.5" extension="1"/>
            </representedOrganization>
         </asAgent>
      </device>
   </respondTo>
   <sender typeCode="SND">
      <device classCode="DEV" determinerCode="INSTANCE">
         <id root="9.989898.5" extension="1"/>
         <asAgent classCode="AGNT">
            <representedOrganization classCode="ORG" determinerCode="INSTANCE">
               <id root="9.989898.5" extension="1"/>
            </representedOrganization>
         </asAgent>
      </device>
   </sender>
   <controlActProcess classCode="CACT" moodCode="EVN">
      <id root="9.989898.5" extension="158933802" displayable="false"/>
      <code code="EncounterStatus" codeSystemName="HDR Supplemental" codeSystem="2.16.840.1.113894.1004.100.100.2.5" codeSystemVersion="HDR Supplemental (2005-07-28)" displayName="EncounterStatus"/>
      <subject typeCode="SUBJ">
         <registrationEvent classCode="REG" moodCode="EVN">
            <id root="9.989898.5" extension="158933702" displayable="false"/>
            <code code="T" codeSystemName="ActCode" codeSystem="2.16.840.1.113883.5.4" codeSystemVersion="2.01.4" displayName="tea only"/>
            <subject typeCode="SBJ">
               <employmentStaff classCode="EMP">
                  <id root="1.2.3" extension="158931102" displayable="false"/>
                  <code code="DEPEN" codeSystemName="RoleCode" codeSystem="2.16.840.1.113883.5.111" codeSystemVersion="2.01.4" displayName="DEPEN"/>
                  <addr use="H">
                     <delimiter partType="DEL" representation="TXT">;</delimiter>
                     <country partType="CNT" representation="TXT">US</country>
                     <state partType="STA" representation="TXT">CA</state>
                     <city partType="CTY" representation="TXT">Fountain Hills</city>
                     <postalCode partType="ZIP" representation="TXT">85268</postalCode>
                     <streetAddressLine partType="SAL" representation="TXT">15542 OliveWest</streetAddressLine>
                     <houseNumberNumeric partType="BNN" representation="TXT">999777</houseNumberNumeric>
                     <houseNumber partType="BNR" representation="TXT">999777</houseNumber>
                     <direction partType="DIR" representation="TXT">N</direction>
                     <streetName partType="STR" representation="TXT">Church Street</streetName>
                     <streetNameBase partType="STB" representation="TXT">Church Street</streetNameBase>
                     <streetNameType partType="STTYP" representation="TXT">Avenue</streetNameType>
                     <unitID partType="UNID" representation="TXT">222222</unitID>
                     <censusTract partType="CEN" representation="TXT">testCensusValue</censusTract>
                     <unitType partType="UNIT" representation="TXT">Apartment</unitType>
                     <useablePeriod xsi:type="IVL_TS">
                        <low value="20070127" inclusive="true"/>
                        <high value="20070526" inclusive="false"/>
                     </useablePeriod>
                  </addr>
                  <addr use="H">
                     <delimiter partType="DEL" representation="TXT">;</delimiter>
                     <country partType="CNT" representation="TXT">US</country>
                     <state partType="STA" representation="TXT">CA</state>
                     <city partType="CTY" representation="TXT">Fountain Hills</city>
                     <postalCode partType="ZIP" representation="TXT">852</postalCode>
                     <streetAddressLine partType="SAL" representation="TXT">142 OliveWest</streetAddressLine>
                     <houseNumberNumeric partType="BNN" representation="TXT">9977</houseNumberNumeric>
                     <houseNumber partType="BNR" representation="TXT">9997</houseNumber>
                     <direction partType="DIR" representation="TXT">N</direction>
                     <streetName partType="STR" representation="TXT">Church Street</streetName>
                     <streetNameBase partType="STB" representation="TXT">Church Street</streetNameBase>
                     <streetNameType partType="STTYP" representation="TXT">Avenue</streetNameType>
                     <unitID partType="UNID" representation="TXT">222234</unitID>
                     <censusTract partType="CEN" representation="TXT">testCensusValue</censusTract>
                     <unitType partType="UNIT" representation="TXT">Apartment</unitType>
                     <useablePeriod xsi:type="IVL_TS">
                        <low value="20070127" inclusive="true"/>
                        <high value="20070526" inclusive="false"/>
                     </useablePeriod>
                  </addr>
                  <telecom use="H" value="tel:1-690-555-1111"/>
                  <telecom use="WP" value="tel:1-690-555-1111"/>
                  <statusCode code="active"/>
                  <effectiveTime xsi:type="IVL_TS">
                     <low value="20070127" inclusive="true"/>
                     <high value="20070526" inclusive="true"/>
                  </effectiveTime>
                  <employeePerson classCode="PSN" determinerCode="INSTANCE">
                     <id root="9.101010.5" extension="1086238" displayable="false"/>
                     <id root="1.2.3" extension="158931502" displayable="false"/>
                     <id root="1.2.3" extension="158931402" displayable="false"/>
                     <id root="9.989898.5" extension="158933405" displayable="false"/>
                     <name use="L">
                        <family partType="FAM" representation="TXT" qualifier="VV">Levin</family>
                        <given partType="GIV" representation="TXT">Henry Sr</given>
                     </name>
                     <name use="L">
                        <family partType="FAM" representation="TXT">Levin</family>
                        <given partType="GIV" representation="TXT">Henry Jr</given>
                     </name>
                     <desc mediaType="image/png" compression="GZ" integrityCheck="3454bfb019d0e7d47a253b59cf234bc49a0e0cf8" representation="TXT">MNYD83jmMdomSJUEdmde9j44zmMir6edjzMMIjdMDSsWdIJdksIJR3373jeu83
      6edjzMMIjdMDSsWdIJdksIJR3373jeu83MNYD83jmMdomSJUEdmde9j44zmMir
      omSJUEdmde9j44zmMiromSJUEdmde9j44zmMirdMDSsWdIJdksIJR3373jeu83
      4zmMir6edjzMMIjdMDSsWdIJdksIJR3373jeu83==<reference value="http://example.org/xrays/128s8d9ej229se32s.png"><useablePeriod xsi:type="IVL_TS"><low value="200007200845" inclusive="true"/><high value="200008200845" inclusive="true"/></useablePeriod></reference><thumbnail mediaType="image/jpeg" representation="B64"></thumbnail></desc>
                     <statusCode code="active"/>
                     <telecom use="H" value="tel:1-690-555-1111"/>
                     <telecom use="WP" value="tel:1-690-555-1111"/>
                     <administrativeGenderCode code="F" codeSystemName="AdministrativeGender" codeSystem="2.16.840.1.113883.5.1" codeSystemVersion="2.01.4" displayName="Female"/>
                     <birthTime value="20060719080000-0800"/>
                     <deceasedInd value="true"/>
                     <deceasedTime value="20060719080000-0800"/>
                     <multipleBirthInd value="true"/>
                     <multipleBirthOrderNumber value="204"/>
                     <organDonorInd value="true"/>
                     <addr use="H">
                        <delimiter partType="DEL" representation="TXT">;</delimiter>
                        <country partType="CNT" representation="TXT">US</country>
                        <state partType="STA" representation="TXT">CA</state>
                        <city partType="CTY" representation="TXT">Fountain Hills</city>
                        <postalCode partType="ZIP" representation="TXT">85268</postalCode>
                        <streetAddressLine partType="SAL" representation="TXT">15542 OliveWest</streetAddressLine>
                        <houseNumberNumeric partType="BNN" representation="TXT">999777</houseNumberNumeric>
                        <houseNumber partType="BNR" representation="TXT">999777</houseNumber>
                        <direction partType="DIR" representation="TXT">N</direction>
                        <streetName partType="STR" representation="TXT">Church Street</streetName>
                        <streetNameBase partType="STB" representation="TXT">Church Street</streetNameBase>
                        <streetNameType partType="STTYP" representation="TXT">Avenue</streetNameType>
                        <unitID partType="UNID" representation="TXT">222222</unitID>
                        <censusTract partType="CEN" representation="TXT">testCensusValue</censusTract>
                        <unitType partType="UNIT" representation="TXT">Apartment</unitType>
                        <useablePeriod xsi:type="IVL_TS">
                           <low value="20070127" inclusive="true"/>
                           <high value="20070526" inclusive="false"/>
                        </useablePeriod>
                     </addr>
                     <addr use="H">
                        <delimiter partType="DEL" representation="TXT">;</delimiter>
                        <country partType="CNT" representation="TXT">US</country>
                        <state partType="STA" representation="TXT">CA</state>
                        <city partType="CTY" representation="TXT">Fountain Hills</city>
                        <postalCode partType="ZIP" representation="TXT">852</postalCode>
                        <streetAddressLine partType="SAL" representation="TXT">142 OliveWest</streetAddressLine>
                        <houseNumberNumeric partType="BNN" representation="TXT">9977</houseNumberNumeric>
                        <houseNumber partType="BNR" representation="TXT">9997</houseNumber>
                        <direction partType="DIR" representation="TXT">N</direction>
                        <streetName partType="STR" representation="TXT">Church Street</streetName>
                        <streetNameBase partType="STB" representation="TXT">Church Street</streetNameBase>
                        <streetNameType partType="STTYP" representation="TXT">Avenue</streetNameType>
                        <unitID partType="UNID" representation="TXT">222234</unitID>
                        <censusTract partType="CEN" representation="TXT">testCensusValue</censusTract>
                        <unitType partType="UNIT" representation="TXT">Apartment</unitType>
                        <useablePeriod xsi:type="IVL_TS">
                           <low value="20070127" inclusive="true"/>
                           <high value="20070526" inclusive="false"/>
                        </useablePeriod>
                     </addr>
                     <maritalStatusCode code="A" codeSystemName="MaritalStatus" codeSystem="2.16.840.1.113883.5.2" codeSystemVersion="2.01.4" displayName="Annulled"/>
                     <disabilityCode code="1" codeSystemName="PersonDisabilityType" codeSystem="2.16.840.1.113883.5.93" codeSystemVersion="2.01.4" displayName="Vision impaired"/>
                     <livingArrangementCode code="G" codeSystemName="LivingArrangement" codeSystem="2.16.840.1.113883.5.63" codeSystemVersion="2.01.4" displayName="Group Home"/>
                     <religiousAffiliationCode code="1001" codeSystemName="ReligiousAffiliation" codeSystem="2.16.840.1.113883.5.1076" codeSystemVersion="2.01.4" displayName="Adventist"/>
                     <raceCode code="1008-2" codeSystemName="Race" codeSystem="2.16.840.1.113883.5.104" codeSystemVersion="2.01.4" displayName="Algonquian"/>
                     <ethnicGroupCode code="2135-2" codeSystemName="Ethnicity" codeSystem="2.16.840.1.113883.5.50" codeSystemVersion="2.01.4" displayName="Hispanic or Latino"/>
                     <languageCommunication>
                        <languageCode code="EncounterStatus" codeSystemName="HDR Supplemental" codeSystem="2.16.840.1.113894.1004.100.100.2.5" codeSystemVersion="HDR Supplemental (2005-07-28)" displayName="EncounterStatus"/>
                        <modeCode code="ESGN" codeSystemName="LanguageAbilityMode" codeSystem="2.16.840.1.113883.5.60" codeSystemVersion="2.01.4" displayName="Expressed signed"/>
                        <proficiencyLevelCode code="E" codeSystemName="LanguageAbilityProficiency" codeSystem="2.16.840.1.113883.5.61" codeSystemVersion="2.01.4" displayName="Excellent"/>
                        <preferenceInd value="true"/>
                     </languageCommunication>
                  </employeePerson>
                  <employerOrganization classCode="ORG" determinerCode="INSTANCE">
                     <id root="1.2.3" extension="158931702" displayable="false"/>
                     <id root="9.989898.5" extension="158933406" displayable="false"/>
                     <id root="1.2.3" extension="158931802" displayable="false"/>
                     <id root="9.101010.5" extension="1086239" displayable="false"/>
                     <code code="NDA17" codeSystemName="EntityCode" codeSystem="2.16.840.1.113883.5.1060" codeSystemVersion="2.01.4" displayName="NDA17"/>
                     <name use="L">
                        <prefix partType="PFX" representation="TXT">Prime Health</prefix>
                        <suffix partType="SFX" representation="TXT">Clinic</suffix>
                     </name>
                     <name use="L">
                        <prefix partType="PFX" representation="TXT">Prime Health</prefix>
                        <suffix partType="SFX" representation="TXT">Speciality Center</suffix>
                     </name>
                     <desc mediaType="image/png" compression="GZ" integrityCheck="3454bfb019d0e7d47a253b59cf234bc49a0e0cf8" representation="TXT">MNYD83jmMdomSJUEdmde9j44zmMir6edjzMMIjdMDSsWdIJdksIJR3373jeu83
      6edjzMMIjdMDSsWdIJdksIJR3373jeu83MNYD83jmMdomSJUEdmde9j44zmMir
      omSJUEdmde9j44zmMiromSJUEdmde9j44zmMirdMDSsWdIJdksIJR3373jeu83
      4zmMir6edjzMMIjdMDSsWdIJdksIJR3373jeu83==<reference value="http://example.org/xrays/128s8d9ej229se32s.png"><useablePeriod xsi:type="IVL_TS"><low value="200007200845" inclusive="true"/><high value="200008200845" inclusive="true"/></useablePeriod></reference><thumbnail mediaType="image/jpeg" representation="B64"></thumbnail></desc>
                     <statusCode code="active"/>
                     <telecom use="H" value="tel:1-690-555-1111"/>
                     <addr use="H">
                        <delimiter partType="DEL" representation="TXT">;</delimiter>
                        <country partType="CNT" representation="TXT">US</country>
                        <state partType="STA" representation="TXT">CA</state>
                        <city partType="CTY" representation="TXT">Fountain Hills</city>
                        <postalCode partType="ZIP" representation="TXT">852</postalCode>
                        <streetAddressLine partType="SAL" representation="TXT">142 OliveWest</streetAddressLine>
                        <houseNumberNumeric partType="BNN" representation="TXT">9977</houseNumberNumeric>
                        <houseNumber partType="BNR" representation="TXT">9997</houseNumber>
                        <direction partType="DIR" representation="TXT">N</direction>
                        <streetName partType="STR" representation="TXT">Church Street</streetName>
                        <streetNameBase partType="STB" representation="TXT">Church Street</streetNameBase>
                        <streetNameType partType="STTYP" representation="TXT">Avenue</streetNameType>
                        <unitID partType="UNID" representation="TXT">222234</unitID>
                        <censusTract partType="CEN" representation="TXT">testCensusValue</censusTract>
                        <unitType partType="UNIT" representation="TXT">Apartment</unitType>
                        <useablePeriod xsi:type="IVL_TS">
                           <low value="20070127" inclusive="true"/>
                           <high value="20070526" inclusive="false"/>
                        </useablePeriod>
                     </addr>
                     <addr use="H">
                        <delimiter partType="DEL" representation="TXT">;</delimiter>
                        <country partType="CNT" representation="TXT">US</country>
                        <state partType="STA" representation="TXT">CA</state>
                        <city partType="CTY" representation="TXT">Fountain Hills</city>
                        <postalCode partType="ZIP" representation="TXT">85268</postalCode>
                        <streetAddressLine partType="SAL" representation="TXT">15542 OliveWest</streetAddressLine>
                        <houseNumberNumeric partType="BNN" representation="TXT">999777</houseNumberNumeric>
                        <houseNumber partType="BNR" representation="TXT">999777</houseNumber>
                        <direction partType="DIR" representation="TXT">N</direction>
                        <streetName partType="STR" representation="TXT">Church Street</streetName>
                        <streetNameBase partType="STB" representation="TXT">Church Street</streetNameBase>
                        <streetNameType partType="STTYP" representation="TXT">Avenue</streetNameType>
                        <unitID partType="UNID" representation="TXT">222222</unitID>
                        <censusTract partType="CEN" representation="TXT">testCensusValue</censusTract>
                        <unitType partType="UNIT" representation="TXT">Apartment</unitType>
                        <useablePeriod xsi:type="IVL_TS">
                           <low value="20070127" inclusive="true"/>
                           <high value="20070526" inclusive="false"/>
                        </useablePeriod>
                     </addr>
                     <standardIndustryClassCode code="001662" codeSystemName="HDR Supplemental" codeSystem="2.16.840.1.113894.1004.100.100.2.5" codeSystemVersion="HDR Supplemental (2005-07-28)" displayName="Snack"/>
                     <asPartOfWhole classCode="PART">
                        <id root="1.2.3" extension="158932002" displayable="false"/>
                        <id root="1.2.3" extension="158932102" displayable="false"/>
                        <code code="DEPEN" codeSystemName="RoleCode" codeSystem="2.16.840.1.113883.5.111" codeSystemVersion="2.01.4" displayName="DEPEN"/>
                        <statusCode code="active"/>
                        <effectiveTime xsi:type="IVL_TS">
                           <low value="20070127" inclusive="true"/>
                           <high value="20070526" inclusive="true"/>
                        </effectiveTime>
                     </asPartOfWhole>
                     <contactParty classCode="CON">
                        <id root="1.2.3" extension="158932302" displayable="false"/>
                        <id root="1.2.3" extension="158932402" displayable="false"/>
                        <code code="DEPEN" codeSystemName="RoleCode" codeSystem="2.16.840.1.113883.5.111" codeSystemVersion="2.01.4" displayName="DEPEN"/>
                        <telecom use="H" value="tel:1-690-555-1111"/>
                        <telecom use="WP" value="tel:1-690-555-1111"/>
                        <contactPerson classCode="PSN" determinerCode="INSTANCE">
                           <name use="L">
                              <family partType="FAM" representation="TXT">Levin</family>
                              <given partType="GIV" representation="TXT">Henry Jr</given>
                           </name>
                           <name use="L">
                              <family partType="FAM" representation="TXT" qualifier="VV">Levin</family>
                              <given partType="GIV" representation="TXT">Henry Sr</given>
                           </name>
                           <telecom use="H" value="tel:1-690-555-1111"/>
                           <telecom use="WP" value="tel:1-690-555-1111"/>
                           <asPersonDomain classCode="IDENT">
                              <id root="1.2.3" extension="158932602" displayable="false"/>
                              <code code="DEPEN" codeSystemName="RoleCode" codeSystem="2.16.840.1.113883.5.111" codeSystemVersion="2.01.4" displayName="DEPEN"/>
                           </asPersonDomain>
                        </contactPerson>
                     </contactParty>
                  </employerOrganization>
               </employmentStaff>
            </subject>
         </registrationEvent>
      </subject>
   </controlActProcess>
</ MFPM_IN000101 >

Error Messages

Note:

The & sign in the Error Message column of the above table indicates variable name. MTK displays the value of these variable at runtime.
Error Code Exception Type Error Message Error Description
CTB_MTK_NO_SCHEMA_INFO CTBValidationRuntimeException There is no SCHEMA in the list provided to test. Client application has passed a null SCHEMAINFORMATION object. This error shows that schemainformation object is not passed to the API .Please create schemainformation object array of xsds and mifs which are to be tested and pass it to the API.
CTB_MTK_NO_MIF_CONTENT CTBValidationRuntimeException The content of the MIF file &MIF_FILE_NAME is empty. In schemainformation object only MIF file name is set but the content of the file is not set . Please set the MIF file content as well on the schemainformation object.
CTB_MTK_NO_XSD_CONTENT CTBValidationRuntimeException The content of the XSD file &XSD_FILE_NAME is empty. In schemainformation object only XSD file name is set but the content of the file is not set . Please set the XSD file content as well on the schemainformation object.
CTB_MTK_NO_MIF_AND_XSD_CONTENT CTBValidationRuntimeException Both XSD &XSD_FILE_NAME and MIF &MIF_FILE_NAME are not present. In schemainformation object both XSD and MIF file name is set but the content of the files are not set . Please set the XSD and MIF file content as well on the schemainformation object.
CTB_MTK_INVALID_SCHEMA_TYPE CTBValidationRuntimeException Validation of input parameters failed. SCHEMA INFORMATION TYPE &SCHEMA_INFO_TYPE is not supported. SchemaInformation object requires a SCHEMA INFORMATION TYPE parameter to be set which can have following values 1.PAYLOAD 2.CMET 3. COREMIF. If another value other than these 3 values set for SCHEMA INFORMATION TYPE is encountered, this error is thrown . Please use the correct SCHEMA INFORMATION TYPE values in uploaded schemainformation object.
CTB_MTK_DUPLICATE_XSD CTBValidationRuntimeException XSD &XSD_FILE_NAME already exists as oracle ARTIFACTs. Please rename the ARTIFACT. This error shows that the xsd which user is trying to upload is already present as an Oracle supplied artifact . Please change the name of xsd (other than oracle supported ones) and set it on the schemainformation object.
CTB_MTK_NO_CORE_MIF CTBValidationRuntimeException The content of file CMETINFO.COREMIF file is empty. MTK throws this error when in the schemainformation object schema_type is set as coremif but the content of the files on the object are null. Please pass the coremif content as well in the schemainformation object.
CTB_MTK_PAYLOAD_NT_FOUND CTBValidationRuntimeException PAYLOAD XSD is not present in the SCHEMA information passed to MESSAGING TOOL KIT. MTK throws this error when in the schemainformation object does not contain payload xsd . Please pass the payload xsd information in schemainformation object.
CTB_MTK_DUPLICATE_PAYLOAD CTBValidationRuntimeException More than one PAYLOAD present in the SCHEMA information passed to MESSAGING TOOL KIT. MTK throws this error when in the schemainformation object array have more than one payload schemainformation objects . Please upload only one payload in schemainformation object array.
CTB_MTK_UNSUPPORTED_RIM_CLASS CTBRuntimeException PAYLOAD CLASS type '&PAYLOAD_TYPE' is unknown. If the payload entry point class is not of type ROLE or ACT, this error is thrown. Please use only ROLE or ACT payload types i.e the payload must have ROLE or ACT as entry point class.
CTB_MTK_INTR_XSD_BUILD_FAILED CTBRuntimeException INTERACTION SCHEMA validation failed. INTERACTION SCHEMA path: &INTR_SCHEMA. CAUSE: &CAUSE This error occurs when the uploaded xsds are incorrect or which have the datatypes or vocabulary values which are not supported in HDR. Please check that xsds generated by schema generator tool are correct and recheck the datatypes and vocabulary values used in RMIM (those have to be supported in HDR).

Schema validation failure for interaction schema.

CTB_MTK_MSG_PARSING_FAILED CTBRuntimeException XML message parsing failed. CAUSE: &CAUSE This is a program error where MTK is not able to parse the test message to persist it.
CTB_MTK_TRG_NOT_FOUND CTBRuntimeException TRIGGER CODE &TRIGGER_EVENT_CODE is not available in CODE SYSTEM &CODE_SYSTEM_NAME. CAUSE: &CAUSE This is a program error where the triggerCode generated in test message is an invalid concept.
CTB_MTK_RIM_ASSOCIATION_NT_FND CTBRuntimeException RIM ASSOCIATION not found in METADATA for ELEMENT name: &ELEMENT_NAME and parent COMPLEX TYPE&PARENT_COMPLEX_TYPE. MIF or XSD for this complex type may be invalid. MTK throws this error when it is unable to find the RIM association metadata for a RIM class from the database. As the metadata is generated from MIF file. Please check the MIF file is correct. The MIF file name can be found out from the complex type name given in the error message.
CTB_MTK_PARNT_CMPLX_TYP_NT_FND CTBRuntimeException The parent COMPLEX TYPE for the ELEMENT '&ELEMENT_NAME' is not found in METADATA. MIF or XSD for the complex type may be invalid MTK throws this error when it is not able to find parent complex type for an element from MIF metadata. Please check the MIF file is correct. The MIF file name can be found out from the complex type name given in the error message.
CTB_MTK_CODING_SCHEME_NT_FOUND CTBRuntimeException Unable to get coding scheme, for CODE: &CODE, and CODE System Name: &CODE_SYSTEM_NAME. CAUSE: &CAUSE This is a Program error where MTK is not able to find the code and code system name present in the test message from ETS.
CTB_MTK_PAYLOAD_INFO_NT_FOUND CTBRuntimeException Unable to parse PAYLOAD MIF file. PAYLOAD MIF file does not contain PAYLOAD ELEMENT, COMPLEX TYPE information. This is a program error which occurs due to failure in parsing of payload mif file.
CTB_MTK_CMPLX_TYPE_NT_FOUND CTBRuntimeException XSD COMPEX TYPE object for the COMPLEX TYPE name &COMPLEX_TYPE_NAME is not found in the xsd. This is a program error. This error occurs when MTK does not find a complex type in the xsd.
CTB_MTK_INCORRECT_FOCAL_CLASS CTBValidationRuntimeException The PAYLOAD XSD has unsupported focal CLASS. It should be either role or act. If the payload entry point class is not of type ROLE or ACT, this error is thrown. Please use only ROLE or ACT payload types i.e the payload must have ROLE or ACT as entry point class.
CTB_MTK_FILE_READ_FAILED CTBRuntimeException Unable to read file &FILE_NAME This is a program error when MTK is unable to read a file from disk.
CTB_MTK_FILE_WRITE_FAILED CTBRuntimeException Unable to write into the FILE: &FILE_NAME. CAUSE: &CAUSE This is a program error when MTK is unable to write a file to disk.
CTB_MTK_METDATA_NOT_FOUND CTBRuntimeException Unable to find METADATA for COMPLEX TYPE &COMPLEX_TYPE_NAME MTK throws this error when its not able to find metadata for a complex type. Please check the MIF file is correct. The MIF file name can be found out from the complex type name given in the error message.
CTB_MTK_CLASS_CODE_NT_FOUND CTBRuntimeException Unable to find CLASS CODE value for COMPLEX TYPE &COMPLEX_TYPE_NAME This is program error where MTK is not able to find a value for class Code attribute for particular xsd complex type. The error occurs when MTK is trying to generate the test message.
CTB_MTK_PAYLOAD_NOT_FOUND CTBValidationRuntimeException Unable to find PAYLOAD in INTERACTION SCHEMA. This is a program error, When MTK tries to find the payload complex type from interaction schema to generate the test instance, it does not find that and throws this error.
CTB_MTK_INCORRECT_INSTANCE CTBValidationRuntimeException Test message generation failed for INTERACTION SCHEMA &INTERACTIONS_SCHEMA. CAUSE: &CAUSE This is a program error, This error occurs when MTK generates and incorrect test message and the schema validation for the message fails.
CTB_MTK_CODED_ATTR_NOT_CREATED CTBRuntimeException Unable to create XML fragment for CODED attribute for ELEMENT &ELEMENT_NAME. CAUSE: &CAUSE This is a program error. This error occurs when MTK is unable to fetch ETS data for coded attributes to generate the test instance.
CTB_MTK_NOT_ENOUGH_VAL CTBValidationRuntimeException Concept list for CODEd attribute has less than two values for CONCEPT LIST &COCEPTLIST_NAME and XML ELEMENT name &ELEMENT_NAME If a concept list for a coded attribute has less than 2 concepts then this error is thrown . Please insert minimum of 2 concepts in all the extensible concept list.
CTB_MTK_II_FRAGMNT_NT_CREATED CTBRuntimeException Unable to create XML fragment for CODED attribute for ELEMENT &ELEMENT_NAME. CAUSE: &CAUSE This is a program error. This error occurs when MTK is not able to create id attribute data to generate a test instance.
CTB_MTK_XML_FRAGMENT_NT_FOUND CTBRuntimeException XML fragment is not seeded for data type &DATA_TYPE When MTK does not find a xml fragment for a datatype to generate a test message, this error is thrown. Please verify the only HDR supported datatypes are used in the RMIM.
CTB_MTK_ELMT_METADATA_NOTFOUND CTBRuntimeException Metadata not found for an element name &ELEMENT_NAME and parent complex type name &COMPLEX_TYPE_NAME MTK throws this error when its not able to find metadata for a complex type. Please check the MIF file is correct or not. The MIF file name can be found out from the complex type name given in the error message.
CTB_MTK_MSG_NT_PERSISTED CTBValidationRuntimeException IMP persistence failed. Acknowledgement message is &ACKNOWLEDGEMENT When MTK tries to persist the message through IMP and it fails in persistence, this error is thrown. Please fix the error shown in acknowledgement message and rerun the test case.
CTB_MTK_ATTR_VAL_NT_FOUND CTBRuntimeException Unable to generate test INSTANCE . No default value found in XSD for ATTRIBUTE &ATTR_NAME present in COMPLEX TYPE &COMPLEX_TYPE_NAME This is a program error. When MTK is not able to find a value for a structural attribute value from xsd or mif this error is thrown .
CTB_MTK_INVALID_ACTRELATION CTBValidationRuntimeException Validation of input SCHEMA failed. ACTRELATIONSHIP COMPLEX TYPE &COMPLEX_TYPE do not have TARGET ACT. This error occurs when MTK finds the an act relationship in xsd does not have a target act . Please fix the RMIM and XSD to have a target act for the corresponding act relationship.
CTB_MTK_XSD_LOAD_FAILED CTBRuntimeException Loading of Schema &XSD_PATH has failed. CAUSE: &CAUSE This error is thrown by MTK when the validation of uploaded xsd is failed . Please check the input xsds are correct.
CTB_MTK_INVALID_OB_PRTCPN CTBValidationRuntimeException Validation of input SCHEMA failed. OUTBOUND PARTICIPATION COMPLEX TYPE &COMPLEX_TYPE do not have target ROLE. This error occurs when MTK finds the a participation in xsd does not have a participant role . Please fix the RMIM and XSD to have a participant role for the corresponding participation.
CTB_MTK_INVALID_IB_PRTCPN CTBValidationRuntimeException Validation of input SCHEMA failed. INBOUND PARTICIPATION COMPLEX TYPE &COMPLEX_TYPE do not have TARGET ACT. This error occurs when MTK finds the an inbound participation in xsd does not have target act . Please fix the RMIM and XSD to have a target act for the corresponding participation.
CTB_MTK_XSD_MIF_ELMT_MISMATCH CTBValidationRuntimeException Input SCHEMA and MIF files does not match. Element &ELEMENT_NAME found in SCHEMA COMPLEX TYPE &COMPLEX_TYPE is missing in corresponding MIF file. This error occurs when there is a mismatch between MIF and XSD file of the same artifact i.e an element found XSD file is missing from the MIF file.
CTB_MTK_XSDMIF_CMPXTY_MISMATCH CTBValidationRuntimeException Input SCHEMA and MIF files does not match. SCHEMA COMPLEX TYPE &COMPLEX_TYPE is missing in corresponding MIF file. This error occurs when there is a mismatch between MIF and XSD file of the same artifact, that is, a complex type found XSD file is missing from the MIF file.
CTB_MTK_MS_SCM_VALIDATN_FAIL CTBValidationRuntimeException Message generated by OMP failed to validate against the schema. CAUSE: &CAUSE This is a program error. When MTK generates the persisted test message using OMP, the generated message fails schema validation and this error is thrown . Please contact your system administrator.
CTB_MTK_COREMIF_PARSE_FAILED CTBValidationRuntimeException Unable to merge the existing CMETINFO.COREMIF with the one provided as input, because parsing of &CORE_MIF failed. CAUSE: &CAUSE. For merging the CMETINFO.COREMIF file new uploaded CMETINFO.COREMIF has to be parsed, if the CMETINFO.COREMIF is not a valid xml file then MTK throws this error. Please fix CMETINFO.COREMIF and upload again.
CTB_MTK_NO_DEFAULT_CONCEPT CTBValidationRuntimeException CONCEPT LIST &CONCEPT_LIST should contain at least one CONCEPT from default CODING SCHEME VERSION. MTK throws this error when the default coding scheme has no valid concepts . Please ensure that all coding schemes have default version and should have at least one valid concept and concept list. These should have concepts from default coding schemes.
CTB_MTK_ACTIVE_STATUSCD_NTFND CTBValidationRuntimeException Test message generation failed. STATUS CODE CONCEPT LIST &CONCEPT_LIST do not have CONCEPT with CONCEPT CODE ACTIVE MTK throws an error while generating a test instance,when it does not find an "ACTIVE" statusCode in the system conceptlist . Please ensure that ACTIVE concept is available in the concept list.
CTB_MTK_MANDT_INPUT_MISSING CTBValidationRuntimeException The input parameter &TOKEN_NAME is passed as null. The request cannot be processed,because mandatory parameter &TOKEN_NAME has null value. MTK throws this error when any mandatory input parameter is not passed by the user.
CTB_MS_CMET_INFO_NOT_FOUND CTBValidationRuntimeException Unable to extract METADATA. CMET info file &CMETINFO_FILENAME not found. MTK throws this error from metadataservice when metadataservice is not able to find the CMETINFO.COREMIF file. Please check the CMETINFO.CORE MIF file is available on the server.
CTB_MS_CMET_TYPE_NOT_FOUND CTBValidationRuntimeException Unable to extract METADATA. CMET reference &REFERENCE in MIF file &MIFFILE is missing in CMETINFO.COREMIF file. MTK throws this error from metadataservice when metadataservice is not able to find the an entry of cmet in CMETINFO.COREMIF file. Please check the corresponding CMET entry is present in CMETINFO.COREMIF file.
CTB_MS_MIFFILE_NOT_FOUND CTBValidationRuntimeException Unable to extract METADATA. MIF file &MIFFILE not found . MTK throws this error from metadataservice when metadataservice is not able to find the MIF file to load the metadata. Please check the corresponding MIF file is available on the server.
CTB_MS_MIF_PARSING_FAILED CTBValidationRuntimeException Unable to extract METADATA. Unable to parse MIF file &MIFFILE. MTK throws this error from metadataservice when metadataservice is not able to parse a MIF file. Please check all MIF files are valid xmls.
CTB_MS_CMETINFO_PARSING_FAILED CTBValidationRuntimeException Unable to extract METADATA. Unable to parse CMET info file &CMETINFO_FILENAME. MTK throws this error from metadataservice when metadataservice is not able to parse CMETINFO.COREMIF. Please check CMETINFO.COREMIF file is valid xmls.
CTB_MS_INTR_SCHEMA_NOT_FOUND CTBValidationRuntimeException Unable to extract METADATA. INTERACTION SCHEMA file [&INTERACTION_SCHEMA] not found. MTK throws this error from metadataservice when metadataservice is not able to find interaction schema on the server.
CTB_MS_SCHEMA_PARSING_FAILED CTBValidationRuntimeException Unable to extract METADATA. Unable to parse INTERACTION SCHEMA &SCHEMA_FILE. MTK throws this error from metadataservice when metadataservice is not able to parse interaction schema on the server. Please contact your system administrator.
CTB_MS_MIF_DIR_NOT_FOUND CTBValidationRuntimeException Unable to extract METADATA. MIF directory &DIR_PATH not found. MTK throws this error from metadataservice when metadataservice is not able to find the directory for MIF files on the server.
CTB_MS_WRAPPER_METADT_NOTFOUND CTBValidationRuntimeException Unable to load metadata for an INTERACTION SCHEMA &SCHEMAFILE. Unable to find metadata for parent COMPLEX TYPE &COMPLEXTYPE of PAYLOAD &PAYLOAD_ELEMENT. MTK throws this error from metadataservice when metadataservice is not able to find metadata for the parent complex type element of the payload element in the database.
CTB_MTK_STATUS_FILE_NT_FOUND CTBValidationRuntimeException The STATUS file '&STATUS_FILE' is not available on the server MTK throws this error when it tries to download the status file from TEST_ID folder but does not find the folder with that TEST_ID name on the server . Please pass the correct TEST_ID name.
CTB_MTK_TEST_ID_DIR_NOT_FND CTBValidationRuntimeException The TEST ID directory &TEST_ID is not present on the server MTK throws this error when the Test ID folder is not found in the server.
CTB_MTK_CMET_ID_CONFLICT CTBValidationRuntimeException Unable to merge existing CMETINFO.COREMIF with user provided CMETINFO.COREMIF. CMET name &CMET_NAME already exists with different CMET ID. Existing CMET id &EXISTING_CMET_ID and new CMET ID &NEW_CMET_ID. This error occurs when user try to upload a CMETINFO.COREMIF file which has an entry with same cmet name as that of the one which is already uploaded but the corresponding CMET IDs for the new one and existing one are different .So if the new file is merged with the existing file , then there will be 2 entries of the same CMET name with a different CMET ID. This is incorrect. Please upload unique CMET names at all times and not applied to other CMET IDs.
CTB_MTK_CMET_NAME_CONFLICT CTBValidationRuntimeException Unable to merge existing CMETINFO.COREMIF with user provided CMETINFO.COREMIF. CMET id &CMET_ID already exists with different CMET name. Existing CMET name &EXISTING_CMET_NAME and new CMET name &NEW_CMET_NAME. This error occurs when user try to upload a CMETINFO.COREMIF file which has an entry with same CMET ID as that of the one which is already uploaded. These have different CMET names .Therefore if the new file is merged with the existing file, then there will be two entries of the same CMET ID with different CMET names. To avoid this error please upload unique CMET IDs which are not already used with other CMET names.
CTB_MTK_DUPLICATE_INTR_ID CTBRuntimeException The INTERACTION detail for the INTERACTION ID &INTERACTION_ID already exists. Unable to create INTERACTION detail When MTK tries to create a record for interaction ID in the database but the same interaction ID is already present then this error is thrown . Please use a different interaction ID which is not already seeded.
CTB_MTK_UNSUPPORTED_IP_PARAMS CTBRuntimeException Unable to create Composite Message Schema. The input parameter &TOKEN_VALUE for &TOKEN_NAME is not supported MTK throws this error when any input parameter is passed incorrectly; for example if a transmission wrapper ID passed by the user does not match with the transmission wrapper ID which HDR supports MTK throws this error. Please pass the correct input values.
CTB_MTK_PAYLOAD_ID_NOT_EXISTS CTBValidationRuntimeException Unable to create INTERACTION SCHEMA PAYLOAD ID does not exist for the given INTERACTION ID: &INTERACTION_ID MTK throws this error when it does not find payload xsd on the server to create an interaction schema for it. Please upload the payload xsd first and then create the interaction schemas for it.
CTB_MTK_PAYLOAD_XSD_NT_FOUND CTBValidationRuntimeException Unable to generate INTERACTION SCHEMA because Message Type XSD &XSD_PATH is not available. This error occurs when MTK does not find payload xsd on server with name given by the user . Please pass the correct payload ID as input.
CTB_MTK_SCHEMA_IN_USE CTBValidationRuntimeException Unable to delete the SCHEMA &SCHEMA from server.The SCHEMA is referred by the PAYLOAD &PAYLOAD. The error occurs when a schema is tried to be deleted, is referred by a payload present on the server. To delete the schema please delete the referring payload first.
CTB_MTK_HTB_ARTIFACT_FOUND CTBValidationRuntimeException Unable to delete ARTIFACTS. Customer cannot delete HDR specific ARTIFACT &ARTIFACT. MTK throws this error when user tries to delete Oracle artifacts . You are not supposed to delete Oracle artifacts.
CTB_MTK_INTR_SCHEMA_REF CTBValidationRuntimeException Can not delete PAYLOAD SCHEMA &PAYLOAD_SCHEMA as INTERACTION IDS &INTERACTION_IDS are configured for this PAYLOAD. MTK throws this error when you tries to delete a payload and that payload has a interaction ID configured in the table. Please delete the interaction IDs for the payload and then delete the payload.
CTB_MTK_XSD_NOT_EXISTS CTBValidationRuntimeException Unable to remove XSD &XSD_FILE, as it does not exist. This error occurs when an xsd is tried to be deleted which is not present on the server. In this case the xsd file name might be incorrectly passed. Please pass the correct xsd file name.
CTB_MTK_PAYLOAD_FOUND CTBValidationRuntimeException Invalid input data because input contains a SCHEMA of a PAYLOAD. LOADSCHEMA API accepts SCHEMAS of CMETS only. Instead use API LOADCUSTOMMESSAGETYPETOPRODUCTIONSERVER. MTK throws this error when the uploaded schema is of type PAYLOAD . Only CMETS are allowed to upload using this API. Please upload only CMETS.
CTB_MTK_INTR_DETAIL_NT_FND CTBValidationRuntimeException INTERACTION detail for INTERACTION ID &INTERACTION_ID is not available. Can not delete the INTERACTION detail entry. When MTK tries to delete an interaction schema on the server ,and if it does not find a record for the corresponding interaction ID in the interactions table, it throws this error . Please ensure that interaction ID record is available in the interactions table before deleting it.
CTB_MTK_INTR_RECV_CONFIG_EXIST CTBValidationRuntimeException Can not delete INTERACTION SCHEMA for INTERACTION ID &INTERACTION_ID as RECEIVERS are configured for this INTERACTION ID. When MTK tries to delete the interaction schema and for that interaction ID receivers are already configured then MTK cannot delete the interaction schema and throws this error. Please ensure that no receivers are configured for the interaction schema which is to be deleted.
CTB_MTK_INTR_SENDER_CONF_EXIST CTBValidationRuntimeException Can not delete INTERACTION SCHEMA for INTERACTION ID &INTERACTION_ID as SENDERS are configured for this INTERACTION ID. When MTK tries to delete the interaction schema and for that interaction ID senders are already configured then MTK cannot delete the interaction schema and throws this error. Please ensure that no senders are configured for the interaction schema which is to be deleted.