Question:
What I want to do is for each of the three accounts contained in PID-18, show all PR1-3 fields for all PR1 segments. Typically, these are sequential segments, e.g., PR1|1…, PR1|2…, etc. The purpose is to generate a list of all procedure and CPT codes for each of the patients.
Answer:
please try the following code:
make sure you can access the c:\temp directory, that is where the file is being stored.
To narrow the search, use HL7 SQL to filter for the patient accounts you are interested in, into a separate tab (SELECT INTO).
or, modify the _patientAccount list below to include the patients you want included, and uncomment the code with the // (1) “Uncomment me” comment
string _fileName = @"c:\temp\_test.txt"; private StreamWriter _writer; // patient Identifiers private string[] _patientAccounts = new string[]{"952-11-3088", "H000759100", "H000759092", "H000759118"}; public override void OnStart() { _writer = new StreamWriter(_fileName); } public override void Run() { // Get an HL7 Message in parsed format HL7Message message = GetParsedMessage(); PID pid = message.Segments.First<PID>(); if(pid==null) return; // no pid segment // (1) Uncomment me //if(!_patientAccounts.Contains(pid[18,1,1])) // return; foreach(var pr1 in message.Segments.OfType<PR1>()) { if(pr1[3]!="") { _writer.WriteLine("{0},{1},{2},{3},{4},{5}",this.MessageIndex, pid[18], message.MSH[7], message.MSH[10], pid[5], pr1[3]); } } } // Called once after the last message has been processed. // It is a good place to perform cleanup and to report information. // Always called from the UI thread. public override void OnFinish() { if(_writer!=null) { _writer.Close(); _writer = null; } // launch notepad to display the file. System.Diagnostics.Process.Start("Notepad",_fileName); }