Skip to content

Commit

Permalink
tillat patching av identer når fødselsdato endrer seg mindre enn én m…
Browse files Browse the repository at this point in the history
…åned (#4818)

tillat patching av identer når fødselsdato endrer seg mindre enn én
måned eller det er søkers fødselsdato og fagsak ikke er enslig
mindreårig

### 💰 Hva skal gjøres, og hvorfor?
Når fødselsdatoen endrer seg mindre enn én måned eller det er søkers
fødselsdato som endrer seg (og det ikke er en enslig-mindreårig-sak) så
vil ikke endringen i fødselsdato påvirke saken. Vi ønsker derfor å
tillate automatisk patching av identer i disse tilfellene.

### ✅ Checklist
_Har du husket alle punktene i listen?_
- [x] 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.
- [x] Jeg har skrevet tester. Hvis du ikke har skrevet tester, beskriv
hvorfor under 👇

---------

Signed-off-by: FredrikP <[email protected]>
  • Loading branch information
fredrikpf authored Oct 10, 2024
1 parent 43cf2f5 commit c20a254
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,17 @@ package no.nav.familie.ba.sak.kjerne.personident

import no.nav.familie.ba.sak.common.Feil
import no.nav.familie.ba.sak.common.secureLogger
import no.nav.familie.ba.sak.common.toYearMonth
import no.nav.familie.ba.sak.integrasjoner.pdl.PdlRestClient
import no.nav.familie.ba.sak.integrasjoner.pdl.PersonInfoQuery
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.IdentInformasjon
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.integrasjoner.pdl.domene.hentAktørIder
import no.nav.familie.ba.sak.kjerne.behandling.BehandlingHentOgPersisterService
import no.nav.familie.ba.sak.kjerne.fagsak.Fagsak
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakService
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakType
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersongrunnlagService
import no.nav.familie.ba.sak.kjerne.personident.PersonidentService.Companion.logger
import no.nav.familie.ba.sak.task.OpprettTaskService
Expand Down Expand Up @@ -37,22 +40,22 @@ class HåndterNyIdentService(

val aktørId = identerFraPdl.hentAktivAktørId()
val aktør = aktørIdRepository.findByAktørIdOrNull(aktørId)
val aktuellFagsakIdVedMerging = hentAktuellFagsakId(identerFraPdl)
val aktuellFagsakVedMerging = hentAktuellFagsak(identerFraPdl)

return when {
// Personen er ikke i noen fagsaker
aktuellFagsakIdVedMerging == null -> aktør
aktuellFagsakVedMerging == null -> aktør

// Ny aktørId, nytt fødselsnummer -> begge håndteres i PatchMergetIdentTask
aktør == null -> {
validerUendretFødselsdatoFraForrigeBehandling(identerFraPdl, aktuellFagsakIdVedMerging)
opprettMergeIdentTask(aktuellFagsakIdVedMerging, identerFraPdl)
validerUendretFødselsdatoFraForrigeBehandling(identerFraPdl, aktuellFagsakVedMerging)
opprettMergeIdentTask(aktuellFagsakVedMerging.id, identerFraPdl)
null
}

// Samme aktørId, nytt fødselsnummer -> legg til fødselsnummer på aktør
!aktør.harIdent(fødselsnummer = nyIdent.ident) -> {
validerUendretFødselsdatoFraForrigeBehandling(identerFraPdl, aktuellFagsakIdVedMerging)
validerUendretFødselsdatoFraForrigeBehandling(identerFraPdl, aktuellFagsakVedMerging)
logger.info("Legger til ny ident")
secureLogger.info("Legger til ny ident ${nyIdent.ident} på aktør ${aktør.aktørId}")
personIdentService.opprettPersonIdent(aktør, nyIdent.ident, true)
Expand Down Expand Up @@ -88,34 +91,36 @@ class HåndterNyIdentService(
return task
}

private fun hentAktuellFagsakId(alleIdenterFraPdl: List<IdentInformasjon>): Long? {
private fun hentAktuellFagsak(alleIdenterFraPdl: List<IdentInformasjon>): Fagsak? {
val aktørerMedAktivPersonident =
alleIdenterFraPdl
.hentAktørIder()
.mapNotNull { aktørIdRepository.findByAktørIdOrNull(it) }
.filter { aktør -> aktør.personidenter.any { personident -> personident.aktiv } }

val fagsakIder =
val fagsaker =
aktørerMedAktivPersonident
.flatMap { aktør -> fagsakService.hentFagsakerPåPerson(aktør) }
.map { it.id }

if (fagsakIder.toSet().size > 1) {
if (fagsaker.toSet().size > 1) {
throw Feil("Det eksisterer flere fagsaker på identer som skal merges: ${aktørerMedAktivPersonident.first()}. $LENKE_INFO_OM_MERGING")
}

return fagsakIder.firstOrNull()
return fagsaker.firstOrNull()
}

private fun validerUendretFødselsdatoFraForrigeBehandling(
alleIdenterFraPdl: List<IdentInformasjon>,
fagsakId: Long,
fagsak: Fagsak,
) {
// Hvis søkers fødselsdato endrer seg kan vi alltid patche siden det ikke påvirker andeler. Med mindre søker er enslig mindreårig.
if (fagsak.type != FagsakType.BARN_ENSLIG_MINDREÅRIG && fagsak.aktør.aktørId in alleIdenterFraPdl.hentAktørIder()) return

val aktivFødselsnummer = alleIdenterFraPdl.hentAktivFødselsnummer()
val fødselsdatoFraPdl = pdlRestClient.hentPerson(aktivFødselsnummer, PersonInfoQuery.ENKEL).fødselsdato

val forrigeBehandling =
behandlinghentOgPersisterService.hentSisteBehandlingSomErVedtatt(fagsakId)
behandlinghentOgPersisterService.hentSisteBehandlingSomErVedtatt(fagsak.id)
?: return // Hvis det ikke er noen tidligere behandling kan vi patche uansett

val aktørIder = alleIdenterFraPdl.hentAktørIder()
Expand All @@ -124,7 +129,7 @@ class HåndterNyIdentService(
personGrunnlag.personer.singleOrNull { it.aktør.aktørId in aktørIder }?.fødselsdato
?: return // Hvis aktør ikke er med i forrige behandling kan vi patche selv om fødselsdato er ulik

if (fødselsdatoFraPdl != fødselsdatoForrigeBehandling) {
if (fødselsdatoFraPdl.toYearMonth() != fødselsdatoForrigeBehandling.toYearMonth()) {
throw Feil("Fødselsdato er forskjellig fra forrige behandling. Må patche ny ident manuelt. $LENKE_INFO_OM_MERGING")
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ import io.mockk.verify
import no.nav.familie.ba.sak.common.Feil
import no.nav.familie.ba.sak.common.lagBehandling
import no.nav.familie.ba.sak.common.lagPerson
import no.nav.familie.ba.sak.common.randomAktør
import no.nav.familie.ba.sak.common.randomFnr
import no.nav.familie.ba.sak.common.secureLogger
import no.nav.familie.ba.sak.common.sisteDagIMåned
import no.nav.familie.ba.sak.common.tilPersonEnkel
import no.nav.familie.ba.sak.config.TaskRepositoryWrapper
import no.nav.familie.ba.sak.config.tilAktør
Expand All @@ -21,6 +23,7 @@ import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PersonInfo
import no.nav.familie.ba.sak.kjerne.behandling.BehandlingHentOgPersisterService
import no.nav.familie.ba.sak.kjerne.fagsak.Fagsak
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakService
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakType
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersongrunnlagService
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonopplysningGrunnlag
import no.nav.familie.ba.sak.task.OpprettTaskService
Expand All @@ -30,6 +33,7 @@ import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertDoesNotThrow
import org.junit.jupiter.api.assertThrows
import java.time.LocalDate
import java.time.LocalDateTime
Expand Down Expand Up @@ -66,7 +70,7 @@ internal class HåndterNyIdentServiceTest {
val nyttFnr = randomFnr(nyFødselsdato)
val nyAktør = tilAktør(nyttFnr)

val gammelBehandling = lagBehandling()
var gammelBehandling = lagBehandling()

val identInformasjonFraPdl =
listOf(
Expand All @@ -84,7 +88,7 @@ internal class HåndterNyIdentServiceTest {
every { aktørIdRepository.findByAktørIdOrNull(nyAktør.aktørId) } returns null
every { aktørIdRepository.findByAktørIdOrNull(gammelAktør.aktørId) } returns gammelAktør
every { opprettTaskService.opprettTaskForÅPatcheMergetIdent(any()) } returns Task("", "")
every { fagsakService.hentFagsakerPåPerson(any()) } returns listOf(Fagsak(id = 0, aktør = gammelAktør))
every { fagsakService.hentFagsakerPåPerson(any()) } returns listOf(Fagsak(id = 0, aktør = randomAktør()))
every { behandlingHentOgPersisterService.hentSisteBehandlingSomErVedtatt(any()) } returns gammelBehandling
every { persongrunnlagService.hentAktiv(any()) } returns
PersonopplysningGrunnlag(
Expand All @@ -96,7 +100,6 @@ internal class HåndterNyIdentServiceTest {
@Test
fun `håndterNyIdent dropper merging av identer når det ikke eksisterer en fagsak for identer`() {
// arrange
every { fagsakService.hentFagsakDeltager(any()) } returns emptyList()
every { fagsakService.hentFagsakerPåPerson(any()) } returns emptyList()

// act
Expand Down Expand Up @@ -139,7 +142,49 @@ internal class HåndterNyIdentServiceTest {
assertThat(feil.message).startsWith("Fødselsdato er forskjellig fra forrige behandling. Må patche ny ident manuelt.")
}

// behandlinghentOgPersisterService.hentSisteBehandlingSomErVedtatt(fagsakId)
@Test
fun `håndterNyIdent kaster ikke Feil når fødselsdato er endret innenfor samme måned`() {
// arrange
every { pdlRestClient.hentPerson(any<String>(), any()) } returns PersonInfo(fødselsdato = gammelFødselsdato.sisteDagIMåned())

// act & assert
assertDoesNotThrow {
håndterNyIdentService.håndterNyIdent(PersonIdent(nyttFnr))
}
}

@Test
fun `håndterNyIdent kaster ikke Feil når fødselsdato er endret for søker`() {
// arrange
every { pdlRestClient.hentPerson(any<String>(), any()) } returns PersonInfo(fødselsdato = nyFødselsdato)
every { fagsakService.hentFagsakerPåPerson(any()) } returns
listOf(
Fagsak(id = 1, aktør = gammelAktør),
)

// act & assert
assertDoesNotThrow {
håndterNyIdentService.håndterNyIdent(PersonIdent(nyttFnr))
}
}

@Test
fun `håndterNyIdent kaster Feil når fødselsdato er endret for søker i en enslig-mindreårig-sak`() {
// arrange
every { pdlRestClient.hentPerson(any<String>(), any()) } returns PersonInfo(fødselsdato = nyFødselsdato)
every { fagsakService.hentFagsakerPåPerson(any()) } returns
listOf(
Fagsak(id = 1, aktør = gammelAktør, type = FagsakType.BARN_ENSLIG_MINDREÅRIG),
)

// act & assert
val feil =
assertThrows<Feil> {
håndterNyIdentService.håndterNyIdent(PersonIdent(nyttFnr))
}

assertThat(feil.message).startsWith("Fødselsdato er forskjellig fra forrige behandling. Må patche ny ident manuelt.")
}

@Test
fun `håndterNyIdent lager en PatchMergetIdent task ved endret fødselsdato, hvis det ikke er en vedtatt behandling`() {
Expand Down

0 comments on commit c20a254

Please sign in to comment.