1
0
mirror of https://github.com/pcvolkmer/mv64e-onkostar-data.git synced 2025-07-04 03:22:53 +00:00

feat: add display and system to patient data

This commit is contained in:
2025-06-22 12:01:38 +02:00
parent a10842df0c
commit 21739a055d
5 changed files with 75 additions and 24 deletions

View File

@ -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;

View File

@ -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();
} }

View File

@ -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();

View File

@ -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();
} }

View File

@ -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()
); );
} }