diff options
Diffstat (limited to 'src/main')
5 files changed, 265 insertions, 0 deletions
diff --git a/src/main/java/DNPM/analyzer/EinzelempfehlungAnalyzer.java b/src/main/java/DNPM/analyzer/EinzelempfehlungAnalyzer.java new file mode 100644 index 0000000..efcc0a7 --- /dev/null +++ b/src/main/java/DNPM/analyzer/EinzelempfehlungAnalyzer.java @@ -0,0 +1,114 @@ +package DNPM.analyzer; + +import DNPM.dto.Variant; +import DNPM.security.DelegatingDataBasedPermissionEvaluator; +import DNPM.security.IllegalSecuredObjectAccessException; +import DNPM.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 de.itc.onkostar.api.analysis.IProcedureAnalyzer; +import de.itc.onkostar.api.analysis.OnkostarPluginType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * Diese Klasse implementiert ein Plugin, welches Funktionen für DNPM UF Einzelempfehlung bereit stellt. + * + * @since 0.2.0 + */ +@Component +public class EinzelempfehlungAnalyzer implements IProcedureAnalyzer { + + private final static Logger logger = LoggerFactory.getLogger(EinzelempfehlungAnalyzer.class); + + private final IOnkostarApi onkostarApi; + + private final MolekulargenetikFormService molekulargenetikFormService; + + private final DelegatingDataBasedPermissionEvaluator permissionEvaluator; + + public EinzelempfehlungAnalyzer( + final IOnkostarApi onkostarApi, + final MolekulargenetikFormService molekulargenetikFormService, + final DelegatingDataBasedPermissionEvaluator permissionEvaluator + ) { + this.onkostarApi = onkostarApi; + this.molekulargenetikFormService = molekulargenetikFormService; + this.permissionEvaluator = permissionEvaluator; + } + + @Override + public OnkostarPluginType getType() { + return OnkostarPluginType.BACKEND_SERVICE; + } + + @Override + public String getVersion() { + return "0.1.0"; + } + + @Override + public String getName() { + return "DNPM Einzelempfehlung Backend Service"; + } + + @Override + public String getDescription() { + return "Stellt Funktionen zur Nutzung im Therapieplan-Unterformular für Einzelempfehlungen bereit"; + } + + /** + * @deprecated + */ + @Override + public boolean isRelevantForDeletedProcedure() { + return false; + } + + @Override + public boolean isRelevantForAnalyzer(Procedure procedure, Disease disease) { + return false; + } + + @Override + public boolean isSynchronous() { + return false; + } + + @Override + public AnalyzerRequirement getRequirement() { + return AnalyzerRequirement.PROCEDURE; + } + + @Override + public void analyze(Procedure procedure, Disease disease) { + // No op + } + + public List<Variant> getVariants(Map<String, Object> input) { + var procedureId = AnalyzerUtils.getRequiredId(input, "id"); + + if (procedureId.isEmpty()) { + return List.of(); + } + + var procedure = onkostarApi.getProcedure(procedureId.get()); + if (null == procedure) { + return List.of(); + } + + try { + return molekulargenetikFormService.getVariants(procedure); + } catch (IllegalSecuredObjectAccessException e) { + logger.error("Security", e); + return List.of(); + } + } + +} diff --git a/src/main/java/DNPM/config/PluginConfiguration.java b/src/main/java/DNPM/config/PluginConfiguration.java index 28abbda..e520a45 100644 --- a/src/main/java/DNPM/config/PluginConfiguration.java +++ b/src/main/java/DNPM/config/PluginConfiguration.java @@ -3,6 +3,8 @@ package DNPM.config; import DNPM.database.SettingsRepository; import DNPM.services.*; import DNPM.services.consent.ConsentManagerServiceFactory; +import DNPM.services.molekulargenetik.MolekulargenetikFormService; +import DNPM.services.molekulargenetik.OsMolekulargenetikFormService; import DNPM.services.mtb.DefaultMtbService; import DNPM.services.mtb.MtbService; import DNPM.services.systemtherapie.DefaultSystemtherapieService; @@ -68,4 +70,9 @@ public class PluginConfiguration { return new TherapieplanServiceFactory(onkostarApi, settingsService, formService); } + @Bean + public MolekulargenetikFormService molekulargenetikFormService() { + return new OsMolekulargenetikFormService(); + } + } diff --git a/src/main/java/DNPM/dto/Variant.java b/src/main/java/DNPM/dto/Variant.java new file mode 100644 index 0000000..f8d25c1 --- /dev/null +++ b/src/main/java/DNPM/dto/Variant.java @@ -0,0 +1,100 @@ +package DNPM.dto; + +import de.itc.onkostar.api.Procedure; + +import java.util.Optional; + +public class Variant { + private final Integer id; + + private final String ergebnis; + + private final String gen; + + private final String exon; + + private final String pathogenitaetsklasse; + + private Variant( + final int id, + final String ergebnis, + final String gen, + final String exon, + final String pathogenitaetsklasse + ) { + this.id = id; + this.ergebnis = ergebnis; + this.gen = gen; + this.exon = exon; + this.pathogenitaetsklasse = pathogenitaetsklasse; + } + + public Integer getId() { + return id; + } + + public String getErgebnis() { + return ergebnis; + } + + public String getGen() { + return gen; + } + + public String getExon() { + return exon; + } + + public String getPathogenitaetsklasse() { + return pathogenitaetsklasse; + } + + public static Optional<Variant> fromProcedure(Procedure procedure) { + if (!"OS.Molekulargenetische Untersuchung".equals(procedure.getFormName())) { + return Optional.empty(); + } + + var ergebnis = procedure.getValue("Ergebnis"); + var gene = procedure.getValue("Untersucht"); + var exon = procedure.getValue("ExonInt"); + var pathogenitaetsklasse = procedure.getValue("Pathogenitaetsklasse"); + + if (null == gene) { + return Optional.empty(); + } + + if (ergebnis.getString().equals("P")) { + return Optional.of( + new Variant( + procedure.getId(), + "Einfache Variante (Mutation)", + gene.getString().isBlank() ? "-" : gene.getString(), + null == exon || exon.getString().isBlank() ? "-" : exon.getString(), + null == pathogenitaetsklasse || pathogenitaetsklasse.getString().isBlank() ? "-" : pathogenitaetsklasse.getString() + ) + ); + } else if (ergebnis.getString().equals("CNV")) { + return Optional.of( + new Variant( + procedure.getId(), + "Copy Number Variation (CNV)", + gene.getString().isBlank() ? "-" : gene.getString(), + null == exon || exon.getString().isBlank() ? "-" : exon.getString(), + null == pathogenitaetsklasse || pathogenitaetsklasse.getString().isBlank() ? "-" : pathogenitaetsklasse.getString() + ) + ); + } else if (ergebnis.getString().equals("F")) { + return Optional.of( + new Variant( + procedure.getId(), + "Fusion (Translokation Inversion Insertion)", + gene.getString().isBlank() ? "-" : gene.getString(), + null == exon || exon.getString().isBlank() ? "-" : exon.getString(), + null == pathogenitaetsklasse || pathogenitaetsklasse.getString().isBlank() ? "-" : pathogenitaetsklasse.getString() + ) + ); + } else { + return Optional.empty(); + } + } +} diff --git a/src/main/java/DNPM/services/molekulargenetik/MolekulargenetikFormService.java b/src/main/java/DNPM/services/molekulargenetik/MolekulargenetikFormService.java new file mode 100644 index 0000000..5af03b2 --- /dev/null +++ b/src/main/java/DNPM/services/molekulargenetik/MolekulargenetikFormService.java @@ -0,0 +1,12 @@ +package DNPM.services.molekulargenetik; + +import DNPM.dto.Variant; +import de.itc.onkostar.api.Procedure; + +import java.util.List; + +public interface MolekulargenetikFormService { + + List<Variant> getVariants(Procedure procedure); + +} diff --git a/src/main/java/DNPM/services/molekulargenetik/OsMolekulargenetikFormService.java b/src/main/java/DNPM/services/molekulargenetik/OsMolekulargenetikFormService.java new file mode 100644 index 0000000..8e673d7 --- /dev/null +++ b/src/main/java/DNPM/services/molekulargenetik/OsMolekulargenetikFormService.java @@ -0,0 +1,32 @@ +package DNPM.services.molekulargenetik; + +import DNPM.dto.Variant; +import DNPM.security.PersonPoolSecured; +import de.itc.onkostar.api.Procedure; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +public class OsMolekulargenetikFormService implements MolekulargenetikFormService { + + @Override + @PersonPoolSecured + public List<Variant> getVariants(Procedure procedure) { + if (! "OS.Molekulargenetik".equals(procedure.getFormName())) { + return List.of(); + } + + var subforms = procedure.getSubProceduresMap().get("MolekulargenetischeUntersuchung"); + if (null == subforms) { + return List.of(); + } + + return subforms.stream() + .map(Variant::fromProcedure) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toList()); + + } +} |
