From aef9dd7889ddf03cc75f5d682a26380ac6fb75d3 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Mon, 28 Aug 2023 12:17:29 +0200 Subject: [PATCH] Issue #29: Aktualisiere keinen EcogStatus vor Diagnosedatum --- .../DNPM/analyzer/SystemtherapieAnalyzer.java | 8 ++- .../analyzer/SystemtherapieAnalyzerTest.java | 66 +++++++++++++++---- 2 files changed, 60 insertions(+), 14 deletions(-) diff --git a/src/main/java/DNPM/analyzer/SystemtherapieAnalyzer.java b/src/main/java/DNPM/analyzer/SystemtherapieAnalyzer.java index 16fe577..e0d3037 100644 --- a/src/main/java/DNPM/analyzer/SystemtherapieAnalyzer.java +++ b/src/main/java/DNPM/analyzer/SystemtherapieAnalyzer.java @@ -71,7 +71,7 @@ public class SystemtherapieAnalyzer implements IProcedureAnalyzer { @Override public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { - return null != procedure && ( + return null != procedure && null != disease && ( procedure.getFormName().equals("OS.Systemische Therapie") || procedure.getFormName().equals("OS.Systemische Therapie.VarianteUKW") ); @@ -106,7 +106,11 @@ public class SystemtherapieAnalyzer implements IProcedureAnalyzer { return; } - var ecogFromCompleted = systemtherapieService.ecogSatus(procedure.getPatient()); + var ecogFromCompleted = systemtherapieService.ecogSatus(procedure.getPatient()) + .stream() + .filter(ecogStatusWithDate -> ecogStatusWithDate.getDate().after(disease.getDiagnosisDate())) + .collect(Collectors.toList()); + if (ecogFromCompleted.isEmpty()) { // Nothing to do return; diff --git a/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java b/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java index 2450f96..4028aec 100644 --- a/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java +++ b/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java @@ -9,6 +9,8 @@ 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; @@ -25,10 +27,21 @@ class SystemtherapieAnalyzerTest { 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 + @Mock IOnkostarApi onkostarApi, + @Mock SystemtherapieService systemtherapieService ) { this.onkostarApi = onkostarApi; this.systemtherapieService = systemtherapieService; @@ -37,7 +50,11 @@ class SystemtherapieAnalyzerTest { @Test void shouldInsertNewEcogStatus() throws Exception { - doAnswer(invocationOnMock -> List.of(new SystemtherapieService.EcogStatusWithDate(new Date(), "0"))) + final var diagnosisDate = daysPassed(7); + final var ecogDate = daysPassed(1); + final var procedureDate = daysPassed(1); + + doAnswer(invocationOnMock -> List.of(new SystemtherapieService.EcogStatusWithDate(ecogDate, "0"))) .when(systemtherapieService).ecogSatus(any(Patient.class)); var patient = new Patient(onkostarApi); @@ -45,21 +62,17 @@ class SystemtherapieAnalyzerTest { var procedure = new Procedure(onkostarApi); procedure.setId(1000); - procedure.setStartDate(new Date()); + procedure.setStartDate(procedureDate); procedure.setEditState(ProcedureEditStateType.COMPLETED); procedure.setPatientId(1); procedure.setPatient(patient); procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1)); - doAnswer(invocationOnMock -> { - var disease = new Disease(onkostarApi); - disease.setId(42); - return List.of(disease); - }).when(this.onkostarApi).getDiseasesByPatientId(anyInt()); + 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, null); + systemtherapieAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); var idCaptor = ArgumentCaptor.forClass(Integer.class); var formNameCaptor = ArgumentCaptor.forClass(String.class); @@ -72,6 +85,9 @@ class SystemtherapieAnalyzerTest { @Test void shouldNotModifyEcogStatusIfNoCompletedSystemTherapy() throws Exception { + final var diagnosisDate = daysPassed(7); + final var procedureDate = daysPassed(1); + doAnswer(invocationOnMock -> List.of()) .when(systemtherapieService).ecogSatus(any(Patient.class)); @@ -80,13 +96,39 @@ class SystemtherapieAnalyzerTest { var procedure = new Procedure(onkostarApi); procedure.setId(1000); - procedure.setStartDate(new Date()); + procedure.setStartDate(procedureDate); procedure.setEditState(ProcedureEditStateType.COMPLETED); procedure.setPatientId(1); procedure.setPatient(patient); procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1)); - systemtherapieAnalyzer.analyze(procedure, null); + 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 SystemtherapieService.EcogStatusWithDate(ecogDate, "0"))) + .when(systemtherapieService).ecogSatus(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());