mirror of
https://github.com/pcvolkmer/mv64e-onkostar-data.git
synced 2025-09-13 07:52:52 +00:00
fix: add some filters and cleanups
This commit is contained in:
@@ -131,6 +131,8 @@ public class ResultSet {
|
||||
return null;
|
||||
} else if (raw instanceof Integer) {
|
||||
return ((Integer) raw).longValue();
|
||||
} else if (raw instanceof Double) {
|
||||
return ((Double) raw).longValue();
|
||||
} else if (raw instanceof Long) {
|
||||
return ((Long) raw);
|
||||
}
|
||||
|
@@ -54,7 +54,7 @@ public abstract class AbstractDataCatalogue implements DataCatalogue {
|
||||
public ResultSet getById(int id) {
|
||||
var result = this.jdbcTemplate.queryForList(
|
||||
String.format(
|
||||
"SELECT patient.patienten_id, %s.*, prozedur.* FROM %s JOIN prozedur ON (prozedur.id = %s.id) JOIN patient ON (patient.id = prozedur.patient_id) WHERE geloescht = 0 AND prozedur.id = ?",
|
||||
"SELECT patient.patienten_id, %s.*, prozedur.patient_id, prozedur.hauptprozedur_id FROM %s JOIN prozedur ON (prozedur.id = %s.id) JOIN patient ON (patient.id = prozedur.patient_id) WHERE geloescht = 0 AND prozedur.id = ?",
|
||||
getTableName(),
|
||||
getTableName(),
|
||||
getTableName()
|
||||
|
@@ -51,7 +51,7 @@ public abstract class AbstractSubformDataCatalogue extends AbstractDataCatalogue
|
||||
public List<ResultSet> getAllByParentId(int id) {
|
||||
return this.jdbcTemplate.queryForList(
|
||||
String.format(
|
||||
"SELECT patient.patienten_id, %s.*, prozedur.* FROM %s JOIN prozedur ON (prozedur.id = %s.id) JOIN patient ON (patient.id = prozedur.patient_id) WHERE geloescht = 0 AND hauptprozedur_id = ?",
|
||||
"SELECT patient.patienten_id, %s.*, prozedur.patient_id, prozedur.hauptprozedur_id FROM %s JOIN prozedur ON (prozedur.id = %s.id) JOIN patient ON (patient.id = prozedur.patient_id) WHERE geloescht = 0 AND hauptprozedur_id = ?",
|
||||
getTableName(),
|
||||
getTableName(),
|
||||
getTableName()
|
||||
|
@@ -212,4 +212,23 @@ public abstract class AbstractEinzelempfehlungDataMapper<T> extends AbstractSubf
|
||||
|
||||
return resultBuilder.build();
|
||||
}
|
||||
|
||||
protected RecommendationPriorityCoding getRecommendationPriorityCoding(int value) {
|
||||
var resultBuilder = RecommendationPriorityCoding.builder()
|
||||
.system("dnpm-dip/recommendation/priority")
|
||||
.display(String.format("%d", value));
|
||||
switch (value) {
|
||||
case 1:
|
||||
resultBuilder.code(RecommendationPriorityCodingCode.CODE_1);
|
||||
case 2:
|
||||
resultBuilder.code(RecommendationPriorityCodingCode.CODE_3);
|
||||
case 3:
|
||||
resultBuilder.code(RecommendationPriorityCodingCode.CODE_3);
|
||||
case 4:
|
||||
default:
|
||||
resultBuilder.code(RecommendationPriorityCodingCode.CODE_4);
|
||||
}
|
||||
|
||||
return resultBuilder.build();
|
||||
}
|
||||
}
|
||||
|
@@ -20,10 +20,7 @@
|
||||
|
||||
package dev.pcvolkmer.onco.datamapper.mapper;
|
||||
|
||||
import dev.pcvolkmer.mv64e.mtb.MtbProcedureRecommendationCategoryCoding;
|
||||
import dev.pcvolkmer.mv64e.mtb.MtbProcedureRecommendationCategoryCodingCode;
|
||||
import dev.pcvolkmer.mv64e.mtb.ProcedureRecommendation;
|
||||
import dev.pcvolkmer.mv64e.mtb.Reference;
|
||||
import dev.pcvolkmer.mv64e.mtb.*;
|
||||
import dev.pcvolkmer.onco.datamapper.ResultSet;
|
||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.EinzelempfehlungCatalogue;
|
||||
|
||||
@@ -49,6 +46,7 @@ public class EinzelempfehlungProzedurDataMapper extends AbstractEinzelempfehlung
|
||||
var resultBuilder = ProcedureRecommendation.builder()
|
||||
.id(resultSet.getString("id"))
|
||||
.patient(resultSet.getPatientReference())
|
||||
.priority(getRecommendationPriorityCoding(resultSet.getInteger("prio")))
|
||||
// TODO Fix id?
|
||||
.reason(Reference.builder().id(resultSet.getString("id")).build())
|
||||
.issuedOn(resultSet.getDate("datum"))
|
||||
|
@@ -45,15 +45,10 @@ public class EinzelempfehlungStudieDataMapper extends AbstractEinzelempfehlungDa
|
||||
var resultBuilder = MtbStudyEnrollmentRecommendation.builder()
|
||||
.id(resultSet.getString("id"))
|
||||
.patient(resultSet.getPatientReference())
|
||||
.priority(getRecommendationPriorityCoding(resultSet.getInteger("prio")))
|
||||
// TODO Fix id?
|
||||
.reason(Reference.builder().id(resultSet.getString("id")).build())
|
||||
.issuedOn(resultSet.getDate("datum"))
|
||||
.priority(
|
||||
getRecommendationPriorityCoding(
|
||||
resultSet.getString("evidenzlevel"),
|
||||
resultSet.getInteger("evidenzlevel_propcat_version")
|
||||
)
|
||||
)
|
||||
.medication(JsonToMedicationMapper.map(resultSet.getString("wirkstoffe_json")))
|
||||
.levelOfEvidence(getLevelOfEvidence(resultSet))
|
||||
.study(JsonToStudyMapper.map(resultSet.getString("studien_alle_json")));
|
||||
|
@@ -53,15 +53,10 @@ public class EinzelempfehlungWirkstoffDataMapper extends AbstractEinzelempfehlun
|
||||
var resultBuilder = MtbMedicationRecommendation.builder()
|
||||
.id(resultSet.getString("id"))
|
||||
.patient(resultSet.getPatientReference())
|
||||
.priority(getRecommendationPriorityCoding(resultSet.getInteger("prio")))
|
||||
// TODO Fix id?
|
||||
.reason(Reference.builder().id(resultSet.getString("id")).build())
|
||||
.issuedOn(resultSet.getDate("datum"))
|
||||
.priority(
|
||||
getRecommendationPriorityCoding(
|
||||
resultSet.getString("evidenzlevel"),
|
||||
resultSet.getInteger("evidenzlevel_propcat_version")
|
||||
)
|
||||
)
|
||||
.medication(JsonToMedicationMapper.map(resultSet.getString("wirkstoffe_json")))
|
||||
.levelOfEvidence(getLevelOfEvidence(resultSet));
|
||||
|
||||
|
@@ -22,6 +22,7 @@ package dev.pcvolkmer.onco.datamapper.mapper;
|
||||
|
||||
import dev.pcvolkmer.mv64e.mtb.*;
|
||||
import dev.pcvolkmer.onco.datamapper.PropertyCatalogue;
|
||||
import dev.pcvolkmer.onco.datamapper.ResultSet;
|
||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.KpaCatalogue;
|
||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.TumorausbreitungCatalogue;
|
||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.TumorgradingCatalogue;
|
||||
@@ -79,7 +80,9 @@ public class KpaDiagnosisDataMapper implements DataMapper<MtbDiagnosis> {
|
||||
.version(propertyCatalogue.getByCodeAndVersion(data.getString("icd10"), data.getInteger("icd10_propcat_version")).getVersionDescription())
|
||||
.build()
|
||||
)
|
||||
.topography(Coding.builder().code(data.getString("icdo3localisation")).build())
|
||||
.recordedOn(data.getDate("datumerstdiagnose"))
|
||||
.topography(Coding.builder().code(data.getString("icdo3lokalisation")).build())
|
||||
.type(getType(data))
|
||||
// Nicht in Onkostar erfasst
|
||||
//.germlineCodes()
|
||||
.guidelineTreatmentStatus(
|
||||
@@ -168,4 +171,29 @@ public class KpaDiagnosisDataMapper implements DataMapper<MtbDiagnosis> {
|
||||
|
||||
return Staging.builder().history(all).build();
|
||||
}
|
||||
|
||||
private Type getType(final ResultSet resultSet) {
|
||||
var diagnosisCoding = MtbDiagnosisCoding.builder();
|
||||
var code = resultSet.getString("diagnosetyp");
|
||||
if (code == null || !Arrays.stream(ValueCode.values()).map(ValueCode::toValue).collect(Collectors.toSet()).contains(code)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
diagnosisCoding.code(ValueCode.forValue(code));
|
||||
} catch (IOException e) {
|
||||
throw new IllegalStateException("No valid code found");
|
||||
}
|
||||
|
||||
return Type.builder()
|
||||
.history(
|
||||
List.of(
|
||||
History.builder()
|
||||
.date(resultSet.getDate("datumerstdiagnose"))
|
||||
.value(diagnosisCoding.build())
|
||||
.build()
|
||||
)
|
||||
)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
@@ -93,8 +93,8 @@ public class KpaHistologieDataMapper extends AbstractSubformDataMapper<Histology
|
||||
.patient(resultSet.getPatientReference())
|
||||
.specimen(Reference.builder().id(osMolGen.getId().toString()).type("Specimen").build())
|
||||
.value(resultSet.getLong("tumorzellgehalt"))
|
||||
// Nicht in OS.Molekulargenetik
|
||||
//.method()
|
||||
// TODO: Nicht in OS.Molekulargenetik
|
||||
.method(TumorCellContentMethodCoding.builder().code(TumorCellContentMethodCodingCode.HISTOLOGIC).build())
|
||||
.build()
|
||||
)
|
||||
.tumorMorphology(
|
||||
|
@@ -96,18 +96,20 @@ public class KpaMolekulargenetikDataMapper implements DataMapper<SomaticNgsRepor
|
||||
|
||||
var resultBuilder = NgsReportResults.builder();
|
||||
|
||||
// TODO: Aktuell nicht eingebunden, da Fehler, wenn nicht bioinformatisch gemäß: https://ibmi-ut.atlassian.net/wiki/spaces/DAM/pages/698777783/ Zeile 144!
|
||||
// TODO: Aktuell problematisch, wenn nicht bioinformatisch gemäß: https://ibmi-ut.atlassian.net/wiki/spaces/DAM/pages/698777783/ Zeile 144!
|
||||
// In Würzburg immer histologisch!
|
||||
/*if (null != resultSet.getLong("tumorzellgehalt")) {
|
||||
if (null != resultSet.getLong("tumorzellgehalt")) {
|
||||
resultBuilder.tumorCellContent(
|
||||
TumorCellContent.builder()
|
||||
.id(resultSet.getId().toString())
|
||||
.patient(resultSet.getPatientReference())
|
||||
.specimen(Reference.builder().id(resultSet.getString("einsendenummer")).type("Specimen").build())
|
||||
.value(resultSet.getLong("tumorzellgehalt"))
|
||||
// TODO: Missing in OS.Molekulargenetik
|
||||
.method(TumorCellContentMethodCoding.builder().code(TumorCellContentMethodCodingCode.HISTOLOGIC).build())
|
||||
.build()
|
||||
);
|
||||
}*/
|
||||
}
|
||||
|
||||
resultBuilder.simpleVariants(
|
||||
subforms.stream()
|
||||
@@ -123,6 +125,7 @@ public class KpaMolekulargenetikDataMapper implements DataMapper<SomaticNgsRepor
|
||||
.id(subform.getString("id"))
|
||||
.patient(subform.getPatientReference())
|
||||
.gene(GeneUtils.toCoding(geneOptional.get()))
|
||||
.transcriptId(TranscriptId.builder().value(geneOptional.get().getEnsemblId()).system(TranscriptIdSystem.ENSEMBL_ORG).build())
|
||||
.exonId(subform.getString("exon"))
|
||||
.dnaChange(subform.getString("cdnanomenklatur"))
|
||||
.proteinChange(subform.getString("proteinebenenomenklatur"));
|
||||
@@ -133,10 +136,19 @@ public class KpaMolekulargenetikDataMapper implements DataMapper<SomaticNgsRepor
|
||||
if (null != subform.getLong("evreaddepth")) {
|
||||
snvBuilder.readDepth(subform.getLong("evreaddepth"));
|
||||
}
|
||||
if (null != subform.getString("evaltnucleotide")) {
|
||||
snvBuilder.altAllele(subform.getString("evaltnucleotide"));
|
||||
}
|
||||
if (null != subform.getString("evrefnucleotide")) {
|
||||
snvBuilder.altAllele(subform.getString("evrefnucleotide"));
|
||||
}
|
||||
|
||||
geneOptional.get().getSingleChromosomeInPropertyForm().ifPresent(snvBuilder::chromosome);
|
||||
|
||||
return snvBuilder.build();
|
||||
})
|
||||
// TODO: Filter missing position, altAllele, refAllele
|
||||
.filter(snv -> snv.getPosition() != null && snv.getAltAllele() != null && snv.getRefAllele() != null)
|
||||
.collect(Collectors.toList())
|
||||
);
|
||||
|
||||
|
@@ -28,6 +28,7 @@ import dev.pcvolkmer.onco.datamapper.ResultSet;
|
||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.ProzedurCatalogue;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Mapper class to load and map prozedur data from database table 'dk_dnpm_uf_prozedur'
|
||||
@@ -53,6 +54,12 @@ public class KpaProzedurDataMapper extends AbstractKpaTherapieverlaufDataMapper<
|
||||
return this.map(data);
|
||||
}
|
||||
|
||||
// TODO: Fix for DNPM:DIP verification that does not accept procedures without reason.id
|
||||
@Override
|
||||
public List<OncoProcedure> getByParentId(final int id) {
|
||||
return super.getByParentId(id).stream().filter(p -> p.getReason() != null && p.getReason().getId() != null).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected OncoProcedure map(final ResultSet resultSet) {
|
||||
var diseases = catalogue.getDiseases(resultSet.getId());
|
||||
|
Reference in New Issue
Block a user