| @@ -25,7 +25,8 @@ import java.util.List; | |||
| 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 { | |||
| private final Class<T> type; | |||
| @@ -60,6 +61,12 @@ public class HL7Receiver<T extends AbstractMessage> implements ReceivingApplicat | |||
| 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 { | |||
| try { | |||
| 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 { | |||
| try { | |||
| 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 { | |||
| BAR_P05 bar_p05 = (BAR_P05) message; | |||
| MSH msh = bar_p05.getMSH(); | |||
| PID pid = bar_p05.getPID(); | |||
| //get patient of the message | |||
| int patid = Integer.parseInt(pid.getPatientID().encode()); | |||
| Patient patient = mainctrl.getStammdaten().getPatienten().stream().filter(p -> p.getPatID() == patid).findFirst().orElse(null); | |||
| //error by unknown patient | |||
| if (patient == null) { | |||
| HL7Utils.logInHL7MessageToDatabase(message, msh, metadata); | |||
| updateUI(new HL7Message(null, -1, LocalDateTime.now(), "Patient nicht gefunden.", true)); | |||
| return generateACKWithAR(message, "Patient nicht gefunden."); | |||
| } // TODO: Patienten und Fall neu anlegen??? Nicht verlangt! | |||
| } | |||
| List<BAR_P05_VISIT> visits = bar_p05.getVISITAll(); | |||
| List<Integer> updatedFallIDs = new ArrayList<>(); | |||
| // Ab hier wird es dirty. | |||
| for (BAR_P05_VISIT visit : visits) { | |||
| //get current fall | |||
| PV1 pv1 = visit.getPV1(); | |||
| int fallid = Integer.parseInt(pv1.getVisitNumber().getIDNumber().encode()); | |||
| @@ -113,6 +135,7 @@ public class HL7Receiver<T extends AbstractMessage> implements ReceivingApplicat | |||
| } catch (SQLException e) { | |||
| e.printStackTrace(); | |||
| } | |||
| //log error by unknown fall | |||
| if (fallids.isEmpty() || !fallids.contains(fallid)) { | |||
| HL7Utils.logInHL7MessageToDatabase(message, msh, metadata); | |||
| 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) | |||
| String stat = pv1.getAssignedPatientLocation().getPointOfCare().encode(); | |||
| 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) { | |||
| HL7Utils.logInHL7MessageToDatabase(message, msh, metadata); | |||
| 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); | |||
| //diagnosis | |||
| List<DG1> dg1s = visit.getDG1All(); | |||
| for (DG1 dg1 : dg1s) { | |||
| Diagnose diagnose = new Diagnose(); | |||
| //default value by OPS ersteller and bearbeiter | |||
| diagnose.setErsteller(99999); | |||
| diagnose.setBearbeiter(99999); | |||
| diagnose.setFall(fall); | |||