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