Проблема с разбором Nhapi

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

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

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

Образец сообщения:

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;

person Himanshu    schedule 04.03.2015    source источник


Ответы (2)


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

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

Если вы удалите проблемные сегменты, сообщение будет анализироваться в соответствии со спецификацией 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, поэтому, если вы дадите ему нестандартные данные, такие как сообщение, которое вы показали выше, он не будет обрабатывать его корректно. (прерывание анализа последующих сегментов, как в этом случае).

person Duane Edwards    schedule 04.03.2015
comment
Спасибо, Дуэйн Эдвардс. Просто дополнение. Есть ли способ справиться с этой конкретной структурой сообщения HL7. - person Himanshu; 04.03.2015
comment
сообщениеParsed1.GetStructure(PV1); Может ли этот метод решить проблему? - person Himanshu; 04.03.2015
comment
Конечно, но вам нужно расширить синтаксический анализатор, чтобы распознавать этот новый тип сообщения. Парсер должен знать, какой порядок сегментов, какие типы полей и т. д. анализировать в первую очередь, потому что, как только он столкнется с чем-то, что он не распознает, он просто прервется, как показала исходная проблема. Обратитесь к этому тестовому классу, чтобы узнать, как вы будете анализировать пользовательский тип: github.com/duaneedwards/nHapi/blob/master/NHapi20/NHapi.NUnit/ И этот проект содержит обновленные необходимые определения сообщений/сегментов: github.com/duaneedwards/nHapi/tree/master/NHapi20/ - person Duane Edwards; 06.03.2015
comment
И просто для подтверждения, как упомянул davidlg в своем ответе, изменение базы данных стандартов является вариантом, но это будет НАМНОГО более грязная работа, чем вы хотели бы. Поэтому приступайте к варианту 2 (расширить/заменить класс ADT_A03), как он предложил, если вам нужно это сделать. Я бы предложил расширить, используя приведенные выше ссылки в моем предыдущем комментарии в качестве ссылки, чтобы увидеть, что требуется. - person Duane Edwards; 06.03.2015
comment
Можете ли вы поделиться примером для 2-го варианта. - person Himanshu; 09.03.2015
comment
Я прочитал: stackoverflow.com/questions/ 28848007/nhapi-parsing-issue/ Посмотрите на этот тестовый метод и вспомогательные классы, чтобы увидеть, как вы можете расширить синтаксический анализатор для обработки пользовательского сегмента. - person Duane Edwards; 10.03.2015
comment
Привет, @DuaneEdwards. Я пытался получить основные сведения о пациенте, но каждый раз, когда a03 в var a03 = messageParsed as ADT_A03; для меня было null. Пробовал приводить к другим типам, таким как ADT_A01 или ORU_R01, но с теми же результатами. Сообщение HL7 в порядке. Но я не уверен, в чем проблема. Любое руководство будет оценено. - person Praveen; 17.10.2020

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

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

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

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

person davidlg    schedule 05.03.2015
comment
davidlg, Не могли бы вы поделиться примером для 2-го варианта. - person Himanshu; 09.03.2015
comment
Привет @Himanshu, взгляните на репозиторий git Дуэйна, в частности github.com/duaneedwards/nHapi/blob/master/NHapi20/ - person davidlg; 20.04.2015