Skip to content

Commit

Permalink
Add support for additional measures in sykemelding DTO #deploy-test-s…
Browse files Browse the repository at this point in the history
…ykemelding-api

Introduced the andreTiltak field in DetaljerDTO to capture additional work measures. Updated SykemeldingValidateMappingStrategy and accompanying tests to handle mapping of biDiagnoser and andreTiltak, ensuring complete DTO representations. Modified domain classes to align with new DTO structure.
  • Loading branch information
krharum committed Dec 9, 2024
1 parent 510dcee commit 3d8dc32
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class Dokument {
new XMLHelseOpplysningerArbeidsuforhet.Tiltak()
.withTiltakArbeidsplassen(dto.getDetaljer().getTiltakArbeidsplass())
.withTiltakNAV(dto.getDetaljer().getTiltakNav())
.withAndreTiltak(dto.getDetaljer().getAndreTiltak())
)
.withKontaktMedPasient(
new XMLHelseOpplysningerArbeidsuforhet.KontaktMedPasient()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,14 @@

import java.time.LocalDate;
import java.util.List;
import java.util.stream.Collectors;

class MedisinskVurdering {

private final XMLHelseOpplysningerArbeidsuforhet.MedisinskVurdering medisinskVurdering;
private final XMLHelseOpplysningerArbeidsuforhet.MedisinskVurdering xmlMedisinskVurdering;

MedisinskVurdering(LocalDate fom, DiagnoseDTO hovedDiagnose, List<DiagnoseDTO> biDiagnoser) {

medisinskVurdering = new XMLHelseOpplysningerArbeidsuforhet.MedisinskVurdering()
xmlMedisinskVurdering = new XMLHelseOpplysningerArbeidsuforhet.MedisinskVurdering()
.withHovedDiagnose(new XMLHelseOpplysningerArbeidsuforhet.MedisinskVurdering.HovedDiagnose()
.withDiagnosekode(new XMLCV()
.withDN(hovedDiagnose.getDiagnose())
Expand All @@ -29,19 +28,19 @@ class MedisinskVurdering {
.withS(value.getSystem())
.withV(value.getDiagnosekode())
)
.collect(Collectors.toList())
.toList()
)
)
.withYrkesskade(false)
.withYrkesskadeDato(fom)
.withSvangerskap(false)
.withAnnenFraversArsak(
new XMLArsakType().withBeskriv("Medising årsak i kategorien annet")
new XMLArsakType().withBeskriv("Medisinsk årsak i kategorien annet")
)
.withSkjermesForPasient(false);
}

XMLHelseOpplysningerArbeidsuforhet.MedisinskVurdering getXmlObject() {
return medisinskVurdering;
return xmlMedisinskVurdering;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import java.util.Map;
import java.util.stream.Collectors;

import static java.util.Collections.emptyList;
import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;

Expand All @@ -47,7 +48,7 @@ public class SykemeldingValidateMappingStrategy implements MappingStrategy {
@Override
public void register(MapperFactory factory) {
factory.classMap(Sykemelding.class, ReceivedSykemeldingDTO.class)
.customize(new CustomMapper<Sykemelding, ReceivedSykemeldingDTO>() {
.customize(new CustomMapper<>() {
@Override
public void mapAtoB(Sykemelding source, ReceivedSykemeldingDTO target, MappingContext context) {

Expand Down Expand Up @@ -194,23 +195,27 @@ private ReceivedSykemeldingDTO.AktivitetIkkeMulig mapAktivitetIkkeMulig(XMLHelse
return null;
}

var medisinskeArsakTyper = !aktivitetIkkeMulig.getMedisinskeArsaker().getArsakskode().isEmpty() ?
aktivitetIkkeMulig.getMedisinskeArsaker().getArsakskode().stream()
.map(XMLCS::getV)
.map(ReceivedSykemeldingDTO.MedisinskArsakType::valueOf)
.toList() : null;

var arbeidsforholdArsakTyper = !aktivitetIkkeMulig.getArbeidsplassen().getArsakskode().isEmpty() ?
aktivitetIkkeMulig.getArbeidsplassen().getArsakskode().stream()
.map(XMLCS::getV)
.map(ReceivedSykemeldingDTO.ArbeidsrelatertArsakType::valueOf)
.toList() : null;

return ReceivedSykemeldingDTO.AktivitetIkkeMulig.builder()
.medisinskArsak(nonNull(aktivitetIkkeMulig.getMedisinskeArsaker()) ?
ReceivedSykemeldingDTO.MedisinskArsak.builder()
.arsak(nonNull(aktivitetIkkeMulig.getMedisinskeArsaker().getArsakskode()) ?
aktivitetIkkeMulig.getMedisinskeArsaker().getArsakskode().stream()
.map(XMLCS::getV)
.map(ReceivedSykemeldingDTO.MedisinskArsakType::valueOf)
.toList() : null)
.arsak(medisinskeArsakTyper)
.beskrivelse(aktivitetIkkeMulig.getMedisinskeArsaker().getBeskriv())
.build() : null)
.arbeidsrelatertArsak(nonNull(aktivitetIkkeMulig.getArbeidsplassen()) ?
ReceivedSykemeldingDTO.ArbeidsrelatertArsak.builder()
.arsak(nonNull(aktivitetIkkeMulig.getArbeidsplassen().getArsakskode()) ?
aktivitetIkkeMulig.getArbeidsplassen().getArsakskode().stream()
.map(XMLCS::getV)
.map(ReceivedSykemeldingDTO.ArbeidsrelatertArsakType::valueOf)
.toList() : null)
.arsak(arbeidsforholdArsakTyper)
.beskrivelse(aktivitetIkkeMulig.getArbeidsplassen().getBeskriv())
.build() : null)
.build();
Expand All @@ -224,6 +229,7 @@ private ReceivedSykemeldingDTO.MedisinskVurdering mapMedisinskVurdering(XMLHelse
.system(xmlMedisinskVurdering.getHovedDiagnose().getDiagnosekode().getS())
.tekst(xmlMedisinskVurdering.getHovedDiagnose().getDiagnosekode().getDN())
.build())
.biDiagnoser(mapBidiagnoser(xmlMedisinskVurdering.getBiDiagnoser()))
.annenFraversArsak(ReceivedSykemeldingDTO.AnnenFraversArsak.builder()
.beskrivelse(xmlMedisinskVurdering.getAnnenFraversArsak().getBeskriv())
.build())
Expand All @@ -233,6 +239,21 @@ private ReceivedSykemeldingDTO.MedisinskVurdering mapMedisinskVurdering(XMLHelse
.build();
}

private List<ReceivedSykemeldingDTO.Diagnose> mapBidiagnoser(XMLHelseOpplysningerArbeidsuforhet.MedisinskVurdering.BiDiagnoser biDiagnoser) {

if (isNull(biDiagnoser)) {
return emptyList();
}

return biDiagnoser.getDiagnosekode().stream()
.map(diagnose -> ReceivedSykemeldingDTO.Diagnose.builder()
.kode(diagnose.getV())
.system(diagnose.getS())
.tekst(diagnose.getDN())
.build())
.toList();
}

private LocalDateTime convertDateNTime(XMLGregorianCalendar xmlGregorianCalendar) {

return LocalDateTime.of(xmlGregorianCalendar.getYear(), xmlGregorianCalendar.getMonth(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.hasEntry;
import static org.hamcrest.Matchers.hasProperty;
import static org.hamcrest.Matchers.nullValue;

@ExtendWith(MockitoExtension.class)
class SykemeldingValidateMappingStrategyTest {
Expand All @@ -53,8 +58,13 @@ private SykemeldingDTO getSykemeldingOK() {
.hovedDiagnose(DiagnoseDTO.builder()
.diagnose("Diagnostisk prosedyre IKA")
.diagnosekode("F43")
.system("2.16.578.1.12.4.1.1.7170")
.system("123")
.build())
.biDiagnoser(List.of(DiagnoseDTO.builder()
.diagnose("Diagnostisk prosedyre bla bla")
.diagnosekode("H14")
.system("456")
.build()))
.helsepersonell(HelsepersonellDTO.builder()
.etternavn("September")
.fornavn("August")
Expand Down Expand Up @@ -101,6 +111,7 @@ private SykemeldingDTO getSykemeldingOK() {
.detaljer(DetaljerDTO.builder()
.tiltakArbeidsplass("Beskrivende tiltak fra arbeidsplassen")
.tiltakNav("Beskrivende tiltak fra NAV")
.andreTiltak("Andre tiltak")
.beskrivHensynArbeidsplassen("Beskrivende hensyn til arbeidsplassen")
.arbeidsforEtterEndtPeriode(true)
.build())
Expand Down Expand Up @@ -137,23 +148,37 @@ void validateAllFields_OK() {
var target = mapperFacade.map(sykemelding, ReceivedSykemeldingDTO.class);

assertThat(target.getMsgId(), is(equalTo(sykemelding.getMsgId())));
assertThat(target.getSykmelding().getMedisinskVurdering().getYrkesskadeDato(), is(equalTo(LocalDate.of(2024, 11, 21))));
assertThat(target.getSykmelding().getMedisinskVurdering().getSvangerskap(), is(equalTo(false)));
assertThat(target.getSykmelding().getMedisinskVurdering().getYrkesskade(), is(equalTo(false)));
assertThat(target.getSykmelding().getMedisinskVurdering().getAnnenFraversArsak().getBeskrivelse(), is(equalTo("Medising årsak i kategorien annet")));

assertThat(target.getSykmelding().getArbeidsgiver().getHarArbeidsgiver(), is(equalTo(ReceivedSykemeldingDTO.ArbeidsgiverType.EN_ARBEIDSGIVER)));
assertThat(target.getSykmelding().getArbeidsgiver().getStillingsprosent(), is(equalTo(sykemeldingDTO.getArbeidsgiver().getStillingsprosent().intValue())));
assertThat(target.getSykmelding().getArbeidsgiver().getYrkesbetegnelse(), is(equalTo(sykemeldingDTO.getArbeidsgiver().getYrkesbetegnelse())));
assertThat(target.getSykmelding().getArbeidsgiver().getNavn(), is(equalTo(sykemeldingDTO.getArbeidsgiver().getNavn())));

assertThat(target.getSykmelding().getBehandler().getFornavn(), is(equalTo(sykemeldingDTO.getHelsepersonell().getFornavn())));
assertThat(target.getSykmelding().getBehandler().getMellomnavn(), is(equalTo(sykemeldingDTO.getHelsepersonell().getMellomnavn())));
assertThat(target.getSykmelding().getBehandler().getEtternavn(), is(equalTo(sykemeldingDTO.getHelsepersonell().getEtternavn())));
assertThat(target.getSykmelding().getBehandler().getFnr(), is(equalTo(sykemeldingDTO.getHelsepersonell().getIdent())));

assertThat(target.getSykmelding().getAvsenderSystem().getNavn(), is(equalTo(applicationInfo.getName())));
assertThat(target.getSykmelding().getAvsenderSystem().getVersjon(), is(equalTo(applicationInfo.getVersion())));
assertThat(target.getSykmelding().getMedisinskVurdering(), allOf(
hasProperty("hovedDiagnose", allOf(
hasProperty("system", is(equalTo("123"))),
hasProperty("kode", is(equalTo("F43"))),
hasProperty("tekst", is(equalTo("Diagnostisk prosedyre IKA"))))),
hasProperty("biDiagnoser", contains(allOf(
hasProperty("system", is(equalTo("456"))),
hasProperty("kode", is(equalTo("H14"))),
hasProperty("tekst", is(equalTo("Diagnostisk prosedyre bla bla")))))),
hasProperty("yrkesskadeDato", is(equalTo(LocalDate.of(2024, 11, 21)))),
hasProperty("svangerskap", is(equalTo(false))),
hasProperty("yrkesskade", is(equalTo(false))),
hasProperty("annenFraversArsak",
hasProperty("beskrivelse", is(equalTo("Medisinsk årsak i kategorien annet"))))));

assertThat(target.getSykmelding().getArbeidsgiver(), allOf(
hasProperty("harArbeidsgiver", is(equalTo(ReceivedSykemeldingDTO.ArbeidsgiverType.EN_ARBEIDSGIVER))),
hasProperty("navn", is(equalTo(sykemeldingDTO.getArbeidsgiver().getNavn()))),
hasProperty("yrkesbetegnelse", is(equalTo(sykemeldingDTO.getArbeidsgiver().getYrkesbetegnelse()))),
hasProperty("stillingsprosent", is(equalTo(sykemeldingDTO.getArbeidsgiver().getStillingsprosent().intValue())))));

assertThat(target.getSykmelding().getBehandler(), allOf(
hasProperty("fornavn", is(equalTo(sykemeldingDTO.getHelsepersonell().getFornavn()))),
hasProperty("mellomnavn", is(equalTo(sykemeldingDTO.getHelsepersonell().getMellomnavn()))),
hasProperty("etternavn", is(equalTo(sykemeldingDTO.getHelsepersonell().getEtternavn()))),
hasProperty("fnr", is(equalTo(sykemeldingDTO.getHelsepersonell().getIdent())))));

assertThat(target.getSykmelding().getAvsenderSystem(), allOf(
hasProperty("navn", is(equalTo(applicationInfo.getName()))),
hasProperty("versjon", is(equalTo(applicationInfo.getVersion())))));

assertThat(target.getPersonNrPasient(), is(equalTo(DUMMY_FNR)));
assertThat(target.getMottattDato(), is(equalTo(sykemeldingDTO.getStartDato().atStartOfDay())));
Expand All @@ -162,6 +187,38 @@ void validateAllFields_OK() {
is(equalTo(sykemeldingDTO.getHelsepersonell().getFornavn() + " " + sykemeldingDTO.getHelsepersonell().getEtternavn())));
assertThat(target.getLegekontorOrgNr(), is(equalTo(sykemeldingDTO.getMottaker().getOrgNr())));

// TBD utdypendeOpplysninger, Perioder, mm
assertThat(target.getSykmelding().getUtdypendeOpplysninger(),
hasEntry(is("6.3"), allOf(
hasEntry(is("6.3.1"), allOf(
hasProperty("sporsmal", is(equalTo("Beskriv kort sykehistorie, symptomer og funn i dagens situasjon"))),
hasProperty("svar", is(equalTo("word word word word"))),
hasProperty("restriksjoner", is(equalTo(List.of(SKJERMET_FOR_ARBEIDSGIVER)))))),
hasEntry(is("6.3.2"), allOf(
hasProperty("sporsmal", is(equalTo("Beskriv kort sykehistorie, symptomer og funn i dagens situasjon"))),
hasProperty("svar", is(equalTo("word word word word"))),
hasProperty("restriksjoner", is(equalTo(List.of(SKJERMET_FOR_PASIENT)))))))));

assertThat(target.getSykmelding().getPerioder(), contains(allOf(
hasProperty("fom", is(equalTo(LocalDate.of(2024, 11, 21)))),
hasProperty("tom", is(equalTo(LocalDate.of(2024, 11, 27)))),
hasProperty("gradert",
hasProperty("reisetilskudd", is(equalTo(false)))),
hasProperty("behandlingsdager", is(nullValue())))));

assertThat(target.getSykmelding().getPrognose(), allOf(
hasProperty("arbeidsforEtterPeriode", is(equalTo(true))),
hasProperty("hensynArbeidsplassen", is(equalTo("Beskrivende hensyn til arbeidsplassen"))),
hasProperty("erIArbeid", allOf(
hasProperty("egetArbeidPaSikt", is(equalTo(true))),
hasProperty("annetArbeidPaSikt", is(equalTo(true))),
hasProperty("arbeidFOM", is(equalTo(LocalDate.of(2024, 11, 21)))),
hasProperty("vurderingsdato", is(equalTo(LocalDate.of(2024, 11, 21)))))),
hasProperty("erIkkeIArbeid", is(nullValue()))));

assertThat(target.getSykmelding().getTiltakNAV(), is(equalTo("Beskrivende tiltak fra NAV")));
assertThat(target.getSykmelding().getTiltakArbeidsplassen(), is(equalTo("Beskrivende tiltak fra arbeidsplassen")));
assertThat(target.getSykmelding().getAndreTiltak(), is(equalTo("Andre tiltak")));

assertThat(target.getPersonNrLege(), is(equalTo(sykemeldingDTO.getHelsepersonell().getIdent())));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public class DetaljerDTO {

private String tiltakArbeidsplass;
private String tiltakNav;
private String andreTiltak;
private Boolean arbeidsforEtterEndtPeriode;
private String beskrivHensynArbeidsplassen;
}
Expand Down

0 comments on commit 3d8dc32

Please sign in to comment.