Browse Source

parser in hapi branch

hapi
taschi 10 years ago
parent
commit
3d8f475d04
1 changed files with 148 additions and 62 deletions
  1. +148
    -62
      src/main/java/de/uniluebeck/mi/projmi6/HL7.java

+ 148
- 62
src/main/java/de/uniluebeck/mi/projmi6/HL7.java View File

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

}





Loading…
Cancel
Save