mirror of
https://github.com/pcvolkmer/mv64e-onkostar-data.git
synced 2025-07-02 02:22:54 +00:00
feat: add Evidenzlevel
This commit is contained in:
@ -0,0 +1,175 @@
|
||||
package dev.pcvolkmer.onco.datamapper.mapper;
|
||||
|
||||
import dev.pcvolkmer.mv64e.mtb.*;
|
||||
import dev.pcvolkmer.onco.datamapper.ResultSet;
|
||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.EinzelempfehlungCatalogue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public abstract class AbstractEinzelempfehlungDataMapper<T> extends AbstractSubformDataMapper<T> {
|
||||
|
||||
private static final String GRADING_SYSTEM = "dnpm-dip/mtb/level-of-evidence/grading";
|
||||
private static final String ADDENDUM_SYSTEM = "dnpm-dip/mtb/level-of-evidence/addendum";
|
||||
|
||||
protected AbstractEinzelempfehlungDataMapper(EinzelempfehlungCatalogue einzelempfehlungCatalogue) {
|
||||
super(einzelempfehlungCatalogue);
|
||||
}
|
||||
|
||||
protected LevelOfEvidence getLevelOfEvidence(ResultSet resultSet) {
|
||||
if (resultSet == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var resultBuilder = LevelOfEvidence.builder();
|
||||
|
||||
var evidenzlevel = resultSet.getString("evidenzlevel");
|
||||
if (evidenzlevel != null) {
|
||||
switch (evidenzlevel) {
|
||||
case "1":
|
||||
resultBuilder.grading(
|
||||
LevelOfEvidenceGradingCoding.builder()
|
||||
.code(LevelOfEvidenceGradingCodingCode.M1A)
|
||||
.display(LevelOfEvidenceGradingCodingCode.M1A.toValue())
|
||||
.system(GRADING_SYSTEM)
|
||||
.build()
|
||||
);
|
||||
break;
|
||||
case "2":
|
||||
resultBuilder.grading(
|
||||
LevelOfEvidenceGradingCoding.builder()
|
||||
.code(LevelOfEvidenceGradingCodingCode.M1B)
|
||||
.display(LevelOfEvidenceGradingCodingCode.M1B.toValue())
|
||||
.system(GRADING_SYSTEM)
|
||||
.build()
|
||||
);
|
||||
break;
|
||||
case "3":
|
||||
resultBuilder.grading(
|
||||
LevelOfEvidenceGradingCoding.builder()
|
||||
.code(LevelOfEvidenceGradingCodingCode.M1C)
|
||||
.display(LevelOfEvidenceGradingCodingCode.M1C.toValue())
|
||||
.system(GRADING_SYSTEM)
|
||||
.build()
|
||||
);
|
||||
break;
|
||||
case "4":
|
||||
resultBuilder.grading(
|
||||
LevelOfEvidenceGradingCoding.builder()
|
||||
.code(LevelOfEvidenceGradingCodingCode.M2A)
|
||||
.display(LevelOfEvidenceGradingCodingCode.M2A.toValue())
|
||||
.system(GRADING_SYSTEM)
|
||||
.build()
|
||||
);
|
||||
break;
|
||||
case "5":
|
||||
resultBuilder.grading(
|
||||
LevelOfEvidenceGradingCoding.builder()
|
||||
.code(LevelOfEvidenceGradingCodingCode.M2B)
|
||||
.display(LevelOfEvidenceGradingCodingCode.M2B.toValue())
|
||||
.system(GRADING_SYSTEM)
|
||||
.build()
|
||||
);
|
||||
break;
|
||||
case "6":
|
||||
resultBuilder.grading(
|
||||
LevelOfEvidenceGradingCoding.builder()
|
||||
.code(LevelOfEvidenceGradingCodingCode.M2C)
|
||||
.display(LevelOfEvidenceGradingCodingCode.M2C.toValue())
|
||||
.system(GRADING_SYSTEM)
|
||||
.build()
|
||||
);
|
||||
break;
|
||||
case "7":
|
||||
resultBuilder.grading(
|
||||
LevelOfEvidenceGradingCoding.builder()
|
||||
.code(LevelOfEvidenceGradingCodingCode.M3)
|
||||
.display(LevelOfEvidenceGradingCodingCode.M3.toValue())
|
||||
.system(GRADING_SYSTEM)
|
||||
.build()
|
||||
);
|
||||
break;
|
||||
case "8":
|
||||
resultBuilder.grading(
|
||||
LevelOfEvidenceGradingCoding.builder()
|
||||
.code(LevelOfEvidenceGradingCodingCode.M4)
|
||||
.display(LevelOfEvidenceGradingCodingCode.M4.toValue())
|
||||
.system(GRADING_SYSTEM)
|
||||
.build()
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
var evidenzlevelZusatz = new ArrayList<LevelOfEvidenceAddendumCoding>();
|
||||
if (resultSet.isTrue("evidenzlevel_zusatz_is")) {
|
||||
evidenzlevelZusatz.add(
|
||||
LevelOfEvidenceAddendumCoding.builder()
|
||||
.code(LevelOfEvidenceAddendumCodingCode.IS)
|
||||
.display(LevelOfEvidenceAddendumCodingCode.IS.toValue())
|
||||
.system(ADDENDUM_SYSTEM)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
if (resultSet.isTrue("evidenzlevel_zusatz_iv")) {
|
||||
evidenzlevelZusatz.add(
|
||||
LevelOfEvidenceAddendumCoding.builder()
|
||||
.code(LevelOfEvidenceAddendumCodingCode.IV)
|
||||
.display(LevelOfEvidenceAddendumCodingCode.IV.toValue())
|
||||
.system(ADDENDUM_SYSTEM)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
if (resultSet.isTrue("evidenzlevel_zusatz_z")) {
|
||||
evidenzlevelZusatz.add(
|
||||
LevelOfEvidenceAddendumCoding.builder()
|
||||
.code(LevelOfEvidenceAddendumCodingCode.Z)
|
||||
.display(LevelOfEvidenceAddendumCodingCode.Z.toValue())
|
||||
.system(ADDENDUM_SYSTEM)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
if (resultSet.isTrue("evidenzlevel_zusatz_r")) {
|
||||
evidenzlevelZusatz.add(
|
||||
LevelOfEvidenceAddendumCoding.builder()
|
||||
.code(LevelOfEvidenceAddendumCodingCode.R)
|
||||
.display(LevelOfEvidenceAddendumCodingCode.R.toValue())
|
||||
.system(ADDENDUM_SYSTEM)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
resultBuilder.addendums(evidenzlevelZusatz);
|
||||
|
||||
if (resultSet.getString("evidenzlevel_publication") != null) {
|
||||
// Mappe nur PubMed-Ids (Ziffern) oder DOI (Pattern)
|
||||
var evidenzlevelPublications = Arrays.stream(resultSet.getString("evidenzlevel_publication").split("\n"))
|
||||
.map(String::trim)
|
||||
.map(line -> {
|
||||
if (line.matches("^\\d+$")) {
|
||||
return PublicationReference.builder()
|
||||
.id(line)
|
||||
.system(PublicationSystem.PUBMED_NCBI_NLM_NIH_GOV)
|
||||
.type("Publication")
|
||||
.build();
|
||||
}
|
||||
if (line.matches("^\\d{2}\\.\\d{4}/\\d+$")) {
|
||||
return PublicationReference.builder()
|
||||
.id(line)
|
||||
.system(PublicationSystem.DOI_ORG)
|
||||
.type("Publication")
|
||||
.build();
|
||||
}
|
||||
return null;
|
||||
})
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
resultBuilder.publications(evidenzlevelPublications);
|
||||
}
|
||||
|
||||
return resultBuilder.build();
|
||||
}
|
||||
}
|
@ -5,8 +5,10 @@ import dev.pcvolkmer.onco.datamapper.ResultSet;
|
||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.EinzelempfehlungCatalogue;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static dev.pcvolkmer.onco.datamapper.mapper.MapperUtils.getPatientReference;
|
||||
@ -17,7 +19,7 @@ import static dev.pcvolkmer.onco.datamapper.mapper.MapperUtils.getPatientReferen
|
||||
* @author Paul-Christian Volkmer
|
||||
* @since 0.1
|
||||
*/
|
||||
public class EinzelempfehlungProzedurDataMapper extends AbstractSubformDataMapper<ProcedureRecommendation> {
|
||||
public class EinzelempfehlungProzedurDataMapper extends AbstractEinzelempfehlungDataMapper<ProcedureRecommendation> {
|
||||
|
||||
public EinzelempfehlungProzedurDataMapper(EinzelempfehlungCatalogue einzelempfehlungCatalogue) {
|
||||
super(einzelempfehlungCatalogue);
|
||||
@ -43,6 +45,7 @@ public class EinzelempfehlungProzedurDataMapper extends AbstractSubformDataMappe
|
||||
resultSet.getInteger("art_der_therapie_propcat_version")
|
||||
)
|
||||
)
|
||||
.levelOfEvidence(getLevelOfEvidence(resultSet))
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -56,7 +59,7 @@ public class EinzelempfehlungProzedurDataMapper extends AbstractSubformDataMappe
|
||||
return catalogue.getAllByParentId(parentId)
|
||||
.stream()
|
||||
// Filter Prozedurempfehlung (Weitere Empfehlungen)
|
||||
.filter(it -> it.getString("art_der_therapie") != null && !it.getString("art_der_therapie").isBlank() )
|
||||
.filter(it -> it.getString("art_der_therapie") != null && !it.getString("art_der_therapie").isBlank())
|
||||
.map(this::map)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
@ -98,4 +101,5 @@ public class EinzelempfehlungProzedurDataMapper extends AbstractSubformDataMappe
|
||||
|
||||
return resultBuilder.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ import static dev.pcvolkmer.onco.datamapper.mapper.MapperUtils.getPatientReferen
|
||||
* @author Paul-Christian Volkmer
|
||||
* @since 0.1
|
||||
*/
|
||||
public class EinzelempfehlungWirkstoffDataMapper extends AbstractSubformDataMapper<MtbMedicationRecommendation> {
|
||||
public class EinzelempfehlungWirkstoffDataMapper extends AbstractEinzelempfehlungDataMapper<MtbMedicationRecommendation> {
|
||||
|
||||
public EinzelempfehlungWirkstoffDataMapper(EinzelempfehlungCatalogue einzelempfehlungCatalogue) {
|
||||
super(einzelempfehlungCatalogue);
|
||||
@ -41,6 +41,7 @@ public class EinzelempfehlungWirkstoffDataMapper extends AbstractSubformDataMapp
|
||||
)
|
||||
)
|
||||
.medication(JsonToMedicationMapper.map(resultSet.getString("wirkstoffe_json")))
|
||||
.levelOfEvidence(getLevelOfEvidence(resultSet))
|
||||
.build();
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,63 @@
|
||||
package dev.pcvolkmer.onco.datamapper.mapper;
|
||||
|
||||
import dev.pcvolkmer.mv64e.mtb.EcogCoding;
|
||||
import dev.pcvolkmer.mv64e.mtb.EcogCodingCode;
|
||||
import dev.pcvolkmer.mv64e.mtb.PerformanceStatus;
|
||||
import dev.pcvolkmer.mv64e.mtb.PriorDiagnosticReport;
|
||||
import dev.pcvolkmer.onco.datamapper.ResultSet;
|
||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.EcogCatalogue;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static dev.pcvolkmer.onco.datamapper.mapper.MapperUtils.getPatientReference;
|
||||
|
||||
/**
|
||||
* Mapper class to load and map prozedur data from database table 'dk_dnpm_vorbefunde'
|
||||
*
|
||||
* @author Paul-Christian Volkmer
|
||||
* @since 0.1
|
||||
*/
|
||||
public class KpaVorbefundeDataMapper extends AbstractSubformDataMapper<PriorDiagnosticReport> {
|
||||
|
||||
public KpaVorbefundeDataMapper(final EcogCatalogue catalogue) {
|
||||
super(catalogue);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads and maps Prozedur related by database id
|
||||
*
|
||||
* @param id The database id of the procedure data set
|
||||
* @return The loaded data set
|
||||
*/
|
||||
@Override
|
||||
public PriorDiagnosticReport getById(final int id) {
|
||||
var data = catalogue.getById(id);
|
||||
return this.map(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PriorDiagnosticReport> getByParentId(final int parentId) {
|
||||
return catalogue.getAllByParentId(parentId)
|
||||
.stream()
|
||||
.map(this::map)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PriorDiagnosticReport map(final ResultSet resultSet) {
|
||||
var builder = PriorDiagnosticReport.builder();
|
||||
builder
|
||||
.id(resultSet.getId().toString())
|
||||
.patient(getPatientReference(resultSet.getString("patient_id")))
|
||||
.issuedOn(resultSet.getDate("datum"))
|
||||
.results(List.of(resultSet.getString("ecog")))
|
||||
;
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package dev.pcvolkmer.onco.datamapper.mapper;
|
||||
|
||||
import dev.pcvolkmer.mv64e.mtb.Mtb;
|
||||
import dev.pcvolkmer.mv64e.mtb.PriorDiagnosticReport;
|
||||
import dev.pcvolkmer.mv64e.mtb.Reference;
|
||||
import dev.pcvolkmer.onco.datamapper.PropertyCatalogue;
|
||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.*;
|
||||
|
Reference in New Issue
Block a user