diff options
Diffstat (limited to 'src/main/java/DNPM/services')
6 files changed, 198 insertions, 6 deletions
diff --git a/src/main/java/DNPM/services/DefaultFormService.java b/src/main/java/DNPM/services/DefaultFormService.java index c7fb042..9feaeb2 100644 --- a/src/main/java/DNPM/services/DefaultFormService.java +++ b/src/main/java/DNPM/services/DefaultFormService.java @@ -2,12 +2,15 @@ package DNPM.services; import DNPM.exceptions.FormException; import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.stereotype.Service; import javax.sql.DataSource; import java.util.List; -@Service +/** + * Standardimplementierung zum Ermitteln von Unter- und Hauptformularen + * + * @since 0.0.2 + */ public class DefaultFormService implements FormService { private final JdbcTemplate jdbcTemplate; diff --git a/src/main/java/DNPM/services/DefaultStudienService.java b/src/main/java/DNPM/services/DefaultStudienService.java index 596a288..1f115cf 100644 --- a/src/main/java/DNPM/services/DefaultStudienService.java +++ b/src/main/java/DNPM/services/DefaultStudienService.java @@ -1,7 +1,6 @@ package DNPM.services; import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.stereotype.Service; import javax.sql.DataSource; import java.util.List; @@ -11,7 +10,6 @@ import java.util.List; * * @since 0.0.2 */ -@Service public class DefaultStudienService implements StudienService { private final JdbcTemplate jdbcTemplate; diff --git a/src/main/java/DNPM/services/DefaultTherapieplanService.java b/src/main/java/DNPM/services/DefaultTherapieplanService.java new file mode 100644 index 0000000..f705ce8 --- /dev/null +++ b/src/main/java/DNPM/services/DefaultTherapieplanService.java @@ -0,0 +1,142 @@ +package DNPM.services; + +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.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); + } + + 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); + } + } + } + }); + } + + +} diff --git a/src/main/java/DNPM/services/FormService.java b/src/main/java/DNPM/services/FormService.java index 824d350..f10d6c3 100644 --- a/src/main/java/DNPM/services/FormService.java +++ b/src/main/java/DNPM/services/FormService.java @@ -1,6 +1,8 @@ package DNPM.services; import DNPM.exceptions.FormException; +import de.itc.onkostar.api.Procedure; +import de.itc.onkostar.api.constants.JaNeinUnbekannt; import java.util.List; @@ -12,7 +14,7 @@ public interface FormService { * * @param procedureId Die Prozedur-ID des Unterformulars * @return Die Prozedur-ID des zugehörigen Hauptformulars - * @throws FormException + * @throws FormException Wird geworfen, wenn ein Fehler auftrat */ int getMainFormProcedureId(int procedureId) throws FormException; @@ -22,8 +24,28 @@ public interface FormService { * * @param procedureId Die Prozedur-ID des Formulars * @return Eine Liste mit Prozedur-IDs der Unterformulare - * @throws FormException */ List<Integer> getSubFormProcedureIds(int procedureId); + /** + * Prüft, ob ein Formularfeld in der Prozedur einen Wert hat oder null ist + * @param procedure Die zu prüfende Prozedur + * @param fieldName Der Formularfeldname + * @return Gibt <code>true</code> zurück, wenn das Feld einen Wert hat + */ + static boolean hasValue(final Procedure procedure, final String fieldName) { + return null != procedure.getValue(fieldName); + } + + /** + * Prüft, ob ein Formularfeld mit Ja/Nein/Unbekannt den Wert Ja hat + * @param procedure Die zu prüfende Prozedur + * @param fieldName Der Formularfeldname + * @return Gibt <code>true</code> zurück, wenn das Feld den Wert "Ja" hat + */ + static boolean isYes(final Procedure procedure, final String fieldName) { + return hasValue(procedure, fieldName) + && procedure.getValue(fieldName).getString().equals(JaNeinUnbekannt.JA.getCode()); + } + } diff --git a/src/main/java/DNPM/services/MultipleMtbTherapieplanService.java b/src/main/java/DNPM/services/MultipleMtbTherapieplanService.java new file mode 100644 index 0000000..d4eb297 --- /dev/null +++ b/src/main/java/DNPM/services/MultipleMtbTherapieplanService.java @@ -0,0 +1,12 @@ +package DNPM.services; + +import de.itc.onkostar.api.Procedure; + +public class MultipleMtbTherapieplanService implements TherapieplanService { + + @Override + public void updateRequiredMtbEntries(Procedure procedure) { + // No action required + } + +} diff --git a/src/main/java/DNPM/services/TherapieplanService.java b/src/main/java/DNPM/services/TherapieplanService.java new file mode 100644 index 0000000..e47d75e --- /dev/null +++ b/src/main/java/DNPM/services/TherapieplanService.java @@ -0,0 +1,15 @@ +package DNPM.services; + +import de.itc.onkostar.api.Procedure; + +public interface TherapieplanService { + + /** + * Verlinke MTB und Übernahme Datum aus Hauptformular in weiteren Bereichen + * "Humangenetische Beratung" und "Reevaluation" und Unterformularen, wenn erforderlich. + * + * @param procedure Die Prozedur mit Hauptformular + */ + void updateRequiredMtbEntries(Procedure procedure); + +} |
