2015-03-04 1 views
1

Je suis nouveau à Nhapi et je l'utilise pour analyser le message HL7. Le problème auquel je suis confronté est que je suis en train d'analyser le message ADT^A03 mais j'ai toujours le segment PV1 comme nul.Nhapi Parsing Édition

Je joins le message d'exemple et mon code.

Exemple de message:

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|| 

code:

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; 

Répondre

2

Votre problème fondamental ici est que vous essayez d'analyser un message HL7 2.3 qui ne sont pas conformes à la spécification HL7 2.3 pour ADT A03 événements. A savoir, les segments NK1, GT1 et IN1 ne sont pas définis dans la norme pour l'événement ADT A03 dans la version 2.3 de HL7.

Si vous supprimez les segments de problème, le message va analyser à la spécification 2.3 en utilisant votre code comme ceci:

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; 

analyse syntaxique du modèle de NHapi est modélisé étroitement par rapport aux normes HL7, de sorte que vous si donnez non données standard comme le message que vous avez montré ci-dessus, il ne va pas gérer avec élégance. (abandon de l'analyse des segments suivants comme dans ce cas).

+0

Merci Duane Edwards, Juste un ajout, Yat-il un moyen de gérer cette structure spécifique du message HL7. – Himanshu

+1

messageParsed1.GetStructure ("PV1"); Cette méthode peut-elle résoudre le problème? – Himanshu

+0

Bien sûr, mais vous devez étendre l'analyseur pour reconnaître ce nouveau type de message. L'analyseur doit connaître l'ordre des segments, les types de champs, etc. à analyser en premier, car dès qu'il rencontre quelque chose qu'il ne reconnaît pas, il abandonne comme le montre le problème d'origine. Reportez-vous à cette classe de test sur la façon dont vous analyser un type personnalisé: https://github.com/duaneedwards/nHapi/blob/master/NHapi20/NHapi.NUnit/CustomZSegmentTest.cs Ce projet contient la mise à jour Définitions de message/segment requises: https://github.com/duaneedwards/nHapi/tree/master/NHapi20/NHapi.Model.V22_ZSegments –

2

Vous avez quelques options si vous voulez analyser un message HL7 qui n'est pas tout à fait conforme aux normes.

  1. Modifier la base de données des normes HL7 et régénérer le code
  2. Extension/remplacement de la classe actuelle de ADT_A03

je peux vous dire par expérience que la modification de la base de données des normes HL7 (et régénérant) est difficile et désordonné.

Je voudrais simplement étendre la classe ADT_A03 dans votre application et ajouter les définitions des segments non standard - de cette façon, vous serez en mesure d'accéder à toutes les données.

+0

davidlg, Pouvez-vous partager l'exemple de la 2ème option. – Himanshu

+1

Salut @Himanshu, jetez un oeil à repo git de Duane - spécifiquement https://github.com/duaneedwards/nHapi/blob/master/NHapi20/NHapi.Model.V22_ZSegments/Message/ADT_A08.cs – davidlg