mirror of
https://github.com/pcvolkmer/onkostar-plugin-dnpm.git
synced 2025-07-02 01:02:55 +00:00
Issue #29: Füge neuer ECOG Einträge in DNPM Klinik/Anamnese ein
Es werden lediglich neue Einträge hinzugefügt, betrachtet wird hierbei das Datum der Feststellung und abgeschlossene Formulare Systemische Therapie. Es werden *keine* Einträge nachträglich verändert.
This commit is contained in:
142
src/main/java/DNPM/analyzer/SystemtherapieAnalyzer.java
Normal file
142
src/main/java/DNPM/analyzer/SystemtherapieAnalyzer.java
Normal file
@ -0,0 +1,142 @@
|
||||
package DNPM.analyzer;
|
||||
|
||||
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 de.itc.onkostar.api.analysis.IProcedureAnalyzer;
|
||||
import de.itc.onkostar.api.analysis.OnkostarPluginType;
|
||||
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 implements IProcedureAnalyzer {
|
||||
|
||||
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 OnkostarPluginType getType() {
|
||||
return OnkostarPluginType.ANALYZER;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVersion() {
|
||||
return "0.4.0";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "DNPM Systemtherapie Analyzer";
|
||||
}
|
||||
|
||||
@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 && (
|
||||
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<AnalyseTriggerEvent> 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.ecogSatus(procedure.getPatient());
|
||||
|
||||
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) {
|
||||
var shouldSave = false;
|
||||
var existingDates = ((List<Map<String, Object>>) ufEcog.getValue()).stream()
|
||||
.map(v -> v.get("Datum").toString())
|
||||
.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());
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user