Skip to content

Commit

Permalink
EY-4760 Støtte oppdatering av fnr på sak (#6429)
Browse files Browse the repository at this point in the history
* EY-4777 Fikser hendelser for endret fnr

* oppdatere pdltjenester slik at riktig fnr blir returnert

* logg for testing

* oppdatere visning av fnr samsvar i frontend

* Revert "logg for testing"

This reverts commit b740d65.

* EY-4760 Støtte oppdatering av fnr på sak

* fikse småting iht. kommentarer

* oppdatere tester + bedre dekning

* småting iht kommentarer

* oppdatere toggle iht endret bruk av toggles

* fjerne console.log
  • Loading branch information
Watercolours authored Nov 26, 2024
1 parent ffe1e49 commit f1e1ae9
Show file tree
Hide file tree
Showing 18 changed files with 569 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,10 @@ class GrunnlagsendringshendelseDao(
}
}

fun arkiverGrunnlagsendringStatus(hendelse: Grunnlagsendringshendelse) {
fun arkiverGrunnlagsendringStatus(
hendelseId: UUID,
kommentar: String?,
) {
connectionAutoclosing.hentConnection {
with(it) {
prepareStatement(
Expand All @@ -124,9 +127,9 @@ class GrunnlagsendringshendelseDao(
WHERE id = ?
""".trimIndent(),
).use {
it.setString(1, hendelse.kommentar)
it.setString(1, kommentar)
it.setString(2, GrunnlagsendringStatus.VURDERT_SOM_IKKE_RELEVANT.toString())
it.setObject(3, hendelse.id)
it.setObject(3, hendelseId)
it.executeUpdate()
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,20 +81,19 @@ class GrunnlagsendringshendelseService(
}

fun arkiverHendelseMedKommentar(
hendelse: Grunnlagsendringshendelse,
hendelseId: UUID,
kommentar: String?,
saksbehandler: Saksbehandler,
) {
logger.info("Arkiverer hendelse med id ${hendelse.id}")
logger.info("Arkiverer hendelse med id $hendelseId")

inTransaction {
grunnlagsendringshendelseDao.arkiverGrunnlagsendringStatus(hendelse = hendelse)
grunnlagsendringshendelseDao.arkiverGrunnlagsendringStatus(hendelseId, kommentar)

oppgaveService.ferdigStillOppgaveUnderBehandling(
referanse = hendelse.id.toString(),
type = OppgaveType.VURDER_KONSEKVENS,
saksbehandler = saksbehandler,
)
}
oppgaveService.ferdigStillOppgaveUnderBehandling(
referanse = hendelseId.toString(),
type = OppgaveType.VURDER_KONSEKVENS,
saksbehandler = saksbehandler,
)
}

fun settHendelseTilHistorisk(behandlingId: UUID) {
Expand Down
25 changes: 25 additions & 0 deletions apps/etterlatte-behandling/src/main/kotlin/oppgave/OppgaveDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,11 @@ interface OppgaveDao {
enhet: Enhetsnummer,
)

fun oppdaterIdent(
oppgaveId: UUID,
nyttFnr: String,
)

fun fjernSaksbehandler(oppgaveId: UUID)

fun settForrigeSaksbehandlerFraSaksbehandler(oppgaveId: UUID)
Expand Down Expand Up @@ -471,6 +476,26 @@ class OppgaveDaoImpl(
}
}

override fun oppdaterIdent(
oppgaveId: UUID,
nyttFnr: String,
) {
connectionAutoclosing.hentConnection {
with(it) {
prepareStatement(
"""
UPDATE oppgave
SET fnr = ?
WHERE id = ?::UUID
""".trimIndent(),
).apply {
setString(1, nyttFnr)
setObject(2, oppgaveId)
}.executeUpdate()
}
}
}

override fun fjernForrigeSaksbehandler(oppgaveId: UUID) {
connectionAutoclosing.hentConnection {
with(it) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,15 @@ class OppgaveDaoMedEndringssporingImpl(
}
}

override fun oppdaterIdent(
oppgaveId: UUID,
nyttFnr: String,
) {
lagreEndringerPaaOppgave(oppgaveId) {
oppgaveDao.oppdaterIdent(oppgaveId, nyttFnr)
}
}

override fun fjernSaksbehandler(oppgaveId: UUID) {
lagreEndringerPaaOppgave(oppgaveId) {
oppgaveDao.fjernSaksbehandler(oppgaveId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,17 @@ class OppgaveService(
}
}

fun oppdaterIdentForOppgaver(sak: Sak) {
logger.info("Oppdaterer ident på oppgaver som ikke er avsluttet på sak ${sak.id}")

oppgaveDao
.hentOppgaverForSakMedType(sak.id, OppgaveType.entries)
.filterNot(OppgaveIntern::erAvsluttet)
.forEach {
oppgaveDao.oppdaterIdent(it.id, sak.ident)
}
}

fun oppdaterEnhetForRelaterteOppgaver(sakerMedNyEnhet: List<SakMedEnhet>) {
sakerMedNyEnhet.forEach {
fjernSaksbehandlerFraOppgaveVedFlytt(it.id)
Expand Down
55 changes: 51 additions & 4 deletions apps/etterlatte-behandling/src/main/kotlin/sak/SakRoutes.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import no.nav.etterlatte.grunnlagsendring.GrunnlagsendringshendelseService
import no.nav.etterlatte.grunnlagsendring.SakMedEnhet
import no.nav.etterlatte.inTransaction
import no.nav.etterlatte.libs.common.Enhetsnummer
import no.nav.etterlatte.libs.common.behandling.AarsakTilAvbrytelse
import no.nav.etterlatte.libs.common.behandling.FoersteVirkDto
import no.nav.etterlatte.libs.common.behandling.SakType
import no.nav.etterlatte.libs.common.behandling.SisteIverksatteBehandling
Expand All @@ -39,6 +40,7 @@ import no.nav.etterlatte.oppgave.OppgaveService
import no.nav.etterlatte.tilgangsstyring.kunSaksbehandlerMedSkrivetilgang
import no.nav.etterlatte.tilgangsstyring.withFoedselsnummerInternal
import org.slf4j.LoggerFactory
import java.util.UUID

const val KJOERING = "kjoering"
const val ANTALL = "antall"
Expand Down Expand Up @@ -208,6 +210,47 @@ internal fun Route.sakWebRoutes(
)
}

post("/oppdater-ident") {
kunSaksbehandlerMedSkrivetilgang { saksbehandler ->
val hendelseId =
call.request.queryParameters["hendelseId"]?.let(UUID::fromString)
?: throw UgyldigForespoerselException("HENDELSE_ID_MANGLER", "HendelseID mangler")

val oppdatertSak =
inTransaction {
val sak =
sakService.finnSak(sakId)
?: throw SakIkkeFunnetException("Fant ikke sak med id=$sakId")

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

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

behandlingService.hentAapneBehandlingerForSak(sakId).forEach {
behandlingService.avbrytBehandling(
behandlingId = it.behandlingId,
saksbehandler = brukerTokenInfo,
aarsak = AarsakTilAvbrytelse.ENDRET_FOLKEREGISTERIDENT,
kommentar =
"Avbrytes pga. overføring av sak fra fnr. ${sak.ident} " +
"til ny ident ${oppdatertSak.ident}",
)
}

grunnlagsendringshendelseService.arkiverHendelseMedKommentar(
hendelseId = hendelseId,
kommentar = "Sak er oppdatert med ny ident på bruker (fra=${sak.ident}, til=${oppdatertSak.ident})",
saksbehandler = saksbehandler,
)

oppdatertSak
}

call.respond(oppdatertSak)
}
}

post("/endre_enhet") {
kunSaksbehandlerMedSkrivetilgang { navIdent ->
val enhetrequest = call.receive<EnhetRequest>()
Expand Down Expand Up @@ -324,10 +367,14 @@ internal fun Route.sakWebRoutes(
post("arkivergrunnlagsendringshendelse") {
kunSaksbehandler { saksbehandler ->
val arkivertHendelse = call.receive<Grunnlagsendringshendelse>()
grunnlagsendringshendelseService.arkiverHendelseMedKommentar(
hendelse = arkivertHendelse,
saksbehandler,
)

inTransaction {
grunnlagsendringshendelseService.arkiverHendelseMedKommentar(
hendelseId = arkivertHendelse.id,
kommentar = arkivertHendelse.kommentar,
saksbehandler = saksbehandler,
)
}
call.respond(HttpStatusCode.OK)
}
}
Expand Down
37 changes: 36 additions & 1 deletion apps/etterlatte-behandling/src/main/kotlin/sak/SakService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ interface SakService {
sakId: SakId,
bruker: Systembruker,
): SakMedGraderingOgSkjermet

fun oppdaterIdentForSak(sak: Sak): Sak
}

class ManglerTilgangTilEnhet(
Expand Down Expand Up @@ -218,7 +220,13 @@ class SakServiceImpl(
): Sak {
val sak = finnEllerOpprettSak(fnr, type, overstyrendeEnhet)

runBlocking { grunnlagService.leggInnNyttGrunnlagSak(sak, Persongalleri(sak.ident), HardkodaSystembruker.opprettGrunnlag) }
runBlocking {
grunnlagService.leggInnNyttGrunnlagSak(
sak,
Persongalleri(sak.ident),
HardkodaSystembruker.opprettGrunnlag,
)
}
val kilde = Grunnlagsopplysning.Gjenny(Fagsaksystem.EY.navn, Tidspunkt.now())
val spraak = hentSpraak(sak.ident)
val spraakOpplysning = lagOpplysning(Opplysningstype.SPRAAK, kilde, spraak.verdi.toJsonNode())
Expand All @@ -232,6 +240,33 @@ class SakServiceImpl(
return sak
}

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

val alleIdenter = identListe.identifikatorer.map { it.folkeregisterident.value }
if (sak.ident !in alleIdenter) {
sikkerLogg.error("Ident ${sak.ident} fra sak ${sak.id} matcher ingen av identene fra PDL: $alleIdenter")
throw InternfeilException(
"Ident i sak ${sak.id} stemmer ikke overens med identer vi fikk fra PDL",
)
}

val gjeldendeIdent =
identListe.identifikatorer.singleOrNull { !it.historisk }?.folkeregisterident
?: throw InternfeilException("Sak ${sak.id} har flere eller ingen gyldige identer samtidig. Kan ikke oppdatere ident.")

dao.oppdaterIdent(sak.id, gjeldendeIdent)

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}. " +
"Alle identer fra PDL: ${identListe.identifikatorer.joinToString()}",
)

return lesDao.hentSak(sak.id)
?: throw InternfeilException("Kunne ikke hente ut sak ${sak.id} som nettopp ble endret")
}

private fun hentSpraak(fnr: String): Spraak {
val kontaktInfo =
runBlocking {
Expand Down
20 changes: 20 additions & 0 deletions apps/etterlatte-behandling/src/main/kotlin/sak/SakSkrivDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import no.nav.etterlatte.libs.common.Enhetsnummer
import no.nav.etterlatte.libs.common.behandling.SakType
import no.nav.etterlatte.libs.common.feilhaandtering.checkInternFeil
import no.nav.etterlatte.libs.common.person.AdressebeskyttelseGradering
import no.nav.etterlatte.libs.common.person.Folkeregisteridentifikator
import no.nav.etterlatte.libs.common.sak.Sak
import no.nav.etterlatte.libs.common.sak.SakId
import no.nav.etterlatte.libs.common.tidspunkt.Tidspunkt
Expand Down Expand Up @@ -69,6 +70,25 @@ class SakSkrivDao(
}
}

fun oppdaterIdent(
sakId: SakId,
nyIdent: Folkeregisteridentifikator,
) {
sakendringerDao.lagreEndringerPaaSak(sakId, "oppdaterIdent") {
it
.prepareStatement(
"""
UPDATE sak
SET fnr = ?
WHERE id = ?
""".trimIndent(),
).apply {
setString(1, nyIdent.value)
setLong(2, sakId.sakId)
}.executeUpdate()
}
}

fun oppdaterEnheterPaaSaker(saker: List<SakMedEnhet>) {
sakendringerDao.lagreEndringerPaaSaker(saker.map { it.id }, "oppdaterEnheterPaaSaker") {
with(it) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package no.nav.etterlatte
TRUNCATE behandlinghendelse CASCADE;
TRUNCATE grunnlagsendringshendelse CASCADE;
TRUNCATE sak CASCADE;
TRUNCATE endringer CASCADE;
TRUNCATE oppgave CASCADE;
TRUNCATE tilbakekrevingsperiode CASCADE;
TRUNCATE tilbakekreving CASCADE;
Expand Down
Loading

0 comments on commit f1e1ae9

Please sign in to comment.