Below is a sample business operation that accepts an HL7 message and transforms it into a C-CDA document:
Class Test.HL7Transformer Extends (Ens.BusinessOperation)
[ Inheritance = right, ProcedureBlock ]
{
Parameter INVOCATION = "Queue";
/// XDSb source operations component
Property XDSbSourceOperations As Ens.DataType.ConfigName
[ InitialExpression = "HS.IHE.XDSb.DocumentSource.Operations"];
Parameter SETTINGS As %String = "XDSbSourceOperations";
XData MessageMap
{
<MapItems>
<MapItem MessageType="EnsLib.HL7.Message">
<Method>ProcessHL7Message</Method>
</MapItem>
</MapItems>
}
/// Process an inbound HL7 v2.5.1 message
Method ProcessHL7Message(pRequest As EnsLib.HL7.Message,
Output pResponse As EnsLib.HL7.Message) As %Status
{
Try {
// Convert the HL7 message to SDA3
Set tSC = ##class(HS.Gateway.HL7.HL7ToSDA3).GetSDA(pRequest,.tSDA3Stream)
Quit:$$$ISERR(tSC)
// Transform the SDA3 to a C-CDA
Set tTransformer = ##class(HS.Util.XSLTTransformer).%New()
Set tSC= tTransformer.Transform(tSDA3Stream,"SDA3/SDA-to-CCDA-CCD.xsl",.tCDAStream)
Quit:$$$ISERR(tSC)
// Create a Provide and Register
Set tRequest = ##class(HS.Message.IHE.XDSb.ProvideAndRegisterRequest).%New()
Set tDocument = ##class(HS.Message.IHE.XDSb.Document).%New()
Set tDocument.FormatCode=##class(HS.IHE.XDSb.Types.CodedValue).Create(
"urn:hl7-org:sdwg:ccda-structuredBody:1.1","1.3.6.1.4.1.19376.1.2.3",
"Consolidated CDA R1.1 Structured Body Document")
Set tDocument.MimeType="text/xml"
// Copy the C-CDA into the message
Do tDocument.BodyCharacter.CopyFrom(tCDAStream)
Do tRequest.Documents.Insert(tDocument)
// Call the document source operation
Set tSC = ..SendRequestSync(..XDSbSourceOperations,tRequest,.tResponse)
Quit:$$$ISERR(tSC)
} Catch ex {
Set tSC= ex.AsStatus()
}
Quit tSC
}
}