mirror of
https://github.com/pcvolkmer/mv64e-onkostar-data.git
synced 2025-09-13 16:02:52 +00:00
fix: add some filters and cleanups
This commit is contained in:
@@ -131,6 +131,8 @@ public class ResultSet {
|
|||||||
return null;
|
return null;
|
||||||
} else if (raw instanceof Integer) {
|
} else if (raw instanceof Integer) {
|
||||||
return ((Integer) raw).longValue();
|
return ((Integer) raw).longValue();
|
||||||
|
} else if (raw instanceof Double) {
|
||||||
|
return ((Double) raw).longValue();
|
||||||
} else if (raw instanceof Long) {
|
} else if (raw instanceof Long) {
|
||||||
return ((Long) raw);
|
return ((Long) raw);
|
||||||
}
|
}
|
||||||
|
@@ -54,7 +54,7 @@ public abstract class AbstractDataCatalogue implements DataCatalogue {
|
|||||||
public ResultSet getById(int id) {
|
public ResultSet getById(int id) {
|
||||||
var result = this.jdbcTemplate.queryForList(
|
var result = this.jdbcTemplate.queryForList(
|
||||||
String.format(
|
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(),
|
getTableName(),
|
||||||
getTableName()
|
getTableName()
|
||||||
|
@@ -51,7 +51,7 @@ public abstract class AbstractSubformDataCatalogue extends AbstractDataCatalogue
|
|||||||
public List<ResultSet> getAllByParentId(int id) {
|
public List<ResultSet> getAllByParentId(int id) {
|
||||||
return this.jdbcTemplate.queryForList(
|
return this.jdbcTemplate.queryForList(
|
||||||
String.format(
|
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(),
|
getTableName(),
|
||||||
getTableName()
|
getTableName()
|
||||||
|
@@ -212,4 +212,23 @@ public abstract class AbstractEinzelempfehlungDataMapper<T> extends AbstractSubf
|
|||||||
|
|
||||||
return resultBuilder.build();
|
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;
|
package dev.pcvolkmer.onco.datamapper.mapper;
|
||||||
|
|
||||||
import dev.pcvolkmer.mv64e.mtb.MtbProcedureRecommendationCategoryCoding;
|
import dev.pcvolkmer.mv64e.mtb.*;
|
||||||
import dev.pcvolkmer.mv64e.mtb.MtbProcedureRecommendationCategoryCodingCode;
|
|
||||||
import dev.pcvolkmer.mv64e.mtb.ProcedureRecommendation;
|
|
||||||
import dev.pcvolkmer.mv64e.mtb.Reference;
|
|
||||||
import dev.pcvolkmer.onco.datamapper.ResultSet;
|
import dev.pcvolkmer.onco.datamapper.ResultSet;
|
||||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.EinzelempfehlungCatalogue;
|
import dev.pcvolkmer.onco.datamapper.datacatalogues.EinzelempfehlungCatalogue;
|
||||||
|
|
||||||
@@ -49,6 +46,7 @@ public class EinzelempfehlungProzedurDataMapper extends AbstractEinzelempfehlung
|
|||||||
var resultBuilder = ProcedureRecommendation.builder()
|
var resultBuilder = ProcedureRecommendation.builder()
|
||||||
.id(resultSet.getString("id"))
|
.id(resultSet.getString("id"))
|
||||||
.patient(resultSet.getPatientReference())
|
.patient(resultSet.getPatientReference())
|
||||||
|
.priority(getRecommendationPriorityCoding(resultSet.getInteger("prio")))
|
||||||
// TODO Fix id?
|
// TODO Fix id?
|
||||||
.reason(Reference.builder().id(resultSet.getString("id")).build())
|
.reason(Reference.builder().id(resultSet.getString("id")).build())
|
||||||
.issuedOn(resultSet.getDate("datum"))
|
.issuedOn(resultSet.getDate("datum"))
|
||||||
|
@@ -45,15 +45,10 @@ public class EinzelempfehlungStudieDataMapper extends AbstractEinzelempfehlungDa
|
|||||||
var resultBuilder = MtbStudyEnrollmentRecommendation.builder()
|
var resultBuilder = MtbStudyEnrollmentRecommendation.builder()
|
||||||
.id(resultSet.getString("id"))
|
.id(resultSet.getString("id"))
|
||||||
.patient(resultSet.getPatientReference())
|
.patient(resultSet.getPatientReference())
|
||||||
|
.priority(getRecommendationPriorityCoding(resultSet.getInteger("prio")))
|
||||||
// TODO Fix id?
|
// TODO Fix id?
|
||||||
.reason(Reference.builder().id(resultSet.getString("id")).build())
|
.reason(Reference.builder().id(resultSet.getString("id")).build())
|
||||||
.issuedOn(resultSet.getDate("datum"))
|
.issuedOn(resultSet.getDate("datum"))
|
||||||
.priority(
|
|
||||||
getRecommendationPriorityCoding(
|
|
||||||
resultSet.getString("evidenzlevel"),
|
|
||||||
resultSet.getInteger("evidenzlevel_propcat_version")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.medication(JsonToMedicationMapper.map(resultSet.getString("wirkstoffe_json")))
|
.medication(JsonToMedicationMapper.map(resultSet.getString("wirkstoffe_json")))
|
||||||
.levelOfEvidence(getLevelOfEvidence(resultSet))
|
.levelOfEvidence(getLevelOfEvidence(resultSet))
|
||||||
.study(JsonToStudyMapper.map(resultSet.getString("studien_alle_json")));
|
.study(JsonToStudyMapper.map(resultSet.getString("studien_alle_json")));
|
||||||
|
@@ -53,15 +53,10 @@ public class EinzelempfehlungWirkstoffDataMapper extends AbstractEinzelempfehlun
|
|||||||
var resultBuilder = MtbMedicationRecommendation.builder()
|
var resultBuilder = MtbMedicationRecommendation.builder()
|
||||||
.id(resultSet.getString("id"))
|
.id(resultSet.getString("id"))
|
||||||
.patient(resultSet.getPatientReference())
|
.patient(resultSet.getPatientReference())
|
||||||
|
.priority(getRecommendationPriorityCoding(resultSet.getInteger("prio")))
|
||||||
// TODO Fix id?
|
// TODO Fix id?
|
||||||
.reason(Reference.builder().id(resultSet.getString("id")).build())
|
.reason(Reference.builder().id(resultSet.getString("id")).build())
|
||||||
.issuedOn(resultSet.getDate("datum"))
|
.issuedOn(resultSet.getDate("datum"))
|
||||||
.priority(
|
|
||||||
getRecommendationPriorityCoding(
|
|
||||||
resultSet.getString("evidenzlevel"),
|
|
||||||
resultSet.getInteger("evidenzlevel_propcat_version")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.medication(JsonToMedicationMapper.map(resultSet.getString("wirkstoffe_json")))
|
.medication(JsonToMedicationMapper.map(resultSet.getString("wirkstoffe_json")))
|
||||||
.levelOfEvidence(getLevelOfEvidence(resultSet));
|
.levelOfEvidence(getLevelOfEvidence(resultSet));
|
||||||
|
|
||||||
|
@@ -22,6 +22,7 @@ package dev.pcvolkmer.onco.datamapper.mapper;
|
|||||||
|
|
||||||
import dev.pcvolkmer.mv64e.mtb.*;
|
import dev.pcvolkmer.mv64e.mtb.*;
|
||||||
import dev.pcvolkmer.onco.datamapper.PropertyCatalogue;
|
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.KpaCatalogue;
|
||||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.TumorausbreitungCatalogue;
|
import dev.pcvolkmer.onco.datamapper.datacatalogues.TumorausbreitungCatalogue;
|
||||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.TumorgradingCatalogue;
|
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())
|
.version(propertyCatalogue.getByCodeAndVersion(data.getString("icd10"), data.getInteger("icd10_propcat_version")).getVersionDescription())
|
||||||
.build()
|
.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
|
// Nicht in Onkostar erfasst
|
||||||
//.germlineCodes()
|
//.germlineCodes()
|
||||||
.guidelineTreatmentStatus(
|
.guidelineTreatmentStatus(
|
||||||
@@ -168,4 +171,29 @@ public class KpaDiagnosisDataMapper implements DataMapper<MtbDiagnosis> {
|
|||||||
|
|
||||||
return Staging.builder().history(all).build();
|
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())
|
.patient(resultSet.getPatientReference())
|
||||||
.specimen(Reference.builder().id(osMolGen.getId().toString()).type("Specimen").build())
|
.specimen(Reference.builder().id(osMolGen.getId().toString()).type("Specimen").build())
|
||||||
.value(resultSet.getLong("tumorzellgehalt"))
|
.value(resultSet.getLong("tumorzellgehalt"))
|
||||||
// Nicht in OS.Molekulargenetik
|
// TODO: Nicht in OS.Molekulargenetik
|
||||||
//.method()
|
.method(TumorCellContentMethodCoding.builder().code(TumorCellContentMethodCodingCode.HISTOLOGIC).build())
|
||||||
.build()
|
.build()
|
||||||
)
|
)
|
||||||
.tumorMorphology(
|
.tumorMorphology(
|
||||||
|
@@ -96,18 +96,20 @@ public class KpaMolekulargenetikDataMapper implements DataMapper<SomaticNgsRepor
|
|||||||
|
|
||||||
var resultBuilder = NgsReportResults.builder();
|
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!
|
// In Würzburg immer histologisch!
|
||||||
/*if (null != resultSet.getLong("tumorzellgehalt")) {
|
if (null != resultSet.getLong("tumorzellgehalt")) {
|
||||||
resultBuilder.tumorCellContent(
|
resultBuilder.tumorCellContent(
|
||||||
TumorCellContent.builder()
|
TumorCellContent.builder()
|
||||||
.id(resultSet.getId().toString())
|
.id(resultSet.getId().toString())
|
||||||
.patient(resultSet.getPatientReference())
|
.patient(resultSet.getPatientReference())
|
||||||
.specimen(Reference.builder().id(resultSet.getString("einsendenummer")).type("Specimen").build())
|
.specimen(Reference.builder().id(resultSet.getString("einsendenummer")).type("Specimen").build())
|
||||||
.value(resultSet.getLong("tumorzellgehalt"))
|
.value(resultSet.getLong("tumorzellgehalt"))
|
||||||
|
// TODO: Missing in OS.Molekulargenetik
|
||||||
|
.method(TumorCellContentMethodCoding.builder().code(TumorCellContentMethodCodingCode.HISTOLOGIC).build())
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
}*/
|
}
|
||||||
|
|
||||||
resultBuilder.simpleVariants(
|
resultBuilder.simpleVariants(
|
||||||
subforms.stream()
|
subforms.stream()
|
||||||
@@ -123,6 +125,7 @@ public class KpaMolekulargenetikDataMapper implements DataMapper<SomaticNgsRepor
|
|||||||
.id(subform.getString("id"))
|
.id(subform.getString("id"))
|
||||||
.patient(subform.getPatientReference())
|
.patient(subform.getPatientReference())
|
||||||
.gene(GeneUtils.toCoding(geneOptional.get()))
|
.gene(GeneUtils.toCoding(geneOptional.get()))
|
||||||
|
.transcriptId(TranscriptId.builder().value(geneOptional.get().getEnsemblId()).system(TranscriptIdSystem.ENSEMBL_ORG).build())
|
||||||
.exonId(subform.getString("exon"))
|
.exonId(subform.getString("exon"))
|
||||||
.dnaChange(subform.getString("cdnanomenklatur"))
|
.dnaChange(subform.getString("cdnanomenklatur"))
|
||||||
.proteinChange(subform.getString("proteinebenenomenklatur"));
|
.proteinChange(subform.getString("proteinebenenomenklatur"));
|
||||||
@@ -133,10 +136,19 @@ public class KpaMolekulargenetikDataMapper implements DataMapper<SomaticNgsRepor
|
|||||||
if (null != subform.getLong("evreaddepth")) {
|
if (null != subform.getLong("evreaddepth")) {
|
||||||
snvBuilder.readDepth(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);
|
geneOptional.get().getSingleChromosomeInPropertyForm().ifPresent(snvBuilder::chromosome);
|
||||||
|
|
||||||
return snvBuilder.build();
|
return snvBuilder.build();
|
||||||
})
|
})
|
||||||
|
// TODO: Filter missing position, altAllele, refAllele
|
||||||
|
.filter(snv -> snv.getPosition() != null && snv.getAltAllele() != null && snv.getRefAllele() != null)
|
||||||
.collect(Collectors.toList())
|
.collect(Collectors.toList())
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@@ -28,6 +28,7 @@ import dev.pcvolkmer.onco.datamapper.ResultSet;
|
|||||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.ProzedurCatalogue;
|
import dev.pcvolkmer.onco.datamapper.datacatalogues.ProzedurCatalogue;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mapper class to load and map prozedur data from database table 'dk_dnpm_uf_prozedur'
|
* 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);
|
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
|
@Override
|
||||||
protected OncoProcedure map(final ResultSet resultSet) {
|
protected OncoProcedure map(final ResultSet resultSet) {
|
||||||
var diseases = catalogue.getDiseases(resultSet.getId());
|
var diseases = catalogue.getDiseases(resultSet.getId());
|
||||||
|
Reference in New Issue
Block a user