diff options
| author | Paul-Christian Volkmer | 2026-09-03 14:35:10 +0200 |
|---|---|---|
| committer | GitHub | 2026-09-03 14:35:10 +0200 |
| commit | fb91356b7777dfa5b6088bcc3a48b43924c1c0fd (patch) | |
| tree | a3d384390e388395953865a286f15292aaa04a86 /src/main/java/dev/dnpm/oshelper/analyzer | |
| parent | 59daf77a63bd17bb14248cf9881046dd6b331e2a (diff) | |
build: apply Spotless plugin (#293)
Diffstat (limited to 'src/main/java/dev/dnpm/oshelper/analyzer')
12 files changed, 898 insertions, 878 deletions
diff --git a/src/main/java/dev/dnpm/oshelper/analyzer/Analyzer.java b/src/main/java/dev/dnpm/oshelper/analyzer/Analyzer.java index 2704047..e028e1e 100644 --- a/src/main/java/dev/dnpm/oshelper/analyzer/Analyzer.java +++ b/src/main/java/dev/dnpm/oshelper/analyzer/Analyzer.java @@ -23,9 +23,8 @@ import de.itc.onkostar.api.analysis.OnkostarPluginType; public abstract class Analyzer implements IPluginPart { - @Override - public final OnkostarPluginType getType() { - return OnkostarPluginType.ANALYZER; - } - + @Override + public final OnkostarPluginType getType() { + return OnkostarPluginType.ANALYZER; + } } diff --git a/src/main/java/dev/dnpm/oshelper/analyzer/AnalyzerUtils.java b/src/main/java/dev/dnpm/oshelper/analyzer/AnalyzerUtils.java index 489be33..c414fd6 100644 --- a/src/main/java/dev/dnpm/oshelper/analyzer/AnalyzerUtils.java +++ b/src/main/java/dev/dnpm/oshelper/analyzer/AnalyzerUtils.java @@ -29,136 +29,143 @@ import java.util.Optional; */ public class AnalyzerUtils { - private AnalyzerUtils() {} - - /** - * Prüft, ob in InputMap einen Eintrag mit key <code>key</code> und Typ <code>type</code> - * gefunden wurde. - * - * @param input InputMap - * @param key Key des Werts - * @param type Typ des Werts - * @return <code>true</code>>, wenn ein Wert von dem Typ gefunden wurde - */ - public static boolean requiredValuePresent(final Map<String, Object> input, final String key, final Class<?> type) { - var value = input.get(key); - - if (null == value) { - return false; - } - - return type.isInstance(value); + private AnalyzerUtils() {} + + /** + * Prüft, ob in InputMap einen Eintrag mit key <code>key</code> und Typ <code>type</code> gefunden + * wurde. + * + * @param input InputMap + * @param key Key des Werts + * @param type Typ des Werts + * @return <code>true</code>>, wenn ein Wert von dem Typ gefunden wurde + */ + public static boolean requiredValuePresent( + final Map<String, Object> input, final String key, final Class<?> type) { + var value = input.get(key); + + if (null == value) { + return false; } - /** - * Übergibt ein Optional mit Wert, wenn in InputMap ein Eintrag mit key <code>key</code> und Typ <code>type</code> - * gefunden wurde. Anderenfalls ein leeres Optional - * - * <p><b>Beispiel</b> - * <pre> - * var id = AnalyzerUtils.getRequiredValue(input, "id", Integer.class); - * if (id.isEmpty()) { - * logger.error("Keine ID angegeben!"); - * return false; - * } - * - * var idNummer = id.get(); - * ... - * </pre> - * - * @param input InputMap - * @param key Key des Werts - * @param type Typ des Werts - * @return Optional mit entsprechendem Wert oder leeres Optional - */ - public static <T> Optional<T> getRequiredValue(final Map<String, Object> input, final String key, final Class<T> type) { - if (! requiredValuePresent(input, key, type)) { - return Optional.empty(); - } - - @SuppressWarnings("unchecked") - var result = Optional.of((T)input.get(key)); - - return result; + return type.isInstance(value); + } + + /** + * Übergibt ein Optional mit Wert, wenn in InputMap ein Eintrag mit key <code>key</code> und Typ + * <code>type</code> gefunden wurde. Anderenfalls ein leeres Optional + * + * <p><b>Beispiel</b> + * + * <pre> + * var id = AnalyzerUtils.getRequiredValue(input, "id", Integer.class); + * if (id.isEmpty()) { + * logger.error("Keine ID angegeben!"); + * return false; + * } + * + * var idNummer = id.get(); + * ... + * </pre> + * + * @param input InputMap + * @param key Key des Werts + * @param type Typ des Werts + * @return Optional mit entsprechendem Wert oder leeres Optional + */ + public static <T> Optional<T> getRequiredValue( + final Map<String, Object> input, final String key, final Class<T> type) { + if (!requiredValuePresent(input, key, type)) { + return Optional.empty(); } - /** - * Prüft, ob ein Wert in der InputMap als Zeichenkette dem angegebenen RegExp entspricht - * - * @param input InputMap - * @param key Key des Werts - * @param regexp Der zu prüfende reguläre Ausdruck - * @return <code>true</code>>, wenn ein Wert gefunden wurde, der dem RegExp entspricht - */ - public static boolean requiredValueMatches(final Map<String, Object> input, final String key, final String regexp) { - var value = input.get(key); - - if (null == value) { - return false; - } - - return value.toString().matches(regexp); + @SuppressWarnings("unchecked") + var result = Optional.of((T) input.get(key)); + + return result; + } + + /** + * Prüft, ob ein Wert in der InputMap als Zeichenkette dem angegebenen RegExp entspricht + * + * @param input InputMap + * @param key Key des Werts + * @param regexp Der zu prüfende reguläre Ausdruck + * @return <code>true</code>>, wenn ein Wert gefunden wurde, der dem RegExp entspricht + */ + public static boolean requiredValueMatches( + final Map<String, Object> input, final String key, final String regexp) { + var value = input.get(key); + + if (null == value) { + return false; } - /** - * Übergibt ein Optional mit dem Wert als Zeichenkette, wenn er dem angegebenen RegExp entspricht. - * Hierzu wird die Methode <code>toString()</code> auf den Wert angewendet. - * - * @param input InputMap - * @param key Key des Werts - * @param regexp Der zu prüfende reguläre Ausdruck - * @return Optional mit entsprechendem Wert als Zeichenkette oder leeres Optional - */ - public static Optional<String> getRequiredValueMatching(final Map<String, Object> input, final String key, final String regexp) { - if (! requiredValueMatches(input, key, regexp)) { - return Optional.empty(); - } - - return Optional.of(input.get(key).toString()); + return value.toString().matches(regexp); + } + + /** + * Übergibt ein Optional mit dem Wert als Zeichenkette, wenn er dem angegebenen RegExp entspricht. + * Hierzu wird die Methode <code>toString()</code> auf den Wert angewendet. + * + * @param input InputMap + * @param key Key des Werts + * @param regexp Der zu prüfende reguläre Ausdruck + * @return Optional mit entsprechendem Wert als Zeichenkette oder leeres Optional + */ + public static Optional<String> getRequiredValueMatching( + final Map<String, Object> input, final String key, final String regexp) { + if (!requiredValueMatches(input, key, regexp)) { + return Optional.empty(); } - /** - * Prüft, ob ein Wert in der InputMap eine ID ist und damit eine Zahl größer Null ist. - * - * @param input InputMap - * @param key Key des Werts - * @return <code>true</code>>, wenn ein Wert gefunden wurde, der dem RegExp entspricht - */ - public static boolean requiredValueIsId(final Map<String, Object> input, final String key) { - return requiredValuePresent(input, key, Integer.class) && Integer.parseInt(input.get(key).toString()) > 0; + return Optional.of(input.get(key).toString()); + } + + /** + * Prüft, ob ein Wert in der InputMap eine ID ist und damit eine Zahl größer Null ist. + * + * @param input InputMap + * @param key Key des Werts + * @return <code>true</code>>, wenn ein Wert gefunden wurde, der dem RegExp entspricht + */ + public static boolean requiredValueIsId(final Map<String, Object> input, final String key) { + return requiredValuePresent(input, key, Integer.class) + && Integer.parseInt(input.get(key).toString()) > 0; + } + + /** + * Übergibt ein Optional, wenn der Wert eine ID ist und damit eine Zahl größer Null ist. + * + * <p><b>Beispiel</b> + * + * <pre> + * var id = AnalyzerUtils.getRequiredId(input, "id"); + * if (id.isEmpty()) { + * logger.error("Keine gültige ID angegeben!"); + * return false; + * } + * + * // Ist hier immer größer als Null + * var idNummer = id.get(); + * ... + * </pre> + * + * @param input InputMap + * @param key Key des Werts + * @return Optional mit entsprechendem Wert oder leeres Optional + */ + public static Optional<Integer> getRequiredId(final Map<String, Object> input, final String key) { + if (!requiredValuePresent(input, key, Integer.class)) { + return Optional.empty(); } - /** - * Übergibt ein Optional, wenn der Wert eine ID ist und damit eine Zahl größer Null ist. - * <p><b>Beispiel</b> - * <pre> - * var id = AnalyzerUtils.getRequiredId(input, "id"); - * if (id.isEmpty()) { - * logger.error("Keine gültige ID angegeben!"); - * return false; - * } - * - * // Ist hier immer größer als Null - * var idNummer = id.get(); - * ... - * </pre> - * - * @param input InputMap - * @param key Key des Werts - * @return Optional mit entsprechendem Wert oder leeres Optional - */ - public static Optional<Integer> getRequiredId(final Map<String, Object> input, final String key) { - if (! requiredValuePresent(input, key, Integer.class)) { - return Optional.empty(); - } - - var id = (int)input.get(key); - - if (id > 0) { - return Optional.of(id); - } - - return Optional.empty(); + var id = (int) input.get(key); + + if (id > 0) { + return Optional.of(id); } + return Optional.empty(); + } } diff --git a/src/main/java/dev/dnpm/oshelper/analyzer/AtcCodesHelper.java b/src/main/java/dev/dnpm/oshelper/analyzer/AtcCodesHelper.java index 4ac4b79..0d2a378 100644 --- a/src/main/java/dev/dnpm/oshelper/analyzer/AtcCodesHelper.java +++ b/src/main/java/dev/dnpm/oshelper/analyzer/AtcCodesHelper.java @@ -24,76 +24,74 @@ import de.itc.onkostar.api.Procedure; import de.itc.onkostar.api.analysis.AnalyzerRequirement; import dev.dnpm.oshelper.atc.AgentCode; import dev.dnpm.oshelper.atc.services.AgentCodeService; -import org.springframework.stereotype.Component; - import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import org.springframework.stereotype.Component; @Component public class AtcCodesHelper extends BackendService { - private final List<AgentCodeService> agentCodeServices; + private final List<AgentCodeService> agentCodeServices; - public AtcCodesHelper(List<AgentCodeService> agentCodeServices) { - this.agentCodeServices = agentCodeServices; - } + public AtcCodesHelper(List<AgentCodeService> agentCodeServices) { + this.agentCodeServices = agentCodeServices; + } - /** - * @deprecated - */ - @Override - public boolean isRelevantForDeletedProcedure() { - return false; - } + /** + * @deprecated + */ + @Override + public boolean isRelevantForDeletedProcedure() { + return false; + } - @Override - public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { - return false; - } + @Override + public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { + return false; + } - @Override - public boolean isSynchronous() { - return false; - } + @Override + public boolean isSynchronous() { + return false; + } - @Override - public AnalyzerRequirement getRequirement() { - return AnalyzerRequirement.PROCEDURE; - } + @Override + public AnalyzerRequirement getRequirement() { + return AnalyzerRequirement.PROCEDURE; + } - /** - * Return list with ATC codes and agents. - * Usage in script: - * - * <pre> - * executePluginMethod( - * 'AtcCodesHelper', - * 'query', - * { q: '', size: 10 }, - * function (result) {console.log(result);}, - * false - * ); - * </pre> - * - * @param input The data Map - * @return The result list filtered by input - */ - public List<AgentCode> query(final Map<String, Object> input) { - String query = ""; - if (null != input.get("q")) { - query = input.get("q").toString(); - } + /** + * Return list with ATC codes and agents. Usage in script: + * + * <pre> + * executePluginMethod( + * 'AtcCodesHelper', + * 'query', + * { q: '', size: 10 }, + * function (result) {console.log(result);}, + * false + * ); + * </pre> + * + * @param input The data Map + * @return The result list filtered by input + */ + public List<AgentCode> query(final Map<String, Object> input) { + String query = ""; + if (null != input.get("q")) { + query = input.get("q").toString(); + } - int size = Integer.parseInt(input.get("size").toString()); - if (size == 0) { - size = 10; - } - var result = new ArrayList<AgentCode>(); - for (var agentCodeService : this.agentCodeServices) { - result.addAll(agentCodeService.findAgentCodes(query, size)); - } - return result.stream().distinct().sorted().collect(Collectors.toList()); + int size = Integer.parseInt(input.get("size").toString()); + if (size == 0) { + size = 10; + } + var result = new ArrayList<AgentCode>(); + for (var agentCodeService : this.agentCodeServices) { + result.addAll(agentCodeService.findAgentCodes(query, size)); } + return result.stream().distinct().sorted().collect(Collectors.toList()); + } } diff --git a/src/main/java/dev/dnpm/oshelper/analyzer/BackendService.java b/src/main/java/dev/dnpm/oshelper/analyzer/BackendService.java index 8ec61f8..e249291 100644 --- a/src/main/java/dev/dnpm/oshelper/analyzer/BackendService.java +++ b/src/main/java/dev/dnpm/oshelper/analyzer/BackendService.java @@ -25,20 +25,20 @@ import de.itc.onkostar.api.analysis.OnkostarPluginType; public abstract class BackendService implements IPluginPart { - @Override - public final OnkostarPluginType getType() { - return OnkostarPluginType.BACKEND_SERVICE; - } - - /** - * Ein Backend-Service verwendet die Methode nicht, daher wird hier eine final Stub-Implementierung - * verwendet, die ein Überschreiben verhindert. - * @param procedure - * @param disease - */ - @Override - public final void analyze(Procedure procedure, Disease disease) { - // No op - } + @Override + public final OnkostarPluginType getType() { + return OnkostarPluginType.BACKEND_SERVICE; + } + /** + * Ein Backend-Service verwendet die Methode nicht, daher wird hier eine final + * Stub-Implementierung verwendet, die ein Überschreiben verhindert. + * + * @param procedure + * @param disease + */ + @Override + public final void analyze(Procedure procedure, Disease disease) { + // No op + } } diff --git a/src/main/java/dev/dnpm/oshelper/analyzer/ConsentManager.java b/src/main/java/dev/dnpm/oshelper/analyzer/ConsentManager.java index e13327b..924e726 100644 --- a/src/main/java/dev/dnpm/oshelper/analyzer/ConsentManager.java +++ b/src/main/java/dev/dnpm/oshelper/analyzer/ConsentManager.java @@ -19,64 +19,64 @@ package dev.dnpm.oshelper.analyzer; -import dev.dnpm.oshelper.services.consent.ConsentManagerServiceFactory; import de.itc.onkostar.api.Disease; import de.itc.onkostar.api.IOnkostarApi; import de.itc.onkostar.api.Procedure; import de.itc.onkostar.api.analysis.AnalyzerRequirement; +import dev.dnpm.oshelper.services.consent.ConsentManagerServiceFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ConsentManager extends Analyzer { - private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private final Logger logger = LoggerFactory.getLogger(this.getClass()); - private final IOnkostarApi onkostarApi; + private final IOnkostarApi onkostarApi; - private final ConsentManagerServiceFactory consentManagerServiceFactory; + private final ConsentManagerServiceFactory consentManagerServiceFactory; - public ConsentManager( - final IOnkostarApi onkostarApi, - final ConsentManagerServiceFactory consentManagerServiceFactory - ) { - this.onkostarApi = onkostarApi; - this.consentManagerServiceFactory = consentManagerServiceFactory; - } + public ConsentManager( + final IOnkostarApi onkostarApi, + final ConsentManagerServiceFactory consentManagerServiceFactory) { + this.onkostarApi = onkostarApi; + this.consentManagerServiceFactory = consentManagerServiceFactory; + } - @Override - public String getDescription() { - return "Aktualisiert Consent Daten in verknüpften Formularen"; - } + @Override + public String getDescription() { + return "Aktualisiert Consent Daten in verknüpften Formularen"; + } - @Override - public AnalyzerRequirement getRequirement() { - return AnalyzerRequirement.PROCEDURE; - } + @Override + public AnalyzerRequirement getRequirement() { + return AnalyzerRequirement.PROCEDURE; + } - @Override - public boolean isRelevantForAnalyzer(Procedure prozedur, Disease erkrankung) { - return prozedur.getFormName().equals(onkostarApi.getGlobalSetting("consentform")); - } + @Override + public boolean isRelevantForAnalyzer(Procedure prozedur, Disease erkrankung) { + return prozedur.getFormName().equals(onkostarApi.getGlobalSetting("consentform")); + } - @Override - public boolean isRelevantForDeletedProcedure() { - // TODO is relevant for deleted procedure = true - return false; - } + @Override + public boolean isRelevantForDeletedProcedure() { + // TODO is relevant for deleted procedure = true + return false; + } - @Override - public boolean isSynchronous() { - return true; - } + @Override + public boolean isSynchronous() { + return true; + } - @Override - public void analyze(Procedure prozedur, Disease erkrankung) { - var consentManagerService = consentManagerServiceFactory.currentUsableInstance(); - if (! consentManagerService.canApply(prozedur)) { - logger.error("Fehler im ConsentManagement: Kann Prozedur mit Formularnamen '{}' nicht anwenden", prozedur.getFormName()); - return; - } - consentManagerService.applyConsent(prozedur); + @Override + public void analyze(Procedure prozedur, Disease erkrankung) { + var consentManagerService = consentManagerServiceFactory.currentUsableInstance(); + if (!consentManagerService.canApply(prozedur)) { + logger.error( + "Fehler im ConsentManagement: Kann Prozedur mit Formularnamen '{}' nicht anwenden", + prozedur.getFormName()); + return; } - + consentManagerService.applyConsent(prozedur); + } } diff --git a/src/main/java/dev/dnpm/oshelper/analyzer/DNPMHelper.java b/src/main/java/dev/dnpm/oshelper/analyzer/DNPMHelper.java index 2559e3d..f779154 100644 --- a/src/main/java/dev/dnpm/oshelper/analyzer/DNPMHelper.java +++ b/src/main/java/dev/dnpm/oshelper/analyzer/DNPMHelper.java @@ -19,18 +19,22 @@ package dev.dnpm.oshelper.analyzer; -import dev.dnpm.oshelper.dto.EcogStatusWithDate; -import dev.dnpm.oshelper.VerweisVon; -import dev.dnpm.oshelper.security.DelegatingDataBasedPermissionEvaluator; -import dev.dnpm.oshelper.security.IllegalSecuredObjectAccessException; -import dev.dnpm.oshelper.security.PermissionType; -import dev.dnpm.oshelper.services.systemtherapie.SystemtherapieService; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import de.itc.onkostar.api.Disease; import de.itc.onkostar.api.IOnkostarApi; import de.itc.onkostar.api.Procedure; import de.itc.onkostar.api.analysis.AnalyzerRequirement; +import dev.dnpm.oshelper.VerweisVon; +import dev.dnpm.oshelper.dto.EcogStatusWithDate; +import dev.dnpm.oshelper.security.DelegatingDataBasedPermissionEvaluator; +import dev.dnpm.oshelper.security.IllegalSecuredObjectAccessException; +import dev.dnpm.oshelper.security.PermissionType; +import dev.dnpm.oshelper.services.systemtherapie.SystemtherapieService; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.SessionFactory; @@ -40,240 +44,252 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.core.context.SecurityContextHolder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - public class DNPMHelper extends BackendService { - private static final Logger logger = LoggerFactory.getLogger(DNPMHelper.class); + private static final Logger logger = LoggerFactory.getLogger(DNPMHelper.class); - private final IOnkostarApi onkostarApi; + private final IOnkostarApi onkostarApi; - private final SystemtherapieService systemtherapieService; + private final SystemtherapieService systemtherapieService; - private final DelegatingDataBasedPermissionEvaluator delegatingDataBasedPermissionEvaluator; + private final DelegatingDataBasedPermissionEvaluator delegatingDataBasedPermissionEvaluator; - public DNPMHelper( - final IOnkostarApi onkostarApi, - final SystemtherapieService systemtherapieService, - final DelegatingDataBasedPermissionEvaluator permissionEvaluator - ) { - this.onkostarApi = onkostarApi; - this.systemtherapieService = systemtherapieService; - this.delegatingDataBasedPermissionEvaluator = permissionEvaluator; - } + public DNPMHelper( + final IOnkostarApi onkostarApi, + final SystemtherapieService systemtherapieService, + final DelegatingDataBasedPermissionEvaluator permissionEvaluator) { + this.onkostarApi = onkostarApi; + this.systemtherapieService = systemtherapieService; + this.delegatingDataBasedPermissionEvaluator = permissionEvaluator; + } - @Override - public String getDescription() { - return "Methoden für DNPM-Formulare"; - } + @Override + public String getDescription() { + return "Methoden für DNPM-Formulare"; + } - @Override - public boolean isRelevantForDeletedProcedure() { - return false; - } + @Override + public boolean isRelevantForDeletedProcedure() { + return false; + } - @Override - public boolean isSynchronous() { - return true; - } + @Override + public boolean isSynchronous() { + return true; + } - @Override - public AnalyzerRequirement getRequirement() { - return AnalyzerRequirement.PROCEDURE; - } + @Override + public AnalyzerRequirement getRequirement() { + return AnalyzerRequirement.PROCEDURE; + } - @Override - public boolean isRelevantForAnalyzer(Procedure entry, Disease currentDisease) { - // Plugin enthält nur Methoden für Formulare und soll nicht ausgeführt werden - return false; - } + @Override + public boolean isRelevantForAnalyzer(Procedure entry, Disease currentDisease) { + // Plugin enthält nur Methoden für Formulare und soll nicht ausgeführt werden + return false; + } - @SuppressWarnings("unchecked") - public List<Map<String, String>> getVerweise(final Map<String, Object> input) { - var procedureId = AnalyzerUtils.getRequiredId(input, "ProcedureId"); - var patientId = AnalyzerUtils.getRequiredId(input, "PatientId"); + @SuppressWarnings("unchecked") + public List<Map<String, String>> getVerweise(final Map<String, Object> input) { + var procedureId = AnalyzerUtils.getRequiredId(input, "ProcedureId"); + var patientId = AnalyzerUtils.getRequiredId(input, "PatientId"); - if (procedureId.isEmpty() || patientId.isEmpty()) { - return null; - } - - var verbundeneFormulare = new ArrayList<Map<String, String>>(); - - try { - SessionFactory sessionFactory = onkostarApi.getSessionFactory(); - Session session = sessionFactory.getCurrentSession(); - - 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 = " + patientId.get() + " " + - "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)); - List<VerweisVon> result = query.list(); - try { - int value = 0; - 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 == procedureId.get()) { - verbundeneFormulare.add(Map.of("formular", verweisVon.getVerbundenesFormular())); - value = 0; - } - } - } catch (Exception e) { - logger.warn("Fehler beim Hinzufügen eines Formularverweises", e); - } - } catch (Exception e) { - logger.error("Fehler beim Ermitteln der Formularverweise", e); - return null; - } - return verbundeneFormulare; + if (procedureId.isEmpty() || patientId.isEmpty()) { + return null; } - public List<Map<String, String>> getSystemischeTherapienFromDiagnose(final Map<String, Object> input) { - var diagnoseId = AnalyzerUtils.getRequiredId(input, "DiagnoseId"); - if (diagnoseId.isEmpty()) { - logger.error("Kein Parameter 'DiagnoseId' angegeben, gebe 'null' zurück"); - return null; + var verbundeneFormulare = new ArrayList<Map<String, String>>(); + + try { + SessionFactory sessionFactory = onkostarApi.getSessionFactory(); + Session session = sessionFactory.getCurrentSession(); + + 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 = " + + patientId.get() + + " " + + "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)); + List<VerweisVon> result = query.list(); + try { + int value = 0; + 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 == procedureId.get()) { + verbundeneFormulare.add(Map.of("formular", verweisVon.getVerbundenesFormular())); + value = 0; + } } - - return systemtherapieService.getSystemischeTherapienFromDiagnose(diagnoseId.get()); + } catch (Exception e) { + logger.warn("Fehler beim Hinzufügen eines Formularverweises", e); + } + } catch (Exception e) { + logger.error("Fehler beim Ermitteln der Formularverweise", e); + return null; + } + return verbundeneFormulare; + } + + public List<Map<String, String>> getSystemischeTherapienFromDiagnose( + final Map<String, Object> input) { + var diagnoseId = AnalyzerUtils.getRequiredId(input, "DiagnoseId"); + if (diagnoseId.isEmpty()) { + logger.error("Kein Parameter 'DiagnoseId' angegeben, gebe 'null' zurück"); + return null; } - public String getProzedurenFromDiagnose(final Map<String, Object> input) { - // Prozedur, Feldname, Wert - var dataForm = AnalyzerUtils.getRequiredValue(input, "dataForm", String.class); - var diagnoseId = AnalyzerUtils.getRequiredId(input, "DiagnoseId"); - var patientId = AnalyzerUtils.getRequiredId(input, "PatientId"); + return systemtherapieService.getSystemischeTherapienFromDiagnose(diagnoseId.get()); + } - if (dataForm.isEmpty() || diagnoseId.isEmpty() || patientId.isEmpty()) { - return ""; - } + public String getProzedurenFromDiagnose(final Map<String, Object> input) { + // Prozedur, Feldname, Wert + var dataForm = AnalyzerUtils.getRequiredValue(input, "dataForm", String.class); + var diagnoseId = AnalyzerUtils.getRequiredId(input, "DiagnoseId"); + var patientId = AnalyzerUtils.getRequiredId(input, "PatientId"); - var formulare = new ArrayList<Map<String, Object>>(); - List<Procedure> prozeduren = onkostarApi.getProceduresByPatientId(patientId.get()); - for (Procedure Prozedur : prozeduren) { - // Formular gehört zur aktuellen Diagnose und hat den angegebenen Namen - if (Prozedur.getDiseaseIds().contains(diagnoseId.get()) && Prozedur.getFormName().contains(dataForm.get())) { - // alle Werte auslesen - // System.out.println(WerteListe.getKey() + ": " + WerteListe.getValue()); - formulare.add(Map.of( - "Formular", Prozedur.getFormName(), - "Felder", new HashMap<>(Prozedur.getAllValues()) - )); - } - } - try { - ObjectMapper objectMapper = new ObjectMapper(); - return objectMapper.writeValueAsString(formulare); - } catch (JsonProcessingException e) { - logger.error("Kann Formulare nicht in JSON mappen", e); - } - return ""; + if (dataForm.isEmpty() || diagnoseId.isEmpty() || patientId.isEmpty()) { + return ""; } - public Object getEmpfehlung(final Map<String, Object> input) { - var procedureID = AnalyzerUtils.getRequiredId(input, "ProcedureID"); - - if (procedureID.isEmpty()) { - logger.error("Kein Parameter 'ProcedureID' angegeben, gebe 'null' zurück"); - return null; - } - - try { - SessionFactory sessionFactory = onkostarApi.getSessionFactory(); - Session session = sessionFactory.getCurrentSession(); - var sql = "SELECT prozedur.id, genname, geneid, geneidlink, empfehlung, beginndatum FROM prozedur " - + "LEFT JOIN dk_mtb_einzelempfehlung em ON em.id = prozedur.id " - + "JOIN data_form df ON prozedur.data_form_id = df.id AND df.name = 'MR.MTB_Einzelempfehlung' " - + "WHERE prozedur.hauptprozedur_id = " + procedureID.get() + " AND prozedur.geloescht = 0 " - + "ORDER BY beginndatum"; - - SQLQuery query = session.createSQLQuery(sql) - .addScalar("id", StandardBasicTypes.STRING) - .addScalar("genname", StandardBasicTypes.STRING) - .addScalar("geneid", StandardBasicTypes.STRING) - .addScalar("geneidlink", StandardBasicTypes.STRING) - .addScalar("empfehlung", StandardBasicTypes.STRING) - .addScalar("beginndatum", StandardBasicTypes.STRING); - - @SuppressWarnings("unchecked") - List<String[]> rows = query.list(); - return rows; - } catch (Exception e) { - logger.error("Fehler bei Abfrage von Empfehlungen", e); - return null; - } + var formulare = new ArrayList<Map<String, Object>>(); + List<Procedure> prozeduren = onkostarApi.getProceduresByPatientId(patientId.get()); + for (Procedure Prozedur : prozeduren) { + // Formular gehört zur aktuellen Diagnose und hat den angegebenen Namen + if (Prozedur.getDiseaseIds().contains(diagnoseId.get()) + && Prozedur.getFormName().contains(dataForm.get())) { + // alle Werte auslesen + // System.out.println(WerteListe.getKey() + ": " + WerteListe.getValue()); + formulare.add( + Map.of( + "Formular", + Prozedur.getFormName(), + "Felder", + new HashMap<>(Prozedur.getAllValues()))); + } + } + try { + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.writeValueAsString(formulare); + } catch (JsonProcessingException e) { + logger.error("Kann Formulare nicht in JSON mappen", e); } + return ""; + } - public Object updateEmpfehlungPrio(final Map<String, Object> input) { - // Auslesen und Prüfen der Parameter aus 'input' - var rid = AnalyzerUtils.getRequiredId(input, "rid"); - if (rid.isEmpty()) { - logger.error("Kein Parameter 'rid' angegeben, gebe 'false' zurück"); - return false; - } + public Object getEmpfehlung(final Map<String, Object> input) { + var procedureID = AnalyzerUtils.getRequiredId(input, "ProcedureID"); - var strDate = AnalyzerUtils.getRequiredValueMatching(input, "bd", "[\\d]{4}-[\\d]{2}-[\\d]{2}"); - if (strDate.isEmpty()) { - logger.error("Kein oder ungültiger Parameter 'bd' angegeben, gebe 'false' zurück"); - return false; - } + if (procedureID.isEmpty()) { + logger.error("Kein Parameter 'ProcedureID' angegeben, gebe 'null' zurück"); + return null; + } - //String strD = strDate.toString(); - //String CompareDate = strD.substring(1, 11); - //DateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd"); - - try { - String sql = "UPDATE prozedur SET beginndatum = '" + strDate.get() + "' WHERE id = '" + rid.get() + "' "; - SQLQuery result = onkostarApi.getSessionFactory().getCurrentSession().createSQLQuery(sql); - result.executeUpdate(); - return true; - } catch (Exception e) { - return "Achtung: Ein Fehler ist aufgetreten, Änderung konnte nicht gespeichert werden!"; - //return null; - } + try { + SessionFactory sessionFactory = onkostarApi.getSessionFactory(); + Session session = sessionFactory.getCurrentSession(); + var sql = + "SELECT prozedur.id, genname, geneid, geneidlink, empfehlung, beginndatum FROM prozedur " + + "LEFT JOIN dk_mtb_einzelempfehlung em ON em.id = prozedur.id " + + "JOIN data_form df ON prozedur.data_form_id = df.id AND df.name = 'MR.MTB_Einzelempfehlung' " + + "WHERE prozedur.hauptprozedur_id = " + + procedureID.get() + + " AND prozedur.geloescht = 0 " + + "ORDER BY beginndatum"; + + SQLQuery query = + session + .createSQLQuery(sql) + .addScalar("id", StandardBasicTypes.STRING) + .addScalar("genname", StandardBasicTypes.STRING) + .addScalar("geneid", StandardBasicTypes.STRING) + .addScalar("geneidlink", StandardBasicTypes.STRING) + .addScalar("empfehlung", StandardBasicTypes.STRING) + .addScalar("beginndatum", StandardBasicTypes.STRING); + + @SuppressWarnings("unchecked") + List<String[]> rows = query.list(); + return rows; + } catch (Exception e) { + logger.error("Fehler bei Abfrage von Empfehlungen", e); + return null; + } + } + + public Object updateEmpfehlungPrio(final Map<String, Object> input) { + // Auslesen und Prüfen der Parameter aus 'input' + var rid = AnalyzerUtils.getRequiredId(input, "rid"); + if (rid.isEmpty()) { + logger.error("Kein Parameter 'rid' angegeben, gebe 'false' zurück"); + return false; + } + var strDate = AnalyzerUtils.getRequiredValueMatching(input, "bd", "[\\d]{4}-[\\d]{2}-[\\d]{2}"); + if (strDate.isEmpty()) { + logger.error("Kein oder ungültiger Parameter 'bd' angegeben, gebe 'false' zurück"); + return false; } - public List<EcogStatusWithDate> getEcogStatus(final Map<String, Object> input) { - var pid = AnalyzerUtils.getRequiredId(input, "PatientId"); - if (pid.isEmpty()) { - logger.error("Kein Parameter 'PatientId' angegeben, gebe leere Liste zurück"); - return List.of(); - } + // String strD = strDate.toString(); + // String CompareDate = strD.substring(1, 11); + // DateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd"); + + try { + String sql = + "UPDATE prozedur SET beginndatum = '" + + strDate.get() + + "' WHERE id = '" + + rid.get() + + "' "; + SQLQuery result = onkostarApi.getSessionFactory().getCurrentSession().createSQLQuery(sql); + result.executeUpdate(); + return true; + } catch (Exception e) { + return "Achtung: Ein Fehler ist aufgetreten, Änderung konnte nicht gespeichert werden!"; + // return null; + } + } - var patient = onkostarApi.getPatient(pid.get()); - if (null == patient) { - logger.error("Patient nicht gefunden, gebe leere Liste zurück"); - return List.of(); - } + public List<EcogStatusWithDate> getEcogStatus(final Map<String, Object> input) { + var pid = AnalyzerUtils.getRequiredId(input, "PatientId"); + if (pid.isEmpty()) { + logger.error("Kein Parameter 'PatientId' angegeben, gebe leere Liste zurück"); + return List.of(); + } - if (delegatingDataBasedPermissionEvaluator.hasPermission(SecurityContextHolder.getContext().getAuthentication(), patient, PermissionType.READ)) { - return systemtherapieService.ecogStatus(patient); - } + var patient = onkostarApi.getPatient(pid.get()); + if (null == patient) { + logger.error("Patient nicht gefunden, gebe leere Liste zurück"); + return List.of(); + } - throw new IllegalSecuredObjectAccessException("Kein Zugriff auf diesen Patienten"); + if (delegatingDataBasedPermissionEvaluator.hasPermission( + SecurityContextHolder.getContext().getAuthentication(), patient, PermissionType.READ)) { + return systemtherapieService.ecogStatus(patient); } -}
\ No newline at end of file + + throw new IllegalSecuredObjectAccessException("Kein Zugriff auf diesen Patienten"); + } +} diff --git a/src/main/java/dev/dnpm/oshelper/analyzer/EinzelempfehlungAnalyzer.java b/src/main/java/dev/dnpm/oshelper/analyzer/EinzelempfehlungAnalyzer.java index 941d3c8..12dc47a 100644 --- a/src/main/java/dev/dnpm/oshelper/analyzer/EinzelempfehlungAnalyzer.java +++ b/src/main/java/dev/dnpm/oshelper/analyzer/EinzelempfehlungAnalyzer.java @@ -19,135 +19,136 @@ package dev.dnpm.oshelper.analyzer; +import de.itc.onkostar.api.Disease; +import de.itc.onkostar.api.IOnkostarApi; +import de.itc.onkostar.api.Procedure; +import de.itc.onkostar.api.analysis.AnalyzerRequirement; import dev.dnpm.oshelper.dto.Studie; import dev.dnpm.oshelper.dto.Variant; import dev.dnpm.oshelper.security.PermissionType; import dev.dnpm.oshelper.security.PersonPoolBasedPermissionEvaluator; import dev.dnpm.oshelper.services.StudienService; import dev.dnpm.oshelper.services.molekulargenetik.MolekulargenetikFormService; -import de.itc.onkostar.api.Disease; -import de.itc.onkostar.api.IOnkostarApi; -import de.itc.onkostar.api.Procedure; -import de.itc.onkostar.api.analysis.AnalyzerRequirement; +import java.util.List; +import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; -import java.util.List; -import java.util.Map; - /** - * Diese Klasse implementiert ein Plugin, welches Funktionen für DNPM UF Einzelempfehlung bereitstellt. + * Diese Klasse implementiert ein Plugin, welches Funktionen für DNPM UF Einzelempfehlung + * bereitstellt. * * @since 0.2.0 */ @Component public class EinzelempfehlungAnalyzer extends BackendService { - private final static Logger logger = LoggerFactory.getLogger(EinzelempfehlungAnalyzer.class); - - private final IOnkostarApi onkostarApi; - - private final MolekulargenetikFormService molekulargenetikFormService; + private static final Logger logger = LoggerFactory.getLogger(EinzelempfehlungAnalyzer.class); - private final StudienService studienService; + private final IOnkostarApi onkostarApi; - private final PersonPoolBasedPermissionEvaluator permissionEvaluator; + private final MolekulargenetikFormService molekulargenetikFormService; - public EinzelempfehlungAnalyzer( - final IOnkostarApi onkostarApi, - final StudienService studienService, - final MolekulargenetikFormService molekulargenetikFormService, - final PersonPoolBasedPermissionEvaluator permissionEvaluator - ) { - this.onkostarApi = onkostarApi; - this.studienService = studienService; - this.molekulargenetikFormService = molekulargenetikFormService; - this.permissionEvaluator = permissionEvaluator; - } + private final StudienService studienService; - @Override - public String getDescription() { - return "Stellt Funktionen zur Nutzung im Therapieplan-Unterformular für Einzelempfehlungen bereit"; - } + private final PersonPoolBasedPermissionEvaluator permissionEvaluator; - /** - * @deprecated - */ - @Override - public boolean isRelevantForDeletedProcedure() { - return false; - } + public EinzelempfehlungAnalyzer( + final IOnkostarApi onkostarApi, + final StudienService studienService, + final MolekulargenetikFormService molekulargenetikFormService, + final PersonPoolBasedPermissionEvaluator permissionEvaluator) { + this.onkostarApi = onkostarApi; + this.studienService = studienService; + this.molekulargenetikFormService = molekulargenetikFormService; + this.permissionEvaluator = permissionEvaluator; + } - @Override - public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { - return false; - } + @Override + public String getDescription() { + return "Stellt Funktionen zur Nutzung im Therapieplan-Unterformular für Einzelempfehlungen bereit"; + } - @Override - public boolean isSynchronous() { - return false; - } + /** + * @deprecated + */ + @Override + public boolean isRelevantForDeletedProcedure() { + return false; + } - @Override - public AnalyzerRequirement getRequirement() { - return AnalyzerRequirement.PROCEDURE; - } + @Override + public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { + return false; + } - public List<Variant> getVariants(Map<String, Object> input) { - var procedureId = AnalyzerUtils.getRequiredId(input, "id"); + @Override + public boolean isSynchronous() { + return false; + } - if (procedureId.isEmpty()) { - return List.of(); - } + @Override + public AnalyzerRequirement getRequirement() { + return AnalyzerRequirement.PROCEDURE; + } - var procedure = onkostarApi.getProcedure(procedureId.get()); - if (null == procedure) { - return List.of(); - } + public List<Variant> getVariants(Map<String, Object> input) { + var procedureId = AnalyzerUtils.getRequiredId(input, "id"); - if (permissionEvaluator.hasPermission(SecurityContextHolder.getContext().getAuthentication(), procedure, PermissionType.READ)) { - return molekulargenetikFormService.getVariants(procedure); - } else { - logger.error("Security: No permission to access procedure '{}'", procedure.getId()); - return List.of(); - } + if (procedureId.isEmpty()) { + return List.of(); } - /** - * Übergibt alle Studien, deren (Kurz-)Beschreibung oder NCT-Nummer den übergebenen Eingabewert <code>q</code> enthält - * - * <p>Wurde der Eingabewert nicht angegeben oder ist leer, werden alle Studien übergeben. - * - * <p>Beispiel zur Nutzung in einem Formularscript - * <pre> - * executePluginMethod( - * 'TherapieplanAnalyzer', - * 'getStudien', - * { q: 'NCT-12', inactive: true }, - * (response) => console.log(response), - * false - * ); - * </pre> - * - * @param input Map mit Eingabewerten - * @return Liste mit Studien - */ - public List<Studie> getStudien(Map<String, Object> input) { - var query = AnalyzerUtils.getRequiredValue(input, "q", String.class); - var inactive = AnalyzerUtils.getRequiredValue(input, "inactive", Boolean.class).orElse(false); - - if (query.isEmpty() || query.get().isBlank()) { - if (inactive) { - return studienService.findAll(); - } - return studienService.findActive(); - } - if (inactive) { - return studienService.findByQuery(query.get()); - } - return studienService.findActiveByQuery(query.get()); + var procedure = onkostarApi.getProcedure(procedureId.get()); + if (null == procedure) { + return List.of(); } + if (permissionEvaluator.hasPermission( + SecurityContextHolder.getContext().getAuthentication(), procedure, PermissionType.READ)) { + return molekulargenetikFormService.getVariants(procedure); + } else { + logger.error("Security: No permission to access procedure '{}'", procedure.getId()); + return List.of(); + } + } + + /** + * Übergibt alle Studien, deren (Kurz-)Beschreibung oder NCT-Nummer den übergebenen Eingabewert + * <code>q</code> enthält + * + * <p>Wurde der Eingabewert nicht angegeben oder ist leer, werden alle Studien übergeben. + * + * <p>Beispiel zur Nutzung in einem Formularscript + * + * <pre> + * executePluginMethod( + * 'TherapieplanAnalyzer', + * 'getStudien', + * { q: 'NCT-12', inactive: true }, + * (response) => console.log(response), + * false + * ); + * </pre> + * + * @param input Map mit Eingabewerten + * @return Liste mit Studien + */ + public List<Studie> getStudien(Map<String, Object> input) { + var query = AnalyzerUtils.getRequiredValue(input, "q", String.class); + var inactive = AnalyzerUtils.getRequiredValue(input, "inactive", Boolean.class).orElse(false); + + if (query.isEmpty() || query.get().isBlank()) { + if (inactive) { + return studienService.findAll(); + } + return studienService.findActive(); + } + if (inactive) { + return studienService.findByQuery(query.get()); + } + return studienService.findActiveByQuery(query.get()); + } } diff --git a/src/main/java/dev/dnpm/oshelper/analyzer/FollowUpAnalyzer.java b/src/main/java/dev/dnpm/oshelper/analyzer/FollowUpAnalyzer.java index 8b35f8c..2fa973f 100644 --- a/src/main/java/dev/dnpm/oshelper/analyzer/FollowUpAnalyzer.java +++ b/src/main/java/dev/dnpm/oshelper/analyzer/FollowUpAnalyzer.java @@ -25,98 +25,97 @@ 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 java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; -import java.util.Set; - /** - * Diese Klasse implementiert ein Plugin, welches Aktionen nach Bearbeitung eines FollowUps durchführt. + * Diese Klasse implementiert ein Plugin, welches Aktionen nach Bearbeitung eines FollowUps + * durchführt. * * @since 0.0.2 */ @Component public class FollowUpAnalyzer extends Analyzer { - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - private final IOnkostarApi onkostarApi; - - public FollowUpAnalyzer(IOnkostarApi onkostarApi) { - this.onkostarApi = onkostarApi; - } - - @Override - public String getDescription() { - return "Aktualisiert verknüpfte Formulare nach Änderungen im FollowUp-Formular"; + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private final IOnkostarApi onkostarApi; + + public FollowUpAnalyzer(IOnkostarApi onkostarApi) { + this.onkostarApi = onkostarApi; + } + + @Override + public String getDescription() { + return "Aktualisiert verknüpfte Formulare nach Änderungen im FollowUp-Formular"; + } + + /** + * @deprecated + */ + @Override + public boolean isRelevantForDeletedProcedure() { + return false; + } + + @Override + public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { + return null != procedure && procedure.getFormName().equals("DNPM FollowUp"); + } + + @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) { + backlinkToEinzelempfehlung(procedure); + } + + /** + * Verlinke aktuelles FollowUp in angegebener Einzelempfehlung + * + * @param procedure Das FollowUp + */ + private void backlinkToEinzelempfehlung(Procedure procedure) { + if (null == procedure.getValue("LinkTherapieempfehlung")) { + return; } - /** - * @deprecated - */ - @Override - public boolean isRelevantForDeletedProcedure() { - return false; + var referencedProcedureId = procedure.getValue("LinkTherapieempfehlung"); + if (null == referencedProcedureId || referencedProcedureId.getInt() == 0) { + // Alles gut, es ist keine Einzelempfehlung angegeben + return; } - @Override - public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { - return null != procedure && procedure.getFormName().equals("DNPM FollowUp"); + var referencedProcedure = onkostarApi.getProcedure(referencedProcedureId.getInt()); + if (null == referencedProcedure) { + logger.error( + "Referenzierte Einzelempfehlung wurde nicht gefunden: {}", referencedProcedureId); + return; } - @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) { - backlinkToEinzelempfehlung(procedure); - } + referencedProcedure.setValue( + "refdnpmfollowup", new Item("ref_dnpm_followup", procedure.getId())); - /** - * Verlinke aktuelles FollowUp in angegebener Einzelempfehlung - * - * @param procedure Das FollowUp - */ - private void backlinkToEinzelempfehlung(Procedure procedure) { - if (null == procedure.getValue("LinkTherapieempfehlung")) { - return; - } - - var referencedProcedureId = procedure.getValue("LinkTherapieempfehlung"); - if (null == referencedProcedureId || referencedProcedureId.getInt() == 0) { - // Alles gut, es ist keine Einzelempfehlung angegeben - return; - } - - var referencedProcedure = onkostarApi.getProcedure(referencedProcedureId.getInt()); - if (null == referencedProcedure) { - logger.error("Referenzierte Einzelempfehlung wurde nicht gefunden: {}", referencedProcedureId); - return; - } - - referencedProcedure.setValue("refdnpmfollowup", new Item("ref_dnpm_followup", procedure.getId())); - - try { - onkostarApi.saveProcedure(referencedProcedure); - } catch (Exception e) { - logger.error("FollowUp konnte nicht mit Einzelempfehlung verknüpft werden", e); - } + try { + onkostarApi.saveProcedure(referencedProcedure); + } catch (Exception e) { + logger.error("FollowUp konnte nicht mit Einzelempfehlung verknüpft werden", e); } + } } diff --git a/src/main/java/dev/dnpm/oshelper/analyzer/IPluginPart.java b/src/main/java/dev/dnpm/oshelper/analyzer/IPluginPart.java index 2745d46..9e5b5fa 100644 --- a/src/main/java/dev/dnpm/oshelper/analyzer/IPluginPart.java +++ b/src/main/java/dev/dnpm/oshelper/analyzer/IPluginPart.java @@ -23,16 +23,15 @@ import de.itc.onkostar.api.analysis.IProcedureAnalyzer; public interface IPluginPart extends IProcedureAnalyzer { - default String getVersion() { - return "2.0.0"; // x-release-please - } + default String getVersion() { + return "2.2.0"; // x-release-please + } - default String getName() { - return "DNPM Plugin"; - } - - default String getDescription() { - return String.format("Plugin-Bestandteil '%s'", this.getClass().getSimpleName()); - } + default String getName() { + return "DNPM Plugin"; + } + default String getDescription() { + return String.format("Plugin-Bestandteil '%s'", this.getClass().getSimpleName()); + } } diff --git a/src/main/java/dev/dnpm/oshelper/analyzer/Merkmalskatalog.java b/src/main/java/dev/dnpm/oshelper/analyzer/Merkmalskatalog.java index 18adb15..e8ed459 100644 --- a/src/main/java/dev/dnpm/oshelper/analyzer/Merkmalskatalog.java +++ b/src/main/java/dev/dnpm/oshelper/analyzer/Merkmalskatalog.java @@ -23,6 +23,8 @@ import de.itc.onkostar.api.Disease; import de.itc.onkostar.api.IOnkostarApi; import de.itc.onkostar.api.Procedure; import de.itc.onkostar.api.analysis.AnalyzerRequirement; +import java.util.List; +import java.util.Map; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.SessionFactory; @@ -30,87 +32,87 @@ import org.hibernate.type.StandardBasicTypes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.List; -import java.util.Map; - public class Merkmalskatalog extends BackendService { - private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private final Logger logger = LoggerFactory.getLogger(this.getClass()); - private final IOnkostarApi onkostarApi; + private final IOnkostarApi onkostarApi; - public Merkmalskatalog(final IOnkostarApi onkostarApi) { - this.onkostarApi = onkostarApi; - } + public Merkmalskatalog(final IOnkostarApi onkostarApi) { + this.onkostarApi = onkostarApi; + } - @Override - public String getDescription() { - return "Methoden für Merkmalskataloge"; - } + @Override + public String getDescription() { + return "Methoden für Merkmalskataloge"; + } - @Override - public boolean isRelevantForDeletedProcedure() { - return false; - } + @Override + public boolean isRelevantForDeletedProcedure() { + return false; + } - @Override - public boolean isSynchronous() { - return true; - } + @Override + public boolean isSynchronous() { + return true; + } - @Override - public AnalyzerRequirement getRequirement() { - return AnalyzerRequirement.PROCEDURE; - } - - @Override - public boolean isRelevantForAnalyzer(Procedure procedure, Disease currentDisease) { - return false; - } - - public List<String[]> getMerkmalskatalog(final Map<String, Object> input) { - var merkmalskatalog = AnalyzerUtils.getRequiredValue(input, "Merkmalskatalog", String.class); - var spalten = AnalyzerUtils.getRequiredValue(input, "Spalten", String.class); + @Override + public AnalyzerRequirement getRequirement() { + return AnalyzerRequirement.PROCEDURE; + } - if (merkmalskatalog.isEmpty()) { - logger.error("Kein Merkmalskatalog angegeben!"); - return null; - } + @Override + public boolean isRelevantForAnalyzer(Procedure procedure, Disease currentDisease) { + return false; + } - if (spalten.isEmpty()) { - logger.error("Keine Spalten angegeben!"); - return null; - } + public List<String[]> getMerkmalskatalog(final Map<String, Object> input) { + var merkmalskatalog = AnalyzerUtils.getRequiredValue(input, "Merkmalskatalog", String.class); + var spalten = AnalyzerUtils.getRequiredValue(input, "Spalten", String.class); - String[] spaltenArray = spalten.get().split("\\s*,\\s*"); - - try { - SQLQuery query = getSqlQuery(merkmalskatalog.get()); - - for (String s : spaltenArray) { - query.addScalar(s, StandardBasicTypes.STRING); - } + if (merkmalskatalog.isEmpty()) { + logger.error("Kein Merkmalskatalog angegeben!"); + return null; + } - @SuppressWarnings("unchecked") - List<String[]> rows = query.list(); - return rows; - } catch (Exception e) { - logger.error("Fehler bei der Ausführung von getMerkmalskatalog()", e); - return null; - } + if (spalten.isEmpty()) { + logger.error("Keine Spalten angegeben!"); + return null; } - private SQLQuery getSqlQuery(String merkmalskatalog) { - SessionFactory sessionFactory = onkostarApi.getSessionFactory(); - Session session = sessionFactory.getCurrentSession(); + String[] spaltenArray = spalten.get().split("\\s*,\\s*"); + + try { + SQLQuery query = getSqlQuery(merkmalskatalog.get()); - String sql = "SELECT p.id, p.code, p.shortdesc, p.description, p.note, p.synonyms " - + "FROM property_catalogue " - + "LEFT JOIN property_catalogue_version ON property_catalogue_version.datacatalog_id = property_catalogue.id " - + "LEFT JOIN property_catalogue_version_entry p ON p.property_version_id = property_catalogue_version.id " - + "WHERE name = '" + merkmalskatalog + "' AND aktiv = 1 " - + "ORDER BY position ASC"; + for (String s : spaltenArray) { + query.addScalar(s, StandardBasicTypes.STRING); + } - return session.createSQLQuery(sql); + @SuppressWarnings("unchecked") + List<String[]> rows = query.list(); + return rows; + } catch (Exception e) { + logger.error("Fehler bei der Ausführung von getMerkmalskatalog()", e); + return null; } + } + + private SQLQuery getSqlQuery(String merkmalskatalog) { + SessionFactory sessionFactory = onkostarApi.getSessionFactory(); + Session session = sessionFactory.getCurrentSession(); + + String sql = + "SELECT p.id, p.code, p.shortdesc, p.description, p.note, p.synonyms " + + "FROM property_catalogue " + + "LEFT JOIN property_catalogue_version ON property_catalogue_version.datacatalog_id = property_catalogue.id " + + "LEFT JOIN property_catalogue_version_entry p ON p.property_version_id = property_catalogue_version.id " + + "WHERE name = '" + + merkmalskatalog + + "' AND aktiv = 1 " + + "ORDER BY position ASC"; + + return session.createSQLQuery(sql); + } } diff --git a/src/main/java/dev/dnpm/oshelper/analyzer/TherapieMitEcogAnalyzer.java b/src/main/java/dev/dnpm/oshelper/analyzer/TherapieMitEcogAnalyzer.java index ec9f824..39a31da 100644 --- a/src/main/java/dev/dnpm/oshelper/analyzer/TherapieMitEcogAnalyzer.java +++ b/src/main/java/dev/dnpm/oshelper/analyzer/TherapieMitEcogAnalyzer.java @@ -19,169 +19,174 @@ package dev.dnpm.oshelper.analyzer; -import dev.dnpm.oshelper.dto.EcogStatusWithDate; -import dev.dnpm.oshelper.services.strahlentherapie.StrahlentherapieService; -import dev.dnpm.oshelper.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 org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - +import dev.dnpm.oshelper.dto.EcogStatusWithDate; +import dev.dnpm.oshelper.services.strahlentherapie.StrahlentherapieService; +import dev.dnpm.oshelper.services.systemtherapie.SystemtherapieService; import java.text.SimpleDateFormat; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; /** - * Diese Klasse implementiert ein Plugin, welches Aktionen nach Bearbeitung eines Formulars zur Systemtherapie durchführt. + * Diese Klasse implementiert ein Plugin, welches Aktionen nach Bearbeitung eines Formulars zur + * Systemtherapie durchführt. * * @since 0.6.0 */ @Component 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 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 in Formularen vom Typ Strahlen-/Systemtherapie mit ECOG-Status"; - } - - /** - * @deprecated - */ - @Override - public boolean isRelevantForDeletedProcedure() { - return true; - } - - @Override - public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { - return null != procedure && null != disease && ( - procedure.getFormName().equals("OS.Strahlentherapie") - || procedure.getFormName().equals("OS.Strahlentherapie.VarianteUKW") - || procedure.getFormName().equals("OS.Systemische Therapie") - || procedure.getFormName().equals("OS.Systemische Therapie.VarianteUKW") - ); + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private final IOnkostarApi onkostarApi; + + private final StrahlentherapieService strahlentherapieService; + private final SystemtherapieService systemtherapieService; + + 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 in Formularen vom Typ Strahlen-/Systemtherapie mit ECOG-Status"; + } + + /** + * @deprecated + */ + @Override + public boolean isRelevantForDeletedProcedure() { + return true; + } + + @Override + public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { + return null != procedure + && null != disease + && (procedure.getFormName().equals("OS.Strahlentherapie") + || procedure.getFormName().equals("OS.Strahlentherapie.VarianteUKW") + || 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; } - @Override - public boolean isSynchronous() { - return false; + var ecog = + strahlentherapieService.ecogStatus(procedure.getPatient()).stream() + .filter( + ecogStatusWithDate -> + ecogStatusWithDate.getDate().after(disease.getDiagnosisDate())) + .collect(Collectors.toList()); + + ecog.addAll( + systemtherapieService.ecogStatus(procedure.getPatient()).stream() + .filter( + ecogStatusWithDate -> + ecogStatusWithDate.getDate().after(disease.getDiagnosisDate())) + .collect(Collectors.toList())); + + if (ecog.isEmpty()) { + // Nothing to do + return; } - @Override - public AnalyzerRequirement getRequirement() { - return AnalyzerRequirement.PROCEDURE; + 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) { + updateExistingEcogVerlauf(p, ecog, ufEcog); + } else { + newEcogverlauf(p, ecog); + } + }); + } + + private void updateExistingEcogVerlauf( + Procedure p, List<EcogStatusWithDate> ecogFromCompleted, Item ufEcog) { + var shouldSave = false; + var existingDates = + ufEcog.<List<Map<String, String>>>getValue().stream() + .map(v -> v.get("Datum")) + .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; + } } - - @Override - public Set<AnalyseTriggerEvent> getTriggerEvents() { - return Set.of( - AnalyseTriggerEvent.EDIT_SAVE, - AnalyseTriggerEvent.EDIT_LOCK, - AnalyseTriggerEvent.REORG - ); + if (shouldSave) { + try { + onkostarApi.saveProcedure(p, true); + } catch (Exception e) { + logger.error("Cannot update ECOG for procedure '{}'", p.getId()); + } } - - @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 ecog = strahlentherapieService.ecogStatus(procedure.getPatient()) - .stream() - .filter(ecogStatusWithDate -> ecogStatusWithDate.getDate().after(disease.getDiagnosisDate())) - .collect(Collectors.toList()); - - ecog.addAll(systemtherapieService.ecogStatus(procedure.getPatient()) - .stream() - .filter(ecogStatusWithDate -> ecogStatusWithDate.getDate().after(disease.getDiagnosisDate())) - .collect(Collectors.toList())); - - - if (ecog.isEmpty()) { - // Nothing to do - return; - } - - 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) { - updateExistingEcogVerlauf(p, ecog, ufEcog); - } else { - newEcogverlauf(p, ecog); - } - }); + } + + private void newEcogverlauf(Procedure p, List<EcogStatusWithDate> ecogFromCompleted) { + p.setValue("ECOGVerlauf", new Item("ECOGVerlauf", List.of())); + for (var ecog : ecogFromCompleted) { + 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); } - - private void updateExistingEcogVerlauf(Procedure p, List<EcogStatusWithDate> ecogFromCompleted, Item ufEcog) { - var shouldSave = false; - var existingDates = ufEcog.<List<Map<String, String>>>getValue().stream() - .map(v -> v.get("Datum")) - .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()); - } - } + try { + onkostarApi.saveProcedure(p, true); + } catch (Exception e) { + logger.error("Create update ECOG for procedure '{}'", p.getId()); } - - private void newEcogverlauf(Procedure p, List<EcogStatusWithDate> ecogFromCompleted) { - p.setValue("ECOGVerlauf", new Item("ECOGVerlauf", List.of())); - for (var ecog : ecogFromCompleted) { - 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); - } - try { - onkostarApi.saveProcedure(p, true); - } catch (Exception e) { - logger.error("Create update ECOG for procedure '{}'", p.getId()); - } - } - + } } diff --git a/src/main/java/dev/dnpm/oshelper/analyzer/TherapieplanAnalyzer.java b/src/main/java/dev/dnpm/oshelper/analyzer/TherapieplanAnalyzer.java index 85baf5f..f5ff959 100644 --- a/src/main/java/dev/dnpm/oshelper/analyzer/TherapieplanAnalyzer.java +++ b/src/main/java/dev/dnpm/oshelper/analyzer/TherapieplanAnalyzer.java @@ -24,66 +24,60 @@ import de.itc.onkostar.api.Procedure; import de.itc.onkostar.api.analysis.AnalyseTriggerEvent; import de.itc.onkostar.api.analysis.AnalyzerRequirement; import dev.dnpm.oshelper.services.therapieplan.TherapieplanServiceFactory; -import org.springframework.stereotype.Component; - import java.util.Set; +import org.springframework.stereotype.Component; /** - * Diese Klasse implementiert ein Plugin, welches Aktionen nach Bearbeitung eines Therapieplans durchführt. + * Diese Klasse implementiert ein Plugin, welches Aktionen nach Bearbeitung eines Therapieplans + * durchführt. * * @since 0.0.2 */ @Component public class TherapieplanAnalyzer extends Analyzer { - private final TherapieplanServiceFactory therapieplanServiceFactory; - - public TherapieplanAnalyzer( - final TherapieplanServiceFactory therapieplanServiceFactory - ) { - this.therapieplanServiceFactory = therapieplanServiceFactory; - } + private final TherapieplanServiceFactory therapieplanServiceFactory; - @Override - public String getDescription() { - return "Aktualisiert Unterformulare nach Änderungen im Therapieplan-Formular"; - } + public TherapieplanAnalyzer(final TherapieplanServiceFactory therapieplanServiceFactory) { + this.therapieplanServiceFactory = therapieplanServiceFactory; + } - /** - * @deprecated - */ - @Override - public boolean isRelevantForDeletedProcedure() { - return false; - } + @Override + public String getDescription() { + return "Aktualisiert Unterformulare nach Änderungen im Therapieplan-Formular"; + } - @Override - public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { - return null != procedure && procedure.getFormName().equals("DNPM Therapieplan"); - } + /** + * @deprecated + */ + @Override + public boolean isRelevantForDeletedProcedure() { + return false; + } - @Override - public boolean isSynchronous() { - return false; - } + @Override + public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { + return null != procedure && procedure.getFormName().equals("DNPM Therapieplan"); + } - @Override - public AnalyzerRequirement getRequirement() { - return AnalyzerRequirement.PROCEDURE; - } + @Override + public boolean isSynchronous() { + return false; + } - @Override - public Set<AnalyseTriggerEvent> getTriggerEvents() { - return Set.of( - AnalyseTriggerEvent.EDIT_SAVE, - AnalyseTriggerEvent.EDIT_LOCK, - AnalyseTriggerEvent.REORG - ); - } + @Override + public AnalyzerRequirement getRequirement() { + return AnalyzerRequirement.PROCEDURE; + } - @Override - public void analyze(Procedure procedure, Disease disease) { - therapieplanServiceFactory.currentUsableInstance().updateRequiredMtbEntries(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) { + therapieplanServiceFactory.currentUsableInstance().updateRequiredMtbEntries(procedure); + } } |
