2015-03-04 4 views
1

Я новичок в Nhapi и использую его для разбора сообщения HL7.Nhapi Parsing Issue

Проблема, с которой я столкнулся, - это синтаксический анализ сообщения ADT^A03, но всегда я получаю сегмент PV1 как null.

Я прилагаю Образец сообщения и мой код.

Пример сообщения:

MSH|^~\&|MMM|MMM|||201412081017||ADT^A03|2014342370374441||2.3 
EVN|A03|201412081017|201412080001||73540 
PID|1||000000004449^^^PHS^MR|491662^^^MMM|||19500225|F||1||||||D|CAT|78599180^^M10^MMM^PN| 
PD1||1|||||NNN||||| 
NK1|0001|NONE AS PER PT^NONE AS PER PT^^^^^L|19||||JUCON|||||||||||||||||||||||||||||| 
NK1|0002|NONE^^^^^^L|||||PTEMP|||UNEMPLOYED||||||||||||||||||||||||||| 
PV1|1|O||R|||001211^RAM SHYAM|001211^RAM SHYAM||SDO||||OU|||001211^RAM SHYAM|U||H^20141208||||||||||||||||AHR|||PNKN|||||201412080625|201412081015 
PV2||||||||201412080001|||||||N|||||1||||OD||||||||||||| 
GT1|0001||SHYAM^RAM|||||19500225|F|P|01|00000000||||NONE|||||||||||||||||||||||||||||||||||NONE|||| 
IN1||00000000|^NONE^^^^^^^^L||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||(000)2584-33695|||||||NONE^L|| 

Код:

PipeParser parser = new PipeParser(); 
IMessage messageParsed = parser.Parse(message); 
ADT_A03 a03 = messageParsed as ADT_A03; 

PV1Segment pv1Segment = new PV1Segment(); 
pv1Segment.Set_Id_PV1_1_1 = a03.PV1.SetIDPatientVisit.Value; 
pv1Segment.Patient_Class_2_1 = a03.PV1.PatientClass.Value; 
pv1Segment.Assigned_Patient_Location_3_1 = a03.PV1.AssignedPatientLocation.PointOfCare.Value; 
pv1Segment.Admission_Type_4_1 = a03.PV1.AdmissionType.Value; 
pv1Segment.Pre_Admit_Number_5_1 = a03.PV1.PreadmitNumber.ID.Value; 
pv1Segment.Prior_Patient_Location_6_1 = a03.PV1.PriorPatientLocation.PointOfCare.Value; 
pv1Segment.Attending_Doctor_Id_7_1 = a03.PV1.AttendingDoctor.IDNumber.Value; 
pv1Segment.Attending_Doctor_Name_7_2 = a03.PV1.AttendingDoctor.FamilyName.Value; 
pv1Segment.Referring_Doctor_Id_8_1 = a03.PV1.ReferringDoctor.IDNumber.Value; 
pv1Segment.Referring_Doctor_Name_8_2 = a03.PV1.ReferringDoctor.FamilyName.Value; 

ответ

2

Ваша основная проблема здесь заключается в том, что вы пытаетесь разобрать HL7 2.3 сообщение, которое не соответствует спецификации HL7 2.3 для ADT A03.

А именно, сегменты NK1, GT1 и IN1 не определены в стандарте для события ADT A03 в версии 2.3 HL7.

Если удалить проблемные сегменты, то сообщение будет разбирать против 2.3 спецификации, используя ваш код так:

var parser = new PipeParser(); 
    var messageParsed = parser.Parse(message); 
    var a03 = messageParsed as ADT_A03; 

    var setId = a03.PV1.SetIDPatientVisit.Value; 
    var patientClass = a03.PV1.PatientClass.Value; 
    var AssignedPatientLocation = a03.PV1.AssignedPatientLocation.PointOfCare.Value; 
    var Admission_Type = a03.PV1.AdmissionType.Value; 
    var Pre_Admit_Number = a03.PV1.PreadmitNumber.ID.Value; 
    var Prior_Patient_Location = a03.PV1.PriorPatientLocation.PointOfCare.Value; 
    var Attending_Doctor_Id = a03.PV1.AttendingDoctor.IDNumber.Value; 
    var Attending_Doctor_Name = a03.PV1.AttendingDoctor.FamilyName.Value; 
    var Referring_Doctor_Id = a03.PV1.ReferringDoctor.IDNumber.Value; 
    var Referring_Doctor_Name = a03.PV1.ReferringDoctor.FamilyName.Value; 

модель разборе NHapi в плотно моделируется по стандартам HL7, так что, если дать ему не- стандартные данные, такие как сообщение, показанное выше, не будут обрабатывать его изящно. (прерывание анализа последующих сегментов, как в этом случае).

+0

Thanks Duane Edwards, просто добавление, есть ли способ обработать эту специфическую структуру сообщения HL7. – Himanshu

+1

messageParsed1.GetStructure ("PV1"); Может ли этот метод решить проблему? – Himanshu

+0

Уверен, но вам нужно расширить синтаксический анализатор, чтобы распознать этот новый тип сообщения. Парсеру нужно знать, какой порядок сегментов, какие типы полей и т. Д. Разбирать сначала, потому что, как только он встречается с чем-то, он не распознает его, он просто прекратит работу, как показала оригинальная проблема. Обратитесь к этому тест-класс о том, как вы бы разобрать тип пользовательского: https://github.com/duaneedwards/nHapi/blob/master/NHapi20/NHapi.NUnit/CustomZSegmentTest.cs И этот проект содержит обновленный Требуемые определения для сообщений/сегментов: https://github.com/duaneedwards/nHapi/tree/master/NHapi20/NHapi.Model.V22_ZSegments –

2

У вас есть пара вариантов, если вы хотите разобрать сообщение HL7, которое не совсем соответствует стандартам.

  1. Изменить базу данных стандартов HL7 и регенерировать код
  2. Расширение/замена текущего класса ADT_A03

Я могу вам сказать по опыту, что изменение базы данных стандартов HL7 (и регенерирующий) трудно и беспорядочный.

Я бы просто расширил класс ADT_A03 в вашем приложении и добавил определения нестандартных сегментов - таким образом вы сможете получить доступ ко всем данным.

+0

davidlg, Можете ли вы поделиться примером для второго варианта. – Himanshu

+1

Привет @ Химаншу, взгляните на gate repo Duane - в частности https://github.com/duaneedwards/nHapi/blob/master/NHapi20/NHapi.Model.V22_ZSegments/Message/ADT_A08.cs – davidlg