Как определить, существует ли сегмент в сообщении HL7 через NHAPI?

У меня есть сообщение SIU S12, которое не содержит сегмент PV2. Однако, когда я получаю проанализированное сообщение от NHAPI, родительская группа для PV2, группа SIU_S12_PATIENT, возвращает 1 для currentReps ("PV2"), что означает, что PV2 присутствует.

var parser = new NHapi.Base.Parser.PipeParser();
var parsedMessage = parser.Parse(message) as NHapi.Model.V231.Message.SIU_S12;
var patientGroup=parsedMessage.GetPATIENT(0);
// This call should not create the segment if it does not exist
int pv2Count=patientGroup.currentReps("PV2");
//pv2Count is 1 here despite no PV2 segment exists in the message
//also Both GetAll("PV2") and SegmentFinder say the PV2 segment is present
//DG1RepetitionsUsed is also 1 despite no DG1 segment is present in the message

Я пытаюсь избежать написания кода для оценки каждого поля в сегменте. PV2 - всего лишь пример - в источнике сообщений может отсутствовать намного больше сегментов.

Я использую NHAPI v 2.4, последнюю версию.

Обновление: по совету Тайсона, я придумала этот метод ;

var parser = new NHapi.Base.Parser.PipeParser();
var parsedMessage = parser.Parse(message) as NHapi.Model.V231.Message.SIU_S12;
var encodingChars = new NHapi.Base.Parser.EncodingCharacters('|', null);
var patientGroup = parsedMessage.GetPATIENT(0);
var dg1 = (NHapi.Model.V231.Segment.DG1) (patientGroup.GetStructure("DG1"));
string encodedDg1 = NHapi.Base.Parser.PipeParser.Encode(dg1, encodingChars);
bool dg1Exists = string.Compare(encodedDg1, 
    "DG1", StringComparison.InvariantCultureIgnoreCase)==0;

2 ответа

Решение

Самая простая вещь, которую я нашел, - это определить, находится ли сегмент в сообщении, это найти в фактической строке сообщения имя сегмента плюс канал. Так, например

    if(message.Contains("PV2|"))
    {
        //do something neat

    }

По моему опыту, это либо это, либо проверка каждого подполя в сегменте, чтобы увидеть, есть ли значение.

РЕДАКТИРОВАТЬ

Я нашел другой способ проверить, что может работать немного лучше. Класс PipeParser содержит несколько статических методов, которые принимают объекты ISegment, IGroup и IType, которые будут возвращать строковое представление ссылки на объект NHapi.

Образец кода:

        string validTestMessages =
      "MSH|^~\\&|ADT1|MCM|LABADT|MCM|198808181126|SECURITY|ADT^A01|MSG00001|P|2.6\r" +
      "EVN|A01-|198808181123\r" +
      "PID|||PID1234^5^M11^HBOC^CPI^HV||JONES^WILLIAM^A^III||19610615000000|M||2106-3|1200 N ELM STREET^^GREENSBORO^NC^27401-1020|GL||||S||S|123456789|9-87654^NC\r" +
      "PV1|1|I|||||TEST^TEST^TEST||||||||||||||||||||||||||||||||||||||||||||\r";

        var encodingChars = new EncodingCharacters('|', null);

        PipeParser parser = new PipeParser();

        var message = parser.Parse(validTestMessages);

        PV1 pv1 = (PV1)message.GetStructure("PV1");
        var doctor = pv1.GetAttendingDoctor(0);


        string encodedMessage = PipeParser.Encode(pv1, encodingChars);
        Console.WriteLine(encodedMessage);

        encodedMessage = PipeParser.Encode(doctor, encodingChars);
        Console.WriteLine(encodedMessage);

Выход:

PV1|1|I|||||TEST^TEST^TEST
TEST^TEST^TEST

если сегмента нет или элемент пуст, то PiperParser вернет пустую строку.

Вы можете читать сегмент за строкой в ​​файл и добавлять в hl7 объект записи и проверять, существует сегмент или нет.

пакет com.sachan.ranvijay@gmail.com.hl7.msg;

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import org.nule.lighthl7lib.hl7.Hl7Record;
    import org.nule.lighthl7lib.hl7.Hl7Segment;
    import com.stpl.hl7.dto.HL7PatientInfoDTO;

    /**
     * This class will parse the hl7 message. it can accept message  file in the format of java.io.file
     * as well as String. Its Uses org.nule.lighthl7lib.hl7.Hl7Record 
     * as a main component.
     * @author Ranvijay.Singh
     *
     */
    public class PrepareHL7Message {
        StringBuilder hl7Msg = new StringBuilder();
        Hl7Record record = null;
        public PrepareHL7Message(File file) throws Exception {

            BufferedReader reader = new BufferedReader(
                    new FileReader(file));
            String str = reader.readLine();
            while (str != null) {
                hl7Msg.append(str).append("\r");
                str = reader.readLine();
            }
            reader.close();
            try{
             record = new Hl7Record(hl7Msg.toString());
            }catch (Exception e) {
                throw e; 
            }
        }

        public PrepareHL7Message(String msg) throws Exception {

            try{
             record = new Hl7Record(msg);
            }catch (Exception e) {
                throw e; 
            }
        }
    private HL7PatientInfoDTO getPatientOrderingPhysician(HL7PatientInfoDTO padto) {
        Hl7Segment seg = record.getSegment("PV1");
        if(seg!=null)
        padto.setOrderingPhysician(seg.field(7).toString());
        return padto;
    }
    }

//DTO.............

package com.sachan.ranvijay@gmail.com.hl7.dto;

public class HL7PatientInfoDTO {

    /**
     * maped with PV1-7
     */
    private String orderingPhysician;

    /**
     * @return the orderingPhysician
     */
    public String getOrderingPhysician() {
        return orderingPhysician;
    }

    /**
     * @param orderingPhysician the orderingPhysician to set
     */
    public void setOrderingPhysician(String orderingPhysician) {
        this.orderingPhysician = orderingPhysician;
    }
}
Другие вопросы по тегам