From 7d559dca05bb0d3197a18e17a8114ac9d7b0161b Mon Sep 17 00:00:00 2001 From: taschi Date: Sun, 15 Nov 2015 17:31:58 +0100 Subject: [PATCH 1/4] funktion erstellt um ADT_A01 Nachrichten erstellen zu koennen - fehler liegt noch im MSH aufgrund der Zeichenkodierung von ^~\& --- src/main/java/de/uniluebeck/mi/projmi6/HL7.java | 83 +++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/main/java/de/uniluebeck/mi/projmi6/HL7.java diff --git a/src/main/java/de/uniluebeck/mi/projmi6/HL7.java b/src/main/java/de/uniluebeck/mi/projmi6/HL7.java new file mode 100644 index 0000000..3d3da32 --- /dev/null +++ b/src/main/java/de/uniluebeck/mi/projmi6/HL7.java @@ -0,0 +1,83 @@ +package de.uniluebeck.mi.projmi6; + +import ca.uhn.hl7v2.model.v251.message.ADT_A01; +import ca.uhn.hl7v2.model.v251.segment.*; +import de.uniluebeck.mi.projmi6.model.Diagnose; +import de.uniluebeck.mi.projmi6.model.Fall; +import de.uniluebeck.mi.projmi6.model.Patient; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by taschi on 15.11.15. + * enthaelt alle Klassen um eine Hl7 Nachricht zu erstellen bzw. zu Parsen. + */ +public class HL7 { + + /** + * erstellt eine ADT_A0 nachricht, welche anschließend an die OPS Gruppe verschickt werden soll. + * TODO Mit OPS Gruppe absprechen, welche Informationen sie auf jeden Fall benötigen und Code entsprechend anpassen. + * @param fall nach dem Erstellen eines neuen Falls wird diese Methode aufgerufen um Hl7 Nachricht zu erzeugen + * @param diagnosen Liste aller Nebendiagnosen momentan noch als einzelne Liste uebereben. eventuell die Nebendiagnosen direkt im Fall speichern? + * @throws Exception + */ + public void createMessageADTA01( Fall fall, List diagnosen) throws Exception{ + Patient patient = fall.getPatient (); + ADT_A01 adt = new ADT_A01 (); + + //default MSH Values (Sets Segments: 1,2,7,9 + adt.initQuickstart ("ADT", "A01", "P"); + + //MSH Segment: + MSH mshSegment = adt.getMSH(); + mshSegment.getMsh3_SendingApplication ().getNamespaceID ().setValue ( "KISGruppe6" ); + mshSegment.getMsh5_ReceivingApplication ().getNamespaceID ().setValue("OPS Gruppe von Maurice und Torben"); + mshSegment.getMsh12_VersionID ().getVersionID ().setValue ( "2.2" ); + mshSegment.getMsh15_AcceptAcknowledgmentType ().setValue ( "AL" ); + //Security? + //Message Control ID? + //Processing ID? + //Sequence Number ? + //Contituation Pointer ? + //Cointry Code + //Character Set + //Principal Language of Message + + //EVN Segment: + EVN evnSegment = adt.getEVN (); + evnSegment.getEvn1_EventTypeCode ().setValue ("A01"); + evnSegment.getEvn4_EventReasonCode ().setValue ( "01" ); + //Operator ID + //Event occured + + //PID + PID pidSegment = adt.getPID (); + pidSegment.getPid3_PatientIdentifierList (0).getIDNumber ().setValue ( Integer.toString(patient.getPatID ()) ); + pidSegment.getPid5_PatientName (0).getFamilyName ().getSurname ().setValue ( patient.getNachname () ); + pidSegment.getPid5_PatientName (0).getGivenName ().setValue ( patient.getVorname () ); + pidSegment.getPid7_DateTimeOfBirth ().getTime ().setValue ( patient.getGeburtsdatum ().toString () ); + pidSegment.getPid8_AdministrativeSex ().setValue ( patient.getGeschlecht ().toString () ); + pidSegment.getPid11_PatientAddress (0).getStreetAddress ().getStreetName().setValue ( patient.getStrasse () ); + pidSegment.getPid11_PatientAddress (0).getStreetAddress ().getDwellingNumber ( ).setValue ( patient.getHausnummer () ); + pidSegment.getPid11_PatientAddress (0).getCity ().setValue (patient.getOrt () ); + pidSegment.getPid13_PhoneNumberHome (0).getTelephoneNumber ().setValue ( patient.getTelefon () ); + pidSegment.getPid16_MaritalStatus ().getAlternateIdentifier ().setValue ( patient.getFamilienstand ().toString()); + + //Dg1 (Diagnosen) + List dg1List = new ArrayList<> ( ); + diagnosen.add(fall.getHauptDiagnose ()); + DG1 dg1Segment = adt.getDG1 (); + + for (Diagnose aDiagnosen : diagnosen) { + dg1Segment = adt.getDG1 (); + dg1Segment.getDg12_DiagnosisCodingMethod ().setValue ( "ICD10" ); + dg1Segment.getDg13_DiagnosisCodeDG1 ().getIdentifier ().setValue ( "CODE" ); + dg1Segment.getDg14_DiagnosisDescription ().setValue ( aDiagnosen.getFreiText () ); + dg1List.add ( dg1Segment ); + } + + } + +} From aee0297303ae6ee2adb5de72bcfb6b8792c0fcbf Mon Sep 17 00:00:00 2001 From: taschi Date: Sun, 15 Nov 2015 17:31:58 +0100 Subject: [PATCH 2/4] funktion erstellt um ADT_A01 Nachrichten erstellen zu koennen - fehler liegt noch im MSH aufgrund der Zeichenkodierung von ^~\& --- src/main/java/de/uniluebeck/mi/projmi6/HL7.java | 83 +++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/main/java/de/uniluebeck/mi/projmi6/HL7.java diff --git a/src/main/java/de/uniluebeck/mi/projmi6/HL7.java b/src/main/java/de/uniluebeck/mi/projmi6/HL7.java new file mode 100644 index 0000000..3d3da32 --- /dev/null +++ b/src/main/java/de/uniluebeck/mi/projmi6/HL7.java @@ -0,0 +1,83 @@ +package de.uniluebeck.mi.projmi6; + +import ca.uhn.hl7v2.model.v251.message.ADT_A01; +import ca.uhn.hl7v2.model.v251.segment.*; +import de.uniluebeck.mi.projmi6.model.Diagnose; +import de.uniluebeck.mi.projmi6.model.Fall; +import de.uniluebeck.mi.projmi6.model.Patient; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by taschi on 15.11.15. + * enthaelt alle Klassen um eine Hl7 Nachricht zu erstellen bzw. zu Parsen. + */ +public class HL7 { + + /** + * erstellt eine ADT_A0 nachricht, welche anschließend an die OPS Gruppe verschickt werden soll. + * TODO Mit OPS Gruppe absprechen, welche Informationen sie auf jeden Fall benötigen und Code entsprechend anpassen. + * @param fall nach dem Erstellen eines neuen Falls wird diese Methode aufgerufen um Hl7 Nachricht zu erzeugen + * @param diagnosen Liste aller Nebendiagnosen momentan noch als einzelne Liste uebereben. eventuell die Nebendiagnosen direkt im Fall speichern? + * @throws Exception + */ + public void createMessageADTA01( Fall fall, List diagnosen) throws Exception{ + Patient patient = fall.getPatient (); + ADT_A01 adt = new ADT_A01 (); + + //default MSH Values (Sets Segments: 1,2,7,9 + adt.initQuickstart ("ADT", "A01", "P"); + + //MSH Segment: + MSH mshSegment = adt.getMSH(); + mshSegment.getMsh3_SendingApplication ().getNamespaceID ().setValue ( "KISGruppe6" ); + mshSegment.getMsh5_ReceivingApplication ().getNamespaceID ().setValue("OPS Gruppe von Maurice und Torben"); + mshSegment.getMsh12_VersionID ().getVersionID ().setValue ( "2.2" ); + mshSegment.getMsh15_AcceptAcknowledgmentType ().setValue ( "AL" ); + //Security? + //Message Control ID? + //Processing ID? + //Sequence Number ? + //Contituation Pointer ? + //Cointry Code + //Character Set + //Principal Language of Message + + //EVN Segment: + EVN evnSegment = adt.getEVN (); + evnSegment.getEvn1_EventTypeCode ().setValue ("A01"); + evnSegment.getEvn4_EventReasonCode ().setValue ( "01" ); + //Operator ID + //Event occured + + //PID + PID pidSegment = adt.getPID (); + pidSegment.getPid3_PatientIdentifierList (0).getIDNumber ().setValue ( Integer.toString(patient.getPatID ()) ); + pidSegment.getPid5_PatientName (0).getFamilyName ().getSurname ().setValue ( patient.getNachname () ); + pidSegment.getPid5_PatientName (0).getGivenName ().setValue ( patient.getVorname () ); + pidSegment.getPid7_DateTimeOfBirth ().getTime ().setValue ( patient.getGeburtsdatum ().toString () ); + pidSegment.getPid8_AdministrativeSex ().setValue ( patient.getGeschlecht ().toString () ); + pidSegment.getPid11_PatientAddress (0).getStreetAddress ().getStreetName().setValue ( patient.getStrasse () ); + pidSegment.getPid11_PatientAddress (0).getStreetAddress ().getDwellingNumber ( ).setValue ( patient.getHausnummer () ); + pidSegment.getPid11_PatientAddress (0).getCity ().setValue (patient.getOrt () ); + pidSegment.getPid13_PhoneNumberHome (0).getTelephoneNumber ().setValue ( patient.getTelefon () ); + pidSegment.getPid16_MaritalStatus ().getAlternateIdentifier ().setValue ( patient.getFamilienstand ().toString()); + + //Dg1 (Diagnosen) + List dg1List = new ArrayList<> ( ); + diagnosen.add(fall.getHauptDiagnose ()); + DG1 dg1Segment = adt.getDG1 (); + + for (Diagnose aDiagnosen : diagnosen) { + dg1Segment = adt.getDG1 (); + dg1Segment.getDg12_DiagnosisCodingMethod ().setValue ( "ICD10" ); + dg1Segment.getDg13_DiagnosisCodeDG1 ().getIdentifier ().setValue ( "CODE" ); + dg1Segment.getDg14_DiagnosisDescription ().setValue ( aDiagnosen.getFreiText () ); + dg1List.add ( dg1Segment ); + } + + } + +} From cd4a381afaf4779b4098729ece7cf63f3d46bab7 Mon Sep 17 00:00:00 2001 From: taschi Date: Sun, 15 Nov 2015 18:04:37 +0100 Subject: [PATCH 3/4] aktuell mit master --- src/main/java/de/uniluebeck/mi/projmi6/db/MySqlConnFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/uniluebeck/mi/projmi6/db/MySqlConnFactory.java b/src/main/java/de/uniluebeck/mi/projmi6/db/MySqlConnFactory.java index 9c19032..7a6726d 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/db/MySqlConnFactory.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/db/MySqlConnFactory.java @@ -9,7 +9,7 @@ import java.sql.SQLException; */ public class MySqlConnFactory { private static MySqlConnFactory instance = new MySqlConnFactory(); - public static final String URL = "jdbc:mysql://141.83.20.84:3306/pmiw15g06_v01"; + public static final String URL = "jdbc:mysql://127.0.0.1:3306/pmiw15g06_v01"; public static final String USER = "pmiw15g06"; public static final String PASS = "AX3yQSYJSH43PrSz"; public static final String DRIVER = "com.mysql.jdbc.Driver"; From 73a701564570ad30b393f81b72b78dd6470446f1 Mon Sep 17 00:00:00 2001 From: taschi Date: Sun, 15 Nov 2015 19:05:46 +0100 Subject: [PATCH 4/4] angefangen parser zu schreiben --- src/main/java/de/uniluebeck/mi/projmi6/HL7.java | 61 ++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/uniluebeck/mi/projmi6/HL7.java b/src/main/java/de/uniluebeck/mi/projmi6/HL7.java index 3d3da32..c5f12d2 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/HL7.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/HL7.java @@ -1,12 +1,23 @@ package de.uniluebeck.mi.projmi6; +import ca.uhn.hl7v2.DefaultHapiContext; +import ca.uhn.hl7v2.HL7Exception; +import ca.uhn.hl7v2.HapiContext; +import ca.uhn.hl7v2.model.DataTypeException; +import ca.uhn.hl7v2.model.Message; import ca.uhn.hl7v2.model.v251.message.ADT_A01; +import ca.uhn.hl7v2.model.v251.message.BAR_P05; import ca.uhn.hl7v2.model.v251.segment.*; +import ca.uhn.hl7v2.parser.Parser; import de.uniluebeck.mi.projmi6.model.Diagnose; import de.uniluebeck.mi.projmi6.model.Fall; import de.uniluebeck.mi.projmi6.model.Patient; +import java.io.IOException; +import java.sql.Time; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.ArrayList; import java.util.List; @@ -23,7 +34,7 @@ public class HL7 { * @param diagnosen Liste aller Nebendiagnosen momentan noch als einzelne Liste uebereben. eventuell die Nebendiagnosen direkt im Fall speichern? * @throws Exception */ - public void createMessageADTA01( Fall fall, List diagnosen) throws Exception{ + public void createMessageADTA01( Fall fall, List diagnosen) throws HL7Exception, IOException { Patient patient = fall.getPatient (); ADT_A01 adt = new ADT_A01 (); @@ -77,7 +88,55 @@ public class HL7 { dg1Segment.getDg14_DiagnosisDescription ().setValue ( aDiagnosen.getFreiText () ); dg1List.add ( dg1Segment ); } + //print generated message + // printXMLEncodedMessageADT(adt); } + /** + * gibt erzeugte hl7 Nachricht auf der Konsole aus (Kann nach Debug phase wieder geloescht werden) + * @param msg + * @throws HL7Exception + */ + public void printXMLEncodedMessageADT(Message msg) throws HL7Exception { + HapiContext context = new DefaultHapiContext (); + Parser parser = context.getXMLParser(); + String encodedMessage = parser.encode (msg); + System.out.println (encodedMessage); + } + + /** + * + * @param msg + */ + public void parseMessage(Message msg) throws DataTypeException { + if (msg instanceof BAR_P05) { + BAR_P05 p05 = (BAR_P05) msg; + Patient patient = new Patient(); + Fall fall = new Fall(); + EVN evnSegment = p05.getEVN (); + + + + } + } + + public LocalDateTime generateLocalDateTimeFromHl7(BAR_P05 msg) throws DataTypeException { + EVN evnSegment = msg.getEVN(); + + int stunden = evnSegment.getEvn2_RecordedDateTime ().getTime ().getHour (); + int minuten = evnSegment.getEvn2_RecordedDateTime ().getTime ().getMinute (); + int sekunden = evnSegment.getEvn2_RecordedDateTime ().getTime ().getSecond (); + int tag = evnSegment.getEvn2_RecordedDateTime ().getTime ().getDay (); + int monat = evnSegment.getEvn2_RecordedDateTime ().getTime ().getMonth (); + int jahr = evnSegment.getEvn2_RecordedDateTime ().getTime ().getYear (); + LocalTime bearbeitetZeit = LocalTime.of(stunden,minuten,sekunden); + LocalDate bearbeitetDate = LocalDate.of(jahr, monat, tag); + LocalDateTime ldt = LocalDateTime.of(bearbeitetDate, bearbeitetZeit); + return ldt; + + } + + + }