Skip to content

Commit

Permalink
Sikre at persongalleri oppdateres korrekt ved endret fnr på sak (#6498)
Browse files Browse the repository at this point in the history
  • Loading branch information
Watercolours authored Dec 2, 2024
1 parent a222270 commit b755d50
Show file tree
Hide file tree
Showing 16 changed files with 91 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -331,8 +331,8 @@ class BehandlingFactory(
OmgjoerBehandling(nyFoerstegangsbehandling, sisteAvslaatteBehandling, foerstegangsbehandlingViOmgjoerer)
}

val persongalleri =
runBlocking { grunnlagService.hentPersongalleri(behandlingerForOmgjoering.foerstegangsbehandlingViOmgjoerer.id) }
val persongalleri = runBlocking { grunnlagService.hentPersongalleri(sakId) }

runBlocking {
grunnlagService.leggInnNyttGrunnlag(
behandlingerForOmgjoering.nyFoerstegangsbehandling,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ interface GrunnlagService {
brukerTokenInfo: BrukerTokenInfo? = null,
)

suspend fun hentPersongalleri(behandlingId: UUID): Persongalleri
suspend fun hentPersongalleri(sakId: SakId): Persongalleri

suspend fun hentAlleSakerForPerson(fnr: String): PersonMedSakerOgRoller

Expand Down Expand Up @@ -117,11 +117,7 @@ class GrunnlagServiceImpl(
brukerTokenInfo: BrukerTokenInfo?,
) = grunnlagKlient.lagreNyeSaksopplysningerBareSak(sakId, opplysninger, brukerTokenInfo)

override suspend fun hentPersongalleri(behandlingId: UUID): Persongalleri =
grunnlagKlient
.hentPersongalleri(behandlingId)
?.opplysning
?: throw NoSuchElementException("Persongalleri mangler for behandling id=$behandlingId")
override suspend fun hentPersongalleri(sakId: SakId): Persongalleri = grunnlagKlient.hentPersongalleri(sakId)

override suspend fun laasTilGrunnlagIBehandling(
revurdering: Revurdering,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ interface GrunnlagKlient : Pingable {
brukerTokenInfo: BrukerTokenInfo? = null,
)

suspend fun hentPersongalleri(behandlingId: UUID): Grunnlagsopplysning<Persongalleri>?
suspend fun hentPersongalleri(sakId: SakId): Persongalleri

suspend fun lagreNyeSaksopplysninger(
behandlingId: UUID,
Expand Down Expand Up @@ -401,15 +401,11 @@ class GrunnlagKlientImpl(
failure = { errorResponse -> throw errorResponse },
)

override suspend fun hentPersongalleri(behandlingId: UUID): Grunnlagsopplysning<Persongalleri>? =
override suspend fun hentPersongalleri(sakId: SakId): Persongalleri =
downstreamResourceClient
.get(
resource =
Resource(
clientId = clientId,
url = "$resourceApiUrl/grunnlag/behandling/$behandlingId/${Opplysningstype.PERSONGALLERI_V1}",
),
brukerTokenInfo = Kontekst.get().brukerTokenInfo!!,
Resource(clientId, "$resourceApiUrl/grunnlag/sak/$sakId/persongalleri"),
Kontekst.get().brukerTokenInfo!!,
).mapBoth(
success = { resource -> deserialize(resource.response.toString()) },
failure = { errorResponse -> throw errorResponse },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class AutomatiskRevurderingService(

gyldigForAutomatiskRevurdering(request, loepende, forrigeBehandling, systembruker)

val persongalleri = grunnlagService.hentPersongalleri(forrigeBehandling.id)
val persongalleri = grunnlagService.hentPersongalleri(request.sakId)

val revurderingOgOppfoelging =
inTransaction {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ class ManuellRevurderingService(
opphoerFraOgMed: YearMonth? = null,
): Revurdering =
forrigeBehandling.let {
val persongalleri = runBlocking { grunnlagService.hentPersongalleri(forrigeBehandling.id) }
val persongalleri = runBlocking { grunnlagService.hentPersongalleri(sakId) }
val triggendeOppgave = paaGrunnAvOppgave?.let { oppgaveService.hentOppgave(it) }

revurderingService
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ class OmgjoeringKlageRevurderingService(
behandlingDao.hentBehandling(behandlingSomOmgjoeresId)
?: throw FeilIOmgjoering.ManglerBehandlingForOmgjoering(klagenViOmgjoerPaaGrunnAv)

val persongalleri = runBlocking { grunnlagService.hentPersongalleri(behandlingSomOmgjoeres.id) }
val persongalleri = runBlocking { grunnlagService.hentPersongalleri(sakId) }
return revurderingService
.opprettRevurdering(
sakId = sakId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -324,10 +324,7 @@ class AarligInntektsjusteringJobbService(
loependeFom: YearMonth,
begrunnelse: String,
): Revurdering {
val persongalleri =
runBlocking {
grunnlagService.hentPersongalleri(forrigeBehandling.id)
}
val persongalleri = runBlocking { grunnlagService.hentPersongalleri(sakId) }

val revurdering =
revurderingService
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -518,10 +518,15 @@ class OppgaveService(
saksbehandler: BrukerTokenInfo,
): OppgaveIntern {
try {
// TODO: Må undersøke konsekvensen av å legge til Status.NY på [hentOppgaveUnderBehandling]
val oppgaveUnderbehandling =
checkNotNull(hentOppgaveUnderBehandling(referanse)) {
"Fant ingen oppgave under behandling med referanse=$referanse"
}
oppgaveDao
.hentOppgaverForReferanse(referanse)
.singleOrNull { !it.erAvsluttet() }

checkNotNull(oppgaveUnderbehandling) {
"Fant ingen oppgave under behandling med referanse=$referanse"
}

sikreAtSaksbehandlerSomLukkerOppgaveEierOppgaven(oppgaveUnderbehandling, saksbehandler)
oppgaveDao.endreStatusPaaOppgave(oppgaveUnderbehandling.id, Status.AVBRUTT)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ internal fun Route.sakWebRoutes(

logger.info("Oppdaterer sak ${sak.id} og tilhørende oppgaver med nyeste ident fra PDL")

val oppdatertSak = sakService.oppdaterIdentForSak(sak)
val oppdatertSak = sakService.oppdaterIdentForSak(sak, brukerTokenInfo)
oppgaveService.oppdaterIdentForOppgaver(oppdatertSak)

behandlingService.hentAapneBehandlingerForSak(sakId).forEach {
Expand Down
20 changes: 18 additions & 2 deletions apps/etterlatte-behandling/src/main/kotlin/sak/SakService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import no.nav.etterlatte.libs.common.sak.SakId
import no.nav.etterlatte.libs.common.sak.SakMedGraderingOgSkjermet
import no.nav.etterlatte.libs.common.tidspunkt.Tidspunkt
import no.nav.etterlatte.libs.common.toJsonNode
import no.nav.etterlatte.libs.ktor.token.BrukerTokenInfo
import no.nav.etterlatte.libs.ktor.token.Fagsaksystem
import no.nav.etterlatte.libs.ktor.token.HardkodaSystembruker
import no.nav.etterlatte.libs.ktor.token.Systembruker
Expand Down Expand Up @@ -101,7 +102,10 @@ interface SakService {
bruker: Systembruker,
): SakMedGraderingOgSkjermet

fun oppdaterIdentForSak(sak: Sak): Sak
fun oppdaterIdentForSak(
sak: Sak,
bruker: BrukerTokenInfo,
): Sak
}

class ManglerTilgangTilEnhet(
Expand Down Expand Up @@ -252,7 +256,10 @@ class SakServiceImpl(
return sak
}

override fun oppdaterIdentForSak(sak: Sak): Sak {
override fun oppdaterIdentForSak(
sak: Sak,
bruker: BrukerTokenInfo,
): Sak {
val identListe = runBlocking { pdltjenesterKlient.hentPdlFolkeregisterIdenter(sak.ident) }

val alleIdenter = identListe.identifikatorer.map { it.folkeregisterident.value }
Expand All @@ -269,6 +276,15 @@ class SakServiceImpl(

dao.oppdaterIdent(sak.id, gjeldendeIdent)

runBlocking {
val oppdatertPersongalleri =
grunnlagService
.hentPersongalleri(sak.id)
.copy(soeker = gjeldendeIdent.value)

grunnlagService.leggInnNyttGrunnlagSak(sak, oppdatertPersongalleri, bruker)
}

logger.info("Oppdaterte sak ${sak.id} med bruker sin nyeste ident. Se sikkerlogg for detailjer")
sikkerLogg.info(
"Oppdaterte sak ${sak.id}: Endret ident fra ${sak.ident} til ${gjeldendeIdent.value}. " +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -574,7 +574,7 @@ class BehandlingFactoryTest {

val opprettBehandlingSlot = slot<OpprettBehandling>()
every { behandlingDaoMock.opprettBehandling(capture(opprettBehandlingSlot)) } just runs
coEvery { grunnlagService.hentPersongalleri(avslaattFoerstegangsbehandling.id) } returns Persongalleri(sak.ident)
coEvery { grunnlagService.hentPersongalleri(sak.id) } returns Persongalleri(sak.ident)
coEvery { grunnlagService.leggInnNyttGrunnlag(any(), any(), any()) } just runs
every {
oppgaveService.opprettFoerstegangsbehandlingsOppgaveForInnsendtSoeknad(
Expand Down Expand Up @@ -630,7 +630,7 @@ class BehandlingFactoryTest {
vilkaarsvurderingService.kopierVilkaarsvurdering(any(), any(), any())
}
coVerify {
grunnlagService.hentPersongalleri(avslaattFoerstegangsbehandling.id)
grunnlagService.hentPersongalleri(sak.id)
grunnlagService.leggInnNyttGrunnlag(any(), any(), any())
}
}
Expand Down Expand Up @@ -658,7 +658,7 @@ class BehandlingFactoryTest {

val opprettBehandlingSlot = slot<OpprettBehandling>()
every { behandlingDaoMock.opprettBehandling(capture(opprettBehandlingSlot)) } just runs
coEvery { grunnlagService.hentPersongalleri(avslaattFoerstegangsbehandling.id) } returns Persongalleri(sak.ident)
coEvery { grunnlagService.hentPersongalleri(sak.id) } returns Persongalleri(sak.ident)
coEvery { grunnlagService.leggInnNyttGrunnlag(any(), any(), any()) } just runs
every {
oppgaveService.opprettFoerstegangsbehandlingsOppgaveForInnsendtSoeknad(
Expand Down Expand Up @@ -706,7 +706,7 @@ class BehandlingFactoryTest {
behandlingDaoMock.lagreGyldighetsproeving(opprettetBehandling.id, any())
}
coVerify {
grunnlagService.hentPersongalleri(avslaattFoerstegangsbehandling.id)
grunnlagService.hentPersongalleri(sak.id)
grunnlagService.leggInnNyttGrunnlag(any(), any(), any())
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,15 @@ class GrunnlagKlientTest : GrunnlagKlient {
return grunnlagsOpplysningMedPersonopplysning(personopplysning)
}

override suspend fun hentPersongalleri(sakId: SakId): Persongalleri =
Persongalleri(
"soeker",
"innsender",
listOf("soesken"),
listOf("avdoed"),
listOf("gjenlevende"),
)

override suspend fun hentPersongalleri(
behandlingId: UUID,
brukerTokenInfo: BrukerTokenInfo,
Expand All @@ -122,22 +131,6 @@ class GrunnlagKlientTest : GrunnlagKlient {
),
)

override suspend fun hentPersongalleri(behandlingId: UUID): Grunnlagsopplysning<Persongalleri>? =
Grunnlagsopplysning(
id = UUID.randomUUID(),
kilde = Grunnlagsopplysning.Privatperson("fnr", Tidspunkt.now()),
meta = emptyMap<String, String>().toObjectNode(),
opplysningType = Opplysningstype.PERSONGALLERI_V1,
opplysning =
Persongalleri(
"soeker",
"innsender",
listOf("soesken"),
listOf("avdoed"),
listOf("gjenlevende"),
),
)

override suspend fun hentGrunnlagForSak(
sakId: SakId,
brukerTokenInfo: BrukerTokenInfo,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ internal class SakRoutesTest {
)

every { sakService.finnSak(any()) } returns sak
every { sakService.oppdaterIdentForSak(any()) } returns sak.copy(ident = nyIdent.value)
every { sakService.oppdaterIdentForSak(any(), any()) } returns sak.copy(ident = nyIdent.value)
val behandlingOgSak = BehandlingOgSak(UUID.randomUUID(), sakId)
every { behandlingService.hentAapneBehandlingerForSak(sakId) } returns listOf(behandlingOgSak)

Expand All @@ -248,7 +248,7 @@ internal class SakRoutesTest {

verify(exactly = 1) {
sakService.finnSak(sakId)
sakService.oppdaterIdentForSak(sak)
sakService.oppdaterIdentForSak(sak, any())
behandlingService.hentAapneBehandlingerForSak(sakId)
behandlingService.avbrytBehandling(
behandlingOgSak.behandlingId,
Expand Down
22 changes: 14 additions & 8 deletions apps/etterlatte-behandling/src/test/kotlin/sak/SakServiceTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import no.nav.etterlatte.common.klienter.SkjermingKlient
import no.nav.etterlatte.funksjonsbrytere.FeatureToggleService
import no.nav.etterlatte.ktor.token.simpleSaksbehandler
import no.nav.etterlatte.libs.common.behandling.PersonMedSakerOgRoller
import no.nav.etterlatte.libs.common.behandling.Persongalleri
import no.nav.etterlatte.libs.common.behandling.SakType
import no.nav.etterlatte.libs.common.behandling.SakidOgRolle
import no.nav.etterlatte.libs.common.behandling.Saksrolle
Expand All @@ -47,6 +48,7 @@ import no.nav.etterlatte.libs.common.person.PdlFolkeregisterIdentListe
import no.nav.etterlatte.libs.common.person.PdlIdentifikator
import no.nav.etterlatte.libs.common.person.PersonIdent
import no.nav.etterlatte.libs.common.sak.Sak
import no.nav.etterlatte.libs.common.sak.SakId
import no.nav.etterlatte.libs.common.sak.SakMedGraderingOgSkjermet
import no.nav.etterlatte.libs.ktor.token.BrukerTokenInfo
import no.nav.etterlatte.libs.ktor.token.Claims
Expand Down Expand Up @@ -89,7 +91,7 @@ internal class SakServiceTest {
grunnlagservice,
krrKlient,
pdlTjenesterKlient,
featureToggleService
featureToggleService,
)

@BeforeEach
Expand Down Expand Up @@ -833,7 +835,7 @@ internal class SakServiceTest {
)

assertThrows<InternfeilException> {
service.oppdaterIdentForSak(sak)
service.oppdaterIdentForSak(sak, simpleSaksbehandler())
}

coVerify(exactly = 1) {
Expand All @@ -859,7 +861,7 @@ internal class SakServiceTest {
)

assertThrows<InternfeilException> {
service.oppdaterIdentForSak(sak)
service.oppdaterIdentForSak(sak, simpleSaksbehandler())
}

coVerify(exactly = 1) {
Expand All @@ -876,6 +878,8 @@ internal class SakServiceTest {
fun `Bruker har historisk ident`() {
val sak = dummySak(ident = KONTANT_FOT.value, SakType.OMSTILLINGSSTOENAD)

val persongalleri = Persongalleri("soeker", "innsender", listOf("soesken"), listOf("avdoed"))

coEvery { pdlTjenesterKlient.hentPdlFolkeregisterIdenter(any()) } returns
PdlFolkeregisterIdentListe(
listOf(
Expand All @@ -885,8 +889,9 @@ internal class SakServiceTest {
)
justRun { sakSkrivDao.oppdaterIdent(any(), any()) }
every { sakLesDao.hentSak(any()) } returns sak.copy(ident = JOVIAL_LAMA.value)
coEvery { grunnlagservice.hentPersongalleri(any<SakId>()) } returns persongalleri

val oppdatertSak = service.oppdaterIdentForSak(sak)
val oppdatertSak = service.oppdaterIdentForSak(sak, simpleSaksbehandler())

oppdatertSak.id shouldBe sak.id
oppdatertSak.enhet shouldBe sak.enhet
Expand All @@ -897,6 +902,7 @@ internal class SakServiceTest {

coVerify(exactly = 1) {
pdlTjenesterKlient.hentPdlFolkeregisterIdenter(sak.ident)
grunnlagservice.leggInnNyttGrunnlagSak(sak, persongalleri.copy(soeker = oppdatertSak.ident), any())
}

verify(exactly = 1) {
Expand All @@ -920,10 +926,10 @@ internal class SakServiceTest {
private fun dummyPdlResponse(ident: String) =
PdlFolkeregisterIdentListe(
identifikatorer =
listOf(
PdlIdentifikator.FolkeregisterIdent(
folkeregisterident = Folkeregisteridentifikator.of(ident),
listOf(
PdlIdentifikator.FolkeregisterIdent(
folkeregisterident = Folkeregisteridentifikator.of(ident),
),
),
),
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ interface GrunnlagService {

fun hentOpplysningsgrunnlagForSak(sakId: SakId): Grunnlag?

fun hentPersongalleri(sakId: SakId): Persongalleri?

fun hentOpplysningsgrunnlag(behandlingId: UUID): Grunnlag?

fun hentPersonopplysninger(
Expand Down Expand Up @@ -142,6 +144,17 @@ class RealGrunnlagService(
return OpplysningsgrunnlagMapper(grunnlag, persongalleri).hentGrunnlag()
}

override fun hentPersongalleri(sakId: SakId): Persongalleri? {
val persongalleriJsonNode =
opplysningDao.finnNyesteGrunnlagForSak(sakId, PERSONGALLERI_V1)?.opplysning

if (persongalleriJsonNode == null) {
logger.info("Fant ikke persongalleri i sak=$sakId")
return null
}
return objectMapper.readValue(persongalleriJsonNode.opplysning.toJson(), Persongalleri::class.java)
}

override fun hentOpplysningsgrunnlag(behandlingId: UUID): Grunnlag? {
val persongalleriJsonNode =
opplysningDao.finnNyesteGrunnlagForBehandling(behandlingId, PERSONGALLERI_V1)?.opplysning
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,16 @@ fun Route.sakGrunnlagRoute(
}
}

get("/persongalleri") {
withSakId(behandlingKlient) { sakId ->
val persongalleri =
grunnlagService.hentPersongalleri(sakId)
?: throw GenerellIkkeFunnetException()

call.respond(persongalleri)
}
}

post("opprett-grunnlag") {
withSakId(behandlingKlient, skrivetilgang = true) { sakId ->
val opplysningsbehov = call.receive<Opplysningsbehov>()
Expand Down

0 comments on commit b755d50

Please sign in to comment.