Browse Source

javadoc hl7receiver

master
taschi 10 years ago
parent
commit
7f1e46c696
1 changed files with 31 additions and 5 deletions
  1. +31
    -5
      src/main/java/de/uniluebeck/mi/projmi6/hapi/HL7Receiver.java

+ 31
- 5
src/main/java/de/uniluebeck/mi/projmi6/hapi/HL7Receiver.java View File

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


Loading…
Cancel
Save