summaryrefslogtreecommitdiff
path: root/src/main/java/DNPM/services/therapieplan/DefaultTherapieplanService.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/DNPM/services/therapieplan/DefaultTherapieplanService.java')
-rw-r--r--src/main/java/DNPM/services/therapieplan/DefaultTherapieplanService.java202
1 files changed, 202 insertions, 0 deletions
diff --git a/src/main/java/DNPM/services/therapieplan/DefaultTherapieplanService.java b/src/main/java/DNPM/services/therapieplan/DefaultTherapieplanService.java
new file mode 100644
index 0000000..8fe3780
--- /dev/null
+++ b/src/main/java/DNPM/services/therapieplan/DefaultTherapieplanService.java
@@ -0,0 +1,202 @@
+/*
+ * MIT License
+ *
+ * 2023 Comprehensive Cancer Center Mainfranken
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package DNPM.services.therapieplan;
+
+import DNPM.services.FormService;
+import de.itc.onkostar.api.IOnkostarApi;
+import de.itc.onkostar.api.Item;
+import de.itc.onkostar.api.Procedure;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+import java.util.Objects;
+
+import static DNPM.services.FormService.hasValue;
+import static DNPM.services.FormService.isYes;
+
+public class DefaultTherapieplanService implements TherapieplanService {
+
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ private final IOnkostarApi onkostarApi;
+
+ private final FormService formService;
+
+ public DefaultTherapieplanService(final IOnkostarApi onkostarApi, final FormService formService) {
+ this.onkostarApi = onkostarApi;
+ this.formService = formService;
+ }
+
+ /**
+ * Verlinke MTB und Übernahme Datum aus Hauptformular in weiteren Bereichen
+ * "Humangenetische Beratung" und "Reevaluation" und Unterformularen, wenn erforderlich.
+ *
+ * @param procedure Die Prozedur mit Hauptformular
+ */
+ @Override
+ public void updateRequiredMtbEntries(Procedure procedure) {
+ this.updateMtbInSections(procedure);
+ this.updateMtbInSubforms(procedure);
+ }
+
+ /**
+ * Finde verlinkte MTBs in Hauptformular und Unterformularen
+ *
+ * @param procedure Die Prozedur mit Hauptformular
+ * @return Liste mit verlinkten MTBs
+ */
+ @Override
+ public List<Procedure> findReferencedMtbs(Procedure procedure) {
+ if (!hasValue(procedure, "referstemtb")) {
+ return List.of();
+ }
+
+ var mtbProcedure = this.onkostarApi.getProcedure(procedure.getValue("referstemtb").getInt());
+ if (null == mtbProcedure) {
+ return List.of();
+ }
+ return List.of(mtbProcedure);
+ }
+
+ /**
+ * Finde verlinkte MTBs in Hauptformular und Unterformularen
+ *
+ * @param procedureId ID der Prozedur mit Hauptformular
+ * @return Liste mit verlinkten MTBs
+ */
+ @Override
+ public List<Procedure> findReferencedMtbs(int procedureId) {
+ var procedure = this.onkostarApi.getProcedure(procedureId);
+ if (null == procedure) {
+ return List.of();
+ }
+ return findReferencedMtbs(procedure);
+ }
+
+ private void updateMtbInSections(Procedure procedure) {
+ if (!isYes(procedure, "humangenberatung") && !isYes(procedure, "reevaluation")) {
+ return;
+ }
+
+ var mtbReference = procedure.getValue("referstemtb").getInt();
+ var mtbDate = procedure.getValue("datum").getDate();
+ var noUpdateRequired = true;
+
+ if (
+ isYes(procedure, "humangenberatung") && (
+ !hasValue(procedure, "reftkhumangenber")
+ || mtbReference != procedure.getValue("reftkhumangenber").getInt()
+ )
+ ) {
+ procedure.setValue("reftkhumangenber", new Item("ref_tk_humangenber", mtbReference));
+ noUpdateRequired = false;
+ }
+
+ if (
+ isYes(procedure, "humangenberatung") && (
+ !hasValue(procedure, "datumtkhumangenber")
+ || !mtbDate.equals(procedure.getValue("datumtkhumangenber").getDate())
+ )
+ ) {
+ procedure.setValue("datumtkhumangenber", new Item("datum_tk_humangenber", mtbDate));
+ noUpdateRequired = false;
+ }
+
+ if (
+ isYes(procedure, "reevaluation") && (
+ !hasValue(procedure, "reftkreevaluation")
+ || mtbReference != procedure.getValue("reftkreevaluation").getInt()
+ )
+ ) {
+ procedure.setValue("reftkreevaluation", new Item("ref_tk_reevaluation", mtbReference));
+ noUpdateRequired = false;
+ }
+
+ if (
+ isYes(procedure, "reevaluation") && (
+ !hasValue(procedure, "datumtkreevaluation")
+ || !mtbDate.equals(procedure.getValue("datumtkreevaluation").getDate())
+ )
+ ) {
+ procedure.setValue("datumtkreevaluation", new Item("datum_tk_reevaluation", mtbDate));
+ noUpdateRequired = false;
+ }
+
+ if (noUpdateRequired) {
+ return;
+ }
+
+ try {
+ onkostarApi.saveProcedure(procedure, false);
+ } catch (Exception e) {
+ logger.error("Formular 'DNPM Therapieplan' konnte nicht aktualisiert werden", e);
+ }
+ }
+
+ private void updateMtbInSubforms(Procedure procedure) {
+ if (
+ !hasValue(procedure, "referstemtb") || !hasValue(procedure, "datum")
+ ) {
+ return;
+ }
+
+ 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);
+ }
+ }
+ }
+ });
+ }
+
+
+}