From cc27edc544cec1b892e7c224aec9e6e42342aa39 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Sat, 21 Sep 2024 22:10:24 +0200 Subject: refactor: use package name following Java guidelines --- .../services/consent/ConsentManagerService.java | 27 +++++ .../consent/ConsentManagerServiceFactory.java | 28 +++++ .../services/consent/MrConsentManagerService.java | 126 +++++++++++++++++++++ .../services/consent/UkwConsentManagerService.java | 72 ++++++++++++ 4 files changed, 253 insertions(+) create mode 100644 src/main/java/dev/dnpm/services/consent/ConsentManagerService.java create mode 100644 src/main/java/dev/dnpm/services/consent/ConsentManagerServiceFactory.java create mode 100644 src/main/java/dev/dnpm/services/consent/MrConsentManagerService.java create mode 100644 src/main/java/dev/dnpm/services/consent/UkwConsentManagerService.java (limited to 'src/main/java/dev/dnpm/services/consent') diff --git a/src/main/java/dev/dnpm/services/consent/ConsentManagerService.java b/src/main/java/dev/dnpm/services/consent/ConsentManagerService.java new file mode 100644 index 0000000..abbc702 --- /dev/null +++ b/src/main/java/dev/dnpm/services/consent/ConsentManagerService.java @@ -0,0 +1,27 @@ +package dev.dnpm.services.consent; + +import de.itc.onkostar.api.Procedure; + +/** + * Schnittstelle für die Anwendung von Consent-Änderungen + * + * @since 0.2.0 + */ +public interface ConsentManagerService { + + /** + * Wende Consent an, wenn dieses Consent-Formular gespeichert wird + * @param procedure Prozedur des Consent-Formulars + */ + void applyConsent(Procedure procedure); + + /** + * Optionale Prüfung, ob die angegebene Prozedur angewendet werden kann. + * @param procedure Anzuwendende Prozedur + * @return Gibt true zurück, wenn die Prozedur angewendet werden kann. + */ + default boolean canApply(Procedure procedure) { + return null != procedure; + } + +} diff --git a/src/main/java/dev/dnpm/services/consent/ConsentManagerServiceFactory.java b/src/main/java/dev/dnpm/services/consent/ConsentManagerServiceFactory.java new file mode 100644 index 0000000..b3f9497 --- /dev/null +++ b/src/main/java/dev/dnpm/services/consent/ConsentManagerServiceFactory.java @@ -0,0 +1,28 @@ +package dev.dnpm.services.consent; + +import de.itc.onkostar.api.IOnkostarApi; + +public class ConsentManagerServiceFactory { + + private final IOnkostarApi onkostarApi; + + public ConsentManagerServiceFactory( + final IOnkostarApi onkostarApi + ) { + this.onkostarApi = onkostarApi; + } + + public ConsentManagerService currentUsableInstance() { + var consentFormName = onkostarApi.getGlobalSetting("consentform"); + + switch (consentFormName) { + case "Excel-Formular": + return new UkwConsentManagerService(this.onkostarApi); + case "MR.Consent": + return new MrConsentManagerService(this.onkostarApi); + default: + return procedure -> {}; + } + } + +} diff --git a/src/main/java/dev/dnpm/services/consent/MrConsentManagerService.java b/src/main/java/dev/dnpm/services/consent/MrConsentManagerService.java new file mode 100644 index 0000000..e4d88e2 --- /dev/null +++ b/src/main/java/dev/dnpm/services/consent/MrConsentManagerService.java @@ -0,0 +1,126 @@ +package dev.dnpm.services.consent; + +import dev.dnpm.VerweisVon; +import de.itc.onkostar.api.IOnkostarApi; +import de.itc.onkostar.api.Item; +import de.itc.onkostar.api.Procedure; +import org.hibernate.SQLQuery; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.transform.Transformers; +import org.hibernate.type.StandardBasicTypes; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.Map; + +/** + * Detailimplementierung für das Formular `MR.Consent` + * + * @since 0.2.0 + */ +public class MrConsentManagerService implements ConsentManagerService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private final IOnkostarApi onkostarApi; + + public MrConsentManagerService(final IOnkostarApi onkostarApi) { + this.onkostarApi = onkostarApi; + } + + @Override + public boolean canApply(Procedure procedure) { + return null != procedure && procedure.getFormName().equals("MR.Consent"); + } + + /** + * Wende Consent an, wenn dieses Consent-Formular gespeichert wird + * + * @param procedure Prozedur des Consent-Formulars + */ + @Override + public void applyConsent(Procedure procedure) { + int value = 0; + try { + SessionFactory sessionFactory = onkostarApi.getSessionFactory(); + Session session = sessionFactory.getCurrentSession(); + // geänderte Werte checken + String sql1 = "select id, max(timestamp) AS datum from aenderungsprotokoll where entity_id = '" + procedure.getId() + "'"; + SQLQuery query1 = session.createSQLQuery(sql1) + .addScalar("id", StandardBasicTypes.INTEGER) + .addScalar("datum", StandardBasicTypes.TIMESTAMP); + logger.info("Wert-Check: {}", query1.uniqueResult()); + + String sql = "SELECT prozedur.id AS procedure_id, prozedur.data_form_id, data_catalogue.name AS data_catalogue, data_catalogue_entry.name AS data_catalogue_entry, data_form.description AS formname, prozedur.beginndatum AS datum " + + "FROM prozedur " + + "LEFT JOIN data_form_data_catalogue ON data_form_data_catalogue.data_form_id = prozedur.data_form_id " + + "LEFT JOIN data_catalogue_entry ON data_catalogue_entry.data_catalogue_id = data_form_data_catalogue.data_catalogue_id " + + "LEFT JOIN data_catalogue ON data_catalogue.id = data_catalogue_entry.data_catalogue_id " + + "LEFT JOIN data_form ON data_form.id = prozedur.data_form_id " + + "WHERE patient_id = " + procedure.getPatientId() + " " + + "AND geloescht = 0 " + + "AND data_catalogue_entry.type = 'formReference' " + + "GROUP BY prozedur.id, prozedur.data_form_id, data_catalogue.name, data_catalogue_entry.name"; + + SQLQuery query = session.createSQLQuery(sql) + .addScalar("procedure_id", StandardBasicTypes.INTEGER) + .addScalar("data_form_id", StandardBasicTypes.INTEGER) + .addScalar("data_catalogue", StandardBasicTypes.STRING) + .addScalar("data_catalogue_entry", StandardBasicTypes.STRING) + .addScalar("formname", StandardBasicTypes.STRING) + .addScalar("datum", StandardBasicTypes.DATE); + + query.setResultTransformer(Transformers.aliasToBean(VerweisVon.class)); + + @SuppressWarnings("unchecked") + List result = query.list(); + + for (VerweisVon verweisVon : result) { + sql = verweisVon.getSQL(); + query = session.createSQLQuery(sql) + .addScalar("value", StandardBasicTypes.INTEGER); + if (query.uniqueResult() != null) { + value = (Integer) query.uniqueResult(); + } + if (value == procedure.getId()) { + saveReferencedProcedure(procedure, verweisVon); + value = 0; + } + } + } catch (RuntimeException e) { + logger.error("Sonstiger Fehler bei der Ausführung von analyze()", e); + } + } + + private void saveReferencedProcedure(Procedure prozedur, VerweisVon verweisVon) { + Procedure andereprozedur = onkostarApi.getProcedure(verweisVon.getProcedure_id()); + try { + Map felder = prozedur.getAllValues(); + for (Map.Entry feld : felder.entrySet()) { + if (feld.getKey().startsWith("Consent")) { + if (feld.getKey().equals("ConsentStatusEinwilligungDNPM")) { + switch (feld.getValue().getValue().toString()) { + case "z": + andereprozedur.setValue(feld.getKey(), new Item(feld.getKey(), "active")); + break; + case "a": + case "w": + andereprozedur.setValue(feld.getKey(), new Item(feld.getKey(), "rejected")); + break; + default: + break; + } + } else { + andereprozedur.setValue(feld.getKey(), prozedur.getValue(feld.getKey())); + } + } + } + onkostarApi.saveProcedure(andereprozedur); + } catch (Exception e) { + logger.error("Kann Prozedur nicht speichern", e); + } + } + +} diff --git a/src/main/java/dev/dnpm/services/consent/UkwConsentManagerService.java b/src/main/java/dev/dnpm/services/consent/UkwConsentManagerService.java new file mode 100644 index 0000000..d6697d6 --- /dev/null +++ b/src/main/java/dev/dnpm/services/consent/UkwConsentManagerService.java @@ -0,0 +1,72 @@ +package dev.dnpm.services.consent; + +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.Comparator; + +/** + * Detailimplementierung für das Formular `Excel-Formular` + * + * @since 0.2.0 + */ +public class UkwConsentManagerService implements ConsentManagerService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private final IOnkostarApi onkostarApi; + + public UkwConsentManagerService(final IOnkostarApi onkostarApi) { + this.onkostarApi = onkostarApi; + } + + @Override + public boolean canApply(Procedure procedure) { + return null != procedure && procedure.getFormName().equals("Excel-Formular"); + } + + /** + * Wende Consent an, wenn dieses Consent-Formular gespeichert wird + * + * @param procedure Prozedur des Consent-Formulars + */ + @Override + public void applyConsent(Procedure procedure) { + var refdnpmklinikanamnese = procedure.getValue("refdnpmklinikanamnese").getInt(); + var dnpmKlinikAnamnese = this.onkostarApi.getProcedure(refdnpmklinikanamnese); + + if (null == dnpmKlinikAnamnese) { + return; + } + + var consents = procedure.getSubProceduresMap().get("ufdnpmconsent"); + + if (null == consents) { + return; + } + + consents.stream() + .max(Comparator.comparing(Procedure::getStartDate)) + .ifPresent(lastConsent -> { + var date = lastConsent.getStartDate(); + var status = lastConsent.getValue("status"); + if (null == date || null == status || status.getString().isBlank()) { + logger.warn("Kein DNPM-Einwilligungstatus angegeben"); + return; + } + + dnpmKlinikAnamnese.setValue("ConsentStatusEinwilligungDNPM", new Item("Einwilligung", status.getString())); + dnpmKlinikAnamnese.setValue("ConsentDatumEinwilligungDNPM", new Item("DatumEinwilligung", date)); + + try { + onkostarApi.saveProcedure(dnpmKlinikAnamnese, false); + } catch (Exception e) { + logger.error("Kann DNPM-Einwilligungstatus nicht aktualisieren", e); + } + }); + } + +} -- cgit v1.2.3