Question
Vivek Nayak · Feb 8, 2022

Duplicate Resource added in FHIR Repository

I have the " FHIR Production" which converts HL to FHIR, CDA to FHIR and accepts FHIR rest API to insert data into the FHIR repository.

When data is added by the above production, The Repository Stores that data as new data.

Is there any way to check resource duplication before inserting them into the repository?

Thanks,

Vivek Nayak

Product version: IRIS 2021.1
0
0 270
Discussion (2)2
Log in or sign up to continue

If you don't want to create new data on the FHIR protocol, you must use the PUT verb with an ID instead of POST.

PUT creates the resource with the specified ID if the ID does not exist, otherwise it replaces the pre-existing data.

POST always creates a new resource with a new ID, that's why the ID is not mandatory when POSTing.

For automatic transformations from HL7/CDA to FHIR, there is the possibility to define the ID for some resources and thus to avoid duplication.

Below is an example of code to transform an HL7 payload to SDA by specifying the ID of the patient in order to avoid duplicating this resource, after that you can transform this SDA to FHIR with no duplication of patient.

/// This is a custom business process that transforms an HL7 message to SDA format (an internal healthcare data format for InterSystems IRIS for Health).
/// To use this class, add a business process with this class to the production and configure the target. The default target will send the SDA to a component
/// that converts the data to FHIR.
/// 
Class FHIRDemo.HL7TransformProcess Extends Ens.BusinessProcess [ ClassType = persistent ]
{

Parameter SETTINGS = "TargetConfigName:Basic:selector?context={Ens.ContextSearch/ProductionItems?targets=1&productionName=@productionId},TransformFile:Basic";

Property TargetConfigName As Ens.DataType.ConfigName [ InitialExpression = "HS.FHIR.DTL.Util.HC.SDA3.FHIR.Process" ];

/// Transforms an HL7 message to SDA, an internal healthcare format for InterSystems IRIS for Health.
Method OnRequest(pRequest As EnsLib.HL7.Message, Output pResponse As Ens.Response) As %Status
{
    set tSC = $$$OK
    try {
        $$$ThrowOnError(##class(HS.Gateway.HL7.HL7ToSDA3).GetSDA(pRequest,.tSDA))
        $$$LOGINFO(tSDA.Read())

        Set tQuickStream = ##class(HS.SDA3.QuickStream).%New()
        $$$ThrowOnError(tQuickStream.CopyFrom(tSDA))

        Set tResponse = ##class(HS.Message.XMLMessage).%New()
        Do tResponse.AdditionalInfo.SetAt(tQuickStream.%Id(),"QuickStreamId")
        Do tResponse.AdditionalInfo.SetAt($P(pRequest.GetValueAt("PID:3:1"),"^"),"PatientResourceId")

        Set tSC = ..SendRequestSync(..TargetConfigName,tResponse,.pResponse)
    } catch ex {
        set tSC = ex.AsStatus()
    }
    quit tSC
}

Storage Default
{
<Data name="HL7TransformProcessDefaultData">
<Subscript>"HL7TransformProcess"</Subscript>
<Value name="1">
<Value>TargetConfigName</Value>
</Value>
</Data>
<DefaultData>HL7TransformProcessDefaultData</DefaultData>
<Type>%Storage.Persistent</Type>
}

}

Hi

If I add the same patient data with a different unique ID then it inserts as new data using a POST request.
So, In the FHIR server How can I prevent this kind of thing by using POST requests?
Note:- I don't want to use a PUT request for the same. The main thing is I want to get a unique patient record.
Que:- Is there any way to check data duplication on each FHIR resource?

Thanks & Regards,

Harshdeep Acharya