From 9c503d2244f61221fdf9716ded30f86aa758f957 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Tue, 10 Oct 2023 13:02:21 +0200 Subject: Issue #54: Verwende ECOG nach Update von Strahlen- und Systemtherapieformular --- .../java/DNPM/analyzer/SystemtherapieAnalyzer.java | 156 ------------------- .../DNPM/analyzer/TherapieMitEcogAnalyzer.java | 168 +++++++++++++++++++++ .../DNPM/analyzer/SystemtherapieAnalyzerTest.java | 138 ----------------- .../DNPM/analyzer/TherapieMitEcogAnalyzerTest.java | 165 ++++++++++++++++++++ 4 files changed, 333 insertions(+), 294 deletions(-) delete mode 100644 src/main/java/DNPM/analyzer/SystemtherapieAnalyzer.java create mode 100644 src/main/java/DNPM/analyzer/TherapieMitEcogAnalyzer.java delete mode 100644 src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java create mode 100644 src/test/java/DNPM/analyzer/TherapieMitEcogAnalyzerTest.java (limited to 'src') diff --git a/src/main/java/DNPM/analyzer/SystemtherapieAnalyzer.java b/src/main/java/DNPM/analyzer/SystemtherapieAnalyzer.java deleted file mode 100644 index e8936cf..0000000 --- a/src/main/java/DNPM/analyzer/SystemtherapieAnalyzer.java +++ /dev/null @@ -1,156 +0,0 @@ -package DNPM.analyzer; - -import DNPM.dto.EcogStatusWithDate; -import DNPM.services.systemtherapie.SystemtherapieService; -import de.itc.onkostar.api.Disease; -import de.itc.onkostar.api.IOnkostarApi; -import de.itc.onkostar.api.Item; -import de.itc.onkostar.api.Procedure; -import de.itc.onkostar.api.analysis.AnalyseTriggerEvent; -import de.itc.onkostar.api.analysis.AnalyzerRequirement; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * Diese Klasse implementiert ein Plugin, welches Aktionen nach Bearbeitung eines Formulars zur Systemtherapie durchführt. - * - * @since 0.4.0 - */ -@Component -public class SystemtherapieAnalyzer extends Analyzer { - - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - private final IOnkostarApi onkostarApi; - - private final SystemtherapieService systemtherapieService; - - public SystemtherapieAnalyzer( - final IOnkostarApi onkostarApi, - final SystemtherapieService systemtherapieService - ) { - this.onkostarApi = onkostarApi; - this.systemtherapieService = systemtherapieService; - } - - @Override - public String getDescription() { - return "Aktualisiert verknüpfte Formulare nach Änderungen im Formularen vom Typ Systemtherapie"; - } - - /** - * @deprecated - */ - @Override - public boolean isRelevantForDeletedProcedure() { - return true; - } - - @Override - public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { - return null != procedure && null != disease && ( - procedure.getFormName().equals("OS.Systemische Therapie") - || procedure.getFormName().equals("OS.Systemische Therapie.VarianteUKW") - ); - } - - @Override - public boolean isSynchronous() { - return false; - } - - @Override - public AnalyzerRequirement getRequirement() { - return AnalyzerRequirement.PROCEDURE; - } - - @Override - public Set getTriggerEvents() { - return Set.of( - AnalyseTriggerEvent.EDIT_SAVE, - AnalyseTriggerEvent.EDIT_LOCK, - AnalyseTriggerEvent.REORG - ); - } - - @Override - public void analyze(Procedure procedure, Disease disease) { - var date = procedure.getStartDate(); - var status = procedure.getValue("ECOGvorTherapie"); - - if (null == date || null == status) { - // Ignore - return; - } - - var ecogFromCompleted = systemtherapieService.ecogStatus(procedure.getPatient()) - .stream() - .filter(ecogStatusWithDate -> ecogStatusWithDate.getDate().after(disease.getDiagnosisDate())) - .collect(Collectors.toList()); - - if (ecogFromCompleted.isEmpty()) { - // Nothing to do - return; - } - - procedure.getPatient().getDiseases().stream() - .flatMap(d -> onkostarApi.getProceduresForDiseaseByForm(d.getId(), "DNPM Klinik/Anamnese").stream()) - .forEach(p -> { - var ufEcog = p.getValue("ECOGVerlauf"); - if (null != ufEcog && ufEcog.getValue() instanceof List) { - updateExistingEcogVerlauf(p, ecogFromCompleted, ufEcog); - } else { - newEcogverlauf(p, ecogFromCompleted); - } - }); - } - - private void updateExistingEcogVerlauf(Procedure p, List ecogFromCompleted, Item ufEcog) { - var shouldSave = false; - var existingDates = ufEcog.>>getValue().stream() - .map(v -> v.get("Datum")) - .collect(Collectors.toList()); - for (var ecog : ecogFromCompleted) { - var formattedDate = new SimpleDateFormat("yyyy-MM-dd").format(ecog.getDate()); - if (!existingDates.contains(formattedDate)) { - var newSubProcedure = new Procedure(onkostarApi); - newSubProcedure.setStartDate(ecog.getDate()); - newSubProcedure.setValue("Datum", new Item("Datum", ecog.getDate())); - newSubProcedure.setValue("ECOG", new Item("ECOG", ecog.getStatus())); - p.addSubProcedure("ECOGVerlauf", newSubProcedure); - shouldSave = true; - } - } - if (shouldSave) { - try { - onkostarApi.saveProcedure(p, true); - } catch (Exception e) { - logger.error("Cannot update ECOG for procedure '{}'", p.getId()); - } - } - } - - private void newEcogverlauf(Procedure p, List ecogFromCompleted) { - p.setValue("ECOGVerlauf", new Item("ECOGVerlauf", List.of())); - for (var ecog : ecogFromCompleted) { - var newSubProcedure = new Procedure(onkostarApi); - newSubProcedure.setStartDate(ecog.getDate()); - newSubProcedure.setValue("Datum", new Item("Datum", ecog.getDate())); - newSubProcedure.setValue("ECOG", new Item("ECOG", ecog.getStatus())); - p.addSubProcedure("ECOGVerlauf", newSubProcedure); - } - try { - onkostarApi.saveProcedure(p, true); - } catch (Exception e) { - logger.error("Create update ECOG for procedure '{}'", p.getId()); - } - } - -} diff --git a/src/main/java/DNPM/analyzer/TherapieMitEcogAnalyzer.java b/src/main/java/DNPM/analyzer/TherapieMitEcogAnalyzer.java new file mode 100644 index 0000000..46841e1 --- /dev/null +++ b/src/main/java/DNPM/analyzer/TherapieMitEcogAnalyzer.java @@ -0,0 +1,168 @@ +package DNPM.analyzer; + +import DNPM.dto.EcogStatusWithDate; +import DNPM.services.strahlentherapie.StrahlentherapieService; +import DNPM.services.systemtherapie.SystemtherapieService; +import de.itc.onkostar.api.Disease; +import de.itc.onkostar.api.IOnkostarApi; +import de.itc.onkostar.api.Item; +import de.itc.onkostar.api.Procedure; +import de.itc.onkostar.api.analysis.AnalyseTriggerEvent; +import de.itc.onkostar.api.analysis.AnalyzerRequirement; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * Diese Klasse implementiert ein Plugin, welches Aktionen nach Bearbeitung eines Formulars zur Systemtherapie durchführt. + * + * @since 0.6.0 + */ +@Component +public class TherapieMitEcogAnalyzer extends Analyzer { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private final IOnkostarApi onkostarApi; + + private final StrahlentherapieService strahlentherapieService; + private final SystemtherapieService systemtherapieService; + + public TherapieMitEcogAnalyzer( + final IOnkostarApi onkostarApi, + final StrahlentherapieService strahlentherapieService, + final SystemtherapieService systemtherapieService + ) { + this.onkostarApi = onkostarApi; + this.strahlentherapieService = strahlentherapieService; + this.systemtherapieService = systemtherapieService; + } + + @Override + public String getDescription() { + return "Aktualisiert verknüpfte Formulare nach Änderungen in Formularen vom Typ Strahlen-/Systemtherapie mit ECOG-Status"; + } + + /** + * @deprecated + */ + @Override + public boolean isRelevantForDeletedProcedure() { + return true; + } + + @Override + public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { + return null != procedure && null != disease && ( + procedure.getFormName().equals("OS.Strahlentherapie") + || procedure.getFormName().equals("OS.Strahlentherapie.VarianteUKW") + || procedure.getFormName().equals("OS.Systemische Therapie") + || procedure.getFormName().equals("OS.Systemische Therapie.VarianteUKW") + ); + } + + @Override + public boolean isSynchronous() { + return false; + } + + @Override + public AnalyzerRequirement getRequirement() { + return AnalyzerRequirement.PROCEDURE; + } + + @Override + public Set getTriggerEvents() { + return Set.of( + AnalyseTriggerEvent.EDIT_SAVE, + AnalyseTriggerEvent.EDIT_LOCK, + AnalyseTriggerEvent.REORG + ); + } + + @Override + public void analyze(Procedure procedure, Disease disease) { + var date = procedure.getStartDate(); + var status = procedure.getValue("ECOGvorTherapie"); + + if (null == date || null == status) { + // Ignore + return; + } + + var ecog = strahlentherapieService.ecogStatus(procedure.getPatient()) + .stream() + .filter(ecogStatusWithDate -> ecogStatusWithDate.getDate().after(disease.getDiagnosisDate())) + .collect(Collectors.toList()); + + ecog.addAll(systemtherapieService.ecogStatus(procedure.getPatient()) + .stream() + .filter(ecogStatusWithDate -> ecogStatusWithDate.getDate().after(disease.getDiagnosisDate())) + .collect(Collectors.toList())); + + + if (ecog.isEmpty()) { + // Nothing to do + return; + } + + procedure.getPatient().getDiseases().stream() + .flatMap(d -> onkostarApi.getProceduresForDiseaseByForm(d.getId(), "DNPM Klinik/Anamnese").stream()) + .forEach(p -> { + var ufEcog = p.getValue("ECOGVerlauf"); + if (null != ufEcog && ufEcog.getValue() instanceof List) { + updateExistingEcogVerlauf(p, ecog, ufEcog); + } else { + newEcogverlauf(p, ecog); + } + }); + } + + private void updateExistingEcogVerlauf(Procedure p, List ecogFromCompleted, Item ufEcog) { + var shouldSave = false; + var existingDates = ufEcog.>>getValue().stream() + .map(v -> v.get("Datum")) + .collect(Collectors.toList()); + for (var ecog : ecogFromCompleted) { + var formattedDate = new SimpleDateFormat("yyyy-MM-dd").format(ecog.getDate()); + if (!existingDates.contains(formattedDate)) { + var newSubProcedure = new Procedure(onkostarApi); + newSubProcedure.setStartDate(ecog.getDate()); + newSubProcedure.setValue("Datum", new Item("Datum", ecog.getDate())); + newSubProcedure.setValue("ECOG", new Item("ECOG", ecog.getStatus())); + p.addSubProcedure("ECOGVerlauf", newSubProcedure); + shouldSave = true; + } + } + if (shouldSave) { + try { + onkostarApi.saveProcedure(p, true); + } catch (Exception e) { + logger.error("Cannot update ECOG for procedure '{}'", p.getId()); + } + } + } + + private void newEcogverlauf(Procedure p, List ecogFromCompleted) { + p.setValue("ECOGVerlauf", new Item("ECOGVerlauf", List.of())); + for (var ecog : ecogFromCompleted) { + var newSubProcedure = new Procedure(onkostarApi); + newSubProcedure.setStartDate(ecog.getDate()); + newSubProcedure.setValue("Datum", new Item("Datum", ecog.getDate())); + newSubProcedure.setValue("ECOG", new Item("ECOG", ecog.getStatus())); + p.addSubProcedure("ECOGVerlauf", newSubProcedure); + } + try { + onkostarApi.saveProcedure(p, true); + } catch (Exception e) { + logger.error("Create update ECOG for procedure '{}'", p.getId()); + } + } + +} diff --git a/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java b/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java deleted file mode 100644 index d500059..0000000 --- a/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java +++ /dev/null @@ -1,138 +0,0 @@ -package DNPM.analyzer; - -import DNPM.dto.EcogStatusWithDate; -import DNPM.services.systemtherapie.SystemtherapieService; -import de.itc.onkostar.api.*; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -import java.time.Instant; -import java.time.temporal.ChronoUnit; -import java.util.Date; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.Mockito.*; - -@ExtendWith(MockitoExtension.class) -class SystemtherapieAnalyzerTest { - - private IOnkostarApi onkostarApi; - - private SystemtherapieService systemtherapieService; - - private SystemtherapieAnalyzer systemtherapieAnalyzer; - - private Disease dummyDisease(int id, Date diagnosisDate) { - var disease = new Disease(onkostarApi); - disease.setId(id); - disease.setDiagnosisDate(diagnosisDate); - return disease; - } - - private Date daysPassed(int days) { - return Date.from(Instant.now().minus(days, ChronoUnit.DAYS)); - } - - @BeforeEach - void setUp( - @Mock IOnkostarApi onkostarApi, - @Mock SystemtherapieService systemtherapieService - ) { - this.onkostarApi = onkostarApi; - this.systemtherapieService = systemtherapieService; - this.systemtherapieAnalyzer = new SystemtherapieAnalyzer(onkostarApi, systemtherapieService); - } - - @Test - void shouldInsertNewEcogStatus() throws Exception { - final var diagnosisDate = daysPassed(7); - final var ecogDate = daysPassed(1); - final var procedureDate = daysPassed(1); - - doAnswer(invocationOnMock -> List.of(new EcogStatusWithDate(ecogDate, "0"))) - .when(systemtherapieService).ecogStatus(any(Patient.class)); - - var patient = new Patient(onkostarApi); - patient.setId(1); - - var procedure = new Procedure(onkostarApi); - procedure.setId(1000); - procedure.setStartDate(procedureDate); - procedure.setEditState(ProcedureEditStateType.COMPLETED); - procedure.setPatientId(1); - procedure.setPatient(patient); - procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1)); - - doAnswer(invocationOnMock -> List.of(dummyDisease(42, diagnosisDate))).when(this.onkostarApi).getDiseasesByPatientId(anyInt()); - - doAnswer(invocationOnMock -> List.of(procedure)).when(onkostarApi).getProceduresForDiseaseByForm(anyInt(), anyString()); - - systemtherapieAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); - - var idCaptor = ArgumentCaptor.forClass(Integer.class); - var formNameCaptor = ArgumentCaptor.forClass(String.class); - verify(onkostarApi, times(1)).getProceduresForDiseaseByForm(idCaptor.capture(), formNameCaptor.capture()); - assertThat(idCaptor.getValue()).isEqualTo(42); - assertThat(formNameCaptor.getValue()).isEqualTo("DNPM Klinik/Anamnese"); - - verify(onkostarApi, times(1)).saveProcedure(any(Procedure.class), anyBoolean()); - } - - @Test - void shouldNotModifyEcogStatusIfNoCompletedSystemTherapy() throws Exception { - final var diagnosisDate = daysPassed(7); - final var procedureDate = daysPassed(1); - - doAnswer(invocationOnMock -> List.of()) - .when(systemtherapieService).ecogStatus(any(Patient.class)); - - var patient = new Patient(onkostarApi); - patient.setId(1); - - var procedure = new Procedure(onkostarApi); - procedure.setId(1000); - procedure.setStartDate(procedureDate); - procedure.setEditState(ProcedureEditStateType.COMPLETED); - procedure.setPatientId(1); - procedure.setPatient(patient); - procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1)); - - systemtherapieAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); - - verify(onkostarApi, times(0)).getProceduresForDiseaseByForm(anyInt(), anyString()); - verify(onkostarApi, times(0)).saveProcedure(any(Procedure.class), anyBoolean()); - } - - @Test - void shouldNotIncludeEcogStatusBeforeDiagnosisDate() throws Exception { - final var diagnosisDate = daysPassed(7); - final var ecogDate = daysPassed(28); - final var procedureDate = daysPassed(1); - - doAnswer(invocationOnMock -> List.of(new EcogStatusWithDate(ecogDate, "0"))) - .when(systemtherapieService).ecogStatus(any(Patient.class)); - - var patient = new Patient(onkostarApi); - patient.setId(1); - - var procedure = new Procedure(onkostarApi); - procedure.setId(1000); - procedure.setStartDate(procedureDate); - procedure.setEditState(ProcedureEditStateType.COMPLETED); - procedure.setPatientId(1); - procedure.setPatient(patient); - procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1)); - - systemtherapieAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); - - verify(onkostarApi, times(0)).getProceduresForDiseaseByForm(anyInt(), anyString()); - verify(onkostarApi, times(0)).saveProcedure(any(Procedure.class), anyBoolean()); - } - -} diff --git a/src/test/java/DNPM/analyzer/TherapieMitEcogAnalyzerTest.java b/src/test/java/DNPM/analyzer/TherapieMitEcogAnalyzerTest.java new file mode 100644 index 0000000..aab0759 --- /dev/null +++ b/src/test/java/DNPM/analyzer/TherapieMitEcogAnalyzerTest.java @@ -0,0 +1,165 @@ +package DNPM.analyzer; + +import DNPM.dto.EcogStatusWithDate; +import DNPM.services.strahlentherapie.StrahlentherapieService; +import DNPM.services.systemtherapie.SystemtherapieService; +import de.itc.onkostar.api.*; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.Date; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class TherapieMitEcogAnalyzerTest { + + private IOnkostarApi onkostarApi; + + private StrahlentherapieService strahlentherapieService; + + private SystemtherapieService systemtherapieService; + + private TherapieMitEcogAnalyzer therapieMitEcogAnalyzer; + + private Disease dummyDisease(int id, Date diagnosisDate) { + var disease = new Disease(onkostarApi); + disease.setId(id); + disease.setDiagnosisDate(diagnosisDate); + return disease; + } + + private Date daysPassed(int days) { + return Date.from(Instant.now().minus(days, ChronoUnit.DAYS)); + } + + @BeforeEach + void setUp( + @Mock IOnkostarApi onkostarApi, + @Mock StrahlentherapieService strahlentherapieService, + @Mock SystemtherapieService systemtherapieService + ) { + this.onkostarApi = onkostarApi; + this.strahlentherapieService = strahlentherapieService; + this.systemtherapieService = systemtherapieService; + this.therapieMitEcogAnalyzer = new TherapieMitEcogAnalyzer(onkostarApi, strahlentherapieService, systemtherapieService); + } + + @Test + void shouldInsertNewEcogStatus() throws Exception { + final var diagnosisDate = daysPassed(7); + final var ecogDate = daysPassed(1); + final var procedureDate = daysPassed(1); + + doAnswer(invocationOnMock -> List.of(new EcogStatusWithDate(ecogDate, "0"))) + .when(systemtherapieService).ecogStatus(any(Patient.class)); + + var patient = new Patient(onkostarApi); + patient.setId(1); + + var procedure = new Procedure(onkostarApi); + procedure.setId(1000); + procedure.setStartDate(procedureDate); + procedure.setEditState(ProcedureEditStateType.COMPLETED); + procedure.setPatientId(1); + procedure.setPatient(patient); + procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1)); + + doAnswer(invocationOnMock -> List.of(dummyDisease(42, diagnosisDate))).when(this.onkostarApi).getDiseasesByPatientId(anyInt()); + + doAnswer(invocationOnMock -> List.of(procedure)).when(onkostarApi).getProceduresForDiseaseByForm(anyInt(), anyString()); + + therapieMitEcogAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); + + var idCaptor = ArgumentCaptor.forClass(Integer.class); + var formNameCaptor = ArgumentCaptor.forClass(String.class); + verify(onkostarApi, times(1)).getProceduresForDiseaseByForm(idCaptor.capture(), formNameCaptor.capture()); + assertThat(idCaptor.getValue()).isEqualTo(42); + assertThat(formNameCaptor.getValue()).isEqualTo("DNPM Klinik/Anamnese"); + + verify(onkostarApi, times(1)).saveProcedure(any(Procedure.class), anyBoolean()); + } + + @Test + void shouldNotModifyEcogStatusIfNoCompletedSystemTherapy() throws Exception { + final var diagnosisDate = daysPassed(7); + final var procedureDate = daysPassed(1); + + doAnswer(invocationOnMock -> List.of()) + .when(systemtherapieService).ecogStatus(any(Patient.class)); + + var patient = new Patient(onkostarApi); + patient.setId(1); + + var procedure = new Procedure(onkostarApi); + procedure.setId(1000); + procedure.setStartDate(procedureDate); + procedure.setEditState(ProcedureEditStateType.COMPLETED); + procedure.setPatientId(1); + procedure.setPatient(patient); + procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1)); + + therapieMitEcogAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); + + verify(onkostarApi, times(0)).getProceduresForDiseaseByForm(anyInt(), anyString()); + verify(onkostarApi, times(0)).saveProcedure(any(Procedure.class), anyBoolean()); + } + + @Test + void shouldNotIncludeEcogStatusBeforeDiagnosisDate() throws Exception { + final var diagnosisDate = daysPassed(7); + final var ecogDate = daysPassed(28); + final var procedureDate = daysPassed(1); + + doAnswer(invocationOnMock -> List.of(new EcogStatusWithDate(ecogDate, "0"))) + .when(systemtherapieService).ecogStatus(any(Patient.class)); + + var patient = new Patient(onkostarApi); + patient.setId(1); + + var procedure = new Procedure(onkostarApi); + procedure.setId(1000); + procedure.setStartDate(procedureDate); + procedure.setEditState(ProcedureEditStateType.COMPLETED); + procedure.setPatientId(1); + procedure.setPatient(patient); + procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1)); + + therapieMitEcogAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); + + verify(onkostarApi, times(0)).getProceduresForDiseaseByForm(anyInt(), anyString()); + verify(onkostarApi, times(0)).saveProcedure(any(Procedure.class), anyBoolean()); + } + + @Test + void shouldRequestEcogFromStrahlentherapieAndSystemtherapie() { + final var diagnosisDate = daysPassed(7); + final var procedureDate = daysPassed(1); + + var patient = new Patient(onkostarApi); + patient.setId(1); + + var procedure = new Procedure(onkostarApi); + procedure.setId(1000); + procedure.setStartDate(procedureDate); + procedure.setEditState(ProcedureEditStateType.COMPLETED); + procedure.setPatientId(1); + procedure.setPatient(patient); + procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1)); + + therapieMitEcogAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); + + verify(strahlentherapieService, times(1)).ecogStatus(any()); + verify(systemtherapieService, times(1)).ecogStatus(any()); + } + +} -- cgit v1.2.3