diff --git a/README.md b/README.md index c98b8c2..d237e7a 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,21 @@ Laufzeit verwendet werden soll. Der Mapper muss hierbei das Interface `ProzedurT In der Klasse `DefaultSystemtherapieService` wird zur Laufzeit der erforderliche Mapper für das verwendete Formular ausgewählt. -An dieser Stelle kann auch eine eigene Implementierung - eine neue Klasse, die das Interface `ProzedurToProzedurwerteMapper` implementiert - integriert werden, indem das zu verwendende Formular (Formularname) je `SID` und die zu verwendende Mapping-Klasse für den Formularnamen angegeben wird. +An dieser Stelle kann auch eine eigene Implementierung - eine neue Klasse, die das Interface `ProzedurToProzedurwerteMapper` implementiert - +integriert werden, indem das zu verwendende Formular (Formularname) und die zu verwendende Mapping-Klasse für den Formularnamen angegeben wird. + +Hierbei kann in der Einstellung `systemtherapieform` festgelegt werden, dass ein anderes Formular als "OS.Systemische Therapie" verwendet werden soll. +Diese Einstellung muss manuell in der Datenbank angelegt werden und kann danach in Onkostar verändert werden. + +``` +INSERT INTO einstellung (name, wert, kategorie, beschreibung) +VALUES ( + 'systemtherapieform', + 'OS.Systemische Therapie', + 'DNPM', + 'Zu verwendendes Formular für die systemische Therapie' +); +``` ## Bauen des Plugins diff --git a/src/main/java/DNPM/services/systemtherapie/DefaultSystemtherapieService.java b/src/main/java/DNPM/services/systemtherapie/DefaultSystemtherapieService.java index 9fb3149..7c7e2b6 100644 --- a/src/main/java/DNPM/services/systemtherapie/DefaultSystemtherapieService.java +++ b/src/main/java/DNPM/services/systemtherapie/DefaultSystemtherapieService.java @@ -3,8 +3,6 @@ package DNPM.services.systemtherapie; import DNPM.services.SettingsService; import de.itc.onkostar.api.IOnkostarApi; import de.itc.onkostar.api.Procedure; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; @@ -17,8 +15,6 @@ import java.util.Map; */ public class DefaultSystemtherapieService implements SystemtherapieService { - private static final Logger logger = LoggerFactory.getLogger(DefaultSystemtherapieService.class); - private final IOnkostarApi onkostarApi; private final SettingsService settingsService; @@ -36,13 +32,8 @@ public class DefaultSystemtherapieService implements SystemtherapieService { */ @Override public List> getSystemischeTherapienFromDiagnose(int diseaseId) { - var sid = this.settingsService.getSID(); - if (sid.isEmpty()) { - logger.error("Kann SID nicht ermitteln um Formularnamen zu erhalten. Gebe 'null' zurück."); - return null; - } List> result = new ArrayList<>(); - for (Procedure prozedur : onkostarApi.getProceduresForDiseaseByForm(diseaseId, selectFormNameBySID(sid.get()))) { + for (Procedure prozedur : onkostarApi.getProceduresForDiseaseByForm(diseaseId, getFormName())) { prozedurToProzedurwerteMapper(prozedur).apply(prozedur).ifPresent(result::add); } return result; @@ -60,14 +51,9 @@ public class DefaultSystemtherapieService implements SystemtherapieService { return new OsSystemischeTherapieToProzedurwerteMapper(); } - @Override - public String selectFormNameBySID(String sid) { - switch (sid) { - case "2011": - case "20119": - return "OS.Systemische Therapie.VarianteUKW"; - default: - return "OS.Systemische Therapie"; - } + private String getFormName() { + return settingsService + .getSetting("systemtherapieform") + .orElse("OS.Systemische Therapie"); } } diff --git a/src/main/java/DNPM/services/systemtherapie/SystemtherapieService.java b/src/main/java/DNPM/services/systemtherapie/SystemtherapieService.java index 6b11c76..00b7a6d 100644 --- a/src/main/java/DNPM/services/systemtherapie/SystemtherapieService.java +++ b/src/main/java/DNPM/services/systemtherapie/SystemtherapieService.java @@ -25,10 +25,4 @@ public interface SystemtherapieService { */ ProzedurToProzedurwerteMapper prozedurToProzedurwerteMapper(Procedure procedure); - /** - * Ermittelt den Formularnamen anhand der SID - * @param sid die SID - * @return Den ermittelten Formularnamen - */ - String selectFormNameBySID(String sid); } diff --git a/src/test/java/DNPM/services/systemtherapie/DefaultSystemtherapieServiceTest.java b/src/test/java/DNPM/services/systemtherapie/DefaultSystemtherapieServiceTest.java index 3e63fa6..40ce315 100644 --- a/src/test/java/DNPM/services/systemtherapie/DefaultSystemtherapieServiceTest.java +++ b/src/test/java/DNPM/services/systemtherapie/DefaultSystemtherapieServiceTest.java @@ -8,6 +8,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; @@ -16,8 +17,7 @@ import java.util.*; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class DefaultSystemtherapieServiceTest { @@ -50,21 +50,37 @@ class DefaultSystemtherapieServiceTest { assertThat(actual).isExactlyInstanceOf(expectedMapping.getValue()); } - private static Set> expectedFormnameMappings() { - return Map.ofEntries(Map.entry("2011", "OS.Systemische Therapie.VarianteUKW"), Map.entry("20119", "OS.Systemische Therapie.VarianteUKW"), Map.entry("Defaultwert", "OS.Systemische Therapie")).entrySet(); + private static List formnameSetting() { + return List.of("OS.Systemische Therapie", "OS.Systemische Therapie.VarianteUKW"); } @ParameterizedTest - @MethodSource("expectedFormnameMappings") - void testShouldMapSidToFormName(Map.Entry expectedMapping) { - var actual = service.selectFormNameBySID(expectedMapping.getKey()); - assertThat(actual).isEqualTo(expectedMapping.getValue()); + @MethodSource("formnameSetting") + void testShouldRequestProceduresWithExpectedFormName(String expectedFormName) { + when(this.settingsService.getSetting(anyString())).thenReturn(Optional.of(expectedFormName)); + when(this.onkostarApi.getProceduresForDiseaseByForm(anyInt(), anyString())).thenReturn(List.of()); + + service.getSystemischeTherapienFromDiagnose(123); + + var argumentCaptor = ArgumentCaptor.forClass(String.class); + verify(onkostarApi, times(1)).getProceduresForDiseaseByForm(anyInt(), argumentCaptor.capture()); + assertThat(argumentCaptor.getValue()).isEqualTo(expectedFormName); + } + + @Test + void testShouldRequestProceduresWithDefaultFormName() { + when(this.settingsService.getSetting(anyString())).thenReturn(Optional.empty()); + when(this.onkostarApi.getProceduresForDiseaseByForm(anyInt(), anyString())).thenReturn(List.of()); + + service.getSystemischeTherapienFromDiagnose(123); + + var argumentCaptor = ArgumentCaptor.forClass(String.class); + verify(onkostarApi, times(1)).getProceduresForDiseaseByForm(anyInt(), argumentCaptor.capture()); + assertThat(argumentCaptor.getValue()).isEqualTo("OS.Systemische Therapie"); } @Test void testShouldReturnSystemischeTherapienFromDiagnose() { - when(settingsService.getSID()).thenReturn(Optional.of("12345")); - doAnswer(invocationOnMock -> { var procedure = new Procedure(onkostarApi); procedure.setFormName("OS.Systemische Therapie");