From 3d8f475d0413aa37c3381514f2b5d54cdbe2dbaa Mon Sep 17 00:00:00 2001 From: taschi Date: Sat, 21 Nov 2015 20:03:45 +0100 Subject: [PATCH] parser in hapi branch --- src/main/java/de/uniluebeck/mi/projmi6/HL7.java | 210 +++++++++++++++++------- 1 file changed, 148 insertions(+), 62 deletions(-) diff --git a/src/main/java/de/uniluebeck/mi/projmi6/HL7.java b/src/main/java/de/uniluebeck/mi/projmi6/HL7.java index ff047c2..0a61bc5 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/HL7.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/HL7.java @@ -7,6 +7,8 @@ import ca.uhn.hl7v2.model.DataTypeException; import ca.uhn.hl7v2.model.Message; import ca.uhn.hl7v2.model.v25.datatype.DTM; import ca.uhn.hl7v2.model.v251.datatype.FN; +import ca.uhn.hl7v2.model.v251.group.BAR_P05_PROCEDURE; +import ca.uhn.hl7v2.model.v251.group.BAR_P05_VISIT; import ca.uhn.hl7v2.model.v251.message.ACK; import ca.uhn.hl7v2.model.v251.message.ADT_A01; import ca.uhn.hl7v2.model.v251.message.BAR_P05; @@ -16,9 +18,7 @@ import ca.uhn.hl7v2.parser.PipeParser; import ca.uhn.hl7v2.validation.ValidationContext; import ca.uhn.hl7v2.validation.impl.ValidationContextFactory; import de.uniluebeck.mi.projmi6.db.DBHandler; -import de.uniluebeck.mi.projmi6.model.Diagnose; -import de.uniluebeck.mi.projmi6.model.Fall; -import de.uniluebeck.mi.projmi6.model.Patient; +import de.uniluebeck.mi.projmi6.model.*; import java.io.BufferedWriter; import java.io.File; @@ -32,6 +32,8 @@ import java.time.LocalTime; import java.util.ArrayList; import java.util.List; +import static de.uniluebeck.mi.projmi6.db.DBHandler.getPatient; + /** * Created by taschi on 15.11.15. * enthaelt alle Klassen um eine Hl7 Nachricht zu erstellen bzw. zu Parsen. @@ -86,10 +88,6 @@ public class HL7 { pidSegment.getPid13_PhoneNumberHome (0).getTelephoneNumber ().setValue ( patient.getTelefon () ); pidSegment.getPid16_MaritalStatus ().getAlternateIdentifier ().setValue ( patient.getFamilienstand ().toString()); -<<<<<<< HEAD -======= - validateMessage(adt); ->>>>>>> a06bab3... saveMessage in a file Diagnsen ersteinma rausgenommen /* //Dg1 (Diagnosen) List dg1List = new ArrayList<> ( ); @@ -106,12 +104,152 @@ public class HL7 { */ //print generated message printXMLEncodedMessageADT(adt); -<<<<<<< HEAD -======= } ->>>>>>> a06bab3... saveMessage in a file Diagnsen ersteinma rausgenommen + + /** + * + * @param msg + */ + public void parseMessage(Message msg) throws HL7Exception, SQLException { + if (msg instanceof BAR_P05) { + BAR_P05 p05 = (BAR_P05) msg; + PID pidSegment = p05.getPID(); + EVN evnSegment = p05.getEVN (); + Patient patient; + Fall fall; + Station station; + StationsHistorie statHist; + List diagnosenP05 = new ArrayList<> ( ); + List untersuchungenP05 = new ArrayList<> ( ); + List visitList = p05.getVISITAll (); + int pid = Integer.valueOf(pidSegment.getPid3_PatientIdentifierList(0).getIDNumber().encode ());//evt das 4. Segment ? + if (getPatient(pid) != null) { + patient = getPatient(pid); + //TODO wie bekommen wir hier den aktuellen Fall ? + fall = null; + List diagnosenKIS; + //TODO dbHandler query getDiagnosen by FallID um herauszufinden ob DIagnose geupdatet werden soll oder neu erzeugt + List untersuchungenKIS; + + } else { + //neuen Patienten anlegen + patient = new Patient (); + fall = new Fall(); + fall.setPatient ( patient ); + patient.setPatID(Integer.valueOf(pidSegment.getPid3_PatientIdentifierList(0).getIDNumber().encode ()));//evt das 4. Segment + patient.setNachname(pidSegment.getPid5_PatientName(0).getFamilyName().encode ()); + patient.setVorname(pidSegment.getPid5_PatientName(0).getGivenName().encode ()); + ca.uhn.hl7v2.model.v251.datatype.DTM geburtsTag = pidSegment.getPid7_DateTimeOfBirth().getTime(); + LocalDate ld = LocalDate.of(geburtsTag.getYear(),geburtsTag.getMonth(),geburtsTag.getDay()); + patient.setGeburtsdatum(ld); + //TODO funktion in den Enums anlegen + // patient.setGeschlecht(pidSegment.getPid8_AdministrativeSex().getValue()); + //patient.setFamilienstand(); + //TODO patient in datenbank neu anlegen + } + + //Stationshistorie aktualisieren + for (BAR_P05_VISIT visit: visitList) { + PV1 pv1Segment =visit.getPV1 (); + if(stationExists()) { + //TODO getStationshistorie + statHist = new StationsHistorie (); + } else { + station = new Station(); + station.setStation ( pv1Segment.getPv13_AssignedPatientLocation ().getPointOfCare ().encode () ); + station.setAbteilung ( pv1Segment.getPv13_AssignedPatientLocation ().getFacility ().encode () ); + statHist = new StationsHistorie (); + statHist.setStation ( station ); + } + statHist.setFallID ( fall.getFallID () ); + statHist.setAufnahmeDatum (generateLocalDateTimeFromHl7(pv1Segment.getPv144_AdmitDateTime ().getTime ()) ); + statHist.setEntlassungsDatum(generateLocalDateTimeFromHl7(pv1Segment.getPv145_DischargeDateTime ()[0].getTime ())); + + + + //Untersuchungen + List procedureList = visit.getPROCEDUREAll(); + for (BAR_P05_PROCEDURE procedure : procedureList) { + PR1 pr1Segment = procedure.getPR1(); + Untersuchung untersuchung = new Untersuchung(); + + OpsCode opscode = new OpsCode(pr1Segment.getPr13_ProcedureCode ().encode (), "", Integer.valueOf ( pr1Segment.getProcedureDescription ().getVersion ())); + untersuchung.setOpscode(opscode); + untersuchung.setUntersuchungsdatum(generateLocalDateTimeFromHl7 (pr1Segment.getProcedureDateTime().getTime())); + untersuchung.setFall(fall); + + //TODO dbHandler query was genau ist die untersID? + String einweisenderarzt = pr1Segment.getPr112_ProcedurePractitioner(0).encode(); + untersuchung.setDurchfuehrenderArzt(new Mitarbeiter(0)); + + untersuchungenP05.add(untersuchung); + } + + // Diagnosen + List dg1Segmente = visit.getDG1All (); + for ( DG1 dg1Segment : dg1Segmente) { + Icd10Code icd10code; + if(icd10CodeExists ()) { + //TODO get icd Code + icd10code = null; + } else { + icd10code = new Icd10Code(dg1Segment.getDg13_DiagnosisCodeDG1 ().getIdentifier().encode(), "", Integer.valueOf ( dg1Segment.getDg16_DiagnosisType ().getVersion ())); + + } + + String einweisenderArzt = dg1Segment.getDg116_DiagnosingClinician ()[0].encode (); + //TODO dbHandler query + + Mitarbeiter mitarbeiter = new Mitarbeiter(0); + //TODO herausfinden ob diagnose bereits existiert + Diagnose diagnose = new Diagnose(); + diagnose.setIcd10code(icd10code); + diagnose.setArzt(mitarbeiter); + diagnose.setFall(fall); + diagnose.setFreiText ( dg1Segment.getDg14_DiagnosisDescription ().encode () ); + //TODO Diagnoseart + + diagnosenP05.add(diagnose); + } + + //ACK generieren aenderungen in db schreiben. + } + + + LocalDateTime ldt = generateLocalDateTimeFromHl7(evnSegment.getEventOccurred ().getTime ()); + patient.setBearbeitetDatumZeit(ldt); + patient.setBearbeiter(Integer.valueOf ( evnSegment.getEvn5_OperatorID(0).getIDNumber().encode ())); + + } + } + + private boolean icd10CodeExists() { + return false; + } + private LocalDateTime generateLocalDateTimeFromHl7( ca.uhn.hl7v2.model.v251.datatype.DTM dtm) throws DataTypeException { + int stunden = dtm.getHour (); + int minuten = dtm.getMinute (); + int sekunden = dtm.getSecond (); + int jahr = dtm.getYear (); + int monat = dtm.getMonth (); + int tag = dtm.getDay (); + + LocalTime bearbeitetZeit = LocalTime.of(stunden,minuten,sekunden); + LocalDate bearbeitetDate = LocalDate.of(jahr, monat, tag); + LocalDateTime ldt = LocalDateTime.of(bearbeitetDate, bearbeitetZeit); + + return ldt; + } + + public boolean abteilungExists(String abteilungsID) { + return false; + } + public boolean stationExists() { + return false; + } + /** @@ -139,43 +277,6 @@ public class HL7 { * * @param msg */ -<<<<<<< HEAD - public void parseMessage(Message msg) throws DataTypeException { - -======= - public void parseMessage(Message msg) throws DataTypeException, SQLException { - if (msg instanceof BAR_P05) { - BAR_P05 p05 = (BAR_P05) msg; - - EVN evnSegment = p05.getEVN(); - PID pidSegment = p05.getPID(); - - DBHandler dh = new DBHandler(); - Patient patient =dh.getPatient(Integer.valueOf(pidSegment.getPid3_PatientIdentifierList(0).getIDNumber().getValue())); - Fall fall = new Fall(); - - LocalDateTime ldt = generateLocalDateTimeFromHl7(p05); - patient.setBearbeitetDatumZeit(ldt); - patient.setBearbeiter(Integer.valueOf(evnSegment.getEvn5_OperatorID(0).getIDNumber().getValue())); - - /** wenn ein neuer patient angelegt werden sollte - patient.setNachname(pidSegment.getPid5_PatientName(0).getFamilyName().getName()); - patient.setVorname(pidSegment.getPid5_PatientName(0).getGivenName().getValue()); - ca.uhn.hl7v2.model.v251.datatype.DTM geburtsTag = pidSegment.getPid7_DateTimeOfBirth().getTime(); - LocalDate ld = LocalDate.of(geburtsTag.getYear(), geburtsTag.getMonth(), geburtsTag.getDay()); - patient.setGeburtsdatum(ld); - Patient.Geschlecht geschlecht = Patient.Geschlecht.parseStringFromHL7(pidSegment.getPid8_AdministrativeSex().getValue()); - patient.setGeschlecht(geschlecht); - patient.setStrasse(pidSegment.getPid11_PatientAddress(0).getStreetAddress().getStreetName().getValue()); - patient.setOrt(pidSegment.getPid11_PatientAddress(0).getCity().getValue()); - patient.setHausnummer(pidSegment.getPid11_PatientAddress(0).getStreetAddress().getDwellingNumber().getValue()); - patient.setTelefon(pidSegment.getPid13_PhoneNumberHome(0).getTelephoneNumber().getValue()); - Patient.Familienstand familienstand = pidSegment.getPid16_MaritalStatus().getAlternateText().getValue(); - patient.setFamilienstand(); - */ - } ->>>>>>> a06bab3... saveMessage in a file Diagnsen ersteinma rausgenommen - } public void validateMessage(Message msg) { HapiContext context = new DefaultHapiContext(); @@ -189,22 +290,7 @@ public class HL7 { } - 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; - - }