From 6804b290cd7f60e91b72b59f8922f4271b095417 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Mon, 13 Mar 2023 12:41:00 +0100 Subject: Issue #7: Übernahme von MTB und MTB-Datum aus Hauptformular --- src/main/java/DNPM/forms/TherapieplanAnalyzer.java | 139 +++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 src/main/java/DNPM/forms/TherapieplanAnalyzer.java (limited to 'src/main/java/DNPM/forms') diff --git a/src/main/java/DNPM/forms/TherapieplanAnalyzer.java b/src/main/java/DNPM/forms/TherapieplanAnalyzer.java new file mode 100644 index 0000000..7469cc7 --- /dev/null +++ b/src/main/java/DNPM/forms/TherapieplanAnalyzer.java @@ -0,0 +1,139 @@ +package DNPM.forms; + +import DNPM.services.FormService; +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.util.Objects; +import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Diese Klasse implementiert ein Plugin, welches Aktionen nach Bearbeitung eines Therapieplans durchführt. + * + * @since 0.0.2 + */ +@Component +public class TherapieplanAnalyzer implements IProcedureAnalyzer { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private final IOnkostarApi onkostarApi; + + private final FormService formService; + + public TherapieplanAnalyzer(final IOnkostarApi onkostarApi, final FormService formService) { + this.onkostarApi = onkostarApi; + this.formService = formService; + } + + @Override + public OnkostarPluginType getType() { + return OnkostarPluginType.ANALYZER; + } + + @Override + public String getVersion() { + return "0.1.0"; + } + + @Override + public String getName() { + return "DNPM Therapieplan Analyzer"; + } + + @Override + public String getDescription() { + return "Aktualisiert Unterformulare nach Änderungen im Therapieplan-Formular"; + } + + /** + * @deprecated + */ + @Override + public boolean isRelevantForDeletedProcedure() { + return false; + } + + @Override + public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { + return null != procedure && procedure.getFormName().equals("DNPM Therapieplan"); + } + + @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) { + updateMtbInSubforms(procedure); + } + + /** + * Verlinke MTB und Übernahme Datum aus Hauptformular in Unterformularen + * + * @param procedure Die Prozedur mit Hauptformular + */ + // TODO: 13.03.23 Nicht ausführen, wenn durch Einstellung verboten + // TODO: 13.03.23 Onkostar führt nach Speicherung eines Unterformulars erneut eine Speicherung des Hauptformulars aus - ggf eigene Speicher-Methode ohne Verwendung der Onkostar-API implementieren. + private void updateMtbInSubforms(Procedure procedure) { + logger.info("Run 'updateMtbInSubforms'"); + var mtbReference = procedure.getValue("referstemtb").getInt(); + var mtbDate = procedure.getValue("datum").getDate(); + + formService.getSubFormProcedureIds(procedure.getId()).stream() + .map(onkostarApi::getProcedure) + .filter(Objects::nonNull) + .forEach(subform -> { + if (subform.getFormName().equals("DNPM UF Einzelempfehlung")) { + if (mtbReference != subform.getValue("mtb").getInt() && !mtbDate.equals(subform.getValue("ufeedatum").getDate())) { + subform.setValue("mtb", new Item("ref_tumorkonferenz", mtbReference)); + subform.setValue("ufeedatum", new Item("datum", mtbDate)); + + try { + onkostarApi.saveProcedure(subform, false); + } catch (Exception e) { + logger.error("Formular 'DNPM UF Einzelempfehlung' konnte nicht aktualisiert werden", e); + } + } + } + + if (subform.getFormName().equals("DNPM UF Rebiopsie")) { + if (mtbReference != subform.getValue("reftumorkonferenz").getInt() && !mtbDate.equals(subform.getValue("ufrbdatum").getDate())) { + subform.setValue("reftumorkonferenz", new Item("ref_tumorkonferenz", mtbReference)); + subform.setValue("ufrbdatum", new Item("datum", mtbDate)); + + try { + onkostarApi.saveProcedure(subform, false); + } catch (Exception e) { + logger.error("Formular 'DNPM UF Rebiopsie' konnte nicht aktualisiert werden", e); + } + } + } + }); + } +} -- cgit v1.2.3 From 53ee3f86458721bfcb5f64b6b5e4aeb6f6456259 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Mon, 13 Mar 2023 13:28:50 +0100 Subject: Issue #7: Keine Übernahme von Daten bei entsprechend gesetzter Einstellung --- src/main/java/DNPM/forms/TherapieplanAnalyzer.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/main/java/DNPM/forms') diff --git a/src/main/java/DNPM/forms/TherapieplanAnalyzer.java b/src/main/java/DNPM/forms/TherapieplanAnalyzer.java index 7469cc7..2873004 100644 --- a/src/main/java/DNPM/forms/TherapieplanAnalyzer.java +++ b/src/main/java/DNPM/forms/TherapieplanAnalyzer.java @@ -15,7 +15,6 @@ import org.springframework.stereotype.Component; import java.util.Objects; import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; /** * Diese Klasse implementiert ein Plugin, welches Aktionen nach Bearbeitung eines Therapieplans durchführt. @@ -98,10 +97,12 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer { * * @param procedure Die Prozedur mit Hauptformular */ - // TODO: 13.03.23 Nicht ausführen, wenn durch Einstellung verboten // TODO: 13.03.23 Onkostar führt nach Speicherung eines Unterformulars erneut eine Speicherung des Hauptformulars aus - ggf eigene Speicher-Methode ohne Verwendung der Onkostar-API implementieren. private void updateMtbInSubforms(Procedure procedure) { - logger.info("Run 'updateMtbInSubforms'"); + if (onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode").equals("true")) { + return; + } + var mtbReference = procedure.getValue("referstemtb").getInt(); var mtbDate = procedure.getValue("datum").getDate(); -- cgit v1.2.3 From c3e96d18fcd477519f09465ed27f55b1d8c64517 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Tue, 14 Mar 2023 11:05:31 +0100 Subject: Issue #7: Aktualisiere MTB + Datum in Reevaluation und gen. Beratung --- src/main/java/DNPM/forms/TherapieplanAnalyzer.java | 44 +++++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) (limited to 'src/main/java/DNPM/forms') diff --git a/src/main/java/DNPM/forms/TherapieplanAnalyzer.java b/src/main/java/DNPM/forms/TherapieplanAnalyzer.java index 2873004..9fd53cc 100644 --- a/src/main/java/DNPM/forms/TherapieplanAnalyzer.java +++ b/src/main/java/DNPM/forms/TherapieplanAnalyzer.java @@ -89,17 +89,57 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer { @Override public void analyze(Procedure procedure, Disease disease) { + updateMtbInSections(procedure); updateMtbInSubforms(procedure); } + /** + * Verlinke MTB und Übernahme Datum aus Hauptformular in weiteren Bereichen + * "Humangenetische Beratung" und "Reevaluation", wenn erforderlich. + * + * @param procedure Die Prozedur mit Hauptformular + */ + private void updateMtbInSections(Procedure procedure) { + if ( + null != onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode") + && onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode").equals("true") + || + !procedure.getValue("humangenberatung").getString().equals("1") + && !procedure.getValue("reevaluation").getString().equals("1") + ) { + return; + } + + var mtbReference = procedure.getValue("referstemtb").getInt(); + var mtbDate = procedure.getValue("datum").getDate(); + + if (mtbReference != procedure.getValue("reftkhumangenber").getInt() && !mtbDate.equals(procedure.getValue("datumtkhumangenber").getDate())) { + procedure.setValue("reftkhumangenber", new Item("ref_tk_humangenber", mtbReference)); + procedure.setValue("datumtkhumangenber", new Item("datum_tk_humangenber", mtbDate)); + } + + if (mtbReference != procedure.getValue("reftkreevaluation").getInt() && !mtbDate.equals(procedure.getValue("datumtkreevaluation").getDate())) { + procedure.setValue("reftkreevaluation", new Item("ref_tk_reevaluation", mtbReference)); + procedure.setValue("datumtkreevaluation", new Item("datum_tk_reevaluation", mtbDate)); + } + + try { + onkostarApi.saveProcedure(procedure, false); + } catch (Exception e) { + logger.error("Formular 'DNPM Therapieplan' konnte nicht aktualisiert werden", e); + } + } + /** * Verlinke MTB und Übernahme Datum aus Hauptformular in Unterformularen * * @param procedure Die Prozedur mit Hauptformular */ - // TODO: 13.03.23 Onkostar führt nach Speicherung eines Unterformulars erneut eine Speicherung des Hauptformulars aus - ggf eigene Speicher-Methode ohne Verwendung der Onkostar-API implementieren. private void updateMtbInSubforms(Procedure procedure) { - if (onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode").equals("true")) { + if ( + null != onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode") + && onkostarApi.getGlobalSetting("mehrere_mtb_in_mtbepisode").equals("true") + ) { return; } -- cgit v1.2.3