Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Forenkling og avgrensning i BrevsignaturService ifm utledning av "skjulSaksbehandler"-flagget #2773

Closed
wants to merge 12 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 21 additions & 15 deletions src/main/kotlin/no/nav/familie/ef/sak/brev/BrevsignaturService.kt
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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)
Expand All @@ -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(
Expand Down Expand Up @@ -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"
Expand All @@ -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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<PersonopplysningerService>()
private val personopplysningerService = mockk<PersonopplysningerService>()
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()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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<Fagsak>()) } returns
every { brevsignaturService.lagBeslutterSignatur("123", any()) } returns
SignaturDto(
"Navn Navnesen",
"En enhet",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -45,9 +48,11 @@ internal class VedtaksbrevServiceTest {
private val brevClient = mockk<BrevClient>()
private val vedtaksbrevRepository = mockk<VedtaksbrevRepository>()
private val personopplysningerService = mockk<PersonopplysningerService>()
private val vedtakService: VedtakService = mockk<VedtakService>()
private val brevsignaturService = BrevsignaturService(personopplysningerService)
private val familieDokumentClient = mockk<FamilieDokumentClient>()
private val tilordnetRessursService = mockk<TilordnetRessursService>()
private val fagsakService = mockk<FagsakService>()

private val vedtaksbrevService =
VedtaksbrevService(
Expand All @@ -56,6 +61,8 @@ internal class VedtaksbrevServiceTest {
brevsignaturService,
familieDokumentClient,
tilordnetRessursService,
vedtakService,
fagsakService,
)

private val vedtakKreverBeslutter = VedtakErUtenBeslutter(false)
Expand All @@ -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
Expand All @@ -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<Vedtaksbrev>()

val ident = "12345678910"
Expand Down Expand Up @@ -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
Expand All @@ -303,6 +312,7 @@ internal class VedtaksbrevServiceTest {
@Test
internal fun `skal oppdatere vedtaksbrev med nytt tidspunkt`() {
val vedtaksbrevSlot = slot<Vedtaksbrev>()
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"
Expand Down