1
0
mirror of https://github.com/pcvolkmer/mv64e-onkostar-data.git synced 2025-09-13 07:52:52 +00:00

feat: support for multiple choice fields

This commit is contained in:
2025-07-06 14:02:06 +02:00
parent 1c0558c29a
commit 87396e692e
4 changed files with 68 additions and 8 deletions

View File

@@ -26,6 +26,7 @@ import dev.pcvolkmer.onco.datamapper.exceptions.DataAccessException;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.ZoneId; import java.time.ZoneId;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@@ -183,4 +184,23 @@ public class ResultSet {
throw new IllegalArgumentException("Cannot convert " + raw.getClass() + " to Boolean"); throw new IllegalArgumentException("Cannot convert " + raw.getClass() + " to Boolean");
} }
/**
* Get Merkmal values as List of Strings
*
* @param columnName The name of the column
* @return The related Merkmal value(s) as List of Strings
*/
@SuppressWarnings("unchecked")
public List<String> getMerkmalList(String columnName) {
var raw = this.rawData.get(columnName);
if (raw == null) {
return List.of();
} else if (raw instanceof List) {
return (List<String>) raw;
}
throw new IllegalArgumentException("Cannot get " + columnName + " as List of Strings");
}
} }

View File

@@ -21,9 +21,11 @@
package dev.pcvolkmer.onco.datamapper.datacatalogues; package dev.pcvolkmer.onco.datamapper.datacatalogues;
import dev.pcvolkmer.onco.datamapper.ResultSet; import dev.pcvolkmer.onco.datamapper.ResultSet;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -56,8 +58,45 @@ public abstract class AbstractSubformDataCatalogue extends AbstractDataCatalogue
), ),
id) id)
.stream() .stream()
.filter(resultSet -> resultSet.containsKey("id"))
.map(ResultSet::from) .map(ResultSet::from)
.peek(resultSet -> {
var merkmale = getMerkmaleById(resultSet.getId());
if (merkmale.isEmpty()) {
return;
}
merkmale.forEach((key, value) ->
resultSet.getRawData().put(key, value)
);
})
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
/**
* Get procedure "Merkmale" result by procedure id and form field name
*
* @param id The parents procedure id
* @return The sub procedures
*/
Map<String, List<String>> getMerkmaleById(int id) {
try {
var resultSet = this.jdbcTemplate.queryForList(
String.format(
"SELECT feldname, feldwert FROM %s_merkmale WHERE eintrag_id = ?",
getTableName()
),
id);
return resultSet.stream()
.collect(
Collectors.groupingBy(
m -> m.get("feldname").toString(),
Collectors.mapping(stringObjectMap -> stringObjectMap.get("feldwert").toString(), Collectors.toList())
)
);
} catch (DataAccessException e) {
return Map.of();
}
}
} }

View File

@@ -63,10 +63,11 @@ public class EinzelempfehlungProzedurDataMapper extends AbstractEinzelempfehlung
); );
} }
if (null != resultSet.getString("art_der_therapie")) { // Nur der erste Eintrag!
if (!resultSet.getMerkmalList("art_der_therapie").isEmpty()) {
resultBuilder.code( resultBuilder.code(
getMtbProcedureRecommendationCategoryCoding( getMtbProcedureRecommendationCategoryCoding(
resultSet.getString("art_der_therapie"), resultSet.getMerkmalList("art_der_therapie").get(0),
resultSet.getInteger("art_der_therapie_propcat_version") resultSet.getInteger("art_der_therapie_propcat_version")
) )
); );
@@ -92,7 +93,6 @@ public class EinzelempfehlungProzedurDataMapper extends AbstractEinzelempfehlung
return catalogue.getAllByParentId(parentId) return catalogue.getAllByParentId(parentId)
.stream() .stream()
// Filter Prozedurempfehlung (Weitere Empfehlungen) // Filter Prozedurempfehlung (Weitere Empfehlungen)
.filter(it -> it.getString("art_der_therapie") != null && !it.getString("art_der_therapie").isBlank())
.filter(it -> "sonstige".equals(it.getString("empfehlungskategorie"))) .filter(it -> "sonstige".equals(it.getString("empfehlungskategorie")))
.map(this::map) .map(this::map)
.collect(Collectors.toList()); .collect(Collectors.toList());

View File

@@ -65,12 +65,13 @@ public class EinzelempfehlungWirkstoffDataMapper extends AbstractEinzelempfehlun
.medication(JsonToMedicationMapper.map(resultSet.getString("wirkstoffe_json"))) .medication(JsonToMedicationMapper.map(resultSet.getString("wirkstoffe_json")))
.levelOfEvidence(getLevelOfEvidence(resultSet)); .levelOfEvidence(getLevelOfEvidence(resultSet));
if (null != resultSet.getString("art_der_therapie")) { if (!resultSet.getMerkmalList("art_der_therapie").isEmpty()) {
resultBuilder.category( resultBuilder.category(
getMtbMedicationRecommendationCategoryCoding( resultSet.getMerkmalList("art_der_therapie").stream()
resultSet.getString("art_der_therapie"), .map(value ->
resultSet.getInteger("art_der_therapie_propcat_version") getMtbMedicationRecommendationCategoryCoding(value, resultSet.getInteger("art_der_therapie_propcat_version"))
) )
.collect(Collectors.toList())
); );
} }