-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
legg til endepunkt for å patche ident på fagsak som ikke har behandli…
…ng (#5085) ### 💰 Hva skal gjøres, og hvorfor? [Favro](https://favro.com/organization/98c34fb974ce445eac854de0/1844bbac3b6605eacc8f5543?card=NAV-24063) Vi har mange fagsaker i prod som ikke har noen behandlinger på seg. Disse har ofte feil identer og kan skape trøbbel i fremtiden. Ønsker å gå gjennom alle og patche identene. Legger til to midlertidige endepunkter ett for å finne fagsaker som må oppdateres og ett for å faktisk oppdatere de. Da har vi kontroll på hvilke og hvor mange vi tar om gangen osv. Fjerner endepunktene når jobben er gjort ### ✅ Checklist _Har du husket alle punktene i listen?_ - [ ] Jeg har testet mine endringer i henhold til akseptansekriteriene 🕵️ - [ ] Jeg har config- eller sql-endringer. I så fall, husk manuell deploy til miljø for å verifisere endringene. - [ ] Jeg har skrevet tester. Hvis du ikke har skrevet tester, beskriv hvorfor under 👇 _Jeg har ikke skrevet tester fordi:_ Har testet i dev og koden skal slettes i fremtiden da den ikke trengs --------- Signed-off-by: FredrikP <[email protected]>
- Loading branch information
Showing
8 changed files
with
236 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
91 changes: 91 additions & 0 deletions
91
src/main/kotlin/no/nav/familie/ba/sak/task/PatchIdentFagsakUtenBehandling.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
package no.nav.familie.ba.sak.task | ||
|
||
import no.nav.familie.ba.sak.common.secureLogger | ||
import no.nav.familie.ba.sak.integrasjoner.pdl.PdlIdentRestClient | ||
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.hentAktivAktørId | ||
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.hentAktivFødselsnummer | ||
import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingRepository | ||
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakRepository | ||
import no.nav.familie.ba.sak.kjerne.personident.AktørIdRepository | ||
import no.nav.familie.ba.sak.kjerne.personident.AktørMergeLogg | ||
import no.nav.familie.ba.sak.kjerne.personident.AktørMergeLoggRepository | ||
import no.nav.familie.ba.sak.kjerne.personident.PersonidentRepository | ||
import no.nav.familie.ba.sak.kjerne.personident.PersonidentService | ||
import no.nav.familie.kontrakter.felles.objectMapper | ||
import no.nav.familie.prosessering.AsyncTaskStep | ||
import no.nav.familie.prosessering.TaskStepBeskrivelse | ||
import no.nav.familie.prosessering.domene.Task | ||
import org.springframework.stereotype.Service | ||
import java.time.LocalDateTime | ||
|
||
@Service | ||
@TaskStepBeskrivelse( | ||
taskStepType = PatchIdentFagsakUtenBehandling.TASK_STEP_TYPE, | ||
beskrivelse = "Patcher ident på fagsak uten behandling hvis identen er utdatert", | ||
maxAntallFeil = 1, | ||
settTilManuellOppfølgning = true, | ||
) | ||
class PatchIdentFagsakUtenBehandling( | ||
private val fagsakRepository: FagsakRepository, | ||
private val behandlingRepository: BehandlingRepository, | ||
private val pdlIdentRestClient: PdlIdentRestClient, | ||
private val personidentRepository: PersonidentRepository, | ||
private val aktørIdRepository: AktørIdRepository, | ||
private val personidentService: PersonidentService, | ||
private val aktørMergeLoggRepository: AktørMergeLoggRepository, | ||
) : AsyncTaskStep { | ||
override fun doTask(task: Task) { | ||
val fagsakId = objectMapper.readValue(task.payload, Long::class.java) | ||
|
||
// Valider at fagsak ikke har behandlinger | ||
val behandlingerPåFagsak = behandlingRepository.finnBehandlinger(fagsakId) | ||
if (behandlingerPåFagsak.isNotEmpty()) { | ||
throw IllegalArgumentException("Fagsak $fagsakId har behandlinger og burde patches på en annen måte") | ||
} | ||
|
||
// Valider at identen på fagsaken er utdatert | ||
val fagsak = fagsakRepository.finnFagsak(fagsakId) ?: throw IllegalArgumentException("Fagsak $fagsakId eksisterer ikke") | ||
val aktivPersonIdent = fagsak.aktør.aktivFødselsnummer() | ||
|
||
val identInformasjonFraPdl = pdlIdentRestClient.hentIdenter(personIdent = aktivPersonIdent, historikk = true) | ||
val erIdentPåFagsakAjourMedPdl = | ||
identInformasjonFraPdl.none { identFraPdl -> | ||
identFraPdl.historisk && identFraPdl.ident == aktivPersonIdent | ||
} | ||
if (erIdentPåFagsakAjourMedPdl) { | ||
return | ||
} | ||
|
||
secureLogger.info("Patcher aktør med id ${fagsak.aktør.aktørId} på fagsak $fagsakId") | ||
val nyPersonIdent = identInformasjonFraPdl.hentAktivFødselsnummer() | ||
|
||
val personidentNyttFødselsnummer = personidentRepository.findByFødselsnummerOrNull(nyPersonIdent) | ||
if (personidentNyttFødselsnummer != null) error("Fant allerede en personident for nytt fødselsnummer") | ||
|
||
// Patch hvis utdatert - trekk ut funksjonalitet fra PatchMergetIdentTask | ||
// Denne patcher med å bruke on cascade update på aktørid | ||
val eksisterendeAktørPåFagsak = fagsak.aktør.aktørId | ||
aktørIdRepository.patchAktørMedNyAktørId( | ||
gammelAktørId = eksisterendeAktørPåFagsak, | ||
nyAktørId = identInformasjonFraPdl.hentAktivAktørId(), | ||
) | ||
|
||
// Etter at alle fk_aktoer_id har blitt oppgradert alle steder, så vil personident ha det gamle fødselsnummeret. | ||
// Ved å kalle hentOgLagre, så vil den gamle personidenten-raden bli deaktivert og ny med riktig fødselsnummer | ||
// vil bli oppdatert | ||
val nyAktør = personidentService.hentOgLagreAktør(ident = nyPersonIdent, lagre = true) | ||
|
||
aktørMergeLoggRepository.save( | ||
AktørMergeLogg( | ||
fagsakId = fagsakId, | ||
historiskAktørId = eksisterendeAktørPåFagsak, | ||
nyAktørId = nyAktør.aktørId, | ||
mergeTidspunkt = LocalDateTime.now(), | ||
), | ||
) | ||
} | ||
|
||
companion object { | ||
const val TASK_STEP_TYPE = "PatchIdentFagsakUtenBehandling" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
76 changes: 76 additions & 0 deletions
76
...ter/kotlin/no/nav/familie/ba/sak/kjerne/personident/PersonIdentServiceIntegrasjonsTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
package no.nav.familie.ba.sak.kjerne.personident | ||
|
||
import io.mockk.every | ||
import io.mockk.mockk | ||
import no.nav.familie.ba.sak.config.AbstractSpringIntegrationTest | ||
import no.nav.familie.ba.sak.config.TaskRepositoryWrapper | ||
import no.nav.familie.ba.sak.config.tilAktør | ||
import no.nav.familie.ba.sak.datagenerator.lagBehandlingUtenId | ||
import no.nav.familie.ba.sak.datagenerator.lagFagsakUtenId | ||
import no.nav.familie.ba.sak.datagenerator.randomFnr | ||
import no.nav.familie.ba.sak.integrasjoner.pdl.PdlIdentRestClient | ||
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.IdentInformasjon | ||
import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingRepository | ||
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakRepository | ||
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakService | ||
import org.assertj.core.api.Assertions.assertThat | ||
import org.junit.jupiter.api.Test | ||
import org.springframework.beans.factory.annotation.Autowired | ||
|
||
class PersonIdentServiceIntegrasjonsTest( | ||
@Autowired | ||
private val aktørIdRepository: AktørIdRepository, | ||
@Autowired | ||
private val behandlingRepository: BehandlingRepository, | ||
@Autowired | ||
private val fagsakService: FagsakService, | ||
@Autowired | ||
private val personidentRepository: PersonidentRepository, | ||
@Autowired | ||
private val taskRepository: TaskRepositoryWrapper, | ||
@Autowired | ||
private val fagsakRepository: FagsakRepository, | ||
) : AbstractSpringIntegrationTest() { | ||
private val pdlIdentRestClient: PdlIdentRestClient = mockk() | ||
|
||
val personIdentService = | ||
PersonidentService( | ||
personidentRepository = personidentRepository, | ||
aktørIdRepository = aktørIdRepository, | ||
pdlIdentRestClient = pdlIdentRestClient, | ||
taskRepository = taskRepository, | ||
fagsakRepository = fagsakRepository, | ||
) | ||
|
||
@Test | ||
fun `hentFagsakerUtenBehandlingMedUtdatertIdent henter kun ut fagsaker som har utdatert ident`() { | ||
// Arrange | ||
val utdatertAktør = tilAktør(randomFnr()) | ||
val oppdatertAktør = tilAktør(randomFnr()) | ||
val aktørPåFagsakMedBehandling = tilAktør(randomFnr()) | ||
aktørIdRepository.saveAll(listOf(utdatertAktør, oppdatertAktør, aktørPåFagsakMedBehandling)) | ||
|
||
val identInformasjonFraPdl = | ||
listOf( | ||
IdentInformasjon(oppdatertAktør.aktørId, false, "AKTORID"), | ||
IdentInformasjon(oppdatertAktør.aktivFødselsnummer(), false, "FOLKEREGISTERIDENT"), | ||
IdentInformasjon(utdatertAktør.aktørId, true, "AKTORID"), | ||
IdentInformasjon(utdatertAktør.aktivFødselsnummer(), true, "FOLKEREGISTERIDENT"), | ||
) | ||
|
||
val fagsakSomHarUtdatertAktør = fagsakService.lagre(lagFagsakUtenId(aktør = utdatertAktør)) | ||
val fagsakSomHarOppdatertAktør = fagsakService.lagre(lagFagsakUtenId(aktør = oppdatertAktør)) | ||
val fagsakSomHarBehandling = fagsakService.lagre(lagFagsakUtenId(aktør = aktørPåFagsakMedBehandling)) | ||
|
||
behandlingRepository.save(lagBehandlingUtenId(fagsak = fagsakSomHarBehandling)) | ||
|
||
every { pdlIdentRestClient.hentIdenter(utdatertAktør.aktivFødselsnummer(), historikk = true) } returns identInformasjonFraPdl | ||
every { pdlIdentRestClient.hentIdenter(oppdatertAktør.aktivFødselsnummer(), historikk = true) } returns identInformasjonFraPdl | ||
|
||
// Act | ||
val faktiskeFagsakIder = personIdentService.finnFagsakerUtenBehandlingMedUtdatertIdent() | ||
|
||
// Assert | ||
assertThat(faktiskeFagsakIder).isEqualTo(setOf(fagsakSomHarUtdatertAktør.id)) | ||
} | ||
} |