mirror of
https://github.com/pcvolkmer/mv64e-onkostar-data.git
synced 2025-07-03 19:12:55 +00:00
feat: add display and system to patient data
This commit is contained in:
@ -60,7 +60,7 @@ public class PropertyCatalogue {
|
|||||||
private final String shortdesc;
|
private final String shortdesc;
|
||||||
private final String description;
|
private final String description;
|
||||||
|
|
||||||
Entry(String code, String shortdesc, String description) {
|
public Entry(String code, String shortdesc, String description) {
|
||||||
this.code = code;
|
this.code = code;
|
||||||
this.shortdesc = shortdesc;
|
this.shortdesc = shortdesc;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package dev.pcvolkmer.onco.datamapper.mapper;
|
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.ResultSet;
|
import dev.pcvolkmer.onco.datamapper.ResultSet;
|
||||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.KpaCatalogue;
|
import dev.pcvolkmer.onco.datamapper.datacatalogues.KpaCatalogue;
|
||||||
|
|
||||||
@ -13,9 +14,14 @@ import dev.pcvolkmer.onco.datamapper.datacatalogues.KpaCatalogue;
|
|||||||
public class KpaPatientDataMapper implements DataMapper<Patient> {
|
public class KpaPatientDataMapper implements DataMapper<Patient> {
|
||||||
|
|
||||||
private final KpaCatalogue kpaCatalogue;
|
private final KpaCatalogue kpaCatalogue;
|
||||||
|
private final PropertyCatalogue propertyCatalogue;
|
||||||
|
|
||||||
public KpaPatientDataMapper(final KpaCatalogue kpaCatalogue) {
|
public KpaPatientDataMapper(
|
||||||
|
final KpaCatalogue kpaCatalogue,
|
||||||
|
final PropertyCatalogue propertyCatalogue
|
||||||
|
) {
|
||||||
this.kpaCatalogue = kpaCatalogue;
|
this.kpaCatalogue = kpaCatalogue;
|
||||||
|
this.propertyCatalogue = propertyCatalogue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -40,30 +46,36 @@ public class KpaPatientDataMapper implements DataMapper<Patient> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private GenderCoding getGenderCoding(ResultSet data) {
|
private GenderCoding getGenderCoding(ResultSet data) {
|
||||||
var genderCodingBuilder = GenderCoding.builder();
|
var genderCodingBuilder = GenderCoding.builder()
|
||||||
|
.system("Gender");
|
||||||
|
|
||||||
String geschlecht = data.getString("geschlecht");
|
String geschlecht = data.getString("geschlecht");
|
||||||
switch (geschlecht) {
|
switch (geschlecht) {
|
||||||
case "m":
|
case "m":
|
||||||
genderCodingBuilder.code(GenderCodingCode.MALE);
|
genderCodingBuilder.code(GenderCodingCode.MALE).display("Männlich");
|
||||||
break;
|
break;
|
||||||
case "w":
|
case "w":
|
||||||
genderCodingBuilder.code(GenderCodingCode.FEMALE);
|
genderCodingBuilder.code(GenderCodingCode.FEMALE).display("Weiblich");
|
||||||
break;
|
break;
|
||||||
case "d":
|
case "d":
|
||||||
case "x":
|
case "x":
|
||||||
genderCodingBuilder.code(GenderCodingCode.OTHER);
|
genderCodingBuilder.code(GenderCodingCode.OTHER).display("Divers");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
genderCodingBuilder.code(GenderCodingCode.UNKNOWN);
|
genderCodingBuilder.code(GenderCodingCode.UNKNOWN).display("Unbekannt");
|
||||||
}
|
}
|
||||||
return genderCodingBuilder.build();
|
return genderCodingBuilder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private HealthInsurance getHealthInsurance(ResultSet data) {
|
private HealthInsurance getHealthInsurance(ResultSet data) {
|
||||||
var healthInsuranceCodingBuilder = HealthInsuranceCoding.builder();
|
var healthInsuranceCodingBuilder = HealthInsuranceCoding.builder()
|
||||||
|
.system("http://fhir.de/CodeSystem/versicherungsart-de-basis");
|
||||||
|
|
||||||
String healthInsuranceType = data.getString("artderkrankenkasse");
|
String healthInsuranceType = data.getString("artderkrankenkasse");
|
||||||
if (healthInsuranceType == null) {
|
if (healthInsuranceType == null) {
|
||||||
healthInsuranceCodingBuilder.code(HealthInsuranceCodingCode.UNK).build();
|
healthInsuranceCodingBuilder
|
||||||
|
.code(HealthInsuranceCodingCode.UNK)
|
||||||
|
.build();
|
||||||
return HealthInsurance.builder().type(healthInsuranceCodingBuilder.build()).build();
|
return HealthInsurance.builder().type(healthInsuranceCodingBuilder.build()).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,6 +111,13 @@ public class KpaPatientDataMapper implements DataMapper<Patient> {
|
|||||||
healthInsuranceCodingBuilder.code(HealthInsuranceCodingCode.UNK).build();
|
healthInsuranceCodingBuilder.code(HealthInsuranceCodingCode.UNK).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var healthInsurancePropertyEntry = propertyCatalogue.getByCodeAndVersion(
|
||||||
|
data.getString("artderkrankenkasse"),
|
||||||
|
data.getInteger("artderkrankenkasse_propcat_version")
|
||||||
|
);
|
||||||
|
|
||||||
|
healthInsuranceCodingBuilder.display(healthInsurancePropertyEntry.getDescription());
|
||||||
|
|
||||||
return HealthInsurance.builder().type(healthInsuranceCodingBuilder.build()).build();
|
return HealthInsurance.builder().type(healthInsuranceCodingBuilder.build()).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
package dev.pcvolkmer.onco.datamapper.mapper;
|
package dev.pcvolkmer.onco.datamapper.mapper;
|
||||||
|
|
||||||
import dev.pcvolkmer.mv64e.mtb.Mtb;
|
import dev.pcvolkmer.mv64e.mtb.Mtb;
|
||||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.DataCatalogueFactory;
|
import dev.pcvolkmer.onco.datamapper.PropertyCatalogue;
|
||||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.KpaCatalogue;
|
import dev.pcvolkmer.onco.datamapper.datacatalogues.*;
|
||||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.PatientCatalogue;
|
|
||||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.ProzedurCatalogue;
|
|
||||||
import dev.pcvolkmer.onco.datamapper.exceptions.DataAccessException;
|
import dev.pcvolkmer.onco.datamapper.exceptions.DataAccessException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -24,9 +22,11 @@ public class MtbDataMapper implements DataMapper<Mtb> {
|
|||||||
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||||
|
|
||||||
private final DataCatalogueFactory catalogueFactory;
|
private final DataCatalogueFactory catalogueFactory;
|
||||||
|
private final PropertyCatalogue propertyCatalogue;
|
||||||
|
|
||||||
MtbDataMapper(final JdbcTemplate jdbcTemplate) {
|
MtbDataMapper(final JdbcTemplate jdbcTemplate) {
|
||||||
this.catalogueFactory = DataCatalogueFactory.initialize(jdbcTemplate);
|
this.catalogueFactory = DataCatalogueFactory.initialize(jdbcTemplate);
|
||||||
|
this.propertyCatalogue = PropertyCatalogue.initialize(jdbcTemplate);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -59,8 +59,12 @@ public class MtbDataMapper implements DataMapper<Mtb> {
|
|||||||
public Mtb getById(int kpaId) {
|
public Mtb getById(int kpaId) {
|
||||||
var kpaCatalogue = catalogueFactory.catalogue(KpaCatalogue.class);
|
var kpaCatalogue = catalogueFactory.catalogue(KpaCatalogue.class);
|
||||||
var patientDataMapper = new PatientDataMapper(catalogueFactory.catalogue(PatientCatalogue.class));
|
var patientDataMapper = new PatientDataMapper(catalogueFactory.catalogue(PatientCatalogue.class));
|
||||||
var kpaPatientDataMapper = new KpaPatientDataMapper(kpaCatalogue);
|
var kpaPatientDataMapper = new KpaPatientDataMapper(kpaCatalogue, propertyCatalogue);
|
||||||
var diagnosisDataMapper = new KpaDiagnosisDataMapper(kpaCatalogue);
|
var diagnosisDataMapper = new KpaDiagnosisDataMapper(
|
||||||
|
kpaCatalogue,
|
||||||
|
catalogueFactory.catalogue(TumorausbreitungCatalogue.class),
|
||||||
|
catalogueFactory.catalogue(TumorgradingCatalogue.class)
|
||||||
|
);
|
||||||
var prozedurMapper = new KpaProzedurDataMapper(catalogueFactory.catalogue(ProzedurCatalogue.class));
|
var prozedurMapper = new KpaProzedurDataMapper(catalogueFactory.catalogue(ProzedurCatalogue.class));
|
||||||
|
|
||||||
var resultBuilder = Mtb.builder();
|
var resultBuilder = Mtb.builder();
|
||||||
|
@ -43,20 +43,22 @@ public class PatientDataMapper implements DataMapper<Patient> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private GenderCoding getGenderCoding(final ResultSet data) {
|
private GenderCoding getGenderCoding(final ResultSet data) {
|
||||||
var genderCodingBuilder = GenderCoding.builder();
|
var genderCodingBuilder = GenderCoding.builder()
|
||||||
|
.system("Gender");
|
||||||
|
|
||||||
String geschlecht = data.getString("geschlecht");
|
String geschlecht = data.getString("geschlecht");
|
||||||
switch (geschlecht) {
|
switch (geschlecht) {
|
||||||
case "M":
|
case "M":
|
||||||
genderCodingBuilder.code(GenderCodingCode.MALE);
|
genderCodingBuilder.code(GenderCodingCode.MALE).display("Männlich");
|
||||||
break;
|
break;
|
||||||
case "F":
|
case "F":
|
||||||
genderCodingBuilder.code(GenderCodingCode.FEMALE);
|
genderCodingBuilder.code(GenderCodingCode.FEMALE).display("Weiblich");
|
||||||
break;
|
break;
|
||||||
case "X":
|
case "X":
|
||||||
genderCodingBuilder.code(GenderCodingCode.OTHER);
|
genderCodingBuilder.code(GenderCodingCode.OTHER).display("Divers");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
genderCodingBuilder.code(GenderCodingCode.UNKNOWN);
|
genderCodingBuilder.code(GenderCodingCode.UNKNOWN).display("Unbekannt");
|
||||||
}
|
}
|
||||||
return genderCodingBuilder.build();
|
return genderCodingBuilder.build();
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package dev.pcvolkmer.onco.datamapper.mapper;
|
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.ResultSet;
|
import dev.pcvolkmer.onco.datamapper.ResultSet;
|
||||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.KpaCatalogue;
|
import dev.pcvolkmer.onco.datamapper.datacatalogues.KpaCatalogue;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
@ -23,13 +24,18 @@ import static org.mockito.Mockito.doAnswer;
|
|||||||
class KpaPatientDataMapperTest {
|
class KpaPatientDataMapperTest {
|
||||||
|
|
||||||
KpaCatalogue kpaCatalogue;
|
KpaCatalogue kpaCatalogue;
|
||||||
|
PropertyCatalogue propertyCatalogue;
|
||||||
|
|
||||||
KpaPatientDataMapper dataMapper;
|
KpaPatientDataMapper dataMapper;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void setUp(@Mock KpaCatalogue kpaCatalogue) {
|
void setUp(
|
||||||
|
@Mock KpaCatalogue kpaCatalogue,
|
||||||
|
@Mock PropertyCatalogue propertyCatalogue
|
||||||
|
) {
|
||||||
this.kpaCatalogue = kpaCatalogue;
|
this.kpaCatalogue = kpaCatalogue;
|
||||||
this.dataMapper = new KpaPatientDataMapper(kpaCatalogue);
|
this.propertyCatalogue = propertyCatalogue;
|
||||||
|
this.dataMapper = new KpaPatientDataMapper(kpaCatalogue, propertyCatalogue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -61,6 +67,10 @@ class KpaPatientDataMapperTest {
|
|||||||
.when(kpaCatalogue)
|
.when(kpaCatalogue)
|
||||||
.getById(anyInt());
|
.getById(anyInt());
|
||||||
|
|
||||||
|
doAnswer(invocationOnMock ->
|
||||||
|
new PropertyCatalogue.Entry("GKV", "Gesetzliche Krankenversicherung", "Gesetzliche Krankenversicherung")
|
||||||
|
).when(propertyCatalogue).getByCodeAndVersion(anyString(), anyInt());
|
||||||
|
|
||||||
var actual = this.dataMapper.getById(1);
|
var actual = this.dataMapper.getById(1);
|
||||||
assertThat(actual).isInstanceOf(Patient.class);
|
assertThat(actual).isInstanceOf(Patient.class);
|
||||||
assertThat(actual.getId()).isEqualTo("1");
|
assertThat(actual.getId()).isEqualTo("1");
|
||||||
@ -68,7 +78,13 @@ class KpaPatientDataMapperTest {
|
|||||||
assertThat(actual.getBirthDate()).isEqualTo(Date.from(Instant.parse("2000-01-01T12:00:00Z")));
|
assertThat(actual.getBirthDate()).isEqualTo(Date.from(Instant.parse("2000-01-01T12:00:00Z")));
|
||||||
assertThat(actual.getDateOfDeath()).isEqualTo(Date.from(Instant.parse("2024-06-19T12:00:00Z")));
|
assertThat(actual.getDateOfDeath()).isEqualTo(Date.from(Instant.parse("2024-06-19T12:00:00Z")));
|
||||||
assertThat(actual.getHealthInsurance()).isEqualTo(
|
assertThat(actual.getHealthInsurance()).isEqualTo(
|
||||||
HealthInsurance.builder().type(HealthInsuranceCoding.builder().code(HealthInsuranceCodingCode.GKV).build()).build()
|
HealthInsurance.builder().type(
|
||||||
|
HealthInsuranceCoding.builder()
|
||||||
|
.code(HealthInsuranceCodingCode.GKV)
|
||||||
|
.display("Gesetzliche Krankenversicherung")
|
||||||
|
.system("http://fhir.de/CodeSystem/versicherungsart-de-basis")
|
||||||
|
.build()
|
||||||
|
).build()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,6 +111,10 @@ class KpaPatientDataMapperTest {
|
|||||||
.when(kpaCatalogue)
|
.when(kpaCatalogue)
|
||||||
.getById(anyInt());
|
.getById(anyInt());
|
||||||
|
|
||||||
|
doAnswer(invocationOnMock ->
|
||||||
|
new PropertyCatalogue.Entry("PKV", "Private Krankenversicherung", "Private Krankenversicherung")
|
||||||
|
).when(propertyCatalogue).getByCodeAndVersion(anyString(), anyInt());
|
||||||
|
|
||||||
var actual = this.dataMapper.getById(1);
|
var actual = this.dataMapper.getById(1);
|
||||||
assertThat(actual).isInstanceOf(Patient.class);
|
assertThat(actual).isInstanceOf(Patient.class);
|
||||||
assertThat(actual.getId()).isEqualTo("1");
|
assertThat(actual.getId()).isEqualTo("1");
|
||||||
@ -102,7 +122,13 @@ class KpaPatientDataMapperTest {
|
|||||||
assertThat(actual.getBirthDate()).isEqualTo(Date.from(Instant.parse("2000-01-01T12:00:00Z")));
|
assertThat(actual.getBirthDate()).isEqualTo(Date.from(Instant.parse("2000-01-01T12:00:00Z")));
|
||||||
assertThat(actual.getDateOfDeath()).isNull();
|
assertThat(actual.getDateOfDeath()).isNull();
|
||||||
assertThat(actual.getHealthInsurance()).isEqualTo(
|
assertThat(actual.getHealthInsurance()).isEqualTo(
|
||||||
HealthInsurance.builder().type(HealthInsuranceCoding.builder().code(HealthInsuranceCodingCode.PKV).build()).build()
|
HealthInsurance.builder().type(
|
||||||
|
HealthInsuranceCoding.builder()
|
||||||
|
.code(HealthInsuranceCodingCode.PKV)
|
||||||
|
.display("Private Krankenversicherung")
|
||||||
|
.system("http://fhir.de/CodeSystem/versicherungsart-de-basis")
|
||||||
|
.build()
|
||||||
|
).build()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user