| @@ -25,7 +25,8 @@ import java.util.List; | |||||
| import java.util.Map; | import java.util.Map; | ||||
| /** | /** | ||||
| * Created by nils on 20.11.2015. | |||||
| * Manages all HL7 receiving tasks | |||||
| * @param <T> | |||||
| */ | */ | ||||
| public class HL7Receiver<T extends AbstractMessage> implements ReceivingApplication { | public class HL7Receiver<T extends AbstractMessage> implements ReceivingApplication { | ||||
| private final Class<T> type; | private final Class<T> type; | ||||
| @@ -60,6 +61,12 @@ public class HL7Receiver<T extends AbstractMessage> implements ReceivingApplicat | |||||
| return type.isInstance(message); | return type.isInstance(message); | ||||
| } | } | ||||
| /** | |||||
| * generates an ACK of received message, throws Exception otherwise | |||||
| * @param message to generate ACK | |||||
| * @return ACK of message | |||||
| * @throws HL7Exception | |||||
| */ | |||||
| private Message generateACK(Message message) throws HL7Exception { | private Message generateACK(Message message) throws HL7Exception { | ||||
| try { | try { | ||||
| return message.generateACK(); | return message.generateACK(); | ||||
| @@ -68,6 +75,13 @@ public class HL7Receiver<T extends AbstractMessage> implements ReceivingApplicat | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * generates an ACK with error code and log | |||||
| * @param message to generate ACK | |||||
| * @param s error string | |||||
| * @return ACK with error code | |||||
| * @throws HL7Exception | |||||
| */ | |||||
| private Message generateACKWithAR(Message message, String s) throws HL7Exception { | private Message generateACKWithAR(Message message, String s) throws HL7Exception { | ||||
| try { | try { | ||||
| Message returnMessage = message.generateACK(AcknowledgmentCode.AR, new HL7Exception(s, ErrorCode.UNKNOWN_KEY_IDENTIFIER)); | Message returnMessage = message.generateACK(AcknowledgmentCode.AR, new HL7Exception(s, ErrorCode.UNKNOWN_KEY_IDENTIFIER)); | ||||
| @@ -83,27 +97,35 @@ public class HL7Receiver<T extends AbstractMessage> implements ReceivingApplicat | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * encodes incoming message and save changes in database | |||||
| * @param message received | |||||
| * @param metadata //TODO | |||||
| * @return ACK of message | |||||
| * @throws HL7Exception | |||||
| */ | |||||
| private Message processBAR_P05(Message message, Map<String, Object> metadata) throws HL7Exception { | private Message processBAR_P05(Message message, Map<String, Object> metadata) throws HL7Exception { | ||||
| BAR_P05 bar_p05 = (BAR_P05) message; | BAR_P05 bar_p05 = (BAR_P05) message; | ||||
| MSH msh = bar_p05.getMSH(); | MSH msh = bar_p05.getMSH(); | ||||
| PID pid = bar_p05.getPID(); | PID pid = bar_p05.getPID(); | ||||
| //get patient of the message | |||||
| int patid = Integer.parseInt(pid.getPatientID().encode()); | int patid = Integer.parseInt(pid.getPatientID().encode()); | ||||
| Patient patient = mainctrl.getStammdaten().getPatienten().stream().filter(p -> p.getPatID() == patid).findFirst().orElse(null); | Patient patient = mainctrl.getStammdaten().getPatienten().stream().filter(p -> p.getPatID() == patid).findFirst().orElse(null); | ||||
| //error by unknown patient | |||||
| if (patient == null) { | if (patient == null) { | ||||
| HL7Utils.logInHL7MessageToDatabase(message, msh, metadata); | HL7Utils.logInHL7MessageToDatabase(message, msh, metadata); | ||||
| updateUI(new HL7Message(null, -1, LocalDateTime.now(), "Patient nicht gefunden.", true)); | updateUI(new HL7Message(null, -1, LocalDateTime.now(), "Patient nicht gefunden.", true)); | ||||
| return generateACKWithAR(message, "Patient nicht gefunden."); | return generateACKWithAR(message, "Patient nicht gefunden."); | ||||
| } // TODO: Patienten und Fall neu anlegen??? Nicht verlangt! | |||||
| } | |||||
| List<BAR_P05_VISIT> visits = bar_p05.getVISITAll(); | List<BAR_P05_VISIT> visits = bar_p05.getVISITAll(); | ||||
| List<Integer> updatedFallIDs = new ArrayList<>(); | List<Integer> updatedFallIDs = new ArrayList<>(); | ||||
| // Ab hier wird es dirty. | |||||
| for (BAR_P05_VISIT visit : visits) { | for (BAR_P05_VISIT visit : visits) { | ||||
| //get current fall | |||||
| PV1 pv1 = visit.getPV1(); | PV1 pv1 = visit.getPV1(); | ||||
| int fallid = Integer.parseInt(pv1.getVisitNumber().getIDNumber().encode()); | int fallid = Integer.parseInt(pv1.getVisitNumber().getIDNumber().encode()); | ||||
| @@ -113,6 +135,7 @@ public class HL7Receiver<T extends AbstractMessage> implements ReceivingApplicat | |||||
| } catch (SQLException e) { | } catch (SQLException e) { | ||||
| e.printStackTrace(); | e.printStackTrace(); | ||||
| } | } | ||||
| //log error by unknown fall | |||||
| if (fallids.isEmpty() || !fallids.contains(fallid)) { | if (fallids.isEmpty() || !fallids.contains(fallid)) { | ||||
| HL7Utils.logInHL7MessageToDatabase(message, msh, metadata); | HL7Utils.logInHL7MessageToDatabase(message, msh, metadata); | ||||
| updateUI(new HL7Message(patient, -1, LocalDateTime.now(), "Fall nicht gefunden.?", true)); | updateUI(new HL7Message(patient, -1, LocalDateTime.now(), "Fall nicht gefunden.?", true)); | ||||
| @@ -129,8 +152,9 @@ public class HL7Receiver<T extends AbstractMessage> implements ReceivingApplicat | |||||
| // Station(PV1-3-1), Fachabteilung(PV1-3-4), Aufnahmedatum(PV1-44), Entlassungsdatum(PV1-45), Fallnummer(PV1-19) | // Station(PV1-3-1), Fachabteilung(PV1-3-4), Aufnahmedatum(PV1-44), Entlassungsdatum(PV1-45), Fallnummer(PV1-19) | ||||
| String stat = pv1.getAssignedPatientLocation().getPointOfCare().encode(); | String stat = pv1.getAssignedPatientLocation().getPointOfCare().encode(); | ||||
| Station station = mainctrl.getStammdaten().getStationen().stream().filter(s -> s.getStation().equals(stat)).findFirst().orElse(null); | Station station = mainctrl.getStammdaten().getStationen().stream().filter(s -> s.getStation().equals(stat)).findFirst().orElse(null); | ||||
| // TODO: Stationen mit falschen Abteilungen werden einfach umgeschrieben^^ | |||||
| //TODO ATTENTION wrong abteilungen may write down here | |||||
| //error message when station not exists | |||||
| if (station == null) { | if (station == null) { | ||||
| HL7Utils.logInHL7MessageToDatabase(message, msh, metadata); | HL7Utils.logInHL7MessageToDatabase(message, msh, metadata); | ||||
| updateUI(new HL7Message(patient, -1, LocalDateTime.now(), "Station nicht gefunden.", true)); | updateUI(new HL7Message(patient, -1, LocalDateTime.now(), "Station nicht gefunden.", true)); | ||||
| @@ -149,9 +173,11 @@ public class HL7Receiver<T extends AbstractMessage> implements ReceivingApplicat | |||||
| } | } | ||||
| hist.setFallID(fallid); | hist.setFallID(fallid); | ||||
| //diagnosis | |||||
| List<DG1> dg1s = visit.getDG1All(); | List<DG1> dg1s = visit.getDG1All(); | ||||
| for (DG1 dg1 : dg1s) { | for (DG1 dg1 : dg1s) { | ||||
| Diagnose diagnose = new Diagnose(); | Diagnose diagnose = new Diagnose(); | ||||
| //default value by OPS ersteller and bearbeiter | |||||
| diagnose.setErsteller(99999); | diagnose.setErsteller(99999); | ||||
| diagnose.setBearbeiter(99999); | diagnose.setBearbeiter(99999); | ||||
| diagnose.setFall(fall); | diagnose.setFall(fall); | ||||