Question:
I’m looking the way to get “DISTINCT” OBR-3.1 value messages. How can I do this in custom code. I want to show any messages that have duplicate OBR-3.1 values to a new tab. Please note we have multiple OBR segments per message.
Answer:
The following code should do the trick.
private class TrackedItem { public List<IMessageData> Messages=new List<IMessageData>(); public int Index {get;set;} } Dictionary<string,TrackedItem> _knownValues = new Dictionary<string,TrackedItem>(StringComparer.CurrentCultureIgnoreCase); public override void OnStart() { _knownValues.Clear(); } public override void Run() { // Get an HL7 Message in parsed format HL7Message message = GetParsedMessage(); OBR obr = message.Segments.First<OBR>(); if(obr != null && !string.IsNullOrEmpty(obr.FillerOrderNumber_03.Value)) { string obrIdentifier = obr.FillerOrderNumber_03.Value; TrackedItem item; if(!_knownValues.TryGetValue(obrIdentifier,out item)) { item = new TrackedItem(); _knownValues.Add(obrIdentifier,item); } else { Log(Severity.Informational,string.Format("duplicates found at index",MessageIndex)); if(item.Index==0) item.Index = MessageIndex; } item.Messages.Add(Message); } } public override void OnFinish() { var list = _knownValues.Values.Where(i=>i.Messages.Count>1).ToList(); Log(Severity.Informational,string.Format("{0} duplicates found",list.Count)); foreach(TrackedItem item in list) { SaveMessage(item.Messages,"Duplicates"); } }