Skip to content

Commit

Permalink
EY-4753 Håndtere adressebeskyttelseshendelse (#6890)
Browse files Browse the repository at this point in the history
* EY-4753 Håndtere adressebeskyttelseshendelse
* Ta også med tilbakestilling av enhet, skjerming og adressebeskyttelse dersom ingen gradering eller skjerming gjøres

* Tmp

* Oppdater tester med å mocke pdl respons for adressebeskyttelse

* Alltid farlige å sette relaxed=true på en mock for det er tungt å debugge

* Sett context i test der det er integration test

* Fiks pdl hendelser test til å asserte på at vi faktisk skal reagere på ugradert

* Fjerne todo

* Fikse ekstra scenarioer der vi kun oppdaterer saken og enheter hvis det har vært en spesial sak

* Fiks test
  • Loading branch information
sebassonav authored Feb 5, 2025
1 parent e7e52b5 commit bf1339d
Show file tree
Hide file tree
Showing 22 changed files with 543 additions and 518 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import no.nav.etterlatte.behandling.BehandlingRequestLogger
import no.nav.etterlatte.behandling.BehandlingServiceImpl
import no.nav.etterlatte.behandling.BehandlingStatusServiceImpl
import no.nav.etterlatte.behandling.BehandlingsHendelserKafkaProducerImpl
import no.nav.etterlatte.behandling.BrukerService
import no.nav.etterlatte.behandling.BrukerServiceImpl
import no.nav.etterlatte.behandling.GrunnlagServiceImpl
import no.nav.etterlatte.behandling.GyldighetsproevingServiceImpl
Expand Down Expand Up @@ -277,6 +278,7 @@ internal class ApplicationContext(
val pdlTjenesterKlient: PdlTjenesterKlient = PdlTjenesterKlientImpl(config, pdlHttpClient(config)),
val kodeverkKlient: KodeverkKlient = KodeverkKlientImpl(config, httpClient()),
val skjermingKlient: SkjermingKlient = SkjermingKlientImpl(skjermingHttpClient(config), env.requireEnvValue(SKJERMING_URL)),
val brukerService: BrukerService = BrukerServiceImpl(pdlTjenesterKlient, norg2Klient),
) {
val httpPort = env.getOrDefault(HTTP_PORT, "8080").toInt()
val saksbehandlerGroupIdsByKey = AzureGroup.entries.associateWith { env.requireEnvValue(it.envKey) }
Expand Down Expand Up @@ -458,7 +460,7 @@ internal class ApplicationContext(
tilbakekrevingKlient,
)
val selfTestService = SelfTestService(externalServices)
val brukerService = BrukerServiceImpl(pdlTjenesterKlient, norg2Klient)

val sakService =
SakServiceImpl(
sakSkrivDao,
Expand Down Expand Up @@ -498,6 +500,14 @@ internal class ApplicationContext(
)

val grunnlagsendringsHendelseFilter = GrunnlagsendringsHendelseFilter(vedtakKlient, behandlingService)
val oppdaterTilgangService =
OppdaterTilgangService(
sakService = sakService,
skjermingKlient = skjermingKlient,
pdltjenesterKlient = pdlTjenesterKlient,
brukerService = brukerService,
oppgaveService = oppgaveService,
)
val grunnlagsendringshendelseService =
GrunnlagsendringshendelseService(
oppgaveService = oppgaveService,
Expand All @@ -506,9 +516,9 @@ internal class ApplicationContext(
pdltjenesterKlient = pdlTjenesterKlient,
grunnlagKlient = grunnlagKlientImpl,
sakService = sakService,
brukerService = brukerService,
doedshendelseService = doedshendelseService,
grunnlagsendringsHendelseFilter = grunnlagsendringsHendelseFilter,
tilgangsService = oppdaterTilgangService,
)

private val doedshendelseReminderJob =
Expand Down Expand Up @@ -593,14 +603,7 @@ internal class ApplicationContext(
behandlingsStatusService,
)
val aldersovergangService = AldersovergangService(vilkaarsvurderingService)
val oppdaterTilgangService =
OppdaterTilgangService(
sakService = sakService,
skjermingKlient = skjermingKlient,
pdltjenesterKlient = pdlTjenesterKlient,
brukerService = brukerService,
oppgaveService = oppgaveService,
)

val behandlingFactory =
BehandlingFactory(
oppgaveService = oppgaveService,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,17 @@ class EgenAnsattService(
fun haandterSkjerming(skjermetHendelse: EgenAnsattSkjermet) {
logger.info("Haandterer skjermet hendelse")
val saker = sakService.finnSaker(skjermetHendelse.fnr)
if (skjermetHendelse.skjermet) {
saker
.map {
val pg = runBlocking { grunnlagKlient.hentPersongalleri(it.id) }
SakIdOgPersongalleri(sakId = it.id, persongalleri = pg)
}.forEach {
oppdaterTilgangService.haandtergraderingOgEgenAnsatt(
sakId = it.sakId,
persongalleri = it.persongalleri,
)
}
} else {
saker.forEach {
oppdaterTilgangService.fjernSkjermingFraSak(it, skjermetHendelse.fnr)
saker
.map {
val pg = runBlocking { grunnlagKlient.hentPersongalleri(it.id) }
SakIdOgPersongalleri(sakId = it.id, persongalleri = pg)
}.forEach {
oppdaterTilgangService.haandtergraderingOgEgenAnsatt(
sakId = it.sakId,
persongalleri = it.persongalleri,
)
}
}

logger.info("Ferdighåndtert skjermet hendelse")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ internal fun Route.grunnlagsendringshendelseRoute(grunnlagsendringshendelseServi
}
}

// Merk at denne endepunktet i seg selv gir ikke ny gradering, denne baserer seg på hva PDL sier om personen og 3-parter
post("/adressebeskyttelse") {
kunSystembruker {
val adressebeskyttelse = call.receive<Adressebeskyttelse>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,15 @@ package no.nav.etterlatte.grunnlagsendring

import kotlinx.coroutines.runBlocking
import no.nav.etterlatte.behandling.BehandlingService
import no.nav.etterlatte.behandling.BrukerService
import no.nav.etterlatte.behandling.domain.GrunnlagsendringStatus
import no.nav.etterlatte.behandling.domain.GrunnlagsendringsType
import no.nav.etterlatte.behandling.domain.Grunnlagsendringshendelse
import no.nav.etterlatte.behandling.domain.SamsvarMellomKildeOgGrunnlag
import no.nav.etterlatte.behandling.klienter.GrunnlagKlient
import no.nav.etterlatte.common.Enheter
import no.nav.etterlatte.common.klienter.PdlTjenesterKlient
import no.nav.etterlatte.grunnlagsendring.doedshendelse.DoedshendelseService
import no.nav.etterlatte.inTransaction
import no.nav.etterlatte.institusjonsopphold.InstitusjonsoppholdHendelseBeriket
import no.nav.etterlatte.libs.common.Enhetsnummer
import no.nav.etterlatte.libs.common.behandling.BehandlingStatus
import no.nav.etterlatte.libs.common.behandling.SakType
import no.nav.etterlatte.libs.common.behandling.SakidOgRolle
Expand All @@ -29,7 +26,6 @@ import no.nav.etterlatte.libs.common.pdlhendelse.ForelderBarnRelasjonHendelse
import no.nav.etterlatte.libs.common.pdlhendelse.SivilstandHendelse
import no.nav.etterlatte.libs.common.pdlhendelse.UtflyttingsHendelse
import no.nav.etterlatte.libs.common.pdlhendelse.VergeMaalEllerFremtidsfullmakt
import no.nav.etterlatte.libs.common.person.AdressebeskyttelseGradering
import no.nav.etterlatte.libs.common.person.maskerFnr
import no.nav.etterlatte.libs.common.sak.Sak
import no.nav.etterlatte.libs.common.sak.SakId
Expand All @@ -38,7 +34,7 @@ import no.nav.etterlatte.libs.common.tidspunkt.toLocalDatetimeUTC
import no.nav.etterlatte.libs.ktor.token.Saksbehandler
import no.nav.etterlatte.oppgave.OppgaveService
import no.nav.etterlatte.sak.SakService
import no.nav.etterlatte.sikkerLogg
import no.nav.etterlatte.tilgangsstyring.OppdaterTilgangService
import org.slf4j.LoggerFactory
import java.time.temporal.ChronoUnit
import java.util.UUID
Expand All @@ -50,9 +46,9 @@ class GrunnlagsendringshendelseService(
private val pdltjenesterKlient: PdlTjenesterKlient,
private val grunnlagKlient: GrunnlagKlient,
private val sakService: SakService,
private val brukerService: BrukerService,
private val doedshendelseService: DoedshendelseService,
private val grunnlagsendringsHendelseFilter: GrunnlagsendringsHendelseFilter,
private val tilgangsService: OppdaterTilgangService,
) {
private val logger = LoggerFactory.getLogger(this::class.java)

Expand Down Expand Up @@ -181,42 +177,14 @@ class GrunnlagsendringshendelseService(
}

suspend fun oppdaterAdressebeskyttelseHendelse(adressebeskyttelse: Adressebeskyttelse) {
/*
Her skal vi bruke OppdaterTilgangService.haandtergraderingOgEgenAnsatt
*/
val gradering = adressebeskyttelse.adressebeskyttelseGradering
val sakIder = grunnlagKlient.hentAlleSakIder(adressebeskyttelse.fnr)
inTransaction {
val (eksisterendeSaker, manglendeSaker) =
sakIder
.map { it to sakService.finnSak(it) }
.partition { it.second != null }

val faktiskeSaker = eksisterendeSaker.map { it.second!! }

if (manglendeSaker.isNotEmpty()) {
logger.error("Sakider som ikke finnes lenger ${manglendeSaker.map { it.first }.joinToString { "," }}")
}

oppdaterEnheterForsaker(fnr = adressebeskyttelse.fnr, gradering = gradering, saker = faktiskeSaker)

faktiskeSaker.forEach { sak ->
sakService.oppdaterAdressebeskyttelse(
sak.id,
gradering,
)
sikkerLogg.info("Oppdaterte adressebeskyttelse for sakId=$sak med gradering=$gradering")
}
if (sakIder.isEmpty()) {
logger.info("Forkaster hendelse da vi ikke fant noen saker på den.")
return
}

if (sakIder.isNotEmpty() &&
gradering in
listOf(
AdressebeskyttelseGradering.STRENGT_FORTROLIG,
AdressebeskyttelseGradering.STRENGT_FORTROLIG_UTLAND,
)
) {
logger.error("Vi har en eller flere saker som er beskyttet med gradering ($gradering), se sikkerLogg.")
sakIder.forEach {
val pg = grunnlagKlient.hentPersongalleri(it)
inTransaction { tilgangsService.haandtergraderingOgEgenAnsatt(it, pg) }
}
}

Expand All @@ -225,36 +193,6 @@ class GrunnlagsendringshendelseService(
opprettBostedhendelse(bostedsadresse)
}

private fun oppdaterEnheterForsaker(
fnr: String,
gradering: AdressebeskyttelseGradering,
saker: List<Sak>,
) {
val sakerMedNyEnhet =
saker.map {
SakMedEnhet(it.id, finnEnhetFraGradering(fnr, gradering, it.sakType))
}
sakService.oppdaterEnhetForSaker(sakerMedNyEnhet)
oppgaveService.oppdaterEnhetForRelaterteOppgaver(sakerMedNyEnhet)
}

private fun finnEnhetFraGradering(
fnr: String,
gradering: AdressebeskyttelseGradering,
sakType: SakType,
): Enhetsnummer =
when (gradering) {
AdressebeskyttelseGradering.STRENGT_FORTROLIG_UTLAND -> Enheter.STRENGT_FORTROLIG.enhetNr
AdressebeskyttelseGradering.STRENGT_FORTROLIG -> Enheter.STRENGT_FORTROLIG_UTLAND.enhetNr
AdressebeskyttelseGradering.FORTROLIG -> {
brukerService.finnEnhetForPersonOgTema(fnr, sakType.tema, sakType).enhetNr
}

AdressebeskyttelseGradering.UGRADERT -> {
brukerService.finnEnhetForPersonOgTema(fnr, sakType.tema, sakType).enhetNr
}
}

fun opprettDoedshendelseForPerson(grunnlagsendringshendelse: Grunnlagsendringshendelse): OppgaveIntern {
grunnlagsendringshendelseDao.opprettGrunnlagsendringshendelse(grunnlagsendringshendelse)
return opprettOppgave(grunnlagsendringshendelse)
Expand Down Expand Up @@ -453,7 +391,7 @@ class GrunnlagsendringshendelseService(
} else {
forkastHendelse(grunnlagsendringshendelse, samsvarMellomPdlOgGrunnlag)
}
} catch (e: GrunnlagRolleException) {
} catch (_: GrunnlagRolleException) {
logger.warn("GrunnlagRolleException ble kastet – forkaster hendelsen")

forkastHendelse(
Expand Down
17 changes: 0 additions & 17 deletions apps/etterlatte-behandling/src/main/kotlin/sak/SakLesDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,23 +32,6 @@ class SakLesDao(
)
}

fun finnSakerMedGraderingOgSkjerming(sakIder: List<SakId>): List<SakMedGradering> =
connectionAutoclosing.hentConnection { connection ->
with(connection) {
val statement =
prepareStatement(
"SELECT id, adressebeskyttelse from sak where id = any(?)",
)
statement.setArray(1, createArrayOf("bigint", sakIder.toTypedArray()))
statement.executeQuery().toList {
SakMedGradering(
id = SakId(getLong(1)),
adressebeskyttelseGradering = getString(2)?.let { AdressebeskyttelseGradering.valueOf(it) },
)
}
}
}

fun hentSaker(
kjoering: String,
antall: Int,
Expand Down
10 changes: 3 additions & 7 deletions apps/etterlatte-behandling/src/main/kotlin/sak/SakService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,6 @@ interface SakService {

fun oppdaterEnhetForSaker(saker: List<SakMedEnhet>)

fun sjekkOmSakerErGradert(sakIder: List<SakId>): List<SakMedGradering>

fun oppdaterAdressebeskyttelse(
sakId: SakId,
adressebeskyttelseGradering: AdressebeskyttelseGradering,
Expand Down Expand Up @@ -117,7 +115,7 @@ interface SakService {

fun hentSakerMedPleieforholdetOpphoerte(maanedOpphoerte: YearMonth): List<SakId>

fun settEnhetOmAdresseebeskyttet(
fun settEnhetOmAdressebeskyttet(
sak: Sak,
gradering: AdressebeskyttelseGradering,
)
Expand Down Expand Up @@ -377,12 +375,12 @@ class SakServiceImpl(
)
}
oppdaterAdressebeskyttelse(sak.id, hentetGradering)
settEnhetOmAdresseebeskyttet(sak, hentetGradering)
settEnhetOmAdressebeskyttet(sak, hentetGradering)
sjekkGraderingOgEnhetStemmer(lesDao.finnSakMedGraderingOgSkjerming(sak.id))
return sak
}

override fun settEnhetOmAdresseebeskyttet(
override fun settEnhetOmAdressebeskyttet(
sak: Sak,
gradering: AdressebeskyttelseGradering,
) {
Expand Down Expand Up @@ -523,8 +521,6 @@ class SakServiceImpl(
dao.oppdaterEnheterPaaSaker(saker)
}

override fun sjekkOmSakerErGradert(sakIder: List<SakId>): List<SakMedGradering> = lesDao.finnSakerMedGraderingOgSkjerming(sakIder)

override fun finnSak(
ident: String,
type: SakType,
Expand Down
Loading

0 comments on commit bf1339d

Please sign in to comment.