From 3d8dc320eb3f8464c87a440da943ddfae5f8b690 Mon Sep 17 00:00:00 2001 From: "Kristen.Herum" Date: Mon, 9 Dec 2024 15:01:09 +0100 Subject: [PATCH] Add support for additional measures in sykemelding DTO #deploy-test-sykemelding-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. --- .../sykemelding/domain/Dokument.java | 1 + .../domain/MedisinskVurdering.java | 11 +-- .../SykemeldingValidateMappingStrategy.java | 43 ++++++--- ...ykemeldingValidateMappingStrategyTest.java | 93 +++++++++++++++---- .../libs/dto/sykemelding/v1/DetaljerDTO.java | 1 + 5 files changed, 114 insertions(+), 35 deletions(-) diff --git a/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/domain/Dokument.java b/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/domain/Dokument.java index ef53a6f6a7c..7f047ee9610 100644 --- a/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/domain/Dokument.java +++ b/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/domain/Dokument.java @@ -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() diff --git a/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/domain/MedisinskVurdering.java b/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/domain/MedisinskVurdering.java index 33e97b9a562..38a23bc28d8 100644 --- a/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/domain/MedisinskVurdering.java +++ b/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/domain/MedisinskVurdering.java @@ -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 biDiagnoser) { - medisinskVurdering = new XMLHelseOpplysningerArbeidsuforhet.MedisinskVurdering() + xmlMedisinskVurdering = new XMLHelseOpplysningerArbeidsuforhet.MedisinskVurdering() .withHovedDiagnose(new XMLHelseOpplysningerArbeidsuforhet.MedisinskVurdering.HovedDiagnose() .withDiagnosekode(new XMLCV() .withDN(hovedDiagnose.getDiagnose()) @@ -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; } } diff --git a/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/mapper/SykemeldingValidateMappingStrategy.java b/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/mapper/SykemeldingValidateMappingStrategy.java index c313d6c5c7c..9f35c71f02f 100644 --- a/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/mapper/SykemeldingValidateMappingStrategy.java +++ b/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/mapper/SykemeldingValidateMappingStrategy.java @@ -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; @@ -47,7 +48,7 @@ public class SykemeldingValidateMappingStrategy implements MappingStrategy { @Override public void register(MapperFactory factory) { factory.classMap(Sykemelding.class, ReceivedSykemeldingDTO.class) - .customize(new CustomMapper() { + .customize(new CustomMapper<>() { @Override public void mapAtoB(Sykemelding source, ReceivedSykemeldingDTO target, MappingContext context) { @@ -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(); @@ -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()) @@ -233,6 +239,21 @@ private ReceivedSykemeldingDTO.MedisinskVurdering mapMedisinskVurdering(XMLHelse .build(); } + private List 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(), diff --git a/apps/sykemelding-api/src/test/java/no/nav/registre/testnorge/sykemelding/mapper/SykemeldingValidateMappingStrategyTest.java b/apps/sykemelding-api/src/test/java/no/nav/registre/testnorge/sykemelding/mapper/SykemeldingValidateMappingStrategyTest.java index 0b463c78265..eeab1bf74b7 100644 --- a/apps/sykemelding-api/src/test/java/no/nav/registre/testnorge/sykemelding/mapper/SykemeldingValidateMappingStrategyTest.java +++ b/apps/sykemelding-api/src/test/java/no/nav/registre/testnorge/sykemelding/mapper/SykemeldingValidateMappingStrategyTest.java @@ -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 { @@ -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") @@ -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()) @@ -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()))); @@ -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()))); } } \ No newline at end of file diff --git a/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/sykemelding/v1/DetaljerDTO.java b/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/sykemelding/v1/DetaljerDTO.java index f751dcb3c76..b618ba279a4 100644 --- a/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/sykemelding/v1/DetaljerDTO.java +++ b/libs/data-transfer-objects/src/main/java/no/nav/testnav/libs/dto/sykemelding/v1/DetaljerDTO.java @@ -15,6 +15,7 @@ public class DetaljerDTO { private String tiltakArbeidsplass; private String tiltakNav; + private String andreTiltak; private Boolean arbeidsforEtterEndtPeriode; private String beskrivHensynArbeidsplassen; }