summaryrefslogtreecommitdiff
path: root/src/main/java/DNPM/services
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/DNPM/services')
-rw-r--r--src/main/java/DNPM/services/DefaultFormService.java7
-rw-r--r--src/main/java/DNPM/services/DefaultStudienService.java2
-rw-r--r--src/main/java/DNPM/services/DefaultTherapieplanService.java142
-rw-r--r--src/main/java/DNPM/services/FormService.java26
-rw-r--r--src/main/java/DNPM/services/MultipleMtbTherapieplanService.java12
-rw-r--r--src/main/java/DNPM/services/TherapieplanService.java15
6 files changed, 198 insertions, 6 deletions
diff --git a/src/main/java/DNPM/services/DefaultFormService.java b/src/main/java/DNPM/services/DefaultFormService.java
index c7fb042..9feaeb2 100644
--- a/src/main/java/DNPM/services/DefaultFormService.java
+++ b/src/main/java/DNPM/services/DefaultFormService.java
@@ -2,12 +2,15 @@ package DNPM.services;
import DNPM.exceptions.FormException;
import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.stereotype.Service;
import javax.sql.DataSource;
import java.util.List;
-@Service
+/**
+ * Standardimplementierung zum Ermitteln von Unter- und Hauptformularen
+ *
+ * @since 0.0.2
+ */
public class DefaultFormService implements FormService {
private final JdbcTemplate jdbcTemplate;
diff --git a/src/main/java/DNPM/services/DefaultStudienService.java b/src/main/java/DNPM/services/DefaultStudienService.java
index 596a288..1f115cf 100644
--- a/src/main/java/DNPM/services/DefaultStudienService.java
+++ b/src/main/java/DNPM/services/DefaultStudienService.java
@@ -1,7 +1,6 @@
package DNPM.services;
import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.stereotype.Service;
import javax.sql.DataSource;
import java.util.List;
@@ -11,7 +10,6 @@ import java.util.List;
*
* @since 0.0.2
*/
-@Service
public class DefaultStudienService implements StudienService {
private final JdbcTemplate jdbcTemplate;
diff --git a/src/main/java/DNPM/services/DefaultTherapieplanService.java b/src/main/java/DNPM/services/DefaultTherapieplanService.java
new file mode 100644
index 0000000..f705ce8
--- /dev/null
+++ b/src/main/java/DNPM/services/DefaultTherapieplanService.java
@@ -0,0 +1,142 @@
+package DNPM.services;
+
+import de.itc.onkostar.api.IOnkostarApi;
+import de.itc.onkostar.api.Item;
+import de.itc.onkostar.api.Procedure;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Objects;
+
+import static DNPM.services.FormService.hasValue;
+import static DNPM.services.FormService.isYes;
+
+public class DefaultTherapieplanService implements TherapieplanService {
+
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ private final IOnkostarApi onkostarApi;
+
+ private final FormService formService;
+
+ public DefaultTherapieplanService(final IOnkostarApi onkostarApi, final FormService formService) {
+ this.onkostarApi = onkostarApi;
+ this.formService = formService;
+ }
+
+ /**
+ * Verlinke MTB und Übernahme Datum aus Hauptformular in weiteren Bereichen
+ * "Humangenetische Beratung" und "Reevaluation" und Unterformularen, wenn erforderlich.
+ *
+ * @param procedure Die Prozedur mit Hauptformular
+ */
+ @Override
+ public void updateRequiredMtbEntries(Procedure procedure) {
+ this.updateMtbInSections(procedure);
+ this.updateMtbInSubforms(procedure);
+ }
+
+ private void updateMtbInSections(Procedure procedure) {
+ if (!isYes(procedure, "humangenberatung") && !isYes(procedure, "reevaluation")) {
+ return;
+ }
+
+ var mtbReference = procedure.getValue("referstemtb").getInt();
+ var mtbDate = procedure.getValue("datum").getDate();
+ var noUpdateRequired = true;
+
+ if (
+ isYes(procedure, "humangenberatung") && (
+ !hasValue(procedure, "reftkhumangenber")
+ || mtbReference != procedure.getValue("reftkhumangenber").getInt()
+ )
+ ) {
+ procedure.setValue("reftkhumangenber", new Item("ref_tk_humangenber", mtbReference));
+ noUpdateRequired = false;
+ }
+
+ if (
+ isYes(procedure, "humangenberatung") && (
+ !hasValue(procedure, "datumtkhumangenber")
+ || !mtbDate.equals(procedure.getValue("datumtkhumangenber").getDate())
+ )
+ ) {
+ procedure.setValue("datumtkhumangenber", new Item("datum_tk_humangenber", mtbDate));
+ noUpdateRequired = false;
+ }
+
+ if (
+ isYes(procedure, "reevaluation") && (
+ !hasValue(procedure, "reftkreevaluation")
+ || mtbReference != procedure.getValue("reftkreevaluation").getInt()
+ )
+ ) {
+ procedure.setValue("reftkreevaluation", new Item("ref_tk_reevaluation", mtbReference));
+ noUpdateRequired = false;
+ }
+
+ if (
+ isYes(procedure, "reevaluation") && (
+ !hasValue(procedure, "datumtkreevaluation")
+ || !mtbDate.equals(procedure.getValue("datumtkreevaluation").getDate())
+ )
+ ) {
+ procedure.setValue("datumtkreevaluation", new Item("datum_tk_reevaluation", mtbDate));
+ noUpdateRequired = false;
+ }
+
+ if (noUpdateRequired) {
+ return;
+ }
+
+ try {
+ onkostarApi.saveProcedure(procedure, false);
+ } catch (Exception e) {
+ logger.error("Formular 'DNPM Therapieplan' konnte nicht aktualisiert werden", e);
+ }
+ }
+
+ private void updateMtbInSubforms(Procedure procedure) {
+ if (
+ !hasValue(procedure, "referstemtb") || !hasValue(procedure, "datum")
+ ) {
+ return;
+ }
+
+ var mtbReference = procedure.getValue("referstemtb").getInt();
+ var mtbDate = procedure.getValue("datum").getDate();
+
+ formService.getSubFormProcedureIds(procedure.getId()).stream()
+ .map(onkostarApi::getProcedure)
+ .filter(Objects::nonNull)
+ .forEach(subform -> {
+ if (subform.getFormName().equals("DNPM UF Einzelempfehlung")) {
+ if (mtbReference != subform.getValue("mtb").getInt() && !mtbDate.equals(subform.getValue("ufeedatum").getDate())) {
+ subform.setValue("mtb", new Item("ref_tumorkonferenz", mtbReference));
+ subform.setValue("ufeedatum", new Item("datum", mtbDate));
+
+ try {
+ onkostarApi.saveProcedure(subform, false);
+ } catch (Exception e) {
+ logger.error("Formular 'DNPM UF Einzelempfehlung' konnte nicht aktualisiert werden", e);
+ }
+ }
+ }
+
+ if (subform.getFormName().equals("DNPM UF Rebiopsie")) {
+ if (mtbReference != subform.getValue("reftumorkonferenz").getInt() && !mtbDate.equals(subform.getValue("ufrbdatum").getDate())) {
+ subform.setValue("reftumorkonferenz", new Item("ref_tumorkonferenz", mtbReference));
+ subform.setValue("ufrbdatum", new Item("datum", mtbDate));
+
+ try {
+ onkostarApi.saveProcedure(subform, false);
+ } catch (Exception e) {
+ logger.error("Formular 'DNPM UF Rebiopsie' konnte nicht aktualisiert werden", e);
+ }
+ }
+ }
+ });
+ }
+
+
+}
diff --git a/src/main/java/DNPM/services/FormService.java b/src/main/java/DNPM/services/FormService.java
index 824d350..f10d6c3 100644
--- a/src/main/java/DNPM/services/FormService.java
+++ b/src/main/java/DNPM/services/FormService.java
@@ -1,6 +1,8 @@
package DNPM.services;
import DNPM.exceptions.FormException;
+import de.itc.onkostar.api.Procedure;
+import de.itc.onkostar.api.constants.JaNeinUnbekannt;
import java.util.List;
@@ -12,7 +14,7 @@ public interface FormService {
*
* @param procedureId Die Prozedur-ID des Unterformulars
* @return Die Prozedur-ID des zugehörigen Hauptformulars
- * @throws FormException
+ * @throws FormException Wird geworfen, wenn ein Fehler auftrat
*/
int getMainFormProcedureId(int procedureId) throws FormException;
@@ -22,8 +24,28 @@ public interface FormService {
*
* @param procedureId Die Prozedur-ID des Formulars
* @return Eine Liste mit Prozedur-IDs der Unterformulare
- * @throws FormException
*/
List<Integer> getSubFormProcedureIds(int procedureId);
+ /**
+ * Prüft, ob ein Formularfeld in der Prozedur einen Wert hat oder null ist
+ * @param procedure Die zu prüfende Prozedur
+ * @param fieldName Der Formularfeldname
+ * @return Gibt <code>true</code> zurück, wenn das Feld einen Wert hat
+ */
+ static boolean hasValue(final Procedure procedure, final String fieldName) {
+ return null != procedure.getValue(fieldName);
+ }
+
+ /**
+ * Prüft, ob ein Formularfeld mit Ja/Nein/Unbekannt den Wert Ja hat
+ * @param procedure Die zu prüfende Prozedur
+ * @param fieldName Der Formularfeldname
+ * @return Gibt <code>true</code> zurück, wenn das Feld den Wert "Ja" hat
+ */
+ static boolean isYes(final Procedure procedure, final String fieldName) {
+ return hasValue(procedure, fieldName)
+ && procedure.getValue(fieldName).getString().equals(JaNeinUnbekannt.JA.getCode());
+ }
+
}
diff --git a/src/main/java/DNPM/services/MultipleMtbTherapieplanService.java b/src/main/java/DNPM/services/MultipleMtbTherapieplanService.java
new file mode 100644
index 0000000..d4eb297
--- /dev/null
+++ b/src/main/java/DNPM/services/MultipleMtbTherapieplanService.java
@@ -0,0 +1,12 @@
+package DNPM.services;
+
+import de.itc.onkostar.api.Procedure;
+
+public class MultipleMtbTherapieplanService implements TherapieplanService {
+
+ @Override
+ public void updateRequiredMtbEntries(Procedure procedure) {
+ // No action required
+ }
+
+}
diff --git a/src/main/java/DNPM/services/TherapieplanService.java b/src/main/java/DNPM/services/TherapieplanService.java
new file mode 100644
index 0000000..e47d75e
--- /dev/null
+++ b/src/main/java/DNPM/services/TherapieplanService.java
@@ -0,0 +1,15 @@
+package DNPM.services;
+
+import de.itc.onkostar.api.Procedure;
+
+public interface TherapieplanService {
+
+ /**
+ * Verlinke MTB und Übernahme Datum aus Hauptformular in weiteren Bereichen
+ * "Humangenetische Beratung" und "Reevaluation" und Unterformularen, wenn erforderlich.
+ *
+ * @param procedure Die Prozedur mit Hauptformular
+ */
+ void updateRequiredMtbEntries(Procedure procedure);
+
+}