diff --git a/src/main/kotlin/no/nav/familie/ef/sak/brev/BrevsignaturService.kt b/src/main/kotlin/no/nav/familie/ef/sak/brev/BrevsignaturService.kt index 86bb286166..9fa40fb17e 100644 --- a/src/main/kotlin/no/nav/familie/ef/sak/brev/BrevsignaturService.kt +++ b/src/main/kotlin/no/nav/familie/ef/sak/brev/BrevsignaturService.kt @@ -1,8 +1,6 @@ package no.nav.familie.ef.sak.brev -import no.nav.familie.ef.sak.behandling.Saksbehandling import no.nav.familie.ef.sak.brev.dto.SignaturDto -import no.nav.familie.ef.sak.fagsak.domain.Fagsak import no.nav.familie.ef.sak.infrastruktur.sikkerhet.SikkerhetContext import no.nav.familie.ef.sak.opplysninger.personopplysninger.PersonopplysningerService import no.nav.familie.ef.sak.vedtak.domain.VedtakErUtenBeslutter @@ -12,32 +10,40 @@ import org.springframework.stereotype.Service @Service class BrevsignaturService( - val personopplysningerService: PersonopplysningerService, + private val personopplysningerService: PersonopplysningerService, ) { - fun lagSignaturMedEnhet(saksbehandling: Saksbehandling): SignaturDto = lagSignaturDto(saksbehandling.ident) - - fun lagSignaturMedEnhet(fagsak: Fagsak): SignaturDto = lagSignaturDto(fagsak.hentAktivIdent()) - - fun lagSignaturMedEnhet( - saksbehandling: Saksbehandling, + fun lagSaksbehandlerSignatur( + personIdent: String, vedtakErUtenBeslutter: VedtakErUtenBeslutter, ): SignaturDto { - if (vedtakErUtenBeslutter.value) { - return SignaturDto("", "", true) + val harStrengtFortroligAdresse: Boolean = + personopplysningerService + .hentStrengesteAdressebeskyttelseForPersonMedRelasjoner(personIdent) + .let { it == STRENGT_FORTROLIG || it == STRENGT_FORTROLIG_UTLAND } + + return if (harStrengtFortroligAdresse) { + SignaturDto(NAV_ANONYM_NAVN, ENHET_VIKAFOSSEN, true) + } else { + SignaturDto(SikkerhetContext.hentSaksbehandlerNavn(true), ENHET_NAY, vedtakErUtenBeslutter.value) } - return lagSignaturMedEnhet(saksbehandling) } - private fun lagSignaturDto(ident: String): SignaturDto { + fun lagBeslutterSignatur( + personIdent: String, + vedtakErUtenBeslutter: VedtakErUtenBeslutter, + ): SignaturDto { val harStrengtFortroligAdresse: Boolean = personopplysningerService - .hentStrengesteAdressebeskyttelseForPersonMedRelasjoner(ident) + .hentStrengesteAdressebeskyttelseForPersonMedRelasjoner(personIdent) .let { it == STRENGT_FORTROLIG || it == STRENGT_FORTROLIG_UTLAND } + val signaturNavn = if (vedtakErUtenBeslutter.value) "" else SikkerhetContext.hentSaksbehandlerNavn(true) + val signaturEnhet = if (vedtakErUtenBeslutter.value) "" else ENHET_NAY + return if (harStrengtFortroligAdresse) { SignaturDto(NAV_ANONYM_NAVN, ENHET_VIKAFOSSEN, true) } else { - SignaturDto(SikkerhetContext.hentSaksbehandlerNavn(true), ENHET_NAY, false) + SignaturDto(signaturNavn, signaturEnhet, vedtakErUtenBeslutter.value) } } diff --git "a/src/main/kotlin/no/nav/familie/ef/sak/brev/Frittst\303\245endeBrevService.kt" "b/src/main/kotlin/no/nav/familie/ef/sak/brev/Frittst\303\245endeBrevService.kt" index 11afd4ef6f..c18ad6a10f 100644 --- "a/src/main/kotlin/no/nav/familie/ef/sak/brev/Frittst\303\245endeBrevService.kt" +++ "b/src/main/kotlin/no/nav/familie/ef/sak/brev/Frittst\303\245endeBrevService.kt" @@ -13,6 +13,7 @@ import no.nav.familie.ef.sak.infrastruktur.exception.brukerfeilHvis import no.nav.familie.ef.sak.infrastruktur.sikkerhet.SikkerhetContext import no.nav.familie.ef.sak.iverksett.IverksettClient import no.nav.familie.ef.sak.iverksett.tilIverksettDto +import no.nav.familie.ef.sak.vedtak.domain.VedtakErUtenBeslutter import no.nav.familie.kontrakter.ef.iverksett.Brevmottaker import no.nav.familie.kontrakter.felles.objectMapper import org.springframework.stereotype.Service @@ -37,7 +38,7 @@ class FrittståendeBrevService( brevrequest: JsonNode, ): ByteArray { val fagsak = fagsakService.hentFagsak(fagsakId) - val signatur = brevsignaturService.lagSignaturMedEnhet(fagsak) + val signatur = brevsignaturService.lagSaksbehandlerSignatur(fagsak.hentAktivIdent(), VedtakErUtenBeslutter(true)) val html = brevClient @@ -46,7 +47,7 @@ class FrittståendeBrevService( saksbehandlerBrevrequest = brevrequest, saksbehandlersignatur = signatur.navn, enhet = signatur.enhet, - skjulBeslutterSignatur = true, + skjulBeslutterSignatur = signatur.skjulBeslutter, ).replace(VedtaksbrevService.BESLUTTER_VEDTAKSDATO_PLACEHOLDER, LocalDate.now().norskFormat()) return familieDokumentClient.genererPdfFraHtml(html) diff --git a/src/main/kotlin/no/nav/familie/ef/sak/brev/VedtaksbrevService.kt b/src/main/kotlin/no/nav/familie/ef/sak/brev/VedtaksbrevService.kt index 0efe470b1a..a4062f0e16 100644 --- a/src/main/kotlin/no/nav/familie/ef/sak/brev/VedtaksbrevService.kt +++ b/src/main/kotlin/no/nav/familie/ef/sak/brev/VedtaksbrevService.kt @@ -6,6 +6,7 @@ import no.nav.familie.ef.sak.behandling.domain.BehandlingStatus import no.nav.familie.ef.sak.behandlingsflyt.steg.StegType import no.nav.familie.ef.sak.brev.domain.Vedtaksbrev import no.nav.familie.ef.sak.brev.dto.SignaturDto +import no.nav.familie.ef.sak.fagsak.FagsakService import no.nav.familie.ef.sak.felles.domain.Fil import no.nav.familie.ef.sak.felles.domain.SporbarUtils import no.nav.familie.ef.sak.felles.util.norskFormat @@ -17,6 +18,7 @@ import no.nav.familie.ef.sak.infrastruktur.exception.feilHvisIkke import no.nav.familie.ef.sak.infrastruktur.sikkerhet.SikkerhetContext import no.nav.familie.ef.sak.oppgave.TilordnetRessursService import no.nav.familie.ef.sak.repository.findByIdOrThrow +import no.nav.familie.ef.sak.vedtak.VedtakService import no.nav.familie.ef.sak.vedtak.domain.VedtakErUtenBeslutter import org.springframework.http.HttpStatus import org.springframework.stereotype.Service @@ -31,6 +33,8 @@ class VedtaksbrevService( private val brevsignaturService: BrevsignaturService, private val familieDokumentClient: FamilieDokumentClient, private val tilordnetRessursService: TilordnetRessursService, + private val vedtakService: VedtakService, + private val fagsakService: FagsakService, ) { fun hentBeslutterbrevEllerRekonstruerSaksbehandlerBrev(behandlingId: UUID): ByteArray { val vedtaksbrev = brevRepository.findByIdOrThrow(behandlingId) @@ -51,8 +55,10 @@ class VedtaksbrevService( brevmal: String, ): ByteArray { validerRedigerbarBehandling(saksbehandling) - - val saksbehandlersignatur = brevsignaturService.lagSignaturMedEnhet(saksbehandling) + val fagsak = fagsakService.hentFagsak(saksbehandling.fagsakId) + val vedtak = vedtakService.hentVedtak(saksbehandling.id) + val vedtakErUtenBeslutter = vedtak.utledVedtakErUtenBeslutter() + val saksbehandlersignatur = brevsignaturService.lagSaksbehandlerSignatur(fagsak.hentAktivIdent(), vedtakErUtenBeslutter) val html = brevClient.genererHtml( @@ -100,7 +106,9 @@ class VedtaksbrevService( fun forhåndsvisBeslutterBrev(saksbehandling: Saksbehandling): ByteArray { val vedtaksbrev = brevRepository.findByIdOrThrow(saksbehandling.id) - val signaturMedEnhet = brevsignaturService.lagSignaturMedEnhet(saksbehandling) + val vedtak = vedtakService.hentVedtak(saksbehandling.id) + val vedtakErUtenBeslutter = vedtak.utledVedtakErUtenBeslutter() + val signaturMedEnhet = brevsignaturService.lagBeslutterSignatur(saksbehandling.ident, vedtakErUtenBeslutter) feilHvis(vedtaksbrev.saksbehandlerHtml == null) { "Mangler saksbehandlerbrev" @@ -120,7 +128,7 @@ class VedtaksbrevService( val saksbehandlerHtml = hentSaksbehandlerHtml(vedtaksbrev, saksbehandling) val beslutterIdent = SikkerhetContext.hentSaksbehandler() validerKanLageBeslutterbrev(saksbehandling, vedtaksbrev, beslutterIdent, vedtakErUtenBeslutter) - val signaturMedEnhet = brevsignaturService.lagSignaturMedEnhet(saksbehandling, vedtakErUtenBeslutter) + val signaturMedEnhet = brevsignaturService.lagBeslutterSignatur(saksbehandling.ident, vedtakErUtenBeslutter) val beslutterPdf = lagBeslutterPdfMedSignatur(saksbehandlerHtml, signaturMedEnhet) val besluttervedtaksbrev = vedtaksbrev.copy( diff --git a/src/test/kotlin/no/nav/familie/ef/sak/brev/BrevsignaturServiceTest.kt b/src/test/kotlin/no/nav/familie/ef/sak/brev/BrevsignaturServiceTest.kt index 8f926fc2a5..26d6e10321 100644 --- a/src/test/kotlin/no/nav/familie/ef/sak/brev/BrevsignaturServiceTest.kt +++ b/src/test/kotlin/no/nav/familie/ef/sak/brev/BrevsignaturServiceTest.kt @@ -4,35 +4,92 @@ import io.mockk.every import io.mockk.mockk import no.nav.familie.ef.sak.felles.util.BrukerContextUtil import no.nav.familie.ef.sak.opplysninger.personopplysninger.PersonopplysningerService -import no.nav.familie.ef.sak.repository.fagsak -import no.nav.familie.ef.sak.repository.fagsakpersoner +import no.nav.familie.ef.sak.vedtak.domain.VedtakErUtenBeslutter import no.nav.familie.kontrakter.felles.personopplysning.ADRESSEBESKYTTELSEGRADERING import org.assertj.core.api.Assertions import org.junit.jupiter.api.Test internal class BrevsignaturServiceTest { - val personopplysningerService = mockk() + private val personopplysningerService = mockk() + private val brevsignaturService = BrevsignaturService(personopplysningerService) - val brevsignaturService = BrevsignaturService(personopplysningerService) + @Test + fun `skal sende frittstående brev med NAV Vikafossen signatur dersom person har strengt fortrolig adresse`() { + every { personopplysningerService.hentStrengesteAdressebeskyttelseForPersonMedRelasjoner(any()) } returns ADRESSEBESKYTTELSEGRADERING.STRENGT_FORTROLIG + val signaturMedEnhet = brevsignaturService.lagSaksbehandlerSignatur("123", VedtakErUtenBeslutter(false)) + Assertions.assertThat(signaturMedEnhet.enhet).isEqualTo(BrevsignaturService.ENHET_VIKAFOSSEN) + Assertions.assertThat(signaturMedEnhet.navn).isEqualTo(BrevsignaturService.NAV_ANONYM_NAVN) + Assertions.assertThat(signaturMedEnhet.skjulBeslutter).isTrue() + } + + @Test + fun `skal sende frittstående brev med vanlig nay signatur når søkeradressebeskyttelse er ugradert`() { + val saksbehandlerNavn = "Ole Olsen" + BrukerContextUtil.mockBrukerContext(saksbehandlerNavn) + every { personopplysningerService.hentStrengesteAdressebeskyttelseForPersonMedRelasjoner(any()) } returns ADRESSEBESKYTTELSEGRADERING.UGRADERT + + val signaturMedEnhet = brevsignaturService.lagSaksbehandlerSignatur("123", VedtakErUtenBeslutter(false)) + + Assertions.assertThat(signaturMedEnhet.enhet).isEqualTo(BrevsignaturService.ENHET_NAY) + Assertions.assertThat(signaturMedEnhet.navn).isEqualTo(saksbehandlerNavn) + Assertions.assertThat(signaturMedEnhet.skjulBeslutter).isFalse() + + BrukerContextUtil.clearBrukerContext() + } + + @Test + fun `skal sende frittstående brev med vanlig nay signatur selv om vedtak er uten beslutter`() { + val saksbehandlerNavn = "Ole Olsen" + BrukerContextUtil.mockBrukerContext(saksbehandlerNavn) + every { personopplysningerService.hentStrengesteAdressebeskyttelseForPersonMedRelasjoner(any()) } returns ADRESSEBESKYTTELSEGRADERING.UGRADERT + + val signaturMedEnhet = brevsignaturService.lagSaksbehandlerSignatur("123", VedtakErUtenBeslutter(true)) + + Assertions.assertThat(signaturMedEnhet.enhet).isEqualTo(BrevsignaturService.ENHET_NAY) + Assertions.assertThat(signaturMedEnhet.navn).isEqualTo(saksbehandlerNavn) + Assertions.assertThat(signaturMedEnhet.skjulBeslutter).isTrue() + + BrukerContextUtil.clearBrukerContext() + } @Test - fun `skal sende frittstående brev med NAV Vikafossen signatur `() { + fun `skal sende vedtaksbrev med NAV Vikafossen signatur dersom person har strengt fortrolig adresse`() { + val saksbehandlerNavn = "Ole Olsen" + BrukerContextUtil.mockBrukerContext(saksbehandlerNavn) + every { personopplysningerService.hentStrengesteAdressebeskyttelseForPersonMedRelasjoner(any()) } returns ADRESSEBESKYTTELSEGRADERING.STRENGT_FORTROLIG - val signaturMedEnhet = brevsignaturService.lagSignaturMedEnhet(fagsak(identer = fagsakpersoner(setOf("123")))) + val signaturMedEnhet = brevsignaturService.lagBeslutterSignatur("123", VedtakErUtenBeslutter(false)) Assertions.assertThat(signaturMedEnhet.enhet).isEqualTo(BrevsignaturService.ENHET_VIKAFOSSEN) Assertions.assertThat(signaturMedEnhet.navn).isEqualTo(BrevsignaturService.NAV_ANONYM_NAVN) + Assertions.assertThat(signaturMedEnhet.skjulBeslutter).isTrue() + + BrukerContextUtil.clearBrukerContext() } @Test - fun `skal sende frittstående brev med vanlig nay signatur når søkeradressebeskyttelse er ugradert `() { + fun `skal sende vedtaksbrev brev med vanlig nay signatur når søkeradressebeskyttelse er ugradert`() { val fortventetSaksbehandlerNavn = "Ole Olsen" BrukerContextUtil.mockBrukerContext(fortventetSaksbehandlerNavn) - every { personopplysningerService.hentStrengesteAdressebeskyttelseForPersonMedRelasjoner(any()) } returns ADRESSEBESKYTTELSEGRADERING.UGRADERT - - val signaturMedEnhet = brevsignaturService.lagSignaturMedEnhet(fagsak(identer = fagsakpersoner(setOf("123")))) + every { personopplysningerService.hentStrengesteAdressebeskyttelseForPersonMedRelasjoner(any()) } returns ADRESSEBESKYTTELSEGRADERING.UGRADERT + val signaturMedEnhet = brevsignaturService.lagBeslutterSignatur("123", VedtakErUtenBeslutter(false)) Assertions.assertThat(signaturMedEnhet.enhet).isEqualTo(BrevsignaturService.ENHET_NAY) Assertions.assertThat(signaturMedEnhet.navn).isEqualTo(fortventetSaksbehandlerNavn) + Assertions.assertThat(signaturMedEnhet.skjulBeslutter).isFalse() + + BrukerContextUtil.clearBrukerContext() + } + + @Test + fun `skal ikke sette navn på beslutter dersom vedtak er uten beslutter`() { + val saksbehandlerNavn = "Ole Olsen" + BrukerContextUtil.mockBrukerContext(saksbehandlerNavn) + + every { personopplysningerService.hentStrengesteAdressebeskyttelseForPersonMedRelasjoner(any()) } returns ADRESSEBESKYTTELSEGRADERING.UGRADERT + val signaturMedEnhet = brevsignaturService.lagBeslutterSignatur("123", VedtakErUtenBeslutter(true)) + Assertions.assertThat(signaturMedEnhet.enhet).isEqualTo("") + Assertions.assertThat(signaturMedEnhet.navn).isEqualTo("") + Assertions.assertThat(signaturMedEnhet.skjulBeslutter).isTrue() BrukerContextUtil.clearBrukerContext() } diff --git "a/src/test/kotlin/no/nav/familie/ef/sak/brev/Frittst\303\245endeBrevServiceTest.kt" "b/src/test/kotlin/no/nav/familie/ef/sak/brev/Frittst\303\245endeBrevServiceTest.kt" index fe81509e59..65dc7a2ce5 100644 --- "a/src/test/kotlin/no/nav/familie/ef/sak/brev/Frittst\303\245endeBrevServiceTest.kt" +++ "b/src/test/kotlin/no/nav/familie/ef/sak/brev/Frittst\303\245endeBrevServiceTest.kt" @@ -12,7 +12,6 @@ import no.nav.familie.ef.sak.brev.domain.MottakerRolle import no.nav.familie.ef.sak.brev.dto.FrittståendeSanitybrevDto import no.nav.familie.ef.sak.brev.dto.SignaturDto import no.nav.familie.ef.sak.fagsak.FagsakService -import no.nav.familie.ef.sak.fagsak.domain.Fagsak import no.nav.familie.ef.sak.felles.util.BrukerContextUtil import no.nav.familie.ef.sak.infrastruktur.exception.ApiFeil import no.nav.familie.ef.sak.iverksett.IverksettClient @@ -149,7 +148,7 @@ internal class FrittståendeBrevServiceTest { every { fagsakService.hentFagsak(any()) } returns fagsak every { fagsakService.hentEksternId(any()) } returns Long.MAX_VALUE every { arbeidsfordelingService.hentNavEnhetIdEllerBrukMaskinellEnhetHvisNull(any()) } returns "123" - every { brevsignaturService.lagSignaturMedEnhet(any()) } returns + every { brevsignaturService.lagBeslutterSignatur("123", any()) } returns SignaturDto( "Navn Navnesen", "En enhet", diff --git a/src/test/kotlin/no/nav/familie/ef/sak/service/VedtaksbrevServiceTest.kt b/src/test/kotlin/no/nav/familie/ef/sak/service/VedtaksbrevServiceTest.kt index 18cca86421..48a4336c27 100644 --- a/src/test/kotlin/no/nav/familie/ef/sak/service/VedtaksbrevServiceTest.kt +++ b/src/test/kotlin/no/nav/familie/ef/sak/service/VedtaksbrevServiceTest.kt @@ -13,6 +13,7 @@ import no.nav.familie.ef.sak.brev.VedtaksbrevRepository import no.nav.familie.ef.sak.brev.VedtaksbrevService import no.nav.familie.ef.sak.brev.VedtaksbrevService.Companion.BESLUTTER_SIGNATUR_PLACEHOLDER import no.nav.familie.ef.sak.brev.domain.Vedtaksbrev +import no.nav.familie.ef.sak.fagsak.FagsakService import no.nav.familie.ef.sak.fagsak.domain.PersonIdent import no.nav.familie.ef.sak.felles.domain.Fil import no.nav.familie.ef.sak.felles.domain.SporbarUtils @@ -27,6 +28,8 @@ import no.nav.familie.ef.sak.repository.behandling import no.nav.familie.ef.sak.repository.fagsak import no.nav.familie.ef.sak.repository.findByIdOrThrow import no.nav.familie.ef.sak.repository.saksbehandling +import no.nav.familie.ef.sak.repository.vedtak +import no.nav.familie.ef.sak.vedtak.VedtakService import no.nav.familie.ef.sak.vedtak.domain.VedtakErUtenBeslutter import no.nav.familie.kontrakter.felles.objectMapper import no.nav.familie.kontrakter.felles.personopplysning.ADRESSEBESKYTTELSEGRADERING.STRENGT_FORTROLIG @@ -45,9 +48,11 @@ internal class VedtaksbrevServiceTest { private val brevClient = mockk() private val vedtaksbrevRepository = mockk() private val personopplysningerService = mockk() + private val vedtakService: VedtakService = mockk() private val brevsignaturService = BrevsignaturService(personopplysningerService) private val familieDokumentClient = mockk() private val tilordnetRessursService = mockk() + private val fagsakService = mockk() private val vedtaksbrevService = VedtaksbrevService( @@ -56,6 +61,8 @@ internal class VedtaksbrevServiceTest { brevsignaturService, familieDokumentClient, tilordnetRessursService, + vedtakService, + fagsakService, ) private val vedtakKreverBeslutter = VedtakErUtenBeslutter(false) @@ -68,6 +75,7 @@ internal class VedtaksbrevServiceTest { fun setUp() { mockBrukerContext(beslutterNavn) every { personopplysningerService.hentStrengesteAdressebeskyttelseForPersonMedRelasjoner(any()) } returns UGRADERT + every { vedtakService.hentVedtak(any()) } returns vedtak(behandling.id) } @AfterEach @@ -76,7 +84,7 @@ internal class VedtaksbrevServiceTest { } @Test - internal fun `skal lage tom signatur hvis vedtak er uten beslutter`() { + internal fun `skal ikke sette navn eller enhet på besluttersignatur dersom vedtak er uten beslutter`() { val vedtaksbrevSlot = slot() val ident = "12345678910" @@ -285,6 +293,7 @@ internal class VedtaksbrevServiceTest { val html = "html" + every { fagsakService.hentFagsak(any()) } returns fagsak every { brevClient.genererHtml(any(), any(), any(), any(), any()) } returns html every { vedtaksbrevRepository.existsById(any()) } returns false every { vedtaksbrevRepository.insert(capture(vedtaksbrevSlot)) } returns vedtaksbrev @@ -303,6 +312,7 @@ internal class VedtaksbrevServiceTest { @Test internal fun `skal oppdatere vedtaksbrev med nytt tidspunkt`() { val vedtaksbrevSlot = slot() + every { fagsakService.hentFagsak(any()) } returns fagsak every { vedtaksbrevRepository.existsById(any()) } returns true every { vedtaksbrevRepository.update(capture(vedtaksbrevSlot)) } answers { firstArg() } every { brevClient.genererHtml(any(), any(), any(), any(), any()) } returns "html"