| @@ -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<DG1> 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<Diagnose> diagnosenP05 = new ArrayList<> ( ); | |||
| List<Untersuchung> untersuchungenP05 = new ArrayList<> ( ); | |||
| List<BAR_P05_VISIT> 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<Diagnose> diagnosenKIS; | |||
| //TODO dbHandler query getDiagnosen by FallID um herauszufinden ob DIagnose geupdatet werden soll oder neu erzeugt | |||
| List<Untersuchung> 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<BAR_P05_PROCEDURE> 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<DG1> 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; | |||
| } | |||