From c3e96d18fcd477519f09465ed27f55b1d8c64517 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Tue, 14 Mar 2023 11:05:31 +0100 Subject: [PATCH] Issue #7: Aktualisiere MTB + Datum in Reevaluation und gen. Beratung --- pom.xml | 166 ++++++++++++------ .../java/DNPM/forms/TherapieplanAnalyzer.java | 44 ++++- .../DNPM/forms/TherapieplanAnalyzerTest.java | 70 ++++++++ 3 files changed, 222 insertions(+), 58 deletions(-) create mode 100644 src/test/java/DNPM/forms/TherapieplanAnalyzerTest.java diff --git a/pom.xml b/pom.xml index 512f699..c5bec8e 100644 --- a/pom.xml +++ b/pom.xml @@ -1,64 +1,64 @@ - 4.0.0 - DNPMHelper - DNPMHelper - 0.0.2 - DNPMHelper + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + DNPMHelper + DNPMHelper + 0.0.2 + DNPMHelper - - 11 - 11 - 11 - UTF-8 + + 11 + 11 + 11 + UTF-8 - 4.3.8.RELEASE - + 4.3.8.RELEASE + - - - - de.itc - onkostar-parent - 2.11.1.1 - system - ${project.basedir}/libs/onkostar-api-2.11.1.1.jar - + + + + de.itc + onkostar-parent + 2.11.1.1 + system + ${project.basedir}/libs/onkostar-api-2.11.1.1.jar + - - - org.hibernate - hibernate-core - 4.3.11.Final - provided - + + + org.hibernate + hibernate-core + 4.3.11.Final + provided + - - - org.springframework - spring-jdbc - ${spring-version} - provided - - - org.springframework - spring-webmvc - ${spring-version} - provided - - - com.fasterxml.jackson.core - jackson-databind - 2.12.2 - provided - - - org.slf4j - slf4j-api - 1.7.2 - provided - + + + org.springframework + spring-jdbc + ${spring-version} + provided + + + org.springframework + spring-webmvc + ${spring-version} + provided + + + com.fasterxml.jackson.core + jackson-databind + 2.12.2 + provided + + + org.slf4j + slf4j-api + 1.7.2 + provided + javax.xml.bind jaxb-api @@ -77,6 +77,60 @@ 2.6 provided - + + + + + org.junit.jupiter + junit-jupiter-engine + 5.9.2 + test + + + org.assertj + assertj-core + 3.24.2 + test + + + org.mockito + mockito-core + 4.11.0 + test + + + org.mockito + mockito-junit-jupiter + 4.11.0 + test + + + ca.uhn.hapi + hapi-base + 2.2 + test + + + ca.uhn.hapi + hapi-structures-v26 + 2.2 + test + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.22.2 + + + \ No newline at end of file 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()); + } + +}