13 HDR Clinical Document Architecture (CDA) Persistence

Overview

You can use the CDA Persistence or CDA Ingest Web service to parse and import various document types such as CDA, HITSP C32 v2.5, HITSP C32 v2.4, HITSP c37, HITSP C48, and HITSP C78 into HDR

This Web service offers two operations as follows:

  1. importDocument(DocumentUniqueId) : Using the documentUniqueID provided by user, this operation will first query the document that was already persisted using IHE XDS.b ITI-41 transaction, parses the retrieved document, and imports or persists the document atomically into HDR DB.

    Also this operation throws the following SOAP faults to the user:

    • incorrectInput - When client does not specify the value for DocumentUniqueId element.

    • invalidCDADoc - When the validation of input xml against CDA.xsd fails.

    • noRootFound - When none of the templateID elements in input xml file have the root attribute value.

    • invalidDocIDFault - When there is no document with the provided uniqueID exists in HDR DB.

    • aFault - For all other erroneous conditions.

  2. persistDocument(documentContent In Base64 format, documentId): This operation lets the user to provide the document in base64 format which they are interested to parse and import it in HDR DB atomically. This operation takes two parameters, a mandatory documentContent parameter, and an optional documentId. The first parameter documentContent represents the document in Base64 format. In case the user also provides the second optional parameter, documentId, then the Service will query the DOCCLIN Act using the provided documentId, and establishes a SUBJ Act relationship between the queried documentId and the newly persisted document's documentId.

    Also this operation throws the following SOAP faults to the user:

    • incorrectInput - When client doesn't specify the value for Document element.

    • invalidCDADoc - When the validation of input xml against CDA.xsd fails.

    • noRootFound - When none of the templateID elements in input xml file have the root attribute value.

    • invalidDocIDFault - When there is no document with the provided uniqueID exists in HDR DB.

    • aFault - For all other erroneous conditions.

    Note:

    This service will override the already existing document import mode feature in IHE XDS.b Web Service.

Having this Web service available in HDR, it is not recommended to use IHE XDS.b ITI-41 transaction (ProvideAndRegisterDocumentSet-B) to import the document into HDR. The IHE XDS.b ITI-41 transaction should be used to store the CDA, HITSP C32 v2.5, HITSP C32 v2.4, HITSP C37, HITSP C48, HITSP C78, and Discharge Summary documents into HDR. If customers want to import the document, they should rely on importDocument or persistDocument operations provided by this CDA Persistence Web service.

WSDL CDA Persistence Implementation

Click this link for WSDL that describes CDAPersistenceWebService with SOAP11 Binding.

Click this link for WSDL that describes CDAPersistenceWebService with SOAP12 Binding.

WS-Security for CDA Persistence Web Service

In HDR, the CDA Persistence Web service is implemented with WS-Security UserName Token profile. The Web service client has to supply UserName and Password in SOAP Header of the SOAP request that will be used to load the CDA Persistence Web service. The WebLogic server performs the user authentication using the Web service client provided UserName and Password values.

Sample CDA Persistence --> persistDocument Web Service SOAP request

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:orac="http://oracle.apps.ctb.cdapersistence.types">
 
   <soap:Header>
 
      <wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
 
         <wsse:UsernameToken wsu:Id="UsernameToken-10">
 
            <wsse:Username>IHE_XDS_USER</wsse:Username>
 
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"><USER_PASSWORD></wsse:Password>
 
         </wsse:UsernameToken>
 
      </wsse:Security>
 
   </soap:Header>
 
   <soap:Body>
 
   <orac:PersistCDADocumentRequest>
 
<orac:Document>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjwhLS0gZWRpdGVkIHdpdGggWE1MU3B5IHYyMDExIChodHRwOi8vd3d3LmFsdG92YS5jb20pIGJ5IExlbiBHYWxsYWdoZXIgKE5JU1QpIC0tPg0KPCEtLVNhbXBsZSBYTUwgZmlsZSBnZW5lcmF0ZWQgYnkgWE1MU3B5IHYyMDA3IHNwMiAoaHR0cDovL3d3dy5hbHRvdmEuY29tKS0tPg0KPENsaW5pY2FsRG9jdW1lbnQgeG1sbnM9InVybjpobDctb3JnOnYzIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249InVybjpobDctb3JnOnYzIGh0dHA6Ly94cmVnMi5uaXN0Lmdvdjo4MDgwL2hpdHNwVmFsaWRhdGlvbi9zY2hlbWEvY2RhcjJjMzIvaW5mcmFzdHJ1Y3R1cmUvY2RhL0MzMl9DREEueHNkIj4NCgk8cmVhbG1Db2RlIGNvZGU9IlVTIi8+DQoJPHR5cGVJZCByb290PSIyLjE2Ljg0MC4xLjExMzg4My4xLjMiIGV4dGVuc2lvbj0iUE9DRF9IRDAwMDA0MCIvPg0KCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjMuMjcuMTc3NiIgYXNzaWduaW5nQXV0aG9yaXR5TmFtZT0iQ0RBL1IyIi8+DQoJPHRlbXBsYXRlSWQgcm9vdD0iMi4xNi44NDAuMS4xMTM4ODMuMTAuMjAuMyIgYXNzaWduaW5nQXV0aG9yaXR5TmFtZT0iSEw3L0NEVCBIZWFkZXIiLz4NCgk8dGVtcGxhdGVJZCByb290PSIxLjMuNi4xLjQuMS4xOTM3Ni4xLjUuMy4xLjEuMSIgYXNzaWduaW5nQXV0aG9yaXR5TmFtZT0iSUhFL1BDQyIvPg0KCTx0ZW1wbGF0ZUlkIHJvb3Q9IjIuMTYuODQwLjEuMTEzODgzLjMuODguMTEuMzIuMSIgYXNzaWduaW5nQXV0aG9yaXR5TmFtZT0iSElUU1AvQzMyIi8+DQoJPGlkIHJvb3Q9IjIuMTYuMy41LjYiIGV4dGVuc2lvbj0iVGVzdDAxX0NDRDM5MCIgYXNzaWduaW5nQXV0aG9yaXR5TmFtZT0iTklTVCBIZWFsdGhjYXJlIFByb2plY3QiLz4NCgk8IS0tVGhlIEhMNy9DQ0Qgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGF0IGV2ZXJ5IENDRCBDbGluaWNhbERvY3VtZW50IGNvbnRhaW4gdGhlICBzcGVjaWZpYyBMT0lOQyBjb2RlIDM0MTMzLTkuIE5vdGUgdGhhdCBNZWFuaW5nZnVsIFVzZSBkZWZlcnMgdG8gSUhFIHNwZWNpZmljYXRpb25zIHdoaWNoIGRvIG5vdCByZXF1aXJlIHRoZSBDQ0QgdGVtcGxhdGVJZCBvbiB0aGUgZG9jdW1lbnQgaXRzZWxmLCB0aHVzIGFsbG93aW5nIG90aGVyIGNvZGVzIHRvIGJlIHVzZWQgYXQgdGhpcyBsb2NhdGlvbi4gVG8gYXZvaWQgY29uZnVzaW9uIGl0IG1heSBiZSBiZXN0IHRvIHN0aWNrIHdpdGggdGhpcyBjb2RlIGFzIGZpeGVkIGluIHRoZSBhYnNlbmNlIG9mIGFub3RoZXIgcmVxdWlyZWQgc3Vic3RpdHV0ZS4tLT4NCgk8Y29kZSBjb2RlPSIzNDEzMy05IiBkaXNwbGF5TmFtZT0iU3VtbWFyaXphdGlvbiBvZiBlcGlzb2RlIG5vdGUiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjYuMSIgY29kZVN5c3RlbU5hbWU9IkxPSU5DIi8+DQoJPHRpdGxlLz4NCgk8ZWZmZWN0aXZlVGltZSB2YWx1ZT0iMjAxMDEwMjYxMzA5NDUiLz4NCgk8Y29uZmlkZW50aWFsaXR5Q29kZS8+DQoJPGxhbmd1YWdlQ29kZSBjb2RlPSJlbi1VUyIvPg0KCTxyZWNvcmRUYXJnZXQ+DQoJCTxwYXRpZW50Um9sZT4NCgkJCTwhLS1UaGUgSElUU1AvQzMyIHNwZWNpZmljYXRpb24gcmVxdWlyZXMgdGhhdCBjZXJ0YWluIHBhdGllbnQgZWxlbWVudHMgYmUgcHJlc2VudCwgYnV0IGRvZXMgbm90IHJlcXVpcmUgdGhhdCB0aGV5IGJlIG5vbi1lbXB0eS4gQSBtZWFuaW5nZnVsIGRvY3VtZW50IHNob3VsZCBjb250YWluIGVpdGhlciBhIGNvbXBsZXRlIHBhdGllbnRSb2xlL0lkIG9yIGF0IGxlYXN0IGdpdmVuIGFuZCBmYW1pbHkgbmFtZXMuLS0+DQoJCQk8aWQvPg0KCQkJPGFkZHI+DQpOb25lIG9mIHRoZSBmb2xsb3dpbmcgYWRkcmVzcyBlbGVtZW50cyBhcmUgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIGJ5IEhJVFNQIEMzMiwgc28gdGhlIGFkZHJlc3MgY291bGQgYmUganVzdCBwbGFpbiB0ZXh0IGF0IHRoaXMgbG9jYXRpb24/IFVzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGxhYmVsZWQgYWRkcmVzcyBsaW5lcywgd2l0aCBtZWFuaW5nZnVsIGNvbnRlbnQsIGlzIGVuY291cmFnZWQuDQoJCQkJPHN0cmVldEFkZHJlc3NMaW5lLz4NCgkJCQk8c3RyZWV0QWRkcmVzc0xpbmUvPg0KCQkJCTxjaXR5Lz4NCgkJCQk8c3RhdGUvPg0KCQkJCTxwb3N0YWxDb2RlLz4NCgkJCQk8Y291bnRyeS8+DQoJCQk8L2FkZHI+DQoJCQk8dGVsZWNvbS8+DQoJCQk8cGF0aWVudD4NCgkJCQk8bmFtZT4NCgkJCQkJPGdpdmVuLz4NCgkJCQkJPGdpdmVuLz4NCgkJCQkJPGZhbWlseS8+DQoJCQkJPC9uYW1lPg0KCQkJCTwhLS1ISVRTUC9DODMgcmVxdWlyZXMgcGF0aWVudCBhZG1pbmlzdHJhdGl2ZSBnZW5kZXIsIGUuZy4gTSwgRiwgSSAoaW5kZXRlcm1pbmF0ZSktLT4NCgkJCQk8YWRtaW5pc3RyYXRpdmVHZW5kZXJDb2RlIGNvZGU9IkYiIGRpc3BsYXlOYW1lPSJGZW1hbGUiIGNvZGVTeXN0ZW09IjIuMTYuODQwLjEuMTEzODgzLjUuMSIgY29kZVN5c3RlbU5hbWU9IkhMNyBBZG1pbmlzdHJhdGl2ZUdlbmRlciIvPg0KCQkJCTwhLS1ISVRTUC8zMiB3aXRoIElIRSBlbmhhbmNlbWVudHMgcmVxdWlyZXMgdGhhdCB0aGUgcGF0aWVudCBiaXJ0aFRpbWUgZWxlbWVudCBiZSBwcmVjaXNlIGF0IGxlYXN0IHRvIHllYXIgYW5kIHN0YXRlcyB0aGF0IGl0IHNob3VsZCBiZSBwcmVjaXNlIGF0IGxlYXN0IHRvIGRheS4gLS0+DQoJCQkJPGJpcnRoVGltZSB2YWx1ZT0iMTk4NDA3MDQiLz4NCgkJCTwvcGF0aWVudD4NCgkJPC9wYXRpZW50Um9sZT4NCgk8L3JlY29yZFRhcmdldD4NCgk8YXV0aG9yPg0KCQk8IS0tSElUU1AvMzIgd2l0aCBJSEUgZW5oYW5jZW1lbnRzIHJlcXVpcmVzIHRoYXQgdGhlIGF1dGhvciB0aW1lIGVsZW1lbnQgYmUgcHJlY2lzZSBhdCBsZWFzdCB0byBkYXkgYW5kIHN0YXRlcyB0aGF0IGl0IHNob3VsZCBiZSBhIHRpbWVzdGFtcCB3aXRoIHByZWNpc2lvbiBhdCBsZWFzdCB0byBzZWNvbmQuIC0tPg0KCQk8dGltZSB2YWx1ZT0iMjAxMDEwMjYxNDU3MzAiLz4NCgkJPGFzc2lnbmVkQXV0aG9yPg0KCQkJPGlkLz4NCgkJCTxhZGRyLz4NCgkJCTx0ZWxlY29tLz4NCgkJCTxhc3NpZ25lZFBlcnNvbj4NCgkJCQk8bmFtZS8+DQoJCQk8L2Fzc2lnbmVkUGVyc29uPg0KCQkJPHJlcHJlc2VudGVkT3JnYW5pemF0aW9uPg0KCQkJCTxuYW1lPk5JU1QgSGVhbHRoY2FyZSBUZXN0aW5nIExhYm9yYXRvcnk8L25hbWU+DQoJCQkJPHRlbGVjb20vPg0KCQkJCTxhZGRyLz4NCgkJCTwvcmVwcmVzZW50ZWRPcmdhbml6YXRpb24+DQoJCTwvYXNzaWduZWRBdXRob3I+DQoJPC9hdXRob3I+DQoJPGN1c3RvZGlhbj4NCgkJPGFzc2lnbmVkQ3VzdG9kaWFuPg0KCQkJPHJlcHJlc2VudGVkQ3VzdG9kaWFuT3JnYW5pemF0aW9uPg0KCQkJCTxpZC8+DQoJCQkJPG5hbWUvPg0KCQkJCTx0ZWxlY29tLz4NCgkJCQk8YWRkci8+DQoJCQk8L3JlcHJlc2VudGVkQ3VzdG9kaWFuT3JnYW5pemF0aW9uPg0KCQk8L2Fzc2lnbmVkQ3VzdG9kaWFuPg0KCTwvY3VzdG9kaWFuPg0KCTxjb21wb25lbnQ+DQoJCTxub25YTUxCb2R5Pg0KCQkJPHRleHQvPg0KCQk8L25vblhNTEJvZHk+DQoJPC9jb21wb25lbnQ+DQo8L0NsaW5pY2FsRG9jdW1lbnQ+DQo=</orac:Document>
 
         <!--Optional:-->
 
         <orac:DocumentId>2.16.3.5.6^Test01_CCD390</orac:DocumentId>
 
      </orac:PersistCDADocumentRequest>
 
   </soap:Body>
 
</soap:Envelope>

where the user provided underneath the SOAP Header should have already been created under WebLogic default Security Realm myrealm.

Sample for successful CDA Persistence --> persistDocument Web Service SOAP response

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:orac="http://oracle.apps.ctb.cdapersistence.types">
 
    <soap:Body>
 
      <orac: PersistCDADocumentResponse >
 
         <orac:status>SUCCESS</orac:status>
 
      </orac: PersistCDADocumentResponse >
 
   </soap:Body>
 
</soap:Envelope>

Sample CDA Persistence à importDocument Web Service SOAP request

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:orac="http://oracle.apps.ctb.cdapersistence.types">
 
   <soap:Header>
 
      <wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
 
         <wsse:UsernameToken wsu:Id="UsernameToken-10">
 
            <wsse:Username>IHE_XDS_USER</wsse:Username>
 
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"><USER_PASSWORD></wsse:Password>
 
         </wsse:UsernameToken>
 
      </wsse:Security>
 
   </soap:Header>
 
   <soap:Body>
 
      <orac:ImportCDADocumentRequest>
 
        <orac:DocumentUniqueId>1.1.1.1.1.1.53351113</orac:DocumentUniqueId>
 
      </orac:ImportCDADocumentRequest>
 
   </soap:Body>
 
</soap:Envelope>

where the user provided under the SOAP Header should have already been created under WebLogic default Security Realm myrealm.

Sample for successful CDA Persistence --> importDocument Web Service SOAP response

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:orac="http://oracle.apps.ctb.cdapersistence.types">
 
    <soap:Body>
 
      <orac: ImportCDADocumentResponse >
 
         <orac:status>SUCCESS</orac:status>
 
      </orac: ImportCDADocumentResponse >
 
   </soap:Body>
 
</soap:Envelope>