diff --git a/src/main/java/DNPM/analyzer/SystemtherapieAnalyzer.java b/src/main/java/DNPM/analyzer/TherapieMitEcogAnalyzer.java similarity index 81% rename from src/main/java/DNPM/analyzer/SystemtherapieAnalyzer.java rename to src/main/java/DNPM/analyzer/TherapieMitEcogAnalyzer.java index e8936cf..46841e1 100644 --- a/src/main/java/DNPM/analyzer/SystemtherapieAnalyzer.java +++ b/src/main/java/DNPM/analyzer/TherapieMitEcogAnalyzer.java @@ -1,6 +1,7 @@ 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; @@ -21,28 +22,31 @@ import java.util.stream.Collectors; /** * Diese Klasse implementiert ein Plugin, welches Aktionen nach Bearbeitung eines Formulars zur Systemtherapie durchführt. * - * @since 0.4.0 + * @since 0.6.0 */ @Component -public class SystemtherapieAnalyzer extends Analyzer { +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 SystemtherapieAnalyzer( + 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 im Formularen vom Typ Systemtherapie"; + return "Aktualisiert verknüpfte Formulare nach Änderungen in Formularen vom Typ Strahlen-/Systemtherapie mit ECOG-Status"; } /** @@ -56,7 +60,9 @@ public class SystemtherapieAnalyzer extends Analyzer { @Override public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { return null != procedure && null != disease && ( - procedure.getFormName().equals("OS.Systemische Therapie") + procedure.getFormName().equals("OS.Strahlentherapie") + || procedure.getFormName().equals("OS.Strahlentherapie.VarianteUKW") + || procedure.getFormName().equals("OS.Systemische Therapie") || procedure.getFormName().equals("OS.Systemische Therapie.VarianteUKW") ); } @@ -90,12 +96,18 @@ public class SystemtherapieAnalyzer extends Analyzer { return; } - var ecogFromCompleted = systemtherapieService.ecogStatus(procedure.getPatient()) + var ecog = strahlentherapieService.ecogStatus(procedure.getPatient()) .stream() .filter(ecogStatusWithDate -> ecogStatusWithDate.getDate().after(disease.getDiagnosisDate())) .collect(Collectors.toList()); - if (ecogFromCompleted.isEmpty()) { + ecog.addAll(systemtherapieService.ecogStatus(procedure.getPatient()) + .stream() + .filter(ecogStatusWithDate -> ecogStatusWithDate.getDate().after(disease.getDiagnosisDate())) + .collect(Collectors.toList())); + + + if (ecog.isEmpty()) { // Nothing to do return; } @@ -105,9 +117,9 @@ public class SystemtherapieAnalyzer extends Analyzer { .forEach(p -> { var ufEcog = p.getValue("ECOGVerlauf"); if (null != ufEcog && ufEcog.getValue() instanceof List) { - updateExistingEcogVerlauf(p, ecogFromCompleted, ufEcog); + updateExistingEcogVerlauf(p, ecog, ufEcog); } else { - newEcogverlauf(p, ecogFromCompleted); + newEcogverlauf(p, ecog); } }); } diff --git a/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java b/src/test/java/DNPM/analyzer/TherapieMitEcogAnalyzerTest.java similarity index 75% rename from src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java rename to src/test/java/DNPM/analyzer/TherapieMitEcogAnalyzerTest.java index d500059..aab0759 100644 --- a/src/test/java/DNPM/analyzer/SystemtherapieAnalyzerTest.java +++ b/src/test/java/DNPM/analyzer/TherapieMitEcogAnalyzerTest.java @@ -1,6 +1,7 @@ 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; @@ -20,13 +21,15 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) -class SystemtherapieAnalyzerTest { +class TherapieMitEcogAnalyzerTest { private IOnkostarApi onkostarApi; + private StrahlentherapieService strahlentherapieService; + private SystemtherapieService systemtherapieService; - private SystemtherapieAnalyzer systemtherapieAnalyzer; + private TherapieMitEcogAnalyzer therapieMitEcogAnalyzer; private Disease dummyDisease(int id, Date diagnosisDate) { var disease = new Disease(onkostarApi); @@ -42,11 +45,13 @@ class SystemtherapieAnalyzerTest { @BeforeEach void setUp( @Mock IOnkostarApi onkostarApi, + @Mock StrahlentherapieService strahlentherapieService, @Mock SystemtherapieService systemtherapieService ) { this.onkostarApi = onkostarApi; + this.strahlentherapieService = strahlentherapieService; this.systemtherapieService = systemtherapieService; - this.systemtherapieAnalyzer = new SystemtherapieAnalyzer(onkostarApi, systemtherapieService); + this.therapieMitEcogAnalyzer = new TherapieMitEcogAnalyzer(onkostarApi, strahlentherapieService, systemtherapieService); } @Test @@ -73,7 +78,7 @@ class SystemtherapieAnalyzerTest { doAnswer(invocationOnMock -> List.of(procedure)).when(onkostarApi).getProceduresForDiseaseByForm(anyInt(), anyString()); - systemtherapieAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); + therapieMitEcogAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); var idCaptor = ArgumentCaptor.forClass(Integer.class); var formNameCaptor = ArgumentCaptor.forClass(String.class); @@ -103,7 +108,7 @@ class SystemtherapieAnalyzerTest { procedure.setPatient(patient); procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1)); - systemtherapieAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); + therapieMitEcogAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); verify(onkostarApi, times(0)).getProceduresForDiseaseByForm(anyInt(), anyString()); verify(onkostarApi, times(0)).saveProcedure(any(Procedure.class), anyBoolean()); @@ -129,10 +134,32 @@ class SystemtherapieAnalyzerTest { procedure.setPatient(patient); procedure.setValue("ECOGvorTherapie", new Item("ECOGvorTherapie", 1)); - systemtherapieAnalyzer.analyze(procedure, dummyDisease(10, diagnosisDate)); + 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()); + } + }