summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/DNPM/forms/TherapieplanAnalyzer.java44
-rw-r--r--src/test/java/DNPM/forms/TherapieplanAnalyzerTest.java70
2 files changed, 112 insertions, 2 deletions
diff --git a/src/main/java/DNPM/forms/TherapieplanAnalyzer.java b/src/main/java/DNPM/forms/TherapieplanAnalyzer.java
index 2873004..9fd53cc 100644
--- a/src/main/java/DNPM/forms/TherapieplanAnalyzer.java
+++ b/src/main/java/DNPM/forms/TherapieplanAnalyzer.java
@@ -89,17 +89,57 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer {
@Override
public void analyze(Procedure procedure, Disease disease) {
+ updateMtbInSections(procedure);
updateMtbInSubforms(procedure);
}
/**
+ * Verlinke MTB und Übernahme Datum aus Hauptformular in weiteren Bereichen
+ * "Humangenetische Beratung" und "Reevaluation", wenn erforderlich.
+ *
+ * @param procedure Die Prozedur mit Hauptformular
+ */
+ private void updateMtbInSections(Procedure procedure) {
+ if (
+ null != onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode")
+ && onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode").equals("true")
+ ||
+ !procedure.getValue("humangenberatung").getString().equals("1")
+ && !procedure.getValue("reevaluation").getString().equals("1")
+ ) {
+ return;
+ }
+
+ var mtbReference = procedure.getValue("referstemtb").getInt();
+ var mtbDate = procedure.getValue("datum").getDate();
+
+ if (mtbReference != procedure.getValue("reftkhumangenber").getInt() && !mtbDate.equals(procedure.getValue("datumtkhumangenber").getDate())) {
+ procedure.setValue("reftkhumangenber", new Item("ref_tk_humangenber", mtbReference));
+ procedure.setValue("datumtkhumangenber", new Item("datum_tk_humangenber", mtbDate));
+ }
+
+ if (mtbReference != procedure.getValue("reftkreevaluation").getInt() && !mtbDate.equals(procedure.getValue("datumtkreevaluation").getDate())) {
+ procedure.setValue("reftkreevaluation", new Item("ref_tk_reevaluation", mtbReference));
+ procedure.setValue("datumtkreevaluation", new Item("datum_tk_reevaluation", mtbDate));
+ }
+
+ try {
+ onkostarApi.saveProcedure(procedure, false);
+ } catch (Exception e) {
+ logger.error("Formular 'DNPM Therapieplan' konnte nicht aktualisiert werden", e);
+ }
+ }
+
+ /**
* Verlinke MTB und Übernahme Datum aus Hauptformular in Unterformularen
*
* @param procedure Die Prozedur mit Hauptformular
*/
- // TODO: 13.03.23 Onkostar führt nach Speicherung eines Unterformulars erneut eine Speicherung des Hauptformulars aus - ggf eigene Speicher-Methode ohne Verwendung der Onkostar-API implementieren.
private void updateMtbInSubforms(Procedure procedure) {
- if (onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode").equals("true")) {
+ if (
+ null != onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode")
+ && onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode").equals("true")
+ ) {
return;
}
diff --git a/src/test/java/DNPM/forms/TherapieplanAnalyzerTest.java b/src/test/java/DNPM/forms/TherapieplanAnalyzerTest.java
new file mode 100644
index 0000000..38bc76c
--- /dev/null
+++ b/src/test/java/DNPM/forms/TherapieplanAnalyzerTest.java
@@ -0,0 +1,70 @@
+package DNPM.forms;
+
+import DNPM.services.FormService;
+import de.itc.onkostar.api.IOnkostarApi;
+import de.itc.onkostar.api.Item;
+import de.itc.onkostar.api.Procedure;
+import de.itc.onkostar.api.constants.JaNeinUnbekannt;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.util.Date;
+
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.*;
+
+@ExtendWith(MockitoExtension.class)
+public class TherapieplanAnalyzerTest {
+
+ @Mock
+ private IOnkostarApi onkostarApi;
+
+ @Mock
+ private FormService formService;
+
+ private TherapieplanAnalyzer therapieplanAnalyzer;
+
+ @BeforeEach
+ void setUp() {
+ this.therapieplanAnalyzer = new TherapieplanAnalyzer(onkostarApi, formService);
+ }
+
+ @Test
+ void shouldNotUpdateSubformsOrSectionsIfMultipleMtbConfiguration() throws Exception {
+ doAnswer(invocationOnMock -> {
+ var settingName = invocationOnMock.getArgument(0, String.class);
+ if (settingName.equals("mehrere_mtb_in_mtbepisode")) {
+ return "true";
+ }
+ return null;
+ }).when(onkostarApi).getGlobalSetting(anyString());
+
+ this.therapieplanAnalyzer.analyze(new Procedure(onkostarApi), null);
+
+ verify(onkostarApi, never()).saveProcedure(any(Procedure.class), anyBoolean());
+ }
+
+ @Test
+ void shouldNotUpdateSectionsIfSectionsNotEnabled() throws Exception {
+ when(onkostarApi.getGlobalSetting(anyString())).thenReturn(null);
+
+ var testProcedure = new Procedure(onkostarApi);
+ testProcedure.setId(1000);
+
+ // Setzen MTB Referenz und Datum MTB
+ testProcedure.setValue("referstemtb", new Item("ref_tumorkonferenz", 1234));
+ testProcedure.setValue("datum", new Item("datum", new Date()));
+
+ // Keine humangenetische Beratung und keine Reevaluation empfohlen
+ testProcedure.setValue("humangenberatung", new Item("humangen_beratung", JaNeinUnbekannt.NEIN));
+ testProcedure.setValue("reevaluation", new Item("reevaluation", JaNeinUnbekannt.NEIN));
+
+ this.therapieplanAnalyzer.analyze(testProcedure, null);
+
+ verify(onkostarApi, never()).saveProcedure(any(Procedure.class), anyBoolean());
+ }
+
+}