From 111b96ee50ee9b1748bf1965eca91abddc1e7065 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Sat, 28 Jun 2025 15:32:40 +0200 Subject: [PATCH] feat: add recommendationsMissingReason and noSequencingPerformedReason --- .../mapper/TherapieplanDataMapper.java | 35 +++++++++++- .../mapper/TherapieplanDataMapperTest.java | 55 ++++++++++++++++++- 2 files changed, 87 insertions(+), 3 deletions(-) diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/TherapieplanDataMapper.java b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/TherapieplanDataMapper.java index e4a74dd..42a94f0 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/TherapieplanDataMapper.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/TherapieplanDataMapper.java @@ -1,11 +1,14 @@ package dev.pcvolkmer.onco.datamapper.mapper; -import dev.pcvolkmer.mv64e.mtb.MtbCarePlan; +import dev.pcvolkmer.mv64e.mtb.*; import dev.pcvolkmer.onco.datamapper.PropertyCatalogue; import dev.pcvolkmer.onco.datamapper.datacatalogues.EinzelempfehlungCatalogue; import dev.pcvolkmer.onco.datamapper.datacatalogues.TherapieplanCatalogue; +import java.io.IOException; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import static dev.pcvolkmer.onco.datamapper.mapper.MapperUtils.getPatientReference; @@ -59,7 +62,37 @@ public class TherapieplanDataMapper implements DataMapper { builder.notes(List.of(therapieplanData.getString("protokollauszug"))); } + if ( + null != therapieplanData.getString("status_begruendung") + && therapieplanData.getString("status_begruendung").equals(MtbCarePlanRecommendationsMissingReasonCodingCode.NO_TARGET.toValue()) + ) { + builder.recommendationsMissingReason( + MtbCarePlanRecommendationsMissingReasonCoding.builder() + .code(MtbCarePlanRecommendationsMissingReasonCodingCode.NO_TARGET) + .build() + ); + } else { + builder.noSequencingPerformedReason( + getCarePlanNoSequencingPerformedReasonCoding(therapieplanData.getString("status_begruendung")) + ); + } + return builder.build(); } + private CarePlanNoSequencingPerformedReasonCoding getCarePlanNoSequencingPerformedReasonCoding(String value) { + if (value == null || !Arrays.stream(NoSequencingPerformedReasonCode.values()).map(NoSequencingPerformedReasonCode::toValue).collect(Collectors.toSet()).contains(value)) { + return null; + } + + var resultBuilder = CarePlanNoSequencingPerformedReasonCoding.builder(); + try { + resultBuilder.code(NoSequencingPerformedReasonCode.forValue(value)); + } catch (IOException e) { + return null; + } + + return resultBuilder.build(); + } + } diff --git a/src/test/java/dev/pcvolkmer/onco/datamapper/mapper/TherapieplanDataMapperTest.java b/src/test/java/dev/pcvolkmer/onco/datamapper/mapper/TherapieplanDataMapperTest.java index 32f7a7f..e4242f9 100644 --- a/src/test/java/dev/pcvolkmer/onco/datamapper/mapper/TherapieplanDataMapperTest.java +++ b/src/test/java/dev/pcvolkmer/onco/datamapper/mapper/TherapieplanDataMapperTest.java @@ -1,7 +1,6 @@ package dev.pcvolkmer.onco.datamapper.mapper; -import dev.pcvolkmer.mv64e.mtb.MtbCarePlan; -import dev.pcvolkmer.mv64e.mtb.Reference; +import dev.pcvolkmer.mv64e.mtb.*; import dev.pcvolkmer.onco.datamapper.PropertyCatalogue; import dev.pcvolkmer.onco.datamapper.ResultSet; import dev.pcvolkmer.onco.datamapper.datacatalogues.EinzelempfehlungCatalogue; @@ -75,4 +74,56 @@ class TherapieplanDataMapperTest { assertThat(actual.getNotes().get(0)).isEqualTo("Das ist ein Protokollauszug"); } + @Test + void shouldSetRecommendationsMissingReason() { + final Map testData = Map.of( + "id", 1, + "patient_id", 42, + "status_begruendung", "no-target" + ); + + doAnswer(invocationOnMock -> ResultSet.from(testData)) + .when(therapieplanCatalogue) + .getById(anyInt()); + + var actual = this.dataMapper.getById(1); + assertThat(actual).isInstanceOf(MtbCarePlan.class); + assertThat(actual.getId()).isEqualTo("1"); + + assertThat(actual.getRecommendationsMissingReason()) + .isEqualTo( + MtbCarePlanRecommendationsMissingReasonCoding.builder() + .code(MtbCarePlanRecommendationsMissingReasonCodingCode.NO_TARGET) + .build() + ); + + assertThat(actual.getNoSequencingPerformedReason()).isNull(); + } + + @Test + void shouldSetNoSequencingPerformedReason() { + final Map testData = Map.of( + "id", 1, + "patient_id", 42, + "status_begruendung", "non-genetic-cause" + ); + + doAnswer(invocationOnMock -> ResultSet.from(testData)) + .when(therapieplanCatalogue) + .getById(anyInt()); + + var actual = this.dataMapper.getById(1); + assertThat(actual).isInstanceOf(MtbCarePlan.class); + assertThat(actual.getId()).isEqualTo("1"); + + assertThat(actual.getRecommendationsMissingReason()).isNull(); + + + assertThat(actual.getNoSequencingPerformedReason()).isEqualTo( + CarePlanNoSequencingPerformedReasonCoding.builder() + .code(NoSequencingPerformedReasonCode.NON_GENETIC_CAUSE) + .build() + ); + } + }