diff --git a/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java b/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java index 97b491d..17317cb 100644 --- a/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java +++ b/src/main/java/DNPM/analyzer/TherapieplanAnalyzer.java @@ -11,6 +11,7 @@ import de.itc.onkostar.api.analysis.AnalyseTriggerEvent; import de.itc.onkostar.api.analysis.AnalyzerRequirement; import de.itc.onkostar.api.analysis.IProcedureAnalyzer; import de.itc.onkostar.api.analysis.OnkostarPluginType; +import de.itc.onkostar.api.constants.JaNeinUnbekannt; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @@ -135,27 +136,56 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer { */ 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") + this.hasMultipleMtbsEnabled() || ( + !isYes(procedure, "humangenberatung") && !isYes(procedure, "reevaluation") + ) ) { return; } + var a = procedure.getValue("humangenberatung").getString(); + var b = procedure.getValue("reevaluation").getString(); + var mtbReference = procedure.getValue("referstemtb").getInt(); var mtbDate = procedure.getValue("datum").getDate(); var noUpdateRequired = true; - if (mtbReference != procedure.getValue("reftkhumangenber").getInt() && !mtbDate.equals(procedure.getValue("datumtkhumangenber").getDate())) { + 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 (mtbReference != procedure.getValue("reftkreevaluation").getInt() && !mtbDate.equals(procedure.getValue("datumtkreevaluation").getDate())) { + 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; } @@ -177,10 +207,7 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer { * @param procedure Die Prozedur mit Hauptformular */ private void updateMtbInSubforms(Procedure procedure) { - if ( - null != onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode") - && onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode").equals("true") - ) { + if (this.hasMultipleMtbsEnabled()) { return; } @@ -218,4 +245,18 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer { } }); } + + private boolean hasMultipleMtbsEnabled() { + return null != onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode") + && onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode").equals("true"); + } + + private boolean hasValue(final Procedure procedure, final String fieldName) { + return null != procedure.getValue(fieldName); + } + + private boolean isYes(final Procedure procedure, final String fieldName) { + return hasValue(procedure, fieldName) + && procedure.getValue(fieldName).getString().equals(JaNeinUnbekannt.JA.getCode()); + } } diff --git a/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java b/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java index 83d9d77..655c7d6 100644 --- a/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java +++ b/src/test/java/DNPM/analyzer/TherapieplanAnalyzerTest.java @@ -13,6 +13,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import java.time.Instant; import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -59,22 +60,70 @@ public class TherapieplanAnalyzerTest { 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())); + var testProcedure = baseProcedure(onkostarApi); // Keine humangenetische Beratung und keine Reevaluation empfohlen - testProcedure.setValue("humangenberatung", new Item("humangen_beratung", JaNeinUnbekannt.NEIN)); - testProcedure.setValue("reevaluation", new Item("reevaluation", JaNeinUnbekannt.NEIN)); + testProcedure.setValue("humangenberatung", new Item("humangen_beratung", JaNeinUnbekannt.NEIN.getCode())); + testProcedure.setValue("reevaluation", new Item("reevaluation", JaNeinUnbekannt.NEIN.getCode())); this.therapieplanAnalyzer.analyze(testProcedure, null); verify(onkostarApi, never()).saveProcedure(any(Procedure.class), anyBoolean()); } + @Test + void shouldUpdateSectionsIfNoReevaluation() throws Exception { + when(onkostarApi.getGlobalSetting(anyString())).thenReturn(null); + + var testProcedure = baseProcedure(onkostarApi); + + // Humangenetische Beratung aber keine Reevaluation + testProcedure.setValue("humangenberatung", new Item("humangen_beratung", JaNeinUnbekannt.JA.getCode())); + testProcedure.setValue("humangenberbegruendung", new Item("humangen_ber_begruendung", "Das ist die Begründung")); + testProcedure.setValue("reevaluation", new Item("reevaluation", JaNeinUnbekannt.NEIN.getCode())); + + this.therapieplanAnalyzer.analyze(testProcedure, null); + + var captor = ArgumentCaptor.forClass(Procedure.class); + verify(onkostarApi, times(1)).saveProcedure(captor.capture(), anyBoolean()); + + var capturedProcedure = captor.getValue(); + + assertThat(capturedProcedure.getValue("reftkreevaluation")).isNull(); + assertThat(capturedProcedure.getValue("datumtkreevaluation")).isNull(); + + assertThat(capturedProcedure.getValue("reftkhumangenber")).isNotNull(); + assertThat(capturedProcedure.getValue("reftkhumangenber").getInt()).isEqualTo(procedureId); + assertThat(capturedProcedure.getValue("datumtkhumangenber")).isNotNull(); + assertThat(capturedProcedure.getValue("datumtkhumangenber").getDate()).isEqualTo(testDate); + } + + @Test + void shouldUpdateSectionsIfNoHumanGenConsultation() throws Exception { + when(onkostarApi.getGlobalSetting(anyString())).thenReturn(null); + + var testProcedure = baseProcedure(onkostarApi); + + // Humangenetische Beratung aber keine Reevaluation + testProcedure.setValue("humangenberatung", new Item("humangen_beratung", JaNeinUnbekannt.NEIN.getCode())); + testProcedure.setValue("reevaluation", new Item("reevaluation", JaNeinUnbekannt.JA.getCode())); + + this.therapieplanAnalyzer.analyze(testProcedure, null); + + var captor = ArgumentCaptor.forClass(Procedure.class); + verify(onkostarApi, times(1)).saveProcedure(captor.capture(), anyBoolean()); + + var capturedProcedure = captor.getValue(); + + assertThat(capturedProcedure.getValue("reftkhumangenber")).isNull(); + assertThat(capturedProcedure.getValue("datumtkhumangenber")).isNull(); + + assertThat(capturedProcedure.getValue("reftkreevaluation")).isNotNull(); + assertThat(capturedProcedure.getValue("reftkreevaluation").getInt()).isEqualTo(procedureId); + assertThat(capturedProcedure.getValue("datumtkreevaluation")).isNotNull(); + assertThat(capturedProcedure.getValue("datumtkreevaluation").getDate()).isEqualTo(testDate); + } + @Test void shouldRequestAllStudienForEmptyQueryString() { var input = Map.of("q", (Object)" "); @@ -101,4 +150,19 @@ public class TherapieplanAnalyzerTest { assertThat(captor.getValue()).isEqualTo("NCT-123"); } + + private static final int procedureId = 1234; + private static final Date testDate = Date.from(Instant.parse("2023-03-15T09:43:00Z")); + + private Procedure baseProcedure(final IOnkostarApi onkostarApi) { + var testProcedure = new Procedure(onkostarApi); + testProcedure.setId(1000); + + // Setzen MTB Referenz und Datum MTB + testProcedure.setValue("referstemtb", new Item("ref_tumorkonferenz", procedureId)); + testProcedure.setValue("datum", new Item("datum", testDate)); + + return testProcedure; + } + }