diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/ResultSet.java b/src/main/java/dev/pcvolkmer/onco/datamapper/ResultSet.java index b7ea5be..329a78b 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/ResultSet.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/ResultSet.java @@ -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); } diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/AbstractDataCatalogue.java b/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/AbstractDataCatalogue.java index a487c97..ed4dd27 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/AbstractDataCatalogue.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/AbstractDataCatalogue.java @@ -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() diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/AbstractSubformDataCatalogue.java b/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/AbstractSubformDataCatalogue.java index 7f2a598..c93743d 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/AbstractSubformDataCatalogue.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/AbstractSubformDataCatalogue.java @@ -51,7 +51,7 @@ public abstract class AbstractSubformDataCatalogue extends AbstractDataCatalogue public List 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() diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/AbstractEinzelempfehlungDataMapper.java b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/AbstractEinzelempfehlungDataMapper.java index 3cb46b3..a534ccb 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/AbstractEinzelempfehlungDataMapper.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/AbstractEinzelempfehlungDataMapper.java @@ -212,4 +212,23 @@ public abstract class AbstractEinzelempfehlungDataMapper 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(); + } } diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/EinzelempfehlungProzedurDataMapper.java b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/EinzelempfehlungProzedurDataMapper.java index 6facb17..1136e89 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/EinzelempfehlungProzedurDataMapper.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/EinzelempfehlungProzedurDataMapper.java @@ -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")) diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/EinzelempfehlungStudieDataMapper.java b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/EinzelempfehlungStudieDataMapper.java index efc3a1d..16da0cc 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/EinzelempfehlungStudieDataMapper.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/EinzelempfehlungStudieDataMapper.java @@ -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"))); diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/EinzelempfehlungWirkstoffDataMapper.java b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/EinzelempfehlungWirkstoffDataMapper.java index 5276f19..33b2a15 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/EinzelempfehlungWirkstoffDataMapper.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/EinzelempfehlungWirkstoffDataMapper.java @@ -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)); diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaDiagnosisDataMapper.java b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaDiagnosisDataMapper.java index 6f18eac..fd391d1 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaDiagnosisDataMapper.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaDiagnosisDataMapper.java @@ -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 { .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 { 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(); + } } diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaHistologieDataMapper.java b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaHistologieDataMapper.java index afef183..b1a67fa 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaHistologieDataMapper.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaHistologieDataMapper.java @@ -93,8 +93,8 @@ public class KpaHistologieDataMapper extends AbstractSubformDataMapper snv.getPosition() != null && snv.getAltAllele() != null && snv.getRefAllele() != null) .collect(Collectors.toList()) ); diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaProzedurDataMapper.java b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaProzedurDataMapper.java index b4709bd..c31571a 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaProzedurDataMapper.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaProzedurDataMapper.java @@ -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 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());