Question:
Here is some custom code that you wrote for as a while back. The code exports a row for every unique OBR 4 and OBX 3 pair, and a count of the occurrences. This report is used by our lab mappers during the mapping process for a new laboratory. The lab mappers are requesting that the report contain additional information. Below is what they are requesting, with the more important item on top:
Include a full message with each OBR 4 – OBX 3 pair. It could be the 1st message for this pair, the last message for this pair, or any other message for this pair. Which message isn’t as import as actually having a message that contains the OBR 4 – OBX 3 pair. They plan to visually review this message as they are doing the mapping to resolve any issues with method, units, reference range, etc.
Include a list of OBR 4 terms only without any OBX information. They plan to use this for mapping the OBR 4 term, which we do for radiology and text reports.
Answer:
The following code will create a
private class TrackedItem { public string Value {get;set;} public int Counter {get;set;} } Dictionary<string,TrackedItem> _knownValues = new Dictionary<string,TrackedItem>(StringComparer.CurrentCultureIgnoreCase); private string _fileName = @"C:\temp\data.hl7"; public override void Run() { // Get an HL7 Message in parsed format HL7Message message = GetParsedMessage(); foreach(OBX obx in message.GetSegments<OBX>()) { string obrIdentifier = message["OBR-4.1.1"]; string obxIdentifier = obx.ObservationIdentifier_03.Identifier_01.Value; string key = (obrIdentifier + "-" + obxIdentifier).Trim(); TrackedItem item; if(key=="-") continue; if(!_knownValues.TryGetValue(key,out item)) { item = new TrackedItem(); item.Value = string.Format("{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}",message["OBR-4.1"],message["OBR-4.2"],message["OBR-4.3"],obx.ObservationIdentifier_03.Identifier_01, obx.ObservationIdentifier_03.Text_02, obx.ObservationIdentifier_03.NameOfCodingSystem_03,obx.Units_06,obx.ReferencesRange_07); _knownValues.Add(key,item); } item.Counter = item.Counter + 1; } } public override void OnFinish() { using(var stream = new System.IO.StreamWriter(_fileName)) { foreach(TrackedItem item in _knownValues.Values.OrderByDescending(i=>i.Counter)) { stream.Write(item.Counter.ToString()); stream.Write("|"); stream.WriteLine(item.Value); } } try{ // System.Diagnostics.Process.Start("Notepad",_fileName); } catch{} }